


var menu_items=new Array()
function registerMenuItem(e, p, m){
	//element, parent, menu
	//e.setAttribute("menuParent", p)
	//alert(e)
	
	menu_items[menu_items.length]=[e, p, m];

	
	
	//onMouseOver
	xAddEventListener(e, "mouseover", function(event){
		var id = this.id
		if(id==undefined){
			//trace("ie")
			//ie hack
			id = event.srcElement.id
		}
		//trace("MOUSEOVER "+id)
		//trace(event.srcElement)

		doMouseOver(id)
		
		if(timeout != undefined){
		clearTimeout(timeout)
		}

	}, true)
	//end mouseOver
	
	
	//onMouseOut
	xAddEventListener(e, "mouseout", function(event){
		
		
		timeout = setInterval(
		//return to initial state
			function() {
			clearTimeout(timeout)
			//sleep(100)
			//alert("timeout")
			//hide everything
			hideAllChildsMenus(null)
			//show divOpen
			//show(divOpen)
			//show all divOpens parents

			showAllParentMenus(divOpen)
            showMenu(divOpen)
			showOver(divOpen)
			
			},500)
			//end interval

	}, true)
	//end mouseOut
}

function sleep(naptime){

      //naptime = naptime * 1000;

      var sleeping = true;

      var now = new Date();

      var alarm;

      var startingMSeconds = now.getTime();

      //alert("starting nap at timestamp: " + startingMSeconds + "\nWill sleep for: " + naptime + " ms");

      while(sleeping){

         alarm = new Date();

         alarmMSeconds = alarm.getTime();

         if(alarmMSeconds - startingMSeconds > naptime){ sleeping = false; }

      }      

      //alert("Wakeup!");

}

function doMouseOver(id){
	//alert('just moused over' + id)
	subOver = (id);
	md = getMenuDetail(id)
	if (md!=null){
	hideAllChildsMenus(md[1])
	show(md[2])
	showOver(id)
	} else {
		alert('menu detail not available for ' + id);	
	}
}

function showMenu(id){
    md = getMenuDetail(id)
    if (md != null) {
        if (md[2] != null) {
            show(md[2])
        }
    } 
}

function showOver(id){
	//trace("showing "+id)
	md = getMenuDetail(id)
	//remove old style
	if(md != null){
	c = xFirstChild(md[0])
	
	xRemoveClass(c, 'unselected')
	xRemoveClass(c, 'selected')

	//add new style
	xAddClass(c, 'selected')
	//repeat with parent
	if(md[1] != null){
	
		showOver(md[1])
	}
    }
}
function showAllParentMenus(id){
	//trace("show p menu "+ id)
	md = getMenuDetail(id)
    if(md != null){
	pmd = getMenuDetail(md[1])
    if (pmd != null) {
	    show(pmd[2])
	    if(pmd[1]!=null){
		    //	trace("moving to "+md[1])
		    showAllParentMenus(md[1])
	    }
	}
	}
}
function hideChildsMenus(obj){
	var children = getMenuChildren(obj)
	for (var i = 0; i < children.length; ++i) {
		child = children[i]

		hide(child[2])
	}

}
function hideAllChildsMenus(obj){
	//find all children
	
	var children = getMenuChildren(obj)
	//trace("got "+children.length+" childs for "+obj)
	
	for (var i = 0; i < children.length; ++i) {
		child = children[i]
		//hide them and their children //ZOMG RECURSION!
		//trace("hiding "+child[0]+" 's menu and all its children")
		hide(child[2])
		
		//and also reset style.. need to find a tag!
		c = xFirstChild(child[0])
		//remove old styles
		xRemoveClass(c, 'unselected')
		xRemoveClass(c, 'selected')
		//add default style
		xAddClass(c, 'unselected')
		
		
		hideAllChildsMenus(child[0])
		
	}
	

}
function getMenuChildren(obj){
	//trace("looking for children of "+obj)
	var ar = new Array()
	for (var i = 0; i < menu_items.length; ++i) {
		if(menu_items[i][1] == obj){
		//if menus parent matches our obj menu must be a child of obj
			//return menu_items[i]
			//trace("found "+menu_items[i][0])
			ar[ar.length] = menu_items[i]
		}
	}
	return ar;
}
function getMenuDetail(obj){
    if (obj != null) {
	    if (obj.indexOf('_button') > 0) {
		    obj = obj.replace('_button', '');
		    //alert('removed _button from the id, object is now ' + obj);
	    }
	    for (var i = 0; i < menu_items.length; ++i) {
	    //alert(menu_items[i][0] + ' equals ' + obj + '?')
		    if(menu_items[i][0] == obj){
			    //alert('yay ' + menu_items[i][0] + ' does equal ' + obj + '!')
			    return menu_items[i]
		    }
	    }
	}
}
function hide(obj){

	if(obj!=null){
		//trace("hiding "+obj)
		obj = xGetElementById(obj)
		obj.style.visibility = "hidden"
		obj.style.display = 'none';
	}
}
function show(obj){

	if(obj!=null){
		//trace("showing "+obj)
		obj = xGetElementById(obj)
		obj.style.visibility = "visible"
		obj.style.display = 'inline';
	}
}

function findParent(obj){
	//alert(obj)
	for (var i = 0; i < menu_items.length; ++i) {
		if(menu_items[i][0] == obj){
			parent = menu_items[i][1]
		}
	}
	//alert("found parent " + parent + " for obj " + obj)
	//alert(obj.getAttribute("parent"))
	return(parent)
}

