function esCorreoE(valor) {
  // (C)1999 Yehuda Shiran, Ph.D. - http://www.webreference.com
  var soporteRegExp=0;
  if (window.RegExp) {
    var tempTxt="a";
    var tempRegExp=new RegExp(tempTxt);
    if (tempRegExp.test(tempTxt)) soporteRegExp=1;
  }
  if (!soporteRegExp) return ((str.indexOf(".")>2) && (str.indexOf("@")>0));
  var prueba1=new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var prueba2=new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
  return (!prueba1.test(valor) && prueba2.test(valor));
}

/* Función usada para comprobar que se trata de un número.
 * .- valor: Valor a comprobar.
 * .- decimal: Si se pasa "1" se comprueba que sea un decimal, si se pasa "0" (o cualquier otra cosa) se comprueba que sea un número entero.
 */
function esNumero(valor, decimal) {
  var resultado=false;
  if (decimal=="1") {
    if (valor==parseFloat(valor)) resultado=true;
  } else {
    // Si no es decimal, además de comprobar que la conversión sea válida, comprobamos que no contenga punto.
    var posicionPunto=valor.indexOf("."); // Si no hay punto, devuelve -1
    if ((posicionPunto==-1) && (valor==parseInt(valor))) resultado=true;
  }
  return resultado;
}

/* Función usada para comprobar que un número es mayor que otro (no comprobamos que los números son válidos).
 * .- a: Valor menor a comprobar.
 * .- b: Valor mayor a comprobar.
 * .- decimal: Indicar "1" si se trata de valores con decimales, "0" en caso contrario.
 */
function esMayorNum(a,b,decimal) {
  var resultado=false;
  if (decimal=="1") {
    var valorA=parseFloat(a); var valorB=parseFloat(b);
    if (valorA<=valorB) resultado=true;
  } else {
    var valorA=parseInt(a); var valorB=parseInt(b);
    if (valorA<=valorB) resultado=true;
  }
  return resultado;
}

/* Función usada para comprobar que una fecha es posterior (o igual) a otra.
 * .- a: Fecha anterior a comprobar.
 * .- b: Fecha posterior a comprobar.
 */
function esMayorFecha(a,b) {
  var resultado=false;
  if (a=='0/0/0' || b=='0/0/0') {
    resultado=true;
  } else {
    if (fechaCorrecta(a) && fechaCorrecta(b)) {
      // Parseamos las fechas
      var fechaA=a.split('/'); var fechaB=b.split('/');
      // Convertimos cada parte a número en base decimal (si no interpretaría los que empiezan por 0 como números octales).
      var diaA=parseInt(fechaA[0],10); var diaB=parseInt(fechaB[0],10);
      var mesA=parseInt(fechaA[1],10); var mesB=parseInt(fechaB[1],10);
      var anioA=parseInt(fechaA[2],10); var anioB=parseInt(fechaB[2],10);
      // Comprobamos que la primera fecha sea anterior a la segunda.
      if (anioA<anioB) {
        resultado=true;
      } else if ((anioA==anioB) && (mesA<mesB)) {
        resultado=true;
      } else if ((anioA==anioB) && (mesA==mesB) && (diaA<=diaB)) {
        resultado=true;
      }
    }
  }
  return resultado;
}

/* Esta función permite invocar una subventana a modo de "asistente" que permitirá mostrar los valores de otra tabla para elegir alguno de sus valores.
 * .- o: Objeto o tipo de datos que se consultarán.
 * .- casValor: Nombre de la casilla del formulario (normalmente oculta) en la que se escribirá el valor "real". Si es múltiple, se escribirán todos los valores seguidos y separados por comas.
 * .- casEtiqueta: Nombre de la casilla del formulario en la que se escribirá el valor "etiqueta". Si es múltiple ha de ser una lista (SELECT), si no, ha de ser una casilla de texto.
 * .- multiple: "0" si queremos que sólo se pueda elegir un valor, "1" si queremos poder elegir varios.
 * .- bajaRuta: El asistente está pensado para desplegarse desde "http://servidor:puerto/Apli/index.jsp". Si se llama desde más allá de ese nivel, hay que indicar aquí el prefijo de la ruta relativa (ej. "../../").
 */
