/*---------------------------------------------------------------------
	JavaScript DOM Dynamic Dropdown Menu JS

	REQUIREMENTS:
		Works in conjunction with /assets/css/widgets/dropdowns.css 
			and related /skins/skin/skin_wdgt_dropdowns.css subfolder
		Utilizes functions found in /assets/js/functions.js
	
	USAGE:
		Make sure function InitMenuDropdowns() is called in the window.onload event 
		
-----------------------------------------------------------------------*/

/*-------------------------------
	general setup
---------------------------------*/
var sNavImgPath = "/assets/images/skin/mlar/nav/";

var iMenuWidth = 0;
var iMainNavX = 0; 
var iMainNavY = 0; 
var iFirstLevelWidth = 186;
var iFirstLevelHomeWidth = 191;
var iExtraPadding = 0;
var iExtraPaddingVal = 36;
var iExtraPaddingHomeVal = 41;

var bUseDiffImgLevels = false;

/*-------------------------------
	InitMenuDropdowns() - called from window.onload event
---------------------------------*/
var InitMenuDropdowns = function() {
	//alert("InitMenuDropdowns");
	if (!document.getElementById) return
	InitMenuDropdownLists();
}

/*-------------------------------
	InitMenuDropdownLists()
---------------------------------*/
var InitMenuDropdownLists = function() {
	//alert("InitMenuDropdownLists");
	/*---------------
		parse semantic lists; apply classes/rollover functions via DOM
	---------------*/
	var mainNavRoot = document.getElementById("Nav");
	oMenuShadeContainer = document.createElement("div")
	oMenuShadeContainer.id = 'MenuShadeContainer';

	mainNavRoot.parentNode.appendChild(oMenuShadeContainer);	// append to NavBlock
	//oMenuShadeContainer.width = '10px';
	//oMenuShadeContainer.height = '800px';
	//alert(oMenuShadeContainer.width);
						
	iMenuWidth = mainNavRoot.offsetWidth;
	iMainNavX = GetAbsXPosByNode(mainNavRoot);
	iMainNavY = GetAbsYPosByNode(mainNavRoot);
	imgTemp = new Image();
	if (bUseDiffImgLevels) {
		var oBodyTag = document.getElementsByTagName('body')[0];
		if (oBodyTag.id == 'HomePage') {
			iFirstLevelWidth = iFirstLevelHomeWidth;
			iExtraPaddingVal = iExtraPaddingHomeVal;
		}
	}
	/*---------------
		now that "Nav" is found, dive down and apply styles and events to semantic list menu items.
	---------------*/
	InitMenuDropdownListsDive(mainNavRoot.firstChild.firstChild, 0);
}

