var sPath; function cMenu (oParPadre, sParNombre, sParID, sParIDCapaPadre, sParImagen, sParEnlace, sParTarget, nParDX, nParAlto, nParEspaciado, sParAlignment, nParTipo, bParAutoClose, bParNoPlegar, nParPausa, asParBGColor, asParColor, sParFontFamily, sParFontSize, sParTextDecoration, sParFontWeight, sParFontStyle) { this.oRaiz = ( oParPadre == null ) ? this : oParPadre.oRaiz; this.oPadre = oParPadre; this.sNombre = sParNombre; this.sImagen = (sParImagen == null) ? "" : sParImagen; this.sID = sParID; var sIDCapa = (sParIDCapaPadre == null) ? sParID : sParIDCapaPadre; sIDCapa = (oNavegador.bEsNS4) ? (sIDCapa + ".document." + sParID) : sParID; this.oCapa = new cLayer (sIDCapa); this.sLinkID = "L" + sParID; this.oLink = new cLayer (this.sLinkID); this.sEnlace = (sParEnlace == null) ? '' : sParEnlace; this.sTarget = (sParTarget == null) ? '' : sParTarget; this.nDX = (nParDX == null) ? ((this.oPadre == null) ? 10 : this.oPadre.nDX) : nParDX; this.nAlto = (nParAlto == null) ? ((this.oPadre == null) ? 16 : this.oPadre.nAlto) : nParAlto; this.nEspaciado = (nParEspaciado == null) ? ((this.oPadre == null) ? 1 : this.oPadre.nParEspaciado) : nParEspaciado; this.sAlignment = (sParAlignment == null) ? 'left' : sParAlignment; this.nTipo = (nParTipo == null) ? ((this.oPadre == null) ? nMENU_TIPO_NORMAL : this.oPadre.nTipo) : nParTipo; this.bAutoClose = (bParAutoClose == null) ? ((this.oPadre == null) ? true : this.oPadre.bAutoClose) : bParAutoClose; this.bNoPlegar = (bParNoPlegar == null) ? ((this.oPadre == null) ? false : this.oPadre.bNoPlegar) : bParNoPlegar; this.nPausa = (nParPausa == null) ? ((this.oPadre == null) ? 0 : this.oPadre.nPausa ) : nParPausa; this.asBGColor = (asParBGColor==null) ? ((this.oPadre == null) ? ["#FFFFFF","#FFFFFF","#FFFFFF"] : this.oPadre.asBGColor) : asParBGColor; this.asColor = (asParColor == null) ? ((this.oPadre == null) ? ["#000000","#000000","#000000"] : this.oPadre.asColor) : asParColor; this.sFontFamily = "font-family:" + ( (sParFontFamily == null || sParFontFamily == '') ? "Verdana" : sParFontFamily ) + "; "; this.nFontSize = parseInt ((sParFontSize == null || sParFontSize == '') ? "11px" : sParFontSize); this.sFontSize = "font-size:" + this.nFontSize + "px" + "; "; this.sTextDecoration = "text-decoration:" + ( (sParTextDecoration == null || sParTextDecoration == '') ? "none" : sParTextDecoration) + "; "; this.sFontWeight = (sParFontWeight == null || sParFontWeight == '') ? "" : ("font-weight:" + sParFontWeight + "; "); this.sFontStyle = (sParFontStyle == null || sParFontStyle == '') ? "" : ("font-style:" + sParFontStyle + "; "); this.aoHijos = new Array (); if (this.oPadre != null) { aH = this.oPadre.aoHijos; this.nHijoNumero = aH.length; aH[aH.length] = this; } this.bExpandido = false; this.nEstado = 0; for (i = 0, Padre = this.oPadre; Padre != null; i++, Padre = Padre.oPadre) ; this.nNivel = i - 1; this.oActual = null; this.mouseOver = cMenu_MouseOver; this.mouseOut = cMenu_MouseOut; this.mouseDown = cMenu_MouseDown; this.mostrar = cMenu_mostrar; this.ocultar = cMenu_ocultar; this.contraer = cMenu_contraer; this.expandir = cMenu_expandir; this.contraerHermanoExpandido = cMenu_contraerHermanoExpandido; this.aoPreOrden = cMenu_aoPreOrden; this.aoSubArbolDebajo = cMenu_aoSubArbolDebajo; this.aoSubArbolDentro = cMenu_aoSubArbolDentro; this.sGenerar = cMenu_sGenerar; this.write = cMenu_write; } function cMenu_MouseDown () { if (this.aoHijos.length == 0) { if (this.bAutoClose) this.contraerHermanoExpandido(); if (this.oRaiz.oActual) { this.oRaiz.oActual.nEstado = 1; this.oRaiz.oActual.mouseOut(); } this.oCapa.SetBGColor (this.asBGColor[2]); this.oCapa.SetColor (this.asColor[2]); if (this.oLink) { this.oLink.SetBGColor (this.asBGColor[2]); this.oLink.SetColor (this.asColor[2]); } this.nEstado = 2; this.oRaiz.oActual = this; sPath = sCalcularPath (this); } else if (this.bExpandido) { if (! this.bNoPlegar) this.contraer(); } else { if (this.bAutoClose) this.contraerHermanoExpandido(); this.expandir(); } } function cMenu_MouseOver () { if (this.nEstado == 0) { if (this.oCapa) { this.oCapa.SetBGColor (this.asBGColor[1]); this.oCapa.SetColor (this.asColor[1]); } if (this.oLink) { this.oLink.SetBGColor (this.asBGColor[1]); this.oLink.SetColor (this.asColor[1]); } this.nEstado = 1; } } function cMenu_MouseOut () { if (this.nEstado == 1) { if (this.oCapa) { this.oCapa.SetBGColor (this.asBGColor[0]); this.oCapa.SetColor (this.asColor[0]); } if (this.oLink) { this.oLink.SetBGColor (this.asBGColor[0]); this.oLink.SetColor (this.asColor[0]); } this.nEstado = 0; } } function cMenu_aoPreOrden (bParSoloExpandidos) { var r = new Array; r[0] = this; var bSoloExpandidos = (bParSoloExpandidos == null) ? false : bParSoloExpandidos; if (! bSoloExpandidos || this.bExpandido) for (var i=0; i < this.aoHijos.length; i++) r = r.concat (this.aoHijos[i].aoPreOrden (bSoloExpandidos)) return r; } function cMenu_aoSubArbolDebajo () { var aoArbol = this.oRaiz.aoPreOrden (true); var bEncontrado = false; var aoRet = new Array(); var k = 0; for (var i=0; i < aoArbol.length; i++) { if (aoArbol [i].sNombre == this.sNombre) { bEncontrado = true; continue; } if (bEncontrado) aoRet [k++] = aoArbol [i]; } return aoRet; } function cMenu_aoSubArbolDentro () { var aoArbolDentro = this.aoPreOrden (true); return aoArbolDentro.slice(1); } function nTopSiguiente (p, h, i) { return p.oCapa.nGetTop() + p.nAlto + p.nEspaciado + ( h.nAlto + h.nEspaciado ) * i; } function cMenu_expandir () { var nTop = this.oCapa.nGetTop() + this.nAlto + this.nEspaciado; var aoArbolDebajo = this.aoSubArbolDebajo(); // Nodos debajo de este this.bExpandido = true; var aoArbolDentro = this.aoSubArbolDentro(); // Nodos dentro de este if (this.nTipo == nMENU_TIPO_NORMAL) { for (var i = 0; i < aoArbolDentro.length; i++) { aoArbolDentro[i].mostrar (nTop); // pausa(this.nPausa); nDY = aoArbolDentro[i].nAlto + aoArbolDentro[i].nEspaciado; for (var k = 0; k < aoArbolDebajo.length; k++ ) { aoArbolDebajo[k].oCapa.MoveDown (nDY); // pausa(this.nPausa); } nTop += nDY; } } else if (this.nTipo == nMENU_TIPO_SMOOTH) { for (var i = 0; i < aoArbolDentro.length; i++) { pausa (this.nPausa / aoArbolDentro.length); setTimeout (aoArbolDentro[i].sID + ".mostrar (nTopSiguiente(" + this.sID + ", " + aoArbolDentro[i].sID + ", " + i + "))", this.nPausa); nDY = aoArbolDentro[i].nAlto + aoArbolDentro[i].nEspaciado; for (var k = 0; k < aoArbolDebajo.length; k++ ) { setTimeout (aoArbolDebajo[k].sID + ".oCapa.MoveDown (nDY);", this.nPausa); } nTop += nDY; } } } function cMenu_mostrar (nParTop) { var nLeft = ((this.oPadre == null) ? 0 : this.oPadre.oCapa.nGetLeft()); var nTop = (nParTop == null) ? ((this.oPadre == null) ? 0 : this.oPadre.oCapa.nGetTop()) : nParTop; this.mouseOver(); this.mouseOut(); this.oCapa.MoveTo (nLeft, nTop); this.oCapa.Show(); } function cMenu_contraer () { var aoArbolDentro = this.aoSubArbolDentro(); // Nodos dentro de este this.bExpandido = false; var aoArbolDebajo = this.aoSubArbolDebajo(); // Nodos debajo de este if (this.nTipo == nMENU_TIPO_NORMAL) { for (var i = aoArbolDentro.length - 1; i >= 0; i--) { nDY = aoArbolDentro[i].nAlto + aoArbolDentro[i].nEspaciado; for (var k = aoArbolDebajo.length - 1; k >= 0; k--) { aoArbolDebajo[k].oCapa.MoveUp (nDY); // pausa(this.nPausa); } aoArbolDentro[i].ocultar(); // pausa(this.nPausa); } } else if (this.nTipo == nMENU_TIPO_SMOOTH) { for (var i = aoArbolDentro.length - 1; i >= 0; i--) { pausa (this.nPausa / aoArbolDentro.length); setTimeout (aoArbolDentro[i].sID + ".ocultar();", this.nPausa); nDY = aoArbolDentro[i].nAlto + aoArbolDentro[i].nEspaciado; for (var k = 0; k < aoArbolDebajo.length; k++) { setTimeout (aoArbolDebajo[k].sID + ".oCapa.MoveUp (nDY);", this.nPausa); } } } } function cMenu_contraerHermanoExpandido () { if (this.oPadre != null) for (var i = 0; i < this.oPadre.aoHijos.length; i++) { oHijo = this.oPadre.aoHijos[i]; if (oHijo != this && oHijo.bExpandido) { oHijo.contraer(); break; } } } function cMenu_ocultar () { this.oCapa.Hide(); if (this.bExpandido) { for (var i=0; i < this.aoHijos.length; i++) { this.aoHijos[i].ocultar(); } } } function cMenu_sGenerar (nParX, nParY) { sID = " id='" + this.sID + "'"; sNivel = (this.nNivel > 2) ? 2 : this.nNivel; sMouseDown = "window." + this.sID + ".mouseDown()"; sMouseOver = "window." + this.sID + ".mouseOver()"; sMouseOut = "window." + this.sID + ".mouseOut()"; sClase = oNavegador.bEsNS4 ? "" : " class='Nivel" + sNivel + "'"; sEstilo = " style='position:absolute; visibility:hidden; margin:0px; padding:0px;'"; sClaseEnlace = " class='Enlace" + sNivel + "'"; nLH = oNavegador.bEsNS4 ? (2 * this.nAlto / 3 + 1) : this.nAlto; nImgWidth = 13; nImgHeight = 13; nImgX = 10; nImgY = (nLH - nImgHeight) / 2; nDxImgTxt = 6; nPaddingLeft = (this.sImagen == "") ? nParX : (nParX + nImgWidth + nDxImgTxt); nPaddingRight = nParX; sPadding = (this.sAlignment == 'left') ? "padding-left:" + nPaddingLeft + "px; " : "padding-right:" + nPaddingRight + "px; "; sEstiloEnlace = " style='line-height:" + nLH + "px; " + sPadding + this.sTextDecoration + this.sFontStyle + this.sFontWeight + this.sFontFamily + this.sFontSize + "color:" + this.asColor[0] + ";' "; sHRef = (this.sEnlace == "null") ? "javascript:void(null)" : this.sEnlace; sLink = "id='" + this.sLinkID + "' title='' href='" + sHRef + "' " + sEstiloEnlace + "onmouseup='" + sMouseDown + "' onmouseover='" + sMouseOver + "' " + "onmouseout='" + sMouseOut + "'" + sClaseEnlace sImagen = (this.sImagen == "") ? "" : ""; //style='position:absolute; left:" + nImgX + "px; top:" + nImgY + "px'; width:" + nImgWidth + "px; height:" + nImgHeight + "px sNombre = this.sNombre; sTarget = (this.sTarget == "") ? "" : " TARGET=" + this.sTarget; sEnlace = "" + "
" + sImagen + "
" + sNombre + "
" var s = "" + sEnlace + ""; for (var i = 0; i < this.aoHijos.length; i++) { s += this.aoHijos[i].sGenerar (nParX + this.aoHijos[i].nDX, nParY + this.aoHijos[i].nAlto); } return s; } function cMenu_write (oParCapa) { sHTML = this.sGenerar (0, 0); oParCapa.Write (sHTML); } function sRepeat (sParCadena, nVeces) { var sRet = ""; for (var i = 0; i < nVeces; i++) sRet += sParCadena; return sRet; } function pausa (ms) { f1 = new Date (); while (true) { f2 = new Date(); if (f2 - f1 > ms) break; } } var nMENU_TIPO_NORMAL = 1; var nMENU_TIPO_SMOOTH = 2; function sCalcularPath (o) { var s = ""; for (var p = o; p != o.Raiz; p = p.oPadre) s += p.sNombre + " > "; s = s.substring (0, s.length - 2); s = s.split (" > ").reverse().join (" > ").substr(s.split (" > ").reverse().join (" > ").indexOf('>') -2) return s }