
if (typeof(log)=="undefined") {	log=function(msg)	{	alert("LOG ["+arguments.callee+"]: "+msg+" ");	}; if (window!=parent) try {parent.log(msg);}catch(e){}	}
//
// @returns: an object containing the x and y co-ordinate of an element
// @uses css styles tooltip_hidden and tooltip_shown
//
// ideally a log() function should be denifed
//
function position(element)
{
	if ((typeof(element)=="undefined")||(element==null))
		return {x:0, y:0};
		// return null; // returning null makes coding more verbose better to provide a default location

	var pos = {x: element.offsetLeft, y:element.offsetTop};
	while (element = element.offsetParent) // NB: use = instead of ==
	{
	    pos.x += element.offsetLeft;
	    pos.y += element.offsetTop;
	}
	return pos;
}
/*function position(element)
{
var curleft = 0;
var curtop = 0;

	if ((typeof(element)!="object")||(element==null))
		return {x: curleft, y: curtop};
	if (element.offsetParent)
	{
		do {
			curleft += element.offsetLeft;
			curtop += element.offsetTop;
		}
		while (element = element.offsetParent);
	}
	else {
		curleft = element.offsetLeft;
		curtop = element.offsetTop;
	}
	return {x: curleft, y: curtop};
}
*/
var forceMouseDisabled=false;
function forceStaticPositioning(bForced)
{
	forceMouseDisabled = bForced;
}
var tooltip_timer=null;
function showTooltip(txt,element, tooltipDivID, nSelfHideDelay)
{
var bUseMouse = true;

	forceMouseDisabled=true;
	
	if (forceMouseDisabled==true)
	{
		bUseMouse = false;
	}
	else
	{
		if (typeof(getMousePosition)!="undefined")
			getMousePosition();
		else
			bUseMouse = false;
	}

	if (typeof(element) == "undefined")
	{
		try {log("showTooltip: Invalid params "+"("+txt+","+element+") "+arguments.caller);}catch(e){}
		return false;
	}
	if (typeof(tooltipDivID) == "undefined") tooltipDivID = "tooltip";
	if (typeof(nSelfHideDelay) != "undefined")
	{
		if (!isNaN(nSelfHideDelay))
			setSelfHideDelay(nSelfHideDelay);
	}
	clearTimeout(tooltip_timer);

	var tooltip = document.getElementById(tooltipDivID);
	if (typeof(tooltip)=="undefined") return false;
	if (tooltip==null) return false;

	var tth = 20;
	var elw = 20;

	tooltip.className	= 'tooltip_shown';
	tooltip.innerHTML	= txt;
	tooltip.style.maxHeight	= tth; // position the tooltip above the element but make sure the height is correct or it may overlap with the source element
	tooltip.style.width	= "auto";
	tooltip.style.overflow	= "hidden";

	if (bUseMouse==true)
	{
		var mousePos = getMousePosition();

		if ((typeof(tooltip.clientHeight)!="undefined")&&(tooltip.clientHeight>tth))
			// tth = tooltip.clientHeight;
			tth = tooltip.clientHeight;
		tooltip.style.top	= mousePos.y; // position the tooltip above the element
		tooltip.style.left	= mousePos.x; // position the tooltip 
	}
	else
	{
		var elemPos	= position(element);
		var tpos= position(tooltip);
		if ((typeof(tooltip.clientHeight)!="undefined")&&(tooltip.clientHeight>tth))
			tth = tooltip.clientHeight;

		if ((typeof(element.clientWidth)!="undefined")&&(element.clientWidth>tth))
			elw = element.clientWidth;

		tooltip.style.top	= (elemPos.y-tth)-5; // position the tooltip above the element
		tooltip.style.left	= elemPos.x+(elw/2); // position the tooltip 
	}	
//	tooltip.innerHTML	= txt+" ("+tooltip.style.left+","+tooltip.style.top+")";
	// hideTooltip(selfHideDelay);
	
	return true;
}
var selfHideDelay = 3000;
var timeDelay = 250;
function setDelay(newDelay)
{
	timeDelay = newDelay;
}
function setSelfHideDelay(newDelay)
{
	selfHideDelay = newDelay;
}
function hideTooltip(milliDelay)
{
if (typeof(milliDelay)=="undefined") milliDelay = timeDelay;
	tooltip_timer = setTimeout("hideElement('tooltip')", milliDelay);
}
function hideElement(id)
{
	var tooltip = document.getElementById(id);
	if (typeof(tooltip)=="undefined") return false;
	if (tooltip==null) return false;
	tooltip.className='tooltip_hidden';
	return true;
}
if (typeof(verboseLoad)!="undefined") if (verboseLoad==true) log("tooltips.js loaded");
