
function Menu(parent, id, text, link)
{
	this.id = id;
	this.parent = parent
	this.mouseOverTrg = false
	this.mouseOverTable= false
	this.children = new Array();
	this.table = false;
	this.text = text;
	this.link = link;
	this.nTimer = 0;
}	

menuStack = new Array();
		
function menuEnd()
{
	return menuStack[menuStack.length - 1]
}
function menuPush()
{	
	var nItem = menuEnd().children.length - 1		
	menuStack.push(menuEnd().children[nItem])	
}
function menuPop()
{
	menuStack.pop()
}
function menuAdd(text, link)
{
	var number = menuEnd().children.length + 1
	var menu = new Menu(menuEnd(), menuEnd().id + number, text, link)
	menuEnd().children.push(menu)
}
function genTriggers(menu)
{
	if (menu.children)
	{
		var name = menu.id
		document.writeln("function " + name + "TrgClk() { trgClk(\"" + name + "\") }" )
		document.writeln("function " + name + "TrgOvr() { trgOvr(\"" + name + "\") }" )
		document.writeln("function " + name + "TrgOut() { trgOut(\"" + name + "\") }" )
		document.writeln("function " + name + "TableOvr() { tableOvr(\"" + name + "\") }" )
		document.writeln("function " + name + "TableOut() { tableOut(\"" + name + "\") }" )	
		for (var i = 0; i < menu.children.length; i++)
		{
			genTriggers(menu.children[i])
		}	
	}
}

function genMainMenu()
{
	var name = "main"

	document.write("<table id=\"" + name + "\"")
	document.write("style=\"font-family: arial; font-weight: 900; color: rgb(0, 102, 102); background-color: rgb(240, 127, 0); width: 146px; text-align: left; top: 0px; left: 0px;\"")
	document.write("border=\"0\" cellpadding=\"2\" cellspacing=\"2\">")
	document.write("<tbody>")
	
	for (var i = 0; i < menuStack.length; i++)
	{
		document.write("<tr>")
		var subName = menuStack[i].id;
		document.write("<td style=\"cursor: pointer; background-color: rgb(255, 153, 51); vertical-align: top;\" id = \"" + subName + "Trg\" onmouseout=\"" + subName + "TrgOut()\" onmouseover=\"" + subName + "TrgOvr()\" onmousedown=\"" + subName + "TrgClk()\">")
		
		if (menuStack[i].children && menuStack[i].children.length > 0)
			document.write("<img style=\"float:right; vertical-align: center;\" src=\"menuexpand.gif\"/>");
		document.write(menuStack[i].text)
		document.write("</td>")
		document.write("</tr>")
	}
	document.write("</tbody>")
	document.write("</table>")
}
function genMenu(menu)
{	
	if (menu.children.length > 0)
	{
		var name = menu.id
	
		document.write("<table id=\"" + name + "\"")
		document.write("style=\"width:200px; font-family: arial; font-weight: 900; color: rgb(0, 102, 102); background-color: rgb(240, 127, 0); text-align: left; position: absolute; visibility: hidden; top: 0px; left: 0px;\"")
		document.write("border=\"0\" cellpadding=\"2\" cellspacing=\"2\" onmouseout=\"" + name + "TableOut()\" onmouseover=\"" + name + "TableOvr()\">")
		document.write("<tbody>")
		var i
		for (i = 0; i < menu.children.length; i++)
		{
			document.write("<tr>")
			var subName = menu.children[i].id;
			document.write("<td style=\"cursor: pointer; background-color: rgb(255, 153, 51); vertical-align: center;\" id = \"" + subName + "Trg\" onmouseout=\"" + subName + "TrgOut()\" onmouseover=\"" + subName + "TrgOvr()\" onmousedown=\"" + subName + "TrgClk()\">")
			
			if (menu.children[i].children && menu.children[i].children.length > 0)
				document.write("<img style=\"float:right; vertical-align: center;\" src=\"menuexpand.gif\"/>");
			
			document.write(menu.children[i].text)
			
			document.write("</tr>")
		}
		document.write("</tbody>")
		document.write("</table>")
						
		for (i = 0; i < menu.children.length; i++)
		{
			genMenu(menu.children[i])
		}
	}
	if (!menu.parent)
	{
		document.write("<script language=\"javascript\">")
		genTriggers(menu)			
		document.write("</script>")
	}
}


function findMenuInternal(menu, name)
{
	if (menu.id == name)
	{
		return menu
	}
	for (var i = 0; i < menu.children.length; i++)
	{
		var menuTmp = findMenuInternal(menu.children[i], name)
		if (menuTmp)
		{
			return menuTmp
		}
	}
	return false;
}

function findMenu(name)
{
	for (var i = 0; i < menuStack.length; i++)
	{
		var menu = findMenuInternal(menuStack[i], name)
		if (menu)
		{
			return menu
		}
	}	
	return false
}

