/* MENU.JS
   Menu display functions.

    Version Information:
     20020204a = Created.
	 20020516a = Modified for increased browser compatibility.
	 20030604a = Added rollMenu function.
	 20050420a = Added rollMenu2 and killMenu functions.
	 20050503a = Added menuTime, variable time to close for menu items.
	 20050523a = Added check of menu existence to rollMenu2.
	 20050617a = Added pw, parent width, option for rollMenu2 relPosition property.

Copyright 2003, Land Information Access Association
*/

/* Initialize Variables */
var menuNames = new Array();
var menuRel = new Array();
var timeID;
var menuTime = 5000;

function showMenu(menuName) {
	toggleText(menuName, 1);
}

function rollMenu(menuName) {
	if (timeID) clearTimeout(timeID);
	killMenus();
	toggleText(menuName, 1);
	menuTime = parseInt(menuTime);
	if (menuTime > 0) timeID = setTimeout('killMenus()', menuTime);
}

function overMenu(menuName) {
	toggleText(menuName, 1);
	if (menuRel[menuName]) overMenu(menuRel[menuName]);
}

function rollMenu2(objRef, menuName, relPosition, parentName, offsetX, offsetY) {
	var menuLeft, menuTop;
	if (timeID) clearTimeout(timeID);
	if (menuName && menuName != '') {
		if (parentName && parentName != '') {
			menuRel[menuName] = parentName;
		} else {
			menuRel = new Array();
			killMenus();
		}
		if (!offsetX) offsetX = 0;
		if (!offsetY) offsetY = 0;
		getSize();
		getStyleObj();
		var theMenu = eval(styleObj.replace("~name~",menuName));
		if (theMenu) {
			var theMenuObj = getObjRef(menuName);
			var menuWidth = theMenuObj.offsetWidth;
			var menuHeight = theMenuObj.offsetHeight;
			var objCoords = getCoords(objRef);
			switch (relPosition) {
				case 'bl':
					menuLeft = objCoords[3];
					menuTop = objCoords[2];
					break;
				case 'tr':
					menuLeft = objCoords[1];
					menuTop = objCoords[0];
					break;
				case 'br':
					menuLeft = objCoords[1];
					menuTop = objCoords[2];
					break;
				case 'pw':
					menuLeft = objCoords[3];
					menuTop = objCoords[2];
					if (menuWidth < objRef.offsetWidth) theMenuObj.width = objRef.offsetWidth;
					break;
			}
			if (menuLeft + menuWidth + offsetX > winX) {
				menuLeft = menuLeft - menuWidth;
				if (parentName) menuLeft = menuLeft - objRef.offsetWidth;
			} else {
				menuLeft = menuLeft + offsetX;
			}
			if (menuTop + menuHeight + offsetY > winY) {
				menuTop = menuTop - menuHeight;
				if (relPosition == 'tr') {
					menuTop = menuTop + objRef.offsetHeight;
				} else {
					menuTop = menuTop - objRef.offsetHeight;
				}
			} else {
				menuTop = menuTop + offsetY;
			}
			theMenu.position = 'absolute';
			theMenu.left = menuLeft + 'px';
			theMenu.top = menuTop + 'px';
			toggleText(menuName, 1);
		}
	}
	menuTime = parseInt(menuTime);
	if (menuTime > 0) timeID = setTimeout('killMenus()', menuTime);	
}

function killMenus() {
	for (i = 1; i < menuNames.length; i++) {
		toggleText(menuNames[i], 0);
	}
	return true;
}

function killMenu(menuName) {
	toggleText(menuName, 0);
}

function initMenu() {
	if (document.layers) {
		document.captureEvents(Event.MOUSEDOWN);
		document.onMouseDown = killMenus;
	}
}
