var ManejadorEventos = Class.create();
ManejadorEventos.prototype  = {
	initialize: function(objeto,metodo,evento){
		//Inserto al objeto su evento
		objeto.onclick = this.formatearListas.bindAsEventListener(objeto);
	},
	formatearListas: function () {
		new MostrarOpcion(this,"selected", "normal");
	}
}
var crearObjetos = Class.create();
crearObjetos.prototype  = {
	//Defino el array de elementos en donde ire alamcenando las opciones que vaya abriendo.
	opcionesAbiertas: new Array(),
	//Inicializo la funcion
	initialize: function(obj,claseSelected,claseNormal){
		//Guardo el elemento LI clicado
		if (OpcionesSeleccionadas){
			this.opcionesAbiertas.push(OpcionesSeleccionadas);
			OpcionesSeleccionadas = false;
		}
		this.element = obj;
		this.claseSelected = claseSelected;
		this.claseNormal = claseNormal;
		this.elementLI = 	obj.parentNode;
		this.elementOL = 	this.elementLI.parentNode;
		this.element.className = this.claseSelected;
		this.formateaOpcion();	
	}
}
var MostrarOpcion = Class.create();
MostrarOpcion.prototype  = Object.extend(
Object.extend({},crearObjetos.prototype), 
{
	formateaOpcion: function() {
		/* 	
			1.- Compruebo si el nodo clicado se ha clicado anteriormente para asi ocultarlo:buscarElementoAbierto()
			2.-En buscarElementoAbierto, recorro el array de elementos clicados y si se encuentra mi elemento clicado todas sus posiciones del array inferiorres
			     las hago display none y borro lodos los elementos siguientes del array
			3.- Si no esta clicado, compruebo si hay un nodo hermano clicado y abierto: buscarElementoAbierto() y muestro mi elemento
		*/
		this.opcionMostarElemento = true;
		this.ElementoABuscar = undefined;
		//Compruebo si el array de opciones abiertas esta inicializado, si no lo esta inserto el primer valor
		if(this.opcionesAbiertas.length < 1){
				this.mostrarElemento();
		}
		else{
			if(InsertarOpciones){
				InsertarOpciones = false;
				this.ElementoABuscar = this.elementLI;
				this.buscarElementoAbierto()
				if (this.opcionMostarElemento == true) {
					for (z = 0; z < this.elementOL.childNodes.length;z++){
						this.ElementoABuscar = this.elementOL.childNodes[z];
						this.buscarElementoAbierto();
						if (this.opcionMostarElemento != true)
							break;
					}
					this.mostrarElemento();
				}
				this.opcionesAbiertas = new Array()
			
			}
			else{	
				this.ElementoABuscar = this.elementLI;
				
				this.buscarElementoAbierto()

				if (this.opcionMostarElemento == true) {
					for (z = 0; z < this.elementOL.childNodes.length;z++){
						this.ElementoABuscar = this.elementOL.childNodes[z];
						this.buscarElementoAbierto();
						if (this.opcionMostarElemento != true)
							break;
					}
					this.mostrarElemento();
				}
			}
		}	
	},
	buscarElementoAbierto: function () {
		this.contador = 0;
		for (i = 0; i < this.opcionesAbiertas.length;i++){
			if(this.ElementoABuscar == this.opcionesAbiertas[i]){
				this.opcionMostarElemento = false;
				break;
			}
			this.contador++;
		}
		if (this.opcionMostarElemento == false){
				this.ocultarElemento();
		}
	},
	mostrarElemento: function() {
		//Compruebo si tiene hijos ol que mostrar
		
		if(this.opcionesAbiertas.length > 0) {
			this.opcionesAbiertas[0].className = this.claseNormal;
		}

		if(this.elementLI.getElementsByTagName("ol").length > 0){

			this.elementLI.getElementsByTagName("ol")[0].style.display="block";
	
		}
		this.opcionesAbiertas.push(this.elementLI);
	},
	ocultarElemento: function() {
		for (i = this.contador; i <this.opcionesAbiertas.length;i++){
			if(this.opcionesAbiertas[i].getElementsByTagName("ol").length < 1){
				this.opcionesAbiertas[i].getElementsByTagName("a")[0].className = this.claseNormal;
				//this.opcionesAbiertas[i].getElementsByTagName("ol")[0].parentNode.childNodes[0].className = this.claseNormal;
			}
			else{
	
				this.opcionesAbiertas[i].getElementsByTagName("ol")[0].parentNode.childNodes[0].className = this.claseNormal;

				this.opcionesAbiertas[i].getElementsByTagName("ol")[0].style.display="none";
				if(subOpcionesSeleccionadas){
					subOpcionesSeleccionadas.className = this.claseNormal;
				}

			}
				
		}
		this.opcionesAbiertas.splice(this.contador,this.opcionesAbiertas.length);
	}
})
function AsignarComportamiento () {
	//$A es para convertir una coleccion de objetos en un array para recorrelo con el each
	
	var arrAHREF = $A($("menu").getElementsByTagName("A"));
	//Creo la clase en la que asignare el manejador del evento
	
	arrAHREF.each( function(Listas){
			//Llamo a cada uno con su manejador de eventos
			new ManejadorEventos(Listas);
		});
	
}