function listaAux(obj, casValor, casEtiqueta, multiple, bajaRuta) {
  if (multiple!="1") {multiple="0";}
  var parametros="?obj="+obj+"&casValor="+casValor+"&casEtiqueta="+casEtiqueta+"&multiple="+multiple;
  var ancho=400; var alto=240; var x=(screen.width-ancho)/2; var y=(screen.height-alto)/2; if (x<0) x=0; if (y<0) y=0;
  var geo="width="+ancho+",height="+alto+",top="+y+",left="+x;
  var ventana=window.open(bajaRuta+"jsp/aux/listaAux.jsp"+parametros,"listatabla","toolbar=0,location=0,directories=0,menuBar=0,scrollbars=yes,resizable=yes,"+geo);
  ventana.focus();
}

/* Función que permite comprobar si en una lista desplegable (SELECT) se ha elegido algún valor diferente de "0".
 * Devuelve verdadero si está vacía.
 * NOTA: El control hay que pasarlo por nombre (document.nombreForm.nombreControl), y no usando getElementById (no falla pero no funciona.) */
function compruebaListaVacia(controLista) {
  for(var i=0; i<controLista.length; i++) {
    if(controLista[i].selected==true) {
      if ((controLista[i].value.length) && (controLista[i].value!="0")) {return true;}
    }
  }
  return false;
}

/* Función que permite comprobar si se ha elegido alguno de los valores de un control de tipo RADIO o CHECKBOX.
 * Devuelve verdadero si se ha seleccionado alguno.
 * NOTA: El control hay que pasarlo por nombre (document.nombreForm.nombreControl), y no usando getElementById (no falla pero no funciona.) */
function elegidoCheckbox(controlCheckbox) {
  var exito=false;
  if (controlCheckbox[0]) { // Sólo es una matriz si hay más de una opción.
    for(var i=0; i<controlCheckbox.length; i++) {
      if(controlCheckbox[i].checked==true) {exito=true;}
    }
  } else {
    if(controlCheckbox.checked==true) {exito=true;}
  }
  return exito;
}

/* Función que permite comprobar si se ha escrito una fecha correcta en formato DD/MM/AAAA.
 * Devuelve verdadero si la fecha es válida (o si alguno de sus miembros es 0). */
function fechaCorrecta(fecha) {
  /* Definimos una función auxiliar local. */
  function dameAnio(n) {return (n<1000)?n+1900:n;}
  /* Inicializamos variables. */
  var exito=false;
  /* Comprobamos si recibimos la fecha en formato DD/MM/AAAA. */
  if (/^(0|[0-2]{1}[1-9]{1}|3[0-1]{1}|[1-9]|10|20)\/(0|0[1-9]{1}|1[0-2]{1}|[1-9]|10)\/(0|19[0-9]{2}|20[0-9]{2})$/.test(fecha)) {
    /* Cogemos las diferentes partes de la fecha. */
    var fecha2=fecha.split('/');
    /* Convertimos cada parte a número en base decimal (si no interpretaría los que empiezan por 0 como números octales). */
    var dia=parseInt(fecha2[0],10);
    var mes=parseInt(fecha2[1],10);
    var anio=parseInt(fecha2[2],10);
    /* Comprobamos que sea una fecha válida. */
    if (dia=='0' || mes=='0' || anio=='0') {
      exito=true;
    } else {
      mes=mes-1; // Los meses en javascript se numeran en el rango 0-11.
      var fechaTmp=new Date(anio,mes,dia);
      if ((dameAnio(fechaTmp.getYear())==anio) && (mes==fechaTmp.getMonth()) && (dia==fechaTmp.getDate())) exito=true;
    }
  }
  return exito;
}

/* Función que permite comprobar si se ha escrito un DNI válido (no vale para NIEs).
 * Devuelve verdadero si el DNI es válido. */
