// =========================================
//        ATer MENU SCRIPT
//              Version 4.0
// -----------------------------------------
//  Copyright 2006, http://www.ater.com.br
// =========================================

function Menu( sMenuId, sCallItemId, mParentMenuId, sRelMenuPos, sSwapToImgSrc ){
	this.sMenuId = sMenuId;
	this.sCallItemId = sCallItemId;
	this.mParentMenuId = mParentMenuId || false;
	this.mMenuVisible = false;
	this.aMenuHierarchy = new Array();
	this.aMenuHierarchy[0] = sMenuId;
	if(!this.mParentMenuId){ this.sRelMenuPos = sRelMenuPos || "BOTTOM_LEFT";
	} else { this.sRelMenuPos = sRelMenuPos || "RIGHT_TOP"; }
	this.sSwapToImgSrc = sSwapToImgSrc || false;
	MenuSys.aMenus[sMenuId] = this;

}

MenuSys = new Object();
MenuSys.iTimeoutDur = 20; 
MenuSys.aMenus = new Array();
MenuSys.sImgsDir = "";
MenuSys.errors = 0;
MenuSys.initMenusSet = false;

MenuSys.getBrowser = function(){
	if(document.all && !document.getElementById){ return "oldIE";
	} else if(document.all && document.getElementById){ return "newIE";
	} else if(!document.all && document.getElementById) { return "DOM";
	} else if(document.layers){ return "N4"; 
	} else { return "unknown"; }
}
MenuSys.sBrowser = MenuSys.getBrowser();

MenuSys.getPlatform = function(){
	var sUA = navigator.userAgent.toLowerCase();
	if(sUA.indexOf("mac") != -1){ return "mac";
	} else if(sUA.indexOf("win") != -1){ return "win";
	} else if(sUA.indexOf("linux") != -1){ return "linux";
	} else if(sUA.indexOf("x11") != -1){ return "unix";
	} else { return "unknown"; }
}
MenuSys.sPlatform = MenuSys.getPlatform();

MenuSys.initMenus = function(timedOut){
	for(sMenuId in MenuSys.aMenus){
		MenuSys.buildMenuHeirArray(sMenuId);
		var oMenu = MenuSys.aMenus[sMenuId];
		var iArrLength = oMenu.aMenuHierarchy.length;
		for(i=0; i<iArrLength; i++){
			MenuSys.setMenuEvent(oMenu.sMenuId,oMenu.aMenuHierarchy[i]);
		}
		MenuSys.setMenuEvent(oMenu.sCallItemId,oMenu.sMenuId);
	}
}

MenuSys.buildMenuHeirArray = function( sMenuId, aMenArray ){
	if(MenuSys.errors) return false;
	var oMenu = MenuSys.aMenus[sMenuId];
	var aMenuHeirArray = (!aMenArray) ? oMenu.aMenuHierarchy : aMenArray;
	try{
		if(oMenu.mParentMenuId){
			aMenuHeirArray[aMenuHeirArray.length] = oMenu.mParentMenuId;
			MenuSys.buildMenuHeirArray(oMenu.mParentMenuId,aMenuHeirArray);
		} 
	} catch(e) { MenuSys.reportError(sMenuId, "Parent menu "); }
}

MenuSys.reportError = function( sElemId, sObject ){
	if(!MenuSys.errors){ 
		alert("MENU ERROR:\n-----------------------------\n" + sObject
			  + " not found on page.\n\n -  " + sElemId + "  -"); 
	}
	MenuSys.errors = 1;
}

MenuSys.showHideSelects = function( iShowHide ){
     var sShowHide = (iShowHide == 1) ? "visible" : "hidden"; 
     var aSelectElems = document.getElementsByTagName('select');
     for(i=0; i<aSelectElems.length; i++){
          aSelectElems[i].style.visibility = sShowHide;
     }
}

