//==============================================================================
// Fichero ............: acaSite.js
// Autor ..............: Diego Vico Ramírez
// Creación ...........: 12/febrero/2007
// Última modificación : 21/noviembre/2007
// Objetivo ...........: Código JavaScript
// Dependencias .......: Ninguna
//==============================================================================
// Funciones definidas :
//       dvrUltimaModifi()
//       dvrIniciaIntervalo(clase)
//       dvrPrimeraF()
//       dvrAnteriorF()
//       dvrSiguienteF(clase)
//       dvrUltimaF()
//       dvrPausaF()
//       dvrAutoF()
//       dvrLentoF()
//       dvrRapidoF()
//       dvrActivaListaRutas(m)
//       dvrActivaBotones()
//       dvrDefineAccion(a)
//       dvrActivaControlesEnlace(Apartado)
//       dvrInsertaControlesNuevaFoto(IdFrm, Ident)
//       dvrActivaCampoFich()
//       dvrActivaBotonNuevoFich()
//       dvrLeerPosicionVerticalElemento()
//       dvrOcultaBotonNuevoFich()
//       dvrLeerAlturaElemento()
//       dvrSeleccionaActividad()
//       dvrOpcionesDiasSemana()
//       dvrOpcionesDiasMes()
//       dvrOpcionesMeses()
//       dvrCalculaAnio()
//       dvrListaTodasLasRutas()
//       dvrGuardaNumeroMes()
//       dvrGuardaDirectorio()
//       dvrEliminaFecha(this) ............... Para eliminar un registro de fecha en el formulario de la programación prevista
//       dvrInsertaNuevaFecha(this) .......... Para añadir un registro de fecha en el formulario de la programación prevista
//       dvrEliminaRegistro(this) ............ Para eliminar un registro de evento en el formulario de última hora
//       dvrInsertaNuevoReg(this) ............ Para añadir un registro de evento en el formulario de última hora
//       dvrBuscarURL() ...................... Busca la URL a la que quedará definido el enlace del nuevo registro
//       dvrCapturaLocalizacion()
//       dvrCargaNumeroDeRuta() .............. Carga en el formulario de nueva ruta, el número de ruta en función del tipo 
//       dvrCreaEnlacesAFotos()
//
//       dvrOpcionesEnlace()
//       dvrGestionaEnlace()
//
//==============================================================================
//
//==============================================================================
// 
// 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 id = 0 ;
   var Interval = '' ;
   var win = '' ;   // Ventana abierta para buscar una URL
   var nwin = '' ;  // Nombre de la ventana abierta para buscar URL
   var cont = 1 ;
//

