﻿/// <reference path="../Script/Lib.js" />
$(function()
{
	if (!window._tPanel)
	{
		window._tPanel = $("<div class='tooltipsContainer' style='FILTER: progid:DXImageTransform.Microsoft.Glow(color=#222222,strength=3);'></div>").hide().appendTo(document.body);
		window._fPanel = $("<div class='tooltipsContainer'></div>").hide().appendTo(document.body);
	}
	
	var saveTarget = null;
	var timer = null;
	var __f = function()
	{
		$(this).unbind("mouseleave", __f);
		timer = window.setTimeout(function()
		{
			window._tPanel.stop().fadeTo("fast", 0, function(){$(this).hide();})._curCtrl = null;
		}, 300)
	};
	
	$(document).mousemove(function(e)
	{
		var target = e.target || e.srcElement;
		var ctrl = $(target);
		if (ctrl.filter("*[tooltip], *[tooltipid]").length <= 0)
		{
			ctrl = ctrl.parents("*[tooltip]:first, *[tooltipid]:first");
			target = ctrl[0];
		}
		if (ctrl.length > 0)
		{
			var hPos = ctrl.attr("hoverpos"),
				x = $.browser.msie ? e.clientX + document.documentElement.scrollLeft : e.pageX,
				y = $.browser.msie ? e.clientY + document.documentElement.scrollTop : e.pageY;
			
			if (window._tPanel._curCtrl != target)
			{
				ctrl.mouseleave(__f);
				window._tPanel.stop()._curCtrl = target;
				if (timer != null){ window.clearTimeout(timer);}
				
				window._tPanel._x = e.clientX,
				window._tPanel._y = e.clientY;

				var hStr = $.trim(ctrl.attr("tooltip")),
					hSiz = ctrl.attr("hoversize");
					
				if (hStr == null || hStr == "")
				{
					hStr = $.trim($("#" + ctrl.attr("tooltipid")).html());
					if (hStr == null || hStr == "")
					{
						window._tPanel.stop().css({
							opacity: 0,
							top: y,
							left: x
						})._curCtrl = target;
						return;
					}
				}
				if (hSiz == "" || hSiz == null) 
				{
					var _e = $("<div></div>").hide().appendTo(document.body).html(hStr),
						_w = _e.width();
					_e.remove();
					if (_w >= 350)
					{
						hSiz = [350,"auto"];
					}
					else
					{
						hSiz = [_w,"auto"];
					}
				}
				else 
				{
					hSiz = hSiz.split(',');
				}
							
				window._tPanel.width(hSiz[0])
							  .height(hSiz[1])
							  .html(hStr);
							  
				var w = window._tPanel.width(),
					h = window._tPanel.height();
			
				if (hPos == "" || hPos == null || hPos == "auto")
				{
					var winW = $(window).width(),
						winH = $(window).height(),
						pos1 = "right",
						pos2 = "bottom";
					
					if (e.clientX + w + 10 >= winW){ pos1 = "left";}
					if (e.clientY + h + 10 >= winH){ pos2 = "top";}
					
					hPos = pos1 + "," + pos2;
				}
				var tmp = hPos.split(','),
					pos1 = tmp[0],
					pos2 = tmp[1];
				
				switch (pos1)
				{
					case "left": x -= w + 30; break;
					case "right": x += 10; break;
					case "center": x -= w/2; break;
				} 
				switch(pos2)
				{
					case "top": y -= h + 20; break;
					case "bottom": y += 10; break;
					case "center":  y -= h / 2; break;
				}
				
				window._tPanel.stop().css({
					top: y,
					left: x
				}).show().fadeTo("fast", 0.9)._curCtrl = target;
			}
			else
			{
				if (timer != null) window.clearTimeout(timer);
				var dx = e.clientX - window._tPanel._x,
					dy = e.clientY - window._tPanel._y,
					pos = window._tPanel.position();
				
				window._tPanel.css({
					top: pos.top + dy,
					left: pos.left + dx
				});
				
				window._tPanel._x = e.clientX;
				window._tPanel._y = e.clientY;
			}
		}
	});
});
