////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                    //
// Copyright www.interakt.ro 2000-2002                                                                //
// Menus.js v2.0                                                                                      //
//                                                                                                    //
////////////////////////////////////////////////////////////////////////////////////////////////////////
// It was interakt who made the first menu. I just made it use full. Made a lot of correction         //
// compared to the version that i downloaded                                                          //
// CHANGED By Michael Christiansen                                                                    //
////////////////////////////////////////////////////////////////////////////////////////////////////////

parentWindow = this;
lastElement = this;
menuArray = new Array();
layerN = 0;
NS = !(document.all);  //document.all is only in Internet Explorer
DOM = (document.getElementById);  //DOM = Document object model

if (DOM) 
	NS = false;

function KT_parseInt(i)
{
	i += "px";
	return parseInt(i.replace(/px/g, ""));
}

function Show(menu)
{
	if(NS && !DOM)
		menu.visibility = "show";
	else
		menu.style.visibility = "visible";
}

function Hide(menu)
{
	if(NS && !DOM)
		menu.visibility = "hide";
	else
		menu.style.visibility = "hidden";
}

function AddToHTMLDocument(menu, text)
{
	if(DOM || !NS)
		menu.innerHTML = text;
	else 
	{
		menu.document.open();
		menu.document.write(text);
		menu.document.close();
	}
}

function MenuLayer(width, documentBody)
{
	var temp, element;
	if(DOM || !NS)
	{
		if(documentBody == parentWindow)
			element = document.body;
		else 
			element = documentBody;
		temp = document.createElement('div');

		if(!temp)
		{
			src = "<div id = layer" + parentWindow.layerN + " class = dropdownmenu>";
			element.innerHTML += src;
			temp = element.getElementById("layer" + parentWindow.layerN);
		} 
		else 
		{
			temp.id = "layer" + parentWindow.layerN;
			temp.className = "dropdownmenu";
			element.appendChild(temp);
		}
		parentWindow.layerN++;
		return(temp);
	}
	else
	{
		temp = new Layer(width, documentBody);
		return temp;
	}
}
function HideFii(menuArray)
{
	for(i = 0 ; i < menuArray.length ; i++)
		Hide(menuArray[i]);
}

function HideRecord(ce, panaUnde)
{
	if(ce.menuType != "MenuButton")
	{
		if(ce.documentBody != panaUnde)
		{
			if(ce.menuArray)
				HideFii(ce.menuArray);
			Hide(ce);
			HideRecord(ce.documentBody, panaUnde);
		}
	}
}

function ArrayPush(array, arrayLength)
{
	if(DOM || !NS)
		array[array.length] = arrayLength;
	else
		array.push(arrayLength);
}

