 /***************************************************************************
 * menus.js
 *  Functions to manage the page menus
 *
 ***************************************************************************/

function showtrace(){alert(x);}


function gotoPage( destPage )
{
	window.location = destPage;
} 

function showElement(elementID) {
	var obj = document.getElementById(elementID);
	if( obj ){
		obj.style.display = "block";
	}
}

function hideElement(elementID) {
	var obj = document.getElementById(elementID);
	if( obj ){
		obj.style.display= "none";
	}
}

function highlight(elementID, subID ){
	hideElement( elementID );
	var highlightElement = elementID + "h";
	showElement( highlightElement );
	showSub( subID, highlightElement );
}

function unhighlight(elementID, subID){
	hideElement( elementID + "h" );
	showElement( elementID );
	releaseSub( subID );
}

function showSub( subID, buttonID ){
  if( subID && subMenus[subID] && subMenus[subID].menu ){
	var menu = subMenus[subID].menu;

		if( menu.timer ) { 
			window.clearTimeout(menu.timer) 
		}
	
		/*----------------------------------------------
		 * Render the submenu
		 * ---------------------------------------------
		 */
		menu.style.display = "block";
		menu.style.position = "absolute";

		/*----------------------------------------------
		 * Get the dimensions of viewport & submenu
		 * and position of the buttons
		 * Remember the dimensions of the submenu
		 * as originally rendered
		 * ---------------------------------------------
		 */
		if ( ! menu.subW ) {
			menu.subW = menu.offsetWidth;
			menu.subH = menu.offsetHeight;
		}
	
		var winH = Geometry.getViewportHeight();
		var winW = Geometry.getViewportWidth();

		var button = document.getElementById(buttonID);
		var pos = getPositionX( button );

		/*----------------------------------------------
		 * Adjust the position of the submenu if it
		 * runs out of the viewport
		 * ---------------------------------------------
		 */
		pos.x += button.offsetWidth;

		if( ( pos.y + menu.subH ) > ( winH - 30) ){
			pos.y += button.offsetHeight * .75;
			pos.y -= menu.subH;
		}
		else{
			pos.y += button.offsetHeight * .25;
		}
		if( ( pos.x + menu.subW ) > ( winW - 20 ) ){
			pos.x = pos.x - menu.subW - button.offsetWidth;
		}

		menu.style.left = pos.x + "px" ;
		menu.style.top = pos.y + "px";
  }
}

function releaseSub( subID ){

	if( subMenus[subID] ){
		var menu = subMenus[subID].menu;
		if( menu.timer ) { 
			window.clearTimeout(menu.timer) 
		}
		menu.timer = window.setTimeout( 'hideSub("' + subID + '")', 250 ); 

	}
}

function hideSub(subID){
	var menu = subMenus[subID].menu;
	menu.timer = null;
	hideElement(subID);
}

function inSubMenu(subID){
	var menu = subMenus[subID].menu;
	if( menu.timer ) { 
		window.clearTimeout(menu.timer) 
		menu.timer = null;
	}
}


function getPositionX(element)
{
	var posx = 0;
	var posy = 0;
	if (element.offsetParent){
	        do {
			posx += element.offsetLeft;
			posy += element.offsetTop;
			if (!element.offsetParent){
				break;
			}
		} while (element = element.offsetParent)
	}
	else if (element.x){
		posx += element.x;
		posy += element.y;
	}

	return {x:posx, y:posy};
}

