/* Copyright (c): Net-Conception 2007 */

// Menu parameters and arrays - alter these to change the main and sub menu items and links
var menuLeft = 3;
var menuRight = 129;
var menuItemHt = 23;
var submenuLeft = 133;
var submenuRight = 274;
var bannerBottom = 93;
var menuTop = 124;

//NB some menu properties are controlled by the CSS .menu class

// Array of top margins & positions of each menu item (and assoc. submenu)
var menuMarginTops = new Array (4, 4, 4, 4, 4, 4, 4, 85);
var menuTops = new Array();

// Array of heights of each submenu (incl. border) NB 24 pixels per submenu
var submenuHts = new Array(20, 60, 20, 100, 60, 60, 40, 80);

// Array of menu names
var menuImageNames = new Array("Home", "Sections", "Whats on", "News", 
								"About us", "Contact us", "Links", "Admin");
								
// Arrays of submenus' captions (in order of main menu items)
var submenu1Captions = new Array("Home page");
var submenu2Captions = new Array("Beaver Scouts", "Cub Scouts", "Scouts");
var submenu3Captions = new Array("Major events");
var submenu4Captions = new Array("Recent news", "Sporting news", "Social news",
								 "Camping news", "Other news");
var submenu5Captions = new Array("Group Leaders", "Group Executive", "Headquarters");
var submenu6Captions = new Array("More details", "Joining our group", "Offering help");
var submenu7Captions = new Array("Other sites", "Create new page");
var submenu8Captions = new Array("Address book", "E-mail", "Web page library", "Authorization");
//var submenu8Captions = new Array("Address book", "\'Whats on\' editor", "Pending news", "Authorization");

// Arrays of submenu's item links
var submenu1Links = new Array("index.php");
var submenu2Links = new Array("web/News 10512.php", "web/News 10830.php", "web/News 10883.php");
var submenu3Links = new Array("Whatson/Whats on.php");
var submenu4Links = new Array("RecentNews/Recent News.php", "Sports/Sporting Events.php", "Social/Social Events.php",
							  "Camps/Camping Events.php", "OtherEvents/Other Events.php");
var submenu5Links = new Array("web/News 10671.php", "web/News 10724.php", "web/News 10777.php");
var submenu6Links = new Array("ContactUs/Contact_Us.php#MoreDetails", "ContactUs/Contact_Us.php#Joining", "ContactUs/Contact_Us.php#HelpOffer");
var submenu7Links = new Array("Links/Links.php", "VisEd/Visual Editor.php");
var submenu8Links = new Array("AddressBook/Address Book.php", "Mail/MailEditor.php", "News_System/News_Centre.php", "Authorization/Authorization.php");

// Global variables used in this module
var activeMenuNum = 0;
var isIndex;
var menuItems = new Array ();
var menuFiller;
var submenuItems = new Array ();

// For Netscape users, capture the MouseMove event
if (!document.all)
	document.captureEvents (Event.MOUSEMOVE);

document.onmousemove = track;

function getWindowObject (reqWindow, objName)
{
	// Return a variable containing a reference to the given object in the given window
	var requestedObj;
	if (isIE || isOpera)
		eval ("requestedObj = reqWindow.document.all." + objName);
	else
		requestedObj = reqWindow.document.getElementById(objName);
	return requestedObj;
}
	
function getHref (menuNum, submenuNum)
{
	var href;
	eval ("href = submenu" + menuNum + "Links[" + (submenuNum - 1) + "]");
	if (!isIndex)
		href = "../" + href;

	return href;
}

function getSrc (menuNum, isHighlighted)
{
	var src;
	src = "assets/Menu/btn" + menuImageNames[menuNum - 1];
	if (!isIndex)
		src = "../" + src;
		
	if (isHighlighted)
		src += " or.jpg";
	else
		src += " gn.jpg";
		
	return src;
}