function AddMenu(eSusParam, text, execute, menuCurtainWidth, menuButtonWidth, xOffset, yOffset)
{
	if (!menuCurtainWidth)
		menuCurtainWidth = 60;
	if (!menuButtonWidth)
		menuButtonWidth = 40;
	if (this.menu)
		return this.menu.AddMenu(0, text, execute, menuCurtainWidth, menuButtonWidth, xOffset, yOffset);
	var newMenuButton;
	if (this == parentWindow) 
	{
		if(!xOffset)
		{
			if(this.menuArray.length != 0)
			{
				newMenuButton = this.menuArray[this.menuArray.length - 1];
				if (eSusParam) 
					xOffset = (NS)?(newMenuButton.pageX + newMenuButton.clip.right):(KT_parseInt(newMenuButton.style.left) + KT_parseInt(newMenuButton.style.width));
				else 
					xOffset = (NS)?(newMenuButton.pageX):(KT_parseInt(newMenuButton.style.left));
			}
			else
				xOffset = 0;
		}
		if(!yOffset)
		{
			if(this.menuArray.length != 0)
			{
				newMenuButton = this.menuArray[this.menuArray.length - 1];
				if (eSusParam) 
					yOffset = (NS)?(newMenuButton.pageY):(KT_parseInt(newMenuButton.style.top));
				else 
					yOffset = (NS)?(newMenuButton.pageY + newMenuButton.clip.bottom):(KT_parseInt(newMenuButton.style.top) + newMenuButton.offsetHeight);
			}
			else
				yOffset = 0;
		}
		newMenuButton = new MenuButton(text, xOffset, yOffset, menuButtonWidth, this, execute);
		newMenuButton.eSus = eSusParam;
		Show(newMenuButton);
		newMenu = new Menu(menuCurtainWidth, this);
		newMenuButton.menu = newMenu;
		newMenu.documentBody = newMenuButton;
		newMenuButton.AddMenu = AddMenu;
		newMenuButton.AddMenuItem = AddMenuItem;
		newMenuButton.AddMenuSeparator = AddMenuSeparator;
		ArrayPush(this.menuArray, newMenuButton);
		Show(newMenuButton);
	} 
	else 
	{
		newMenuButton = this.AddMenuItem("<table border=0 cellspacing=0 cellpadding=0 class=menubutton id=submenuid bgcolor=" + parentWindow.itemOffColor + " ><tr><td width = 100% class = menubutton>" + text + "</td><td class = menubutton>" + menuNext + "</td></tr></table>", execute,true);
		newMenu = new Menu(menuCurtainWidth, parentWindow);
		newMenuButton.menu = newMenu;
		newMenu.documentBody = newMenuButton;
		newMenuButton.AddMenu = AddMenu;
		newMenuButton.AddMenuItem = AddMenuItem;
		newMenuButton.AddMenuSeparator = AddMenuSeparator;
		newMenuButton.caption = text;
		newMenuButton.menuType = "SubMenu";
	}
	return newMenuButton;
}

function AddMenuItem(text, execute,bSubMenu)
{
	if(this.menu)
	{
		return this.menu.AddMenuItem(text, execute,bSubMenu);
	}
	var newMenuItem;
	newMenuItem = new MenuItem(text, this, execute,bSubMenu);
	ArrayPush(this.menuArray, newMenuItem);
	return newMenuItem;
}

function AddMenuSeparator(showSeparator)
{
	var newMenuSeparator = new MenuSeparator(this.menu, this.menu.curtainWidth - 2, showSeparator);
	if(NS)
		ArrayPush(this.menu.menuArray, newMenuSeparator);
}

function ShowMenu(menu)
{
	Show(menu);
	for(i = 0 ; i < menu.menuArray.length ; i++)
		Show(menu.menuArray[i]);
}


function Menu(menuCurtainWidth, documentBody)
{
	var newMenuLayer;
	newMenuLayer = new MenuLayer(menuCurtainWidth, documentBody);
	newMenuLayer.menuArray = new Array();
	if(NS)
	{
		newMenuLayer.clip.top = 0;
		newMenuLayer.clip.bottom = 2;
		newMenuLayer.clip.right = menuCurtainWidth;
		txt = "<table border = 0 cellspacing = 0 cellpadding = 0 width = 100% height = 100% class = menubutton><tr><td class = menubutton colspan=2 bgcolor="+parentWindow.menuFgColor+" height = 1>" + menuNimic + "</td></tr><tr><td bgcolor="+parentWindow.menuFgColor+" height = 100% width = 1 class = menubutton>" + menuNimic + "</td><td bgcolor="+parentWindow.menuBgColor+" width = 100% height = 1 class = menubutton>" + menuNimic + "</td></tr><tr><td colspan=2 bgcolor="+parentWindow.menuBgColor+" height = 1 class = menubutton>" + menuNimic + "</td></tr></table>";
	} 
	else 
	{
		newMenuLayer.style.top = 0;
		newMenuLayer.style.width = menuCurtainWidth;
		txt = "<table border = 0 cellspacing = 0 cellpadding = 0 bgcolor=" + parentWindow.menuFgColor + " id=menuid width=" + menuCurtainWidth + " class = menubutton><tr><td bgcolor=" + parentWindow.menuFgColor + " colspan=3 height = 1 class = menubutton>" + menuNimic + "</td></tr><tr><td width = 1 height = 1 class = menubutton>" + menuNimic + "</td><td colspan = 2 bgcolor = " + parentWindow.menuBgColor + " height = 1 class = menubutton>" + menuNimic + "</td></tr></table>";
	}
	AddToHTMLDocument(newMenuLayer, txt);
	newMenuLayer.AddMenu = parentWindow.AddMenu;
	newMenuLayer.AddMenuItem = parentWindow.AddMenuItem;
	newMenuLayer.AddMenuSeparator = AddMenuSeparator;
	newMenuLayer.onmouseover = MenuMouseOver;
	newMenuLayer.onmouseout = MenuMouseOut;
	newMenuLayer.documentBody = documentBody;
	newMenuLayer.menuType = "Menu";
	newMenuLayer.curtainWidth = menuCurtainWidth;
	return newMenuLayer;
}

