/************************************************
* Script para el menu desplegable. Compatible
* con IE4+, NS6+ y FF1.
*************************************************/

// Definicion de variables
var disappearDelay = 250;  // Velocidad de desaparicion del menu en el evento onMouseOut (en milisegundos)
var horizontalOffset = 0;  // Desplazamiento horizontal del menu desde la ubicacion original (Valor de 0-5)
var ie4 = document.all;    // Para IE4+
var ns6 = document.getElementById && !document.all;  // Para NS6+

// Funciones principales
function dropDownMenu(obj, e, div, menuWidth) {
	
	if (window.event) {
		event.cancelBubble = true;
	}
	else if (e.stopPropagation) {
		e.stopPropagation();
	}
	hideAllMenu();
	clearHideMenu();

	if (ie4 || ns6) {
		showHide(div, e, "visible", "hidden", menuWidth);
		div.x = getPosOffset(obj, "left");
		div.y = getPosOffset(obj, "top");
		div.style.left = div.x - clearBrowserEdge(div, obj, "rightedge") + obj.offsetWidth + horizontalOffset + "px";
		div.style.top = div.y - clearBrowserEdge(div, obj, "bottomedge") + "px";
	}

	return !(ie4 || ns6);
	
}

function delayHideMenu(div) {
	
	if (ie4 || ns6) {
		delayHide = setTimeout("hideMenu(" + div.id + ")", disappearDelay);
	}
	
}

function clearHideMenu() {
	
	if (typeof delayHide != "undefined") {
		clearTimeout(delayHide);
	}
	
}

function dynamicHide(div, e) {

	if (ie4 && !div.contains(e.toElement)) {
		delayHideMenu(div);
	}
	else if (ns6 && e.currentTarget != e.relatedTarget && !contains_ns6(e.currentTarget, e.relatedTarget)) {
		delayHideMenu(div);
	}
	
}

// Funciones auxiliares
function getPosOffset(obj, offsetType) {
	
	var totalOffset = (offsetType == "left") ? obj.offsetLeft : obj.offsetTop;
	var parentElement = obj.offsetParent;
	while(parentElement != null) {
		totalOffset = (offsetType == "left") ? totalOffset + parentElement.offsetLeft : totalOffset + parentElement.offsetTop;
		parentElement = parentElement.offsetParent;
	}
	
	return totalOffset;
	
}

function showHide(div, e, visible, hidden, menuWidth) {
	
	if (ie4 || ns6) {
		div.style.left = div.style.top =- 500;
	}
	div.widthobj = div.style;
	div.widthobj.width = menuWidth;
	if (e.type == "click" && div.style.visibility == hidden || e.type == "mouseover") {
		div.style.visibility = visible;
	}
	else if (e.type == "click") {
		div.style.visibility = hidden;
	}
	
}

function ieCompatTest() {
	
	return (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
	
}

function hideMenu(div) {
	
	if (typeof div != "undefined") {
		if (ie4 || ns6) {
			div.style.visibility = "hidden";
		}
	}
	
}

function hideAllMenu() {
	for(i = 0; i < document.all.length; i++) {
		if(document.all[i].id.substring(0, 3) == 'div') {
			document.all[i].style.visibility = "hidden";
		}
	}
}

function contains_ns6(a, b) {

	while (b.parentNode) {
		if ((b = b.parentNode) == a) {
			return true;
		}
	}
	return false;
	
}

function clearBrowserEdge(div, obj, whichedge) {

	var edgeoffset = 0;
	if (whichedge == "rightedge") {
		var windowedge = ie4 && !window.opera ? ieCompatTest().scrollLeft + ieCompatTest().clientWidth - 15 : window.pageXOffset + window.innerWidth - 15;
		div.contentmeasure = div.offsetWidth;
		if (windowedge - div.x - obj.offsetWidth < div.contentmeasure) edgeoffset = div.contentmeasure + obj.offsetWidth;
	}
	else {
		var topedge = ie4 && !window.opera ? ieCompatTest().scrollTop : window.pageYOffset;
		var windowedge = ie4 && !window.opera ? ieCompatTest().scrollTop + ieCompatTest().clientHeight - 15 : window.pageYOffset + window.innerHeight - 18;
		div.contentmeasure = div.offsetHeight;
		if (windowedge - div.y < div.contentmeasure) { //move menu up?
			edgeoffset = div.contentmeasure - obj.offsetHeight;
			if ((div.y - topedge) < div.contentmeasure) //up no good either? (position at top of viewable window then)
			edgeoffset = div.y;
		}
	}
	
	return edgeoffset;

}
