SOLUTIONS_BUTTON_ID 	= "solutions-menu-item";
PRODUCTS_BUTTON_ID 		= "products-menu-item";
SUPPORT_BUTTON_ID 		= "support-menu-item";
NETWORK_BUTTON_ID 		= "network-menu-item";
PARTNERS_BUTTON_ID 		= "partners-menu-item";
INFORMATION_BUTTON_ID 	= "information-menu-item";
CAREERS_BUTTON_ID 		= "careers-menu-item";

function hoverButton(buttonid) {

	var button 	= document.getElementById(buttonid);
	
	button.style.backgroundImage = 'url(../images/navigation/background-hover.gif)';
}

function killButton(buttonid) {

	var button 	= document.getElementById(buttonid);
	
	button.style.backgroundImage = 'url(../images/navigation/background.gif)';
}

var rsMenu;
var topLevelItems;
var headers;
var hasSubs;
var lis;
var anchors;
var mnemonics;
var menuComboBoxes;
var theAnchor 		= document.createElement(A);
var theOtherAnchor 	= document.createElement(A);
//	var rsMenuTimeout;

var menuFloatingLeft			= false;
var selectedTopLevelMenuItem 	= null;
var selectedMenuItem			= null;
var selectedParentItem			= null;

RS_MENU_WRAP_CLASS_NAME 	= "rs-menu-wrap";
RS_MENU_CLASS_NAME			= "rs-menu";
TOP_LEVEL_HEADER_CLASS_NAME = "top-level-item";
HAS_SUBS_CLASS_NAME			= "has-subs";
SUB_MENU_CLASS_NAME			= "sub-menu";
MNEMONIC_CLASS_NAME			= "mnemonic";


function initRSMenu() {
	rsMenuWrap 		= document.getElementById(RS_MENU_WRAP_CLASS_NAME);
	rsMenu 			= document.getElementById(RS_MENU_CLASS_NAME);
	topLevelItems 	= rsMenu.getElementsByTagName(TOP_LEVEL_HEADER_CLASS_NAME);
	headers			= rsMenu.getElementsByTagName(H3);
	hasSubs			= getDescendantsByTagAndClassName(
												rsMenu,
												LI,
												HAS_SUBS_CLASS_NAME);
	lis				= getDescendantsByTagNameExceptClassName(
												rsMenu,
										   		LI,
										   		TOP_LEVEL_HEADER_CLASS_NAME);
	anchors			= rsMenu.getElementsByTagName(A);
	mnemonics		= getDescendantsByTagAndClassName(
												rsMenu,
												SPAN,
												MNEMONIC_CLASS_NAME);
	menuComboBoxes		= document.body.getElementsByTagName( SELECT );
	
	
	//Evt.subscribe(document,MOUSE_OVER,bodyOverHandle);
	Evt.subscribe(document,MOUSE_OVER,bodyClickHandle);
	//Evt.subscribe(document,KEY_PRESS,keyPressHandle);
	if (isIEWin) {
		Evt.subscribe(document,KEY_UP,keyUpHandle);
	} else {
		Evt.subscribe(document,KEY_PRESS,keyUpHandle);
	}
	for (var i = 0; i < headers.length; i++) {
		//Evt.subscribe(headers[i],MOUSE_OVER,rsMenuHeaderOverHandle);
		Evt.subscribe(headers[i],MOUSE_OVER,rsMenuHeaderClickHandle);
		//Evt.subscribe(headers[i],MOUSE_OUT, rsMenuHeaderOutHandle );
	}
	for (var i = 0; i < lis.length; i++) {
		Evt.subscribe(lis[i],MOUSE_OVER,liOverAdapter);
		Evt.subscribe(lis[i],MOUSE_OUT, liOutHandle );
	}
	for (var i = 0; i < mnemonics.length; i++) {
		//Evt.subscribe(mnemonics[i],MOUSE_OVER,rsMenuHeaderOverHandle);
		Evt.subscribe(mnemonics[i],MOUSE_OVER,rsMenuHeaderClickHandle);
	}
}


function subscribeMouseOverHandlers() {
	for (var i = 0; i < headers.length; i++) {
		Evt.subscribe(headers[i],MOUSE_OVER,rsMenuHeaderOverHandle);
	}
	for (var i = 0; i < mnemonics.length; i++) {
		Evt.subscribe(mnemonics[i],MOUSE_OVER,rsMenuHeaderOverHandle);
	}
}
	
function unSubscribeMouseOverHandlers() {
	for (var i = 0; i < headers.length; i++) {
		Evt.unsubscribe(headers[i],MOUSE_OVER,rsMenuHeaderOverHandle);
	}
	for (var i = 0; i < mnemonics.length; i++) {
		Evt.unsubscribe(mnemonics[i],MOUSE_OVER,rsMenuHeaderOverHandle);
	}
}

