/*
 * Menu script v2.0
 *
 * Mikael Vessgård 2002 (micke@vessgard.com)
 * Thomas Atterberg 2002 - 2007 (thomas@atterberg.se)
 *
 * This code may not be copied without permission from the author(s).
 */
 
// UserSettings
// --------------------------------------
var collapsetime	= 500;
var mainmenuclass	= 'menuMain';		// add a 'submenu' + 'Right' class to add a rightsidemenu  
var submenuclass	= 'subMenu';		// add a 'submenu' + 'child' class to add a indicator for submenu  
var HtmlMenuDiv		= 'Menu';

var Rightdropwidth	= 160;



// No UserSettings, do not change!
// --------------------------------------
var menuItems		= new Array();
var activeMenuItems = new Array();
var currentMenuLevel = -1;
var collapseTimeout = null;
var lastMainMenu	= null;


function MenuItem(cellID, menuText, parentCellID, right, link)
{
	this.cellID = cellID;
	this.menuText = menuText;
	this.parentCellID = parentCellID;
	this.link = link;
	this.rightDisplay = right

	this.subMenuItems = null;
	this.menuLevel = -1;
	this.orderNo = -1;
	this.subMenuLayerXStart = -1;
	this.subMenuLayerYStart = -1;

	this.addSubMenuItem = addSubMenuItem;
	this.isHeader = isHeader;
	this.isSubItemsPresent = isSubItemsPresent
	this.getLayerID = getLayerID;
	this.getMenuLevel = getMenuLevel;
	this.getSubmenuLayerXStart = getSubmenuLayerXStart;
	this.getSubmenuLayerYStart = getSubmenuLayerYStart;
}

function addSubMenuItem(menuItem)
{
	if(this.subMenuItems==null) 
		this.subMenuItems = new Array();
	
	menuItem.orderNo = this.subMenuItems.length;
	this.subMenuItems[this.subMenuItems.length] = menuItem;
}

function getLayerID()
{
	return 'menuItem' + this.cellID;	
}

function getMenuLevel()
{
	if(this.menuLevel == -1)
		if(this.isHeader()) this.menuLevel = 1;
			else this.menuLevel = menuItems[this.parentCellID].getMenuLevel() + 1;

	return this.menuLevel;
}

function getSubmenuLayerXStart()
{	
	if(this.subMenuLayerXStart == -1)
		if(this.isHeader()) 
		{	
			if(this.rightDisplay > 0)
				this.subMenuLayerXStart = document.getElementById(this.getLayerID()).offsetLeft - (Rightdropwidth - document.getElementById(this.getLayerID()).clientWidth - 4);
			else
				this.subMenuLayerXStart = document.getElementById(this.getLayerID()).offsetLeft - 1;
			
			if(navigator.userAgent.indexOf("MSIE") > 0)
				this.subMenuLayerXStart += findPos(document.getElementById(HtmlMenuDiv), true);
		}
		else 
		{
			if(this.parentCellID != undefined && this.rightDisplay > 0)
				this.subMenuLayerXStart = document.getElementById(this.getLayerID()).offsetLeft + document.getElementById(this.getLayerID()).clientWidth + menuItems[this.parentCellID].getSubmenuLayerXStart() - (Rightdropwidth*2) + 10;
			else		
				this.subMenuLayerXStart = document.getElementById(this.getLayerID()).offsetLeft + document.getElementById(this.getLayerID()).clientWidth + menuItems[this.parentCellID].getSubmenuLayerXStart() -2;
		}
			
			
	return this.subMenuLayerXStart;
}

function findPos(obj, getX)
{
	var curleft = curtop = 0;
	
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	
	if(getX)
		return curleft;
	else
		return curtop;
}

function getSubmenuLayerYStart()
{	
	if(this.subMenuLayerYStart == -1)
		if(this.isHeader()) 
			this.subMenuLayerYStart = findPos(document.getElementById(HtmlMenuDiv), false) + document.getElementById(HtmlMenuDiv).clientHeight + 1;
		else 
			this.subMenuLayerYStart = (document.getElementById(this.getLayerID()).clientHeight + 1) * this.orderNo + menuItems[this.parentCellID].getSubmenuLayerYStart() + 3;

	return this.subMenuLayerYStart;
}

function isHeader()
{
	return this.parentCellID==null ? true : false;
}

function isSubItemsPresent()
{
	return this.subMenuItems != null ? true : false;
}

