var nn = (document.layers);
var ie = (document.all);
var ie4=document.all && !document.getElementById; 
if(ie4) { 
	document.getElementById = new Function('var expr = /^\\w[\\w\\d]*$/, elname=arguments[0]; if(!expr.test(elname)) { return null; } else if(eval("document.all."+elname)) { return eval("document.all."+elname); } else return null;') 
}
var nn5 = document.getElementById;

var rowOrBlock = "table-row";
if (ie) rowOrBlock = "block";

var tableOrBlock = "table";
if (ie) tableOrBlock = "block";

if(nn5||ie) {
	document.onmousemove = captureMousePosition;
	document.onkeydown = catureKeyPress;
}
// Global variables
var xMousePos = 0;  // Horizontal position of the mouse on the screen
var yMousePos = 0;  // Vertical position of the mouse on the screen
var xMousePosMax = 0; // Width of the page
var yMousePosMax = 0; // Height of the page
var yMousePosMin = 0; // Top of the page
var menuleft = 0;
var menutop = 0;
var menuwidth = 132;
var menuheight = 1000;
var whichMenu = false;

function catureKeyPress(e) {
	if (whichMenu) {
		k = (window.event) ? event.keyCode : e.which;
		if (k == 38 || k == 40) {
			if (lastMenuItem != null) {
				myregexp = /(\d+)/
				m = myregexp.exec(lastMenuItem.id)
				m = parseInt(m[0]);
				m = m + (k-40)
				currentPop.getElementsByTagName("A")[m].focus();
				//alert("The Current menu is " + m + ".")
			}
			return false;
		} else if(k == 32) { window.location = (lastMenuItem.href); return false; }
	} else if(typeof keyDown=='function') keyDown(e)
}


mouseCount = 0
function captureMousePosition(e) {
	var bod = (document.documentElement || document.body)
	var YOffset = (window.pageYOffset || bod.scrollTop )
	var XOffset = (window.pageXOffset || bod.scrollLeft )
	if (bod && (bod.offsetWidth != null) && (window.pageXOffset != null)) {
 		// Netscape 6 behaves the same as Netscape 4 in this regard 
 		xMousePos = e.pageX;
  		//document.getElementsByTagName("h2")[0].innerHTML = (xMousePos) // IE9 screws up when over LI.
		yMousePos = e.pageY;
 		//xMousePosMax = document.width + 16;
 		xMousePosMax = bod.offsetWidth + XOffset;
 		yMousePosMax = window.innerHeight + YOffset -3;
 		yMousePosMin = YOffset +3;
	} else if (window.event.clientX != null) {
 		if (document.body.clientWidth > document.documentElement.clientWidth) {
 			bod = document.body;
			YOffset =  bod.scrollTop
			XOffset = bod.scrollLeft
 		}
 		xMousePos = window.event.clientX + XOffset;
 		yMousePos = window.event.clientY + YOffset;
 		xMousePosMax = bod.clientWidth + XOffset;
 		yMousePosMax = bod.clientHeight + YOffset;
 		yMousePosMin = YOffset +3;
 		//if(mouseCount < 2) alert(document.documentElement.clientWidth + ":" + document.body.clientWidth)
 		//mouseCount = mouseCount + 1
	} 
	if (whichMenu) {
		if (xMousePos < menuleft || xMousePos > menuleft + menuwidth || yMousePos < menutop || yMousePos > menutop + menuheight) showMenu(whichMenu,"off")
	}
} 

