Nice naruto, me imagino que estas pidiendo sugerencias en cuanto a features, pero permitime compartir unas cuantas observaciones sobre la implementacion.
1) Crea el tooltip solo una ves.
En lugar de llamar a la funcion ttinsert en el mouseover handler, agrega una funcion para mostrarlo, y en lugar de removerlo agrega una funcion para esconderlo.
Tambien evita el crear nodos DOM desde cadenas de texto, por que jQuery las tiene que 'parsear' y eso toma tiempo. Ademas es mas dificil de mantener.
Para crear el tooltip podes crear un modulo, el cual podes usar en varios de tus projectos.
var crearTooltip = (function(){
var $tooltip = $('<div>').attr({id: 'tooltip'}).css({ /* css aqui */ });
// agrega el tooltip al documento
....
return{
show: function(message, delay){
$tooltip.html(message).fadeIn(delay);
},
hide: function(){
$tooltip.html('').fadeOut(delay);
}
};
}());
Para usarlo, solo llamas haces esto.
var myToolTip = crearTooltip();
myTooltip.show('Hola', 200);
2) No removas un elemento antes de animarlo.
Veo que haces esto
$("#tooltip").remove();
$("#tooltip").fadeOut(setdelay);
Lo cual no es tan recomendable, lo mejor que podes hacer agregar un callback al metodo fadeout
$("#tooltip").fadeOut(setdelay, function(){
$(this).remove();
});
Basicamente cuando el fadeout termine de ejecutarse el elemento es removido.
3) Chaining es bueno
Chaining methodos evita que jQuery tenga que query el DOM y crear una instancia. Veo que lo estas haciendo bien para los event handlers de #to y #from. Pero no para los keyword event handlers de #msj.
Bueno esto solo era un poco de peer code review.