/**
 * @author Luciano
 */
(function($)
{
	$.fn.validaCPF = function(str)
	{
	
		var numero;
		var digito = new Array(10); // array para os dígitos do CPF.
		var aux = 0; // índice para a string num.
		var posicao
		var i
		var soma
		var dv
		var dvInformado;
		//var obj = str;
		
		//numero = _extraiNumero(str);
		
		// Retira os dígitos formatadores de CPF '.' e '-', caso existam.
		if (str.length > 0) 
		{
			while ((str.indexOf('.') != -1) || (str.indexOf('-') != -1)) 
			{
				if (str.indexOf('.') != -1) 
				{
					aux = str.indexOf('.');
					str = str.substr(0, aux) + str.substr(aux + 1, str.length - 1);
				}
				if (str.indexOf('-') != -1) 
				{
					aux = str.indexOf('-');
					str = str.substr(0, aux) + str.substr(aux + 1, str.length - 1);
				}
			} //while
		} //if
		//verifica CPFs manjados
		switch (str)
		{
			case '0':
			case '00':
			case '000':
			case '0000':
			case '00000':
			case '000000':
			case '0000000':
			case '00000000':
			case '000000000':
			case '0000000000':
			case '00000000000':
			case '11111111111':
			case '22222222222':
			case '33333333333':
			case '44444444444':
			case '55555555555':
			case '66666666666':
			case '77777777777':
			case '88888888888':
			case '99999999999':
			case '01234567890':
				//obj.value = '';
				//document.getElementById('alert_cpf').style.display = '';
				//obj.focus();
				return false;
		}
		
		// Início da validação do CPF.
		/* Retira do número informado os dois últimos dígitos */
		dvInformado = str.substr(9, 2);
		/* Desmembra o número do CPF no array digito */
		for (i = 0; i <= 8; i++) 
		{
			digito[i] = str.substr(i, 1);
		}
		/* Calcula o valor do 10o. digito de verificação */
		posicao = 10;
		soma = 0;
		for (i = 0; i <= 8; i++) 
		{
			soma = soma + digito[i] * posicao;
			posicao--;
		}
		digito[9] = soma % 11;
		if (digito[9] < 2) 
		{
			digito[9] = 0;
		}
		else 
		{
			digito[9] = 11 - digito[9];
		}
		/* Calcula o valor do 11o. digito de verificação */
		posicao = 11;
		soma = 0;
		for (i = 0; i <= 9; i++) 
		{
			soma = soma + digito[i] * posicao;
			posicao--;
		}
		digito[10] = soma % 11;
		
		if (digito[10] < 2) 
		{
			digito[10] = 0;
		}
		else 
		{
			digito[10] = 11 - digito[10];
		}
		
		dv = digito[9] * 10 + digito[10];
		
		/* Verifica se o DV calculado é igual ao informado */
		if (dv != dvInformado) 
		{
			alert("CPF inválido");
			return false;
		}
		else 
		{
			return true;
		}
		
	}
})(jQuery)