function MenuItem(text, documentBody, execute,bSubMenu)
{
	var newMenuLayer;
	var menuCurtainWidth;
	text = "<a class = menubutton>" + text + "</a>";
	if(NS)
	{
		menuCurtainWidth = documentBody.curtainWidth - 2;
		newMenuLayer = new MenuLayer(menuCurtainWidth, documentBody);
		newMenuLayer.bgColor = parentWindow.itemOffColor;
		newMenuLayer.clip.right = menuCurtainWidth;
		newMenuLayer.moveTo(1, documentBody.clip.bottom - 1);
		AddToHTMLDocument(newMenuLayer, text);
		documentBody.clip.bottom += newMenuLayer.clip.bottom;
	} 
	else 
	{
		if(DOM)
		{
			var tableTag = documentBody.getElementsByTagName('table');
			for(i = 0 ; i < tableTag.length ; i++) 
				if (tableTag[i].id == 'menuid') 
				{
					var tableRowCount = tableTag[i].rows.length;
					var tableRow = tableTag[i].insertRow(tableRowCount - 1);
				}
		} 
		else 
		{
			var tableRowCount = documentBody.all.menuid.rows.length;
			var tableRow = documentBody.all.menuid.insertRow(tableRowCount - 1);
		}
		//Venstre side af gardin
		var menuEdge = tableRow.insertCell(0);
		menuEdge.style.backgroundColor = parentWindow.menuFgColor;			 
		menuEdge.innerHTML = menuNimic;
		menuEdge.style.width="1";
		menuEdge.style.height="1";
		menuEdge.style.borderLeftWidth = "0px";
		menuEdge.style.borderRightWidth = "0px";
		menuEdge.style.borderTopWidth = "0px";
		menuEdge.style.borderBottomWidth = "0px";
		//Center af gardin
		var menuCenter = tableRow.insertCell(1);
		menuCenter.innerHTML = text;
		menuCenter.style.backgroundColor = parentWindow.itemOffColor;	 	 	 
		menuCenter.style.width = "100%";
		menuCenter.style.borderLeftWidth = "0px";
		menuCenter.style.borderRightWidth = "0px";
		menuCenter.style.borderTopWidth = "0px";
		menuCenter.style.borderBottomWidth = "0px";
		//Højre side af gardin
		menuEdge = tableRow.insertCell(2);
		menuEdge.innerHTML = menuNimic;
		menuEdge.style.backgroundColor = parentWindow.menuBgColor;				
		menuEdge.style.width="1";
		menuEdge.style.height="1";
		menuEdge.style.borderLeftWidth = "0px";
		menuEdge.style.borderRightWidth = "0px";
		menuEdge.style.borderTopWidth = "0px";
		menuEdge.style.borderBottomWidth = "0px";
		if(!(documentBody.ien))
			documentBody.ien = 0;
		menuCenter.ien = documentBody.ien;
		documentBody.ien++;
		newMenuLayer = menuCenter;
		newMenuLayer.menuItemTable = menuCenter;
		tableTag = documentBody.getElementsByTagName('table');
		for(i = 0 ; i < tableTag.length ; i++) 
			if ((tableTag[i].id == 'submenuid') & (bSubMenu))
				newMenuLayer.menuItemTable = tableTag[i];
	}

	if (NS) 
	{
		newMenuLayer.captureEvents(Event.MOUSEDOWN);
		newMenuLayer.onmousedown = Click;
	} 
	else
		newMenuLayer.onmouseup = Click;

	if(execute)
		newMenuLayer.execute = execute;

	newMenuLayer.menuItemTable.style.backgroundColor = parentWindow.itemOffColor;
	newMenuLayer.onmouseover = MenuItemMouseOver;
	newMenuLayer.onmouseout = MenuItemMouseOut;
	newMenuLayer.documentBody = documentBody;
	newMenuLayer.caption = text;
	newMenuLayer.menuType = "MenuItem";
	return newMenuLayer;
}

