eccole qua, devi usare queste due funzioni

la prima memorizza la posizione corrente, puoi associarla ad esempio ad eventi tipo onBlur, onChange etcetc, in maniera da avere la posizione sempre aggiornata.L'argomento objTxt e' la textarea ovviamente


function storeCaret (objTxt) {
if (objTxt.createTextRange)
objTxt.caretPos = document.selection.createRange().duplicate()

}

Quest'altra invece inserisce il testo che passi come 'text' nella posizione precedentemente memorizzata dall'altra funzione. objTxt e' sempre la textarea in questione.

function insertAtCaret (objTxt, text) {
if (objTxt.createTextRange && objTxt.caretPos) {
var caretPos=objTxt.caretPos;
caretPos.text=caretPos.text.charAt(caretPos.text.l ength - 1) == ' ' ?text + ' ' : text;
}
else
objTxt.value = text;
}

un piccolo esempio:
<textarea name='testCaret'
onBlur='storeCaret(this)'
onChange='storeCaret(this)'
//...altri eventi></textarea>

<input type='button' onClick='insertAtCaret(document.form.testCaret,"un testo di prova")'>

poi ovviamente lo adatterai alle tue esigenze, fammi sapere se e' tutto ok, ho scritto in volata e magari ho postato qualche cavolata

ps:scusa il ritardo