var TOOLTIP_SHOW_TIMEOUT		= 1000;
var TOOLTIP_HIDE_TIMEOUT		= 50;
var TOOLTIP_OFFSET_POSITION_X	= -25;
var TOOLTIP_OFFSET_POSITION_Y	= -2;

var g_idTooltipTimeout = 0;
var g_mouseX = 0;
var g_mouseY = 0;
var g_currentElement = null;

function AddTooltip(obj, tooltipContent, offsetX)
{
	if (!document.body.onmousemove)
		document.body.onmousemove = UpdateMousePosition;

	obj.onmouseover = ShowTooltip;
	obj.onmouseout = HideTooltip;
	obj.tooltipContent = tooltipContent;
	obj.tooltipOffsetX = (typeof(offsetX) == "number" ? offsetX : TOOLTIP_OFFSET_POSITION_X);
}

function ShowTooltip(event)
{
	var obj;
	if (event)
		obj = event.target;
	else
		obj = window.event.srcElement;

	if (IsTooltipShown())
	{
		if (g_currentElement == obj)
		{
			clearTimeout(g_idTooltipTimeout);
			g_idTooltipTimeout = 0;

			return;
		}
		else
			RealHideTooltip();
	}

	g_idTooltipTimeout = setTimeout("RealShowTooltip('" + obj.id + "')", TOOLTIP_SHOW_TIMEOUT);
}

function RealShowTooltip(idObject)
{
	var tooltip = GetElement("tooltip");
	var tooltipContainer = GetElement("tooltipContainer");
	var obj = GetElement(idObject);

	var tooltipContent = obj.tooltipContent;
	var jsFunc = "jsfunc:";
	if (tooltipContent.substr(0, jsFunc.length) == jsFunc)
		GetElement("tooltipContent").innerHTML = eval(tooltipContent.substr(jsFunc.length));
	else
		GetElement("tooltipContent").innerHTML = tooltipContent;

	var tooltipHeight = tooltip.offsetHeight;
	var tooltipWidth  = tooltip.offsetWidth;

	var windowSize = GetWindowSize();

	var screenOverflow = windowSize.width - g_mouseX - obj.tooltipOffsetX - tooltipWidth;

	screenOverflow = (screenOverflow < 0) ? -screenOverflow : 0;
	tooltipContainer.style.left = (g_mouseX + obj.tooltipOffsetX - screenOverflow) + "px";
	tooltipContainer.style.top  = g_mouseY - tooltipHeight + TOOLTIP_OFFSET_POSITION_Y + "px";

	var tooltipLeftArrow = GetElement("tooltipLeftArrow");
	tooltipLeftArrow.style.width = (- obj.tooltipOffsetX - 10 + screenOverflow) + "px";

	tooltipContainer.style.visibility = "visible";

	g_currentElement = obj;
}

function GetWindowSize()
{
	if (typeof( window.innerWidth ) == 'number')
	{
		return { width:window.innerWidth, height:window.innerHeight };
	}
	else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
	{
		return { width:document.documentElement.clientWidth, height:document.documentElement.clientHeight};
	}
	else
	{
		return { width:document.body.clientWidth, height: document.body.clientHeight };
	}
}

function HideTooltip()
{
	if (!IsTooltipShown())
	{
		clearTimeout(g_idTooltipTimeout);
		g_idTooltipTimeout = 0;
	}
	else
		g_idTooltipTimeout = setTimeout("RealHideTooltip()", TOOLTIP_HIDE_TIMEOUT);
}

function RealHideTooltip()
{
	var tooltipContainer = GetElement("tooltipContainer");

	tooltipContainer.style.left = "0px";
	tooltipContainer.style.top  = "0px";

	tooltipContainer.style.visibility = "hidden";
	g_currentElement = null;
}

function StopHidingTooltip()
{
	clearTimeout(g_idTooltipTimeout);
	g_idTooltipTimeout = 0;
}

function IsTooltipShown()
{
	return GetElement("tooltipContainer").style.visibility != "hidden";
}

function UpdateMousePosition(event)
{
	if (event)
	{
		g_mouseX = event.pageX;
		g_mouseY = event.pageY;
	}
	else
	{
		g_mouseX = window.event.clientX + ((document.body.scrollLeft != 0) ? document.body.scrollLeft : document.documentElement.scrollLeft);
		g_mouseY = window.event.clientY + ((document.body.scrollTop != 0) ? document.body.scrollTop : document.documentElement.scrollTop);
	}

	if (g_mouseX < 0)
		g_mouseX = 0;
	if (g_mouseY < 0)
		g_mouseY = 0;
}
