(function(jQuery) {

    jQuery.fn.easyTooltip = function(options) {

        var options = $.extend({
            xLeftOffset: 4,
            xRightOffset: 8,
            yOffset: -10,
            tooltipId: "easyTooltip"
        }, options);

        this.each(function() {
            var elem = this;

            var title = $(this).attr('title');
            if (title) {
                $(elem).data('title', title);
                $(elem).removeAttr('title');

                var tooltip = $('<div>').attr('id', options['tooltipId'])
                                        .html(title);

                var updatePosition = function(e) {
                    tooltip.css("top", (e.pageY - options.yOffset) + "px")
                           .css("left", e.pageX < 300
                                        ? (e.pageX + options.xRightOffset) + "px"
                                        : (e.pageX - tooltip.width() - options.xRightOffset) + "px");
                    tooltip.html($(elem).data('title'));
                }

                jQuery(elem).hover(
                    function(e) {
                        tooltip.css("position","absolute")
                               .appendTo($('body'))
                               .show();
                        updatePosition(e);
                    },
                    function() {
                        tooltip.remove();
                    }
                );

                jQuery(elem).mousemove(updatePosition);
            }
        });
    }

})(jQuery);