function MenuSeparator(documentBody, xOffset, showSeparator)
{
	if(NS)
	{
		var newMenuLayer = new MenuLayer(xOffset, documentBody);
		newMenuLayer.clip.right = xOffset;
		newMenuLayer.moveTo(1, documentBody.clip.bottom - 1);
		if(showSeparator == 1)
			AddToHTMLDocument(newMenuLayer, "<table border = 0 cellspacing = 0 cellpadding = 0 width = 100% class = menubutton><tr><td bgcolor=" + parentWindow.menuBgColor + " width = 1 height = 1 class = menubutton>" + menuNimic + "</td></tr><tr><td bgcolor="+parentWindow.menuFgColor+" width = 1 height = 1 class = menubutton>" + menuNimic + "</td></tr></table>");
		else
			AddToHTMLDocument(newMenuLayer, "<table border = 0 cellspacing = 0 cellpadding = 0 width = 100% class = menubutton><tr><td bgcolor=" + parentWindow.itemOffColor + " width = 1 height = 1 class = menubutton>" + menuNimic + "</td></tr><tr><td bgcolor="+parentWindow.itemOffColor+" width = 1 height = 1 class = menubutton>" + menuNimic + "</td></tr></table>");
		documentBody.clip.bottom += newMenuLayer.clip.bottom;
		return newMenuLayer;
	}
	else
	{
		if(DOM)
		{
			var tableTag = documentBody.getElementsByTagName('table');
			for(i = 0 ; i < tableTag.length ; i++) 
			{
				if (tableTag[i].id=='menuid') 
				{
					var tableRowCount = tableTag[i].rows.length;
					var tableRow = tableTag[i].insertRow(tableRowCount - 1);
				}
			}
		} 
		else 
		{
			var tableRowCount = documentBody.all.menuid.rows.length;
			var tableRow = documentBody.all.menuid.insertRow(tableRowCount - 1);
		}
		var menuEdge = tableRow.insertCell(0);
		menuEdge.innerHTML = menuNimic;
		menuEdge.style.backgroundColor = parentWindow.menuFgColor;			 
		menuEdge.style.width = "1";
		menuEdge.style.height = "1";
		menuEdge.style.borderLeftWidth = "0px";
		menuEdge.style.borderRightWidth = "0px";
		menuEdge.style.borderTopWidth = "0px";
		menuEdge.style.borderBottomWidth = "0px";
		menuEdge = tableRow.insertCell(1);
		menuEdge.innerHTML = menuNimic;
		menuEdge.style.borderLeftWidth = "0px";
		menuEdge.style.borderRightWidth = "0px";
		menuEdge.style.borderTopWidth = "0px";
		menuEdge.style.borderBottomWidth = "0px";
		if(showSeparator != 0)
			menuEdge.style.backgroundColor = parentWindow.menuBgColor;
		else
			menuEdge.style.backgroundColor = parentWindow.itemOffColor;
		menuEdge.style.width="100%";
		menuEdge = tableRow.insertCell(2);
		menuEdge.innerHTML = menuNimic;
		menuEdge.style.borderLeftWidth = "0px";
		menuEdge.style.borderRightWidth = "0px";
		menuEdge.style.borderTopWidth = "0px";
		menuEdge.style.borderBottomWidth = "0px";
		menuEdge.style.backgroundColor = parentWindow.menuBgColor;
		menuEdge.style.width = "1";
		menuEdge.style.height = "1";

		if(DOM)
		{
			var tableTag = documentBody.getElementsByTagName('table');
			for(i = 0 ; i < tableTag.length ; i++) 
				if (tableTag[i].id == 'menuid')
					tableRow = tableTag[i].insertRow(tableRowCount);
		} 
		else
			tableRow = documentBody.all.menuid.insertRow(tableRowCount);
		menuEdge = tableRow.insertCell(0);
		menuEdge.style.backgroundColor = parentWindow.menuFgColor;			 
		menuEdge.style.borderLeftWidth = "0px";
		menuEdge.style.borderRightWidth = "0px";
		menuEdge.style.borderTopWidth = "0px";
		menuEdge.style.borderBottomWidth = "0px";
		menuEdge.innerHTML = menuNimic;
		menuEdge.style.width = "1";
		menuEdge.style.height = "1"; 
		menuEdge = tableRow.insertCell(1);
		menuEdge.innerHTML = menuNimic;
		menuEdge.style.borderLeftWidth = "0px";
		menuEdge.style.borderRightWidth = "0px";
		menuEdge.style.borderTopWidth = "0px";
		menuEdge.style.borderBottomWidth = "0px";
		if(showSeparator == 0)
			menuEdge.style.backgroundColor = parentWindow.itemOffColor;
		else
			menuEdge.style.backgroundColor = parentWindow.menuFgColor;
		menuEdge.style.width="100%";
		menuEdge = tableRow.insertCell(2);
		menuEdge.style.borderLeftWidth = "0px";
		menuEdge.style.borderRightWidth = "0px";
		menuEdge.style.borderTopWidth = "0px";
		menuEdge.style.borderBottomWidth = "0px";
		menuEdge.innerHTML = menuNimic;
		menuEdge.style.backgroundColor = parentWindow.menuBgColor;
		menuEdge.style.width = "1";
		menuEdge.style.height = "1";
	}
}

