	/*
		Copyright ROTATOR.dk Aps 2006
		
		(DK)
		Alle rettigheder forbeholdes.
		Må ikke kopieres uden forfatterens udtrykkelige samtykke.
		
		(Int)
		All rights reserved.
		Do not copy without the author's written consent.		
	*/
	
	var EXPAND_SUB_WIDTH = true;
	var HOVER_TD = true;
	
	function updateOpacity(oMenu ) 
	{
		clearTimeout(oMenu .toOpacity); 
			
		if( !oMenu.opacity) oMenu.opacity = 0; 
			
		oMenu.opacity += oMenu.delta;
		
		document.getElementById(oMenu.id).style.display = oMenu.opacity == 0 ? "none" : "inline"

		if( oMenu.opacity > 0 && oMenu.opacity < 101 ) 
		{
				changeOpac(oMenu.opacity, oMenu.id);				
				oMenu.toOpacity = setTimeout(function() { updateOpacity(oMenu); }, 15);
		}
	}

	function changeOpac(opacity, id) { 
			var object = document.getElementById(id).style; 
    	object.opacity = (opacity / 100); 
    	object.MozOpacity = (opacity / 100); 
    	object.KhtmlOpacity = (opacity / 100); 
    	object.filter = "alpha(opacity=" + opacity + ")"; 
	} 
	
	var reClassMatcher = /(^[^ ]*( selected)?).*$/gi;
	function patchMenu_Main(iVertexID, bDirectly)
	{
		
		for( var i = 0; i < 10; i++ )
		{
			var oItem = document.getElementById("item_" + iVertexID + "l" + i);
			if( oItem )
			{
				oItem.className += " selected";
				var oMenu = getMenuFromItem(oItem);
				if( oMenu ) {
					patchMenu_Main(1*oMenu.id.substring(5), false);	
				}
				break;
			}		
		}
	}
	
	function getMenuFromItem(oItem)
	{
		var o = oItem;
		while( o ) {			
			if( o.id ) {
				if( o.id.indexOf("menu_") == 0 ) {				 
					return o;
				} else if( o.id == "menu" )
					return null;
			}			
			o = o.parentNode;				
		}
		return null;
	}
	
	function getMenuItemInfo(oEvent) {
		var o = oEvent.target ? oEvent.target : oEvent.srcElement; 		
		while( o ) {			
			if( o.id ) {
				if( o.id.indexOf("item_") == 0 ) {
					var c = o.id.substring(5).split("l"); 
					return {itemID: o.id, menuID: "menu_" + c[0], id: c[0], level: 1*c[1] };
				} else if( o.id == "menu" )
					return null;
			}			
			o = o.parentNode;				
		}			
		return null;		
	}
	
	var oMenuStack = [];
	function showMenu(oMenuInfo)
	{
		hideMenus(oMenuInfo.level);
		
		var oItem = document.getElementById(oMenuInfo.itemID);				
		var oMenu = document.getElementById(oMenuInfo.menuID);	
		
		if( oItem && HOVER_TD ) {
			oItem.className = oItem.className.replace(reClassMatcher, "$1 hover");	
		}
		if( oMenu ) {			
			clearTimeout(oMenu.toOpacity);
			oMenu.delta = 5;
			oMenu.toOpacity  = setTimeout(function() { updateOpacity(oMenu); }, 15);
						
			if( EXPAND_SUB_WIDTH )
				oMenu.style.width = oItem.offsetWidth + "px";
			
			var iTop = findPosY(oItem) - findPosY(document.getElementById("menu"));
			var iLeft = findPosX(oItem) - findPosX(document.getElementById("menu"));
			oMenuInfo.level == 0 ?
				iTop += oItem.offsetHeight : iLeft += oItem.offsetWidth;
			
			oMenu.style.top = iTop + "px";
			oMenu.style.left = iLeft + "px";						
		}
		oMenuStack.push(oMenuInfo);
	}	
	
	var toHideMenu = null;
	function hideMenus(iLevel)
	{
		while( oMenuStack.length > iLevel ) {
			var oMenuInfo = oMenuStack.pop();
			if( HOVER_TD ) {
				var oItem = document.getElementById(oMenuInfo.itemID);
				oItem.className = oItem.className.replace(reClassMatcher, "$1");	
			}
			var oMenu = document.getElementById(oMenuInfo.menuID);
			if( oMenu )
			{
				clearTimeout(oMenu.toOpacity);
				oMenu.toOpacity  = setTimeout(function() { oMenu.opacity = 1; oMenu.delta = -1; updateOpacity(oMenu); }, 250);	
			}
		}
	}
	
	function menu_onmouseover(e)
	{
		clearTimeout(toHideMenu);
		var oMenuInfo = getMenuItemInfo(e);
		if( oMenuInfo )	{
			showMenu(oMenuInfo);			
		}		
		e.cancelBubble = true;
	}
	
	function menu_onmouseout(e)
	{
		toHideMenu = setTimeout("hideMenus(0)", 500);
		e.cancelBubble = true;
	}
	
	
	function findPosX(obj)
	{
		var curleft = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curleft += obj.offsetLeft
				if( obj.currentstyle && obj.tagName.toLowerCase() == "td" && obj.currentStyle.borderLeftStyle != "none" )
				{
					var iBorderLeftWidth = parseInt(obj.currentStyle.borderLeftWidth);
					if( !isNaN(iBorderLeftWidth) )
						curleft += parseInt(obj.currentStyle.borderLeftWidth);				
				}
			
				obj = obj.offsetParent;
			}
		}
		else if (obj.x)
			curleft += obj.x;
		return curleft;
	}
	
	function findPosY(obj)
	{
		var curtop = 0;	
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curtop += obj.offsetTop;
				if( obj.currentstyle && obj.tagName.toLowerCase() == "td" && obj.currentStyle.borderTopStyle != "none" )
				{
					curtop += parseInt(obj.currentStyle.borderTopWidth);				
				}
				obj = obj.offsetParent;
			}
		}
		else if (obj.y)
			curtop += obj.y;
		return curtop;
	}
