//	utilities
GetScrollLeft = function()
{
	if (  window["pageXOffset"] != null)
		return      window["pageXOffset"];
	else if (  document.documentElement["scrollLeft"] != null)
		return      document.documentElement["scrollLeft"];
	return 0;
};

GetScrollTop = function()
{
	if (  window["pageYOffset"] != null)
		return      window["pageYOffset"];
	else if (  document.documentElement["scrollTop"] != null)
		return      document.documentElement["scrollTop"];
	return 0;
};

findPageX = function(element)
{
	var initialObj = element;
	var curleft = 0;
	if (element.offsetParent != null)
	{
		while (true)
		{
			curleft += element.offsetLeft;
			if (element.offsetParent == null)
				break;
			element = element.offsetParent;
		}
	}
	else if (element["x"] != null)
		curleft += element.x;
	return curleft - findScrollOffsetLeft(initialObj);
};

findPageY = function(element)
{
	var initialObj = element;
	var curtop = 0;
	if (element.offsetParent != null)
	{
		while (true)
		{
			curtop += element.offsetTop;
			if (element.offsetParent == null)
				break;
			element = element.offsetParent;
		}
	}
	else if (element["y"] != null)
		curtop += element.y;
	return curtop - findScrollOffsetTop(initialObj);
};

findScrollOffsetLeft = function(element)
{
	var curoffset = 0;
	while (element.parentNode != null)
	{
		if (element.parentNode["scrollLeft"] != null)
			curoffset += element.parentNode.scrollLeft;
		element = element.parentNode;
	}
	return curoffset - GetScrollLeft();
};

findScrollOffsetTop = function(element)
{
	var curoffset = 0;
	while (element.parentNode != null)
	{
		if (element.parentNode["scrollTop"] != null)
			curoffset += element.parentNode.scrollTop;
		element = element.parentNode;
	}
	return curoffset - GetScrollTop();
};

GetPageOffsetFromEvent = function(eventObject, eventTarget)
{
	var result = new Object();
	result.offsetLeft = 0;
	result.offsetTop = 0;
	
	if (!eventObject)
		return result;

	if (eventObject.pageX)
	{
		result.offsetLeft = eventObject.pageX;
		result.offsetTop = eventObject.pageY;
	}
	else if (eventObject.x)
	{
		result.offsetLeft = eventObject.x;
		result.offsetTop = eventObject.y;
	}
	else if (eventObject.offsetX)
	{
		var elementPageX = findPageX(eventTarget);
		var elementPageY = findPageY(eventTarget);
	
		result.offsetLeft = eventObject.offsetX + elementPageX;
		result.offsetTop = eventObject.offsetY + elementPageY;
		return result;
	}
	return result;
};

containsPt = function(element, point)
{
	if(!point)
	{
		return false;
	}
	
	var elmLeft = findPageX(element);
	var elmTop = findPageY(element);
	var elmWidth = element.offsetWidth;
	var elmHeight = element.offsetHeight;
	
	var ptLeft = point.offsetLeft;
	var ptTop = point.offsetTop;
	
	return !(ptLeft < elmLeft || ptTop < elmTop || ptLeft > elmLeft + elmWidth || ptTop > elmTop + elmHeight);
}

showMessage = function(reportItem, msg)
{
	var reportSpan = document.getElementById("reportSpan" + reportItem);
	reportSpan.innerHTML = msg;
}

//	menu
var submenus = new Array();
var tryHideTimeoutMs = 150;
var mousePositionCache = null;

function hover(mmItemId)
{
	hideSubmenu();
	showSubmenu(mmItemId);
}

function showSubmenu(mmItemId)
{
	highlight(mmItemId, true);

	var submenuDivElement = document.getElementById("submenu" + mmItemId);
	if(!submenuDivElement)
	{
		submenuDivElement = document.createElement("div");
		submenuDivElement.id = "submenu" + mmItemId;
		submenuDivElement.systemDiv = true;
		submenuDivElement.className = "smHidden";
		document.body.appendChild(submenuDivElement);
	}
	
	var found = false;
	var length = submenus.length;
	for(var i = 0; i < length; i++)
	{
		if(submenus[i].id == submenuDivElement.id)
		{
			break;
		}
	}
	if(!found)
	{
		submenus[submenus.length] = submenuDivElement;
	}
	
	if(!submenuDivElement.systemDiv)
	{
		var headerImage = document.getElementById("headerImage");
		var offsetLeft = findPageX(headerImage);
		var offsetTop = 172;
		
		submenuDivElement.style.left = offsetLeft + "px";
		submenuDivElement.style.top = offsetTop + "px";
		submenuDivElement.className = "smVisible";
	}
	submenuDivElement.mmItemId = mmItemId;
	
	window.setTimeout(function () {tryHideSubmenu(submenuDivElement);}, tryHideTimeoutMs);
}

function hideSubmenu()
{
	var length = submenus.length;
	for(var i = 0; i < length; i++)
	{
		submenus[i].className = "smHidden";
		highlight(submenus[i].mmItemId, false);
	}
}

function tryHideSubmenu(div)
{
	var header02 = document.getElementById("menuHeader" + div.mmItemId + "02");
	var button = document.getElementById("menuButton" + div.mmItemId);
	var footer02 = document.getElementById("menuFooter" + div.mmItemId + "02");
	
	if(containsPt(div, mousePositionCache) || 
		containsPt(header02, mousePositionCache) || 
		containsPt(footer02, mousePositionCache) || 
		containsPt(button, mousePositionCache))
	{
		
		window.setTimeout(function () {tryHideSubmenu(div);}, tryHideTimeoutMs);
		return;
	}
	
	div.className = "smHidden";
	highlight(div.mmItemId, false);
}

function mmButtonClicked(mmItemId, url)
{
	document.location.href = url;
}

function menuMouseMonitor()
{
	var eventObject = null;
	var eventTarget = null;
	
	if (arguments.length != 0)
		eventObject = arguments[0] ;
	else if (event)
		eventObject = event;
	else
		return true;
		
	if (!eventObject)
		return false;
		
	if (eventObject.srcElement)
		eventTarget = eventObject.srcElement;
	else if (eventObject.target)
		eventTarget = eventObject.target;
	else
		return true;

	if (!eventTarget)
		return false;
		
	mousePositionCache = GetPageOffsetFromEvent(eventObject, eventTarget);
	return false;
}

function highlight(mmItemId, enabled)
{
	var header01 = document.getElementById("menuHeader" + mmItemId + "01");
	var header02 = document.getElementById("menuHeader" + mmItemId + "02");
	var header03 = document.getElementById("menuHeader" + mmItemId + "03");
	var footer01 = document.getElementById("menuFooter" + mmItemId + "01");
	var footer02 = document.getElementById("menuFooter" + mmItemId + "02");
	var footer03 = document.getElementById("menuFooter" + mmItemId + "03");
	
	var cssClass;
	if(enabled)
	{
		cssClass = "menuFooterHigh";
	}
	else
	{
		cssClass = "menuFooterLow";
	}
	
	header01.className = cssClass;
	header02.className = cssClass;
	if(header03)
	{
		header03.className = cssClass;
	}
	footer01.className = cssClass;
	footer02.className = cssClass;
	if(footer03)
	{
		footer03.className = cssClass;
	}
}


