﻿
function getScrollPos()
{
  var x = 0, y = 0;
  if( typeof( window.pageYOffset ) == 'number' ) 
  {
    x = window.pageXOffset;
    y = window.pageYOffset;
  } 
  else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) 
  {
     x = document.body.scrollLeft;
     y = document.body.scrollTop;
  } 
  else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) 
  {
    x = document.documentElement.scrollLeft;
    y = document.documentElement.scrollTop;
  }
  return {x:x, y:y};
}
function varDump(v, values, include, exclude)
{
	values |= false;
	
	if(include != null)
		var rgxInc = new RegExp(include, "i");
	if(exclude != null)
		var rgxExc = new RegExp(exclude, "i");
		
	var s = "";
	for(var k in v)
	{
		if(include != null)
		{
			if(!rgxInc.test(k))
				continue;
		}
		if(exclude != null)
		{
			if(rgxExc.test(k))
				continue;
		}
		s += k + (values ? ("=" + v[k]) : "" ) + ", ";
	}
	return s;
}

function getElemLocation(elem)
{
	var x = 0;
	var y = 0;
	if(elem.getBoundingClientRect)
	{
		var orect = elem.getBoundingClientRect();
		x = orect.left;
		y = orect.top;
	}
	else
	{
		while(elem && elem!=document.body)
		{
			x+=elem.offsetLeft;
			y+=elem.offsetTop;
			elem = elem.offsetParent;
		}
		var sp = getScrollPos();
		x -= sp.x;
		y -= sp.y;
	}
	return {x : x, y : y};
}

function getEventSender(e)
{
	if(e.target)
		return e.currentTarget;
	else
		return e.srcElement;
}
function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){return obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener( type, fn, false );
}

function initTooltip(e)
{
	var allElements = document.getElementsByTagName("*");
	for(var i = 0; i < allElements.length; ++i)
	{
		if(allElements[i].getAttribute("tooltip"))
		{
			addEvent(allElements[i], "mouseover", tooltip_Mouseover);
			addEvent(allElements[i], "mouseout", tooltip_Mouseout);
		}
	}
}
var tooltips = new Array(), timeouts = new Array();
function tooltip_Mouseover(e)
{
	var elemSender = getEventSender(e);
	var tooltipUrl = elemSender.getAttribute("tooltip");
	while(!tooltipUrl)
	{
		elemSender = elemSender.parentNode;
		tooltipUrl = elemSender.getAttribute("tooltip");
	}
	var tooltipName = (new RegExp("(\\w+(?=[^\\w])*)+")).exec(tooltipUrl)[0];
	var pos = getElemLocation(elemSender);
	
	if(tooltips[tooltipName])
	{
		clearTimeout(timeouts[tooltipName]);
		tooltips[tooltipName].style.visibility = "visible";
	}
	else
	{	
		var div = document.createElement("div");
		div.setAttribute("tooltipName", tooltipName);
		tooltips[tooltipName] = div;
		div.style.position = "absolute";
		div.style.visibility = "hidden";
		//if(elemSender.getAttribute("tooltip_div_style"))
		//	div.cssText = elemSender.getAttribute("tooltip_div_style");
		div.style.left = (pos.x + elemSender.offsetWidth*3/4) + "px";
		div.style.top = (pos.y+elemSender.offsetHeight*3/4) + "px";
		div.innerHTML = "<iframe src=\"" + tooltipUrl + "\" "+
			" id=\"" + tooltipName + "\" "+
			" name=\"" + tooltipName + "\" "+
			" width=\"" + elemSender.getAttribute("tooltip_width") + "\"" +
			" height=\"" + elemSender.getAttribute("tooltip_height") + "\"" +
		" frameborder=\"0\"></iframe>";
		
		
		document.body.appendChild(div);
//document.getElementById(tooltipName)
		setTimeout("initWidths('" + tooltipName + "',"+
			" '" + elemSender.getAttribute("tooltip_width") + "', "+
			"'" + elemSender.getAttribute("tooltip_height") + "')", 100);
		addEvent(div, "mouseover", tooltipSelf_Mouseover);
		addEvent(div, "mouseout", tooltipSelf_Mouseout);
	}
}
function initWidths(tooltipName, w, h)
{
	var div = tooltips[tooltipName];
	var elIFrame = div.childNodes[0];
	
	var iFrameDoc;
	iFrameDoc = window.frames[tooltipName].document;
	
	//alert(varDump(iFrameDoc.documentElement, true, "width|height"));
	if(w == "" || w == "null")
	{
		if(document.all)
			elIFrame.width = iFrameDoc.documentElement.scrollWidth;
		else
			elIFrame.width = iFrameDoc.documentElement.offsetWidth;
	}
	if(h == "" || h == "null")
	{
		if(document.all)
			elIFrame.height = iFrameDoc.documentElement.scrollHeight;
		else
			elIFrame.height = iFrameDoc.documentElement.offsetHeight;
	}
	div.style.visibility = "visible";
}
function tooltip_Mouseout(e)
{
	var elemSender = getEventSender(e);
	var tooltipUrl = elemSender.getAttribute("tooltip");
	while(!tooltipUrl)
	{
		elemSender = elemSender.parentNode;
		tooltipUrl = elemSender.getAttribute("tooltip");
	}
	var tooltipName = (new RegExp("(\\w+(?=[^\\w])*)+")).exec(tooltipUrl)[0];
	clearTimeout(timeouts[tooltipName]);
	timeouts[tooltipName] = setTimeout(
		"tooltips[\""+tooltipName+"\"].style.visibility = \"hidden\";", 1000);
}

function tooltipSelf_Mouseover(e)
{
	//debug(e);
	var elemSender = getEventSender(e);
	while(!elemSender.tagName || elemSender.tagName.toLowerCase() != "div")
		elemSender = elemSender.parentNode;
	var tooltipName = elemSender.getAttribute("tooltipName");
	clearTimeout(timeouts[tooltipName]);

}
function tooltipSelf_Mouseout(e)
{

	var elemSender = getEventSender(e);
	while(!elemSender.tagName || elemSender.tagName.toLowerCase() != "div")
		elemSender = elemSender.parentNode;
	var tooltipName = elemSender.getAttribute("tooltipName");
	timeouts[tooltipName] = setTimeout(
		"tooltips[\""+tooltipName+"\"].style.visibility = \"hidden\";", 1000);
}
addEvent(window, "load", initTooltip);