var menuHTML = new String();
var CurrentMenuName = new String();
var SubMenus = new Array();
var inProgress = false;
var CurrMenuSubCount = new Number();
var SelectedMenu = new String();
var ImageFolder = new String();
var Debug = false;
var RemainOpen = new String();
var AbsolutePosition = new String();
var TimerClose = false;
var IsClosing = false;
var TimerDelay = 2000;
var ClosingTimer;

function StartNewMenu(MenuName,width)
{
	if(ImageFolder == ""){
		ImageFolder = "/images/";
	}
	var OK = true;
	if(inProgress == false){
		for(var i=0; i<SubMenus.length;i++){
			if(MenuName == SubMenus[i]){
				OK = false;
			}
		}
		if(OK = true)
		{
			menuHTML += "<table class='OuterMenu' cellspacing='0' id = '" + MenuName + "' width = '" + width + "px'>\n<tr>\n<td class = 'OuterMenuCell'>\n<table class = 'InnerMenu' cellspacing='0' width = '" + width + "px'>";
			SubMenus[parseInt(SubMenus.length)] = MenuName;
			CurrentMenuName = MenuName;
		}else{
			alert("A menu with this name already exists");
		}
	}else{
		alert("Please end a menu before trying to create another one");
	}
	inProgress = true;
}

function AddMenuItem(Img,Caption,Expandable,href)
{
	var Name = new String();
	var tmpHref = new String();
	var Continue=true;
	if(inProgress == true){
			if(href != ""){
				tmpHref = "onclick = \"" + href + ";CloseAll()\"";
			}else{
				tmpHref = "";
			}
			if(Caption == "-"){
				menuHTML += "<tr>";
			}else{
				Name = CurrentMenuName + "_" + (++CurrMenuSubCount);
				menuHTML += "<tr id = '" + Name + "' onmouseover = 'XPStyleOver(this," + Expandable + ")' onmouseout='XPStyleOut(this)' onmousedown = 'XPStyleDown(this)' onmouseup = 'XPStyleUp(this)'" + tmpHref + ">";
			}
			if(Img == ""){
				menuHTML += "<td class='MenuImage'>&nbsp;</td>";
			}else{
				menuHTML += "<td class='MenuImage'><img src = '" + ImageFolder + Img + "' width = '20' height = '20'></td>";
			}
			if(Caption == "-"){
				menuHTML += "<td class='MenuText' colspan = '2'><hr class='hr' /></td>";
			}else{
				menuHTML += "<td class='MenuText'>&nbsp;" + Caption + "</td>";
				if(Expandable == false)
				{
					menuHTML += "<td class='MenuExtra'>&nbsp;</td>";
				}else{
					menuHTML += "<td class='MenuExtra'><img src = '" + ImageFolder + "/arrow.gif'></td>";
				}
				menuHTML +="</tr>";
			}
	}else{
		alert("You must start a menu before trying to add items to it");
	}
}

function EndMenu()
{
	if(inProgress == false)
	{
		alert("Please start the menu");
	}else{
		menuHTML += "</table>\n</td>\n</tr>\n</table>";
		inProgress = false;
		CurrentMenuName = "";
		CurrMenuSubCount = 0;
	}
}

function GenerateCode(Owner)
{	
	if(menuHTML ==""){
		alert("Error writing menu");
	}else{
		if(!Owner){
			document.write(menuHTML);			
		}else{
			if(Owner == ""){
				document.write(menuHTML);
			}else{
				document.getElementById(Owner).innerHTML = menuHTML;
			}
		}
		menuHTML = "";
	}
}

function XPStyleOver(MyBut,ext)
{
	if(TimerClose == true){
		if(IsClosing == true){
			IsClosing = false;
			clearTimeout(ClosingTimer);
		}
	}
	CloseMenus(MyBut.id);
	if(ext==true){
		OpenSubMenu(MyBut);
	}
	for(var i=0; i<3; i++)
	{
//		MyBut.getElementsByTagName("td").item(i).style.borderColor = "#316AC5";
//		MyBut.getElementsByTagName("td").item(i).style.backgroundColor = "#C0D1ED";
		MyBut.getElementsByTagName("td").item(i).style.borderColor = "#6FE244";
		MyBut.getElementsByTagName("td").item(i).style.backgroundColor = "#EDFF25";
	}
	SelectedMenu = MyBut.id;
	if(Debug == true){
		window.status = MyBut.id;
	}
}

function XPStyleOverSt(MyBut,ext)
{
	if(TimerClose == true){
		if(IsClosing == true){
			IsClosing = false;
			clearTimeout(ClosingTimer);
		}
	}
	CloseAll();
	if(ext != ""){
		ShowMenu(ext,GetAbsoluteTop(MyBut), GetAbsoluteLeft(MyBut) + parseInt(document.getElementById("StaticMenu").clientWidth - 1))//document.getElementById("StaticMenu").clientWidth + 12);
	}
	
	for(var i=0; i<3; i++)
	{
//		MyBut.getElementsByTagName("td").item(i).style.borderColor = "#316AC5";
//		MyBut.getElementsByTagName("td").item(i).style.backgroundColor = "#C0D1ED";
		MyBut.getElementsByTagName("td").item(i).style.borderColor = "#6FE244";
		MyBut.getElementsByTagName("td").item(i).style.backgroundColor = "#EDFF25";
	}
	if(Debug == true){
		window.status = MyBut.id;
	}
}

