
  /* Fichero: FormXXRegistro.js * Email nom telefon poblacio consulta 


  /* Funciones incluidas:

     Validar(Form) -> Llama a las funciones correspondientes
                      que validan campos de forma separada.
                      El parámetro 'Form' es una referencia
                      al formulario desde el que es llamada.
       Modo de uso: 
         onClick='return Validar(this.form);'
         dentro de un formulario

     ValidarNombre(nom, telefon, poblacio, consulta)
     ValidarEmail(Email)
     ValidarClave(Usuario, Clave1, Clave2)
     ValidarEdad(Edad)
     ValidarFecha(Form)
     ValidarWeb(Web)



/* Función genérica para validar el formulario que llama
   a varias funciones: así se desglosa el trabajo y se
   depura más fácilmente en caso de errores  nom, telefon, poblacio, consulta */

  function Validar(Form)  {
    return (
         ValidarNombre(Form.nom.value, Form.telefon.value, Form.poblacio.value, Form.consulta.value)
      && ValidarEmail(Form.Email.value)
      && ValidarClave(Form.Usuario.value, Form.Clave1.value, Form.Clave2.value)
      && ValidarEdad(Form.Edad.value)
      && ValidarWeb(Form.Web.value)
      && ValidarFecha(Form)
      );
   }

/* Función para validar los campos nom, telefon, poblacio, consulta */

  function ValidarNombre(nom, telefon, poblacio, consulta)  {
    var cadena = "There is a field without data.\n"
      + "It is not possible to send form!, fill out"
      + "every field!";

    if ( nom == "" || telefon == "" || poblacio == "" || consulta == "")  {
      alert(cadena);
      return false;
      }
    else return true;
    }

/* Función para validar la dirección de e-mail */

  function ValidarEmail(Email){
    var cadena = "Incorrect email adress: " +  Email
      + "\nPlease, introduce email correctly!";

    if( Email.indexOf('@',0) <= 0  || Email.indexOf(';',0) != -1
     || Email.indexOf(' ',0) != -1 || Email.indexOf('/',0) != -1
     || Email.indexOf(';',0) != -1 || Email.indexOf('<',0) != -1
     || Email.indexOf('>',0) != -1 || Email.indexOf('*',0) != -1
     || Email.indexOf('|',0) != -1 || Email.indexOf('`',0) != -1
     || Email.indexOf('&',0) != -1 || Email.indexOf('$',0) != -1
     || Email.indexOf('!',0) != -1 || Email.indexOf('"',0) != -1
     || Email.indexOf(':',0) != -1 )
       { alert(cadena); return false; }
    else return true;
    }

/* Función para validar el nombre de usuario y la clave */

  function ValidarClave(Usuario, Clave1, Clave2)  {
    var Error0 = "El nombre de usuario no está introducido o "
      + "contiene algún carácter extraño, revíselo";
    var Error1 = "Falta alguno de los campos de la clave "
      + "por rellenar.";
    var Error2 = "Las claves no coinciden.";

  /* Aquí podeis poner tantos caracteres no permitidos por
     vosotros como querais (dentro del if) */

    if(
        Usuario == "" || Usuario.indexOf('ñ') >= 0
        || Usuario.indexOf('?') >= 0 || Usuario.indexOf('á') >= 0
        || Usuario.indexOf('é') >= 0 || Usuario.indexOf('í') >= 0
        || Usuario.indexOf('ó') >= 0 || Usuario.indexOf('ú') >= 0
       )  {
      alert(Error0);
      return false;
      }

    if( Clave1 == "" || Clave2 == "" ) {
      alert(Error1);
      return false;
      }
    else
      if ( Clave1 != Clave2 ) {
        alert(Error2);
        return false;
        }
      else return true;

    }

/* Función para validar la edad, si es que se
   introduce alguna */

  function ValidarEdad(Edad) {
    var Error = "La edad introducida es inválida.\n"
      + "Revísela, por favor.";

    if (Edad == "") return true;
    else
      if( isNaN(parseInt(Edad)) || parseInt(Edad) <= 0 ) {
        alert(Error);
        return false;
        }
      else return true;
    }

/* Función para validar la dirección de la página web, si es
   que se introduce alguna */

  function ValidarWeb(Web) {
    var Error = "La dirección web introducida es inválida.\n"
      + "Revísela, por favor.";

    if (Web == "") return true;
    else
      if( Web.substring(0, 7) != 'http://'
          ||
          Web.indexOf('.') < 0
        ) {
        alert(Error);
        return false;
        }
      else return true;
    }


/* Función para validar la fecha, si es que se
   introduce alguna */

  function ValidarFecha(Form)  {
    var Error = "La fecha introducida es inválida.\n"
      + "Revísela, por favor.";
    var Dia, Mes, Anyo, Dia_Mes_Mal = false;
    var MesElegido = Form.FNMes.selectedIndex;

    Dia = Form.FNDia.value;
    Mes = Form.FNMes.options[MesElegido].value;
    Anyo = Form.FNAnyo.value;

    if( Dia == "" && Mes == "" && Anyo == "" ) return true;
    else {
      Dia = parseInt(Dia);
      Mes = parseInt(Mes);
      Anyo = parseInt(Anyo);

      if( !isNaN(Dia) && !isNaN(Mes) && !isNaN(Anyo)
          &&
          Dia >= 1 && Anyo >= 1900
        )  {

        /* Los meses de Enero, Marzo, Mayo, Julio, Agosto,
           Octubre y Diciembre tienen 31 días */

        if( 
           (   Mes == 1 || Mes == 3 || Mes == 5 || Mes == 7
            || Mes == 8 || Mes == 10 || Mes == 12
           )
          && Dia > 31
          )   Dia_Mes_Mal = true;

        /* Los meses de Mayo, Junio, Septiembre
           y Noviembre tienen 30 días */

        if(
           (Mes == 4 || Mes == 6 || Mes == 9 || Mes == 11)
          && Dia > 30
          )   Dia_Mes_Mal = true;

    /* Febrero tiene 28 ó 29 días, dependiendo de si es bisiesto
       o no. Un año es bisiesto si es múltiplo de 4 pero no de
       100 salvo que sea múltiplo de 400. Por ejemplo, 12 y 400
       son bisiestos, pero 100 y 700 no. */

        if( Mes == 2 && 
            ( Dia > 29 ||
              ( Dia == 29 &&
                ( 
                  (Anyo % 400 != 0)
                  && (
                     (Anyo % 4 != 0) || (Anyo % 100 == 0)
                     )
                )
              )
            )
           )  Dia_Mes_Mal = true;

        if(Dia_Mes_Mal)  {
          alert(Error);
          return false;
          }
        else return true;
        }   /* Si la fecha está fuera del rango razonable... */
      else  {
        alert(Error);
        return false;
        }
      }
    }