function soloLetras(e)
{

    tecla = (document.all) ? e.keyCode : e.which;

    if ((tecla==8) || (tecla==37) || (tecla==39) || (tecla==46))  return true; //Tecla de retroceso (para poder borrar), cursores y suprimir


    patron =/[A-Za-zñÑáÁéÉíÍóÓúÚ.\sªº@]/; // Solo acepta letras


    te = String.fromCharCode(tecla);
    return patron.test(te);
}

function noLetras(e)
{

    tecla = (document.all) ? e.keyCode : e.which;

    if ((tecla==8) || (tecla==37) || (tecla==39) || (tecla==46))  return true; //Tecla de retroceso (para poder borrar), cursores y suprimir


    patron =/[?]/; // NAda


    te = String.fromCharCode(tecla);
    return patron.test(te);

}


function soloNumeros(e)
{
    tecla = (document.all) ? e.keyCode : e.which;

    if ((tecla==8) || (tecla==37) || (tecla==39) || (tecla==46))  return true; //Tecla de retroceso (para poder borrar), cursores y suprimir

    patron =/[0123456789.]/; // Solo NUMEROS

    te = String.fromCharCode(tecla);
    return patron.test(te);
}

function mail(texto){

    var mailres = true;
    var cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ1234567890@._-";

    var arroba = texto.indexOf("@",0);
    if ((texto.lastIndexOf("@")) != arroba) arroba = -1;

    var punto = texto.lastIndexOf(".");

     for (var contador = 0 ; contador < texto.length ; contador++){
        if (cadena.indexOf(texto.substr(contador, 1),0) == -1){
            mailres = false;
            break;
     }
    }

    if ((arroba > 1) && (arroba + 1 < punto) && (punto + 1 < (texto.length)) && (mailres == true) && (texto.indexOf("..",0) == -1))
     mailres = true;
    else
     mailres = false;

    return mailres;

}


function Validar(Cadena){

	var Fecha= new String(Cadena)	// Crea un string
	var RealFecha= new Date()	// Para sacar la fecha de hoy
	// Cadena Año
	var Ano= new String(Fecha.substring(Fecha.lastIndexOf("/")+1,Fecha.length))
	// Cadena Mes
	var Mes= new String(Fecha.substring(Fecha.indexOf("/")+1,Fecha.lastIndexOf("/")))
	// Cadena Día
	var Dia= new String(Fecha.substring(0,Fecha.indexOf("/")))
        var error = '';

	// Valido el año
	if (isNaN(Ano) || Ano.length<4 || parseFloat(Ano)<1900){
        	error = 'Año incorrecto.\n';
	}
	// Valido el Mes
	if (isNaN(Mes) || parseFloat(Mes)<1 || parseFloat(Mes)>12){
		error = error + 'Mes incorrecto.\n';
	}
	// Valido el Dia
	if (isNaN(Dia) || parseInt(Dia, 10)<1 || parseInt(Dia, 10)>31){
		error = error + 'Día incorrecto.\n';
	}
	if (Mes==4 || Mes==6 || Mes==9 || Mes==11 || Mes==2) {
		if (Mes==2 && Dia > 28 || Dia>30) {
			error = error + 'Día incorrecto.\n';
		}
	}

 return error;

}




function buscarEnCadena(texto)
{

	for(i=0;i<texto.length;i++)

	{

	if(texto.charAt(i)=="/") return true;

	}

return false;

}

//------------------------------------------------------------
// Comprueba que los campos _CIF, _DNI y _NIF sean correctos
//
// Funciones:
//            validarDNI(cif,dni,nif)
//------------------------------------------------------------

