

function EsNumero (tuCampoTexto){
    if(/^[0-9]+$/.test(tuCampoTexto)) return true
    return false;
}


/*
    @desc Funcion de entrada a las validaciones para los formularios en general
            Se usa en:
                    Landing Pages
                    Formulario PostGrado
                    MiniFormularios web
                    
*/
function  validaCamposInterfaz (apellido1, bMostrarAlertsJQuery) {
    var strResult = ''
    
    strResult = validaCampos (apellido1, '');

    return bMostrarResultado (strResult, bMostrarAlertsJQuery);
    
}

function  validaCamposInterfazPostGrado (apellido1, bMostrarAlertsJQuery) {

    var strResult               = '';
  
    // Validar los campos comunes a los formularios (nombre, apellido, telefono, mail, etc)
    strResult = validaCampos (apellido1, '');
    
    // Validar que al menos ha marcado un estudio
    if (strResult == 'OK') {
        strResult = bAlmenosUnEstudioMarcado ()        
    }
    
    // Validar los campos de pruebas de admision 
    if (strResult == 'OK') {
        strResult = validaPruebasAdmisionPostGrado ();        
    } 



    // Mostar el resultado de la validación
    return bMostrarResultado (strResult, bMostrarAlertsJQuery);
    
}


function  validaCamposInterfazGrado (apellido1, bMostrarAlertsJQuery) {
    
    var strResult = ''
    
    strResult = validaCampos (apellido1, '');

    if (strResult == 'OK') {
        /* Validar ahora los campos de pruebas de admision */
        strResult = validaPruebasAdmision ();        
    } 
    
    // Validar que al menos ha marcado un estudio
    if (strResult == 'OK') {
        strResult = bAlmenosUnEstudioMarcado ()        
    }
    
    return bMostrarResultado (strResult, bMostrarAlertsJQuery);
    
}

function bValidaNif (codDocumento, codDocumentoLetra) {

  // Comprobar que codDocumento es numerico (sin letras ni puntos ...)
  if (EsNumero (codDocumento) == false) {
    alert ('El número de documento solo puede contener caracteres numéricos');
    document.frmsolicitud.codDocumentoNumero.focus ();
    return false;
  }

  // Pasar la letra a mayúsculas para que funciones el algoritmo ...
  codDocumentoLetra = codDocumentoLetra.toUpperCase();

  codDocumento = codDocumento % 23;
  
  letra='TRWAGMYFPDXBNJZSQVHLCKET';
  letra=letra.substring(codDocumento, codDocumento + 1);
  if (letra != codDocumentoLetra) {
      alert ('La letra del documento no es correcta');
      document.frmsolicitud.codDocumentoLetra.focus ();
      return false;
  }else{
      return true;
  }
}

function bValidaTarjetaResidente (codDocumento, codDocumentoLetra) {
    /*
     Las tarjetas de residentes comienzan por 'X', 'Y' o 'Z'
     Hay que cambiar en el codDocumento X=0; Y=1; Z=2
     Una vez hecho este cambio la validación es idéntica a la del nif
    */
    
    // Capturar el primer caracteer del documento
    letraInicialTR = codDocumento.substring(0, 1); 
    
    // Subir a mayus la letra inicial de la tarjeta de residente
    letraInicialTR = letraInicialTR.toUpperCase();
    
    // Comprobar que el primer caracter es válido
    if ((letraInicialTR != 'X') && (letraInicialTR != 'Y') && (letraInicialTR != 'Z')) {
        alert ('La tarjeta de residente debe comenzar por X, Y o Z');
        document.frmsolicitud.codDocumentoNumero.focus ();  
        return false;                   
    }

            
    if (letraInicialTR == "X") {
        // Asignar peso a la X
        codDocumento = codDocumento.replace("X","1");
    }
    
    if (letraInicialTR == "Y") {
        // Asignar peso a la Y
        codDocumento = codDocumento.replace("Y","1");
    }
    
    if (letraInicialTR == "Z") {
        // Asignar peso a la Z
        codDocumento = codDocumento.replace("Y","1");
    }
    return bValidaNif (codDocumento, codDocumentoLetra)
    
}

function bValidaPasaporte (codDocumento, codDocumentoLetra) {
   if (codDocumentoLetra != '') {
        alert ('El campo Letra debe estar vacio para los tipos de documento Pasaporte');       
        document.frmsolicitud.codDocumentoLetra.focus ();  
        return false;
   }
   
   return true;
}


function  validaCamposInterfazCursoAcceso (apellido1, strNmbCampoCodEstudio, bMostrarAlertsJQuery) {
    
    var strResult = '';

    if (document.frmsolicitud.codDocumentoTipo.value == '') {
        alert ('Debe rellenar el campo tipo de documento');
        document.frmsolicitud.codDocumentoTipo.focus ();
        return false;
    }

    
    
    // Validar que ha rellenado el tipo de documento
    if (document.frmsolicitud.codDocumentoTipo.value == '') {
        alert ('Debe rellenar el campo tipo de documento');
        document.frmsolicitud.codDocumentoTipo.focus ();
        return false;
    }
    
    // Validación del dni o nif                 
    if (document.frmsolicitud.codDocumentoTipo.value == 'N') {
        if (bValidaNif (document.frmsolicitud.codDocumentoNumero.value, document.frmsolicitud.codDocumentoLetra.value) == false) {
            return false;
        }
    }

    // Validación de la Tarjeta de Residente
    if (document.frmsolicitud.codDocumentoTipo.value == 'C') {
        if (bValidaTarjetaResidente (document.frmsolicitud.codDocumentoNumero.value, document.frmsolicitud.codDocumentoLetra.value) == false) {
            return false;
        }
    }
    
    // Validación del pasaporte
    if (document.frmsolicitud.codDocumentoTipo.value == 'I') {
        if (bValidaPasaporte (document.frmsolicitud.codDocumentoNumero.value, document.frmsolicitud.codDocumentoLetra.value) == false) {
            return false;
        }
    }
    


    // Validar los campos comunes a todos los demas tipos de formularios    
    strResult = validaCampos (apellido1, strNmbCampoCodEstudio);
    
    return bMostrarResultado (strResult, bMostrarAlertsJQuery);
    
}


