function validaEmail(checkStr)
{var nI, sS, nN, nP;
 // Arroba ...
 sS = "@"; nN = 0; nP = 0;
 for(nI = 0; nI < checkStr.length; nI++)
 { if(checkStr.charAt(nI) == sS) 
  { nN++; nP = nI;
  }
 }
 if(nN == 0) return (false);
 if(nN > 1)  return (false);
 var nPArroba = nP;
 // Punto ...
 sS = "."; nN = 0; nP = 0;
 for(nI = 0; nI < checkStr.length; nI++)
 { if(checkStr.charAt(nI) == sS) 
  { nN++; nP = nI;
  }
 }
 if(nN == 0) return (false);
 var nPPunto = nP;
 // Posicion Arroba/Punto ...
 if(nPArroba > nPPunto) return (false);
 //
 return (true);
}

//----------------------------------------------------------------------------
// Comprueba la letra que corresponde al dni correspondiente
//----------------------------------------------------------------------------
function NIFLetter(nif1)
{
   var cadena  = "";
   var letras='TRWAGMYFPDXBNJZSQVHLCKET'
   var NumDNI=0;
   var Indice=0;
   var divis = 0
   
   nif1 = nif1.toUpperCase();
   
   if( nif1.charAt(0) != 'X')	// Españoles
      cadena += nif1
   else 			// Extranjeros
      cadena += nif1.substring(1,11);
   
   
   correcto = cadena.charAt(cadena.length-1);
   correcto = correcto.toUpperCase();
   
   NumDNI = parseInt(cadena,10);
   
   divis = isNaN(parseInt(NumDNI/23,10))?0:parseInt(NumDNI/23,10);

   Indice = NumDNI - (23 * divis);
   
   if( (Indice >= 0) && (Indice < 24) ) {
      if( letras.charAt(Indice) == correcto) 
         return true
      else
         return false
   } 
   else
      return false;
}

//------------------------------------------------------------
// Retorna la letra correspondiente a un dni de una persona 
// juridica u organismo                  
//------------------------------------------------------------

function ValidateCIF(cif1)
{
   var Retorno = true;
   var Entidad;
   var StEntidad;
   var Provincia;
   var NumeroSec;
   var CaracterControl, CaracterControlEntrada;
   var TablaControl = 'JABCDEFGHI';
   var otras = 'ABCDEFGHSPQX';
   var numero = '0123456789';
   var Suma = 0;
   var Suma1 = 0;
   var Suma2 = 0;
   var nAux = 0;
   var tmp = '';
   tmp = "" + cif1;
   Entidad = tmp.charAt(0);
   Entidad = Entidad.toUpperCase();
   if( otras.indexOf( Entidad) == -1) {
      return false;
   }
   Provincia = tmp.substring(1,3);
   NumeroSec = tmp.substring(3,8);
   NumeroSec2 = tmp.substring(1,8);
   CaracterControlEntrada = tmp.substring( 8);
   CaracterControlEntrada = CaracterControlEntrada.toUpperCase();
   if( (Entidad >= "A") && (Entidad <= "H") ) {
         StEntidad = "JURIDICA";
   }
   else if( (Entidad == "S") || (Entidad == "Q") ) {
      StEntidad="ORGANISMO";
   }
   else if( Entidad == "X") //  Extranjero residente
   {
      return NIFLetter( tmp);
   }
   if( Retorno != false) {           // Entidad correcta
      for (var i = 0; i < NumeroSec2.length; i++) {
         if( numero.indexOf( NumeroSec2.charAt( i)) == -1) {
            return false;
         }
      }
      if( parseInt( NumeroSec, 10) == 0)
      {
         Retorno = false;
      }
      else if( (StEntidad == "JURIDICA") || (StEntidad == "ORGANISMO"))
      {
         Suma2 = 0;
         Suma1 = parseInt( NumeroSec2.charAt( 1), 10) + parseInt( NumeroSec2.charAt( 3), 10) + parseInt( NumeroSec2.charAt( 5), 10 );
         for( var i = 0; i < 7; i += 2) {
            nAux = parseInt( NumeroSec2.charAt( i), 10) * 2;
            if (nAux > 9) {
               Suma2 = Suma2 + parseInt( nAux / 10, 10) + nAux % 10;
            } else {
               Suma2 = Suma2 + nAux;
            }
         }
         Suma = Suma1 + Suma2;
         i = 10 - Suma % 10;
         if( i > 9) { 
            i = 0;
         };
         if( StEntidad == "JURIDICA") {
            CaracterControl = i;
         } else {
            CaracterControl = TablaControl.charAt( i);
         }
         if (CaracterControl != CaracterControlEntrada) {
            	CaracterControl = TablaControl.charAt( i);
         	if (CaracterControl != CaracterControlEntrada) 
  	     	 	  Retorno = false;                         
         };
      }
   }

   return Retorno;
}

