//==============================================================================
// Fichero ............: acaMenus.js
// Autor ..............: Diego Vico Ramírez
// Creación ...........: 01/Febrero/2007
// Última modificación : 08/noviembre/2007
// Objetivo ...........: Código JavaScript para la gestión de los menús 
// Dependencias .......: Ninguna
//==============================================================================
// Cabeceras y <div> de apertura de menús
//==============================================================================
var DivMenuV =            '<div class="menuv">';
var CierraDiv =           '</div>';
var CaminoSantCab =       '<a   id="mp01"><img class="CabSubmenu" align="right" border="0" alt="Flechita" src="|_img/FMenu.gif">Camino de Santiago</a>';
var CaminoSantSub =       '<div id="smp01">';
var ViajesCab =           '<a   id="mp02"><img class="CabSubmenu" align="right" border="0" alt="Flechita" src="|_img/FMenu.gif">Viajes</a>';
var ViajesSub =           '<div id="smp02">';
var AniversariosCab =     '<a   id="mp03"><img class="CabSubmenu" align="right" border="0" alt="Flechita" src="|_img/FMenu.gif">Aniversarios</a>'
var AniversariosSub =     '<div id="smp03">';
var QuienesSomosCab =     '<a   id="mp04"><img class="CabSubmenu" align="right" border="0" alt="Flechita" src="|_img/FMenu.gif">Quienes somos</a>';
var QuienesSomosSub =     '<div id="smp04">';
var DocumentosCab =       '<a   id="mp05"><img class="CabSubmenu" align="right" border="0" alt="Flechita" src="|_img/FMenu.gif">Documentos</a>';
var DocumentosSub =       '<div id="smp05">';

/*
var CodigoCSSCab =             '<a   id="mp06" href="/web/dvr/DisenioWeb/CSS/CodigoCSS.html">Código CSS</a>';
var CodigoCSSSub =             '<div id="smp06">';
var GruposPropCab =            '<a   id="mp07" href="/web/dvr/DisenioWeb/CSS/ReferenciaCSS/Propiedades/PropiedadesIndice.html">Propiedades y valores</a>';
var GruposPropSub =            '<div id="smp07">';
var C_PreproCab =              '<a   id="mp08" href="/web/dvr/C_Cpp/Preprocesador/ReferenciaDePreprocesador.html">Preprocesador de C y C++</a>';
var C_PreproSub =              '<div id="smp08">';
var C_ReferenciaCCab =         '<a   id="mp09" href="/web/dvr/C_Cpp/ReferenciaDeC/ReferenciaDeC.html">Referencia de C</a>';
var C_ReferenciaCSub =         '<div id="smp09">';
var C_ReferenciaCppCab =       '<a   id="mp10" href="/web/dvr/C_Cpp/ReferenciaDeCpp/ReferenciaDeCpp.html">Referencia de C++</a>';
var C_ReferenciaCppSub =       '<div id="smp10">';
var C_FuncionesCCab =          '<a   id="mp10" href="/web/dvr/C_Cpp/FuncionesIntrinsecas/FuncionesIntrinsecas.html">Funciones intrínsecas</a>';
var C_FuncionesCSub =          '<div id="smp10">';
var C_ComponentesBasicosCCab = '<a id="mp11" href="/web/dvr/C_Cpp/ReferenciaDeC/ComponentesBasicos/ComponentesBasicosDeC.html">Componentes básicos</a>';
var C_ComponentesBasicosCSub = '<div id="smp11">';
*/
//=============================================================================