MenuSys.setMenuEvent = function( sApplyEventTo, sElemEvtEffects ){
	if(MenuSys.getDomObjRef(sElemEvtEffects) != null){
		var showMenFunc = new Function( "MenuSys.showMenu('" + sElemEvtEffects + "')" );
		var hideMenFunc = new Function( "MenuSys.hideMenu('" + sElemEvtEffects + "')" );
	} else { MenuSys.reportError(sElemEvtEffects, "Menu"); return false; }
	if(MenuSys.getDomObjRef(sApplyEventTo) != null){
		MenuSys.addEvent( MenuSys.getDomObjRef(sApplyEventTo), 'mouseover', showMenFunc );
		MenuSys.addEvent( MenuSys.getDomObjRef(sApplyEventTo), 'mouseout', hideMenFunc );
	} else { MenuSys.reportError(sApplyEventTo, "Call item"); return false; }
}

MenuSys.showMenu = function( sElemId ){
	if(MenuSys.errors) return false; 
	if(MenuSys.aMenus[sElemId].mMenuVisible){
		window.clearTimeout(MenuSys.aMenus[sElemId].mMenuVisible);
	}
	if(MenuSys.aMenus[sElemId].sSwapToImgSrc) MenuSys.swapImg(sElemId);
	var oMenuObject = MenuSys.aMenus[sElemId];
	var oMoveToPos = MenuSys.getMoveToPos(oMenuObject);
	if(MenuSys.sBrowser == "oldIE" || MenuSys.sBrowser == "newIE") MenuSys.showHideSelects(0);
	MenuSys.moveMenuTo(oMenuObject.sMenuId,oMoveToPos.top,oMoveToPos.left);
	MenuSys.showHideElem(sElemId,1);
}

MenuSys.hideMenu = function( sElemId, bTimedOut ){	
	if(MenuSys.errors) return false;
	if(!bTimedOut){
		var sTimeoutFunc = "MenuSys.hideMenu('" + sElemId + "',1)";
		MenuSys.aMenus[sElemId].mMenuVisible = setTimeout(sTimeoutFunc,MenuSys.iTimeoutDur);	
	} else {
		MenuSys.aMenus[sElemId].mMenuVisible = false;
		MenuSys.showHideElem(sElemId,0);
		if(MenuSys.aMenus[sElemId].sSwapToImgSrc) MenuSys.swapImg(sElemId,1);
		if(MenuSys.sBrowser == "oldIE" || MenuSys.sBrowser == "newIE") MenuSys.showHideSelects(1);
		MenuSys.moveMenuTo(sElemId,-500,-500);
	}
}

MenuSys.moveMenuTo = function( sMenuId, iTop, iLeft ){	
	var oMenuRef = MenuSys.getDomObjRef(sMenuId,1);
	var mUnits = (typeof oMenuRef.left == "string") ? "px" : 0;
	oMenuRef.left = iLeft + mUnits;
	oMenuRef.top = iTop + mUnits;
}

MenuSys.getMoveToPos = function( oMenuObject ){
	var sCallItemId = oMenuObject.sCallItemId;
	var sPosIdentifier = oMenuObject.sRelMenuPos;
	var sMenuId = oMenuObject.sMenuId;
	var iCallItemTop = 		parseInt(MenuSys.getElemInfo(sCallItemId,"TOP"));
	var iCallItemBottom = 	parseInt(MenuSys.getElemInfo(sCallItemId,"BOTTOM"));
	var iCallItemLeft = 	parseInt(MenuSys.getElemInfo(sCallItemId,"LEFT"));
	var iCallItemRight = 	parseInt(MenuSys.getElemInfo(sCallItemId,"RIGHT"));
	var iCallItemHeight = 	parseInt(MenuSys.getElemInfo(sCallItemId,"HEIGHT"));
	var iCallItemWidth = 	parseInt(MenuSys.getElemInfo(sCallItemId,"WIDTH"));
	var iMenuWidth = 		parseInt(MenuSys.getElemInfo(sMenuId,"WIDTH"));
	var iMenuHeight = 		parseInt(MenuSys.getElemInfo(sMenuId,"HEIGHT"));
	switch(sPosIdentifier){
		case "BOTTOM_LEFT":
			var iMenuTop = iCallItemBottom;
			var iMenuLeft = iCallItemLeft;
			break;
		case "BOTTOM_RIGHT":
			var iMenuTop = iCallItemBottom;
			var iMenuLeft = iCallItemRight - iMenuWidth;  
			break;
		case "RIGHT_TOP":
			var iMenuTop = iCallItemTop;
			var iMenuLeft = iCallItemRight;
			break;
		case "LEFT_TOP":
			var iMenuLeft = iCallItemLeft - iMenuWidth;
			var iMenuTop = iCallItemTop;
			break;
		case "TOP_LEFT":
			var iMenuTop = iCallItemTop - iMenuHeight; 
			var iMenuLeft = iCallItemLeft;
			break;
		case "TOP_RIGHT":
			var iMenuTop = iCallItemTop - iMenuHeight;
			var iMenuLeft = iCallItemRight - iMenuWidth;
			break;
	}
	return { left:iMenuLeft, top:iMenuTop };
}

