	var enableDebug = 'status'; //options are 'alert', 'status', 'no'

	var agt=navigator.userAgent.toLowerCase();
	var use_gebi = (document.getElementById) ? true : false;
	var ie4flag = (document.all) ? true : false;
	var ns4flag = (document.layers) ? true : false;
	var ns6flag = (use_gebi && !document.all) ? true : false;
	var safariflag = ((agt.indexOf('safari')!=-1)&&(agt.indexOf('mac')!=-1))?true:false;
	var windowsflag = (agt.indexOf('window')!=-1)?true:false;
	var macIEflag = ((agt.indexOf('msie 5')!=-1) && (agt.indexOf('mac')!=-1))?true:false;
	
//	alert (agt + ":" + ie4flag + ":" + macIEflag + ":" + use_gebi);
	
	var subnavShowing = false;
	var subnavExit = false;
	
	var x = 0;  // These variables are reset by the Get Location functions
	var y = 0;
	
	var subnavOffsetX = -4; 	// Offsets are the distance that the menu should offset from the 
	var subnavOffsetY = 18; 	// parent objects - usually the height of the parent object and a border, if any.
	
	var ie4OffsetX = 318;   // absolute location of the top-left item of the parent objects
	var ie4OffsetY = 65;	// because IE 4 doesn't recognize the DOM parent heirarchy of nested tables
	
	//debug function
	function doDebug(someOutput) {
		if (enableDebug == 'alert') {
			alert(someOutput);
		} else if (enableDebug == 'status') {
			status = someOutput;
		}
		return true;
	}
	
	
	//subnav positioning high-level mgmt
	function repositionLayers() {
		doDebug('repositionLayers()');
		setLayerPosition("subnav1");
		setLayerPosition("subnav2");
		setLayerPosition("subnav3");
		setLayerPosition("subnav4");
		setLayerPosition("subnav5");
		return true;
	}
	
	// layer positioning
	function setLayerPosition(myobjectName) {
		doDebug('setLayerPosition(' + myobjectName + ')');
		var mylayerName = myobjectName + "Layer";
		if (getPosition(myobjectName)) {
			tempx = x + subnavOffsetX;
			tempy = y + subnavOffsetY;
			
			// Logic to find position
			if (safariflag) { 
				// now set layer top and left accordingly
				document.getElementById(mylayerName).style.left = (tempx) + "px";
				document.getElementById(mylayerName).style.top = (tempy - 1) + "px";
				}
			else if (use_gebi && ns6flag) {  
				// now set layer top and left accordingly
				document.getElementById(mylayerName).style.left = (tempx) + "px";
				document.getElementById(mylayerName).style.top = (tempy - 1) + "px";
				}
			else if (use_gebi && !windowsflag) {
				// now set layer top and left accordingly
				document.all[mylayerName].style.pixelLeft = (tempx);
				document.all[mylayerName].style.pixelTop = (tempy - 1);
				}
			else if (use_gebi && windowsflag) {
				// now set layer top and left accordingly
				document.all[mylayerName].style.pixelLeft = (tempx);
				document.all[mylayerName].style.pixelTop = (tempy - 1);
				//alert (windowsflag);
				}
			else if (ie4flag) {
				// now set layer top and left accordingly
				document[mylayerName].style.pixelLeft = tempx + 1;
				document[mylayerName].style.pixelTop = tempy;
				}
			else {
				x=0; y=0; return false;
				}
			return true;
		}
	}
	
	// layer hiding and showing
	function showLayer(lay) {
		doDebug('showLayer(' + lay + ')');
		if (ie4flag) {document.all[lay].style.visibility = "visible";}
		if (ns4flag) {document.layers[lay].visibility = "show";}
		if (ns6flag) {document.getElementById(lay).style.visibility="visible";}
		return true;
	}
	
	function hideLayer(lay) {
		doDebug('hideLayer(' + lay + ')');
		if (ie4flag) {document.all[lay].style.visibility = "hidden";}
		if (ns4flag) {document.layers[lay].visibility = "hide";}
		if (ns6flag) {document.getElementById(lay).style.visibility="hidden";}
		return true;
	}
	
	//returns position of object in page
	function getPosition(myobjectName) {
		doDebug('getPosition(' + myobjectName + ')');
		// Logic to find position
		if (use_gebi) {
		doDebug('using gebi...');
			var o=document.getElementById(myobjectName);
			x=setLayerPositionPageOffsetLeft(o);
			y=setLayerPositionPageOffsetTop(o);
			}
		else if (ie4flag) {
		doDebug('usingie4flag...');
			x=setLayerPositionPageOffsetLeft(document.all[myobjectName]);
			y=setLayerPositionPageOffsetTop(document.all[myobjectName]);
			}
		else {
			doDebug("default");
			x=0;
			//y=0;
			return false; 
			}
		return true;
	}
	
	// Functions for IE, mozilla, safari to get position of an object
	function setLayerPositionPageOffsetLeft (el) {
		doDebug('setLayerPositionPageOffsetLeft(' + el + ')');
		if (el != "" && el != null) {
			if (ie4flag && !use_gebi) {
				if (el.offsetLeft) {
					var ol=el.offsetLeft;
					while ((el=el.offsetParent) != null) { 
						ol += el.offsetLeft; 
					}
					ol += ie4OffsetX;
				} else {
					var ol=0;
				}
			} else {
				var ol=el.offsetLeft;
				while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
			}
		} else {
			var ol=0;
		}
		if (macIEflag) {
			var macMarginLeft=parseInt(document.body.currentStyle.marginLeft);
			ol += macMarginLeft;
		}
		return ol;
	}
	
	function setLayerPositionPageOffsetTop (el) {
		doDebug('setLayerPositionPageOffsetTop(' + el + ')');
		if (el != "" && el != null) {
			if (ie4flag && !use_gebi) {
				if (el.offsetTop) {
					var ot=el.offsetTop;
					while((el=el.offsetParent) != null) { ot += el.offsetTop; }
				} else {
					var ot=0;
				}
					ot += ie4OffsetY;
			} else {
				var ot=el.offsetTop;
				while((el=el.offsetParent) != null) { ot += el.offsetTop; }
			}
		} else {
			var ot=0;
		}
		if (macIEflag) {
			var macMarginTop=parseInt(document.body.currentStyle.marginTop);
			ot += macMarginTop;
		}

		return ot;
	}
	
	//subnav hiding and showing high-level mgmt
	function showSubnav(lay) {
		doDebug('showSubnav(' + lay + ') mgmt function');
		hideLayer("subnav1Layer");
		hideLayer("subnav2Layer");
		hideLayer("subnav3Layer");
		hideLayer("subnav4Layer");
		hideLayer("subnav5Layer");
		showLayer(lay);
		subnavShowing = true;
		subnavExit = false;
		setTimeout("checkSubnav()",500);
	doDebug(lay);
		return true;
	}
	
	//periodic check to turn off subnav if user has left menu area
	function checkSubnav() {
		doDebug('checkSubnav()');
		if ((subnavShowing) && (subnavExit)) {
			hideLayer("subnav1Layer");
			hideLayer("subnav2Layer");
			hideLayer("subnav3Layer");
			hideLayer("subnav4Layer");
			hideLayer("subnav5Layer");
			subnavExit = false;
		} else if (subnavShowing) {
			setTimeout("checkSubnav()",500);
		}
		return true;
	}
	
	//subnav entry highlight
	function highlightSubnav(someObject) {
		doDebug('highlightSubnav(' + someObject + ')');
		subnavExit=false;
		return true;
	}
	
	//subnav entry unlight
	function unlightSubnav(someObject) {
		doDebug('unlightSubnav(' + someObject + ')');
		subnavExit=true;
		return true;
	}