function rsMenuHeaderClickHandle(evt) {
	if (isIEWin) {
		hideAllMenuComboBoxes();
	}
	subscribeMouseOverHandlers();
	rsMenuHeaderOverHandle(evt);
}

function rsMenuHeaderOverHandle(evt) {
	//clearRSMenuTimeout();
	evt = new Evt(evt,true);
	hideAllMenus();
	evt.target = findAncestorOrSelfWithTagName(evt.target,H3);
	setClassAsHover(evt.target);
	showSubMenu(findAncestorWithTagName(evt.target,LI));
	selectedTopLevelMenuItem = evt.target;
	evt.cancel();
}

function rsMenuHeaderOutHandle(evt) {
	evt = new Evt(evt,true);
	//selectedTopLevelMenuItem = null;
	evt.cancel();
}

/*	function clearRSMenuTimeout() {
	clearTimeout(rsMenuTimeout);
}*/

function liOverAdapter(evt) {
	evt = new Evt(evt,true);
	liOverHandle(evt);
}

function liOverHandle(evt) {
	try {
		//clearRSMenuTimeout();
		var ul = findAncestorWithTagName(evt.target,UL);
		var li;
		setClassAsNormal(theAnchor);
		setClassAsNormal(theOtherAnchor);
		if (isClass(ul,SUB_MENU_CLASS_NAME)) {
			li = findAncestorWithTagName(ul,LI);
			selectedParentItem = li;
			theOtherAnchor = getFirstChildByTagName(li,A);
			setClassAsActive(theOtherAnchor);
		} else {
			hideAllSubMenus();
		}
		li = findAncestorWithTagName(evt.target,LI);
		theAnchor = evt.target;
		setClassAsHover(theAnchor);
		showSubMenu(li);
		selectedMenuItem = li;
		evt.cancel();
	} catch (e) { }
}

function isMenuTooWide(n) {
	menuFloatingLeft = false;
	if (isClass(n,"top-level")) {
		return false;
	}
	
	var nLeft = getOffsetLeft(n);
	var vWidth = getViewportWidth();
	var menuWidth = 210;

	// Check for viewportwidth
	if (nLeft + (menuWidth*2) > vWidth) {
		menuFloatingLeft = true;
	}
	
	// Check for screen width
	if (nLeft + (menuWidth*2) + getScreenX() > getScreenWidth()) {
		menuFloatingLeft = true;
	}
	
	return menuFloatingLeft;
}

function liOutHandle(evt) {
	evt = new Evt(evt,true);
	setClassAsNormal(evt.target);
	selectedMenuItem = null;
	evt.cancel();
}

/*function bodyOverHandle(evt) {
	evt = new Evt(evt,true);
	if (isNodeName(evt.target,HTML) || isNodeName(evt.target,BODY)) {
		rsMenuTimeout = setTimeout('hideAllMenus();',450);
	}
}*/

function bodyClickHandle(evt) {
	evt = new Evt(evt,true);
	if (findAncestorOrSelfWithClassName(evt.target,
									  TOP_LEVEL_HEADER_CLASS_NAME)) {
		return;
	}
	hideAllMenus(evt);
	unSubscribeMouseOverHandlers();
	if (isIEWin) {
		showAllMenuComboBoxes();
	}
}

function showSubMenu(li) {
	var ul = getFirstChildByTagName(li,UL);
	if (ul) {
		if (isMenuTooWide(li)) {
			setX(ul,-252);
		}
		show(ul);
	}
}

function hideSubMenu(li) {
	var ul = getFirstChildByTagName(li,UL);
	if (ul) {
		setX(ul,0);
		hide(ul);
	}
}

function hideAllMenus() {
	var uls = rsMenu.getElementsByTagName(UL);
	for (var i = 0; i < uls.length; i++) {
		hide(uls[i]);
	}
	for (var i = 0; i < headers.length; i++) {
		setClassAsNormal(headers[i]);
	}
	if (selectedMenuItem) {
		setClassAsNormal(getFirstChildByTagName(selectedMenuItem,A));
	}
	if (theAnchor) {
		setClassAsNormal(theAnchor);
	}
	if (theOtherAnchor) {
		setClassAsNormal(theOtherAnchor);
	}
	selectedTopLevelMenuItem 	= null;
	selectedMenuItem 			= null;
	selectedParentItem 			= null;
}

function hideAllSubMenus() {
	var uls = getDescendantsByTagAndClassName(document,UL,SUB_MENU_CLASS_NAME);
	for (var i = 0; i < uls.length; i++) {
		setX(uls[i],170);			
		hide(uls[i]);
	}
}