function XPStyleOut(MyBut)
{
	MyBut.getElementsByTagName("td").item(0).style.borderColor = "#008000";
	MyBut.getElementsByTagName("td").item(0).style.backgroundColor = "#008000";
	MyBut.getElementsByTagName("td").item(1).style.borderColor = "#6FE244";
	MyBut.getElementsByTagName("td").item(1).style.backgroundColor = "#6FE244";
	MyBut.getElementsByTagName("td").item(2).style.borderColor = "#6FE244";
	MyBut.getElementsByTagName("td").item(2).style.backgroundColor = "#6FE244";
	SelectedMenu = "";
	if(TimerClose == true){
		CloseTimer();
	}
}

function XPStyleDown(MyBut)
{
	for(var i=0; i<3; i++)
	{
//		MyBut.getElementsByTagName("td").item(i).style.backgroundColor = "#E6E6FA";
		MyBut.getElementsByTagName("td").item(i).style.backgroundColor = "#EDFF25";		
	}
}

function XPStyleUp(MyBut)
{
	for(var i=0; i<3;i++)
	{
//		MyBut.getElementsByTagName("td").item(i).style.backgroundColor = "#C0D1ED";
		MyBut.getElementsByTagName("td").item(i).style.backgroundColor = "#EDFF25";
	}
}

function FindSubMenu(MenuName)
{
	var Found = false;
	for(var i=0; i<=SubMenus.length; i++)
	{
		if(SubMenus[i] == MenuName){
			Found = true;
		}
	}
	return Found;
}

function CloseMenus(MenuName)
{
	var TopLevel = new String();
	var FirstItem = MenuName.indexOf("_",1);
	if(FirstItem != -1){
		TopLevel = MenuName.substring(0,FirstItem);
		for(var i=0; i<=SubMenus.length; i++)
		{
			if(!SubMenus[i])
			{
				//do nothing
			}else{
				if(String(SubMenus[i]).substring(0, FirstItem) != TopLevel){
					if(document.getElementById(SubMenus[i]).style.visibility == "visible"){
						document.getElementById(SubMenus[i]).style.visibility = "hidden";
						document.getElementById(SubMenus[i]).getElementsByTagName("table").item(0).style.visibility = "hidden";
					}
				}else{
					if(SubMenus[i].length > MenuName.length){
						document.getElementById(SubMenus[i]).style.visibility = "hidden";
						document.getElementById(SubMenus[i]).getElementsByTagName("table").item(0).style.visibility = "hidden";
					}
				}
			}
		}
	}
}

function CloseAll()
{
	if(!RemainOpen){
		RemainOpen = "";
	}
	if(SelectedMenu == ""){
		for(var i = 0; i<=SubMenus.length;i++)
		{
			if(!SubMenus[i]){
				
			}else{
				document.getElementById(SubMenus[i]).style.visibility = "hidden";
				document.getElementById(SubMenus[i]).getElementsByTagName("table").item(0).style.visibility = "hidden";
			}
		}
	}
}

function OpenSubMenu(Menu)
{
	var FoundMenu = false;
	var tmpString = new String();
	var MenuName = Menu.id;
	var ParentMenu = new String();
	
	for(var i=0; i<=SubMenus.length; i++){
		tmpString = MenuName + "_s";
		if(SubMenus[i] == MenuName+"_s"){
			FoundMenu = true;
		}
	}
	if(FoundMenu ==true){
		ParentMenu = MenuName.substring(0,MenuName.length-2)
		PositionMenu(MenuName,MenuName+"_s",ParentMenu);
		document.getElementById(MenuName+"_s").style.visibility = "visible";
		document.getElementById(MenuName+"_s").getElementsByTagName("table").item(0).style.visibility = "visible";
	}else{
		window.status = "Sub menu not found";
	}		
}

function PositionMenu(Parent,MenuName,ParentMenu)
{
	var ParentWidth = 0;
	var ParentLeft = 0;
	var ParentTop = 0;
	var ParentMenuTop = 0;
	ParentLeft = document.getElementById(ParentMenu).offsetLeft;
	ParentTop = GetAbsoluteTop(document.getElementById(ParentMenu))//document.getElementById(ParentMenu).offsetTop;
	if(ParentTop == ""){
		ParentTop = 0;
	}
	if(ParentLeft == ""){
		ParentLeft = 0;
	}
	ParentMenuTop = document.getElementById(Parent).offsetTop;
	ParentWidth = document.getElementById(ParentMenu).clientWidth;
	if(Debug == true){
		alert("Parent Item: " + Parent + "  Parent Top: " + ParentMenuTop + "  Parent Menu Top: " + ParentTop);
	}
	document.getElementById(MenuName).style.top = parseInt(ParentTop) + parseInt(ParentMenuTop) + 2;
	document.getElementById(MenuName).style.left = parseInt(ParentLeft) + parseInt(ParentWidth) + 1;
}

