/****************************************************************************************************/
/***************************************** IMPORTANTE *********************************************/
/****************************************************************************************************/
/* Siempre que se utilizen estas librerias en proyectos .NET con paginas aspx hay que tener cuidado */
/* de no poner acentos ni en los comentarios de las librerias ni en los posibles alert que pongamos */
/* en ellas, ya que no funcionarian en Netscape.                                                    */
/****************************************************************************************************/


/* 
* @importante.
* Tipo 2: 
* ('pref' + numero de la opcion) --> El id del TD.  
*
* Ejemplo tipo2:
* <td id="menuTd1" width="155" height="15" align="right" bgcolor="#EAEAEA" class="verdana11normalgrismenu" 
* onClick="menu.accionMenu(1,'click','lasbizarricas.htm','contenidoint');" onMouseOver="menu.accionMenu(1,'over');" 
* onMouseOut="menu.accionMenu(1,'out');" >Las Bizarricas&nbsp;</td>
*
* Tipo 3: 
* ('pref' + numero de la opcion) --> El id de la imagen.  
* ('pref' + numero de la opcion + 'off.gif') --> Primer estado de la imagen.
* ('pref' + numero de la opcion + 'on.gif') --> Segundo estado de la imagen.
* Ejemplo tipo3:
* <a href="pagina" target="frame" onClick="Menu.accionMenu(2,'click');" 
* onMouseOver="Menu.accionMenu(2,'over');" onMouseOut="Menu.accionMenu(2,'out');">
* <img src="img/opc2off.gif" name="opc2" width="95" height="24" border="0" id="opc2"></a>
*
* Metodos disponibles para sobreescribir:
* endClick(pNum,pAccion,pHref,pTarget)
* endRemote(pNum,pAccion,pHref,pTarget)
*
*/
function Menu(pref,colorTxt1,colorTxt2,colorTd2,pListProp) { 
	// Atributos.
	this.pref = pref;
	this.listProp = (pListProp)?pListProp:new Array();
	// Obtenemos el numero de opciones del menu.
	var fin = false;
	var cont = 1;
	while(!fin){
		if(document.getElementById(pref + cont)) cont++;
		else fin = true
	}
	
	this.num = --cont;
	this.stoRetardo = null
	this.numIdObjActivo = null;
	// Indica si se desactiva la opcion del menu una vez pulsado.
	this.siempreActivo = false;
	
	// Opcional.
	this.depurado = 0;
	
	if(colorTxt2){
		if(colorTd2){
			this.tipo = 2; // TD.
		}else{
			this.tipo = 1; // TEXTO.
		}
	}else{
		this.tipo = 3; // IMAGEN
	}	
	
	if(this.depurado) window.status = "Menu::tipo: " + this.tipo;		
	
	
	// Iniciacion en funcion del tipo de menu seleccionado.
	switch (this.tipo){ 
	   case 2 :	   
			objLink = document.getElementById(pref + this.num);
			if(objLink){this.colorTd1 = objLink.bgColor;};	
			if(this.depurado) alert("Menu::colorTd1: " + this.colorTd1);
			this.colorTd2 = colorTd2;   		
	   case 1 : 
			this.colorTxt1 = colorTxt1;
			this.colorTxt2 = colorTxt2;
	   		break
	   case 3 : 
			// Precarga de imagenes.	   
			for(i=1;i<=this.num;i++){
				eval("this." + pref + i + "on = new Image();");
				eval("this." + pref + i + "on.src =\"img/" + pref + i + "on.gif\";");
				eval("this." + pref + i + "off = new Image();");
				eval("this." + pref + i + "off.src =\"img/" + pref + i + "off.gif\";");
			}	   		
	   		break	   			   		
	}	
	
	this.obj = pref + "_MenuGT";
	eval(this.obj + " = this;");	
	return this
}