function validaCif(pos) {

  var es_cif    = "_CIF";
  var es_dni    = "_DNI";
  var es_nif    = "_NIF";
  var error     = '';
  var dni         = '';
  var cif       = '';
  var si_valida  = false;
  var hay_dni    = false;

  var posCIF, posDNI, posNIF; //Necesitamos recordarlas en la validacion del NIF

  // Recorrer todos los elementos del formulario
  for (var i=0 ; i<document.forms[pos].elements.length ; i++){

      var esCifNif = false;
      var campo = document.forms[pos].elements[i].name;
      var tipo  = document.forms[pos].elements[i].type;
      var valor = trim(document.forms[pos].elements[i].value.toUpperCase());

      if (tipo=='text') {

        //Pasar a mayúsculas y eliminar blancos
        document.forms[pos].elements[i].value = valor;

        // Comprobar si es campo cif
        for (var j=0 ; j<campo.length ; j++) {
           if (campo.substring(j, j+4).toUpperCase() == es_cif) {
             esCifNif = true;
             posCIF = i;
             if (valor=="" || valor==" ") document.forms[pos].elements[i].value="0";
             break;
           }
        } //for

        // Comprobar si es campo dni
        for (var j=0 ; j<campo.length ; j++){
           if (campo.substring(j, j+4).toUpperCase() == es_dni) {
             if (valor == '') {
               if (error == '')
                 error = " "+campo+"-> El campo tiene que tener datos \n";
               else
                 error = error + " "+campo+ "-> El campo tiene que tener datos \n";
             }
             esCifNif = true;
             hay_dni = true;
             posDNI = i;
             //validar dni
             //rellenar con ceros a la izda
             valor = pongo_char(valor, "0", 8);
             cif = document.forms[pos].elements[posCIF].value;
             dni = document.forms[pos].elements[posDNI].value;
             document.forms[pos].elements[i].value = valor;
             break;
           }
        } //for

        // Comprobar si el campo es la letra de nif
        for (var j=0 ; j<campo.length ; j++){
           if (campo.substring(j, j+4).toUpperCase() == es_nif) {
             //validar nif
             esCifNif = true;
             posNIF = i;

             if (dni=="00000000") {
               cif = "";
               dni = "";
               document.forms[pos].elements[posCIF].value="";
               document.forms[pos].elements[posDNI].value="";
               document.forms[pos].elements[posNIF].value="";
             }
             si_valida = true;
             if (!validarDNI(cif,dni,valor.toUpperCase())) {
//             si_valida = true;
               if (error=='')
                 error = " CIF/NIF inválido \n";
               else
                 error = error + " CIF/NIF no válido \n";
             }
             break;
           }
        } //for


      } // fin tipo=text

  } // for de los elementos del formulario

  if ((hay_dni) && (si_valida == false)) {
    if (dni=="00000000") {
      cif = "";
      dni = "";
      document.forms[pos].elements[posCIF].value="";
      document.forms[pos].elements[posDNI].value="";
    }
    if (!validarDNI(cif,dni,'')){
      if (error=='')
        error = " CIF/NIF inválido \n";
      else
        error = error + " CIF/NIF no válido \n";
    }
  }

  return(error);

}//validaCif