function createMenuFiller ()
{
	menuFiller = document.createElement ("img");
	document.body.appendChild (menuFiller);
	menuFiller.setAttribute ("border", "0");
	menuFiller.style.position = "absolute";
	var fillLeft =  menuRight + 1;
	menuFiller.style.left = fillLeft + "px";
	menuFiller.style.visibility = "hidden";
	var src = "assets/Menu/Menu Filler.jpg";
	if (!isIndex)
		src = "../" + src;
		
	menuFiller.setAttribute ("src", src);
	menuFiller.setAttribute ("alt", "-");
}

function menuInit (isIndexPage, loggedIn)
// Initialise the menu using data and arrays above
{
	var i;
	var maxMenu, menuItem, menuContainer, menuHt, src;

	isIndex = isIndexPage;
	menuContainer = getObject("menuContainer");
	if ((mbrowser == "IE") || (mbrowser == "Opera"))
		menuContainer.style.marginTop = (menuTop - menuMarginTops[0] - bannerBottom - 1) + "px";
	else
	 	menuContainer.style.marginTop = (menuTop - bannerBottom - 1) + "px";
	 
	menuContainer.style.marginLeft = "0px";
	maxMenu = menuMarginTops.length;
	if (!loggedIn)
		maxMenu--;
		
	for (i = 1; i <= maxMenu; i++)
	{
		menuItem = document.createElement ("div");
		menuItems.push (menuItem);
		
		menuContainer.appendChild (menuItem);
		
		src = getSrc (i, false);
		
		if (i == 1)		// Home page
		{
			var href = getHref (1, 1);
			menuItem.innerHTML = "<a href='" 
												+ href + " 'onmouseover='menuBtnHighlight(1)'><img id='menuBtn1' name='menuBtn1' border='0' src='" 
												+ src + "' alt='Home' /></a>";
			menuTops.push (menuTop);
		}
		else
		{
			menuItem.innerHTML = "<a onmouseover='menuBtnHighlight(" + i + ")'><img id='menuBtn" + i + "' name='menuBtn"
												+ i + "' border='0' src='" + src + "' alt='" + menuImageNames[i - 1] + "' /></a>";
			menuTops.push (menuTops[i - 2] + menuItemHt + menuMarginTops[i - 1]);
		}

		menuItem.style.marginTop = menuMarginTops[i - 1] + 'px';
		menuItem.style.marginLeft = menuLeft + 'px';
	}

	if (!loggedIn)
		menuHt = menuTops[maxMenu - 1] + menuMarginTops[maxMenu] + (menuItemHt * 2) - menuTop;
	else
		menuHt = menuTops[maxMenu - 1] + menuItemHt - menuTop;

	createMenuFiller ();	

	//Create submenus
	for (i = 1; i <= maxMenu; i++)
		submenuInit (i);

} // menu_init

function submenuInit (menuNum)
//Initialise the captions, links and tops of the given submenu using the arrays defined above
{
	var i;
	var maxSubmenuItem, submenu;
	var innerHtmlStr = "";
	
	eval ("maxSubmenuItem = submenu" + menuNum + "Captions.length");
	//Build a statement such as the one below for the given submenu:
	//submenu.innerHTML = "<a href='link.htm'>Beavers</a><br /><a href='link.htm'>Cubs</a><br /><a href='link.htm'>Scouts</a>";
	
	submenu = document.createElement ("div");
	submenuItems.push (submenu);
	document.body.appendChild (submenu);
	
	// Add anchor, link and caption for each submenu item. Add a break if not last item.
	for (i = 1; i <= maxSubmenuItem; i++)
	{			
		innerHtmlStr += '<a href= "' + getHref (menuNum, i) + '">';
		eval ("innerHtmlStr += submenu" + menuNum + "Captions[i-1]");
		innerHtmlStr += "</a>";
		if (i != maxSubmenuItem)
			innerHtmlStr += "<br />";
	}
	
	submenu.innerHTML = innerHtmlStr;

	submenu.style.position = "absolute";
	eval ("submenu.style.top = \'" + (menuTops[menuNum-1]) + "px\'");
	eval ("submenu.style.height = \'" + submenuHts[menuNum-1] + "px\'");
	submenu.className = "menu";
	submenu.style.visibility = "hidden";
}

