var numLayers = 0;

function IMI_ShowLayer(e, contentHTML, bHideOthers)
{	
	
	if (bHideOthers) IMI_HideLayers();
	if (window.event) var elArea = e.srcElement;
	else var elArea = e.target;

	x = findPosX(elArea);
	y = findPosY(elArea); // + elArea.offsetHeight;
		
	var elTable = elArea.parentNode;
	while (elTable.tagName != "TABLE") elTable = elTable.parentNode;
	var maxX = findPosX(elTable) + elTable.offsetWidth;
	
	//create layer
	var newLayer = document.createElement('DIV');
	numLayers++;

	//set position
	newLayer.id = 'layer' + numLayers;
	newLayer.style.visibility = 'hidden';
	newLayer.style.position = 'absolute';
	newLayer.style.width = '200px';
	
	newLayer.innerHTML = contentHTML;
	document.body.appendChild(newLayer);
	newLayer.style.visibility = 'visible';
	//check if beyond border
	
	newLayer.style.left = x + 'px';
	newLayer.style.top = y + 'px';

	var w = parseInt(newLayer.firstChild.offsetWidth);
	var h = parseInt(newLayer.offsetHeight);
	
	if ((x+w) > maxX) newLayer.style.left = (maxX - w) + 'px';
	newLayer.style.width = w + 'px';
}

function IMI_HideLayers()
{
	var limit = numLayers + 1;
	for (var i = 1; i < limit; i++)
	{
		var layerID = 'layer' + i;
		IMI_HideLayer(layerID);
	}
}

function IMI_HideLayer(layerID)
{
	var layer = document.getElementById(layerID);
	layer.style.visibility = 'hidden';
	layer.innerHTML = '';
	document.body.removeChild(layer);
	delete layer;
	numLayers--;
}

//taken from quirksmode.org
//edited to handle map tags
function findPosX(obj)
{
	var curleft = (obj.coords) ? parseInt(obj.coords.substring(0,obj.coords.indexOf(","))) : 0;
	if (obj.offsetParent)
	{
		obj = obj.offsetParent;
		while ((obj.offsetParent) || (obj.parentNode))
		{
			if (obj.offsetParent)
			{
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
			else
			{
				curleft += obj.offsetLeft;
				obj = obj.parentNode;
			}

		}
	}
	else if (obj.x) curleft += obj.x;

	return curleft;
}

function findPosY(obj)
{
	var curtop = (obj.coords) ? parseInt(obj.coords.substring(obj.coords.lastIndexOf(",") + 1)) : 0;
	if (obj.offsetParent)
	{
		obj = obj.offsetParent;
		while ((obj.offsetParent) || (obj.parentNode))
		{
			if (obj.offsetParent)
			{
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
			else
			{
				curtop += obj.offsetTop;
				obj = obj.parentNode;
			}
		}
	}
	else if (obj.y) curtop += obj.y;

	return curtop;
}
