/* Definicion de Variables */
var intMouseX;
var intMouseY;
var objLayerActivo;
var bolInMenu = false;

/* Nombres de los Layers */
arrLayerNames = new Array('menu0', 'menu1', 'menu2', 'menu3');

/* Obtengo el Browser */
var isDOM = (document.getElementById) ? true : false;
var isIE = (document.all) ? true : false;
var isNN = (document.layers) ? true : false;

/* Funciones básicas de los Menúes
   ------------------------------- */

/* Muestra un Menu y Oculta a los demas */
function showMenu(strMenuName, strImgMenu){
	bolInMenu = true;
	if (strMenuName == objLayerActivo) {
		makeMenuHidden(strMenuName);
		objLayerActivo = '';
		return true;
	}
	var objLayer = getLayerName(strMenuName);
	setPosition(objLayer, strImgMenu, 15);
	hideMenues();

	// Muestra el Menu Seleccionado
	if ((isDOM) || (isIE))
		objLayer.visibility = "visible";
	else if (isNN)
		objLayer.visibility = "show";

	objLayerActivo = strMenuName;
}

/* Oculta todos los Menues */
function hideMenues(){
	for( i = 0; i < arrLayerNames.length; i++)
		makeMenuHidden(arrLayerNames[i]);
}

/* Setea el menu a oculto */
function makeMenuHidden(strMenuName){
	var objLayer = getLayerName(strMenuName);
	if ((isDOM) || (isIE))
		objLayer.visibility = "hidden";
	else if (isNN)
		objLayer.visibility = "hide";
}

function hideMenu(strMenuName){
	if ((bolInMenu) || (checkMousePos(strMenuName))){
	}else{
		makeMenuHidden(strMenuName);
		objLayerActivo = '';
	}
}

/* Checkea la posición del Mouse contra la del Menu */
function checkMousePos(strMenuName){
	var objLayer = getLayerName(strMenuName);
	if (isDOM){     
		if (isIE){
			intLayerMinX = objLayer.posLeft;
			intLayerMinY = objLayer.posTop;
			intLayerMaxX = intLayerMinX + document.all(strMenuName).offsetWidth;
			intLayerMaxY = intLayerMinY + document.all(strMenuName).offsetHeight;
			intLayerMinY = intLayerMinY - 10;
		}else{
			intLayerMinX = parseInt(objLayer.left);
			intLayerMinY = parseInt(objLayer.top);
			intLayerMaxX = intLayerMinX + parseInt(document.defaultView.getComputedStyle(document.getElementById(strMenuName), "").getPropertyValue("width"));
			intLayerMaxY = intLayerMinY + parseInt(document.defaultView.getComputedStyle(document.getElementById(strMenuName), "").getPropertyValue("height"));
			intLayerMinY = intLayerMinY - 10;
		}
	}else if(isIE){
		intLayerMinX = objLayer.posLeft;
		intLayerMinY = objLayer.posTop;
		intLayerMaxX = intLayerMinX + document.all(strMenuName).offsetWidth;
		intLayerMaxY = intLayerMinY + document.all(strMenuName).offsetHeight;
		intLayerMinY = intLayerMinY - 10;
	}else if (isNN){
		intLayerMinX = objLayer.left;
		intLayerMinY = objLayer.top;
		intLayerMaxX = intLayerMinX + objLayer.clip.width;
		intLayerMaxY = intLayerMinY + objLayer.clip.height;
		intLayerMinY = intLayerMinY - 10;
	}

//	alert ("X: " + intMouseX + " Y: " + intMouseY + "\n minX: " + intLayerMinX + " maxX: " + intLayerMaxX + " minY: " + intLayerMinY + " maxY: " + intLayerMaxY);

	if (intMouseX >= intLayerMinX && intMouseX <= intLayerMaxX && intMouseY >= intLayerMinY && intMouseY <= intLayerMaxY)
		return true;	
	else
		return false;
}

/* Obtiene la posición del Mouse */
function getMousePos(e){
	if ((objLayerActivo) && (!bolInMenu)){
		if (isDOM){
			if (isIE){
				intMouseX = event.clientX;
				intMouseY = event.clientY;
			}else{
				intMouseX = e.clientX;
				intMouseY = e.clientY;
			}
		}else if (isIE){
			intMouseX = event.clientX;
			intMouseY = event.clientY;
		}else if (isNN){
			intMouseX = e.pageX;
			intMouseY = e.pageY;
		}

		if (!checkMousePos(objLayerActivo)){
			setTimeout("hideMenu('" + objLayerActivo + "')", 700);
		}
	}
}

/* Funciones para Obtener la Posición del Mouse */
if ((isDOM) && (!isIE))
	document.addEventListener('mousemove', getMousePos, true);
else if (isIE)
	document.onmousemove = getMousePos;
else if (isNN){
	document.captureEvents(Event.MOUSEMOVE);
	document.onmousemove = getMousePos;
}

/* Setea la posición del Menu */
function getLayerName(strLayerName){
	var objLayer;
	if (isDOM)
		objLayer = document.getElementById(strLayerName).style;
	else if (isIE)
		objLayer = document.all[strLayerName].style;
	else if (isNN)
		objLayer = document.layers[strLayerName];
	return objLayer;
}

/* Setea la posición del Menu */
function setPosition(objElement, objPositioner, intPixels){
	var strPositioner;
	var iNumeroX;
	if (isDOM) {
		iNumeroX = - 15;
	  strPositioner = document.getElementById(objPositioner);
	}
	else if (isIE) {
		iNumeroX = - 15;
		strPositioner = document.all[objPositioner];
	}
	else if (isNN) {
		iNumeroX = - 15;
		strPositioner = document[objPositioner];
	}
	objElement.left = getAbsX(strPositioner) + iNumeroX;
	if (intPixels > 0)
		objElement.top = getAbsY(strPositioner) + intPixels;
	else
		objElement.top = getAbsY(strPositioner);
}

/* Obtienen la posición X,Y de un elemento */
function getAbsX(objElement) { return (objElement.x) ? objElement.x : getAbsPos(objElement, "Left"); }
function getAbsY(objElement) { return (objElement.y) ? objElement.y : getAbsPos(objElement, "Top"); }

/* Obtiene la posición de un Elemento */
function getAbsPos(objElement, strType) {
	var intPosition = 0;
	while (objElement != null) {
		intPosition += objElement["offset" + strType];
		objElement = objElement.offsetParent;
	}
	return intPosition;
}