//=============================================================================
// Opciones para los menús de Entrada
//=============================================================================
var EnConstruccionV = '<a class="bm" href="|Base.php?a=ec" target="_self">En construcción...</a>';
var InicioEnt = '<a class="bm" href="|index.php">Entrada</a>';
var ProximaSalida = '<a class="bm" href="|Base.php?a=proxsal">Próxima salida</a>';
var UltimaHora = '<a class="bm" href="|Base.php?a=uh">Última hora</a>';
var CaminoIngles = '<a class="bm" href="javascript:dvrCaminoIngles()">El camino Inglés</a>';
var CaminoPortuges = '<a class="bm" href="javascript:dvrCaminoPortuges()">El camino Portugués</a>';
var CaminoFrances = '<a class="bm" href="javascript:dvrCaminoFrances()">El camino Francés</a>';
var SantiagoMuxia = '<a class="bm" href="javascript:dvrSantiagoMuxia()">Santiago a Fisterra</a>';
//var Ecologia = '<a class="bm" href="#">Ecología</a>'
//var Enlaces = '<a class="bm" href="#">Enlaces interesantes</a>';
//var BuscadorFauna = '<a class="bm" href="#">Buscador de Fauna</a>';
var NuestrosFines = '<a class="bm" href="|Base.php?a=nfs">Fines de ACA</a>';
var JuntaDirectiva = '<a class="bm" href="|Base.php?a=jdv">Junta Directiva</a>';
var Estatutos = '<a class="bm" href="|Base.php?a=ets">Estatutos</a>';
var ContactaCon = '<a class="bm" href="|Base.php?a=ccn">Contacta con nosotros</a>';
//var ContactaCon = '<a class="inactivo">Contacta con nosotros</a>';
var Ani2003 = '<a class="bm" href="|Base.php?a=Foto&r=Aniversarios/Cena2003">Cena aniversario 2003</a>';
var Ani2005 = '<a class="bm" href="|Base.php?a=Foto&r=Aniversarios/Cena2005">Comida aniversario 2005</a>';
var Ani2006 = '<a class="bm" href="|Base.php?a=Foto&r=Aniversarios/Cena2006">Cena aniversario 2006</a>';
var Encina2006 = '<a class="bm" href="|Base.php?a=Foto&r=Aniversarios/FiestaDeLaEncina2006">Fiesta de la encina 2006</a>';
var JunSal2006 = '<a class="bm" href="|Base.php?a=Foto&r=Aniversarios/HomenajeJuntaSaliente2006">Homenaje a la junta saliente 2006</a>';

var Galicia2006 = '<a class="bm" href="|Base.php?a=viaje&r=Viajes/Galicia2006">Galicia 2006</a>';
var Pirineos2007 = '<a class="bm" href="|Base.php?a=viaje&r=Viajes/Pirineos2007">Pirineos 2007</a>';
var PicosEueropa2008 = '<a class="bm" href="|Base.php?a=viaje&r=Viajes/PicosEuropa2008">Picos Europa 2008</a>';

var GuiaCaminosMaja = '<a class="bm" href="|Base.php?a=gcmjh">Guía de los caminos de Majadahonda</a>';

var ConsejosCaminar = '<a class="bm" href="|Base.php?a=cpc">Consejos para caminar</a>';
//var Cocina = '<a class="bm" href="//EnConstruccion.php" target="_self">Cocina</a>';
//var Admin = '<a class="bm" href="|Base.php?a=adm" target="_self">Mantenimiento</a>';
//=============================================================================

//=============================================================================

//=============================================================================
// Matriz de definición del menú vertical de la página de entrada.
//=============================================================================
var EntV = new Array( DivMenuV, 
                            InicioEnt, 
                            ProximaSalida, 
                            UltimaHora, 
                            //RutasCab, 
							//   RutasSub, 
                            //      RutasVisitadas,
                            //      RutasExploradas,
                            //      RutasUrbanas,
                            //     RutasOtras,
							//   CierraDiv,
                            CaminoSantCab, 
							   CaminoSantSub, 
							      CaminoFrances,
								  CaminoIngles,
								  CaminoPortuges,
							      SantiagoMuxia,
							   CierraDiv,
                            ViajesCab, 
							   ViajesSub, 
                                  Galicia2006,
                                  Pirineos2007,
								  PicosEueropa2008,
							   CierraDiv,
							AniversariosCab, 
							   AniversariosSub, 
                                  Ani2003,
                                  Ani2005,
                                  Ani2006,
                                  Encina2006,
                                  JunSal2006,
							   CierraDiv,
                            //Ecologia, 
                            //Enlaces, 
                            //BuscadorFauna, 
                            QuienesSomosCab, 
							   QuienesSomosSub, 
                                  NuestrosFines,
                                  JuntaDirectiva,
							      Estatutos,
							      ContactaCon,
							   CierraDiv,
                            DocumentosCab, 
							   DocumentosSub, 
							      GuiaCaminosMaja,
							   CierraDiv,
                            //ContactaCon,
                            ConsejosCaminar, 
                            //Cocina, 
                            //Admin,
                      CierraDiv );