//-----------------------------------------------------------
// Indica el tipo de CIF NIF pasado 
//-----------------------------------------------------------
// Returns:     0: No es ni NIF ni CIF
//		1: Es NIF
//		2: Es CIF
//		3: Es Tarjeta de residencia para extranjeros
//
function checkFiscalID(field) {

   var numero;
   var result;
   var no_zeros;
   var i;

   numero = '0123456789';
   result = 0;
  // Se descartan los ceros de la izquierda
  for( i = 0; i < field.value.length; i++)
    if( field.value.charAt(i) != "0")
     break;
  no_zeros = field.value.substring(i);

  if( numero.indexOf( no_zeros.charAt(0)) != -1) 
  {
      // Entra aquí cuando el primer caracter es un número
      if (NIFLetter(no_zeros)) result=1;
  } 
  else {
  	if (no_zeros.charAt(0) == "X"){
		no_zeros2 = no_zeros.substring(1);
	 	if (NIFLetter(no_zeros2)) result=3;
        }
	else  if (ValidateCIF( no_zeros)) result=2;
  };
  return(result);
}

//----------------------------------------------------------------------------
//	Function formatNIF
//	Input: NIF Field
//	OutPut:	True if correct, False otherwise
//----------------------------------------------------------------------------

function formatNIF(field) {
var nceros;
var ceros='';

	if (field.value.length >9)
		return false;
	nceros= parseInt(9 - field.value.length);
	
	field.value=field.value.toUpperCase();
	
	for (i=0;i<nceros;i++) {
		ceros+='0'; }
		
	if (isNaN(parseInt(field.value.charAt(0))))
		field.value = field.value.charAt(0) + ceros + field.value.substring(1,field.value.length)
    else
		field.value = ceros + field.value
		
	return (field.value.length != 9)?false:true;
}

//Tarjeta de Credito
function isCreditCard(st) {
  // Encoding only works on cards with less than 19 digits
  if (st.length > 19)
    return (false);
    
  if (st.length < 12)    
    return (false);
	

  sum = 0; mul = 1; l = st.length;
  for (i = 0; i < l; i++) {
    digit = st.substring(l-i-1,l-i);
    tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }

  if ((sum % 10) == 0)
    return (true);
  else
    return (false);
}

//*************************************************************
//* Reemplaza el caracter ' por el `
//* La función reemplaza con el for carácter por carácter o bien
//* si él, la cadena entera
//*************************************************************
function sReemplazaComillas(cadena)
{
  var iPos;
  var sal = "";
  var car;

  for (iPos = 0; iPos <= cadena.length-1; iPos++)
   {
      car = cadena.charAt(iPos);
      if (car == "'"){
		sal += car.replace("'","`");
		
	  }else if (car == "\""){
	    sal += car.replace("\"","`");
		
	  }else{	
		sal += car;
		
   }}
   return sal;
}
///*************************************************************
//* Mira si el primer carácter de una cadena tiene un +
//*************************************************************
function sPlus(cadena)
{
  var iPos;
  var car;
  var bAux;

  for (iPos = 0; iPos < 1; iPos++)
   {
      car = cadena.charAt(iPos);
      if (car == "+")
		bAux=false;
      else
		bAux=true;		
   }return bAux;
}

// Function that checks if a bank number is correct
function checkCuenta(entidad,oficina,dc,ncuenta) {
	
      var control1 = "00"+entidad.value+oficina.value;
      var control2 = ncuenta.value;
      var digito1 = 0;
      var digito2 = 0;
      var vdc = "";
      var comprobacion = "";
      var multp= new Array(1,2,4,8,5,10,9,7,3,6);
      
      comprobacion = entidad.value+oficina.value+dc.value+ncuenta.value;

      if(comprobacion == "00000000000000000000") 
        return false;

      if( (entidad.value.length != 4) || (oficina.value.length != 4) || (dc.value.length != 2) || (ncuenta.value.length != 10) )
        return false;

      for (var i=0;i<10;i++) {
		digito1 += parseInt (control1.charAt(i),10) * parseInt(multp[i]);
      		digito2 += parseInt (control2.charAt(i),10) * parseInt(multp[i]);
      }

      digito1 = 11 - ( digito1 % 11 );
      digito2 = 11 - ( digito2 % 11 );

      if (digito1 == 11) digito1 = 0;
      if (digito1 == 10) digito1 = 1;
      
      if (digito2 == 11) digito2 = 0;
      if (digito2 == 10) digito2 = 1;
      
      vdc = "" + digito1 + digito2;

      return (vdc == dc.value)?true:false
      return false;
}