// AUTOR: Luis Miguel Martinez Portero
// MODIFICACO: Francisco Sanchez Alguacil (10/05/2002)

// Variables Globales
var swOK=0;
var nEle=0;
var sError='';

// VERIFICA EL FORMULARIO
//===================================
function Verifica(n) {
  var nTot=0;
  var nPas=0;
  var nTorna=0;
  sError="Lista de errores:                                           "+"\n";
  for (var j=0; j<n ; j++) {
    nEle=j;

    // AVERIGUA LOS TIPOS
    var sNom=document.forms[0].elements[j].name;
    var sOne=sNom.substring(0,1);
    var sTwo=sNom.substring(1,2);

    // CORREO OBLIGATORIO
    if (sOne=='e' && sTwo=='r') {
       CaracterNoValid(document.forms[0].elements[j].value,'Er');
       nTot+=swOK;
    }
    else
       if (sOne=='e' && document.forms[0].elements[nEle].value!='') {
           CaracterNoValid(document.forms[0].elements[j].value,'Eo');
           nTot+=swOK;
         }

    // NUMERICO Y OBLIGATORIO else NUMERICO NO OBLIGATORIO PERO INFORMADO
    if (sOne=='n' && sTwo=='r') {
       CaracterNoValid(document.forms[0].elements[j].value,'Nr');
       nTot+=swOK;
    }
    else
       if (sOne=='n' && document.forms[0].elements[nEle].value!='') {
           CaracterNoValid(document.forms[0].elements[j].value,'No');
           nTot+=swOK;
       }

    // CADENA Y OBLIGATORIA
    if (sOne=='s' && sTwo=='r') {
       CaracterNoValid(document.forms[0].elements[j].value,'Sr');
       nTot+=swOK;
    }
    // FECHAS CON FORMATO DD/MM/AA
    if (sOne=='f' && sTwo=='r'){
        CaracterNoValid(document.forms[0].elements[j].value,'Fr');
        nTot+=swOK;
    }
      else
       if (sOne=='f' && document.forms[0].elements[nEle].value!='') {
           CaracterNoValid(document.forms[0].elements[j].value,'Fo');
           nTot+=swOK;
       }    

    // LISTA DE ERRORES
    if (nPas==0 && nTot>0) {
      document.forms[0].elements[nEle].focus()
      nPas=1
    }
  }

  if (nTot>0)
     alert(sError);
  else
     document.forms[0].submit();
}

// VERIFICA EL FORMULARIO SIN ENVIAR
//===================================
// Verifica el formulario pasado por parametro
// y retorna una cadena con los errores encontrados
// o bien una cadena vacia si no encontro ninguno.
// llamada: Verifica("formDatos",10);
function VerificaSinEnvio(formulario, n) {
 var nTot=0;
  var nPas=0;
  var nTorna=0;
  sError="Lista de errores:                                           "+"\n";
  for (var j=0; j<n ; j++) {
    nEle=j;

    // AVERIGUA LOS TIPOS
    var sNom=document.forms[formulario].elements[j].name;
    var sOne=sNom.substring(0,1);
    var sTwo=sNom.substring(1,2);

    // CORREO OBLIGATORIO
    if (sOne=='e' && sTwo=='r') {
       CaracterNoValid(document.forms[formulario].elements[j].value,'Er');
       nTot+=swOK;
    }
    else
       if (sOne=='e' && document.forms[formulario].elements[nEle].value!='') {
           CaracterNoValid(document.forms[formulario].elements[j].value,'Eo');
           nTot+=swOK;
         }

    // NUMERICO Y OBLIGATORIO else NUMERICO NO OBLIGATORIO PERO INFORMADO
    if (sOne=='n' && sTwo=='r') {
       CaracterNoValid(document.forms[formulario].elements[j].value,'Nr');
       nTot+=swOK;
    }
    else
       if (sOne=='n' && document.forms[formulario].elements[nEle].value!='') {
           CaracterNoValid(document.forms[formulario].elements[j].value,'No');
           nTot+=swOK;
       }

    // CADENA Y OBLIGATORIA
    if (sOne=='s' && sTwo=='r') {
       CaracterNoValid(document.forms[formulario].elements[j].value,'Sr');
       nTot+=swOK;
    }
    // FECHAS CON FORMATO DD/MM/AA
    if (sOne=='f' && sTwo=='r'){
        CaracterNoValid(document.forms[formulario].elements[j].value,'Fr');
        nTot+=swOK;
    }
      else
       if (sOne=='f' && document.forms[formulario].elements[nEle].value!='') {
           CaracterNoValid(document.forms[formulario].elements[j].value,'Fo');
           nTot+=swOK;
       }    

    // LISTA DE ERRORES
    if (nPas==0 && nTot>0) {
      document.forms[formulario].elements[nEle].focus()
      nPas=1
    }
  }

  if (nTot>0)
     return sError;
  else
     return "";
}


