// GENERAL CORE FUNCTIONS
function delegate(_func, _scope, event)
{
	return function(event)
	{
		_func.call(_scope,event);
	}
}

function $(id)
{
	return document.getElementById(id);
}

function observe(obj, eventName, callbackFunction, useCapture)
{
	if (obj.attachEvent)
	{
		obj.attachEvent("on" + eventName, callbackFunction);
	}
	else
	{
		obj.addEventListener(eventName, callbackFunction, useCapture);
	}
}
// -- End general functions

function init() 
{
	var mapDiv = $("map");
	if (mapDiv)
	{
		var tooltipContainer = document.createElement("div");
		tooltipContainer.id = "tooltipContainer";
		mapDiv.appendChild(tooltipContainer);
		var tooltip = document.createElement("div");
		tooltip.id = "tooltip";
		tooltipContainer.onmouseover = mouseOver;
		tooltipContainer.onmouseout = mouseOut;
		tooltipContainer.appendChild(tooltip);
		
		var aHrefs = mapDiv.getElementsByTagName("a");
		for (var i=0, len=aHrefs.length ; i<len ; i++)
		{
			addCommand(aHrefs[i]);
		}
	}
}

function getRunTimeValue(element, attributeName, doc) 
{ 
   doc = (typeof(doc) == "undefined") ? document:doc;
   if(doc.defaultView && doc.defaultView.getComputedStyle && doc.defaultView.getComputedStyle(element,null)) 
   {
		return doc.defaultView.getComputedStyle(element,null)[attributeName]; 
   }
   else if(typeof(doc.all)!="undefined" && element.currentStyle) 
   { 
		return element.currentStyle[attributeName]; 
   } 
   else if (element.style)
		return element.style[attributeName];
   else
		return 0; 
}

function mouseOver(href)
{
	var tooltip = $("tooltipContainer");
	var tooltipContent = tooltip.firstChild;
	if (tooltip && tooltipContent)
	{
		if (href && href.innerHTML)
		{
			var mapDiv = $("map");
			tooltipContent.innerHTML = href.innerHTML;
			
			if (mapDiv)
			{
				var right = mapDiv.offsetLeft + mapDiv.offsetWidth;
				var tooltipWidth = parseInt(getRunTimeValue(tooltip, "width"));
				if ( (href.offsetLeft + tooltipWidth) > right )
					tooltip.style.left = href.offsetLeft - tooltipWidth + href.offsetWidth + "px";
				else
					tooltip.style.left = href.offsetLeft + "px";
			}
			else
				tooltip.style.left = href.offsetLeft + 20 + "px";
			
			if (tooltipContent.innerHTML != "")
				tooltip.style.display = "block";

			tooltip.style.top = href.offsetTop - tooltip.offsetHeight + "px";
		}
		if (tooltipContent.innerHTML != "")
		{
			tooltip.style.display = "block";
		}
	}
	
}

function mouseOut()
{
	var tooltip = $("tooltipContainer");
	if (tooltip)
	{
		tooltip.style.display = "none";
	}
}

function addCommand(href)
{
	href.onmouseover = function(){mouseOver(href);};
	href.onmouseout = mouseOut;
	href.title = "";
}

observe(window, "load", init, false);