function ShowMenu(Menu,Top,Left)
{
	if(!Menu){
		window.status = "Menu Still Loading";
	}else{
		document.getElementById(Menu).style.top = parseInt(Top);
		document.getElementById(Menu).style.left = parseInt(Left);
		document.getElementById(Menu).style.visibility = "visible";
		document.getElementById(Menu).getElementsByTagName("table").item(0).style.visibility = "visible";
	}
}

function MakeVisible(MenuTo)
{
	if(!MenuTo){
		alert("No menu");
	}else{
		document.getElementById(MenuTo).style.visibility = "visible";
		document.getElementById(MenuTo).getElementsByTagName("table").item(0).style.visibility = "visible";
	}
}

/*========================================================================================

						static menu script
						
========================================================================================*/
var StaticItemCount = 0
var StaticOwner = new String();
var StaticCode = new String();

function CreateStaticParent(Owner,width)
{
	if(!Owner){
		alert("You must specify an owner!");
	}else{
		if(Owner == ""){
			alert("You must specify and owner");
		}else{
			if(menuHTML != ""){
				alert("You need to make sure that a static menu is created before or after the menus have been generated")
			}else{
				if(ImageFolder == ""){
					ImageFolder = "/images/";
				}
				menuHTML = "<table class='OuterMenuStatic' cellspacing='0' id = 'StaticMenu' width = '" + width + "px'>\n<tr>\n<td class = 'OuterMenuCell'>\n<table class = 'InnerMenuStatic' cellspacing='0' width = '" + width + "px'>";
				StaticOwner = Owner;
				inProgress = true;
			}
		}
	}
}

function AddStaticItem(Img,Caption,SubMenu,href)
{
	var Name = new String();
	var tmpHref = new String();
	var Continue=true;
	if(inProgress == true){
			if(href != ""){
				tmpHref = "onclick = \"" + href + ";CloseAll()\"";
			}else{
				tmpHref = "";
			}
			if(Caption == "-"){
				menuHTML += "<tr>";
			}else{
				Name = "Static_" + (++StaticItemCount);
				menuHTML += "<tr id = '" + Name + "' onmouseover = 'XPStyleOverSt(this,\"" + SubMenu + "\")' onmouseout='XPStyleOut(this)' onmousedown = 'XPStyleDown(this)' onmouseup = 'XPStyleUp(this)'" + tmpHref + ">";
			}
			if(Img == ""){
				menuHTML += "<td class='MenuImage'>&nbsp;</td>";
			}else{
				menuHTML += "<td class='MenuImage'><img src = '" + ImageFolder + Img + "' width = '20' height = '20'></td>";
			}
			if(Caption == "-"){
				menuHTML += "<td class='MenuText' colspan = '2'><hr class='hr'/></td>";
			}else{
				menuHTML += "<td class='MenuText'>&nbsp;" + Caption + "</td>";
				if(SubMenu == "")
				{
					menuHTML += "<td class='MenuExtra'>&nbsp;</td>";
				}else{
					menuHTML += "<td class='MenuExtra'><img src = '" + ImageFolder + "/arrow.gif'></td>";
				}
				menuHTML +="</tr>";
			}
	}else{
		alert("You must start a menu before trying to add items to it");
	}
}

function CloseStaticMenu()
{
		menuHTML += "</table>\n</td>\n</tr>\n</table>";
		StaticItemCount = 0;
		StaticCode = menuHTML;
		menuHTML = "";
		inProgress = false;
}

function PositionStatic()
{
	document.getElementById(StaticOwner).innerHTML = StaticCode;
}

function GetAbsoluteLeft(eElement)
{
    var nLeftPos = eElement.offsetLeft;          // initialize var to store calculations
    var eParElement = eElement.offsetParent;     // identify first offset parent element  
    while (eParElement != null)
    {
		//alert(eParElement.tagName);                                            // move up through element hierarchy
        nLeftPos += eParElement.offsetLeft;      // appending left offset of each parent
        eParElement = eParElement.offsetParent;  // until no more offset parents exist
    }
    return nLeftPos;                             // return the number calculated
}

function GetAbsoluteTop(eElement)
{
    var nTopPos = eElement.offsetTop;            // initialize var to store calculations
    var eParElement = eElement.offsetParent;     // identify first offset parent element  
    while (eParElement != null)
    {                                            // move up through element hierarchy
        nTopPos += eParElement.offsetTop;        // appending top offset of each parent
        eParElement = eParElement.offsetParent;  // until no more offset parents exist
    }
    return nTopPos;                              // return the number calculated
}

function CloseTimer()
{
	if(IsClosing == true){
		IsClosing = false;
		clearTimeout(ClosingTimer);
		CloseAll();
	}else{
		IsClosing = true;
		ClosingTimer = setTimeout('CloseTimer()', parseInt(TimerDelay));
	}
		
}