//
//  Autor....: Jose M. Palomar
//  Fecha....: 5/1/2000 
//  Version..: 1.0 
//  
//  Descripcion: Funciones standares para validar campos
//

//-----------------------------------------------------------------------------               

//
// Funcion validaFecha(dia, mes, anno)
// Entrada:
//    dia	cadena	Dia del mes
//    mes	cadena	Mes del año
//    anno	cadena	Año
// Salida: booleano 	Verdadero si la fecha es correcta, falso en caso contrario
//
function validaFecha(dia,mes,anno)
{
  var d,m,a;

    if(dia=="" || isNaN(dia))
      return false;
       
    d=eval(dia);
    if(d<1 || d>31) 
      return false;
      
    if(mes=="" || isNaN(mes))
       return false;
    
    m=eval(mes);
    if(m<1 || m>12)
       return false;
       
    if(anno=="" || isNaN(anno) || anno.length<4)
       return false;
   
    a=eval(anno);
    if(d>diasMes(m,a))
       return false;
       
    return true;
}

function diasMes(mes,anno)
{
  var meses=[31,28,31,30,31,30,31,31,30,31,30,31];
  var dias=meses[mes-1];
   
    if((mes==2) && (anno % 400)==0 || ((anno % 4)==0 && (anno % 100)!=0))
      dias=29;
	
    return dias;
}

//
// Funcion validaCuenta(entidad,oficina,dc,numcuenta)
// Entrada:
//    entidad	cadena	Entidad (4 dígitos)
//    oficina	cadena	Oficina (4 dígitos)
//    dc	cadena	Digito de control (2 dígitos)
//    numcuenta cadene  Número de cuenta (10 dígitos)
// Salida: booleano 	Verdadero si el CCC es correcto, falso en caso contrario
//
function validaCuenta(entidad,oficina,dc,numcuenta)
{
  var cuenta;
  var tabla_pesos=[4,8,5,10,9,7,3,6,0,0,1,2,4,8,5,10,9,7,3,6];
  var val_dig1=0;
  var val_dig2=0;
  var vuelta=0;
    
    cuenta = entidad + oficina + dc + numcuenta;

    if(cuenta.length!=20) 
      return false;
      
    if(cuenta=="00000000000000000000") 
      return false;
      
    if(isNaN(cuenta)) 
      return false;
      
    for(i=0;i<8;i++) 
       val_dig1+= eval(cuenta.substr(i,1)) * tabla_pesos[i];       
    for(i=10;i<20;i++) 
       val_dig2+= eval(cuenta.substr(i,1)) * tabla_pesos[i];

    val_dig1=11-val_dig1 % 11;
    if(val_dig1==10) 
       val_dig1=1;       
    if(val_dig1==11) 
       val_dig1=0;
    val_dig2=11-val_dig2 % 11;
    if(val_dig2==10)
       val_dig2=1;
    if(val_dig2==11) 
       val_dig2=0;
       
    if( cuenta.substr(8,2)!=''+val_dig1+val_dig2) 
       return false;
       
    return true;
}

//
// Funcion validaNIFCIF(nif_cif)
// Entrada:
//    nif_cif	cadena	NIF o CIF
// Salida: booleano 	Verdadero si el NIF o CIF es correcto, falso en caso contrario
//
function validaNIFCIF(nif_cif)
{
  var letrasNIF="TRWAGMYFPDXBNJZSQVHLCKE";
  var letra=nif_cif.substr(0,1);
  var dni,nPar,nImpar,i,n;

    if(!isNaN(letra))
    {
    	// NIF
	if(nif_cif.length!=9) 
	  return false;
	  
	dni=nif_cif.substr(0,8);	
	if(isNaN(dni))
	   return false;
	   
	dni=eval(dni) % 23;
	if(letrasNIF.substr(dni,1)!=nif_cif.substr(8,1)) 
	   return false;
	   
	return true;
    }
    else
    {
    	// CIF
	if(letra<'A' || letra>'H')
	   return false;
	   
	if(nif_cif.length!=9) 
	   return false;
	   
	if(isNaN(nif_cif.substr(1,8))) 
	   return false;
	   
	nPar=0;
	for(i=2;i<7;i+=2) 
	  nPar+=eval(nif_cif.substr(i,1));
	nImpar=0;
	
	for(i=1;i<8;i+=2)
	{
          n=2*eval(nif_cif.substr(i,1));
	  if(n>9) 
	    n-=9;
	  nImpar+=n;
	}
	
	if( (10-((nPar+nImpar) % 10)) != eval(nif_cif.substr(8,1)) ) 
	   return false;
	   
	return true;
    }
}


