//define the menu array
var menu = new Array ()

//define the load xml document
var xmlmenu

//define the menu xml document
var xdoc

loadXML("menu/xmlmenu.xml")

function transferxml(){
	//transfer xml data from local xml document to global xml document, but only the children of Menu node	
	xmlmenu=xdoc.childNodes[0]
}

//load the xml into the global xml document, will return false if browser does not support ajax
function loadXML(xmlFile){
	//Load xml document for Internet Explorer
	if( window.ActiveXObject && /Win/.test(navigator.userAgent) ){
		xdoc = new ActiveXObject("Microsoft.XMLDOM");
		xdoc.async = false;
		xdoc.load(xmlFile);
		transferxml()
		return true;
	}
	//Load xml document for Firefox, Netscape, or Opera
	else if( document.implementation && document.implementation.createDocument ){
		xdoc = document.implementation.createDocument("", "", null);
		xdoc.load(xmlFile);
		xdoc.onload = transferxml;
		return true;
	}
	else{
		//Did not find compatible browser
		alert('The navigation menu is not compatible with your browser')
		return false;
	}
}

function inavigate(location, name){
	document.getElementById("bodyframe").src=location
	document.title=name + " ~ Peak Fitness - Davenport, Washington"
	if (name=="Home") name="Peak Fitness"
	document.getElementById("doctitle").innerHTML=name
}

//returns the name of argument node without any underscores
function getnodename (node){
	var namestring=node.nodeName
	//keep replacing underscores in the string until they are gone
	while (namestring.indexOf("_")!=-1){
		namestring=namestring.replace ("_"," ")
	}
	//return the name of the node without the underscores
	return namestring
}

//check to see if the value of the nodes is acceptable for use
function validvalue (node){
	var value = node.childNodes[0].nodeValue
	//check if the value is null, one could add other values such as f as in ftp
	if (value!==null){
		//check if the value starts with h as in http
		if (value.substring(0,1)=="h"){
			return true
		}
		//check if the value starts with n as in nohyperlink
		else if (value.substring(0,1)=="n"){
			return true
		}
		//check if the value starts with j as in internal navigation
		else if (value.substring(0,1)=="j"){
			return true
		}
		//not a valid value
		else
			return false
	}
	//safety against other possibilities
	else
		return false
}


//get the value of the node if it is valid, or else set it to null making it usable
function getnodevalue (node){
	var value = node.childNodes[0].nodeValue
	if (validvalue(node)==false){
		value=null
	}
	return value
}

function getattributevalue (node, attributename){
	return node.getAttribute(attributename)
}

//check to see if the node is a new menu or an entry
function isnewmenu (node){
	//the value is null, or has been set to null, therefore a new menu
	if (getnodevalue(node)==null){
		return true
	}
	//has a valid value, therefore an entry
	else{
		return false
	}
}

function attributeExists(node, attributename){
	if (getattributevalue(node, attributename)==null)
		return false
	else
		return true
}

function adjustednodevalue(node){
	if (attributeExists(node, "internal")){
		if (getattributevalue(node, "internal")=="false"){
			return getnodevalue(node)
		}
		else{
			return "javascript:inavigate('" + getnodevalue(node) + "', '" + getnodename(node) + "')"
		}
	}
	else{
		return getnodevalue(node)
	}
}

function crawlmenu(node, menunumber){
	var transitmenunumber=menunumber
	var temptransitmenunumber
  	menu[menunumber] = new jsDOMenu(200);
  	with (menu[menunumber]) {
 		var i
 		for(i=0; i<node.childNodes.length; i++){
			if (getnodename(node.childNodes[i])!="#text"){
				if (isnewmenu(node.childNodes[i])){
					temptransitmenunumber=crawlmenu(node.childNodes[i], transitmenunumber+1)				
					addMenuItem(new menuItem(getnodename(node.childNodes[i]), "Item"+(transitmenunumber+1), ""));
					menu[menunumber].items["Item"+(transitmenunumber+1)].setSubMenu(menu[transitmenunumber+1]);
					if (attributeExists(node.childNodes[i], "icon1")){
  						menu[menunumber].items["Item"+(transitmenunumber+1)].showIcon("icon2", "icon1", "icon3");
					}
					transitmenunumber=temptransitmenunumber
				}
				else{
					transitmenunumber++
   					if (getnodevalue(node.childNodes[i])=="nohyperlink")
						addMenuItem(new menuItem(getnodename(node.childNodes[i]), "Item"+(transitmenunumber), ""));
					else
						addMenuItem(new menuItem(getnodename(node.childNodes[i]), "Item"+(transitmenunumber), adjustednodevalue(node.childNodes[i])));
					if (attributeExists(node.childNodes[i], "icon1")){
  						menu[menunumber].items["Item"+(transitmenunumber)].showIcon("icon2", "icon1", "icon3");
					}
				}
			}
		}
  	}
	return transitmenunumber
}

