jQuery.fn.makeTooltip = function(options) {
	if(this.length > 1) {
        this.each(function() {
			$(this).makeTooltip();
		});
        return this;
    }
	var settings = jQuery.extend({
		 padding: 10,
		 container: "floating-tooltip",
		 cls: "",
		 sticky: false,
		 WIDTH: $(window).width(),
		 HEIGHT: $(window).height()
	  }, options);
	var tooltip = $("#"+settings.container).length > 0 ? $("#"+settings.container) : $("<div id='"+settings.container+"'></div>").appendTo("body");
	var prevTitle = "";
	var tar = $(this);
	$(this).mouseover(function(e) {
		$(tooltip).html($(this).attr("title")).attr("class", settings.cls).show();
		if($(this).attr("title") != "") {
			prevTitle = $(this).attr("title");
			$(this).attr("title", "");
		}
	})
	.mousemove(function(e) {
		if(!settings.sticky) {
			var top = e.pageY+$(tooltip).height()+(settings.padding*2) < settings.HEIGHT + $(window).scrollTop() ? e.pageY + settings.padding : e.pageY - $(tooltip).height() - (settings.padding*2);
			var left = e.pageX+$(tooltip).width()+(settings.padding*2) < settings.WIDTH + $(window).scrollLeft() ? e.pageX + settings.padding : e.pageX - $(tooltip).width() - (settings.padding*2);
		}
		else {
			var top = e.pageY+$(tooltip).height()+(settings.padding*2) < settings.HEIGHT + $(window).scrollTop() ? e.pageY + settings.padding : settings.HEIGHT + $(window).scrollTop() - $(tooltip).height() - (settings.padding*2);
			var left = e.pageX+$(tooltip).width()+(settings.padding*2) < settings.WIDTH + $(window).scrollLeft() ? e.pageX + settings.padding : settings.WIDTH + $(window).scrollLeft() - $(tooltip).width() - (settings.padding*2);
		}
		$(tooltip).css("left", left+"px").css("top", top+"px");
	})
	.mouseout(function() {
		$(tooltip).hide();
		$(this).attr("title", prevTitle);
	});
	
	$(tooltip).mousemove(function() {
		$(this).show();
	})
	.mouseout(function() {
		$(this).hide();
	});
	return this;
}
