Ciao!
Scusa il ritardo ma ho avuto un pò da fare!
Comunque ho avuto qualche problemino con il tuo ultimo script... con IE tutto bene, Firefox3 però mi dava errori sul "txtArea.length".. poi ho cercato un pò... questo lo script finale 
function emoticon(campo, code)
{
var myField = document.getElementById(campo);
var myValue = code;
if (document.selection)
{
// IE
myField.focus();
sel = document.selection.createRange();
sel.text = myValue;
}
else if (myField.selectionStart || myField.selectionStart == '0') {
// MOZILLA/NETSCAPE
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos)
+ myValue
+ myField.value.substring(endPos, myField.value.length);
}
else
{
myField.value += myValue;
}
}
Con lo script scritto in questo modo, "code" viene inserito al posto del testo selezionato, oppure, senza selezione, dove si trova il cursore!
Quindi meglio di quel che m'aspettassi! 
Grazie dell'aiuto, è stato fondamentale!!
Però.. Che bel sitarello che stà venendo a poco a poco!!!! 

Ciaoo, Grazie!!!
PS: Dimenticavo, ho dovuto mettere la proprietà "id" con lo stesso valore di "name" nel tag "textarea" per avere la compatibilità con Firefox, perchè con "name" IE funzionava e Firefox no.
Anche ai fini della validazione xhtml, è tutto ok! 
I computer sanno contare solo da 0 a 1, il resto è illusione...
Il mio sitarello: http://www.shark986.altervista.org/