//=============================================================================

//=============================================================================
// Función dvrEscribeMenu(m)
// Recibe como argumento el nombre de una matriz que contendrá la definición 
// del menú.
//=============================================================================
function dvrEscribeMenu(m, rzjs) {
   for (var i=0; i<m.length; i++) { 
	  if (m[i].indexOf('|') >= 0) {
         var p = m[i].split('|')
         document.write(p[0]+rzjs+p[1]); 
	  } else {
         document.write(m[i]); 
	  }
   }
}
//=============================================================================

//=============================================================================
// Función dvrIniciaMenu()
// Esta función se ecarga de ordenar los menus y asignar a las cabeceras de los
// los submenús los controladores de evento necesarios para que reaccionen
// cuando el cursor está sobre ellas y cuando las avandona.
// Parámetros:
//    No recibe parámetros, pero debería recibir el ancho de los bordes 
//    izquierdo y derecho, el ancho de las indentaciones inzquierda y derecha,
//    el ancho que tendrá cada opción del menu horizontal (también podría ser 
//    la del vertical, la altura de cada opción del menú y el número de opciones
//    que tendrá la barra del menú horizontal.
//    Tal como está, situa el menú horizontal en el ángulo inferior derecha del
//    elemento que lo contenga, pero podría hacerse que lo situase en cuanquier
//    punto si recibiera los parámetros adecuados.
//
//==============================================================================
function dvrIniciaMenu() {
   // 
   // Variables con los nombres oficiales de los navegadores que se obtienen con 
   // window.navigator.appName.
   //
   var NS = "Netscape" ;  // Nombre de la familia Mocilla Firefox, Netscape, etc.
   var IE = "Microsoft Internet Explorer" ;  // Nombre del IE de Microsoft

   var lista = null ;
   var Bord = 1 ;  // Valor del borde definido en CSS para los elementos <a>
   var Padd = 2 ;  // Valor del padding definido en CSS para los elementos <a>
   var Anch = 65 ; // Anchura definida en CSS para los elementos <a>
   var Alto = 20 ; // Altura de una opción
   //var nrOp = 4 ;  // Número de opciones de la barra
   var nrOp = 5 ;  // Número de opciones de la barra

   //
   // En un documento puede haber más de un menú, por ejemplo, uno vertical 
   // (class="menuv") y otro horizontal (class="menuv") y hay que iniciarlos 
   // a ambos.
   //
   lista = document.getElementsByTagName('div') ; // Busca todos los DIV
   for (i=0; i<lista.length; i++) {
      // 
      // Para cada DIV comprueba si es un menú "menuv" o "menuh"
      // En Firefox la expresión lista[i].attributes.getNamedItem('class')
      // retornará null si el elemento no tiene el atributo clase definido pero 
      // en Explorer siempre retornará un objeto, por eso se comprueba primero
      // si es nulo ya que si buscamos directamente 'value' en muchos casos 
      // tendriamos un error con Firefox
      //
      if (!lista[i].attributes.getNamedItem('class')) continue ;
      // 
      // Si el objeto tiene el atributo clase definido, entonces comprobamos 
      // si es un menú. Esto funcionará tanto en Firefox como en Explorer
      //
      switch (lista[i].attributes.getNamedItem('class').value) {
      case 'menuv':  // Para menú vertical
         dvrIniciaMenu2(lista[i]) ;
         break ;
      case 'menuh':  // Para menú horizontal
         //
         // Lo primero es situar el menú en el ángulo inferior derecho del
         // <div> que lo contiene, que corresponde con el espacio reservado 
         // en la página para el rotulo.
         // 
         // Para que se vean en la misma posición, tanto en Netscape como en 
         // Explorer, es necesario hacer un ajuste de 1 pixel cuando se 
         // muestra en el Explorer (tanto en alto como en ancho)
         //
         if (window.navigator.appName == NS){
            lista[i].style.right = ((Anch + ((Bord+Padd)*2))*nrOp)+'px' ;
            lista[i].style.bottom = Alto+'px' ;
         }
         else if (window.navigator.appName == IE){
            lista[i].style.right = (((Anch + ((Bord+Padd)*2))*nrOp)-1)+'px' ;
            lista[i].style.bottom = (Alto-1)+'px' ;
         }
         dvrOrdenaMenu(lista[i], Anch, (Anch + ((Bord+Padd)*2)), Alto) ;
         dvrIniciaMenu2(lista[i]) ;
         break ;
      default: 
         continue ;
      }
   }
}
//==============================================================================
// Función dvrIniciaMenu2()
// 
// Argumentos de entrada:
//     Recibe como argumento de entrada el elemento <di> que contiene al menú
//
// Esta función asigna a las cabeceras de submenú y a los propios submenús los 
// controladores de eventos necesarios para que reaccionen cuando el cursor 
// está sobre ellas y cuando las avandona
//==============================================================================
function dvrIniciaMenu2(menu) {
   var elem = null ;
   var lista = null ;
   var nodo = null ;
   var i = 0 ;
   // Lee todos los elementos <a> hijos del menú.
   lista = menu.getElementsByTagName('a') ;
   for (j=0; j<lista.length; j++) {
      nodo = lista[j];
      if (nodo.id) {
         // Asigna los controladores a la cabecera
         addEvent(nodo, 'mouseover', getMouseOverFor(nodo), false) ;
         addEvent(nodo, 'mouseout', getMouseOutFor(nodo), false) ;
         // Asigna los controladores al submenu asociado
         nodo = document.getElementById('s'+nodo.id)
         addEvent(nodo, 'mouseover', getMouseOverFor(nodo), false) ;
         addEvent(nodo, 'mouseout', getMouseOutFor(nodo), false) ;
      }
   }
}
//==============================================================================
//==============================================================================
// Función getMouseOverFor()
//==============================================================================
function getMouseOverFor(nodo) {
   return function(e) { dvrMuestraMenu(e, nodo) } ;
}
//==============================================================================
//==============================================================================
// Función getMouseOutFor()
//==============================================================================
function getMouseOutFor(nodo) {
   return function(e) { dvrOcultaMenu(e, nodo) } ;
}
//==============================================================================
//==============================================================================
// Función dvrMuestraMenu()
// Cambia el atributo "visibility" de un submenú a "visible", para que el 
// submenú aparezca.
//==============================================================================
function dvrMuestraMenu(e, nodo) {
   var elem = window.event ? nodo : e ? e.currentTarget : null ;
   if (!elem) return ;
   if (elem.nodeName.toLowerCase() == 'a')
      elem = document.getElementById('s'+elem.id)
   clearTimeout(elem.outTimeout) ;
   elem.style.visibility = 'visible' ;
}
//==============================================================================
//==============================================================================
// Función dvrOcultaMenu()
// Cambia el atributo "visibility" de un submenú a "hidden", para que el 
// submenú se oculte.
//==============================================================================
function dvrOcultaMenu(e, nodo) {
   var elem = window.event ? nodo : e ? e.currentTarget : null ;
   if (!elem) return ;
   if (elem.nodeName.toLowerCase() == 'a')
      elem = document.getElementById('s'+elem.id) ;
   elem.outTimeout = setTimeout(function() { dvrOcultaMenu2(elem); }, 250);
}
//==============================================================================
//==============================================================================
// Función dvrOcultaMenu2()
// Cambia el atributo "visibility" de un submenú a "hidden", para que el 
// submenú se oculte.
//==============================================================================
function dvrOcultaMenu2(e) {
   e.style.visibility = 'hidden' ;
}
//==============================================================================
//==============================================================================
// Función dvrOrdenaMenu(menu)
//==============================================================================
function dvrOrdenaMenu(menu, ancho, anchoT, alto) {
   // 
   // Variables con los nombres oficiales de los navegadores que se obtienen con 
   // windows.navigator.appName.
   //
   var NS = "Netscape" ;  // Nombre de la familia Mocilla Firefox, Netscape, etc.
   var IE = "Microsoft Internet Explorer" ;  // Nombre del IE de Microsoft

   var lista = null ;
   var opcId = null ;
   var desplX = null ;
   var desplY = alto ;
   
   //
   // Hay que ajustar el ancho de las opciones del menu y poner cada opción 
   // en su lugar relativo.
   // Alinea las opciones del menú principal en la barra horizontal y luego
   // situa los submenús.
   //
   lista = menu.getElementsByTagName('a') ;
   for (var j=0, f=0; j<lista.length; j++) {
      lista[j].style.width = ancho+'px' ;
      if (!lista[j].attributes.getNamedItem('class')) continue ;
      if ((lista[j].attributes.getNamedItem('class').value == 'bm') ||
         (lista[j].attributes.getNamedItem('class').value == 'bmi')) {
         desplX = (anchoT * f++) ;
         lista[j].style.left = desplX+'px' ;
         if (!lista[j].attributes.getNamedItem('id')) continue ;
         // El siguiente if() es necesario para que IE no de un error
         if (opcId = lista[j].attributes.getNamedItem('id').value)
            j += dvrAlineaSubmenu(opcId, alto, desplX, desplY) ;
      }
   }
}
//==============================================================================
//==============================================================================
function dvrAlineaSubmenu(Id, alto, desplX, desplY) {
   var lista = null ;
   var nodo = null ;
   var opcId = null ;
   var r = null ;
   // Lee el <div> con el id = 's'+Id y le asigna los desplazamientos vertical
   // y horizontal
   nodo = document.getElementById('s'+Id) ;
   nodo.style.top = desplY+'px' ;
   nodo.style.left = desplX+'px' ;
   // Lee todos los <a> hijos del <div>
   lista = nodo.getElementsByTagName('a') ;
   for (var i=0, c=0; i<lista.length; i++, c++) {
      lista[i].style.top = (alto*c)+'px' ;
      // Comprueba si es la cabecera de un submenú
      if (!lista[i].attributes.getNamedItem('id')) continue ;
      // El siguiente if() es necesario para que IE no de un error
      if (opcId = lista[i].attributes.getNamedItem('id').value)
         i += dvrAlineaSubmenu(opcId, alto, 35, (alto*(c+1))) ;
   }
   return i ;
}
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
// Función addEvent()
// Autor.....: Scott Andrew
// Utilidad .: Se usa para registrar funciones controladoras de eventos en  
//             elementos para los navegadores IE5+, NS6+, y Mocilla/Gecko
// Argumentos: elm ========> Es una referencia al elemento al que se le quiere 
//                           asignar el controlador de evento
//             evType =====> Una cadena de texo con el nombre del evento
//             fnc ========> El nombre de la función que se ejecutará cuando 
//                           ocurra el evento en este elemento
//             useCapture => false o true
//==============================================================================
function addEvent(elm, evType, fnc, useCapture) {
   if (elm.addEventListener) {
      elm.addEventListener(evType, fnc, useCapture) ;
      return true;
   }
   else if (elm.attachEvent) {
      var r = elm.attachEvent(('on' + evType), fnc) ;
      return r ;
   }
   else {
      elm['on'+ evType] = fnc ;
   }
}
//==============================================================================

function dvrSantiagoMuxia() {
	window.location.replace('CaminoDeSantiago/SantiagoMuxia/marco.htm') ;
}

function dvrCaminoFrances() {
	window.location.replace('CaminoDeSantiago/ElCaminoFrances/marco.htm') ;
}

function dvrCaminoIngles() {
	window.location.replace('CaminoDeSantiago/ElCaminoIngles/marco.htm') ;
}

function dvrCaminoPortuges() {
	window.location.replace('CaminoDeSantiago/ElCaminoPortugues/marco.htm') ;
}
