/*---------------------------------------------------------------------
	JavaScript DOM Dynamic Dropdown Menu JS

	REQUIREMENTS:
		Works in conjunction with /assets/css/dropdowns.css
		Utilizes functions found in /assets/js/functions.js
	
	USAGE:
		Make sure function InitMenuDropdowns() is called in the window.onload event 
		
-----------------------------------------------------------------------*/

/*-------------------------------
	general setup
---------------------------------*/
var bDebugDropdowns = false;
var sNavImgPath = "/assets/images/skin/voorhees/nav/";

var iMenuWidth = 0;
var iMainNavX = 0; 
var iMainNavY = 0; 

/*-------------------------------
	InitMenuDropdowns() - called from window.onload event
---------------------------------*/
InitMenuDropdowns = function() {
	//alert("InitMenuDropdowns");
	if (!document.getElementById) return
	InitMenuDropdownLists();
}

/*-------------------------------
	InitMenuDropdownLists()
---------------------------------*/
InitMenuDropdownLists = function() {
	//alert("InitMenuDropdownLists");
	/*---------------
		parse semantic lists; apply classes/rollover functions via DOM
	---------------*/
	var mainNavRoot = document.getElementById("Nav");
	
	iMenuWidth = mainNavRoot.offsetWidth;
	iMainNavX = GetAbsXPosByNode(mainNavRoot);
	iMainNavY = GetAbsYPosByNode(mainNavRoot);
	

	/*---------------
		Use DOM to add debug information to <div id="DebugInfo"></div>
	---------------*/
	if (bDebugDropdowns) {
		var debugInfoRoot = document.getElementById("DebugInfo");

		oDebugHeaderTag = document.createElement("h3");
		oDebugHeaderText = document.createTextNode("Debug Info");
		oDebugHeaderTag.appendChild(oDebugHeaderText);
		debugInfoRoot.appendChild(oDebugHeaderTag);

		oDebugTag = document.createElement("p");
		oDebugStrongTag = document.createElement("strong");
		oDebugStrongText = document.createTextNode("Main Nav Width: ");
		oDebugStrongTag.appendChild(oDebugStrongText);
		oDebugTag.appendChild(oDebugStrongTag);
		oDebugText = document.createTextNode(iMenuWidth);
		oDebugTag.appendChild(oDebugText);
		debugInfoRoot.appendChild(oDebugTag);

		oDebugTag = document.createElement("p");
		oDebugStrongTag = document.createElement("strong");
		oDebugStrongText = document.createTextNode("Main Nav Coordinates: ");
		oDebugStrongTag.appendChild(oDebugStrongText);
		oDebugTag.appendChild(oDebugStrongTag);
		oDebugText = document.createTextNode("(" + iMainNavX + ", " + iMainNavY + ")");
		oDebugTag.appendChild(oDebugText);
		debugInfoRoot.appendChild(oDebugTag);
	}

	/*---------------
		now that "Nav" is found, dive down and apply styles and events to semantic list menu items.
	---------------*/

	InitMenuDropdownListsDive(mainNavRoot.firstChild.firstChild);
}

/*-------------------------------
	addTextToDebug()
---------------------------------*/
function addTextToDebug(sText) {
	var debugInfoRoot = document.getElementById("DebugInfo");
	oDebugTag = document.createElement("small");
	oDebugBRTag = document.createElement("br");
	oDebugText = document.createTextNode(sText);
	oDebugTag.appendChild(oDebugText);
	debugInfoRoot.appendChild(oDebugTag);
	debugInfoRoot.appendChild(oDebugBRTag);
}

/*-------------------------------
	addNodeToDebug()
---------------------------------*/
function addNodeToDebug(oNode) {
	var debugInfoRoot = document.getElementById("DebugInfo");
	oDebugTag = document.createElement("small");
	oDebugBRTag = document.createElement("br");
	oDebugText = document.createTextNode("Node <"+oNode.nodeName+"> " + oNode.id);
	oDebugTag.appendChild(oDebugText);
	debugInfoRoot.appendChild(oDebugTag);
	debugInfoRoot.appendChild(oDebugBRTag);
}

/*-------------------------------
	InitMenuDropdownListsDive()
---------------------------------*/
InitMenuDropdownListsDive = function(oCurrentNode) {
	//addToDebug(oCurrentNode);
	if (oCurrentNode.nodeName == "LI") {			
		//addEvent(oCurrentNode, 'mouseover', MenuListItemOnMouseOver, false);
		//addEvent(oCurrentNode, 'mouseout', MenuListItemOnMouseOut, false);
	}
	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);
			
			//	Use letter-spacing image replacement for Win IE 5.0; Use text-indent image replacement for all browsers except Win IE 5.0
			
			if (cssClassActions('check',oCurrentNode,"SelectedNav")) {
				sOn = "_on";
			} else {
				sOn = "";
			}
			
			oCurrentNode.style.backgroundImage = "url("+sNavImgPath + oCurrentNode.id + sOn + ".gif)";
			
			oCurrentNode.style.backgroundRepeat = "no-repeat";
			oCurrentNode.style.letterSpacing = "-1000em";
			oCurrentNode.style.textIndent = "-9000px";
		}
		if (bDebugDropdowns) {
			var oDebugCoordinatesText = document.createTextNode("([" + GetAbsXPosByNode(oCurrentNode) + "], [" + GetAbsYPosByNode(oCurrentNode) + "])");
			oCurrentNode.appendChild(oDebugCoordinatesText);
		}
	}
	if (oCurrentNode.nodeName=="UL") {
		if (!cssClassActions('check',oCurrentNode,"SelectedSubs")) {
			cssClassActions('add',oCurrentNode,'MenuListOff');
		}
	}
	/*---------------
		Gotta deal with XML whitespace in DOM: Recursion
	---------------*/
	if (getFirstChild(oCurrentNode)) {
		InitMenuDropdownListsDive(getFirstChild(oCurrentNode));
	}
	if (getNextSibling(oCurrentNode)) {
		InitMenuDropdownListsDive(getNextSibling(oCurrentNode));
	}
}



/*---------------
	Highlight Parent
---------------*/
function HighlightParents(oNode) {
	oParentListItem = oNode.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")) {
				swapCSSBkgdImg(oParentListItem.childNodes[k],sNavImgPath+oParentListItem.childNodes[k].id+'_over.gif');	
			}
			HighlightParents(oParentListItem.childNodes[k]);
		}
	}
}

function UnHighlightParents(oNode) {
	oParentListItem = oNode.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',oCurrentNode,"SelectedNav")) {
					sOn = "_on";
				} else {
					sOn = "";
				}
			
			
				sOn = "";
				swapCSSBkgdImg(oParentListItem.childNodes[k],sNavImgPath+oParentListItem.childNodes[k].id+sOn+'.gif');	
			}
			HighlightParents(oParentListItem.childNodes[k]);
		}
	}
}


/*---------------
	Event Functions
---------------*/
function NavImgOnMouseOver(e) {
	//alert('NavImgOnMouseOver ' + TargetObj(e));
	swapCSSBkgdImg(TargetObj(e),sNavImgPath+TargetObj(e).id+'_over.gif');
}

function NavImgOnMouseOut(e) {
	//alert('NavImgOnMouseOut ' + TargetObj(e));
	
	if (cssClassActions('check',TargetObj(e),"SelectedNav")) {
		//alert("SelectedNav");
		sOn = "_on";
	} else {
		sOn = "";
	}
	swapCSSBkgdImg(TargetObj(e),sNavImgPath+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
-----------------------------------------------------------------------*/