function updateTimeInternal(menu, time)
{
	var bReturn = false;
	if (menu.children && menu.children.length > 0)
	{	
		if (menu.nTimer > 0)
		{
			//menu.nTimer -= time
			if (menu.nTimer <= time)
			{
				menu.nTimer = 0
				var element = document.getElementById(menu.id)
				if (element)
				{
					document.getElementById(menu.id).style.visibility = "hidden"
					bReturn = true;
				}	
			}
			else
			{
				menu.nTimer -= time
			}
		}
		for (var i = 0; i < menu.children.length; i++)
		{
			if (updateTimeInternal(menu.children[i], time))
			{
				bReturn = true;
			}
		}
	}
	return bReturn;
}
function updateTime()
{
	var bChange = false;
	for (var i = 0; i < menuStack.length; i++)
	{
		if (updateTimeInternal(menuStack[i], 1))
		{
			bChange = true;
		}
	}	
	if (bChange)
	{
		for (var i = 0; i < menuStack.length; i++)
		{
			UpdateMouseOver(menuStack[i])
		}
	}	
}
function skipTime(time)
{
	var bChange = false;
	for (var i = 0; i < menuStack.length; i++)
	{
		if (updateTimeInternal(menuStack[i], time))
		{
			bChange = true;
		}
	}
	if (bChange)
	{
		for (var i = 0; i < menuStack.length; i++)
		{
			UpdateMouseOver(menuStack[i])
		}
	}	
}

window.setInterval(updateTime, 50)

function UpdateMouseOver(menu)
{
	var bMouseOver = false;
	if (menu.mouseOverTrg || menu.mouseOverTable || menu.nTimer)
	{
		bMouseOver = true
	}
	if (menu.mouseOverTable)
	{
		bMouseOver = true
	}
	if (menu.children)
	{
		for (var i = 0; i < menu.children.length; i++)
		{
			var value = UpdateMouseOver(menu.children[i])
			
			if (value)
			{
				bMouseOver = true	
			}
		}
	}		
	
	if (menu.id)
	{
		var cell = document.getElementById(menu.id + "Trg")	
		if (cell)
		{	
			if (bMouseOver)
			{
				cell.style.backgroundColor = "rgb(255, 255, 255)"
			}
			else
			{
				cell.style.backgroundColor = "rgb(255, 153, 51)"
			}
		}
		
	}
	
	return bMouseOver;
}
function UpdateVisibilityInternal(menu)
{
	var bVisable = false;
	if (menu.children)// && menu.children.length > 0)
	{
		if (menu.mouseOverTrg)
		{
			bVisable = true
		}
		if (menu.mouseOverTable)
		{
			bVisable = true
		}
		for (var i = 0; i < menu.children.length; i++)
		{
			var value = UpdateVisibilityInternal(menu.children[i])
			
			if (value)
			{
				bVisable = true	
			}
		}
		if (menu.children.length > 0)
		{
			if (bVisable)
			{
				menu.nTimer = 0;
			}
			else
			{
				var element = document.getElementById(menu.id);
				if (element && element.style.visibility != "hidden")
				{
					menu.nTimer = 5;
				}
			}
		}
	}
	return bVisable;
}
function UpdateVisibility()
{
	for (var i = 0; i < menuStack.length; i++)
	{
		UpdateVisibilityInternal(menuStack[i])
	}	
	for (var i = 0; i < menuStack.length; i++)
	{
		UpdateMouseOver(menuStack[i])
	}	
}
function trgClk(name)
{
	var menu = findMenu(name);
	if (menu.link)
		window.location = menu.link;
}
function trgOvr(name)
{	
	var cell = document.getElementById(name + "Trg")				
	var x = cell.offsetLeft
	var y = cell.offsetTop		
	var parent = cell.offsetParent

	var menu = findMenu(name)
	if (menu)
	{
		if (menu.children.length > 0)
		{
			while (parent)
			{
				x += parent.offsetLeft
				y += parent.offsetTop
				parent = parent.offsetParent
			}
			x += cell.offsetWidth - 5;
			y += 10;
			document.getElementById(name).style.left = x
			document.getElementById(name).style.top = y
			document.getElementById(name).style.visibility = "visible"			
		}
			
		menu.mouseOverTrg = true
		menu.nTimer = 0;
	}
	UpdateVisibility()
	skipTime(100)
}
function trgOut(name)
{
	var menu = findMenu(name)
	if (menu)
	{
		menu.mouseOverTrg = false	
	}	
	UpdateVisibility()	
}	
function tableOvr(name)
{	
	document.getElementById(name).style.visibility = "visible"
	var menu = findMenu(name)
	if (menu)
	{
		menu.mouseOverTable = true
		menu.nTimer = 0;
		UpdateVisibility()
	}
}
function tableOut(name)
{
	var menu = findMenu(name)
	if (menu)
	{
		menu.mouseOverTable = false
		UpdateVisibility()
	}			
}