Menu.prototype.toCamelCase = function(sInput) {
    var oStringList = sInput.split('-');
    if(oStringList.length == 1)    
        return oStringList[0];
    var ret = sInput.indexOf("-") == 0 ? 
    	oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) : oStringList[0];
    for(var i = 1, len = oStringList.length; i < len; i++){
        var s = oStringList[i];
        ret += s.charAt(0).toUpperCase() + s.substring(1)
    }
    return ret;
}

Menu.prototype.setStyle = function(idObj,pProp,pValue) {
	objLink = document.getElementById(idObj);
	if (objLink){
		objLink.style[this.toCamelCase(pProp)] = pValue;	
	}
}

Menu.prototype.getStyle = function(idObj,pProp){
	objLink = document.getElementById(idObj);
	if (window.getComputedStyle)
		var y = window.getComputedStyle(objLink,null).getPropertyValue(pProp);
	else if (objLink.currentStyle)
		var y = eval('objLink.currentStyle.' + pProp);
	return y;
}

Menu.prototype.cambiarPropiedad = function(pIdObj,pEstado){
	objLink = document.getElementById(pIdObj);
	if(objLink)
		for(var i=0;i<this.listProp.length;i++)
		{
			var tmpProp = this.listProp[i].split("|");
			this.setStyle(pIdObj,tmpProp[0],tmpProp[pEstado + 1]);
		}
}

Menu.prototype.cambiarImagen = function(pIdObj, pEstado){
	if(pEstado) var rutaIMG = eval("this." + pIdObj + "on.src") 
	else var rutaIMG = eval("this." + pIdObj + "off.src");
	objLink = document.getElementById(pIdObj);
	if(objLink){objLink.src = rutaIMG;};
}

Menu.prototype.cambiarColor = function(pIdObj, pColor){
	objLink = document.getElementById(pIdObj);
	if(objLink){objLink.style['color'] = pColor;};
}

Menu.prototype.cambiarColorFondo = function(pIdObj, pColor, pCursor){
	objLink = document.getElementById(pIdObj);
	if(objLink){
		if(pColor) objLink.bgColor=pColor;
		objLink.style.cursor = pCursor;
	}
}

Menu.prototype.cambiarCursor = function(pIdObj, pCursor){
	objLink = document.getElementById(pIdObj);
	if(objLink){
		objLink.style.cursor = pCursor;
	}
}

// Metodos para sobreescribir click y remote
Menu.prototype.endOver = function(pNum,pHref,pTarget) {
}

Menu.prototype.endOut = function(pNum,pHref,pTarget) {
}

Menu.prototype.endClick = function(pNum,pHref,pTarget) {
}

Menu.prototype.endRemote = function(pNum,pHref,pTarget) {
}