/*-------------------------------
	InitMenuDropdownListsDive()
---------------------------------*/
var InitMenuDropdownListsDive = function(oCurrentNode, iLevel) {
	if (oCurrentNode.nodeName=="UL") {
		if (!cssClassActions('check',oCurrentNode,"SelectedSubs")) {
			cssClassActions('add',oCurrentNode,'MenuListOff');
		}
	}
	if (oCurrentNode.nodeName == "LI") {
		/*	Following onmouseover and onmouseout replace below 2 addEvent() function calls above until I can figure out why 
			IE doesnt get correct LI target when attachEvent is used.
				addEvent(oCurrentNode, 'mouseover', MenuListItemOnMouseOver, false);
				addEvent(oCurrentNode, 'mouseout', MenuListItemOnMouseOut, false);
		*/
		iCurrentY = GetAbsYPosByNode(oCurrentNode);
		oCurrentNode.onmouseover=function() {
			var j = 0;
			for (j=0; j<this.childNodes.length; j++) {
				if (this.childNodes[j].nodeName=="UL") {
					if (this.childNodes[j].className != 'SelectedSubs') {
						this.childNodes[j].className = 'MenuListOver';
						this.childNodes[j].style.top = this.offsetTop + 'px';
						//this.childNodes[j].style.top = GetAbsYPosByNode(this.childNodes[j])+ 'px';
						//this.childNodes[j].style.top = GetHeightByNode(this) + 'px';
						//this.childNodes[j].style.top = '0px';
						//this.childNodes[j].style.top = this.childNodes[j].style.top - this.height + 'px';
						if ( (iLevel == 0) && (bUseDiffImgLevels) ) {
							iExtraPadding = iExtraPaddingVal;
						} else {
							iExtraPadding = 0;
						}
						this.childNodes[j].style.left = this.offsetLeft + iExtraPadding + iMenuWidth + 'px';
						var menuShadeContainerRoot = document.getElementById("MenuShadeContainer");
						var oMenuShade = document.createElement("div");
						var iDist = this.offsetTop - 1000 +  this.childNodes[j].offsetHeight + 30;
						menuShadeContainerRoot.appendChild(oMenuShade);
						oMenuShade.className = 'MenuShade';
						oMenuShade.style.top = iDist + "px";
						oMenuShade.style.left = this.offsetLeft + iExtraPadding + iMenuWidth + 'px';
						this.oMenuShadeRef = oMenuShade;
						menuShadeContainerRoot.style.left = '0px';	
					}
				}
			}
		}
		oCurrentNode.onmouseout=function() {
			var j = 0;
			for (j=0; j<this.childNodes.length; j++) {
				if (this.childNodes[j].nodeName=="UL") {
					if (this.childNodes[j].className != 'SelectedSubs') {
						this.childNodes[j].className = 'MenuListOff';
						var menuShadeContainerRoot = document.getElementById("MenuShadeContainer");
						//menuShadeContainerRoot.width = this.offsetLeft + 'px';
						menuShadeContainerRoot.style.left = '-10000px';
						//menuShadeContainerRoot.width = 0;
						menuShadeContainerRoot.removeChild(this.oMenuShadeRef);
					}
				}
			}
		}
	}
	if (oCurrentNode.nodeName=="A") {

		if (cssClassActions('check',oCurrentNode,"MenuLink")) {
			addEvent(oCurrentNode, 'mouseover', MenuLinkOnMouseOver, false);
			addEvent(oCurrentNode, 'mouseout', MenuLinkOnMouseOut, false);
		}
		if (cssClassActions('check',oCurrentNode,"NavImg")) {
			addEvent(oCurrentNode, 'mouseover', NavImgOnMouseOver, false);
			addEvent(oCurrentNode, 'mouseout', NavImgOnMouseOut, false);
			if (cssClassActions('check',oCurrentNode,"SelectedNav")) {
				var bHasULSibling = false;
				for (k=0; k < oCurrentNode.parentNode.childNodes.length; k++) {
					if (oCurrentNode.parentNode.childNodes[k].nodeName=="UL") {
						bHasULSibling = true;
					}
				}
				if (bHasULSibling == true) {
					sOn = "_on_arrowright";
				} else {
					sOn = "_on";
				}
			} else {
				if (cssClassActions('check',oCurrentNode,"SelectedParent")) {
					sOn = "_on_arrowright";
				} else {
					sOn = "";
				}
			}
			oCurrentNode.iLevel = iLevel;
			if (bUseDiffImgLevels) {
				sLevel = "L" + iLevel + "/";
			} else {
				sLevel = "";
			}
			oCurrentNode.style.backgroundImage = "url(" + sNavImgPath + sLevel + oCurrentNode.id + sOn + ".gif)";

			if ((bUseDiffImgLevels) && (iLevel == 1)) {
				oCurrentNode.style.width = iFirstLevelWidth + 'px';
				oCurrentNode.style.backgroundPosition = '20px 0';
			}
			//	Use letter-spacing image replacement for Win IE 5.0; Use text-indent image replacement for all browsers except Win IE 5.0
			oCurrentNode.style.backgroundRepeat = "no-repeat";
			oCurrentNode.style.letterSpacing = "-1000em";
			oCurrentNode.style.textIndent = "-9000px";
			
			/*	*	USE THIS BLOCK TO MAKE LISTING OF NON-STANDARD HEIGHTS ();
				*	HARD-CODE INTO SKIN_WDGT_DROPDOWNS.CSS
			imgTemp.src = sNavImgPath + sLevel + oCurrentNode.id + sOn + ".gif";
			if ((imgTemp.height != 0) && (imgTemp.height != 18)) {
				addTextToDebug(oCurrentNode.id + ": height = " + imgTemp.height);
				//oCurrentNode.style.offsetHeight = imgTemp.height + "px";
				//oCurrentNode.style.height = imgTemp.height + "px";
			}
			*/
		}
	}
	/*---------------
		Gotta deal with XML whitespace in DOM: Recursion
	---------------*/
	if (getFirstChild(oCurrentNode)) {
		InitMenuDropdownListsDive(getFirstChild(oCurrentNode), iLevel + 1);
	}
	if (getNextSibling(oCurrentNode)) {
		InitMenuDropdownListsDive(getNextSibling(oCurrentNode), iLevel);
	}
}



