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)
}


function captureMousePosition(e) {
	if (document.all) {
 		xMousePos = window.event.clientX+document.body.scrollLeft;
 		yMousePos = window.event.clientY+document.body.scrollTop;
 		xMousePosMax = document.body.clientWidth+document.body.scrollLeft;
 		yMousePosMax = document.body.clientHeight+document.body.scrollTop;
 		yMousePosMin = document.body.scrollTop +3;
	} else if (document.getElementById) {
 		// Netscape 6 behaves the same as Netscape 4 in this regard 
 		xMousePos = e.pageX;
 		yMousePos = e.pageY;
 		//xMousePosMax = document.width + 16;
 		if (document.body && (document.body.offsetWidth != null) && (window.pageXOffset != null)) xMousePosMax = document.body.offsetWidth + window.pageXOffset;
 		else if (window.innerWidth != null && window.pageXOffset != null) xMousePosMax = window.innerWidth + window.pageXOffset;
 		yMousePosMax = window.innerHeight+window.pageYOffset -3;
 		yMousePosMin = window.pageYOffset +3;
	}
	if (whichMenu) {
		if (xMousePos < menuleft || xMousePos > menuleft + menuwidth || yMousePos < menutop || yMousePos > menutop + menuheight) showMenu(whichMenu,"off")
	}
} 

function showMenu(which,onoff, mw){
	whichMenu = which
	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) {
			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;
			currentMenu.style.top = menutop;
			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;
			currentPop.style.top = menutop;
			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;