/** 
 * Keyboard navigation functions
 */
 
 function showSpecificMenu(evt,itemName) {
	var h3 = document.getElementById(itemName+"-menu-item");
	if (!h3) {
		return;
	}
	evt.target = h3;
	rsMenuHeaderOverHandle(evt);
}
 
 function followMenuLink(evt) {
	var anchor = getFirstChildByTagName(selectedMenuItem,A);
	window.location = anchor.href;
}


function menuUpOrDownKeyPressed(evt,dir) {
	var li,ul;
	if (!selectedMenuItem) {
		li = findAncestorWithTagName(selectedTopLevelMenuItem,LI);
		ul = getFirstChildByTagName(li,UL);
		if (DOWN == dir) {
			selectedMenuItem = getFirstChildByTagName(ul,LI);
		} else {
			selectedMenuItem = getLastChildByTagName(ul,LI);
		}
		theAnchor = getFirstChildByTagName(selectedMenuItem,A);
	} else {
		ul = findAncestorWithTagName(selectedMenuItem,UL);
		var items = getChildrenByTagAndClassName(ul,LI,"");
		if (DOWN == dir) {
			if (selectedMenuItem == items[items.length-1]) {
				li = getFirstChildByTagName(ul,LI);
			} else {
				li = findNextSiblingByTagName(selectedMenuItem,LI);
			}
		} else {
			if (selectedMenuItem == items[0]) {
				li = getLastChildByTagName(ul,LI);
			} else {
				li = findPreviousSiblingByTagName(selectedMenuItem,LI);
			}
		}
		theAnchor = getFirstChildByTagName(li,A);
		setClassAsNormal(getFirstChildByTagName(selectedMenuItem,A));
		selectedMenuItem = li;
	}
	evt.target = theAnchor;
	liOverHandle(evt);
}



function menuRightOrLeftKeyPressed(evt,dir) {
	if (selectedMenuItem) {
		setClassAsNormal(getFirstChildByTagName(selectedMenuItem,A));
	}
	if (selectedMenuItem && isClass(selectedMenuItem,HAS_SUBS_CLASS_NAME) 
			&& RIGHT == dir && !menuFloatingLeft) {
		navigateToSubMenu(evt);
	} else if (selectedMenuItem && isClass(selectedMenuItem,HAS_SUBS_CLASS_NAME) 
				&& LEFT == dir && menuFloatingLeft) {
		navigateToSubMenu(evt);
	} else if (selectedParentItem && LEFT == dir && !menuFloatingLeft) {
		navigateToParentMenu(evt);
	} else if (selectedParentItem && menuFloatingLeft && RIGHT == dir) {
		navigateToParentMenu(evt);
	} else {
		navigateToTopLevelMenu(evt,dir);
	}
}

function navigateToSubMenu(evt) {
	var ul,items,anchor;
	selectedParentItem = selectedMenuItem;
	ul = getFirstChildByTagName(selectedMenuItem,UL);
	items = ul.getElementsByTagName(LI);
	selectedMenuItem = items[0];
	anchor = getFirstChildByTagName(selectedMenuItem,A);
	evt.target = anchor;
	liOverHandle(evt);
}

function navigateToParentMenu(evt) {
	var anchor;
	selectedMenuItem = selectedParentItem;
	selectedParentItem = null;
	anchor = getFirstChildByTagName(selectedMenuItem,A);
	evt.target = anchor;
	liOverHandle(evt);
}

function navigateToTopLevelMenu(evt,dir) {
	var li,ul,items,nextLI,index;
	if (selectedParentItem) {
		setClassAsNormal(getFirstChildByTagName(selectedParentItem,A));
		selectedParentItem = null;
	}
	li = findAncestorWithTagName(selectedTopLevelMenuItem,LI);
	ul = findAncestorWithTagName(li,UL);	
	items = new List(ul.getElementsByTagName(H3));
	index = items.indexOf(selectedTopLevelMenuItem);
	if (RIGHT == dir) {
		if (index == items.size()-1) {
			nextLI = findAncestorWithTagName(items.get(0),LI);
		} else {
			nextLI = findAncestorWithTagName(items.get(index+1),LI);
		}
	} else {
		if (index == 0) {
			nextLI = findAncestorWithTagName(items.get(items.size()-1),LI);
		} else {
			nextLI = findAncestorWithTagName(items.get(index-1),LI);
		}
	}
	selectedTopLevelMenuItem = getFirstChildByTagName(nextLI,H3);
	evt.target = selectedTopLevelMenuItem;
	selectedMenuItem = null;
	rsMenuHeaderOverHandle(evt);
}

/**
 *	@return void
 */
function hideAllMenuComboBoxes() {
	for (var i = 0; i < menuComboBoxes.length; i++) {
		setVisible(menuComboBoxes[i],false);
	}
}

/**
 *	@return void
 */
function showAllMenuComboBoxes() {
	for (var i = 0; i < menuComboBoxes.length; i++) {
		setVisible(menuComboBoxes[i],true);
	}
}
 