function CompruebaLetraDNI(numero, letra)
{
 var valido = false;
 // var TablaLetras = [ "TRWAGMYFPDXBNJZSQVHLCKE" ];
 var TablaLetras = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B',
                    'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'];
 // eliminamos posibles letras iniciales/finales
 if (letra.toUpperCase()==TablaLetras[numero%23]) {
    valido = true;
 }
 return valido;
}

function LetraDNIccc()
{
 var ccc_valido;
 dni=document.form_socio.dni_ccc.value;
 if (dni==null || dni=="") {
    ccc_valido = true;
 }
 else {
    numero=dni.match(/\d+/)[0];
    letra=document.form_socio.letra_ccc.value;
    ccc_valido = CompruebaLetraDNI(numero, letra);
    if (!ccc_valido) {
       alert("Letra DNI (" + letra +
             ") incorrecta, revise DNI titular cuenta (" + numero + ")");
       document.form_socio.dni_ccc.focus();
    }
 }
 return ccc_valido;
}

function LetrasDNI()
{
 // chequeos parciales
 var socio_valido;
 var tutor_valido;
 var ccc_valido;

 // letra del DNI del socio
 var dni=document.form_socio.dni_socio.value;
 var numero=dni.match(/\d+/)[0];   // eliminar letras iniciales/finales
 var letra=document.form_socio.letra_socio.value;
 socio_valido = CompruebaLetraDNI(numero, letra);
 if (!socio_valido) {
    alert("Letra DNI ("+letra+") incorrecta, revise su DNI ("+numero+")");
    document.form_socio.dni_socio.focus();
 }
 else {
    // letra del DNI del socio tutor
    dni=document.form_socio.dni_cuota.value;
    if (dni==null || dni=="") {
       tutor_valido = true;
    }
    else {
       numero=dni.match(/\d+/)[0];
       letra=document.form_socio.letra_cuota.value;
       tutor_valido = CompruebaLetraDNI(numero, letra);
       if (!tutor_valido) {
          alert("Letra DNI (" + letra +
                ") incorrecta, revise el DNI de socio tutor (" + numero + ")");
          document.form_socio.dni_cuota.focus();
       }
    }

    // letra del DNI del titular bancario
    dni=document.form_socio.dni_ccc.value;
    if (dni==null || dni=="") {
       ccc_valido = true;
    }
    else {
       numero=dni.match(/\d+/)[0];
       letra=document.form_socio.letra_ccc.value;
       ccc_valido = CompruebaLetraDNI(numero, letra);
       if (!ccc_valido) {
          alert("Letra DNI (" + letra +
                ") incorrecta, revise DNI titular cuenta (" + numero + ")");
          document.form_socio.dni_ccc.focus();
       }
    }
 }
 return socio_valido && tutor_valido && ccc_valido;
}

/* expresion regular correo_e:
 *    /^[0-9a-zA-Z._]+\@[0-9a-zA-Z]+\.[0-9a-zA-Z.]+$/;
 */


/*
 * Pasos para obtener el digito de control de un numero de 10 cifras:
 * 1ro. Se completa el numero con 0 por la izquierda hasta llegar a 10 cifras.
 * 2do. Se asigna un peso a cada una de las 10 cifras del numero:
 *      1, 2, 4, 8, 5, 10, 9, 7, 3, 6
 * 3ro. Se multiplica cada cifra del numero por su peso.
 * 4to. Se suman los 10 productos.
 * 5to. La suma se divide por 11 y se obtiene el resto.
 * 6to. El resto de resta de 11.
 * 7mo. Si el resultado es 11, el digito de control es 1.
 *      Si el resultado es 10, el digito de control es 0.
 *      Si no, el digito de control es el resultado obtenido.
 */
function DigitoControl(cadena)
{
 var pesos = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
 var control = 0;
 for (i=0; i<=9; i++)
     control += parseInt(cadena.charAt(i)) * pesos[i];
 control = 11 - (control % 11);
 if (control == 11) control = 0;
 else if (control == 10) control = 1;
 return control;
}


function EsNumero(numero)
{
 cadena = numero.toString();
 var valido = true;
 var caracter;
 var i=0;
 while (valido && i<cadena.length) {
    caracter = cadena.charAt(i);
    if (caracter<'0' || caracter>'9')
        valido = false;
    else
       i++;
 }
 return valido;
}


function PrecederCeros(cadena, cuantos)
{
 var precedida = "";
 var i = cadena.length;
 while (i<cuantos) {
    precedida += "0";
    i++;
 }
 precedida += cadena;
 return precedida;
}

 
function ControlCCC()
{
 var ok = true;
 var nbanco = document.form_socio.banco.value;
 if (!EsNumero(nbanco) || nbanco>9999) {
    alert("\"" + nbanco + "\"" +
          " es un n&uacute;mero de m&aacute;s de 4 cifras," +
          " revise su numero de banco");
    return false;
 }
 var nsucursal = document.form_socio.sucursal.value;
 if (!EsNumero(nsucursal) || nsucursal>9999) {
    alert("\"" + nsucursal + "\"" +
          " es un n&uacute;mero de m&aacute;s de 4 cifras," +
          " revise su numero de sucursal");
    return false;
 }
 var s_banco = PrecederCeros(nbanco.toString(), 4);
 var s_sucursal = PrecederCeros(nsucursal.toString(), 4);
 var s_bancosucursal = PrecederCeros(s_banco+s_sucursal, 10);

 /* comprobamos digito de control de banco-sucursal */
 var ncontrol = document.form_socio.control.value;
 if (!EsNumero(ncontrol) || ncontrol>99) {
    alert("\"" + ncontrol + "\"" +
          " no es un numero de 2 cifras, revise los digitos de control");
    return false;
 }
 var digito1 = ncontrol.toString().charAt(0);
 var calculado = DigitoControl(s_bancosucursal);

 if (digito1!=calculado) {
    alert("El primer digito de control ("+digito1 +
          ") no corresponde al numero de entidad (" + s_banco +
          ") - sucursal (" + s_sucursal + ")");
    ok = false;
 }

 /* comprobamos digito de control del ccc */
 var nccc = document.form_socio.ccc.value;
 if (!EsNumero(nccc) || nccc>9999999999) {
    alert("\"" + nbanco + "\"" +
          " es un n&uacute;mero de m&aacute;s de 10 cifras," +
          " revise su numero de cuenta");
    return false;
 }
 var s_ccc = PrecederCeros(nccc.toString(), 10);
 var digito2 = ncontrol.toString().charAt(1);
 var calculado = DigitoControl(s_ccc);
 if (digito2!=calculado) {
    alert("El segundo digito de control ("+digito2 +
          ") no corresponde al numero de cuenta (" + s_ccc + ")");
    ok = false;
 }

 return ok;
}
