/*
 * Storm's jQuery toolTipTool
 * Version 0.1  (2008-12-27)
 *
 * (C) by Stefan Mateescu
 */

var stmTooltipTool = {

	"tooltipEnabled" : true,
	"tooltipSelector" : "*[@title]",
	"tooltipDivClass" : "stmTooltipDiv",
	"tooltipDivStyle" : "",
	"tooltipOffset" : 5,
	"tooltipPosX" : "R",	// R,L
	"tooltipPosY" : "B",	// T,B

	"initTooltipTool" : function() {
		if (!jQuery.stmTooltipTool.tooltipEnabled)
			return;
		jQuery(jQuery.stmTooltipTool.tooltipSelector).each(function(i) {
			if (this.title!="") {
				var d = new Date();
				var divId = "stmTooltip_"+parseInt(Math.random()*1000)+"_"+i+"_"+d.getHours()+d.getMinutes()+d.getSeconds()+d.getMilliseconds();
				jQuery("body").append("<div id=\""+divId+"\" class=\""+jQuery.stmTooltipTool.tooltipDivClass+"\" style=\""+jQuery.stmTooltipTool.tooltipDivStyle+"\">"+this.title+"</div>");
				jQuery(this).attr("title", "");
				jQuery(this).attr("stmTooltipId", divId);
				// mouseover-bind
				jQuery(this).bind("mouseover", function(e) {
					var filter = "#"+divId;
					jQuery.stmTooltipTool.positionTooltip(e, divId);
					jQuery(filter).css({
						"position":"absolute"
					});
					jQuery(filter).fadeIn(250);
				});
				// mousemove-bind
				jQuery(this).bind("mousemove", function(e) {
					jQuery.stmTooltipTool.positionTooltip(e, divId);
				});
				// mouseout-bind
				jQuery(this).bind("mouseout", function(e) {
					var filter = "#"+divId;
					jQuery(filter).fadeOut(150);
				});
				// update DOM
				jQuery.stmTooltipTool.updateTooltipDivStyle();
			}
		});
	},

	"removeAllMatchingTooltips" : function() {
		jQuery(jQuery.stmTooltipTool.tooltipSelector).each(function(i) {
			if (this.title!="") {
				jQuery(this).attr("title", "");
			}
		});
	},

	"positionTooltip" : function(e, divId) {
		var off = jQuery.stmTooltipTool.tooltipOffset;
		var filter = "#"+divId;
		var objX = jQuery(filter).outerWidth();
		var objY = jQuery(filter).outerHeight();
		var wndX = jQuery(document).width();
		var wndY = jQuery(document).height();
		var visX = jQuery(window).width();
		var visY = jQuery(window).height();
		var scrX = jQuery(document).scrollLeft();
		var scrY = jQuery(document).scrollTop();
		// make X
		var posX = e.pageX + off;
		if (jQuery.stmTooltipTool.tooltipPosX=="L") {
			posX = e.pageX - objX - off;
			if (posX<0) {
				posX = e.pageX + off;
				if (posX+objX>visX+scrX) {
					posX = 0;
				}
			}
		}
		else {
			posX = e.pageX + off;
			if (posX+objX>visX+scrX) {
				posX = e.pageX - objX - off;
				if (posX<0) {
					posX = wndX-objX;
				}
			}
		}
		// make Y
		var posY = e.pageY + off;
		if (jQuery.stmTooltipTool.tooltipPosY=="L") {
			posY = e.pageY - objY - off;
			if (posY<0) {
				posY = e.pageY + off;
				if (posY+objY>visY+scrY) {
					posY = 0;
				}
			}
		}
		else {
			posY = e.pageY + off;
			if (posY+objY>visY+scrY) {
				posY = e.pageY - objY - off;
				if (posY<0) {
					posY = wndY-objY;
				}
			}
		}
		// repos
		jQuery(filter).css({
			"top": posY,
			"left": posX
		});
	},

	"setTooltipDivClass" : function(c) {
		jQuery.stmTooltipTool.tooltipDivClass = c;
	},

	"setTooltipDivStyle" : function(s) {
		jQuery.stmTooltipTool.tooltipDivStyle = s;
	},

	"updateTooltipDivStyle" : function(s) {
		var filter = "."+jQuery.stmTooltipTool.tooltipDivClass;
		jQuery(filter).style = jQuery.stmTooltipTool.tooltipDivStyle;
		jQuery(filter).css("display", "none");
	}

};

jQuery.extend({
	"stmTooltipTool" : stmTooltipTool
});

(function(jQuery) {
	jQuery(document).ready(function($){
		jQuery.stmTooltipTool.initTooltipTool();
	});
})(jQuery);