/* Olympia Funding navigation menus javascript

	dependencies:
		x.js
		x_loadmngr.js
*/

function addMenuToElement (
	eleId,			// id of the menu label
	menuId,			// id of the menu box
	lblOverImgSrc	// the source of the label's 'over' image
) {
	var ele = xGetElementById( eleId );
	var menu = ele.menu = new Object();
	
	// set up label over/normal images
	ele.overImg = new Image();
	ele.overImg.src = lblOverImgSrc;
	
	ele.normalImg = new Image();
	ele.normalImg.src = ele.src;

	// set our label and menubox references
	menu.label = ele;
	
	if (menuId) {
		menu.menubox = xGetElementById( menuId );
		menu.menubox.menu = menu;
	}
	
	// set our show and hide functions
	menu.showMenu = function () {
		var label = this.label;
		var menubox = this.menubox;
		
		if (menubox) {
			// position the menubox, if we have one
			// first get our labels position and dimensions
			var mX = xPageX( label );
			var mY = xPageY( label );
			var mW = xWidth( label );
			var mH = xHeight( label );
			// get our menubox's width
			var bW = xWidth( menubox );
			// set our x and y values based on the above.
			// basically we're trying to center the menubox's
			// horizontally with it's menu-label
			var x = mX + (mW/2 - bW/2);
			var y = mY + mH + 1;
			
			// however, we need to double-check that our menubox's
			// aren't flying willy-nilly about.
			var minX = xPageX( "menuLbl_srvcs" );
			var maxX = xPageX( "menuLbl_inet" ) + xWidth( "menuLbl_inet" );
			if (x < minX) {
				// it's left edge is to far left
				x = minX;
			} else if ( (x + bW) > maxX && bW < 480 ) {
				// it's right edge is to far right
				x = maxX - bW;
			}
	
			xMoveTo( menubox, x, y );
			xShow( menubox );
		}
		
		// swap the label's image to the over state, but only if it's not
		// the static menu.
		label.src = (this == staticMenu) ? label.normalImg.src : label.overImg.src;

	};
	
	menu.hideMenu = function () {
		var label = this.label;
		var menubox = this.menubox;
		if (menubox) {
			xHide( menubox );
		}
		label.src = label.normalImg.src;
	};
	
	xAddEventListener( ele, 'mouseover', showMenuListener, false );
}

function showMenuListener (e) {
	var evt = new xEvent( e );
	var ele = evt.target;

	while (ele && !ele.menu) {
		ele = xParent( ele, true );
	}
	
	if (activeMenu && ele.menu != activeMenu) {
		activeMenu.hideMenu();
	}
	
	if (ele.menu) {
		activeMenu = ele.menu;
		if (activeMenu != staticMenu && staticMenu) {
			staticMenu.hideMenu();
		}
		activeMenu.showMenu();
	}
}

function hideMenuListener (e) {
	var evt = new xEvent( e );
	var ele = evt.target;
	
	while (ele && !ele.menu) {
		ele = xParent( ele, true );
	}
	
	if (!ele) {
		if (activeMenu && !activeMenuTimer) {
			activeMenuTimer = setTimeout( "hideActiveMenu()", 100 );
		}
		return;
	} else {
		clearTimeout( activeMenuTimer );
		activeMenuTimer = null;
	}
}

var activeMenuTimer = null;
function hideActiveMenu () {
	clearTimeout( activeMenuTimer );
	activeMenuTimer = null;
	var m = activeMenu
	activeMenu = null;
	if (m) m.hideMenu();
	if (staticMenu) staticMenu.showMenu();
}

function setSelectedMenu ( eleId ) {
	var ele = xGetElementById( eleId );
	if (ele) {
		staticMenu = ele.menu;
		staticMenu.showMenu();
	}
}

var activeMenu = null;
var staticMenu = null;
