function hover(elm, mouseover, mouseout) {
    var over = function(e) {
        var p = e.relatedTarget || (e = window.event).fromElement;
        do if (p == elm) return false; while (p = p.parentNode);
        return mouseover.call(elm, e);
    }, out = function(e) {
        var p = e.relatedTarget || (e = window.event).toElement;
        do if (p == elm) return false; while (p = p.parentNode);
        return mouseout.call(elm, e);
    };

    return $(elm).observe('mouseover', over).observe('mouseout', out);
}