// ANALIZA CAMPO A CAMPO SI SON NUMERICOS
//=========================================
function CaracterNoValid(pCaracter,pType) {
  swOK=0;
  // E-MAIL OBLIGATORIO
  if (pType=='Er') { 
   swOK=2
   for (var i=0;i<pCaracter.length;i++) {
     var sByte=pCaracter.substring(i,i+1);
     if (sByte=="@" || sByte==".") {
       swOK=swOK-1;
     } 
   }
   if (swOK>0) { sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser e-mail y es obligatorio" +"\r" }
   return;
 }

  // NUMERICO OBLIGATORIO
  if (pType=='Nr') {
    swOK=0;
    if (pCaracter=='') {
      swOK=1
      sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser numérico y es obligatorio" +"\r"
      return
    }

    for (var i=0;i<pCaracter.length;i++) {
      var sByte=pCaracter.substring(i,i+1);
      if (sByte<"0" || sByte>"9") {
        sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser numérico y es obligatorio" +"\r"
        swOK=1;
        return;
      } 
    }
  }

  // NUMERICO INFORMADO
  if (pType=='No') { 
    swOK=0;
    if (pCaracter=='')  {
      swOK=1
      sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser numérico y NO es obligatorio" +"\r"
      return
    }
    for (var i=0;i<pCaracter.length;i++) {
      var sByte=pCaracter.substring(i,i+1);
      if (sByte<"0" || sByte>"9") {
        sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser numérico y NO es obligatorio" +"\r"
        swOK=1;
        return;
      } 
    }
  }
  
  //FECHAS CON FORMATO DD/MM/AAAA para campos obligatorios
 if(pType=='Fr'){
   swOK=0;
    if (pCaracter=='') {
      swOK=1
      sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y es obligatorio" +"\r"
      return
    } 
    cadena=pCaracter;
    loncadena=cadena.length;
    //calculo la posicion de la primera barra
    posprimerabarra=cadena.search('/');
    if (posprimerabarra==-1){sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y es obligatorio" +"\r"
                             swOK=1;
                             return;}
    //obtengo la segunda subcadena para calcular la posicion de la segunda barra
    aux=cadena.substr(posprimerabarra+1,loncadena-(posprimerabarra+1));
    //busco la segunda barra en la segunda subcadena
    possegundabarra=aux.search('/');
    //esta posicion es relativa al substring que contiene la segunda barra
    if (possegundabarra==-1) {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y es obligatorio" +"\r"
                             swOK=1;
                             return;}
    possegundabarra=possegundabarra+posprimerabarra+1;
    //al tener ya las posiciones de las barras, obtengo el dia,mes y ańo
    dia=cadena.substr(0,posprimerabarra);
    mes=cadena.substr(posprimerabarra+1,possegundabarra-posprimerabarra-1);
    ano=cadena.substr(possegundabarra+1,4);
    //si introduce menos de cuatro digitos en el ańo retorno false
    if (ano.length!=4){sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y es obligatorio" +"\r"
                             swOK=1;
                             return;}
     //ahora se comienza a validar la fecha
     if (mes>=1 && mes<=12){
          if(mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12){
               if(dia>=1 && dia<=31)return true;
                     else {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y es obligatorio" +"\r"
                             swOK=1;
                             return;}
                    }
           if(mes==2){
               if((ano%4)==0){
                        //el ańo es bisiesto
                           if(dia>=1 && dia<=29)return true;
                               else {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y es obligatorio" +"\r"
                                      swOK=1;
                                       return;}
                              }        
                       else{
                            if(dia>=1 && dia<=28)return true;
                                else {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y es obligatorio" +"\r"
                                      swOK=1;
                                      return;}
                            } 
                      }  
          if(mes==4 || mes==6 || mes==9 || mes==11){
               if(dia>=1 && dia<=30)return true;
                     else {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y es obligatorio" +"\r"
                             swOK=1;
                             return;}
                    }
           } //el fin de los meses      
              
        else
          {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y es obligatorio" +"\r"
           swOK=1;
           return;}
     }
  //FIN DE VALIDACION DE FECHAS para campos obligatorios
  
  //FECHAS CON FORMATO DD/MM/AAAA para campos no obligatorios
 if(pType=='Fo'){
   swOK=0;
    if (pCaracter=='') {
      swOK=1
      sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y NO es obligatorio" +"\r"
      return
    } 
    cadena=pCaracter;
    loncadena=cadena.length;
    //calculo la posicion de la primera barra
    posprimerabarra=cadena.search('/');
    if (posprimerabarra==-1){sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y NO es obligatorio" +"\r"
                             swOK=1;
                             return;}
    //obtengo la segunda subcadena para calcular la posicion de la segunda barra
    aux=cadena.substr(posprimerabarra+1,loncadena-(posprimerabarra+1));
    //busco la segunda barra en la segunda subcadena
    possegundabarra=aux.search('/');
    //esta posicion es relativa al substring que contiene la segunda barra
    if (possegundabarra==-1) {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y NO es obligatorio" +"\r"
                             swOK=1;
                             return;}
    possegundabarra=possegundabarra+posprimerabarra+1;
    //al tener ya las posiciones de las barras, obtengo el dia,mes y ańo
    dia=cadena.substr(0,posprimerabarra);
    mes=cadena.substr(posprimerabarra+1,possegundabarra-posprimerabarra-1);
    ano=cadena.substr(possegundabarra+1,4);
    //si introduce menos de cuatro digitos en el ańo retorno false
    if (ano.length!=4){sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y NO es obligatorio" +"\r"
                             swOK=1;
                             return;}
     //ahora se comienza a validar la fecha
     if (mes>=1 && mes<=12){
          if(mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12){
               if(dia>=1 && dia<=31)return true;
                     else {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y NO es obligatorio" +"\r"
                             swOK=1;
                             return;}
                    }
           if(mes==2){
               if((ano%4)==0){
                        //el ańo es bisiesto
                           if(dia>=1 && dia<=29)return true;
                               else {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y NO es obligatorio" +"\r"
                                      swOK=1;
                                       return;}
                              }        
                       else{
                            if(dia>=1 && dia<=28)return true;
                                else {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y NO es obligatorio" +"\r"
                                      swOK=1;
                                      return;}
                            } 
                      }  
          if(mes==4 || mes==6 || mes==9 || mes==11){
               if(dia>=1 && dia<=30)return true;
                     else {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y NO es obligatorio" +"\r"
                             swOK=1;
                             return;}
                    }
           } //el fin de los meses      
              
        else
          {sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser una fecha válida y NO es obligatorio" +"\r"
           swOK=1;
           return;}
     }
  //FIN DE VALIDACION DE FECHAS para campos no obligatorios
  
  // CADENA
  if (pType=='Sr') { 
    if (pCaracter=='') {
       sError+="Campo "+document.forms[0].elements[nEle].name.substr(2)+" ha de ser texto y es obligatorio"+"\r"
       swOK=1;
       return
     }
  }
}