function dniCorrecto(dni) {
    var letraPasada=dni.charAt(dni.length-1).toUpperCase();
    var numeroPasado=dni.substring(0,dni.length-1);
    var letras=new Array('T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E','T');
    var resto=numeroPasado%23;
    var letra=letras[resto];
    if (letra==letraPasada) {return true;} else {return false;}
  }

/* Función que permite recomponer la fecha mostrada en los controles <iftl:controlFecha>. */
function componFecha(nombre) {
  dia=""; mes=""; anio="";
  dia=document.getElementById(nombre+'_dia').value;
  mes=document.getElementById(nombre+'_mes').value;
  anio=document.getElementById(nombre+'_anio').value;
  fecha=dia+"/"+mes+"/"+anio;
  if (!fechaCorrecta(fecha)) {alert('La fecha es incorrecta');}
  document.getElementById(nombre).value=fecha;
}

/* Mecanismo gráfico de botón libre/pulsado. Requiere la precarga de las imágenes correspondientes en cada página. */
// Ejemplos de precarga
// gestOfe0=new Image(); gestOfe0.src="img/bm0GestionarOfertas.gif";
// gestOfe1=new Image(); gestOfe1.src="img/bm1GestionarOfertas.gif";
// Al botón gráfico se le asignaría un name="gestOfe" y unos eventos onmouseover="javascript:enciende('gestOfe');" onmouseout="javascript:apaga('gestOfe');"
function enciende(nombreImg) {document[nombreImg].src=eval(nombreImg+"1.src");}
function apaga(nombreImg) {document[nombreImg].src=eval(nombreImg+"0.src");}

/* Función que elimina espacios de la parte inicial y final de un texto dado. */
function trim(txt) {
  while (txt.substring(0,1)==' ') {txt=txt.substring(1,txt.length);}
  while (txt.substring(txt.length-1,txt.length)==' ') {txt=txt.substring(0,txt.length-1);}
  return txt;
}

/* Función que muestra u oculta elementos HTML alternativamente. */
// Detectamos el navegador
NNav = navigator.appName; //funciona para Netscape 3+ o IE 4+
VNav = parseInt(navigator.appVersion);
if ((NNav=="Netscape" && VNav>=3) || (NNav=="Microsoft Internet Explorer" && VNav>=4))
  Navegador="NvModerno";
else
  Navegador="NvAntiguo";
function pliega(Nimg) {if (Navegador=="NvModerno") document[Nimg].src="txt/img/boloPlegado.gif";}
function despliega(Nimg) {if (Navegador=="NvModerno") document[Nimg].src="txt/img/boloDesplegado.gif";}
/* Función para plegar y desplegar secciones de texto HTML (DIV). */
// Parámetros:
// .- que: nombre del DIV que hay que manejar.
// .- imgSiNo: "1" significa que tenemos que cambiar una imagen (icono de plegado o algo similar).
function quitaYPon(que,imgSiNo) {
  var cabecera=que+"Cab";
  if (document.layers) {
    if (document.layers[que].display=='none') {vista='block'; if (imgSiNo==1) {despliega(cabecera);}}
      else {vista='none'; if (imgSiNo==1) {pliega(cabecera);}}
    document.layers[que].display=vista;
  } else if (document.all) {
    if (document.all[que].style.display=='none') {vista='block'; if (imgSiNo==1) {despliega(cabecera);}}
      else {vista='none'; if (imgSiNo==1) {pliega(cabecera);}}
    document.all[que].style.display=vista;
  } else if (document.getElementById) {
    if (document.getElementById(que).style.display=='none') {vista='block'; if (imgSiNo==1) {despliega(cabecera);}}
      else {vista='none'; if (imgSiNo==1) {pliega(cabecera);}}
    document.getElementById(que).style.display=vista;
  }
}

function activaMenu(que,estado) {
  var vista;
  if (estado) {vista='visible';} else {vista='hidden';}
  if (document.layers) {
    document.layers[que].visibility=vista;
  } else if (document.all) {
    document.all[que].style.visibility=vista;
  } else if (document.getElementById) {
    document.getElementById(que).style.visibility=vista;
  }
}