
	var menuStack = [];
	
	function voidFunction() {}
	
	
	function getTd(menuObject)
	{
		return document.getElementById("td_" + menuObject.id.replace("menu_", ""));
	}
		
	
	function hilite(src, level)
	{
		if( window.event )
			window.event.cancelBubble = true;						
		setClassCascade(src.id, level, true);				
	}
		
	
	function lolite(src, level)
	{
		if( typeof(event) != "undefined" )
			event.cancelBubble = true;		
		setClassCascade(src.id, level, false);
	}
	
	function setClassCascade(id, level, hover)
	{		
		var name = id;
		while( name != "td" )
		{
			var oTd = document.getElementById(name);
				
			document.getElementById(name).className = "level" + cssLevel(level--) + (oTd.expanded ? "expanded" : "") +  (hover ? "hover" : "");
			while( true )
			{
				var p = name.charAt(name.length - 1);
				name = name.substr(0, name.length - 1);
				if( p == "_" )
					break;
			}
		}
	}
	
	function _push(a, e)
	{
		a[a.length] = e;
	}
	
	function _pop(a)
	{
		var tmp = [];
		for( var i = 0; i < a.length - 1; i++ )
			tmp[i] = a[i];
		return [tmp, a[a.length - 1]];
	}
	
	function cssLevel(level)
	{
		return level > 1 ? "n" : level;
	}
	
	function expand(menuId, level, href)
	{
		var menu = document.getElementById(menuId);
		menu.level = level;
		
		if(menuStack[level] != menu )
		{
			hideStack(level);	
			_push(menuStack, menu);
		}
				
		if( !menu.direction )
			menu.direction = 1;
		else if( menu.direction == 1 )
		{
			hideStack(level + 1);
			menu.direction = -1;
		}
		else
			menu.direction = 1;	
		
		expandOne(menu.id);		
	}
	
	function hideStack(level)
	{
		while(menuStack.length > level )
		{
			var pop_a = _pop(menuStack);
			menuStack = pop_a[0];
			var menu = pop_a[1]; //menuStack.pop();
			menu.direction = -1;
			expandOne(menu.id);		
		}
	}
	
	function refreshClass(o)
	{
		var sClass = o.className;
		var bHover = false;
		sHover = sClass.indexOf("hover") > -1 ? "hover" : "";
		o.className = sClass.replace("expanded", "").replace("hover", "") + (o.expanded ? "expanded" : "") + sHover;
	
	}
	
	window.tOs = 0;
	function expandOne(menuId)
	{		
		var o = document.getElementById(menuId);
		var stopper = document.getElementById(menuId + "table");
		with( o.style )
		{
			if( o.direction == 1 && o.style.display == "" && parseInt(o.style.height) >= stopper.offsetHeight )
			{
				o.style.height = stopper.offsetHeight + "px";
				
				o.parentElement.expanded = true;
				refreshClass(o.parentElement);				
				
				o.isMoving = false;
				window.tOs--;
			}
			else if ( o.direction == -1 && parseInt(o.style.height) <= 0 )
			{
				o.style.display = 'none';
				
				o.parentElement.expanded = false;
				refreshClass(o.parentElement);
								
				o.isMoving = false;
				window.tOs--;
			}
			else
			{
				if( !o.isMoving )
				{
					o.isMoving = true;
					window.tOs++;
				}
				var inc = 15;
				var newHeight = parseInt(height) + inc * o.direction;
				if( newHeight < 0 )
					newHeight = 0;
				else if(display == "" && newHeight > stopper.offsetHeight )
					newHeight = stopper.offsetHeight;
					
				dHeight = newHeight - parseInt(height);

				for( var i = 0; i < o.level; i++ )
					if( menuStack[i] )
						menuStack[i].style.height = Math.max(parseInt(menuStack[i].style.height) + dHeight, 0) + "px";
				
				display = parseInt(newHeight) == 0 ? "none" : "";
				height = newHeight + "px";
				setTimeout("expandOne('" + menuId + "');", 10);
			}
		}
	}	

