Yo cuando uso sistema de emoticonons en los tagboards de mis páginas, abro un popup donde al clicar el emoticono, se agrega el texto al input donde está el mensaje, quizás esto te sirva
<script>
onkey = false;
function smilie(txt) {
if (window.o*****r) {
cd = window.o*****r;
ln = cd.document.getElementById("mensaje");
if (ln.value == "message") ln.value = "";
ln.focus();
if (cd.selection) {
sel = cd.selection.createRange();
c = "\001";
if (sel.text != null) sel.text = c;
end = start = ln.value.indexOf(c);
if (end == -1) end = start = ln.value.length;
sel.moveStart('character',-1);
sel.text = "";
}
else if(ln.selectionStart != "null") {
start = ln.selectionStart;
end = ln.selectionEnd;
}
spce = (ln.value.charAt(end) == " ")?true:false;
txt = ((start == 0 || ln.value.charAt(start-1) == " ")?"":" ")+txt;
txt = txt+((spce)?"":" ");
ln.value = ln.value.substring(0, start)+txt+ln.value.substring(end);
caret = start + txt.length + ((spce)?1:0);
if (cd.selection) {
sel.moveEnd ('character', -ln.value.length);
sel.moveEnd ('character', caret);
sel.moveStart ('character', caret);
sel.select();
}
else if(ln.selectionStart != "null") {
ln.selectionStart = caret;
ln.selectionEnd = caret;
}
if (onkey) this.focus();
}
}
function getkey(e) {
if (!e) var e = window.event;
if (e.shiftKey) onkey = true;
else onkey = false;
}
</script>Espero que te sirva

Saludos ^^
PD: también tengo un framework de JavaScript que se llama Picker, si lo ocupas, me dices por MP

PD 2: En algunas partes del código sale el filtro de palabrotas (o*****r), que sepas que es op3n3r (abridor en inglés xD).