/*
*
*
*/
// ------------------------------------------------------ GLOBALS ---------------------------------------------------------------
var current_menu = '*';	// the menu 'in focus'
var current_menu_ref = -1;

//define menus
var menus = new Array();
//menus[[num]] = new Array ([menu name],[menu group],[menu parent(*=top)],[x1],[y1],[x2],[y2]);


// --------------------------------------------- MENU SYSTEM CONTROL FUNCTIONS --------------------------------------------------

//get type of menu from name
function getMenuType(menu_name) {
	var count;
	for (var count=0;count<menus.length;count++) {
		if (menus[count][0] == menu_name) return menus[count][1];
	}
	return false;
}

//get parent menu
function getMenuParent(menu_name) {
	for (var count=0;count<menus.length;count++)
		if (menus[count][0] == menu_name) return menus[count][2];
	return false;
}

//function to set coords of menu
function setMenuCoords(menu_name,absLeft,absTop,absRight,absBottom) {
	//get reference to menu object
	var menuRef; 
	for (var count=0;count<menus.length;count++) 
		if (menus[count][0] == menu_name) menuRef = menus[count]; 
	
	//set properties
	menuRef[3] = absLeft;
	menuRef[4] = absTop;
	menuRef[5] = absRight;
	menuRef[6] = absBottom;
	//window.alert('left:' + menuRef[3] + ' top:' + menuRef[4] + 'right:' + menuRef[4] + 'bottom:' + menuRef[6] + '');
}

//function to get menu position of current menu from menu name
function getMenuPos () {
	var menu_length = menus.length;
	for (var count=0;count<menu_length;count++) if (menus[count][0] == current_menu) return count;
	return -1;
}


//loads all menus
function loadMenus () {

	var crntMenu, lyrRef, absLeft,absTop,absRight,absBottom;

	for (var i=0;i<menus.length;i++) {
		crntMenu = menus[i];
	
		if (document.layers) {
			lyrRef = eval('document.layers.' + crntMenu[0]);
			absLeft = parseInt(lyrRef.left);
			absTop = parseInt(lyrRef.top);
			absRight = (absLeft + parseInt(lyrRef.clip.right));
			absBottom = (absTop + parseInt(lyrRef.clip.bottom));	
		}
		else {
			if (document.all) lyrRef = eval('document.all.' + crntMenu[0])
			else if (document.getElementById) lyrRef = eval('document.getElementById("' + crntMenu[0] + '")');
			absLeft = parseInt(lyrRef.style.left);
			absTop = parseInt(lyrRef.style.top);
			absRight = (absLeft + parseInt(lyrRef.style.width));
			absBottom = (absTop + parseInt(lyrRef.style.height));	
		}
		setMenuCoords(crntMenu[0],absLeft,absTop,absRight,absBottom);	//set menu coords
	}
}

 
// --------------------------------------------- MENU ITEM CONTROLS -----------------------------------------------------------

// turn off all members of the specified menus group
function groupOff(input_group) {
	//window.alert('turn off menus in group ' + input_group + ' crnt layer = ' + crntLayer);
	for (var count=0;count<menus.length;count++) {
		if (menus[count][1] == input_group) {
			if (document.all) eval('document.all.' + menus[count][0] + '.style.visibility = "hidden"');
			else if (document.layers) eval('document.layers.' + menus[count][0] + '.visibility = "hide"');
			else if (document.getElementById) eval('document.getElementById("' + menus[count][0] + '").style.visibility = "hidden"');
		}
	}
		
}

//turn all menus off
function allOff() {
	//window.alert('turn off all menus');
	for (var count=0;count<menus.length;count++) {
		if (document.all) eval('document.all.' + menus[count][0] + '.style.visibility = "hidden"');
		else if (document.layers) eval('document.layers.' + menus[count][0] + '.visibility = "hide"');
		else if (document.getElementById) eval('document.getElementById("' + menus[count][0] + '").style.visibility = "hidden"');
	}
}

//activate menu
function activateMenu(menu_name) {
		//window.alert('activate' + menu_name)	
		//deactivate any menus that may be on
		if (getMenuType(menu_name) == 'BASE') allOff();
		else groupOff(getMenuType(menu_name));
		
		if (document.all) {
			eval(menu_name + '.style.visibility = "visible"')
			current_menu = menu_name;
			current_menu_ref = getMenuPos();
		}
		else if (document.layers) {
			document.layers[menu_name].visibility = 'show';
			current_menu = menu_name;
			current_menu_ref = getMenuPos();
		}
		else if (document.getElementById) {
			document.getElementById(menu_name).style.visibility = 'visible';
			current_menu = menu_name;
			current_menu_ref = getMenuPos();
		}
		
		//if page has form on it then switch off from
		switchForm('hide');
		
}