function showMenu(which,onoff, mw){
	whichMenu = which
	var bod = (document.documentElement || document.body)
	if(typeof(which)=="string") currentMenu = document.getElementById(which + "Popup");
	
	var ULs = currentMenu.getElementsByTagName("UL")
	
	if(!mw && ULs.length == 0) menuwidth = 138; else {
		menuwidth = mw;
		if(ie && !". ".trim) {  // only for IE before 9 (IE9 unstands "trim")
			if(ULs.length > 0) {
				menuwidth = currentMenu.offsetWidth
				for (var UL = 0; UL < ULs.length; UL++){
					ULs[UL].style.width =  (ULs[UL].offsetParent.offsetWidth  - 2) + "px";
				}
				if(xMousePosMax) xMousePosMax -= 4;
			}
			else {
				menuwidth = menuwidth - 17; // assumes 16px of padding and 1px border
			}
		}
		else {
			if(ULs.length > 0) {
				menuwidth = currentMenu.offsetWidth
				if(xMousePosMax) xMousePosMax -= 20;
			}	
			else menuwidth = menuwidth + 17; // assumes 16px of padding and 1px border
		}
	}
	var selects = document.getElementsByTagName("select")
	if (which) {
		if (onoff == "on") {
			if(ie) {
				l = selects.length
				for(var i=0; i<l; i++){
					selects[i].style.visibility = "hidden"; // compensate for SELECT elements always being in front of everything in IE
				}
			}
			menuheight = currentMenu.offsetHeight;
			menuleft = parseInt(xMousePos - (menuwidth/2)) ;


			// Try to keep the pop-up within the visible area:
			if(xMousePosMax) if (menuleft + menuwidth > xMousePosMax - 6) menuleft = xMousePosMax - menuwidth - 6 ;
			var topOffset = (ULs.length == 0)? 15 : 30;
			if (ULs.length == 1) { if (ULs[0].getElementsByTagName("LI").length <= 2) topOffset = 11; }
			menutop = (yMousePos - topOffset + menuheight < yMousePosMax) ? yMousePos - topOffset :  yMousePosMax - menuheight - 6;
			if(yMousePosMin) if (menutop < yMousePosMin) menutop = yMousePosMin ;
			if (menutop < 3) menutop = 3
			if (menuleft < 3) menuleft = 3
			
			//var reporter = document.getElementById("reporter");
			//reporter.innerHTML = "Mouse x: " + xMousePos  +"<BR>Max mouse x:"+ xMousePosMax +"<BR>Menu Width:"+ menuwidth +"<BR>Menu Left:"+ menuleft +"<BR>Greater than window:"+ (document.body.offsetWidth > window.innerWidth);
			
			currentMenu.style.left = menuleft + "px";
			currentMenu.style.top = menutop + "px";
			currentMenu.style.visibility = "visible";
		}
		else {
			currentMenu.style.visibility = "hidden";
			currentMenu.style.left = 0;
			currentMenu.style.top = 0;
			whichMenu = false;
			if(ie) {
				l = selects.length
				for(var i=0; i<l; i++){
					selects[i].style.visibility = "visible"; // compensate for SELECT elements always being in front of everything in IE
				}
			}
		}
	} 
}

function showFixedXMenu(which,onoff){
	whichMenu = which
	if (nn5 && which) {
		currentPop = document.getElementById(which + "Popup");
		menuParent = document.getElementById(which + "Menu");
		menuOff(menuParent)
		menuwidth = (document.all) ? menuParent.offsetWidth : document.defaultView.getComputedStyle(menuParent, "").getPropertyValue("width");
		menuwidth = parseInt(menuwidth) + 31; 
		if (onoff == "on") {
			menuleft = 20 
			currentPop.style.width = menuwidth;
			menuheight = currentPop.offsetHeight;
			menutop = (yMousePos - 15 + menuheight < yMousePosMax) ? yMousePos - 15 :  yMousePosMax - menuheight - 6
			currentPop.style.left = menuleft + "px";
			currentPop.style.top = menutop + "px";
			currentPop.style.visibility = "visible";
			thisMenuItem = currentPop.getElementsByTagName("A")[0];
			thisMenuItem.focus();
			menuItemFocus(thisMenuItem);
		}
		else {
			currentPop.style.visibility = "hidden";
			currentPop.style.left = 0;
			currentPop.style.top = 0;
			whichMenu = false;
		}
	} 
}

function menuItemFocus(theLink){
	if(lastMenuItem != null) lastMenuItem.style.backgroundColor='#fff';
	theLink.style.backgroundColor='yellow'; 
	lastMenuItem = theLink;
}

var lastMenuItem = null;

