/* 
 ============================================================================
	Copyright Michael Leahy 2008. Used with Permission.                             
	May not be duplicated or reproduced.
	MINIMUM BROWSER CHECK - PC: IE6+/Firefox1+/Safari3+/Netscape7+
	MINIMUM BROWSER CHECK - MAC: Firefox1+/Safari3+
 ============================================================================ 
//*/

// ============================================================ FUNCTIONS: NAV CONTROLS ============================================================ //
	
	// ==================== GLOBAL SETTINGS ==================== //
	var snavSliderSpeed = 5; // Move Sub Nav: Lower = Faster
	var snavSliderIncr = 10; // Move Sub Nav: Higher = Faster
	var snavSliderExitX = true; // Exit Sub Nav: Mouseout Left or Right
	var snavSliderExitY = false; // Exit Sub Nav: Mouseout Up or Down
	var snavParentOpenHL = false; // Set True to enable standing hover for Parent Nav Item Slider Open
	
	var snavDefWidth = 143; // Parent Nav Item Width (hint: viewable navigation item width)
	var snavDefWidthPadLeft = 9; // Parent Nav Item Width - Padding on Left (hint: viewable navigation item width)
	var snavDefHeight = 22; // Parent Nav Item Height
	var snavExtraDivCount = 3; // Number of Non-Navigational DIVs in Sub Nav
	var snavDivHeight = 25.5; // Sub Nav DIV Height
	var snavExtraDivHeight = 28; // Height Non-Navigational DIVs in Sub Nav
	// ==================== GLOBAL SETTINGS ==================== //
	
	// !!!!!!!!!!!!!!!!!!!! DO NOT MODIFY BELOW HERE !!!!!!!!!!!!!!!!!!!! //
	
	// ==================== GLOBAL CONTROLS ==================== //
	var navIsHome = false; // Home Nav State
	var snavActiveObj = ''; // Sub Nav ID
	var snavOpenObj = new Array(); // Sub Nav Open IDs
	var snavParentObj = ''; // Sub Nav Parent Nav Object
	var snavOpenParentObj = new Array(); // Sub Nav Parent Nav Open Objects
	var snavIsActive = false; // Sub Nav Movement State
	var snavTimer = ''; 
	var mouseXY = new Object();
	
	var IE = document.all?true:false;
		if (IE) snavSliderIncr = snavSliderIncr + 5; // IE Timing is Slower than Other Browsers
		if (!IE) document.captureEvents(Event.MOUSEMOVE);
	
	document.onmousemove = snavExit; //get_mouseXY;
	// ==================== GLOBAL CONTROLS ==================== //
	
	
	function navMouseState(oObj) {
		if (oObj.className == '') {
			if (oObj.getElementsByTagName('a')[0].className == 'navHome') navIsHome = true;
					
			oObj.className = 'navBGHover';
			oObj.getElementsByTagName('a')[0].className = 'navHover';
			
			if (oObj.getElementsByTagName('img')) oObj.getElementsByTagName('img')[0].src = oObj.getElementsByTagName('img')[0].src.replace(/(.*).png/gi, '$1-ovr.png');
		} else {
			oObj.className = '';
			
			if (navIsHome) {
				navIsHome = false;
				oObj.getElementsByTagName('a')[0].className = 'navHome';
			} else oObj.getElementsByTagName('a')[0].className = 'nav';
			
			if (oObj.getElementsByTagName('img')) oObj.getElementsByTagName('img')[0].src = oObj.getElementsByTagName('img')[0].src.replace(/(.*)-dwn.png/gi, '$1.png');
			if (oObj.getElementsByTagName('img')) oObj.getElementsByTagName('img')[0].src = oObj.getElementsByTagName('img')[0].src.replace(/(.*)-ovr.png/gi, '$1.png');
		}
	}
	
	function snavMouseState(oObj) {
		if (oObj.className == 'snavItem') {
			oObj.className = 'snavItem navBGHover';
			oObj.getElementsByTagName('a')[0].className = 'navHover';
		} else {
			oObj.className = 'snavItem';
			oObj.getElementsByTagName('a')[0].className = 'nav';
		}
	}
	
	function snavParentMouseOver(oObj, oStand) {
		snavParentMouseState(oObj,true); // Must be called to work with array controls (Simplifies HTML Navigation)
		
		if (snavParentOpenHL) return;
			
		oObj.className = 'navBGHover';
		if (oObj.getElementsByTagName('a')) oObj.getElementsByTagName('a')[0].className = 'navHover';
		if (oObj.getElementsByTagName('img')) oObj.getElementsByTagName('img')[0].src = oObj.getElementsByTagName('img')[0].src.replace(/(.*)-dwn.png/gi, '$1-ovr.png');
	}	
	
	function snavParentMouseOut(oObj, oStand) {
		if (snavParentOpenHL) return; 
		
		oObj.className = 'snavParentHover';
		if (oObj.getElementsByTagName('a')) oObj.getElementsByTagName('a')[0].className = 'nav';
		if (oObj.getElementsByTagName('img')) oObj.getElementsByTagName('img')[0].src = oObj.getElementsByTagName('img')[0].src.replace(/(.*)-ovr.png/gi, '$1-dwn.png');
	}
	
	function snavParentMouseState(oObj, oOpen) {
		if (oOpen) {
			var exits = snavParentObjectArr(oObj);
			if (exits) return;
			
			navMouseState(oObj);
			snavParentObj = oObj;
		} else {
			navMouseState(oObj);
			if (snavParentObj == oObj) snavParentObj = '';
		}
	}
		
	function snavControl(oObj, oOpen) {
		if (snavIsActive && oOpen) return;
		if (oOpen && snavActiveObj == '') { snavActiveObj = oObj; }
		if (oOpen) snavObjectArr(oObj);
		
		var maxheight = Math.round((document.getElementById(oObj).getElementsByTagName('div').length - snavExtraDivCount) * snavDivHeight) + snavExtraDivHeight;
			if (!oOpen) maxheight = snavDefHeight;
		
		snavSlider(oObj, maxheight, oOpen);
	}
	
	function snavExit(oEvent) {
		get_mouseXY(oEvent);
		
		if (!snavIsActive && (snavActiveObj != '' || snavOpenObj.length > 0)) {
			var snavObj = document.getElementById(snavActiveObj);
				if (!snavObj) return;
			var objW = snavDefWidth;
			var objH = snavObj.clientHeight;
				if (objH == 0) objH = snavObj.offsetHeight;
			var objXY = get_XYcoordinates(snavActiveObj);
			
			if (snavSliderExitX) { 
				if (mouseXY.x < (objXY.x + snavDefWidthPadLeft) || mouseXY.x > ((objXY.x + snavDefWidthPadLeft) + objW)) {
					//snavControl(snavActiveObj, false);
					for (var i=0; i<snavOpenObj.length; i++) { snavControl(snavOpenObj[i], false); }
				}
			}
			if (snavSliderExitY) { if (mouseXY.y < objXY.y || mouseXY.y > (objXY.y + objH)) snavControl(snavActiveObj, false); }
		}
	}
		
	function snavSlider(oObj, oMaxHeight, oOpen) {
		var snavObj = document.getElementById(oObj);
		var curheight = snavObj.clientHeight;
			if (curheight == 0) curheight = snavObj.offsetHeight;
		
		if (oOpen) {
			if (curheight + snavSliderIncr < oMaxHeight) {
				snavObj.style.height = (curheight + snavSliderIncr)+'px';
				snavIsActive = true;
				snavIsOpen = true;
				snavTimer = setTimeout("snavSlider('"+oObj+"',"+oMaxHeight+",true)",snavSliderSpeed);
			} else {
				snavObj.style.height = oMaxHeight+'px';
				snavIsActive = false;
				//clearTimeout(snavTimer);
			}
		} else {
			if (curheight - snavSliderIncr > snavDefHeight) {
				snavObj.style.height = (curheight - snavSliderIncr)+'px';
				snavIsActive = true;
				snavTimer = setTimeout("snavSlider('"+oObj+"',"+oMaxHeight+",false)",snavSliderSpeed);
			} else {
				snavObj.style.height = snavDefHeight+'px';
				snavActiveObj = '';
				for (var i=0; i<snavOpenObj.length; i++) { if (snavOpenObj[i] == oObj) { var pos = i; snavOpenObj.splice(i,1); break; } }
				
				//* Disabled to de-activate the standing highlight for Parent Nav
				snavParentMouseState(snavOpenParentObj[pos],false);
					snavOpenParentObj.splice(pos,1);
				//*/
				
				snavIsActive = false;
				//clearTimeout(snavTimer);
			}
		}
	}
	
	function snavObjectArr(oObjID) {
		var exists = false;
		for (var i=0; i<snavOpenObj.length; i++) { if (snavOpenObj[i] == oObjID) exists = true; }

		if (!exists) snavOpenObj.push(oObjID);
	}
	
	function snavParentObjectArr(oObj) {
		var exists = false;
		for (var i=0; i<snavOpenParentObj.length; i++) { if (snavOpenParentObj[i] == oObj) exists = true; }

		if (!exists) snavOpenParentObj.push(oObj);
		
		return exists;
	}
	
