// JavaScript find position: http://blog.firetree.net/2005/07/04/javascript-find-position/
function findPosX(obj) {
	var curleft = 0;
	if(obj.offsetParent)
		while(1) {
			curleft += obj.offsetLeft;
			if(!obj.offsetParent) break;
			obj = obj.offsetParent;
		}
	else if(obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if(obj.offsetParent)
		while(1) {
			curtop += obj.offsetTop;
			if(!obj.offsetParent) break;
			obj = obj.offsetParent;
		}
	else if(obj.y)
		curtop += obj.y;
	return curtop;
}

// determine position of mouse cursor; from http://javascript.about.com/library/blmousepos.htm
function mouseX(evt) {
	if (evt.pageX) return evt.pageX;
	else if (evt.clientX)
	   return evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
	else return null;
}

function mouseY(evt) {
	if (evt.pageY) return evt.pageY;
	else if (evt.clientY)
	   return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
	else return null;
}

var openFlyout = "";

function showFlyout(navItem, flyoutItem) {
	hideFlyout();
	document.getElementById(flyoutItem).style.width = "auto";
	document.getElementById(flyoutItem).style.height = "auto";
	document.getElementById(flyoutItem).style.top = findPosY(document.getElementById(navItem)) + 32 + "px";
	document.getElementById(flyoutItem).style.left = findPosX(document.getElementById(navItem)) + "px";
	document.getElementById(flyoutItem).style.visibility = "visible";
	openFlyout = flyoutItem;
}

function hideFlyout() {
	if (openFlyout != "") {
		document.getElementById(openFlyout).style.width = "0px";
		document.getElementById(openFlyout).style.height = "0px";
		document.getElementById(openFlyout).style.top = "0px";
		document.getElementById(openFlyout).style.left = "0px";
		document.getElementById(openFlyout).style.visibility = "hidden";
		openFlyout = "";
	}
}

function checkMouseOut(elementType, elementID, event) {
	relMousePosX = mouseX(event) - findPosX(document.getElementById(elementID));	// relative X position of mouse pointer in element, corrected for scrolling using "mouseX" function
	relMousePosY = mouseY(event) - findPosY(document.getElementById(elementID));	// relative Y position of mouse pointer in element, corrected for scrolling using "mouseY" function
	itemHeight = document.getElementById(elementID).offsetHeight;					// height of the element
	itemWidth = document.getElementById(elementID).offsetWidth;						// width of the element
	switch (elementType) {
		case "submenu":																// flyout element: consider movement outside any boundary "out of range"
			if ((relMousePosX > itemWidth) || (relMousePosX <= 0) || (relMousePosY > itemHeight) || (relMousePosY <= 0)) {
				hideFlyout();
			}
			break;
		case "topnav":																// top navigation element: don't consider movement below bottom boundary "out of range"
			if ((relMousePosX > itemWidth) || (relMousePosX <= 0) || (relMousePosY <= 0)) {
				hideFlyout();
			}
			break;
	}
}