//Incluir ocmoscap.js, menus.js y global.js
//Incluir estilosmenus.css

var ramaMenus=new Array();
var menusDescartar=new Array();
var idTemp=null;
var espera=500;	//tiempo hasta que el submenú desaparece en ms.
var objMenuPrin=null;

//******************************************************************************
//clase menú
function menu(idCapa,posx,posy,ancho,alinVert,idCapaMenuPadre){
 this.idCapa=idCapa;
 this.estilo="position:absolute;visibility:hidden;z-index:40;";
 this.posx=posx;//entero
 this.posy=posy;//entero
 this.ancho=ancho;
 this.anchoSprdr=2; 
 this.alinVert=alinVert;//booleano
 this.idCapaMenuPadre=idCapaMenuPadre;//entero ("" para el principal)
 if(idCapaMenuPadre=="") this.tipoArbol=false;
 this.elementos=new Array();
 this.submenus=new Array();
 this.nivel=0;
 //métodos
 this.esVisible=esVisible;
 this.oculMosMenu=oculMosMenu;
 this.introElemMenu=introElemMenu;
 this.setAnchoSprdr=setAnchoSprdr;
 this.setTipoArbol=setTipoArbol;
 this.escribirEnDoc=escribirEnDoc;
 //inicializar
}

//clase elemento de menú
function elemMenu(txtElMe,anchoElMe,altoElMe,idMenuPadre,enlace,paramEnlace){
 this.txtElMe=txtElMe;
 this.anchoElMe=anchoElMe;
 this.altoElMe=altoElMe;
 this.idMenuPadre=idMenuPadre;//id menú al que pertenece
 this.enlace=enlace;//url ó id submenú que mostrar
 this.paramEnlace=paramEnlace; //parámetros a pasar en la url. Ej.:?var=5
 this.idElemMenu=id_unico("elem");
 //inicializar
}

//****************************************************
//métodos
function esVisible(){return visible(this.idCapa);}

function oculMosMenu(){
 if(objMenuPrin.tipoArbol && this.nivel!=0 ) OculMosCapaDisplay(this.idCapa);
 else OculMosCapa(this.idCapa); 
}

function introElemMenu(objElemMenu){this.elementos.push(objElemMenu);}

function setAnchoSprdr(ancho){this.anchoSprdr=ancho;}

function setTipoArbol(tipo){this.tipoArbol=tipo;}

