var MENU_ICON_SIZE=16;
var ICON_PATH='images/';
var MENU_ICON_PATH='images/menu-icons/';

document.menusactive=false;

//Misc functions
function NavBar()
{
	this.DOMMenu=document.getElementById('navbar');
	if(this.DOMMenu) {
		this.DOMMenu.style.display="";
	}
	this.DOMMenu.menuLevel=0;
	this.DOMMenu.className="menu";
	
	this.addMenuItem=addMenuItem;
	
}

function Menu(parent, icon, name)
{
	this.DOMMenu=document.createElement('TABLE');
	this.DOMMenu.className="menu";	
	this.DOMMenu.parentItem=parent;
	this.DOMMenu.menuLevel=parent.menuLevel+1;
	
	this.addMenuItem=addMenuItem;
	
	document.body.appendChild(this.DOMMenu);
	this.DOMMenu.style.display='none';
}

function addMenuItem(icon, title, jsorlink, externallink)
{
	var item=new MenuItem(this.DOMMenu, icon, title, jsorlink, externallink);
	return item;
}

function MenuItem(parent, icon, title, jsorlink, externallink)
{
	var iconcont;
	var textcont;
	var menuarrowcont;
	
	if(parent.menuLevel == 0) {
		this.DOMItem=document.createElement('SPAN');
		iconcont=document.createElement('SPAN');
		textcont=document.createElement('SPAN');
		menuarrowcont=document.createElement('SPAN');
		
		this.DOMItem.appendChild(iconcont);
		this.DOMItem.appendChild(textcont);
		this.DOMItem.appendChild(menuarrowcont);
		parent.appendChild(this.DOMItem);
	} else {
		/*this.DOMItem=document.createElement('TR');*/
		this.DOMItem=parent.insertRow(-1);
		iconcont=this.DOMItem.insertCell(-1);
		textcont=this.DOMItem.insertCell(-1);
		menuarrowcont=this.DOMItem.insertCell(-1);
	}
	
	this.DOMItem.className="menuitem";
	this.DOMItem.menuLevel=parent.menuLevel;
	
	if(externallink) {
		this.DOMItem.extLink=jsorlink;		
		
		var exticon=GetImageNode(ICON_PATH+'externallink.png', 16, 16, '^','extlinkicon');
		menuarrowcont.appendChild(exticon);

	} else {
		this.DOMItem.actionjs=jsorlink;
	}
	iconcont.className="item-icon";
	textcont.className="item-text";
	menuarrowcont.className="item-arrow";
	
	if(icon) {
		var itemicon=GetImageNode(MENU_ICON_PATH+icon, MENU_ICON_SIZE, MENU_ICON_SIZE, '*');
		iconcont.appendChild(itemicon);
	}
	textcont.innerHTML=title;
	
	this.DOMItem.onclick=MenuItemClick;
	this.DOMItem.onmouseover=MenuItemMouseOver;
	this.DOMItem.onmouseout=MenuItemMouseOut;
	
	this.addMenu=addMenu;
}

function addMenu()
{
	var menu=new Menu(this.DOMItem);
	this.DOMItem.menu=menu.DOMMenu;
	
	if(this.DOMItem.menuLevel != 0) {
		var menuarrow=GetImageNode(MENU_ICON_PATH+'hassubmenu.gif', 10, 10, '>','menuarrow');
		this.DOMItem.cells[2].appendChild(menuarrow);
	}
	return menu;
}

// Event Handlers

function MenuItemClick(event)
{
	if(!event)event=window.event; //IE event model;
	
	if(this.menuLevel == 0) {
		if(document.menusactive) {
			if(this.className=="selectedmenuitem") {
				DeSelectItems(this.parentNode);
				document.menusactive=false;
			}
		} else {
			document.menusactive=true;
			this.onmouseover(event);
		}
	} else {
		if(this.extLink) {
			window.location=this.extLink;
		} else if(this.actionjs) {
			eval(this.actionjs);
		}	
		var menu=GetAncestorByClass(this, 'menu');
		DeSelectItems(menu, true);
		document.menusactive=false;
	}
	//Stop this click closing the menus
	event.cancelBubble = true;  //For IE6
	if (event.stopPropagation) event.stopPropagation();
	
}

function MenuItemMouseOver(event)
{
	if(document.menusactive) {
		var parentmenu=GetAncestorByClass(this, 'menu');
		DeSelectItems(parentmenu);
		
		this.className="selectedmenuitem";
	
		if(this.menu) {
			if(this.menuOpen != true) {
				if(this.menu.offsetTop == 0) {
					if(this.menuLevel == 0) {
						this.menu.style.left=this.offsetLeft+"px";
						this.menu.style.top=(this.offsetTop+this.offsetHeight)+"px";
					} else {
						this.menu.style.left=(this.parentNode.parentNode.offsetLeft+this.parentNode.offsetLeft+this.offsetLeft+this.offsetWidth)+"px";
						this.menu.style.top=(this.parentNode.parentNode.offsetTop+this.parentNode.offsetTop+this.offsetTop)+"px";
					}
				}
				this.menuOpen = true;
				this.menu.style.zIndex = document.maxWinZIndex+1;
				this.menu.style.display = "";
			}
		}
	}	
}

function MenuItemMouseOut(event)
{
	if(document.menusactive) {
		if(this.menu == null) {
			this.className="menuitem";		
		}
	}
}


// Other funcs

function DeSelectItems(menu, doparents)
{
	var itemcont;
	
	if(menu.tagName == "TABLE" && menu.tBodies[0]) {
		itemcont=menu.tBodies[0];
	} else {
		itemcont=menu;
	}
	
	for(var item=itemcont.firstChild; item != null; item=item.nextSibling)
	{
		if(item.className == "selectedmenuitem") {
			item.className="menuitem";
			
			if(item.menuOpen) {
				DeSelectItems(item.menu);
				item.menuOpen = false;
				item.menu.style.display = "none";
			}
		}
	}
	if(doparents) {
		if(menu.parentItem && menu.parentItem.className == "selectedmenuitem") {
			var parentmenu=GetAncestorByClass(menu.parentItem, 'menu');
			DeSelectItems(parentmenu, doparents);
		}
	}
}