function createMenu(allMenuItems)
{
	if(allMenuItems != undefined)
		for(var i=0 ; i<allMenuItems.length ; i++)
			if(allMenuItems[i] != undefined)
				menuItems[allMenuItems[i].cellID] = allMenuItems[i];

	if(allMenuItems != undefined)
		for(var i=0 ; i<allMenuItems.length ; i++)
			if(allMenuItems[i] != undefined)
				if(allMenuItems[i].parentCellID != null)
					menuItems[allMenuItems[i].parentCellID].addSubMenuItem(allMenuItems[i]);
}

function SetTopMenus()
{
	var menuStr = '';
	
	// Populating rightside first
	for(var i=0 ; i<menuItems.length ; i++)
	{
		if(menuItems[i] != undefined && menuItems[i].isHeader() && menuItems[i].rightDisplay == 1)
		{
			menuStr += '<div id="menuItem' + menuItems[i].cellID + '" class="'+mainmenuclass+'Right" ' +
			'onMouseOver="menuMouseOver(' + menuItems[i].cellID + ')" ' +
			'onMouseOut="menuMouseOut(' + menuItems[i].cellID + ')" ' +
			'onClick="menuItemClick(' + menuItems[i].cellID + ')">' + menuItems[i].menuText + '</div>\n\n';
		}
	}
	// Then the left side
	for(var i=0 ; i<menuItems.length ; i++)
	{
		if(menuItems[i] != undefined && menuItems[i].isHeader() && menuItems[i].rightDisplay == 0)
		{
			menuStr += '<div id="menuItem' + menuItems[i].cellID + '" class="'+mainmenuclass+'" ' +
			'onMouseOver="menuMouseOver(' + menuItems[i].cellID + ')" ' +
			'onMouseOut="menuMouseOut(' + menuItems[i].cellID + ')" ' +
			'onClick="menuItemClick(' + menuItems[i].cellID + ')">' + menuItems[i].menuText + '</div>\n\n';
		}
	}		
	
//	alert(menuStr);
	
	document.getElementById(HtmlMenuDiv).innerHTML = menuStr;
}

function menuItemClick(cellID)
{
	stopAutoCollapse();
	
	var currentMenuItem = menuItems[cellID];
	
	if(currentMenuItem != null)
	{
		if(currentMenuItem.link != null)
		{
			hideMenuLayers(1, 3)
			document.location.href = currentMenuItem.link;
		}
		else if(currentMenuItem.isSubItemsPresent())
		{
			if(currentMenuItem.getMenuLevel()==1)
				for(var i=0 ; i<activeMenuItems.length ; i++)
					activeMenuItems[i] = null;

			expandSubmenu(currentMenuItem);
		}
		else alert("MenuItem has no subitems or link?");
	}
	else alert("MenuItem missing? Reconfigure menu and try again.");
}

function expandSubmenu(currentMenuItem)
{
	var subMenuItems = currentMenuItem.subMenuItems;
	var subMenuLayerName = "subMenu" + currentMenuItem.getMenuLevel();
	
	if(document.getElementById(subMenuLayerName) == undefined)
		alert('System error: Check if the <div id="SubMenuX"> are in the webpage..');

	var subMenuItemsHtml 		= '';

	for(var i=0 ; i<subMenuItems.length ; i++)
	{
		subMenuItemsHtml += 
			'<div style="border-bottom: solid 1px #ccc; float: left;"><div id="menuItem' + subMenuItems[i].cellID;
		
		if(subMenuItems[i].isSubItemsPresent())	
			subMenuItemsHtml += '" class="'+submenuclass+'child' + ((subMenuItems[i].rightDisplay) ? "Right" : "") + '" ';
		else
			subMenuItemsHtml += '" class="'+submenuclass+'" ';
			
		subMenuItemsHtml += 
			'onMouseOver="menuSubMouseOver(' + subMenuItems[i].cellID + ')" ' +
			'onMouseOut="menuSubMouseOut(' + subMenuItems[i].cellID + ')" ' +
			'onClick="menuItemClick(' + subMenuItems[i].cellID + ')">';
			
		subMenuItemsHtml += subMenuItems[i].menuText + '</div></div><div style="clear: both;"></div>';
	}
	
	document.getElementById(subMenuLayerName).style.top = currentMenuItem.getSubmenuLayerYStart() + 'px';
	document.getElementById(subMenuLayerName).style.left = currentMenuItem.getSubmenuLayerXStart() + 'px';
	document.getElementById(subMenuLayerName).innerHTML = subMenuItemsHtml;
	document.getElementById(subMenuLayerName).style.visibility = "visible";	

	hideMenuLayers(currentMenuItem.getMenuLevel() + 1, currentMenuLevel);

	for(var i=currentMenuLevel + 1 ; i<activeMenuItems.length ; i++)
		activeMenuItems[i] = null;

	currentMenuLevel = currentMenuItem.getMenuLevel();
	activeMenuItems[currentMenuLevel] = currentMenuItem;
}