function escribirEnDoc(){
 var objMenu,objEL,objEnl,objContEnl,objText,objCaja,esSubmenu,elMeAc;
 var re=/^((?:\.{2}\/)|(?:\w+\/))*\w+\.{1}(?:gif|jpg)$/;
 var nav=new Browser();
 var capaMenu=d.createElement("div"); 
 capaMenu.setAttribute("id",this.idCapa);
 objMenu=d.createElement("ul");//crear lista 
 capaMenu.appendChild(objMenu);
 
 for(var i=0;i<this.elementos.length;i++){
  esSubmenu=false;
	elMeAc=this.elementos[i];//elemento actual
	objEL=d.createElement("li");//crear elemento de lista
	if(this.ancho) objEL.style.width=this.ancho+"px";
	else objEL.style.width=objMenuPrin.ancho+"px";
	objMenu.appendChild(objEL);
  if(!this.alinVert){
	 objEL.setAttribute("className","alin_hor");//IE
   objEL.setAttribute("class","alin_hor");//otros
	}			
	objEnl=d.createElement("a");//crear enlace	
	objEnl.setAttribute("id",elMeAc.idElemMenu);	
	if(elMeAc.enlace=="") objEnl.setAttribute("href","#");
	else{
	 if(cogMenuPorId(elMeAc.enlace,objMenuPrin)!=null){
	  objEnl.setAttribute("href","#");
		esSubmenu=true;
	 }	 
	 if(!esSubmenu){
	  objEnl.setAttribute("href",elMeAc.enlace+elMeAc.paramEnlace);
		if(docActual.indexOf(elMeAc.enlace)!=-1 && !EnMenusDescartar(this)){ //docActual es global -> global.js
		 objEnl.setAttribute("className","doc_actual");//IE
     objEnl.setAttribute("class","doc_actual");//otros
		}
	 }
	}
	if(objMenuPrin.tipoArbol) objEnl.onclick=resolverEnlace;
	else objEnl.onmouseover=resolverEnlace;   //abrir submenú ó cerrar los abiertos
	objEL.appendChild(objEnl);
	if(elMeAc.txtElMe!="-"){
	 if(re.test(elMeAc.txtElMe)){
	  objContEnl=d.createElement("img");							//crear imagen
		objContEnl.setAttribute("src",elMeAc.txtElMe);
		objContEnl.setAttribute("width",elMeAc.anchoElMe);
		objContEnl.setAttribute("height",elMeAc.altoElMe);
	 }
	 else{
	  objCaja=d.createElement("span");
	  objText=d.createTextNode(elMeAc.txtElMe);	//crear el texto
		objCaja.appendChild(objText);
		objContEnl=objCaja;
	 }
	}
	else{
	 objContEnl=d.createElement("span");//crear separador
	 if(this.alinVert) objContEnl.style.width=this.ancho+"px";
	 else objEnl.style.width=this.anchoSprdr+"px";
	 objEnl.setAttribute("className","separador");//IE
   objEnl.setAttribute("class","separador");//otros
	}	
	objEnl.appendChild(objContEnl);
 }
 capaMenu.setAttribute("className","menu");//IE
 capaMenu.setAttribute("class","menu");//otros
 if(!objMenuPrin.tipoArbol) capaMenu.onmouseout=lanzarCerrarMenus;
 if(objMenuPrin.tipoArbol && this.nivel!=0){
  capaMenu.style.cssText="position:static;display:none;";
  cogElemPorId(cogElMePorSubmenu(this.idCapa,objMenuPrin).idElemMenu).parentNode.appendChild(capaMenu);	
 }
 else{   
  capaMenu.style.cssText=this.estilo;
  capaMenu.style.left=this.posx+"px";
  capaMenu.style.top=this.posy+"px";
	d.body.appendChild(capaMenu);
 } 
}

//******************************************************************************
//funciones
function crearMenu(idCapa,posx,posy,ancho,alinVert,idCapaMenuPadre){
 var nuevoMenu=new menu(idCapa,posx,posy,ancho,alinVert,idCapaMenuPadre);
 if(idCapaMenuPadre==""){
  objMenuPrin=nuevoMenu;
	ramaMenus[0]=nuevoMenu;	
 }
 else{
  var menuPadre=cogMenuPorId(idCapaMenuPadre,objMenuPrin);
  menuPadre.submenus.push(nuevoMenu);
	var nivel=1;	
	while((menuPadre=cogMenuPorId(menuPadre.idCapaMenuPadre,objMenuPrin))!=null) nivel++;
	nuevoMenu.nivel=nivel;
 } 
 return nuevoMenu;
}

function crearElemMenu(txtElMe,anchoElMe,altoElMe,idMenuPadre,enlace,paramEnlace){
 var objElemMenu=new elemMenu(txtElMe,anchoElMe,altoElMe,idMenuPadre,enlace,paramEnlace); 
 cogMenuPorId(idMenuPadre,objMenuPrin).introElemMenu(objElemMenu); 
 return objElemMenu;
}

function escribirMenus(){
 var objMenu;
 if(escribirMenus.arguments.length==0) objMenu=objMenuPrin;
 else objMenu=escribirMenus.arguments[0];
 objMenu.escribirEnDoc();
 if(objMenu.nivel==0) objMenu.oculMosMenu();
 for(var i=0;i<objMenu.submenus.length;i++) escribirMenus(objMenu.submenus[i]); 
}

function cerrarMenusPunta(ind){
 idTemp=null;
 for(var i=ind+1;i<ramaMenus.length;i++){
	ramaMenus[i].oculMosMenu();	
 }
 ramaMenus.length=ind+1;
}