//==============================================================================
// Función dvrUltimaModifi()
// Retorna la fecha y hora de la última modificación en el formanto 
// dd/mm/aaaa - hh:mm:ss, con el nombre del mes en castellano.
// Dependencias: No depende de otras funciones
//
function dvrUltimaModifi() {
    var Fecha = new Date(document.lastModified) ;
    var dia = "" ;
    var mes ;
    var mesn ;
    var hora = "" ;
    var minu = "" ;
    var segu = "" ;
    switch (Fecha.getMonth()) {
       case 0:  mes = "enero" ;      mesn = "01" ;  break;
       case 1:  mes = "febrero" ;    mesn = "02" ;  break;
       case 2:  mes = "marzo" ;      mesn = "03" ;  break;
       case 3:  mes = "abril" ;      mesn = "04" ;  break;
       case 4:  mes = "mayo" ;       mesn = "05" ;  break;
       case 5:  mes = "junio" ;      mesn = "06" ;  break;
       case 6:  mes = "julio" ;      mesn = "07" ;  break;
       case 7:  mes = "agosto" ;     mesn = "08" ;  break;
       case 8:  mes = "septiembre" ; mesn = "09" ;  break;
       case 9:  mes = "octubre" ;    mesn = "10" ;  break;
       case 10: mes = "noviembre" ;  mesn = "11" ;  break;
       case 11: mes = "diciembre" ;  mesn = "12" ;  break;
    }
    
    if (Fecha.getDate() < 10) 
       dia = dia.concat('0' + Fecha.getDate()) ;
    else
       dia = dia.concat(Fecha.getDate()) ;

    if (Fecha.getHours() < 10) 
       hora = hora.concat('0' + Fecha.getHours()) ;
    else
       hora = hora.concat(Fecha.getHours()) ;

    if (Fecha.getMinutes() < 10) 
       minu = minu.concat('0' + Fecha.getMinutes()) ;
    else
       minu = minu.concat(Fecha.getMinutes()) ;

    if (Fecha.getSeconds() < 10) 
       segu = segu.concat('0' + Fecha.getSeconds()) ;
    else
       segu = segu.concat(Fecha.getSeconds()) ;
      
    return (dia + "/" + mesn + "/" + Fecha.getFullYear() + " - " +
            hora + ":" + minu + ":" + segu);
}
//==============================================================================
//==============================================================================
//
// Código para cambiar la foto cada intervalo de tiempo determinado
//
//===============================================================================
function dvrIniciaIntervalo(clase){
   //
   // "NumFotos" contiene el número de fotos que hay disponibles para la ruta o 
   // evento que se está presentando. La escribe PHP antes de llamar a la función 
   // dvrCreaEnlacesAFotos(). También crea la variable "periodo" que será el 
   // número de milisegundos inicial que cada foto estará visible.
   // 
   // Si "NumFotos" es mayor que cero se inicia el intervalo de lo contrario no 
   // se hace nada.
   //
   if (NumFotos > 0) {
      //
      // Se oculta al gráfico que indica que se están cargando los datos.
      // 
      if (document.getElementById('carga'))
         document.getElementById('carga').style.display = 'none' ;
      //
      // Se presenta la primera foto
      //
      document.getElementById('vf0').style.display = 'block' ;
      //
      // Se lanza el intervalo
      //
      IdInterval = setInterval("dvrSiguienteF('"+clase+"')",  periodo) ; 
   } 
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrPrimeraF() {
   //
   // "NumFotos" contiene el número de fotos que hay disponibles para la ruta o 
   // evento que se está presentando. La escribe PHP antes de llamar a la función 
   // dvrCreaEnlacesAFotos(). También crea la variable "periodo" que será el 
   // número de milisegundos inicial que cada foto estará visible.
   // 
   var MaxId  ;
   var ind ;
   // 
   // Presentará la primera foto 
   //
   // Se obtiene el "id" más alto
   //
   var MaxId = NumFotos - 1 ;
   // 
   // Si no hay fotos o solo hay una (MaxId = 0) no se hace nada
   //
   if (NumFotos && MaxId) {
      //
      // Se busca el índice de la foto actual
      //
      list = document.getElementsByTagName('a') ;
      for (var j=0; j<list.length; j++) {
         if (!list[j].attributes.getNamedItem('class')) continue ;
         if ((list[j].attributes.getNamedItem('class').value == 'fotogra') &&
            (list[j].style.display == 'block')) {
            ind = list[j].attributes.getNamedItem('id').value.slice(2) ;
         }
      }
      //
      // Se oculta la actual
      //
      document.getElementById('vf'+ind).style.display = 'none' ;
      // 
      // Se muestra la primera
      //
      document.getElementById('vf0').style.display = 'block' ;
   }
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrAnteriorF() {
   //
   // "NumFotos" contiene el número de fotos que hay disponibles para la ruta o 
   // evento que se está presentando. La escribe PHP antes de llamar a la función 
   // dvrCreaEnlacesAFotos(). También crea la variable "periodo" que será el 
   // número de milisegundos inicial que cada foto estará visible.
   // 
   var MaxId  ;
   var ind ;
   //
   // Presentará la foto anterior de la lista
   //
   // Se cuentan las fotos para saber cual será el "id" más alto
   //
   var MaxId = NumFotos - 1 ;
   // 
   // Si no hay fotos o solo hay una (MaxId = 0) no se hace nada
   //
   if (NumFotos && MaxId) {
      //
      // Se busca el índice de la foto actual
      //
      list = document.getElementsByTagName('a') ;
      for (var j=0; j<list.length; j++) {
         if (!list[j].attributes.getNamedItem('class')) continue ;
         if ((list[j].attributes.getNamedItem('class').value == 'fotogra') &&
            (list[j].style.display == 'block')) {
            ind = list[j].attributes.getNamedItem('id').value.slice(2) ;
         }
      }
      //
      // Se oculta la actual
      //
      document.getElementById('vf'+ind).style.display = 'none' ;
      if (ind == 0) {
         //
         // Si ind es 0 se está mostrando la primera y se pasa a mostrar 
         // la última
         //
         document.getElementById('vf'+MaxId).style.display = 'block' ;
      } else {
         //
         // En cualquier otro caso se muestra la anterior
         //
         document.getElementById('vf'+(--ind)).style.display = 'block' ;
      } 
   }
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrSiguienteF(clase) {
   //
   // "NumFotos" contiene el número de fotos que hay disponibles para la ruta o 
   // evento que se está presentando. La escribe PHP antes de llamar a la función 
   // dvrCreaEnlacesAFotos(). También crea la variable "periodo" que será el 
   // número de milisegundos inicial que cada foto estará visible.
   //
   var MaxId = NumFotos - 1 ;
   var ind ;
   //
   // Presentará la siguiente foto de la lista
   //
   // Si no hay fotos o solo hay una (MaxId = 0) no se hace nada
   //
   if (NumFotos && MaxId) {
      //
      // Se busca el índice de la foto actual
      //
      list = document.getElementsByTagName('a') ;
      for (var j=0; j<list.length; j++) {
         if (!list[j].attributes.getNamedItem('class')) continue ;
         if ((list[j].attributes.getNamedItem('class').value == clase) &&
             (list[j].style.display == 'block')) {
            ind = list[j].attributes.getNamedItem('id').value.slice(2) ;
         }
      }
      //
      // Se oculta la actual
      //
      document.getElementById('vf'+ind).style.display = 'none' ;
      if (ind == MaxId) {
         //
         // Si ind es MaxId se está mostrando la última y se pasa a mostrar 
         // la primera
         //
         document.getElementById('vf0').style.display = 'block' ;
      } else {
         //
         // En cualquier otro caso se muestra la siguiente
         //
         document.getElementById('vf'+(++ind)).style.display = 'block' ;
      } 
   }
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrUltimaF() {
   //
   // "NumFotos" contiene el número de fotos que hay disponibles para la ruta o 
   // evento que se está presentando. La escribe PHP antes de llamar a la función 
   // dvrCreaEnlacesAFotos(). También crea la variable "periodo" que será el 
   // número de milisegundos inicial que cada foto estará visible.
   //
   var MaxId  ;
   var ind ;
   // 
   // Presentará la primera foto 
   //
   // Se cuentan las fotos para saber cual será el "id" más alto
   //
   var MaxId = NumFotos - 1 ;
   // 
   // Si no hay fotos o solo hay una (MaxId = 0) no se hace nada
   //
   if (NumFotos && MaxId) {
      //
      // Se busca el índice de la foto actual
      //
      list = document.getElementsByTagName('a') ;
      for (var j=0; j<list.length; j++) {
         if (!list[j].attributes.getNamedItem('class')) continue ;
         if ((list[j].attributes.getNamedItem('class').value == 'fotogra') &&
            (list[j].style.display == 'block')) {
            ind = list[j].attributes.getNamedItem('id').value.slice(2) ;
         }
      }
      //
      // Se oculta la actual
      //
      document.getElementById('vf'+ind).style.display = 'none' ;
      // 
      // Se muestra la última
      //
      document.getElementById('vf'+MaxId).style.display = 'block' ;
   }
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrPausaF() {
   if (IdInterval != 0) {
      //
      // Si hay un intervalo activo lo detiene
      //
      window.clearInterval(IdInterval) ;
      IdInterval = 0 ;
   }
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrAutoF() {
      //
      // Si no hay un intervalo activo pone uno en marcha
      //
   if (!IdInterval)
      IdInterval = setInterval("dvrSiguienteF('fotogra')", periodo) ; 
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrLentoF() {
   //
   // Detiene el intervalo actual y abre otro con 500 milisegundos más
   // de periodo.
   //
   if (IdInterval != 0) {
      window.clearInterval(IdInterval) ;
      if (periodo < 12000) periodo += incremento ;
      IdInterval = setInterval("dvrSiguienteF('fotogra')", periodo) ;
   }
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrRapidoF() {
   //
   // Detiene el intervalo actual y abre otro con 500 milisegundos menos
   // de periodo.
   //
   if (IdInterval != 0) {
      window.clearInterval(IdInterval) ;
      if (periodo > incremento) periodo -= incremento ;
      IdInterval = setInterval("dvrSiguienteF('fotogra')", periodo) ;
   }
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrActivaListaRutas(m) {
   var lista = document.getElementById('NombRutaId') ;
   //var ele = document.getElementById('TipoRutaId') ;
   var ls = 0 ;
   var clase ;

   //
   // Primero se borra el posible contenido de la lista
   //
   lista.options.length = 0 ;
   
   //
   // Carga la lista con los nombres de las rutas con las que correspondan en función
   // del tipo seleccionado.
   //
   lista.options[ls++] = new Option('Si quiere ver una ruta selecciónela en esta lista', null, false, false);
   for (var i=0; i < m.length ; i++) {
       //if (m[i][1] == ele.options[ele.selectedIndex].text) {
          lista.options[ls++] = new Option(m[i][0], null, false, false);
          //
          // Con las siguientes líneas asignamos una clase a cada opción (clara y normal)
          // para que unas líneas se vean un poquito más claras que las otras.
          //
          // Lo siguiente funciona con FF pero no con IE
          //
          //if ((ls%2) == 0) lista.options[(ls-1)].setAttribute('class', 'opclara') ;
          //else lista.options[(ls-1)].setAttribute('class', 'opnormal') ;
          //
          clase = document.createAttribute('class') ;
          if ((ls%2) == 0) clase.value = 'opclara' ; 
          else clase.value = 'opnormal' ; 
          lista.options[(ls-1)].attributes.setNamedItem(clase) ;
       //}
   }

   //
   // Activa la lista con los nombres de las rutas
   //
   lista.disabled = false ;
   lista.style.color = '#000099' ;
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrActivaBotones() {
   var ele ;
   ele = document.getElementById('VerRutaId') ;
   ele.disabled = false ;
   ele.style.color = '#000099' ;
   ele = document.getElementById('VerFotosId') ;
   ele.disabled = false ;
   ele.style.color = '#000099' ;
   ele = document.getElementById('VerMapaId') ;
   ele.disabled = false ;
   ele.style.color = '#000099' ;
   ele = document.getElementById('NombRutaId') ;
   for (var i=0; i < rut.length; i++) {
       if (rut[i][0] == ele.options[ele.selectedIndex].text) {
          document.getElementById('RutaId').value = rut[i][2] ;
          break ;
       }
   }
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrDefineAccion(a) {
   switch (a) {
      case 1: document.getElementById('AccionId').value = 'Desc' ; //Frm seleccion rutas
              break ; 
      case 2: document.getElementById('AccionId').value = 'FotoF' ; //Frm seleccion rutas
              break ;
      case 3: document.getElementById('AccionId').value = 'Mapa' ; //Frm seleccion rutas
              break ;
      case 4: document.getElementById('Oculto').value = 'ident' ;  //Frm identificación
              break ;
      case 5: document.getElementById('Oculto').value = 'cance' ;  //Cancelar identificación
              break ;
      //Frm de nueva ruta          
      case 6: document.getElementById('Oper').value = 'nr' ;       //enviar
              break ;  
      case 7: document.getElementById('Oper').value = 'adm' ;      //cancelar opción administración
              break ;  
      //Frm editar proxima salida
      case 8: document.getElementById('Oper').value = 'edps' ;     //enviar
              break ;  
      //Frm para leer las fotos de una ruta actual
      case 9: document.getElementById('Oper').value = 'mrlft' ;     //enviar
              break ;  
      //Frm editar programación prevista
      case 10: document.getElementById('Oper').value = 'edpp' ;     //enviar
              break ;  
      //Borrar las fotos de una ruta actual
      case 11: document.getElementById('Oper').value = 'mreft' ;     //enviar
              break ;  
      //Frm editar ultima hora  
      case 12: document.getElementById('Oper').value = 'eduh' ;     //enviar
              break ;  
      //Frm para seleccionar la ruta en la que queremos modificar los datos
      case 13: document.getElementById('Oper').value = 'fsrdt' ;     //enviar
              break ;  
      //Frm para añadir nuevas fotos o el plano de una ruta
      case 14: document.getElementById('Oper').value = 'cafgr' ;  // Carga fotos o el plano de una ruta
              break ;  
      case 15: document.getElementById('Oper').value = 'mra' ;    // cancelar opciones de una ruta
              break ;  
      //Frm para modificar los datos de una ruta actual
      case 16: document.getElementById('Oper').value = 'fmrdt' ;     //enviar
              break ;  
      //Llama a la función que modifica los datos de una ruta actual
      case 17: document.getElementById('Oper').value = 'mrdat' ;     //enviar
              break ;  
      //Llama a la función que crea un  nuevo usuario de administración
      case 18: document.getElementById('Oper').value = 'nvusu' ;     //enviar
              break ;  
      //Llama a la función que borra un usuario de administración
      case 19: document.getElementById('Oper').value = 'brusu' ;     //enviar
              break ;  
      //Llama a la función que cambia la password de un usuario de administración
      case 20: document.getElementById('Oper').value = 'mdusu' ;     //enviar
              break ;  
      //Llama a la función para cambiar la junta directiva
      case 21: document.getElementById('Oper').value = 'jtdir' ;     //enviar
              break ;  
      //Llama a la función para cambiar como contactar
      case 22: document.getElementById('Oper').value = 'comco' ;     //enviar
              break ;  
      default: break ;
   }
}
//==============================================================================

//==============================================================================
//
//==============================================================================
function dvrActivaControlesEnlace(Apartado) {
   var e ;
   var v ;
   switch (Apartado) {
      case 'PuntoSalida' :
         v = new Array('TEnlaPS', 'LOrgEnlacePS', 'TOrgEnlacePS', 'LDesEnlacePS', 'TDesEnlacePS') ;
         break ;
      case  'ComoLlegar' : 
         v = new Array('TEnlaCL', 'LOrgEnlaceCL', 'TOrgEnlaceCL', 'LDesEnlaceCL', 'TDesEnlaceCL') ;
         break ;
      case 'Descripcion' :
         v = new Array('TEnlaDE', 'LOrgEnlaceDE', 'TOrgEnlaceDE', 'LDesEnlaceDE', 'TDesEnlaceDE') ;
         break ;
      default : break ;
   }
   if (document.getElementById(v[0]).checked) {
      e = document.getElementById(v[1]) ;
      e.disabled = false ; 
      e.style.color = '#000057' ; 
      e = document.getElementById(v[2]) ;
      e.disabled = false ; 
      e.style.color = '#000057' ; 
      e.style.backgroundColor = '#E0E090' ;
      e = document.getElementById(v[3]) ;
      e.disabled = false ; 
      e.style.color = '#000057' ; 
      e = document.getElementById(v[4]) ;
      e.disabled = false ; 
      e.style.color = '#000057' ; 
      e.style.backgroundColor = '#E0E090' ;
   } else {
      e = document.getElementById(v[1]) ;
      e.disabled = true ; 
      e.style.color = '#666666' ; 
      e = document.getElementById(v[2]) ;
      e.disabled = true ; 
      e.style.color = '#666666' ; 
      e.style.backgroundColor = '#999999' ;
      e.value = '' ;
      e = document.getElementById(v[3]) ;
      e.disabled = true ; 
      e.style.color = '#666666' ; 
      e = document.getElementById(v[4]) ;
      e.disabled = true ; 
      e.style.color = '#666666' ; 
      e.style.backgroundColor = '#999999' ;
      e.value = '' ;
   }
   return true ;
}
//==============================================================================

//==============================================================================
// Función dvrInsertaControlesNuevaFoto(IdFrm, Ident)
// Esta función recibe como argumento el identificador de un elemento del 
// formulario (un DIV que contiene todos los necesarios para definir un fichero
// a cargar) y debe mover hacia abajo todos los que haya debajo del mismo el 
// espacio suficiente para insertar un nuevo conjunto de elementos que permita la 
// carga de un fichero.
//
function dvrInsertaControlesNuevaFoto(IdFrm, Ident) {
   var i = 0 ;
   var mover = false ;
   var inc = 23 ;  // la altura del hueco que se abrirá en cada caso
   var NumFoto = Ident.substr(2) ; // lee el número de la foto
   var nuevo ;  // Para cuando se cree el nuevo elemento
   var actual = document.getElementById(Ident) ;
   var cad ;
   //
   // Pirmero se oculta el botón desde el que se ha llamado a esta función
   // para que no se pueda añadir por segunda vez los controles para la
   // carga de un fichero desde el mismo sitio.
   //
   dvrOcultaBotonNuevoFich(Ident)
   //
   // También hay que evitar que vuelva a aparecer el botón si cambia en lo cucesivo
   // el valor del fichero, para eso se desactivará el evento onChange para este
   // fichero.
   //
   document.getElementById('TF'+NumFoto).onchange = '' ;   //
   //
   // Ahora se carga el formulario para insertar los controles para la carga de un
   // fichero.
   //
   //var form = document.getElementById('NuevaRut') // busca el formulario
   var form = document.getElementById(IdFrm) // busca el formulario
   //
   // El formulario se hace un poco más largo
   //
   //form.style.height = (parseInt(dvrLeerAlturaElemento('NuevaRut')) + inc) + 'px' ;
   form.style.height = (parseInt(dvrLeerAlturaElemento(IdFrm)) + inc) + 'px' ;
   //
   // Ahora pasamos por todos los hijos hasta que lleguemos al que tiene un
   // "id" igual al que recibimos como argumento "Ident"
   //
   for (i = 0; i < form.childNodes.length; i++) {
      if (form.childNodes[i].id == Ident) {
         // 
         // Hemos llegado al elemento indicador, todos los que quedan hay que moverlos
         // un "espacio" para abajo. La altura del espacio en nuestro caso ese fija y
         // son 23 pixels. Se hace que mover sera "true"
         //
         mover = true ;
         continue ;
      }
      //
      // Si mover es true todo elemento que tenga un ID definido se desplaza hacia abajo
      //
      if (mover == true) 
         if (form.childNodes[i].id && (form.childNodes[i].type != 'hidden')) 
            form.childNodes[i].style.top = (dvrLeerPosicionVerticalElemento(form.childNodes[i].id) + inc) + 'px' ;
   }
   //
   // Una vez que se ha abierto el hueco, se inserta un nuevo conjunto de controles que 
   // permita añadir una foto. Para eso lo primero se clonará el original del formulario 
   // (id="DF0") con todos sus hijos
   //
   nuevo = document.getElementById('DF0').cloneNode(true) ; 
   // 
   // Ahora hay que hacer lo siguiente:
   //     Cambiar el "id" al nuevo elemento, y a sus hijos, para que no se repitan en el 
   //           documento. 
   //     Cambiar el "name" del elemento tipo File para que pueda ser manejado al cargar
   //           los ficheros con PHP.
   //     Limpiar el contenido y el estado de los campos para que al insertarlo quede 
   //           a punto.
   //
   // Primero se coloca a la altura correspondiente ajustando la propiedad top del estilo
   //
   nuevo.style.top = (dvrLeerPosicionVerticalElemento(Ident) + inc) + 'px'
   //
   // Tanto el "id" como el "name" tendrán los mismos caracteres alfabéticos que el 
   // original y al número le sumeremos una unidad.
   //
   nuevo.id = 'DF' + (parseInt(NumFoto) + 1) ;
   // 
   // Ahora hay que cambiar el "id" y "name" de los hijos: 
   //     La etiqueta (LFx)
   //     La marca de verificación (CFx)
   //     El elemento fichero (TFx)
   //     El botón (BFx). 
   // Además hay que cambiar los argumentos que se pasan a cada función :
   //     dvrActivaCampoFich(\'CFx\')
   //     dvrActivaBotonNuevoFich(\'DFx\')
   //     dvrInsertaControlesNuevaFoto(IdFrm, \'DFx\')
   //
   for (i=0; i<nuevo.childNodes.length; i++) {
      if (nuevo.childNodes[i].id) {
         oldId = nuevo.childNodes[i].id ;
         cad = nuevo.childNodes[i].id.substr(0,2) ;
         nuevo.childNodes[i].id = cad + (parseInt(NumFoto) + 1) ;
         switch (cad) {
            case 'LF': 
               nuevo.childNodes[i].childNodes[0].nodeValue = 'Foto '+(parseInt(NumFoto) + 2)+' :' ;
               break ;
            case 'TF':
               nuevo.childNodes[i].value = '' ;
               nuevo.childNodes[i].name = ('F'+(parseInt(NumFoto) + 1)) ;
               nuevo.childNodes[i].onchange = function() { dvrActivaBotonNuevoFich('DF'+(parseInt(NumFoto) + 1)); } ;
               break ;
            case 'BF':
               nuevo.childNodes[i].onclick = function() { dvrInsertaControlesNuevaFoto(IdFrm, 'DF'+(parseInt(NumFoto) + 1)); } ;
               break ;
            case 'CF':
               nuevo.childNodes[i].onclick = function() { dvrActivaCampoFich('CF'+(parseInt(NumFoto) + 1)); } ;
               break ;
            default : break ;
         }
      }
   }
   //
   // Se inserta el nuevo elemento a continuación del actual
   //
   form.insertBefore(nuevo, actual.nextSibling)
   if (document.getElementById('TF'+(parseInt(NumFoto) + 1)).disabled == true)
      document.getElementById('CF'+(parseInt(NumFoto) + 1)).click() ;
   document.getElementById('CF'+(parseInt(NumFoto) + 1)).checked = true ;
}
//==============================================================================

//==============================================================================
// Función dvrLeerPosicionVerticalElemento(Ident)
//
function dvrLeerPosicionVerticalElemento(Ident) {  
   var i = 0 ;
   var j = 0 ;
   // 
   // Lo primero que hace es leer intentar la posición del elemento cuyo "id" 
   // recibe como argumento y cargarla en la varable "pos"
   //
   var ele = document.getElementById(Ident) ;
   var pos = parseInt(ele.style.top, 10) ;
   // 
   // Si el estilo del elemento no está asignado 'inline' pos estará vacía y 
   // hay que leer el dato de las hojas de estilo que tiene un metodo distinto
   // en cada explorador.
   //
   if (isNaN(pos)) { 
      switch (window.navigator.appName) {
         case NS: // Mocilla FireFox
            pos = parseInt(window.getComputedStyle(ele, null).getPropertyValue('top'), 10) ;
            break ;
         case IE: // Internet Explorer
            //
            // Hay que mirar en todas las hojas de estilo para buscar el selector
            // adecuado ('#' + Ident) y una vez encontrado, leer el atributo 'top'
            //
            var hojas = document.styleSheets ;
               for ( i = 0; i < hojas.length; i++ ) {
               var reglas = document.styleSheets[i].rules ;
               for (j=0; j < reglas.length; j++) {
                  if (reglas[j].selectorText == ('#' + Ident)) {
                     pos = parseInt(reglas[j].style.top, 10) ;
                     break ;
                  }
               }
               if (!isNaN(pos)) break ;
            }
         break ;
         default: break ;
      }
   }
   return pos ;   
}
//==============================================================================

//==============================================================================
// Función dvrLeerAlturaElemento(Ident)
//
function dvrLeerAlturaElemento(Ident) {  
   var i = 0 ;
   var j = 0 ;
   // 
   // Lo primero que hace es intentar leer la altura del elemento cuyo "id" 
   // recibe como argumento y cargarla en la varable "pos"
   //
   var ele = document.getElementById(Ident) ;
   var alt = parseInt(ele.style.height, 10) ;  // retorna un entero en base 10
   // 
   // Si el estilo del elemento no está asignado 'inline' "alt" estará vacía y 
   // hay que leer el dato de las hojas de estilo que tiene un metodo distinto
   // en cada explorador.
   //
   if (isNaN(alt)) { 
      switch (window.navigator.appName) {
         case NS: // Mocilla FireFox
            alt = parseInt(window.getComputedStyle(ele, null).getPropertyValue('height'), 10) ;
            break ;
         case IE: // Internet Explorer
            //
            // Hay que mirar en todas las hojas de estilo para buscar el selector
            // adecuado ('#' + Ident) y una vez encontrado, leer el atributo 'height'
            //
            var hojas = document.styleSheets ;
               for ( i = 0; i < hojas.length; i++ ) {
               var reglas = document.styleSheets[i].rules ;
               for (j=0; j < reglas.length; j++) {
                  if (reglas[j].selectorText == ('#' + Ident)) {
                     alt = parseInt(reglas[j].style.height, 10) ;
                     break ;
                  }
               }
               if (!isNaN(alt)) break ;
            }
         break ;
         default: break ;
      }
   }
   return alt ;   
}

//==============================================================================
// Función dvrActivaCampoFich(Ident)
//
function dvrActivaCampoFich(Ident) {
   var NumFoto = Ident.substr(2) ;
   var ele = document.getElementById('CF'+NumFoto) ;
   if (ele.checked) {
      ele = document.getElementById('LF'+NumFoto) ;
      ele.disabled = false ;
      ele.style.color = '#000057' ;
      ele = document.getElementById('TF'+NumFoto) ;
      ele.disabled = false ;
      ele.style.backgroundColor = '#E0E090' ;
      ele.style.color = '#000057' ;
   } else {
      ele = document.getElementById('LF'+NumFoto) ;
      ele.disabled = true ;
      ele.style.color = '#666666' ;
      ele = document.getElementById('TF'+NumFoto) ;
      ele.disabled = true ;
      ele.style.backgroundColor = '#999999' ;
      ele.style.color = '#666666' ;
   }
}

//==============================================================================
// Función dvrActivaBotonNuevoFich(Ident)
//
function dvrActivaBotonNuevoFich(Ident) {
   //alert('Se ha llamado a la función') ;
   var NumFoto = Ident.substr(2) ;
   ele = document.getElementById('BF'+NumFoto) ;
   ele.disabled = false ;
   ele.style.backgroundColor = '#E0E090' ;
   ele.style.color = '#000057' ;
   ele.style.display = 'inline' ;
}

//==============================================================================
// Función dvrOcultaBotonNuevoFich(Ident)
//
function dvrOcultaBotonNuevoFich(Ident) {
   var NumFoto = Ident.substr(2) ;
   ele = document.getElementById('BF'+NumFoto) ;
   ele.disabled = true ;
   ele.style.backgroundColor = '#999999' ;
   ele.style.color = '#666666' ;
   ele.style.display = 'none' ;
}

//==============================================================================
// Función dvrSeleccionaActividad()
//
function dvrSeleccionaActividad() {
   var ele = document.getElementById('TActividad')
   var actividad = ele.options[ele.selectedIndex].text ;

   if (actividad == 'Descanso') {
      document.getElementById('TRuta').selectedIndex = 0 ;
      document.getElementById('dirr').value = '' ;
      document.getElementById('TCita').value = '' ;
      document.getElementById('TAdver').value = '' ;
   } else {
      document.getElementById('TCita').value = document.getElementById('tempcita').value ;
      document.getElementById('TAdver').value = document.getElementById('tempadve').value ;
   }
}

//==============================================================================
// Función dvrOpcionesDiasSemana()
//
function dvrOpcionesDiasSemana() {
   var Fecha = new Date() ;
   
   document.write('<option class="opcion opnormal">Domingo</option>') ;
   document.write('<option class="opcion opclara">Lunes</option>') ;
   document.write('<option class="opcion opnormal">Martes</option>') ;
   document.write('<option class="opcion opclara">Miercoles</option>') ;
   document.write('<option class="opcion opnormal">Jueves</option>') ;
   document.write('<option class="opcion opclara">Viernes</option>') ;
   document.write('<option class="opcion opnormal">S&aacute;bado</option>') ;
   
   document.getElementById('TDiaSem').selectedIndex = Fecha.getDay() ;
}

//==============================================================================
// Función dvrOpcionesDiasMes()
//
function dvrOpcionesDiasMes(n, id) {
   var Fecha = new Date() ;

   for (i=1; i<=31; i++) 
      if (i<=9)
         if (parseInt(n)==i) document.write('<option class="opcion" selected>0'+i+'</option>')
         else  document.write('<option class="opcion">0'+i+'</option>')
      else
         if (parseInt(n)==i) document.write('<option class="opcion" selected>'+i+'</option>')
         else document.write('<option class="opcion">'+i+'</option>')

   if (n == '') document.getElementById(id).selectedIndex = (Fecha.getDate()-1) ;
}

//==============================================================================
// Función dvrOpcionesMeses() 
//
function dvrOpcionesMeses(n, id) {
   var Fecha = new Date() ;
   var mes = '' ;

      //alert ('El argumento n es = ' + n ) ;
      switch (n) {
         case     '1':
         case    '01':
         case   'Ene':
         case   'ene':
         case 'Enero':
         case 'enero':
            mes = 'Enero' ;  break ;
         case     '2':
         case    '02':
         case   'Feb':
         case   'feb':
         case 'Febrero':
         case 'febrero':
            mes = 'Febrero' ; break ;
         case     '3':
         case    '03':
         case   'Mar':
         case   'mar':
         case 'Marzo':
         case 'marzo':
            mes = 'Marzo' ;  break ;
         case     '4':
         case    '04':
         case   'Abr':
         case   'abr':
         case 'Abril':
         case 'abril':
             mes = 'Abril' ;  break ;
         case     '5':
         case    '05':
         case   'May':
         case   'may':
         case 'Mayo':
         case 'mayo':
            mes = 'Mayo' ;  break ;
         case     '6':
         case    '06':
         case   'Jun':
         case   'jun':
         case 'Junio':
         case 'junio':
            mes = 'Junio' ; break ;
         case     '7':
         case    '07':
         case   'Jul':
         case   'jul':
         case 'Julio':
         case 'julio':
            mes = 'Julio' ; break ;
         case     '8':
         case    '08':
         case   'Ago':
         case   'ago':
         case 'Agosto':
         case 'agosto':
            mes = 'Agosto' ; break ;
         case     '9':
         case    '09':
         case   'Sep':
         case   'sep':
         case 'Septiembre':
         case 'septiembre':
            mes = 'Septiembre' ; break ;
         case    '10':
         case   'Oct':
         case   'oct':
         case 'Octubre':
         case 'octubre':
            mes = 'Octubre' ; break ;
         case     '11':
         case   'Nov':
         case   'nov':
         case 'Noviembre':
         case 'noviembre':
            mes = 'Noviembre' ; break ;
         case     '12':
         case   'Dic':
         case   'dic':
         case 'Diciembre':
         case 'diciembre':
            mes = 'Diciembre' ; break ;
         default: break ;
      }
      //alert ('El mes es = ' + mes ) ;
      if (mes == 'Enero') document.write('<option class="opcion opnormal" selected>Enero</option>') ;
      else document.write('<option class="opcion opnormal">Enero</option>') ;
      if (mes == 'Febrero') document.write('<option class="opcion opclara" selected>Febrero</option>') ;
      else document.write('<option class="opcion opclara">Febrero</option>') ;
      if (mes == 'Marzo') document.write('<option class="opcion opnormal" selected>Marzo</option>') ;
      else document.write('<option class="opcion opnormal">Marzo</option>') ;
      if (mes == 'Abril') document.write('<option class="opcion opclara" selected>Abril</option>') ;
      else document.write('<option class="opcion opclara">Abril</option>') ;
      if (mes == 'Mayo') document.write('<option class="opcion opnormal" selected>Mayo</option>') ;
      else document.write('<option class="opcion opnormal">Mayo</option>') ;
      if (mes == 'Junio') document.write('<option class="opcion opclara" selected>Junio</option>') ;
      else document.write('<option class="opcion opclara">Junio</option>') ;
      if (mes == 'Julio') document.write('<option class="opcion opnormal" selected>Julio</option>') ;
      else document.write('<option class="opcion opnormal">Julio</option>') ;
      if (mes == 'Agosto') document.write('<option class="opcion opclara" selected>Agosto</option>') ;
      else document.write('<option class="opcion opclara">Agosto</option>') ;
      if (mes == 'Septiembre') document.write('<option class="opcion opnormal" selected>Septiembre</option>') ;
      else document.write('<option class="opcion opnormal">Septiembre</option>') ;
      if (mes == 'Octubre') document.write('<option class="opcion opclara" selected>Octubre</option>') ;
      else document.write('<option class="opcion opclara">Octubre</option>') ;
      if (mes == 'Noviembre') document.write('<option class="opcion opnormal" selected>Noviembre</option>') ;
      else document.write('<option class="opcion opnormal">Noviembre</option>') ;
      if (mes == 'Diciembre') document.write('<option class="opcion opclara" selected>Diciembre</option>') ;
      else document.write('<option class="opcion opclara">Diciembre</option>') ;

   if (n == '') document.getElementById(id).selectedIndex = Fecha.getMonth() ;
}

//==============================================================================
// Función dvrCalculaAnio(n, id)
//
function dvrCalculaAnio(n, id) {
   var fecha = new Date()
   var anio = '' ;

   if (n == '') anio = fecha.getFullYear() ;
   else
      if (n.length > 1) anio = '20' + n.substring((n.length-2)) ;
      else anio = '200' + n ;

   if (anio == fecha.getFullYear()) document.write('<option class="opcion" selected>'+anio+'</option>') ;
   else document.write('<option class="opcion">'+anio+'</option>') ;
   if (anio == (fecha.getFullYear()+1)) document.write('<option class="opcion" selected>'+(parseInt(anio)+1)+'</option>') ;
   else  document.write('<option class="opcion">'+(parseInt(anio)+1)+'</option>') ;
}

//==============================================================================
// Función dvrOpcionesHora()
//
function dvrOpcionesHora(n, id) {
   var Fecha = new Date() ;
   
      for (i=0; i<=23; i++) 
         if (i<=9)
            if (parseInt(n)==i) document.write('<option class="opcion" selected>0'+i+'</option>')
            else  document.write('<option class="opcion">0'+i+'</option>')
         else
            if (parseInt(n)==i) document.write('<option class="opcion" selected>'+i+'</option>')
            else document.write('<option class="opcion">'+i+'</option>')

   //if (n == '') document.getElementById(id).selectedIndex = (Fecha.getDate()-1) ;
}

//==============================================================================
// Función dvrOpcionesMinuto()
//
function dvrOpcionesMinuto(n, id) {
   var Fecha = new Date() ;
   
      for (i=0; i<=59; i++) 
         if (i<=9)
            if (parseInt(n)==i) document.write('<option class="opcion" selected>0'+i+'</option>')
            else  document.write('<option class="opcion">0'+i+'</option>')
         else
            if (parseInt(n)==i) document.write('<option class="opcion" selected>'+i+'</option>')
            else document.write('<option class="opcion">'+i+'</option>')

   //if (n == '') document.getElementById(id).selectedIndex = (Fecha.getDate()-1) ;
}

//==============================================================================
// Función dvrGuardaNumeroMes()
//
function dvrGuardaNumeroMes() {
   document.getElementById('mesn').value = (document.getElementById('TMes').selectedIndex+1) ;
}

//==============================================================================
// Función dvrGuardaDirectorio()
//
function dvrGuardaDirectorio(m) {
   document.getElementById('dirr').value = m[((document.getElementById('TRuta').selectedIndex)-1)][2] ;
}

//==============================================================================
// Función dvrListaTodasLasRutas()
//
function dvrListaTodasLasRutas(m, id) {
   var lista = document.getElementById(id) ;
   var clase = '' ;
   var ls = 0 ;
   //
   // Primero se borra el posible contenido de la lista
   //
   lista.options.length = 0 ;
   //
   // Carga la lista con los nombres de las rutas.
   //
   lista.options[ls++] = new Option('Seleccione la ruta', null, false, false);
   for (var i=0; i < m.length ; i++) {
      lista.options[ls++] = new Option(m[i][0], null, false, false);
      //
      // Con las siguientes líneas asignamos una clase a cada opción (clara y normal)
      // para que unas líneas se vean un poquito más claras que las otras.
      //
      // Las líneas comentadas funcionan con FF pero no con IE
      //
      //if ((ls%2) == 0) lista.options[(ls-1)].setAttribute('class', 'opclara') ;
      //else lista.options[(ls-1)].setAttribute('class', 'opnormal') ;
      //
      clase = document.createAttribute('class') ;
      if ((ls%2) == 0) clase.value = 'opcion opclara' ; 
      else clase.value = 'opcion opnormal' ; 
      lista.options[(ls-1)].attributes.setNamedItem(clase) ;
   }
}

//==============================================================================
// Función dvrEliminaFecha()
//
function dvrEliminaFecha(ele) {
   var inc = 245 ;      // la altura del hueco que se abrirá en cada caso
   var e ;
   var form ;
   
   //
   // Se carga el padre del elemento que se ha recibido como argumento.
   //
   e = ele.parentNode ;
   e = e.parentNode ;
   form = e.parentNode ;
   e = form.removeChild(e) ;
   //
   // Ahora hay que mover los tres botones para arriba.
   //
   e = document.getElementById('Cancelar') ;
   e.style.top = (dvrLeerPosicionVerticalElemento(e.id) - inc) + 'px' ;
   e = document.getElementById('Enviar') ;
   e.style.top = (dvrLeerPosicionVerticalElemento(e.id) - inc) + 'px' ;
   e = document.getElementById('Insertar') ;
   e.style.top = (dvrLeerPosicionVerticalElemento(e.id) - inc) + 'px' ;
   //
   // El formulario se hace un poco más corto
   //
   form.style.height = (parseInt(dvrLeerAlturaElemento(form.id)) - inc) + 'px' ;
}

//==============================================================================
// Función dvrInsertaNuevaFecha()
//
function dvrInsertaNuevaFecha(ele) {
   var inc = 245 ;      // la altura del hueco que se abrirá en cada caso
   var numFecha = '' ;  // contendrá el número a añadir a los ID de cada control
   var nuevo = '' ;
   var e = '' ;
   numFecha = document.getElementById('nid').value ;
   //
   // Se carga el formulario que es el padre del elemento que se ha recibido como 
   // argumento.
   //
   var form = ele.parentNode ;
   //
   // El formulario se hace un poco más largo
   //
   form.style.height = (parseInt(dvrLeerAlturaElemento(form.id)) + inc) + 'px' ;
   //
   // Ahora hay que mover los tres botones para abajo.
   //
   e = document.getElementById('Cancelar') ;
   e.style.top = (dvrLeerPosicionVerticalElemento(e.id) + inc) + 'px' ;
   e = document.getElementById('Enviar') ;
   e.style.top = (dvrLeerPosicionVerticalElemento(e.id) + inc) + 'px' ;
   e = document.getElementById('Insertar') ;
   e.style.top = (dvrLeerPosicionVerticalElemento(e.id) + inc) + 'px' ;
   //
   // Una vez que se ha abierto el hueco, se inserta un nuevo conjunto de controles que 
   // permita añadir los datos de una nueva fecha. Para eso lo primero se clonará 
   // el original del formulario con todos sus hijos
   //
   var m = form.getElementsByTagName("div")
   // 
   // Ahora hay que hacer lo siguiente:
   //     Cambiar el "id" al nuevo elemento, y a sus hijos, para que no se repitan en el 
   //           documento. 
   //     Limpiar el contenido y el estado de los campos para que al insertarlo quede 
   //           a punto.
   //
   nuevo = document.getElementById(m[0].id).cloneNode(true) ; 
   nuevo.id = 'F' + (parseInt(numFecha)) ;
   e = nuevo.getElementsByTagName("div")[0] ;
   e.id = 'FI' + (parseInt(numFecha)) ;
   // 
   // Ahora hay que cambiar el "id" y "name" de los hijos: 
   //     El DIV del marco interior (FIx)
   //     El día del mes (DMx)
   //     El mes (MEx)
   //     El año (ANx)
   //     El botón de eliminar (BTx)
   //     El título de la excursión (ETx)
   //     El lugar o nombre del pueblo más cercano (LNx)
   //     El tipo de ruta  (TRx)
   //     La longitud (LGx)
   //     La duración de la marcha (DUx)
   //     El desnivel (DEx)
   //     La didficultad (DIx)
   //     El transporte (TTx)
   //     La distancia al punto de partida (DTx)
   //     Las observaciones (OBx)
   //
   for (i=0; i<e.childNodes.length; i++) {
      if (e.childNodes[i].id) {
         cad = e.childNodes[i].id.substr(0,2) ;
         switch (cad) {
            case 'ET':  // Título
            case 'LN':  // Lugar
            case 'LG':  // Longitud
            case 'DU':  // Duración
            case 'DE':  // Desnivel
            case 'TT':  // Transporte
            case 'DT':  // Distancia
            case 'OB':  // Observaciones
               e.childNodes[i].id = cad + (parseInt(numFecha)) ;
               e.childNodes[i].name = cad + (parseInt(numFecha)) ;
               e.childNodes[i].value = '' ;
               break;
          
            case 'DM':  // Día del mes
            case 'ME':  // Mes
            case 'AN':  // Año
            case 'TR':  // Tipo de ruta
            case 'DI':  // Dificultad
               e.childNodes[i].id = cad + (parseInt(numFecha)) ;
               e.childNodes[i].name = cad + (parseInt(numFecha)) ;
               e.childNodes[i].selectedIndex = 0 ;
               break;

            case 'BT':  // Botón eliminar
               e.childNodes[i].id = cad + (parseInt(numFecha)) ;
               break;
             default : break ;
         }   
      }
   }
   document.getElementById('nid').value = (parseInt(numFecha) + 1) ;
   form.insertBefore(nuevo, ele) ;
}

//==============================================================================
// Función dvrEliminaRegistro(ele)
//
// Elimina un registro de evento en el formulario de última hora.
// Se invoca picando en el botoón eliminar de cada registro del formulario.
// Recibe como argumento el elemento desde el que se invoca (el botón)
//
function dvrEliminaRegistro(ele) {
   var inc = 90 ;      // la altura que debe perder el formulario al borrar un registro
   var e ;
   var form ;
   var numReg = 0 ;
                
   //
   // Antes de eleiminar un registro se comprueba si hay una ventana de búsqueda
   // de URL abierta. Si hay una ventana abierta y corresponde con el registro que
   // se pretende borrar se lanza un aviso y no se hace nada.
   //
   if ((nwin == '') || ((nwin != '') && (nwin != ('UR' + ele.id.substr(2))))) {
      //
      // Se carga el padre del elemento que se ha recibido como argumento hasta 
      // llegar al formulario.
      //
      e = ele.parentNode ;
      e = e.parentNode ;
      form = e.parentNode ;
      //
      // Se cuenta el número de registros que hay y si solo queda uno, se avisa 
      // de que no se pueden eliminar todos. Si hay más de uno se elimina normalmente
      //
      var m = form.getElementsByTagName("div") ;
      for (var i = 0; i<(m.length-1); i++) {
         if (m[i].className == 'reg0') numReg++ ;
      }
      if (parseInt(numReg) >= 2) {
         e = form.removeChild(e) ;
         //
         // Ahora hay que mover los dos botones para arriba.
         //
         e = document.getElementById('Cancelar') ;
         e.style.top = (dvrLeerPosicionVerticalElemento(e.id) - inc) + 'px' ;
         e = document.getElementById('Enviar') ;
         e.style.top = (dvrLeerPosicionVerticalElemento(e.id) - inc) + 'px' ;
         //
         // El formulario se hace un poco más corto
         //
         form.style.height = (parseInt(dvrLeerAlturaElemento(form.id)) - inc) + 'px' ;
      } else
         alert ('No se puede borrar, debe quedar como mínimo un registro') ;
   } else
      alert ('Hay una ventana de búsqueda de URL abierta para este registro.\n\nEs necesario cerrar la ventana abierta antes de eliminar el elemento.') ;
}

//==============================================================================
// Función dvrInsertaNuevoReg() 
// 
// Para añadir un registro de evento en el formulario de última hora
//
function dvrInsertaNuevoReg(ele) {
   var Fecha = new Date() ;
   var inc = 90 ;      // la altura del hueco que se abrirá para insertar un nuevo ragistro
   var numReg = '' ;   // contendrá el número a añadir a los ID de cada control
   var nuevo = '' ;
   var e = '' ;
   var p = '' ;
   var form = '' ;
   //
   // Lo primero es leer el número que habrá que añadir a los ID de los campos del 
   // nuevo registro, para diferenciarlos de los otros registros que pueda haber.
   // El valor a leer estará en el campo oculto del formulario con el ID 'nid'
   //
   numReg = document.getElementById('nid').value ;
   //
   // Se carga el formulario que es el padre del elemento que se ha recibido como 
   // argumento.
   //
   e = ele.parentNode ;
   e = e.parentNode ;
   form = e.parentNode ;
   //
   // El formulario se hace un poco más largo
   //
   form.style.height = (parseInt(dvrLeerAlturaElemento(form.id)) + inc) + 'px' ;
   //
   // Ahora hay que mover todos los registros para abajo y empezamos por los botones.
   //
   e = document.getElementById('Cancelar') ;
   e.style.top = (dvrLeerPosicionVerticalElemento(e.id) + inc) + 'px' ;
   e = document.getElementById('Enviar') ;
   e.style.top = (dvrLeerPosicionVerticalElemento(e.id) + inc) + 'px' ;
   // 
   // Ahora se inserta un nuevo conjunto de controles que permita añadir los 
   // datos de un nuevo registro. Para eso lo primero se clonará el primer 
   // <div> de la clase "reg0" que se encuentre
   //
   var m = form.getElementsByTagName("div") ;
   for (i=0; i<(m.length-1); i++) {
      if (m[i].className == 'reg0') {
         p = m[i] ;
         nuevo = document.getElementById(m[i].id).cloneNode(true) ; 
         break ;
      }
   }
   // 
   // Antes de insertar el nuevo elemento hay que hacer lo siguiente:
   //     Cambiar el "id" al nuevo elemento, y a sus hijos, para que no se repitan en el 
   //           documento. 
   //     Limpiar el contenido y el estado de los campos para que al insertarlo quede 
   //           a punto.
   //
   nuevo.id = 'RE' + (parseInt(numReg)) ;
   e = nuevo.getElementsByTagName("div")[0] ;
   e.id = 'RI' + (parseInt(numReg)) ;
   // 
   // Ahora hay que cambiar el "id" y "name" de los hijos: 
   //     El día del mes (DMx)
   //     El mes (MEx)
   //     El año (ANx)
   //     El botón de eliminar (BTx)
   //     La descripción (DEx)
   //     El enlace (URx)
   //     El botón para buscar (BUx)
   //
   for (i=0; i<e.childNodes.length; i++) {
      if (e.childNodes[i].id) {
         cad = e.childNodes[i].id.substr(0,2) ;
         switch (cad) {
            case 'DE':  // Descripción
            case 'UR':  // URL destino del enlace
               e.childNodes[i].id = cad + (parseInt(numReg)) ;
               e.childNodes[i].name = cad + (parseInt(numReg)) ;
               e.childNodes[i].value = '' ;
               break;
            case 'DM':  // Día del mes
               e.childNodes[i].id = cad + (parseInt(numReg)) ;
               e.childNodes[i].name = cad + (parseInt(numReg)) ;
               e.childNodes[i].selectedIndex = (Fecha.getDate()-1) ;
               break;
            case 'ME':  // Mes
               e.childNodes[i].id = cad + (parseInt(numReg)) ;
               e.childNodes[i].name = cad + (parseInt(numReg)) ;
               e.childNodes[i].selectedIndex = Fecha.getMonth() ;
               break;
            case 'AN':  // Año
               e.childNodes[i].id = cad + (parseInt(numReg)) ;
               e.childNodes[i].name = cad + (parseInt(numReg)) ;
               e.childNodes[i].selectedIndex = 0 ;
               break;

            case 'BT':  // Botón eliminar
            case 'BU':  // Botón buscar URL
               e.childNodes[i].id = cad + (parseInt(numReg)) ;
               break;
             default : break ;
         }   
      }
   }
   //
   // También hay que cambiar el argumento que se pasará a la función dvrBuscarURL(id)
   //
   
   document.getElementById('nid').value = (parseInt(numReg) + 1) ;
   form.insertBefore(nuevo, p) ;
}

//==============================================================================
// Función dvrOpcionesEnlace()
//
/*
function dvrOpcionesEnlace(n, id) {
      document.write('<option class="opcion opnormal" selected>Sin enlace</option>') ;
      document.write('<option class="opcion opclara">Descripci&oacute;n</option>') ;
      document.write('<option class="opcion opnormal">Fotos</option>') ;
      document.write('<option class="opcion opclara">Plano</option>') ;
      document.write('<option class="opcion opnormal">Pr&oacute;xima salida</option>') ;
      document.write('<option class="opcion opclara">Entrada</option>') ;
      document.write('<option class="opcion opnormal">URL</option>') ;
}
*/

//==============================================================================
// Función dvrGestionaEnlace()
//
/*
function dvrGestionaEnlace(e) {
   alert('Se ha llamado a la función "dvrGestionaEnlace"') ;
}
*/

//==============================================================================
// Función dvrBuscarURL(ele)
//
// Esta función se lanza para buscar la URL que quedará definida como destino 
// del enlace de un evento de última hora.
// 
// Recibirá como argumento el elemento desde el que se ha invocado la función
// que nos servirá para determinar el campo de texto 'UR' en el que se deberá
// guardar la URL
//
function dvrBuscarURL(ele) {
   var id = 'UR' ;
   
   if (win == '') {
      id = id + ele.id.substr(2) ;
      win = window.open('index.php',id,'',false) ;
      nwin = win.name ;
      if(!win.closed) {
         Interval = setInterval('dvrCapturaLocalizacion("'+id+'")', 1000) ;
      } else alert('La ventana se ha cerrado') ;
   } else
      alert('Hay una ventana de búsqueda de URL abierta.\n\nEs necesario cerrar la ventana abierta antes de abrir otra nueva.') ;
}

//==============================================================================
// Función dvrCapturaLocalizacion()
//
function dvrCapturaLocalizacion(id) {
   var e = window.document.getElementById(id) ;
   if(!win.closed) {
      e.value = win.location.pathname + win.location.hash + win.location.search ;
   } else {
      window.clearInterval(Interval) ;
      win = '' ;
      nwin = '' ;
   }
}

//==============================================================================
// Función dvrCargaNumeroDeRuta()
// 
// Carga en el formulario de la nueva ruta a crear, el número que le corresponda
// en función del tipo de ruta seleccionado
//
function dvrCargaNumeroDeRuta(id) {
   var e = window.document.getElementById(id) ;
   var ruta = new Array() ;
   var mx = 0 ;

   switch (e.options[e.selectedIndex].text) {
      case 'Visitadas' :
         for (var i = 0; i < rut.length; i++) {
            ruta = rut[i] ;
            if (ruta[1] == 'Visitadas')
               if (mx < parseInt(ruta[3])) mx = parseInt(ruta[3]) ;
         }
         break;
      case 'Exploradas' :
         for (var i = 0; i < rut.length; i++) {
            ruta = rut[i] ;
            if (ruta[1] == 'Exploradas')
               if (mx < parseInt(ruta[3])) mx = parseInt(ruta[3]) ;
         }
         break;
      case 'Urbanas' :
         for (var i = 0; i < rut.length; i++) {
            ruta = rut[i] ;
            if (ruta[1] == 'Urbanas')
               if (mx < parseInt(ruta[3])) mx = parseInt(ruta[3]) ;
         }
         break;
      case 'Otras' :
         for (var i = 0; i < rut.length; i++) {
            ruta = rut[i] ;
            if (ruta[1] == 'Otras')
               if (mx < parseInt(ruta[3])) mx = parseInt(ruta[3]) ;
         }
         break;
      default : break; 
   }
   var e = window.document.getElementById('TNumero') ;
   e.value = (mx+1) ;
}

//==============================================================================
// Función dvrTamanioFoto()
// 
//
function dvrTamanioFoto(T) {
   var c = '' ;
   
   lis = document.getElementsByTagName('img') ;
   switch (T) {
      case 0 : // Ver las fotos pequeñas (320*240)
         for (var j=0; j<lis.length; j++) {
            if (!lis[j].attributes.getNamedItem('class')) {
                continue ;
            } else {
               c = lis[j].attributes.getNamedItem('class').value ;    
               if ((c == 'ftgrp') || (c == 'ftgrm') || (c == 'ftgrg')) {
                  clase = document.createAttribute('class') ;
                  clase.value = 'ftgrp' ; 
                  lis[j].attributes.setNamedItem(clase) ;
               }
            }
         }
         break;
      case 1 : // Ver las fotos medianas (520*340)
         for (var j=0; j<lis.length; j++) {
            if (!lis[j].attributes.getNamedItem('class')) {
                continue ;
            } else {
               c = lis[j].attributes.getNamedItem('class').value ;    
               if ((c == 'ftgrp') || (c == 'ftgrm') || (c == 'ftgrg')) {
                  clase = document.createAttribute('class') ;
                  clase.value = 'ftgrm' ; 
                  lis[j].attributes.setNamedItem(clase) ;
               }
            }
         }
         break;
      case 2 : // Ver las fotos grandes (640*480)
         for (var j=0; j<lis.length; j++) {
            if (!lis[j].attributes.getNamedItem('class')) {
                continue ;
            } else {
               c = lis[j].attributes.getNamedItem('class').value ;    
               if ((c == 'ftgrp') || (c == 'ftgrm') || (c == 'ftgrg')) {
                  clase = document.createAttribute('class') ;
                  clase.value = 'ftgrg' ; 
                  lis[j].attributes.setNamedItem(clase) ;
               }
            }
         }
         break;
      default : break; 
   }
}
//
//==============================================================================
//==============================================================================
// Escribe en el documentos HTML los enlaces <a> a todas las fotos de 
// la matriz ListaFotos[] que está declarada en el fichero "listadefotos.js"
//
//===============================================================================
function dvrCreaEnlacesAFotos(Clase) {
   var alterfotogra = "Para terminar, o hacer cualquier otro cambio, utilice los controles inferiores" ;
   var enlacefotos = "Ver fotos" ;

   switch (Clase){
      case "enlacefoto":
         for (var j in ListaFotos) {
            document.write('<a id="vf'+j+'" class="'+Clase+'" href="Base.php?a=Foto&amp;r='+Dir+'"><img class="fotope" alt="'+enlacefotos+'" src="'+DirFotos+ListaFotos[j]+'"></a>');
         }
         break ;
      case "fotogra":
         for (var j in ListaFotos) {
            document.write('<a id="vf' + j + '" class="'+Clase+'"><img class="ftgrg" alt="'+alterfotogra+'" src="'+DirFotos+ListaFotos[j]+'"></a>');
         }
         break ;
      default: 
         alert('No se ha reconocido la clase');      
   }
}
//
//==============================================================================
// Fin del fichero
//==============================================================================