function hideMenuLayers(fromLevel, toLevel)
{
	for(var i=fromLevel ; i<=toLevel ; i++)
	{
		document.getElementById('subMenu'+i).style.visibility = "hidden";
		document.getElementById('subMenu'+i).style.top = '0px';
		document.getElementById('subMenu'+i).style.left = '0px';
	}
}

function hideSubMenues()
{
	hideMenuLayers(1, currentMenuLevel);
	collapseTimeout = null;
	
	if(lastMainMenu != undefined && lastMainMenu != null)
		document.getElementById(lastMainMenu.getLayerID()).className = (lastMainMenu.rightDisplay == 1) ? mainmenuclass+"Right" : mainmenuclass;
	
	lastMainMenu = null;
}

function autoCollapse()
{	
	if(collapseTimeout == null)
		collapseTimeout = setTimeout("hideSubMenues()", collapsetime);
}
	
function stopAutoCollapse()
{
	if (collapseTimeout)
		window.clearTimeout(collapseTimeout);
		
	collapseTimeout = null;
}

function menuSubMouseOut(cellID)
{
	autoCollapse();
	
	var activeMenuItem = activeMenuItems[menuItems[cellID].getMenuLevel()];
	
	// Start - Menu painting
	if(activeMenuItem==null || activeMenuItem.cellID != cellID)
		document.getElementById(menuItems[cellID].getLayerID()).className = submenuclass;
	// End - Manu Painting
}

function menuSubMouseOver(cellID)
{
	stopAutoCollapse();
	
	document.getElementById(lastMainMenu.getLayerID()).className = (lastMainMenu.rightDisplay == 1) ? mainmenuclass+"RightHover" : mainmenuclass+'Hover';
	
	var currentMenuItem = menuItems[cellID];
	var activeMenuItem = activeMenuItems[currentMenuItem.getMenuLevel()];
	
	// Start - Menu painting
	
	if(activeMenuItem != null && activeMenuItem.cellID != cellID)
		if(activeMenuItem.isHeader())
			document.getElementById(activeMenuItem.getLayerID()).className = mainmenuclass;
		else
			if(document.getElementById(activeMenuItem.getLayerID()) != undefined)
				document.getElementById(activeMenuItem.getLayerID()).className = submenuclass + "child" + ((activeMenuItem.rightDisplay) ? "Right" : ""); 
	
	if(currentMenuItem.isSubItemsPresent())
	{
	// alert(submenuclass + "childHover" + ((currentMenuItem.rightDisplay) ? "Right" : ""));
		document.getElementById(currentMenuItem.getLayerID()).className = submenuclass + "childHover" + ((currentMenuItem.rightDisplay) ? "Right" : "");
	}
	else
		document.getElementById(currentMenuItem.getLayerID()).className = submenuclass + "Hover";

	// End - Manu Painting

	if(currentMenuItem.isSubItemsPresent())
		expandSubmenu(menuItems[cellID]);
	else 
		hideMenuLayers(currentMenuItem.getMenuLevel(), currentMenuLevel);
}


function menuMouseOver(cellName)
{
	stopAutoCollapse();
	
	if(lastMainMenu != null)
	{	
		document.getElementById(lastMainMenu.getLayerID()).className = (lastMainMenu.rightDisplay == 1) ? mainmenuclass+"Right" : mainmenuclass;
		lastMainMenu = null;
	}
	
	document.getElementById(menuItems[cellName].getLayerID()).className = (menuItems[cellName].rightDisplay == 1) ? mainmenuclass+"RightHover" : mainmenuclass+'Hover';
	
	if(menuItems != undefined)
	{
		if( menuItems[cellName].isSubItemsPresent())
			expandSubmenu(menuItems[cellName]);
		else 
			hideMenuLayers( menuItems[cellName].getMenuLevel(), currentMenuLevel);
	}
}

function menuMouseOut(cellName)
{
	autoCollapse();
	lastMainMenu = menuItems[cellName];
	
	if(!menuItems[cellName].isSubItemsPresent())
		document.getElementById(menuItems[cellName].getLayerID()).className = (menuItems[cellName].rightDisplay == 1) ? mainmenuclass+'Right' : mainmenuclass;
}