/*---------------
	Highlight Parent
---------------*/
function HighlightParents(oCurrentNode) {
	oParentListItem = oCurrentNode.parentNode.parentNode.parentNode;
	for (k=0; k < oParentListItem.childNodes.length; k++) {
		if (oParentListItem.childNodes[k].nodeName=="A") {
			cssClassActions('swap',oParentListItem.childNodes[k],'MenuLink','MenuLinkOver');
			if (cssClassActions('check',oParentListItem.childNodes[k],"NavImg")) {
				if (bUseDiffImgLevels) {
					sLevel = "L"+oParentListItem.childNodes[k].iLevel+"/";
				} else {
					sLevel = "";
				}
				var bHasULSibling = false;
				for (l=0; l < oParentListItem.childNodes[k].parentNode.childNodes.length; l++) {
					if (oParentListItem.childNodes[k].parentNode.childNodes[l].nodeName=="UL") {
						bHasULSibling = true;
					}
				}
				if (bHasULSibling == true) {
					swapCSSBkgdImg(oParentListItem.childNodes[k], sNavImgPath + sLevel + oParentListItem.childNodes[k].id + '_on_arrowright.gif');
				} else {
					swapCSSBkgdImg(oParentListItem.childNodes[k], sNavImgPath + sLevel + oParentListItem.childNodes[k].id + '_over.gif');
				}	
			}
			HighlightParents(oParentListItem.childNodes[k]);
		}
	}
}

function UnHighlightParents(oCurrentNode) {
	oParentListItem = oCurrentNode.parentNode.parentNode.parentNode;
	for (k=0; k < oParentListItem.childNodes.length; k++) {
		if (oParentListItem.childNodes[k].nodeName=="A") {
			cssClassActions('swap',oParentListItem.childNodes[k],'MenuLinkOver','MenuLink');
			if (cssClassActions('check',oParentListItem.childNodes[k],"NavImg")) {
				if (cssClassActions('check',oParentListItem.childNodes[k],"SelectedNav")) {
					sOn = "_on";
				} else {
					sOn = "";
				}
				if (cssClassActions('check',oParentListItem.childNodes[k],"SelectedParent")) {
					sOn = "_on_arrowright";
				} else {
					sOn = "";
				}
				if (bUseDiffImgLevels) {
					sLevel = "L"+oParentListItem.childNodes[k].iLevel+"/";
				} else {
					sLevel = "";
				}
				swapCSSBkgdImg(oParentListItem.childNodes[k], sNavImgPath + sLevel + oParentListItem.childNodes[k].id + sOn + '.gif');	
			}
			HighlightParents(oParentListItem.childNodes[k]);
		}
	}
}

