﻿// Archivo JScript
  
 
 /*
 *
 *Expresión regular copiada de: https://www.microsoft.com/spanish/msdn/articulos/archivo/201205/voices/regex.mspx
 *
 *
 */ 
  /*function ValidarCif(source,arguments)
  {
    validar_cif_nif(source,arguments)
  
  var valor=arguments.Value;
   debugger
 if(/^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z](-|\.)?\d{7}(-|\.)? [0-9A-Z]|\d{8}(-|\.)?[A-Z])$/.test(valor))

    {
    arguments.IsValid=true;
    }
    else arguments.IsValid=false;
    }*/
  
  
 /*  Valida que un campo Nif/NIE/CIF tiene 9 caracteres*/
 /* Modificado, ahora insertará a izqda ceros hasta que la longitud del campo sea 9"*/
  function validar_cif_nif(source,arguments)
        {          
         var txtCif=arguments.Value;
         if(txtCif.length>9)
         {
          arguments.IsValid=false;
         }
         else
         {
          arguments.Value=padleft(txtCif,'0',9);
         }
            
       }           
      
      /*Marta 29/05/07 se distingue een el combo*/ 
     function ValidarNIE  (source,arguments)
     {
     
       var txtCif=arguments.Value;
       if(isNaN(txtCif.charAt(0)))
          {            
             //Quitamos la primera y la ultima cifra
               var scif = txtCif.substring(1,8);
              if (isNaN(scif))
                {
                    arguments.IsValid=false;
                   return
                }            
              tipo = txtCif.substring(0,1).toUpperCase();
              if(tipo=="X")//NIE, i.e, NIf para extranjeros,
              {
                // valor=txtCif.substring(1,9);
                 arguments.Value="0"+txtCif.substring(1,txtCif.length);
                 return ValidarNif(source,arguments);
              }   
              else
              {
              arguments.IsValid=false;                     
              }                       
         }
         else
         {
          arguments.IsValid=false;                     
         }
     }
   //////////////////////////////////////////////////////////////////////////////////////////////////// 
  /* Valida si el valor del argumento es un CIF/NIE válido*/
       function ValidarCif(source,arguments)
        {
            var txtCif=arguments.Value;
           if(isNaN(txtCif.charAt(0)))
            {            
                  //CIF
                        //Quitamos la primera y la ultima cifra
                        var scif = txtCif.substring(1,8);
                        if (isNaN(scif))
                        {
                         arguments.IsValid=false;
                         return
                        }
                        
                        tipo = txtCif.substring(0,1).toUpperCase();
                        //Marta 25/05/2007 se hace en otro método
                       /* if(tipo=="X")//NIE, i.e, NIf para extranjeros,
                          {
                         // valor=txtCif.substring(1,9);
                           arguments.Value="0"+txtCif.substring(1,txtCif.length);
                           return ValidarNif(source,arguments);
                          }*/                           
                        //Sumamos las cifras pares                       
                        sumapar=parseInt(scif.charAt(1))+ parseInt(scif.charAt(3))+parseInt(scif.charAt(5));
                        sumaimpar=new Array();
                          j=0;
                           for(i=0;i<4;i++)
                           {
                           sumaimpar[i]=parseInt(scif.charAt(j))*2;
                            if(sumaimpar[i]>=10)
                            {
                              sumaimpar[i]=parseInt(sumaimpar[i] % 10) + parseInt(sumaimpar[i] / 10);
                            }
                        //Y volvemos a sumar esos resultados a la suma anterior
                           sumapar=parseInt(sumapar)+parseInt(sumaimpar[i]);
                            j+=2;
                           }
                        //Nos quedamos con la cifra de las unidades
                        digito = parseInt(sumapar % 10);
                        //Restamos esta cifra de las unidades 10, dándonos el código de control para todos los tipos de sociedades exceptuando la X y la P
                        control=(digito - 10) * (-1);
                        //Para las sociedades X y P, habria que sumar un 64 al digito de control que hemos calculado para hallar el ASCII de la letra de control                       
                        dc = txtCif.substring(8,9).toUpperCase();
                     
                        if(tipo=="P")// P--> Corporaciones Locales(Ayuntamientos,Diputaciones, etc..)
                        {                       
                            c = 64 + parseInt(control);
                            res=String.fromCharCode(c).toUpperCase();
                        }
                        else
                        {
                        res=control;
                        }
                        if (dc==res)
                        {
                        arguments.IsValid=true;
                            //    errorProvider1.SetError(tbCif,"");
                        }
                        else
                        {
                           arguments.IsValid=false;
                        }                          
                     }
                     else
                     {
                     arguments.IsValid=false;
                     }
                        

                    }
