(function($) {

	$.fn.tooltip = function(options) {

		if (options) $.extend($.fn.tooltip.defaults, options);

		this.each(function() {
			$(this)
			.unbind('.tooltip')
			.bind('mouseenter.tooltip', function() { $.fn.tooltip.load(this); })
			.bind('mouseleave.tooltip', function() { $.fn.tooltip.unload(this); });
		});

		return this;
	};

	$.fn.tooltip.defaults = { delay : 500, offsetTop : 13, offsetLeft : 1 };
	$.fn.tooltip.timerID  = null;
	$.fn.tooltip.domObj   = null;
	$.fn.tooltip.t        = null;

	$.fn.tooltip.load = function(domObj) {
		$.fn.tooltip.domObj = domObj;

		$.fn.tooltip.t = domObj.title;
		domObj.title   = '';

		$.fn.tooltip.timerID = setTimeout( $.fn.tooltip.show, $.fn.tooltip.defaults.delay );
	};

	$.fn.tooltip.show = function() {
		var domObjPosition = $( $.fn.tooltip.domObj ).offset();

		var top  = domObjPosition.top + $.fn.tooltip.domObj.offsetHeight;
		var left = domObjPosition.left;

		top  = parseInt( top ) + $.fn.tooltip.defaults.offsetTop;
		left = parseInt( left ) + $.fn.tooltip.defaults.offsetLeft;

		var style = 'display: none; position: absolute; padding: 5px 6px;';
		style    += ' font-size: 1em; background-color: #FFFFE1; border: 1px solid black;';
		style    += ' -moz-border-radius: 5px; -webkit-border-radius: 5px; z-index: 9999999999;';

		$('body').append( '<div id="tooltip" style="' + style + '">' + $.fn.tooltip.t + '</div>' );
		$('div#tooltip').css("top", top+"px").css("left", left+"px").fadeIn("fast");
	};

	$.fn.tooltip.unload = function(domObj) {
		if ($.fn.tooltip.timerID)
		{
			clearTimeout($.fn.tooltip.timerID);
		}

		domObj.title        = $.fn.tooltip.t;
		$.fn.tooltip.domObj = null;
		$.fn.tooltip.t      = null;

		$("div#tooltip").fadeOut("fast").remove();
	};

	// http://www.zachleat.com/web/2009/05/08/performance-caveat-with-jquery-selectors-and-live-events/
	$.fn.tooltip.live = function(selector, type, fn) {
	    var r = $([]);
	    r.selector = selector;
	    if(type && fn) {
	        r.live(type, fn);
	    }
	    return r;
	};

})(jQuery);

$(document).ready(function() {
	$.fn.tooltip.live("img")
	.live('mouseover', function(e) {
		if (this.title != '')
		{
			$.fn.tooltip.load( this );
		}
	})
	.live('mouseout', function(e) {
		if ($.fn.tooltip.t != '')
		{
			$.fn.tooltip.unload( this );
		}
	});
});

