/*
  Função para validação de CPF.
		Esta função tem por objetivo verificar se um cpf (sem máscara) fornecido é válido.
		
		Autores : Marcus Paulo Albanez Andrade
												Neimar Trindade Soares
*/

function validaCPF(vCPF, obrigatorio){
	if (!obrigatorio && vCPF == "")
		return true

	vTodosIguais = true;
	if (vCPF != ""){
		if (vCPF.length == 11){
			if (formataCPF(vCPF) == true){
				vPriDig = mid(vCPF,0,1);
				for (vContador=1; vContador < len(vCPF); vContador++){
					if (vPriDig == mid(vCPF,vContador,1))
						vTodosIguais = vTodosIguais + 1;
				}				
				if (vTodosIguais < 11){				
					var vSoma1= 0;
					var vSoma2= 0;
					var vPeso= 1;
					var vTeste= 0;
					for (vContador=0; vContador < len(vCPF) - 2 ; vContador++){
						vSoma1= vSoma1 + (11 - vPeso) * parseInt(mid(vCPF,vContador,1));
						vSoma2= vSoma2 + (12 - vPeso) * parseInt(mid(vCPF,vContador,1));
						vPeso= vPeso + 1;
					}
					// Realiza o vSoma1 mod 11 				
					vDivisao 			= vSoma1 / 11;
					vParteInt 		= Math.floor(vDivisao);
					vParteDec			= vDivisao - vParteInt;
					vRestoSoma1			= Math.round(vParteDec * 11);
																												
					if (vRestoSoma1 < 2)
						vDigito1 = 0;
					else
						vDigito1 = 11 - vRestoSoma1;
																											
					vSoma2 = vSoma2 + 2 * vDigito1;
																											
					// Realiza o vSoma2 mod 11 				
																											
					vDivisao 			= vSoma2 / 11;
					vParteInt 		= Math.floor(vDivisao);
					vParteDec			= vDivisao - vParteInt;
					vRestoSoma2			= Math.round(vParteDec * 11);
																											
					if (vRestoSoma2 < 2)
						vDigito2 = 0;
					else
						vDigito2 = 11 - vRestoSoma2;
						
					vCheckFinal = vDigito1.toString() + vDigito2.toString();
					if (vCheckFinal !=	right(vCPF,2)){
						alert("Cpf inválido.")
						return(false);
					}
				}else{
					alert("Cpf inválido.")
					return(false);
				}								
			}else{
				alert("Digite apenas números.")
				return(false);
			}
		}else{
			if (vCPF == "0")
				return(true);
			else{
				alert("Cpf deve possuir 11 caracteres")
				return(false);}
			}			
		}else{
			alert("Cpf deve ser preenchido")
			return(false);
		}			
	return(true);
}
		
			
  function formataCPF(vCPF)  
			{
 			vCaracteresCPF = "1234567890";
				for (vContador=0; vContador < vCPF.length; vContador++)  
								{ 
									vCaracTemp= vCPF.substring (vContador, vContador+1);
									if (vCaracteresCPF.indexOf (vCaracTemp, 0)==-1)  
									return (false);
								}
				return (true);
			}	

			


/*
  Conjunto de funçoes para tratamento de string.
		
		Autores : Domínio público
												
*/


function len(str)

	{  
			 return String(str).length;  
	}

function left(str, n)

 {
		  if (n <= 0)  
		          return "";
		  else if (n > String(str).length)   
		          return str;                
		  else 
				        return String(str).substring(0,n);
 }

function right(str, n)
 {
    if (n <= 0)
       return "";
    else if (n > String(str).length)  
       return str;                    
    else 
						{ 
       var iLen = String(str).length;
       return String(str).substring(iLen - n, iLen);
    		}
 }

 function mid(str, start, len)

 {
         if (start < 0 || len < 0) return "";

         var iEnd, iLen = String(str).length;

         if (start + len > iLen)
                 iEnd = iLen;
         else
                 iEnd = start + len;

         return String(str).substring(start,iEnd);
 }


			