function createjsDOMenu(){
	//Read in menu characteristics
	var menuvertical = getattributevalue(xmlmenu, "Vertical")
	var menuleft = getattributevalue(xmlmenu, "Left")
	var menutop = getattributevalue(xmlmenu, "Top")
	if( typeof( window.innerWidth ) == 'number' ) {
		menutop= parseFloat(menutop) + 2
	}

	var node=xmlmenu
	var menunumber=0
	var tempmenunumber
	if (menuvertical=="true"){
		//Create a vertical menu
  		mainmenu = new jsDOMenu(130, "absolute", "", true) //Create Main Menu Items
  		with (mainmenu) {
 			var i
 			for(i=0; i<node.childNodes.length; i++){
				if (getnodename(node.childNodes[i])!="#text"){
					if (isnewmenu(node.childNodes[i])){
						//Add a new menu
						tempmenunumber=crawlmenu(node.childNodes[i], menunumber)
						addMenuItem(new menuItem(getnodename(node.childNodes[i]), "Item"+(menunumber), ""));
						mainmenu.items["Item"+(menunumber)].setSubMenu(menu[menunumber]);
						var moff = ""
						var mover = ""
						var mclick = ""
						if (attributeExists(node.childNodes[i], "moff")){
							moff=getattributevalue(node.childNodes[i], "moff")
						}
						if (attributeExists(node.childNodes[i], "mover")){
							mover=getattributevalue(node.childNodes[i], "mover")
						}
						if (attributeExists(node.childNodes[i], "mclick")){
							mclick=getattributevalue(node.childNodes[i], "mclick")
						}
						mainmenu.items["Item"+(menunumber)].showIcon(moff, mover, mclick)
						menunumber=tempmenunumber+1			    	
					}
					else{
						//Add a new menu item
						addMenuItem(new menuItem(getnodename(node.childNodes[i]), "Item"+(menunumber), adjustednodevalue(node.childNodes[i])))
						var moff = ""
						var mover = ""
						var mclick = ""
						if (attributeExists(node.childNodes[i], "moff")){
							moff=getattributevalue(node.childNodes[i], "moff")
						}
						if (attributeExists(node.childNodes[i], "mover")){
							mover=getattributevalue(node.childNodes[i], "mover")
						}
						if (attributeExists(node.childNodes[i], "mclick")){
							mclick=getattributevalue(node.childNodes[i], "mclick")
						}
						mainmenu.items["Item"+(menunumber)].showIcon(moff, mover, mclick)
						menunumber++
					}
				}
			}
		moveTo(menuleft, menutop)
    		show()
		}
	}
	else{
		//Create a horizontal menu
  		menuBar = new jsDOMenuBar(); //Create Main Menu Items
  		with (menuBar) {
 			var i
 			for(i=0; i<node.childNodes.length; i++){
				if (getnodename(node.childNodes[i])!="#text"){
					if (isnewmenu(node.childNodes[i])){
						//Add a new menu
						tempmenunumber=crawlmenu(node.childNodes[i], menunumber)
						addMenuBarItem(new menuBarItem(getnodename(node.childNodes[i]), menu[menunumber],"Item"+menunumber));
						var moff = ""
						var mover = ""
						var mclick = ""
						if (attributeExists(node.childNodes[i], "moff")){
							moff=getattributevalue(node.childNodes[i], "moff")
						}
						if (attributeExists(node.childNodes[i], "mover")){
							mover=getattributevalue(node.childNodes[i], "mover")
						}
						if (attributeExists(node.childNodes[i], "mclick")){
							mclick=getattributevalue(node.childNodes[i], "mclick")
						}
						menuBar.items["Item"+menunumber].showIcon(moff, mover, mclick)
						menunumber=tempmenunumber+1			    	
					}
					else{
						//Add a new menu item
						addMenuBarItem(new menuBarItem(getnodename(node.childNodes[i]), "", "Item"+menunumber, "", adjustednodevalue(node.childNodes[i])));
						var moff = ""
						var mover = ""
						var mclick = ""
						if (attributeExists(node.childNodes[i], "moff")){
							moff=getattributevalue(node.childNodes[i], "moff")
						}
						if (attributeExists(node.childNodes[i], "mover")){
							mover=getattributevalue(node.childNodes[i], "mover")
						}
						if (attributeExists(node.childNodes[i], "mclick")){
							mclick=getattributevalue(node.childNodes[i], "mclick")
						}
						menuBar.items["Item"+menunumber].showIcon(moff, mover, mclick)
					}
				}
			}
		moveTo(menuleft, menutop)
	  	}
	}
}