////////////////////////////////////////////////////////////////////////////////////////////////////

    /* Quita caracteres en blanco de una cadena*/   
    function Trim(cadena)
        {
        	for(i=0; i<cadena.length; )
	        {
		    if(cadena.charAt(i)==" ")
			    cadena=cadena.substring(i+1, cadena.length);
		    else
			    break;
	        }

	        for(i=cadena.length-1; i>=0; i=cadena.length-1)
	        {
		    if(cadena.charAt(i)==" ")
			    cadena=cadena.substring(0,i);
		    else
			    break;
	    }	
	    return cadena;
    }
    
////////////////////////////////////////////////////////////////////////////////////////////////////    
/* Valida si el valor del argumento es un NIF válido*/
  function ValidarNif(source,arguments)
    {
     validar_cif_nif(source,arguments)
      if(arguments.IsValid)
      {
      
     var abc=Trim(arguments.Value.toUpperCase());
     
     //alert(abc);
     var dni=abc.substring(0,abc.length-1);   
     if(dni.length!=8)
     {
        arguments.IsValid=false;
         return;
     }
     var let=abc.charAt(abc.length-1);
     if (!isNaN(let))
      {
        arguments.IsValid=false;
         return;
     }
     
     var cadena="TRWAGMYFPDXBNJZSQVHLCKET"
     var posicion = dni % 23;
     
     var vletra = cadena.substring(posicion,posicion+1)
     
     if(let.toUpperCase()!=vletra)
    {
      arguments.IsValid=false;
    }  
      
    else arguments.IsValid=true;
    }
   }
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
  /* Devuelve true si los DC de una cuenta son válidos*/ 
 function ValidarCuentaBancaria(banco,sucursal,dc,cuenta)
 {
  if (banco== ""  ||sucursal == "" ||
      dc == "" || cuenta == "")
      {
      return true;//porque saltaran las otras validaciones
      
      }

        if (!(obtenerDigito("00" + banco + sucursal) ==
              parseInt(dc.charAt(0))) || 
            !(obtenerDigito(cuenta) ==
              parseInt(dc.charAt(1))))
              {
          /*alert("Los dígitos de control no se corresponden con los demás"
            + " números de la cuenta");*/
                  return false;
            }
	    else
	    {
	    return true;
	    
	    }
             
}
////////////////////////////////////////////////////////////////////////////////////////////////////

/*Obtiene el dígito correspondien al valor que se le pasa como parámetro,
 se utiliza desde el método que valida la cuenta bancaria*/
function obtenerDigito(valor)
{
  valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
  control = 0;
  for (i=0; i<=9; i++)
    control += parseInt(valor.charAt(i)) * valores[i];
  control = 11 - (control % 11);
  if (control == 11) control = 0;
  else if (control == 10) control = 1;
  return control;
}



 function padright(val, ch, num)
  {
            var re = new RegExp("^.{" + num + "}");
            var pad = "";

            do {
                pad += ch;
            } while (pad.length < num)

            return re.exec(val + pad)[0];
  }
 
 function padleft(val, ch, num) 
 {
            var re = new RegExp(".{" + num + "}$");
            var pad = "";

            do  {
                pad += ch;
            }while(pad.length < num)

            return re.exec(pad + val)[0];
  }