function MenuButton(text, xOffset, yOffset, menuWidth, documentBody, execute)
{
	var newMenuButton;
	newMenuButton = new MenuLayer(menuWidth, documentBody);
	if(NS && !DOM)
	{
		newMenuButton.moveTo(xOffset, yOffset);
	}
	else
	{
		newMenuButton.style.top = yOffset;
		newMenuButton.style.left = xOffset;
	}
	if(menuWidth)
	{
		if(NS)
			newMenuButton.clip.right = menuWidth;
		else
			newMenuButton.style.width = menuWidth;
	}
	AddToHTMLDocument(newMenuButton, "<table border = 0 cellspacing = 0 cellpadding = 0 bgcolor = " + parentWindow.menuBgColor + " id = mainmenuid width=" + menuWidth + " class = menubutton><tr><td colspan=3 bgcolor=" + parentWindow.menuFgColor + " height = 1 class = menubutton>" + menuNimic + "</td></tr><tr><td bgcolor=" + parentWindow.menuFgColor + " height = 100% width = 1 class = menubutton>" + menuNimic + "</td><td width = 100% align=center class=menubutton oncontextmenu='return false;' onselectstart='return false;'>" + text + "</td><td bgcolor=" + parentWindow.menuBgColor + " width = 1 height = 1 class = menubutton>" + menuNimic + "</td></tr><tr><td colspan=3 bgcolor=" + parentWindow.menuBgColor + " height = 1 class = menubutton>" + menuNimic + "</td></tr></table>");

	if(DOM)
	{
		var tableTag = newMenuButton.getElementsByTagName('table');
		for(i = 0 ; i < tableTag.length ; i++) 
			if (tableTag[i].id == 'mainmenuid') 
				newMenuButton.menuItemTable = tableTag[i];
	} 

	if (NS) 
	{
		newMenuButton.captureEvents(Event.MOUSEDOWN);
		newMenuButton.onmousedown = Click;
	} 
	else 
		newMenuButton.onmouseup = Click;
	newMenuButton.menuItemTable.style.backgroundColor = parentWindow.itemOffColor;
	newMenuButton.onmouseover = MenuButtonMouseOver;
	newMenuButton.onmouseout = MenuButtonMouseOut;
	newMenuButton.MenuItemMouseOut = MenuItemMouseOut;
	newMenuButton.MenuItemMouseOver = MenuItemMouseOver;
	newMenuButton.MenuMouseOut = MenuMouseOut;
	newMenuButton.MenuMouseOver = MenuMouseOver;
	newMenuButton.execute = execute;
	newMenuButton.caption = text;
	newMenuButton.menuType = "MenuButton";
	return newMenuButton;
}