function bMostrarResultado (strResult, bMostrarAlertsJQuery) {
    if (strResult != 'OK') {
        if (bMostrarAlertsJQuery == true) {
            jAlert(strResult, 'Aviso');
        } else {
            alert (strResult);   
        }
        return false;
    } else {
        return true;   
    }    
}


function validaCampos (apellido1, strNmbCampoCodEstudio) {            
    
    strError = 'OK'; 

    if (strNmbCampoCodEstudio != '') {
        var strCodEstudio = '';
        
        eval ('strCodEstudio = document.frmsolicitud.' + strNmbCampoCodEstudio + '.value;');
       
        if (strCodEstudio == '') {
            strError = 'Debe seleccionar un estudio'; 
            eval ('document.frmsolicitud.' + strNmbCampoCodEstudio + '.focus ();');
            return strError;
        }
    }
    
    
    if (document.frmsolicitud.nombre.value == '') {
        strError = 'Debe introduccir su nombre';
        document.frmsolicitud.nombre.focus ();
        return strError;
    } 
    
    if (apellido1 != '') {
        if (document.frmsolicitud.apellido1.value == '') {
            strError = 'Debe introduccir un apellido';
            document.frmsolicitud.apellido1.focus ();
            return strError;
        }
    }
    
    if (document.frmsolicitud.telefono.value == '') {
        strError = 'Debe introduccir un teléfono';
        document.frmsolicitud.telefono.focus ();
        return strError;
    }

    if (EsNumero (document.frmsolicitud.telefono.value) == false) {
        
        strError = 'Debe introduccir un teléfono con caracteres numéricos';
        document.frmsolicitud.telefono.focus ();
        return strError;
    }
    
    txtTelefono = document.frmsolicitud.telefono.value
    if (txtTelefono.length < 9) {
        strError = 'Debe introduccir un teléfono con al menos 9 digitos';
        document.frmsolicitud.telefono.focus ();
        return strError;
    }
    
    strResultEmail = validateEmail(document.frmsolicitud.email.value, 1, 1);
    
    if (strResultEmail != 'OK') {
        strError = strResultEmail;
        document.frmsolicitud.email.focus ();
        return strError;
    }
    
    
    if (document.frmsolicitud.AceptarCondiciones.checked == false) {
        strError = 'Antes de enviar el formulario debe Aceptar las condiciones de uso';
        document.frmsolicitud.AceptarCondiciones.focus ();
        return strError;
    }

    
    return strError;
}


/* Valida que el usario ha marcado una sola prueba de admision (Formulario de Grado */
function validaPruebasAdmision () {
        
    var intNumPruebasSelected = 0;
    var strError = 'OK';
    
    if (document.frmsolicitud.pruebasMadrid.value != '') intNumPruebasSelected = intNumPruebasSelected + 1;
    
    if (document.frmsolicitud.pruebasProvincias.value != '') intNumPruebasSelected = intNumPruebasSelected + 1;
    
    if (document.frmsolicitud.pruebasCienciasSalud.value != '') intNumPruebasSelected = intNumPruebasSelected + 1;

    if (intNumPruebasSelected > 1) {
        strError = 'Debe solicitar una sola prueba de admisión';  
    }   
    return strError;          
    
}

function validaPruebasAdmisionPostGrado () {
   
    var intNumPruebasSelected = 0;
    
    var strError = 'OK';
    
    if (document.frmsolicitud.opcPruebasOnLine.checked) intNumPruebasSelected = intNumPruebasSelected + 1;
    // if (document.frmsolicitud.opcPruebas.checked) intNumPruebasSelected = intNumPruebasSelected + 1;
    if (document.frmsolicitud.pruebasMadrid.value != '') intNumPruebasSelected = intNumPruebasSelected + 1;
    
    if (intNumPruebasSelected > 1) {
        strError = 'Debe solicitar una sola prueba de admisión';  
    }
    return strError; 
    
    
    
}

function bAlmenosUnEstudioMarcado () {
    
    var intTotalCheckMarcados;
    var strError;                
    
    intTotalCheckMarcados   = 0;
    strError = 'Debe seleccionar al menos un estudio'; 

    // Buscar el total de checbox marcados a true
    intTotalCheckMarcados =  $('input[type=checkbox]:checked').length;
    
    for (iCont = 0; iCont < intTotalCheckMarcados; iCont++) {

        // Buscar el nombre del control de checkbox que se marco
        strNombreControlCheck = $('input[type=checkbox]:checked')[iCont].name;
        
        if (strNombreControlCheck.indexOf("aryEstudios_") >= 0) {
            // Es un checkbox de un estudio
            bAlgunEstudioMarcado = true;
            strError = 'OK';
            break;
        }
    }
    return strError;
    
}
    