Hola Caricatos.
 
Yo hice el mismo trabajo que tu pero con el foro anterior, y extraje un código que se puede probar directamente. Se lo publiqué a Zeus_bsas aqui mismo y a él no le funciona pero a mi si. 
Mucho te agradecería que probaras lo que envié para saber que sucede. 
En el fondo lo que tu publicas es lo mismo que lo que yo publico: 
Una función es:  
 Código PHP:
    function poner(x) {
if (formulario.textarea.createTextRange 
&& formulario.textarea.caretPos) {
var Posi = formulario.textarea.caretPos;
Posi.text = Posi.text.charAt(Posi.text.length - 1) == ' ' ? x + ' ' : x;
} else {
formulario.textarea.value += x;
}
formulario.textarea.focus();
} 
    
  y la otra es:  
 Código PHP:
     function meter(text) {
   var postopic = document.PostTopic.Message;
   if (postopic.createTextRange && postopic.caretPos) {      
    var caretPos = postopic.caretPos;      
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
   }
   else postopic.value += text;
   postopic.focus(caretPos)
  } 
    
  A mi me funciona...¿y a ti?