function MenuItemMouseOver()
{
	if(this.menu && (this.menuType == "MenuItem") || (this.menuType == "SubMenu"))
	{
		if(NS && !DOM)
		{
			this.menu.pageX=this.pageX + this.clip.right + 1 + parentWindow.newMenuXDepl;
			this.menu.pageY=this.pageY - 1 + parentWindow.newMenuYDepl;
		}
		else
		{
			this.menu.style.left = KT_parseInt(this.documentBody.style.left) + KT_parseInt(this.documentBody.offsetWidth) + parentWindow.newMenuXDepl;
			var a = this.offsetTop;
			if(a == 0)
				a = this.documentBody.clientHeight/(this.documentBody.ien) * this.ien + 1;
			this.menu.style.top = KT_parseInt(this.documentBody.style.top) + a - 1 + parentWindow.newMenuYDepl;
		}
	}

	if(NS && !DOM)
		this.bgColor = parentWindow.itemOnColor;
	else
		this.menuItemTable.style.backgroundColor = parentWindow.itemOnColor;
	
	if(parentWindow.lastElement != parentWindow)
	{
		if(this.menuType == "MenuButton")
		{
			if(parentWindow.lastElement != this)
			{
				if(parentWindow.lastElement.menu)
				{
					HideFii(parentWindow.lastElement.menu.menuArray);
					Hide(parentWindow.lastElement.menu);
				}
				HideRecord(parentWindow.lastElement, this);
			}
		} 
		else 
		{
			if(this.documentBody.documentBody != parentWindow.lastElement)
			{
				if(parentWindow.lastElement.menu)
				{
					HideFii(parentWindow.lastElement.menu.menuArray);
					Hide(parentWindow.lastElement.menu);
				}
				if(parentWindow.lastElement.documentBody != this.documentBody)
					HideRecord(parentWindow.lastElement, this.documentBody);
			}
		}
		parentWindow.lastElement = this;
	}
	if(this.menu)
	{
		if(this.menu.menuArray.length != 0)
			ShowMenu(this.menu);
	}
}

function MenuItemMouseOut()
{
	if(NS && !DOM)
		this.bgColor = parentWindow.itemOffColor;
	else
		this.menuItemTable.style.backgroundColor = parentWindow.itemOffColor;
	parentWindow.lastElement = this;
}

function MenuMouseOver()
{
	if(parentWindow.lTimeOutID != -1)
	{
		clearTimeout(parentWindow.lTimeOutID);
		parentWindow.lTimeOutID = -1;
	}
}

function MenuMouseOut()
{
	parentWindow.lTimeOutID = setTimeout("Timeout();", 100);
}

function Timeout()
{
	if(parentWindow.lastElement != parentWindow)
	{
		if(parentWindow.lastElement.menu)
			HideRecord(parentWindow.lastElement.menu, parentWindow);
		else
			HideRecord(parentWindow.lastElement, parentWindow);
	}
	parentWindow.lTimeOutID = -1;
}

function MenuButtonMouseOut()
{
	if(myStatus == 1)
	{
		this.MenuItemMouseOut();
		this.MenuMouseOut();
	}
}

function MenuButtonMouseOver()
{
	if(myStatus == 1)
	{
		if(NS && !DOM)
		{
			if(this.eSus)
			{
				this.menu.pageX = this.pageX;
				this.menu.pageY = this.pageY + this.clip.bottom;
			}
			else
			{
				this.menu.pageX = this.pageX + this.clip.right;
				this.menu.pageY = this.pageY;
			}
		}
		else
		{
			if(this.eSus)
			{
				this.menu.style.left = this.style.left;
				this.menu.style.top = KT_parseInt(this.style.top) + this.offsetHeight;
			}
			else
			{
				this.menu.style.left = KT_parseInt(this.style.left) + this.offsetWidth;
				this.menu.style.top = KT_parseInt(this.style.top);
			}
		}
		this.MenuMouseOver();
		this.MenuItemMouseOver();
	}
}

function Click()
{
	if(this.execute)
	{
		Timeout();
		eval(this.execute);
	}
	return false;
}
