//	Mascara de Formulário
	function formatar(src, mask,e)
	 {
		var i = src.value.length;
		var saida = mask.substring(i,i+1);
		var ascii = (e.which ? e.which : e.keyCode ? e.keyCode : e.charCode);
		if(ascii==8 || ascii==37 || ascii==39 || ascii==46) //backspace, seta esquerda, direita, delete
			return;
		if (saida == "A") {
			if ((ascii >=97) && (ascii <= 122)) 
			{ 
				event.keyCode -= 32; 
			}else{ 
				return false;
			}
			}
			else if (saida == "0")
			{
			if ((ascii >= 48) && (ascii <= 57))
			{ 
				return 
			}else{ 
				return false;}
			}else if (saida == "#") {
				return;
			} else{
				src.value += saida;
				i += 1;
				saida = mask.substring(i,i+1);
			if (saida == "A")
			 {
				if ((ascii >=97) && (ascii <= 122))
				 {
				  event.keyCode -= 32;
				 }else { return false; 
				 }
			} else 
				if (saida == "0") 
				{
				if ((ascii >= 48) && (ascii <= 57)) 
				{ 
				return 
				}else {return false; }
			} else {
			 return; 
			}
		}
	}
	
	function checacpf (cpf){
		//Retira os dois pontos do cpf e o traço
		cpf = cpf.replace('.','');
		cpf = cpf.replace('.','');
		cpf = cpf.replace('-','');
		

		if (cpf.length != 11 || cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999")
			return false;
		soma = 0;
		for (i=0; i < 9; i ++)
			soma += parseInt(cpf.charAt(i)) * (10 - i);
		resto = 11 - (soma % 11);
		if (resto == 10 || resto == 11)
			resto = 0;
		if (resto != parseInt(cpf.charAt(9)))
			return false;
		soma = 0;
		for (i = 0; i < 10; i ++)
			soma += parseInt(cpf.charAt(i)) * (11 - i);
		resto = 11 - (soma % 11);
		if (resto == 10 || resto == 11)
			resto = 0;
		if (resto != parseInt(cpf.charAt(10)))
			return false;
		//alert('CPF correto.');
		return true;
	}
	
function checacep (cep){
		//Retira os dois pontos do cpf e o traço
		cep = cep.replace('.','');
		cep = cep.replace('-','');
		

		if (cep.length != 8 || cep == "00000000")
			return false;
		return true;
}

function checatelefone (ddd,telefone){	
	if ((verifica_se_vazio(ddd))&&(verifica_se_vazio(telefone)))
		return false;
	ddd = ddd.replace('-','');
	ddd = ddd.replace('.','');
	if (ddd.length != 2 || telefone == "00")
		return false;
	telefone = telefone.replace('-','');
	telefone = telefone.replace('.','');
	if (telefone.length != 8 || telefone == "00000000")
		return false;
	return true;
}

function preenche_cpf(cpf) {
	if((cpf.value.length==3) || (cpf.value.length==7)) {
		cpf.value= cpf.value+".";
	}
	if(cpf.value.length==11) {
		cpf.value = cpf.value+"-";
	}
}

/*
-recebe como parâmetros uma mensagem a ser alertada e o campo a ser focado.
*/
function alerta_e_foca(mensagem,campo){
	alert(mensagem);
	campo.focus();
}
//recebe o valor do campo atual e o tamanho, caso o tamanho seje igual ao tamanho do valor, ele foca o próximo campo.
function focar_campo(campoAtual,tamanho,proxCampo){
	if(campoAtual.value.length==tamanho)
	proxCampo.focus();
}
//Recebe um campo como parâmetro para verificar se neste campo há algum caracter branco.
function verifica_caracteres_brancos(campo){
	for(cont=0;cont<campo.length;cont++){
		if(campo.charAt(cont)!=" ")
			return true;
	}
	return false;
}
//recebe um campo como parâmetro e verifica se este campo está vazio
function verifica_se_vazio(campo){
	if(campo.length!=0 && verifica_caracteres_brancos(campo))
		return false;
	else 
		return true;
}
//Recebe um campo como parâmetro e verifica se neste campo comtém apenas caracteres númericos.
function contem_apenas_numeros(campo){
	for(cont=0;cont<campo.length;cont++){
		if(campo.charAt(cont)<"0" || campo.charAt(cont)>"9")
			return false;
	}
	return true;
}
//recebe um campo, chama a função contem_apenas_numeros() e alerta uma mensagem caso o retorno da função seja false.
function verifica_numeros(campo){
	if(contem_apenas_numeros(campo.value)==false){
		alerta_e_foca("Este campo deve conter apenas caracteres numéricos!",campo);
		return false;
	}
	return true;
}

//cria um array;
function cria_array(x){
	this.length=x;
	for(i=0;i<=x;i++){
	this[i]=""
	}
}
//Recebe campoNome e mensagem como parâmetro e verifica se o campoNome se encontra vazio, caso esteja vazio a mensagem será alertada retornando false.
function verifica_campo_geral(campoNome,mensagem){
	if(verifica_se_vazio(campoNome.value)){
		alerta_e_foca(mensagem,campoNome);
		return false;
	}	
	return true;
}

/*
-recebe o ddd, o prefixo e o número como parâmetros;
-verifica se cada um desses campo está vazio(verifica_se_vazio) ou se eles contêm apenas números(contem_apenas_numeros);
-verifica se o ddd possui menos de dois dígitos, se o prefixo possui menos de 3 dígitos e se o número contém menos de 4 dígitos 
retornando false se alguma das condições forem verificadas.
*/
function verifica_campo_telefone(ddd,prefixo,numero){
    if(verifica_se_vazio(ddd.value)){
		alerta_e_foca("O DDD do telefone é obrigatório e encontra-se vazio!",ddd);
		return false;
	}

	if(!contem_apenas_numeros(ddd.value)){
		alerta_e_foca("O DDD do telefone deve conter apenas digitos numéricos!",ddd);
		return false;
	}

	if(verifica_se_vazio(prefixo.value)){
		alerta_e_foca("O Prefixo do telefone é obrigatório e encontra-se vazio!",prefixo);
        return false;
	}	

	if(!contem_apenas_numeros(prefixo.value)){
		alerta_e_foca("O Prefixo do telefone deve conter apenas digitos numéricos!",prefixo);
		return false;
	}
		
	if(verifica_se_vazio(numero.value)){
		alerta_e_foca("O Numero do telefone é obrigatório e encontra-se vazio!",numero);
		return false;
	}
	
	if(!contem_apenas_numeros(numero.value)){
		alerta_e_foca("O Numero do telefone deve conter apenas digitos numéricos!",numero);
		return false;
	}
	if(ddd.value.length<2 || prefixo.value.length<3 || numero.value.length<4){
		alerta_e_foca("Um dos campos de entrada do numero do telefone encontra-se com a quantidade de caracteres abaixo do permitido.",ddd);
		return false;
	}
	return true;
}
//Verifica o campo email
/* Esta função verifica o email digitado com base nos padrão RFC2822:Internet Message Format
	-recebe o valor do email digitado;
	-verifica se o campo do email está vazio, estando vazio envia uma mensagem de alerta e retorna false;
	-verifica se os caracteres digitados para o email são compativos retornando verdadeiro em caso afirmativo e falso em caso negativo, enviando uma mensagem;
	-Retorna verdadeiro ao final caso não seje detectado caracteres inválidos ou o campo vazio;
*/
function verifica_campo_email(campoEmail){
	if(verifica_se_vazio(campoEmail.value)){
		alerta_e_foca("O campo \"Email\" é obrigatório e encontra-se vazio!",campoEmail);
		return false;
	}
	//Esse codigo verifica o CampoEmail  tb segundo o padrão Internet RFC2822:Internet Message Format
	if(!/^[\w!#$%&'*+/=?^`{|}~-]+(\.[\w!#$%&'*+/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/.test(campoEmail.value)){
		alerta_e_foca("Endereço de e-mail inválido!",campoEmail);
		return false;
	}
	return true;		
}
/*Verifica os campos dia, mes e ano da seguinte forma:
	-verificando se os três campos estão vazios(verifica_se_vazio) e caso estejam uma mensagem é alertada(alerta_e_foca) e é retornado false;
	-verifica se cada um dos campo contém apenas números através da função contem_apenas_numeros e alerta uma mensagem em caso de não ter apenas números(alerta_e_foca);
	-verifica se o mês digitado é maior que 12, retornando false em caso afirmativo e emitindo uma mensagem (alerta_e_foca);
	-verifica se o mês é de 30 dias e verificando se o dia é maior que 30, em caso afirmativo uma mensagem é alertada (alerta_e_foca) e retorna-se false;
	-verifica se o mês é de 31 dias e verificando se o dia é maior que 31, em caso afirmativo uma mensagem é alertada (alerta_e_foca) e retorna-se false;
	-verifica se o ano é bissexto (resto da divisão do ano por 4 é igual a 0), se o mês é fevereiro(02) e se o dia é maior que 29 retornando false em caso afirmativo e alertando uma mensagem (alerta_e_foca);
	-verifica se o ano não é bissexto (resto da divisão do ano por 4 é diferente de 0), se o mês é fevereiro(02) e se o dia é maior que 28 retornando false em caso afirmativo e alertando uma mensagem (alerta_e_foca);
	-retorna verdadeiro se tudo estiver ok.
*/
//Verifica o campo Data
function verifica_campo_data(campoData){
	if(verifica_se_vazio(campoData.value)){
		return;
	}

	dataDividida = campoData.value.split("/");
	if(dataDividida.length!=3) {
		alerta_e_foca("Formato de data inválido",campoData);
		return false;
	}
	dia=dataDividida[0];
	mes=dataDividida[1];
	ano=dataDividida[2];
	
	if(ano<1900) {
		alerta_e_foca("O ano não pode ser menor que 1900",campoData);
		return false;
	}
	
	if(contem_apenas_numeros(dia)==false){
		alerta_e_foca("A data deve conter apenas dígitos numéricos!",campoData);
		return false;
	}			
	if(contem_apenas_numeros(mes)==false){
		alerta_e_foca("A data deve conter apenas dígitos numéricos!",campoData);
		return false;
	}	
	if(contem_apenas_numeros(ano)==false){
		alerta_e_foca("A data deve conter apenas dígitos numéricos!",campoData);
		return false;
	}
	if(mes>12 || mes<1){
		alerta_e_foca("O mês digitado é inexistente!",campoData);
		return false;
	}
	if(dia < 1 || dia >31 ){
		alerta_e_foca("O dia digitado é inexistente!",campoData);
		return false;
	}
	if(((mes==01) || (mes==03) || (mes==05) || (mes==07) || (mes==08) || (mes==10)|| (mes==12))&&(dia>31)){	
		alerta_e_foca("O dia digitado não pode ser maior que 31!",campoData);
		return false;
	}
	if(((mes==04) || (mes==06) || (mes==09) ||(mes==11))&&(dia>30)){
		alerta_e_foca("O dia digitado não pode ser maior que 30!",campoData);
		return false;
	}
	//Verifica o mês de fevereiro e o dia válido quando o ano é bissexto
	if((ano%4==0) && (mes==02) && (dia>29)){
		alerta_e_foca("O Dia não pode ser maior que 29!",campoData);
		return false;
	}
	//Verifica o mês de fevereiro e o dia válido quando o ano não é bissexto
	if((ano%4!=0) && (mes==02) && (dia>28)){
		alerta_e_foca("O Dia não pode ser maior que 28!",campoData);
		return false;
	}
	return true;	
}

//Valida o CPF de acordo com os dígitos verificadores
/*Verifica se o cpf digitado é válido da seguinte maneira:
-verifica se o campo está vazio, retornando false e alertando uma mensagem(alerta_e_foca);
-copia apenas o número do Cpf na variável número;
-coloca cada caracter da variável número em um array chamado dígito, verificando também se no campo encontram-se caracteres diferentes de números, ponto ou traço;
-coloca em dvinformado os dois últimos dígitos do número e atribui cada dígito do número no array dígito, com excessão dos dois últimos números;
-realiza o calculo dos dois últimos dígitos, multiplicando cada elemento do array dígito começando por 10(posição) e diminuindo 1 da posição a medida em que 
	se se muda o índice do array e somando os valores na variável soma.Na nona posição do array dígitos é atribuida a soma dividida por 11. Se esse valor for 
	menor que 2 será atribuído 0 se não será atribuído 11 menos o valor do digito[9].
-O mesmo processo anterior é aplicado para o calculo do décimo dígito, com a diferença que a posição começa por 11.
- Na variável dv é atribuído o valor dos dois diígitos para que possam ser comparados com os dois últimos dígitos informados no número. 

*/
function verifica_campo_cpf(campoCpf){
	//O campoCpfdv é o campo que vai  conter os 2 últimos dígitos q no CPF é separado por um -
	//Aqui começa a checagem do CPF		
	var posicao,y,soma,dv,dvinformado,numerocpf;		
	if(verifica_se_vazio(campoCpf.value)){
		return true;
	}	
	digito=new cria_array(10);
	numerocpf="";	
	//Desmembra o número do CPF no array dígito			
	for(y=0;y<campoCpf.value.length;y++){		
		if((campoCpf.value.charAt(y)>="0" && campoCpf.value.charAt(y)<="9") || (campoCpf.value.charAt(y)=="." && (y==3||y==7)) || (campoCpf.value.charAt(y)=="-" && (y==11))) {
			if((campoCpf.value.charAt(y)>="0" && campoCpf.value.charAt(y)<="9"))
				numerocpf+=campoCpf.value.charAt(y);
		}
		else{
			alerta_e_foca("O campo \"CPF\" só pode conter caracteres numéricos, \".\" ou \"-\" no formato de CPF",campoCpf);
			return false;
			/*if(campoCpf.value.charAt(y)!="." && campoCpf.value.charAt(y)!="-"){
				alerta_e_foca("O campo \"CPF\" só pode conter caracteres numéricos, \".\" ou \"-\"!" ,campoCpf);				
				y=campoCpf.value.length+1;
				return false;				
			}*/
		}									
	}	
	parseInt(numerocpf);
	dvinformado=numerocpf%100;	
	for(y=0;y<=10;y++){
		digito[y]=numerocpf.substr(y,1);
	}
	//Calcula o valor do décimo dígito da verificação	
	posicao=10;
	soma=0;
	for(y=0;y<=8;y++){			
		soma= soma + digito[y] * posicao;
		posicao= posicao - 1;				
	}	
	digito[9]= soma % 11;
	if(digito[9]<2){
		digito[9]=0;	
	}
	else{
		digito[9]=11-digito[9];
	}
	//Calcula o valor do décimo primeiro dígito da verificação
	posicao=11;
	soma=0;
	for(y=0;y<=9;y++){		
     	soma = soma + digito[y] * posicao;
		posicao=posicao-1;		
	}
	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 os digitos verificadores(os 2 últimos) estão corretos
	if(dv!=dvinformado){
		alerta_e_foca("O número do CPF não está correto!",campoCpf);					
		return false;
	}
	return true;	
}
/*

Verifica se a segunda data é maior que a primeira através dos campos dia, mes e ano de cada uma retornando true,se a segunda for maior e false em caso contrário.
*/
function verifica_data_maior(campodia1,campomes1,campoano1,campodia2,campomes2,campoano2){
	if(verifica_campo_data(campodia1,campomes1,campoano1)==false){
		return false;
	}
	if(verifica_campo_data(campodia2,campomes2,campoano2)==false){
		return false;
	}	
	if(campoano2.value>campoano1.value){
		return true;		
	}
	else{
		if(campoano2.value==campoano1.value && campomes2.value>campomes1.value){
			return true;
		}
		else{
			if(campoano2.value==campoano1.value && campomes2.value==campomes1.value && campodia2.value>campodia1.value){
				return true;
			}
		}
	}
	if(campodia1.value==campodia2.value && campomes1.value==campomes2.value && campoano1.value==campoano2.value){
		alerta_e_foca("As datas digitadas são iguais!",campodia1);
		return false;
	}
	alerta_e_foca("A data inicial é maior que a data final!",campodia1);	
	return false;		
}
/*
-Verifica se o campo está vazio;
-Verifica se os digitos são números, ponto ou vírgula retornando false em caso contrário;
-Verifica se um número digitado possui mais do que 2 casas decimais;
*/
function verifica_double(campo) {
	ponto=0;
	for(cont=0;cont<campo.value.length;cont++){
		if((campo.value.charAt(cont)<"0" || campo.value.charAt(cont)>"9") && (campo.value.charAt(cont)!=".")) {
			alerta_e_foca("Só é permitido números e ponto(.) nesse campo!",campo);
			return false;
		}
		if(campo.value.charAt(cont)==".") {
			if (cont==0) {
				alerta_e_foca("É preciso digitar um número antes do ponto(.)",campo);
				return false;
			}
			ponto+=1;
		}	
		if(ponto>1) {
			alerta_e_foca("Só pode existir um ponto(.)",campo);
			return false;
		}
	}
	return true;
}	

/*
Verifica se o e-mail é válido.
Esta função foi encontrada na internet.
Você deve passar o input e não o valor do input.
*/
function verificaEmail(email){
		prim = email.value.indexOf("@")
		if(prim < 2) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf("@",prim + 1) != -1) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf(".") < 1) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf(" ") != -1) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf("zipmeil.com") > 0) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf("hotmeil.com") > 0) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf(".@") > 0) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf("@.") > 0) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf(".com.br.") > 0) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf("/") > 0) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf("[") > 0) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf("]") > 0) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf("(") > 0) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf(")") > 0) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		if(email.value.indexOf("..") > 0) {
			alert("O e-mail informado parece não estar correto.");
			email.focus();
			email.select();
			return false;
		}
		return true;	
}

/*
Verifica se uma string é somente alfanumérica.
Esta função foi encontrada na internet.
Você deve passar o a string para validação.
Return
	True se string é alfanumérica;
	False se não é alfanumérica.
*/
function isAlphaNum( str ) {
// Retorna imediatamente se uma string inválida foi passada
	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return false;
	var isValid = true;
	
	// converte para string para realizar comparações de string
	str += "";
	// Itera através do length da string e testa se o caracter atual é alfanumérico
	for (i = 0; i < str.length; i++)
	{
	// Alfanuméricos devem estar entre "0"-"9", "A"-"Z", or "a"-"z"
		if (!(((str.charAt(i) >= "0") && (str.charAt(i) <= "9")) ||
		((str.charAt(i) >= "a") && (str.charAt(i) <= "z")) ||
		((str.charAt(i) >= "A") && (str.charAt(i) <= "Z"))))
		{
			isValid = false;
			break;
		}
	} // END for
	
	return isValid;
} // end isAlphaNum