//deactivate menu
function deactivateMenu(menu_name) {
		//window.alert('deactivate ' + menu_name)	
		if (document.all) {
			eval(menu_name + '.style.visibility = "hidden"')
			current_menu = getMenuParent(menu_name);
			getMenuPos();
		}
		else if (document.layers)	{
			document.layers[menu_name].visibility = 'hide';
			current_menu = getMenuParent(menu_name);
			getMenuPos();
		}
		else if (document.getElementById) {
			document.getElementById(menu_name).style.visibility = 'hidden';
			current_menu = getMenuParent(menu_name);
			getMenuPos();
		}
		//if menu is a portfolio item then activate special command
		if (menu_name.indexOf('HotSpot') > -1) {
			var clientName = menu_name.substring(0,(menu_name.indexOf('HotSpot')));
			pfNavRollOff(clientName);
		}

		//if page has form on it then switch on
		switchForm('show');
		
}

//deactivate menu (only -don't reset system)
function deactivateMenuOnly(menu_name) {
		//window.alert('deactivate only ' + menu_name)	
		if (document.all) {
			eval(menu_name + '.style.visibility = "hidden"')
			current_menu = getMenuParent(menu_name);
		}
		else if (document.layers)	{
			document.layers[menu_name].visibility = 'hide';
			current_menu = getMenuParent(menu_name);
		}
		else if (document.getElementById) {
			document.getElementById(menu_name).style.visibility = 'hidden';
			current_menu = getMenuParent(menu_name);
		}
		
}

// ------------------------------------------------------------------------------------------------------------------------------

// ---------------------------------------------------- MOUSE MOVEMENT CALUCLATOR -----------------------------------------------

var mx, my;	//global variables to hold mouse coords

//variables to avoid mouse movement detectors slowdown (ns6 and ie pc)
var statusArray = new Array (' ','  ');
var z = 0;

var lockMainNavMove = false;	//lock variable for mousemovement on main nav (avoids function being run before it has finished)

function initMonitors () {
	if (!document.all) document.captureEvents(Event.MOUSEMOVE) //if not ie then enable mouse event detection 
	document.onmousemove = monitor;	// Set-up to use getMouseXY function onMouseMove
}

// Monitor MOUSE X/Y movement
function monitor(e) {

	var name;
	var x;
	var x1,y1,x2,y2;
	var focus_x1, focus_y1, focus_x2, focus_y2;
	var tzone_x1, tzone_y1, tzone_x2, tzone_y2;

	if (document.all) { // grab the x-y pos.s if browser is IE
		mx = event.clientX + document.body.scrollLeft;
		my = event.clientY + document.body.scrollTop;
	}
	else {  // grab the x-y pos.s if browser is NS
		mx = e.pageX;
		my = e.pageY;
	}

	// catch possible negative values in NS4
	if (mx < 0) mx = 0;
	if (my < 0) my = 0;


	//status = "mx=" + mx + " my=" + my;
	//speed optimization for ns6 (need to be changing status bar content???)
	z = (z > 0) ? (0) : (1);
	status = statusArray[z];

	
	if (current_menu !== "*") { //if a menu is active check it
		focus_x1 = menus[current_menu_ref][3];
		focus_y1 = menus[current_menu_ref][4];
		focus_x2 = menus[current_menu_ref][5];
		focus_y2 = menus[current_menu_ref][6];
		
		// boundary checking without the possibility of a parent
		if ((mx < focus_x1) || (mx > focus_x2) || (my < focus_y1) || (my > focus_y2)) {
			//window.alert('x1 = ' + focus_x1 + ' x2 = ' + focus_x2 + ' y1 = ' + focus_y1 + ' y2 = ' + focus_y2);
			deactivateMenu(current_menu);
		}
	}
	
	//check movement on main nav items
	if ((z==1) && (!lockMainNavMove) && (mainNavActive > -1)) mainNavMove();
	
}

//function to detect movement over active rollover in mainnav
function mainNavMove() {
	lockMainNavMove = true;
	if (mainNavActive > -1) {//if main nav rollover in use
		var crnt = mainMenu[mainNavActive]; //get reference to array
		//if mouse within boundaries of active nav rollover then reset dd position
		//nb. vals of crnt array = ([left],[right],[top],[bottom])
		if ((mx > crnt[0]) && (mx < crnt[1]) && (my > crnt[2]) && (my < crnt[3])) mainNavOn(mainMenuItems[mainNavActive]);
	}
	lockMainNavMove = false;
}

//function to switch off forms whilst layer is over it (only netscape 4.7)
function switchForm (state) {
	if (document.layers) {
		if ((document.layers.lyrContactForm1) && (window_height < 600)) document.layers.lyrContactForm1.visibility = state;
		if ((document.layers.lyrLoginFrm) && (window_height < 500)) document.layers.lyrLoginFrm.visibility = state;
	}
}