// ============================================================ FUNCTIONS: COORIDNATES ============================================================	//
	
	function get_mouseXY(e) {
		if (IE) {
			mouseXY.x = event.clientX + document.body.scrollLeft;
			mouseXY.y = event.clientY + document.body.scrollTop;
		} else {
			mouseXY.x = e.pageX
			mouseXY.y = e.pageY
		}
	}
	
	function get_XYcoordinates(element) {
		var useWindow = false;
		var coordinates = new Object();
		var x = 0;
		var y = 0;
		var use_gebi = false;
		var use_css = false;
		var use_layers = false;
		
		if (document.getElementById) use_gebi = true;
		else if (document.all) use_css = true;
		else if (document.layers) use_layers = true;
		
		if (use_gebi && document.all) {
			x = get_Xposition(document.all[element]);
			y = get_Yposition(document.all[element]);
		} else if (use_gebi) {
			x = get_Xposition(document.getElementById(element));
			y = get_Yposition(document.getElementById(element));
		} else if (use_css) {
			x = get_Xposition(document.all[element]);
			y = get_Yposition(document.all[element]);
		} else if (use_layers) {
			var found = 0;
			for (var i=0; i<document.anchors.length; i++) {
				if (document.anchors[i].name==element) {
					found = 1; 
					break;
				}
			}
	
			if (found == 0) {
				coordinates.x = 0;
				coordinates.y = 0;
				return coordinates;
			}
			
			x = document.anchors[i].x;
			y = document.anchors[i].y;
		} else {
			coordinates.x = 0;
			coordinates.y = 0;
			return coordinates;
		}
		
		coordinates.x = x;
		coordinates.y = y;
		return coordinates;
	}
	
	function get_Xposition (element) {
		var ol = element.offsetLeft;
		while ((element = element.offsetParent) != null) {
			ol += element.offsetLeft;
		}
		return ol;
	}
	
	function get_Yposition (element) {
		var ot = element.offsetTop;
		while((element = element.offsetParent) != null) {
			ot += element.offsetTop;
		}
		return ot;
	}




