/* Retira os pontos e traços de um CPF */
function limpaCPF(cpf){
   var cpf_limpo;
   
   cpf_limpo = cpf.replace(/\D+/g , ""); // substitui tudo o que não for número por em branco ""
   
   return cpf_limpo;
}

/* Valida o CPF */
function validaCPF(cpf, campo, obrigatorio) {
   var i;
   cpf = limpaCPF(cpf);
	  
   if (obrigatorio){
	   if(cpf == "") {
		  alert('O campo \"CPF\" deve ser preenchido!');
		  campo.focus();
		  return false;
	   }
   }

   //previne bug de nºs iguais
   if (cpf==00000000000 || cpf==11111111111 || cpf==22222222222 || cpf==33333333333 || cpf==44444444444 || 
	  cpf==55555555555 || cpf==66666666666 || cpf==77777777777 || cpf==88888888888 || cpf==99999999999){
       alert(decodeURIComponent(escape("O CPF informado é Inválido!")));  //foi usado esse recurso para funcionar a acentuação
	   campo.focus();
	   return false;
   }

   var c = cpf.substr(0,9);
   var dv = cpf.substr(9,2);
   var d1 = 0;

   for (i = 0; i < 9; i++) {
	  d1 += c.charAt(i)*(10-i);
   }

   if (d1 == 0){
	  campo.focus();
	  return false;
   }

   d1 = 11 - (d1 % 11);
   if (d1 > 9) d1 = 0;
   if (dv.charAt(0) != d1) {
       alert(decodeURIComponent(escape("O CPF informado é Inválido!")));
	   campo.focus();
	   return false;
   }
   
   d1 *= 2;
   for (i = 0; i < 9; i++) {
	   d1 += c.charAt(i)*(11-i);
   }
	
   d1 = 11 - (d1 % 11);
   if (d1 > 9) d1 = 0;
   if (dv.charAt(1) != d1){
       alert(decodeURIComponent(escape("O CPF informado é Inválido!")));
	   campo.focus();
	   return false;
   }

   return true;
}
