var ControlMenu = Class.create({
	initialize : function() {
		this.hojaN2Actual = this.hojaN2 + " " + this.actual;
		this.actualDeSegundoNivel = "." + this.elemDeSegundoNivel + "." + this.actual;
		this.hojaN2Actual = this.elemDeSegundoNivel + " " + this.actual;
	},
	
	/*Id de la lista raiz del menu*/
	idRaiz : "mi_mapa_0",
	actual : "actual",
	
	/*Elementos con hijos*/
	claseAbiertoT1 : "abiertoMenuIzqN1Mw",
	claseCerradoT1 : "cerradoMenuIzqN1Mw",
	/*Elementos sin hijos*/
	claseAbiertoT2 : "abiertoMenuIzqN1T2Mw",
	claseCerradoT2 : "cerradoMenuIzqN1T2Mw",
	/*hojas segundo nivel*/
	hojaN2 : "elemListaMenuIzqN2Mw",
	
	listaN2 : "ul.listaMenuIzqN2Mw",
	elemDeSegundoNivel: "elemListaMenuIzqN2Mw",

	cerradoAutomatico : function () 
	{
		var raiz =  $(this.idRaiz);
				
		var listas = raiz.select(this.listaN2);
		
		for(var i=0; i < listas.length; i++)
		{		
			listas[i].style.display = "none";			
		}
	},
	
	trataOpcionMapa : function (idActual) 
	{
			
		/*obtengo las clases del elemento llamante*/
		var clasesElemento = $(idActual).classNames();
		
		
		if (clasesElemento.include(this.claseCerradoT1))		
		{		
			/* Si est� cerrado, puede haber otro elemento abierto. Cierro todo y luego cambio  el actual y abro sus hijos.
			*/
			this.cerradoManual();
			this.cambiaClase(idActual, this.claseCerradoT1, this.claseAbiertoT1);
			var hijosParaTratar = $(idActual).up().next(this.listaN2, 0);
			
			hijosParaTratar.setStyle({
				"display" : ""
			});
		}
		else if (clasesElemento.include(this.claseAbiertoT1))
		{
			/*Si est� abierto es que era el actual. Cambio la clase y cierro los hijos*/
			this.cambiaClase(idActual, this.claseAbiertoT1, this.claseCerradoT1);
			var hijosParaTratar = $(idActual).up().next(this.listaN2, 0);
			
			hijosParaTratar.setStyle({
				"display" : "none"
			});
			
		}
		else if (clasesElemento.include(this.claseCerradoT2)) 
		{
			this.cerradoManual();
			this.cambiaClase(idActual, this.claseCerradoT2, this.claseAbiertoT2);
		}
		else if (clasesElemento.include(this.claseAbiertoT2)) 
		{
			/*Si est� abierto es que era el actual. Cambio la clase*/
			this.cambiaClase(idActual, this.claseAbiertoT2, this.claseCerradoT2);
		}	
		else if (clasesElemento.include(this.hojaN2))
		{
			/*hay que ver si algun elemento de esta misma lista estaba marcado*/
			var hijosParaTratar = $(idActual).siblings().each(
				function(e, pos) {
					this.cambiaClase(e.id, this.hojaN2Actual, this.hojaN2);
				},
				this
			);
			/*cambiamos el estado de la hoja actual*/
			this.cambiaClase(idActual, this.hojaN2, this.hojaN2Actual);
		}
		
		
	
	}, 
	
	cerradoManual : function () 
	{
		/*Cerrado de primer nivel*/
		var raiz =  $(this.idRaiz);
		
		/*Cierra listas desplegadas */
		var listas = raiz.select(this.listaN2);		
		for(var i=0; i < listas.length; i++)
		{		
			listas[i].style.display = "none";					
		}
		/* cambio la clase del t�tulo */
		var elementos = raiz.select("."+this.claseAbiertoT1);		
		for(var i=0; i < elementos.length; i++)
		{		
			this.cambiaClase(elementos[i].id, this.claseAbiertoT1, this.claseCerradoT1);			
		}
		
		elementos = raiz.select(this.actualDeSegundoNivel);		
		for(var i=0; i < elementos.length; i++)
		{		
			this.cambiaClase(elementos[i].id, this.hojaN2Actual, this.hojaN2);			
		}
		
		/*Fin de cerrado de primer nivel*/

		/*Cierro los elementos individuales*/
		var elementosSolitarios = raiz.select("."+this.claseAbiertoT2);
		for(var i=0; i < elementosSolitarios.length; i++)
		{	
			this.cambiaClase(elementosSolitarios[i].id, this.claseAbiertoT2, this.claseCerradoT2);
		}
		
	},
	
	cambiaClase : function (id, elimina, anyade)
	{
		$(id).removeClassName(elimina);
		$(id).addClassName(anyade);
	}
	
});