var creadorMenu = Class.create();
creadorMenu.prototype  = {
	opcionesSeleccionadas:null,
	initialize: function (paramOpcionesSeleccionadas) {
		this.opcionesSeleccionadas = paramOpcionesSeleccionadas;	
		this.seleccionarOpcionMenu();	
	},
	seleccionarOpcionMenu:function() {
		if(this.opcionesSeleccionadas){
			for (x = 0; x < this.opcionesSeleccionadas.length;x++){
				if(x == 0){
					if(document.getElementById(this.opcionesSeleccionadas[x]).parentNode.getElementsByTagName("ol").length > 0){
						document.getElementById(this.opcionesSeleccionadas[x]).className='selected';
						//Inserto en la variable global "OpcionesSeleccionadas" el valor de la lista que he  hecho visible
						OpcionesSeleccionadas = document.getElementById(this.opcionesSeleccionadas[x]).parentNode.getElementsByTagName("ol")[0].parentNode

						document.getElementById(this.opcionesSeleccionadas[x]).parentNode.getElementsByTagName("ol")[0].style.display='block'
					}else{
						if(x == 0){
							OpcionesSeleccionadas = document.getElementById(this.opcionesSeleccionadas[x])
							
							
						}
						document.getElementById(this.opcionesSeleccionadas[x]).className = "selected";					
					}
				}
				else{
					
					document.getElementById(this.opcionesSeleccionadas[x]).className='selected';
					subOpcionesSeleccionadas = document.getElementById(this.opcionesSeleccionadas[x]);
				}
			}
		}
	}
}
//Variable global para leer las opciones que estan seleccionadas desde el inicio
var OpcionesSeleccionadas;
var subOpcionesSeleccionadas;
var InsertarOpciones = true;

function constructorMenu() {
			var opcion = document.location.href.indexOf(".php");
			var listaSeleccionada = document.location.href.charAt((opcion-4))
			var listaSeleccionada2 = document.location.href.charAt((opcion-1))

			if (!isNaN(parseInt(listaSeleccionada))){
					var opcionLista = "m"+listaSeleccionada;

					var opcionLista2 = "m"+""+listaSeleccionada+""+listaSeleccionada2;
					var opciones = [opcionLista,opcionLista2];
					new creadorMenu(opciones);
			}
			AsignarComportamiento();
			

}
addOnLoad(constructorMenu);

// checkEmail


function checkeMail (emailStr) {
  var emailPat=/^(.+)@(.+)$/
  var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
  var validChars="\[^\\s" + specialChars + "\]"
  var quotedUser="(\"[^\"]*\")"
  var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
  var atom=validChars + '+'
  var word="(" + atom + "|" + quotedUser + ")"
  var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
  var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
  var matchArray=emailStr.match(emailPat)
  if (matchArray==null) {
    alert("La dirección de correo no es correcta (mira @ y .")
    return false
  }
  var user=matchArray[1]
  var domain=matchArray[2]
  if (user.match(userPat)==null) {
    alert("El destinatario no es correcto.")
    return false
  }
  var IPArray=domain.match(ipDomainPat)
  if (IPArray!=null) {
    for (var i=1;i<=4;i++) {
      if (IPArray[i]>255) {
          alert("La dirección IP no es correcta")
    return false
      }
    }
    return true
  }
  var domainArray=domain.match(domainPat)
  if (domainArray==null) {
    alert("El dominio no es válido.")
    return false
  }
  var atomPat=new RegExp(atom,"g")
  var domArr=domain.match(atomPat)
  var len=domArr.length
  if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   alert("La dirección debe acabar con un dominio de 3 letras o un país de 2 letras.")
   return false
  }
  if (len<2) {
   var errStr="Falta el nombre del servidor"
   alert(errStr)
   return false
  }
  return true;
}

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function centrarCapa(obj) { 
    an=parseInt(document.getElementById(obj).style.width); 
    x=(document.body.clientWidth-an)/2; 
    document.getElementById(obj).style.left=x; 
} 
