//------------------------------------------------------
// Author: Callum Elliot
// Date: 10/04/00
// Title: drop down menu engine v3
// supports MouseOut event on both IE4+ & NS4+
// notes: still a bit buggy in NS
// 		 - menu does not always show / hide as expected
//------------------------------------------------------

//-------------------------------------------
// set up menu variables:
// browser & system type
// differences in object referencing
//-------------------------------------------
var isNS = (navigator.appName == "Netscape");
var isMacIE = ( (navigator.userAgent.indexOf("IE 4")  > -1) && (navigator.userAgent.indexOf("Mac")  > -1) );
var layerRef = (isNS) ? "document" : "document.all";
var styleRef = (isNS) ? "" : ".style";
var isDynamic = ( (document.layers || document.all) && !isMacIE );
var activeMenu = 0;
var finalClip;
var done = false;
var doMenu = true;


//-------------------------------------------
// set position of where menu will appear
//-------------------------------------------
function activateMenu(menuLayerRef, offset, width) {
	if(doMenu) {
		if(done) {
			if (isDynamic && activeMenu != menuLayerRef) {
				if (activeMenu){
					hideMenu("menu" + activeMenu);
				}
				menuID = "menu" + menuLayerRef;
				activeMenu = menuLayerRef;
				// ns position setup
				if (isNS) {
					document[menuID].top = 78;
					document[menuID].left = ((window.innerWidth/2)+offset)-12;
					document[menuID].zIndex = 10;
				}
				// ie position setup
				else {
					document.all[menuID].style.pixelTop = 80;
					document.all[menuID].style.pixelLeft = (document.body.clientWidth/2)+offset;
					document.all[menuID].style.width = width;
					document.all[menuID].style.zIndex = 10;
				}
				showMenu(menuID);
			}
			// IE only - stop the captured event travelling further up the DOM
			if (isDynamic && !isNS) {
				window.event.cancelBubble = true;
			}
		}
	}
}

//-------------------------------------------
// show the current layer
//-------------------------------------------

function showMenu(layerID) {
	eval(layerRef + '["' + layerID + '"]' + styleRef + '.visibility = "visible"');
}

//-------------------------------------------
// hide the current layer
//-------------------------------------------

function hideMenu(layerID) {
	eval(layerRef + '["' + layerID + '"]' + styleRef + '.visibility = "hidden"');
}

/*
//-------------------------------------------
// hide all menus
// noOfMenus comes from dropMenuSetUp.js
//-------------------------------------------

function killAll() {
	for (var i = 1; i <= noOfMenus; i++){
		eval(layerRef + '["menu' + i + '"]' + styleRef + '.visibility = "hidden"');
	}
		window.event.cancelBubble = true;
}
*/

//-------------------------------------------
// check if the event captured is from the
// correct object. If true send to hideMenu()
//-------------------------------------------

function setUpHideMenu(e) {
	//check if there is a menu active
	if (activeMenu) {
		menuID = "menu" + activeMenu;
		// netscape hide menu
		if (isNS) {
			menuX1 = document[menuID].left;
			menuX2 = menuX1 + document[menuID].clip.right;
			menuY1 = document[menuID].top;
			menuY2 = menuY1 + document[menuID].clip.bottom;
			if (e.pageX < menuX1 || e.pageX > menuX2 || e.pageY > menuY2) {
				hideMenu(menuID);
				activeMenu = 0;
			}
		}
		// ie hide menu
		else {
			hideMenu(menuID);
			activeMenu = 0;
		}
	}
}

//-------------------------------------------
// check if the event captured is from the
// correct object and send to setUpHideMenu()
//-------------------------------------------

function doHide(e) {
	// ie Setup
	if(!isNS) {
		if(window.event.toElement==null)
		setUpHideMenu(null);
		else if(window.event.srcElement.id=='lnk' ||
		window.event.toElement.id=='lnk')
    	;
   		else
		setUpHideMenu(null);
  	}
	// ns setup
	else {
		document.routeEvent(e);
		setUpHideMenu(e);
 	}
}

//-------------------------------------------
// initialise
// - capture the mouseout event and pass to
// 	 the doHide function
// NOTE: IE must have each menu within the else statement
//-------------------------------------------

function init() {
	if (isDynamic) {
		// Netscape event capture
		if (isNS) {
			document.captureEvents(Event.MOUSEOUT);
		}
		if(isNS) {
			document.onmouseout = doHide;
		}
		// IE event capture
		// must be set up for each element
		else {
			document.all['menu1'].onmouseout = doHide;
			document.all['menu2'].onmouseout = doHide;
			document.all['menu3'].onmouseout = doHide;
			document.all['menu4'].onmouseout = doHide;
			document.all['menu5'].onmouseout = doHide;
			document.all['menu6'].onmouseout = doHide;
			document.all['menu7'].onmouseout = doHide;
		}
	}
	done=true;
}

//-------------------------------------------
// reset the menu system to default
//-------------------------------------------

function uninit() {
	done=false;
}

