var currentMenu = null;
var previousMenu = null;
var menuHideTimer = null;

var MENU_HIDE_TIMEOUT = 5000;  // hvor lenge skal vi vise menyen hvis brukeren lar musen stå stille
var MENU_LEAVE_HIDE_TIMEOUT = 1000; // hvor lenge skal vi vise menyen når brukeren tar musen ut av menyen
var menuItems = new Array();
var shownMenus = new Array();


function _HidePreviousMenu(){
	if (previousMenu){
		previousMenu.style.visibility = "hidden";
			while (previousMenu.parentNode.parentNode.tagName!='DIV'){
			previousMenu=previousMenu.ParentNode;
			if (previousMenu.tagname=='UL'){
				previousMenu.style.visibility="hidden";
			}
		}
		previousMenu=null;
	}
}
function _HideMenu(){
	//_HidePreviousMenu();
	if (currentMenu){
		currentMenu.style.visibility = "hidden";	
			while (currentMenu.parentNode.parentNode.tagName!='DIV'){
			currentMenu=currentMenu.parentNode;
			if (currentMenu.tagName=='UL'){
				currentMenu.style.visibility="hidden";
			}
		}
		currentMenu=null;	
	}
}

function _InitializeMenu(menuId, actuatorId){
	if (document.getElementById == null){
		return;
	}

    var menu = document.getElementById(menuId);
    var actuator = document.getElementById(actuatorId);
    
    if (menu == null || actuator == null){
		return;
	}

    actuator.onmouseover = function onmouseover(){
		clearHideTimer();           
    	this.showMenu();
    }
  
    menu.onclick = function(){
		hideMenu();
		return true;	// follow the link
    }

    actuator.showMenu = function showMenu(){
		// hvis dette er øverste niva, ingen fudge
		if (menu.parentNode.parentNode.parentNode.tagName =='DIV'){
			var fudgeH = 0;
			var fudgeV = 0;
		}else{
			var fudgeH = -148;
			var fudgeV = 20;
		}

	

		this.hideMenu();

        	// fudge for IE win
	if ((navigator.appVersion.indexOf("Win") != -1) &&
    		(navigator.appVersion.indexOf("MSIE") != -1)){
			if (fudgeV>0){
				fudgeV = 22;
			}
		}

		// fudge for IE Mac
    	if ((navigator.appVersion.indexOf("Macintosh") != -1) &&
    		(navigator.appVersion.indexOf("MSIE") != -1)){
					
			if (menu.parentNode.parentNode.parentNode.tagName =='DIV'){
				fudgeH = 0;
				fudgeV = 5;
			}else{
				fudgeH = -144;
				fudgeV = 28;
			}		
    		
    		//menu.style.width = '150px';
    	}
        
	var newLeft=0;
	if (this.offsetLeft<=0){
		if (navigator.appVersion.indexOf("MSIE")!=-1){
			newLeft=this.parentElement.style.left;
			if (newLeft!=''){
				newLeft=(newLeft-fudgeH)+"px";
			}			
		}
	}else{
		newLeft=this.offsetLeft;
		newLeft=(newLeft-fudgeH)+"px";
	}

		
        menu.style.left = newLeft;
	
        menu.style.top = (this.offsetTop + this.offsetHeight - fudgeV) + "px";
        menu.style.visibility = "visible";
        
        
			
        currentMenu = menu;        
	startHideTimerWithTimeout(MENU_HIDE_TIMEOUT);
    }

	function hideMenu(){
		_HideMenu();
		// tar ut linjene under, for å sørge for at vi går til topp med hide
		//if (currentMenu){
		//	currentMenu.style.visibility = "hidden";
		//	currentMenu=null;
        	//}
	}

	actuator.hideMenu = hideMenu;
	
	function mousemoveHandler(){
		startHideTimerWithTimeout(MENU_HIDE_TIMEOUT);
		
		// if we are an actuator, and there is no current menu
		// make sure we re-show ourselves if necessary
		
		if ((currentMenu == null) && this.showMenu){
			this.showMenu();
		}
	}
	
	actuator.onmousemove = mousemoveHandler;
	menu.onmousemove = mousemoveHandler;

	function startHideTimerWithTimeout(timeout)
	{
		clearHideTimer();	
		menuHideTimer = setTimeout('_HideMenu()', timeout);
	}
	
	function startHideTimer(){
		startHideTimerWithTimeout(MENU_LEAVE_HIDE_TIMEOUT);
	}
	
	function clearHideTimer(){
		if (menuHideTimer != null){
			clearTimeout(menuHideTimer);
		}
	}
	
	actuator.onmouseout = function(){
		startHideTimer();
	}
    
   	menu.onmouseover = function(){
		this.style.visibility = "visible";
		clearHideTimer();
	}
	
	menu.onmouseout = function(){
		startHideTimer();
	}
	
}

function InitializeMenus(menus){
	for (var i=0; i<menus.length; i++){
		var	menuId = menus[i] + "Menu";
		var actuatorId = menus[i] + "Actuator";
		_InitializeMenu(menuId, actuatorId);	
	}
}



function addMenuItem(menu){
	menuItems[menuItems.length]=menu;
}

function addMenu(){
	InitializeMenus(menuItems);
}
