// JavaScript Document

var openMenu = null;
var openMenuId = null;
var toggleInterval = null; 
var openingMenu = null;
var closingMenu = null;


function toggleMenu(menu)
{
	//alert("toggleMenu()");
	
	if (menu != undefined)
	{
		//alert("Menu element type = " + menu.tagName);
		
		// catch all
		if (openingMenu != null)
		{
			alert("Catching opening");
			
			showMenu(openingMenu);
			
			openingMenu = null;
		}
		
		if (closingMenu != null)
		{
			alert("Catching closing");
			
			hideMenu(closingMenu);
			
			closingMenu = null;
		}
		
		if (openMenu == null)
		{
			openingMenu = menu;
		}
		else if (openMenu == menu)
		{
			// close menu straight away
			closingMenu = menu;
		}
		else
		{
			closingMenu = openMenu;
				
			openingMenu = menu;
		}
		
		openMenu = null;
		
		toggleInterval = setInterval(menuTimeout, 50);
	}
}



function getSubMenu(menu)
{
	var submenu = null;
	
	//alert("getSubMenu()");
	
	if (menu != undefined)
	{
		var submenus = menu.getElementsByTagName("DIV");
		
		if (submenus.length > 1)
		{
			submenu = submenus[1];
		}
	}
	
	return submenu;
}

function getSubMenuHeight(menu)
{
	var height = 0;
	
	//alert("getSubMenuHeight()");
	
	if (menu != undefined)
	{
		var submenu = getSubMenu(menu);
		
		if (submenu != null)
		{		
			var menuItems = submenu.getElementsByTagName("DIV");
			
			height = menuItems.length * 20;
		}
	}
	
	// include spacer
	
	//alert("menu height = " + height);
	
	return height;
}

function findOpenMenu(menuContainer)
{
	//alert("findOpenMenu()");
	
	if (menuContainer != undefined)
	{
		var divNodes = menuContainer.getElementsByTagName("DIV");
		
		for (var i = 0; i < divNodes.length; i++)
		{
			//alert("DIV className = " + divNodes[i].className);
			
			if (divNodes[i].className == "submenu")
			{
				//alert("Found submenu with height = " + divNodes[i].style.height );
				
				if (divNodes[i].style.height == "auto")
				{
					//alert("Found open menu");
					
					openMenu = divNodes[i].parentNode;
					
					// set height to fixed value so height can be calculated when closing
					divNodes[i].style.height = getSubMenuHeight(openMenu) + "px";
				
					break;
				}
			}
		}
	}
}

function findOpenMenuById()
{
	//alert("findOpenMenuById()");
	
	if (openMenuId != null)
	{
		openMenu = document.getElementById(openMenuId);
		
		if (openMenu != null)
		{
			//alert("Found open menu");
			
			var subMenu = getSubMenu(openMenu);	
			
			// set height to fixed value so height can be calculated when closing
			subMenu.style.height = getSubMenuHeight(openMenu) + "px";
		}
	}
}

function resetMenuHeights(menuContainer)
{
	//alert("findOpenMenu()");
	
	if (menuContainer != undefined)
	{
		var divNodes = menuContainer.getElementsByTagName("DIV");
		
		for (var i = 0; i < divNodes.length; i++)
		{
			//alert("DIV className = " + divNodes[i].className);
			
			if (divNodes[i].className == "menu")
			{
				if (divNodes[i].id != openMenuId)
				{
					var subDivNodes = divNodes[i].getElementsByTagName("DIV");
					
					for (var j = 0; j < subDivNodes.length; j++)
					{
						//alert("DIV className = " + subDivNodes[j].className);
						
						if (subDivNodes[j].className == "submenu")
						{
							//alert("Found closed submenu");
								
							// set height to fixed value so height can be calculated when closing
							subDivNodes[j].style.height = 0 + "px";
						}
					}
				}
			}
		}
	}
}


function showMenu(menu)
{
	//alert("openMenu()");
	
	if (menu != undefined)
	{
		var submenu = getSubMenu(menu);
		
		submenu.style.height = getSubMenuHeight(menu) + "px";
		
		//alert("Opened menu " + submenu.style.display);
	}
}

function hideMenu(menu)
{
	//alert("closeMenu()");
	
	if (menu != undefined)
	{
		var submenu = getSubMenu(menu);
		
		submenu.style.height = "0px";
	}
}

function menuTimeout()
{
	if (closingMenu != null)
	{
		var submenu = getSubMenu(closingMenu);
		
		var height = getStyleHeight(submenu.style.height);
		
		height -= 10;
		
		if (height < 10)
		{
			submenu.style.height = "0px";
			
			closingMenu = null;
		}
		else
		{
			submenu.style.height = height + "px";
		}
	}
	else if (openingMenu != null)
	{
		var submenu = getSubMenu(openingMenu);
		
		var height = getStyleHeight(submenu.style.height);
		
		height += 10;
		
		if (height >= getSubMenuHeight(openingMenu))
		{
			submenu.style.height = getSubMenuHeight(openingMenu) + "px";
			
			//alert("Open menu height = " + getStyleHeight(submenu.style.height));
			
			openMenu = openingMenu;
			
			openingMenu = null;
		}
		else
		{
			submenu.style.height = height + "px";
		}
	}
	else
	{
		clearInterval(toggleInterval);
	}	
}

function getStyleHeight(heightStr)
{
	if (heightStr == undefined)
	{
		return 0;
	}
	
	if (heightStr.length == 0)
	{
		return 0;
	}
	
	var height = 0;
	var index = heightStr.indexOf("px");
	if (index > 0)
	{
		height = parseInt(heightStr.substring(0, index));
		
		// alert("Style height = " + height);
	}
	
	return height;
}
