
// hold a list of visible menus so we can close them when we open a new one.
// kind of a hack, having issues with some menus staying open.
// this fixes that.
var menus = new Array();

// inject, setup the menus
window.onload = function() 
{
	initMenu('productsMenu', 'productsPopupMenu');
}

function initMenu(menuID, popupMenuID)
{
	var menu = document.getElementById(menuID);
	if (!menu)
	{
		alert (menuID + ' does not exist.');
		return;
	}
	menu.onmouseover = function(e) { openMenu(menuID, popupMenuID);	}
}


function openMenu(menuID, popupMenuID)
{
	var menu = document.getElementById(menuID);
	//var popupMenu = document.createElement('div');
	var popupMenu = document.getElementById(popupMenuID);
	
	if (!menu)
	{
		alert(menuID + ' does not exist.');
		return;
	}
	if (!popupMenu)
	{
		alert(popupMenuID + ' does not exist.');
		return;
	}
	// hide any visible menus	
	for (var n=0;n<menus.length;n++)
	{
		var obj = menus.pop();
		obj.style.visibility = "hidden";
	}
	menus.push(popupMenu);
	
    popupMenu.style.position = "fixed"; //"absolute";
    popupMenu.zindex = 1000;
	popupMenu.style.visibility = "visible";
	
	var left = findPosX(menu) + 'px';
	var top = menu.offsetTop - document.body.scrollTop + 'px';
		
	popupMenu.style.left = left;
	popupMenu.style.top = top;
	document.onmousedown = function(e)
	{
		var evnt = window.event || e //cross browser event object
		var obj = findObject(evnt);
		// hack to fix the click event being called on child objects!
		if (!isChildOf(popupMenu, obj) && obj != popupMenu && obj != null)
		{
			closeMenu(menuID, popupMenuID);
		}
	}
	popupMenu.onmouseout = function(e)
	{
		var evnt = window.event || e //cross browser event object
		var obj = findObject(evnt);
		// hack to fix onmouseout being called on child objects!
		if (!isChildOf(popupMenu, obj) && obj != popupMenu)
		{
			closeMenu(menuID, popupMenuID);
		}
	}
}

function closeMenu(menuID, popupMenuID)
{
	var popupMenu = document.getElementById(popupMenuID);
	if (popupMenu)
	{
		popupMenu.style.visibility = "hidden";
	}
}

function isChildOf(parent, child) 
{
	if( child != null )
	{
		while( child.parentNode )
		{
			if( (child = child.parentNode) == parent )
			{
				return true;
			}
		}
	}
	return false;
}
		
function findObject(event)
{
	if (event == null)
	{
		return null;
	}
	if (event.toElement) 
	{				
		return event.toElement;
	} 
	else if (event.relatedTarget) 
	{				
		return event.relatedTarget;
	}
	// firefox
	else if (event.target)
	{
		return event.target;
	}
	return null;
}

function sayLoc(e) 
{
	e = e || window.event;
	var tgt = e.target || e.srcElement;

	// Get top lef co-ords of div
	var divX = findPosX(tgt);
	var divY = findPosY(tgt);

	// Workout if page has been scrolled
	var pXo = getPXoffset();
	var pYo = getPYoffset();

	// Subtract div co-ords from event co-ords
	var clickX = e.clientX - divX + pXo;
	var clickY = e.clientY - divY + pYo;

	alert('Co-ords within div (x, y): ' + clickX + ', ' + clickY);
}


function findPosX(obj) 
{
	var curleft = 0;
	if (obj.offsetParent) 
	{
		while (obj.offsetParent) 
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	} else if (obj.x) {
		curleft += obj.x;
	}
	return curleft;
}

function findPosY(obj) 
{
	var curtop = 0;
	if (obj.offsetParent) 
	{
		while (obj.offsetParent) 
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if (obj.y) {
		curtop += obj.y;
	}
	return curtop;
}


function getPXoffset()
{
	if (self.pageXOffset) { // all except Explorer
		return self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {// Explorer 6 Strict
		return document.documentElement.scrollLeft;
	} else if (document.body) { // all other Explorers
		return document.body.scrollLeft;
	}
}

function getPYoffset()
{
	if (self.pageYOffset) { // all except Explorer
		return self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {// Explorer 6 Strict
		return document.documentElement.scrollTop;
	} else if (document.body) { // all other Explorers
		return document.body.scrollTop;
	}
}