function cerrarMenus(){ 
 cerrarMenusPunta(0);
}

function cogMenuPorId(idCapaMenu,objMenu){
 if(idCapaMenu=="") return null;
 var refObjMenu=null;
 if(objMenu.idCapa==idCapaMenu) refObjMenu=objMenu;
 else{
  for(var i=0;i<objMenu.submenus.length;i++){
	 if((refObjMenu=cogMenuPorId(idCapaMenu,objMenu.submenus[i]))!=null) break;
	}
 } 
 return refObjMenu;
}

function cogElMePorId(idElemMenu,objMenu){
 var elMe=null;
 for(var i=0;i<objMenu.elementos.length;i++){
  if(objMenu.elementos[i].idElemMenu==idElemMenu){
	 elMe=objMenu.elementos[i];
	 break;
	}
 }
 if(elMe==null){
  for(var k=0;k<objMenu.submenus.length;k++){
	 if((elMe=cogElMePorId(idElemMenu,objMenu.submenus[k]))!=null) break;
	}
 }
 return elMe;
}

function cogElMePorSubmenu(idCapaMenu,objMenu){
 var elMe=null;
 for(var i=0;i<objMenu.elementos.length;i++){  
  if(objMenu.elementos[i].enlace==idCapaMenu){	 
	 elMe=objMenu.elementos[i];
	 break;
	}
 }
 if(elMe==null){
  for(var k=0;k<objMenu.submenus.length;k++){
	 if((elMe=cogElMePorSubmenu(idCapaMenu,objMenu.submenus[k]))!=null) break;
	}
 }
 return elMe;
}

function mostrarRama(doc,objMenu){
 if(!objMenuPrin.tipoArbol) return null;
 if(EnMenusDescartar(objMenu)) return null;
 var objMenuPunta=null;
 for(var i=0;i<objMenu.elementos.length;i++){  
  if(objMenu.elementos[i].enlace==doc){	 
	 objMenuPunta=objMenu;
	 break;
	}
 }
 if(!objMenuPunta){
  for(var k=0;k<objMenu.submenus.length;k++){
	 if((objMenuPunta=mostrarRama(doc,objMenu.submenus[k]))!=null) break;
	}
 }
 if(objMenu==objMenuPrin && objMenuPunta){
  var objAuxi=objMenuPunta;
  while(objAuxi.nivel!=0){
	 ramaMenus[objAuxi.nivel]=objAuxi;
	 objAuxi.oculMosMenu();
	 objAuxi=cogMenuPorId(objAuxi.idCapaMenuPadre,objMenu);
  }
 } 
 return objMenuPunta;
}

function setMenusDescartar(){
 var args=setMenusDescartar.arguments;
 for(var i=0;i<args.length;i++) menusDescartar.push(cogMenuPorId(args[i],objMenuPrin));
}

function EnMenusDescartar(objMenu){
 for(var i=0;i<menusDescartar.length;i++) if(objMenu==menusDescartar[i]) return true;
 return false;
}

//******************************************************************************
//manejadores de eventos
function resolverEnlace(){
 var elMe=cogElMePorId(this.id,objMenuPrin);
 var objSubmenu;
 var mostrar=true;
 if(idTemp){
  clearTimeout(idTemp);
	idTemp=null;
 }
 objSubmenu=cogMenuPorId(elMe.enlace,objMenuPrin);
 if(objSubmenu!=null && objMenuPrin.tipoArbol){  
	if(ramaMenus[objSubmenu.nivel]==objSubmenu) mostrar=false;	
 }
 cerrarMenusPunta(cogMenuPorId(elMe.idMenuPadre,objMenuPrin).nivel);
 if(elMe.enlace=="") mostrar=false;
 if(objSubmenu!=null && mostrar){
  objSubmenu.oculMosMenu();
	ramaMenus.push(objSubmenu);	
 }
}

function lanzarCerrarMenus(){
 if(idTemp) clearTimeout(idTemp);
 idTemp=setTimeout("cerrarMenus()", espera);
}