function menuBtnHighlight (btnNum)
// Set the given button to the appropriate (highlighted) image  
{
	var menuItemImg, submenu, menuContainer, menuContainerLeft;
	var menuFillLeft;
		
	//De-highlight last menu N.B. This shouldn't be needed but some browsers miss events
	if (activeMenuNum != 0)
		menuBtnDeHighlight (activeMenuNum);
	
	activeMenuNum = btnNum;		// Used by function: track

	// Display the submenu (these are named "mnu_home" etc.)
	submenu = submenuItems[btnNum - 1];
	submenu.style.visibility = 'visible';
	menuContainer = getObject ("menuContainer");
	menuContainerLeft = findPosX (menuContainer);
	submenu.style.left = (submenuLeft + menuContainerLeft) + "px";

	// Position small rectangular filler between menu and submenu
	menuFiller.style.visibility = 'visible';
	menuFiller.style.top = (menuTops[activeMenuNum - 1]) + "px";
	menuFiller.style.left = (menuRight + menuContainerLeft) + "px";

	// Switch menu button images
	menuItemImg = getObject ("menuBtn" + btnNum);
//alert(btnNum + ": " + getSrc (btnNum, true));
	menuItemImg.src = getSrc (btnNum, true);

}

function menuBtnDeHighlight (btnNum)
// Set the given button to the appropriate (de-highlighted) image
{
	var menuItemImg;
	var submenu;
	
	// Remove submenu and filler
	submenu = submenuItems[activeMenuNum - 1];
	submenu.style.visibility = 'hidden';
	menuFiller.style.visibility = 'hidden';

	// Switch menu button images
	menuItemImg = getObject ("menuBtn" + btnNum);
	menuItemImg.src = getSrc (btnNum, false);
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function track (e)
{
	var submenuTop;
	var menuBottom;
	var submenuBottom;
	
	// Determime mouse x and y
	var x = (document.all) ? window.event.clientX : e.pageX;
	var y = (document.all) ? window.event.clientY : e.pageY;
	
	if ((mbrowser == "IE") || (mbrowser == "Opera"))
	{
		if (document.documentElement && document.documentElement.scrollTop)
		{
			// It's IE6 in compliance mode
			x = x + document.documentElement.scrollLeft;
			y = y +  document.documentElement.scrollTop;
		}
		else
		{
			// It's IE 5 or less
			x = x + document.body.scrollLeft;
			y = y + document.body.scrollTop;
		}
	}

	// Adjust x for centred body
	var menuContainer = getObject ("menuContainer");
	var menuContainerLeft = findPosX (menuContainer);
	x = x - menuContainerLeft;
	
	//Display co-ordinates
//	var mainTitle;
//	if (mbrowser == "IE" || mbrowser == "Opera")
//		mainTitle = document.all.main_title;
//	else
//		mainTitle = document.getElementById ("main_title");
//	mainTitle.innerHTML = "X: " + x + ", Y: " + y;
//	mainTitle.visibility = 'visible';
	
	if (activeMenuNum > 0)		// Ensures there is an active menu
	{
		// Determine selected menu bounds
		submenuTop = menuTops[activeMenuNum - 1];
		menuBottom = submenuTop + menuItemHt;
		submenuBottom = submenuTop + submenuHts[activeMenuNum - 1] + 4;
		
		// If cursor goes outside bounds of menu item or inside rectangle under 
		// menu item & alongside its submenu, hide submenu & dehighlight menu item
		if ((x < menuLeft) ||(x > submenuRight) || (y < submenuTop) || (y > submenuBottom) 
			 || ((x > menuLeft) && (x < menuRight) && (y > menuBottom) 
				  && (y < submenuBottom)))
		{		
			menuBtnDeHighlight (activeMenuNum);
			activeMenuNum = 0;
		}
	}
}