MenuSys.getElemInfo = function( sElemId, sDimParam ){
	var oObjRef = MenuSys.getDomObjRef(sElemId);
	var oObj = MenuSys.getObjectTopLeft(sElemId);
	switch(sDimParam){
		case "WIDTH": return oObjRef.offsetWidth; break;
		case "HEIGHT": return oObjRef.offsetHeight; break;
		case "TOP": return oObj.top; break;
		case "LEFT": return oObj.left; break;
		case "RIGHT": return oObj.left + oObjRef.offsetWidth; break;
		case "BOTTOM": return oObj.top + oObjRef.offsetHeight; break;
	}
}

MenuSys.getObjectTopLeft = function( sElemId ){
	var oOffsetTrail = MenuSys.getDomObjRef(sElemId); 
	var iLeft = 0;
	var iTop = 0;
	while(oOffsetTrail) {
		iLeft += oOffsetTrail.offsetLeft;
		iTop += oOffsetTrail.offsetTop;
		oOffsetTrail = oOffsetTrail.offsetParent;
	}
	var MAC = (MenuSys.sPlatform == "mac");
	if (MAC && typeof document.body.leftMargin != "undefined"){
		iLeft += document.body.LeftMargin;
		iTop += document.body.topMargin;
	}
	return { left:iLeft, top:iTop };
}

MenuSys.showHideElem = function( sElemId, bShowHide ){
	var oLayerRef = MenuSys.getDomObjRef(sElemId,1);
	var sShowHideVar = (bShowHide == 0) ? "hidden" : "visible"; 
	oLayerRef.visibility = sShowHideVar;
}

MenuSys.getDomObjRef = function( sElemId, bWithStyle ){
	if(!bWithStyle) {
		if (MenuSys.sBrowser == "oldIE") { return document.all[sElemId];
		} else { return document.getElementById(sElemId); }
	} else {
		if (MenuSys.sBrowser == "oldIE") { return document.all[sElemId].style;
		} else { return document.getElementById(sElemId).style; }
	}	
}

MenuSys.addEvent = function( oObjectRef, sEventType, fFunctionName ){
	if (oObjectRef.addEventListener){ 
		oObjectRef.addEventListener(sEventType,fFunctionName,false); 
		return true; 
	} else if (oObjectRef.attachEvent){ 
		return oObjectRef.attachEvent("on"+sEventType,fFunctionName); 
	} else { return false; } 
}

MenuSys.swapImg = function( sMenuId, iSwapBack ){
	var oMenuObj = MenuSys.aMenus[sMenuId];
	var oImgRef = document.images[oMenuObj.sCallItemId];
	if(!iSwapBack){
		if(!oMenuObj.sSwapBackImgSrc) oMenuObj.sSwapBackImgSrc = oImgRef.src;
		oImgRef.src = oMenuObj.sSwapToImgSrc;
	} else {
		oImgRef.src = oMenuObj.sSwapBackImgSrc;
	}
}