function validarDNI(cif,dni,nif) {

  var ok = true;
  var cifs="ABCDEFGHNLPQSXKZ";
  var nums="0123456789";
  var hexs = "0123456789ABCDEF";

  if ((cif=="")&&(dni=="")&&(nif=="")) {
     return(true);
  }

  // Nuevo. Para no poder grabar el 00000000
  if (dni=="00000000") {
     return(false);
  }

  if (cif == "0") {
    if (nif=="") return(false);
    // El dni debe tener todos los caracteres numéricos
    if (!esNumerico(dni))     return(false);
    // El nif debe ser alfabético
    if (!esAlfaMay(nif))     return(false);
    // Calcular dígito de control
    if (nif != "TRWAGMYFPDXBNJZSQVHLCKE".charAt(dni%23) ) return(false);
    // Finalmente es bueno
    return(true);
  }


  // Si cif es Z
  if ( cif == "Z" ) {
    // El dni debe tener los caracteres de 0 a 7 numéricos
    if (!esNumerico(dni.substring(0,7)))
      return(false);
    if (nif != "E")
      return(false);
    else
      return(true);
  } // Si cif es Z

  // Si cif es X o N
  if ( (cif == "X") || (cif == "N") ) {
    // El dni debe tener los caracteres de 0 a 7 numéricos
    if (!esNumerico(dni.substring(0,7)))
      return(false);
    // El dni[8] debe tener formato alfabético
    if (!esAlfaMay(dni.charAt(7)))
      return(false);
    // El nif debe ser blanco
    if ((nif != "") && (nif != null))
      return(false);
    // Calcular dígito de control
    if (dni.charAt(7) != "TRWAGMYFPDXBNJZSQVHLCKE".charAt(Number(dni.substring(0,7))%23) ) return(false);
    // Finalmente es bueno
    return(true);
  } // Si cif es X o N

  // Si cif es L o K
  if ( (cif == "L") || (cif == "K") ) {
    // El dni debe tener los caracteres de 0 a 7 numéricos
    if (!esNumerico(dni.substring(0,7)))
      return(false);
    // El dni[8] debe tener formato alfabético
    if (!esAlfaMay(dni.charAt(7)))
      return(false);
    // El nif debe ser blanco
    if ((nif != "") && (nif != null))
      return(false);
    // Calcular dígito de control
    if (dni.charAt(7) != "TRWAGMYFPDXBNJZSQVHLCKE".charAt(Number(dni.substring(0,7))%23) ) return(false);
    // Los primeros caracteres, en la lista
    var pr = dni.substring(0,2);
    if (!(((pr>="01") && (pr<="64")) ||
          ((pr>="70") && (pr<="84")) ||
          ((pr>="86") && (pr<="87")) ||
          ((pr>="90") && (pr<="99")) ) )
      return(false);
    // Finalmente es bueno
    return(true);
  } // Si cif es X o N


/* Validacion CIF */

if (cifs.indexOf(cif)!=-1) {

     // Long del DNI = 8
     if (dni.length != 8)
       return(false);

     // 7 numeros
     for (var i=0 ; i<7 ; i++)
       if (nums.indexOf(dni.charAt(i))==-1)
         return(false);

     // NIF en blanco
     if ( (nif != "" ) &&
          (nif != " ") )
         return(false);

     // Los primeros caracteres, en la lista
     var pr = dni.substring(0,2);
     if (!(((pr>="01") && (pr<="64")) ||
           ((pr>="70") && (pr<="84")) ||
           ((pr>="86") && (pr<="87")) ||
           ((pr>="90") && (pr<="99")) ) )
         return(false);

     // Digito de control
     var w_cad = "00" + dni.charAt(0);
     w_cad = w_cad + dni.charAt(2);
     w_cad = w_cad + dni.charAt(4);
     w_cad = w_cad + dni.charAt(6);
     var w_aux = parseInt(w_cad, 10);
     var w_aux1 = w_aux * 2;
     w_cad = w_aux1 + "";

     // Suma de los pesos de la cadena
     w_aux = 0;
     for (var i=0 ; i<w_cad.length ; i++)
       w_aux = w_aux + parseInt(w_cad.charAt(i), 10);

     w_aux1 = w_aux +
       parseInt(dni.charAt(1)) +
       parseInt(dni.charAt(3)) +
       parseInt(dni.charAt(5));

     var w_aux2 = ((  ((w_aux1-(w_aux1%10))/10)   + 1) * 10);
     w_aux2 = w_aux2 - w_aux1;

     if ((w_aux2 < 0) || (w_aux2 > 10))
       return(false);
     else
       // El campo C9 puede ser numerico y alfabetico
       if (w_aux2 == 10) {
          // Si C9 es numerico y el valor es 10 se pone 0 }
          if ( (dni.charAt(7) >= "0") &&
               (dni.charAt(7) <= "9") ) {
            // Si es numerico se pone 0 punto 7.5
            if (dni.charAt(7) != "0")
               return (false);
          }
          else
            // Es alfabetico debe coincidir con J
            if (dni.charAt(7) != "J")
              return (false);
        }
        else {
          // Valor  valido entre 0..9 y A..J, para campo alfabetico
          var w_aux2s = parseInt(w_aux2, 10);
          w_aux2s = "" + w_aux2s + "";
          // controla A y 1, B y 2 ,...
          if ( (dni.charAt(7) != w_aux2s.charAt(0))                &&
               (dni.charAt(7) !=
                unescape("%"+hexs.charAt(Math.floor(64+w_aux2)/16) +
                             hexs.charAt(Math.floor(64+w_aux2)%16)) ) )
            return (false);
        }

  return ok;
}

return (false);
}

function dniValido(dni) {
  numero = dni.substr(0,dni.length-1);
  let = dni.substr(dni.length-1,1);
  numero = numero % 23;
  letra='TRWAGMYFPDXBNJZSQVHLCKET';
  letra=letra.substring(numero,numero+1);
  if (letra!=let)
    return false;
  else
   return true;
}

function expedienteValido(expediente)
{
  var numero = expediente.length, valido = false, letra = "";

  if(numero == 11 )
  {
    valido = true;
  }else{
    valido = false;
  }

  letra = expediente.substr(0,1);

  if((letra == 'A') || (letra == 'C'))
  {
    valido = true;
  }else{
    valido = false;
  }


return valido;
}