/*---------------
	Event Functions
---------------*/
function NavImgOnMouseOver(e) {
	//alert('NavImgOnMouseOver ' + TargetObj(e));
	if (bUseDiffImgLevels) {
		sLevel = "L"+TargetObj(e).iLevel+"/";
	} else {
		sLevel = "";
	}
	//addTextToDebug("sLevel = " + sLevel);
	var bHasULSibling = false;
	for (k=0; k < TargetObj(e).parentNode.childNodes.length; k++) {
		if (TargetObj(e).parentNode.childNodes[k].nodeName=="UL") {
				bHasULSibling = true;
		}
	}
	if (bHasULSibling == true) {
		swapCSSBkgdImg(TargetObj(e),sNavImgPath + sLevel + TargetObj(e).id + '_on_arrowright.gif');
	} else {
		swapCSSBkgdImg(TargetObj(e),sNavImgPath + sLevel + TargetObj(e).id + '_over.gif');
	}
}

function NavImgOnMouseOut(e) {
	//alert('NavImgOnMouseOut ' + TargetObj(e));
	if (cssClassActions('check',TargetObj(e),"SelectedNav")) {
		var bHasULSibling = false;
		for (k=0; k < TargetObj(e).parentNode.childNodes.length; k++) {
			if (TargetObj(e).parentNode.childNodes[k].nodeName=="UL") {
					bHasULSibling = true;
			}
		}
		if (bHasULSibling == true) {
			sOn = "_on_arrowright";
		} else {
			sOn = "_on";
		}
	} else {		
		if (cssClassActions('check',TargetObj(e),"SelectedParent")) {
			sOn = "_on_arrowright";
		} else {
			sOn = "";
		}
	}	
	if (bUseDiffImgLevels) {
		sLevel = "L"+TargetObj(e).iLevel+"/";
	} else {
		sLevel = "";
	}
	swapCSSBkgdImg(TargetObj(e), sNavImgPath + sLevel + TargetObj(e).id + sOn + '.gif');
}
function MenuLinkOnMouseOver(e) {
	//alert('MenuLinkOnMouseOver ' + TargetObj(e));
	cssClassActions('swap',TargetObj(e),'MenuLink','MenuLinkOver');
	HighlightParents(TargetObj(e));
}

function MenuLinkOnMouseOut(e) {
	//alert('MenuLinkOnMouseOut ' + TargetObj(e));
	cssClassActions('swap',TargetObj(e),'MenuLinkOver','MenuLink');
	UnHighlightParents(TargetObj(e));
}

function MenuListItemOnMouseOver(e) {
	//alert('MenuListItemOnMouseOver ' + TargetObj(e).nodeName);
	//addTextToDebug('<'+TargetObj(e).nodeName+'> = ' + TargetObj(e).id)
	for (k=0; k < TargetObj(e).childNodes.length; k++) {
		
		if (TargetObj(e).childNodes[k].nodeName=="UL") {
			if (!cssClassActions('check',TargetObj(e).childNodes[k],"SelectedSubs")) {
				cssClassActions('swap',TargetObj(e).childNodes[k],'MenuListOff','MenuListOver');
				TargetObj(e).childNodes[k].style.top = TargetObj(e).offsetTop + 'px';
				TargetObj(e).childNodes[k].style.left = TargetObj(e).offsetLeft + iMenuWidth + 'px';
			}
		}
	}	
}

function MenuListItemOnMouseOut(e) {
	//alert('MenuListItemOnMouseOut ' + TargetObj(e));
	for (k=0; k < TargetObj(e).childNodes.length; k++) {
		if (TargetObj(e).childNodes[k].nodeName=="UL") {
			if (!cssClassActions('check',TargetObj(e).childNodes[k],"SelectedSubs")) {
				cssClassActions('swap',TargetObj(e).childNodes[k],'MenuListOver','MenuListOff');
			}
		}
	}
}


/*---------------
	Add to window.onload event
---------------*/
addEvent(window, 'load', InitMenuDropdowns, false);

/*---------------------------------------------------------------------
	end NSS Dynamic Dropdown Menu JS
-----------------------------------------------------------------------*/

