//define the menu array
var menu = new Array ()

//define the load xml document
var xmlMenu = null

xmlFile="Menu/xmlMenu.xml"
var xmlDoc = null;
var ua = navigator.userAgent.toLowerCase();
if (window.ActiveXObject) { // code for IE
	xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async = false;
	xmlDoc.load(xmlFile);
}
else if (window.XMLHttpRequest) { // code for Safari, Firefox, Opera
	XmlHTTP = new XMLHttpRequest();
	XmlHTTP.open('get', xmlFile, false);
	XmlHTTP.send('');
	xmlDoc = XmlHTTP.responseXML;
}
else{
	alert('Your browser JavaScript is enabled, but it cannot load the menu.');
}
xmlMenu=xmlDoc.childNodes[0]

function inavigate(location, name){
	document.getElementById("bodyframe").src=location
	document.title=name + " > Peter Davenport"
	if (name=="Home") name="Peter Davenport"
	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 node=xmlMenu
	var menuvertical = getattributevalue(node, "Vertical")
	var menuleft = getattributevalue(node, "Left")
	var menutop = getattributevalue(node, "Top")
	if( typeof( window.innerWidth ) == 'number' ) {
		menutop = parseFloat(menutop) + 2
	}


	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)
	  	}
	}
}