// Funcion que actua en funcion de la accion recibida por el menu.
Menu.prototype.accionMenu = function(pNum,pAccion,pHref,pTarget) {
	var idObj = this.pref + pNum;

	switch (pAccion){ 
	   case "over" : 
		if (this.numIdObjActivo != idObj){
			if(this.tipo == 3) window.setTimeout(this.obj+".cambiarImagen('" + idObj + "',1)",10);
		  	if(this.tipo == 2) window.setTimeout(this.obj+".cambiarColorFondo('"+idObj+"','" + this.colorTd2 + "','hand')",10);	   		
		  	if(this.tipo == 1 || this.tipo == 2){
				window.setTimeout(this.obj+".cambiarColor('" + idObj + "','" + this.colorTxt2 + "')",10);
				window.setTimeout(this.obj+".cambiarPropiedad('" + idObj + "',1)",10);
			}
		  	this.endOver(pNum,pHref,pTarget);
		}else if(this.siempreActivo){
			window.setTimeout(this.obj+".cambiarCursor('"+idObj+"','hand')",10);
			this.endOver(pNum,pHref,pTarget);
		}
	   break; 
	   case "out" : 
	   	if (this.numIdObjActivo != idObj){
   			if(this.tipo == 3) window.setTimeout(this.obj+".cambiarImagen('" + idObj + "',0)",10);
			if(this.tipo == 2) window.setTimeout(this.obj+".cambiarColorFondo('" + idObj + "','" + this.colorTd1 + "','default')",10);	   		
			if(this.tipo == 1 || this.tipo == 2){
				window.setTimeout(this.obj+".cambiarColor('" + idObj + "','" + this.colorTxt1 + "')",10);
				window.setTimeout(this.obj+".cambiarPropiedad('" + idObj + "',0)",10);
			}
			this.endOut(pNum,pHref,pTarget);
		}else if(this.siempreActivo){
			window.setTimeout(this.obj+".cambiarCursor('"+idObj+"','default')",10);
			this.endOut(pNum,pHref,pTarget);
		}
	   break; 
	   case "click" : 
	   		if(this.depurado) alert("Menu::click: " + idObj);
	      	if (this.numIdObjActivo != idObj && this.numIdObjActivo!=null){
	      		if(!this.stoRetardo){
	      			// Temporizacion de retardo entre pulsaciones.
		      		this.stoRetardo = true;
		      		window.setTimeout(this.obj+".stoRetardo = false",500);
		      				      		
		      		if(this.tipo == 3) window.setTimeout(this.obj+".cambiarImagen('" + this.numIdObjActivo + "',0)",10);	      	
			      	if(this.tipo == 2) window.setTimeout(this.obj+".cambiarColorFondo('"+this.numIdObjActivo+"','" + this.colorTd1 + "','default')",10);
			      	if(this.tipo == 1 || this.tipo == 2){
						window.setTimeout(this.obj+".cambiarColor('"+this.numIdObjActivo+"','" + this.colorTxt1 + "')",10);
						window.setTimeout(this.obj+".cambiarPropiedad('" + this.numIdObjActivo + "',0)",10);
					}
			      	
			      	// Cargamos la pagina indicada.
			      	if(this.tipo == 2 && pHref && pTarget) eval("parent." + pTarget + ".document.location.href='" + pHref + "';");
					this.endClick(pNum,pHref,pTarget)			      	
					this.numIdObjActivo = idObj;
	      		}	      		
	      	}else if(this.numIdObjActivo==null){
	      				if(this.tipo == 2 && pHref && pTarget) eval("parent." + pTarget + ".document.location.href='" + pHref + "';");
	      				this.endClick(pNum,pHref,pTarget)
	      				this.numIdObjActivo = idObj;
				}else if(this.siempreActivo && this.tipo == 2 && pHref && pTarget) eval("parent." + pTarget + ".document.location.href='" + pHref + "';");
	      	break; 
	   case "remote" : 
	   		if(this.depurado) alert("Menu::remote: " + idObj);
	      	if (this.numIdObjActivo != idObj && this.numIdObjActivo != null){
	      		if(this.tipo == 3) window.setTimeout(this.obj+".cambiarImagen('" + this.numIdObjActivo + "',0)",10);	
		      	if(this.tipo == 2) window.setTimeout(this.obj+".cambiarColorFondo('" + this.numIdObjActivo + "','" + this.colorTd1 + "','default')",10);
		      	if(this.tipo == 1 || this.tipo == 2){
					window.setTimeout(this.obj+".cambiarColor('" + this.numIdObjActivo + "','" + this.colorTxt1 + "')",10);
					window.setTimeout(this.obj+".cambiarPropiedad('" + this.numIdObjActivo + "',0)",10);
				}
	      	}
	      	
	      	if(pNum){
	      		if(this.tipo == 3) window.setTimeout(this.obj+".cambiarImagen('" + idObj + "',1)",10);
		      	if(this.tipo == 2) window.setTimeout(this.obj+".cambiarColorFondo('" + idObj + "','" + this.colorTd2 + "','default')",10);
		      	if(this.tipo == 1 || this.tipo == 2){
					window.setTimeout(this.obj+".cambiarColor('" + idObj + "','" + this.colorTxt2 + "')",10);
					window.setTimeout(this.obj+".cambiarPropiedad('" + idObj + "',1)",10);
				}
				this.numIdObjActivo = idObj;		
      		}else{
				this.numIdObjActivo = null;
      		}
			this.endRemote(pNum,pHref,pTarget)
	      	break; 	      	
	} 
}     