al momento puoi risolvere solo cosi': prima di manipolare la parte selezionata salvati in variabile lo scrollTop dell' elemento e ripristinalo dopo la manipolazione
codice:
 /* per Gecko Browser (Firefox, Mozilla 1.7) */
else if(typeof input.selectionStart != 'undefined')
{
/* inserisci codice */
var fromTop=input.scrollTop;
var start = input.selectionStart;
var end = input.selectionEnd;
var insText = input.value.substring(start, end);
input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
/* riposiziona cursore */
var pos;
if (insText.length == 0) {
pos = start + aTag.length;
} else {
pos = start + aTag.length + insText.length + eTag.length;
}
input.selectionStart = pos;
input.selectionEnd = pos;
input.scrollTop=fromTop;
}
ciao