//
// Copyright (C) 2008. Flex Soluções. Todos os direitos reservados
// Fale conosco: http://www.flexsolucoes.com.br
//
// FUNCÕES ----------------------------------------------------------------------------------------------------------------------
// (1) Checa formulário (cadastro, alteração...)
// (2) verifica CPF informado
// (3) verifica CNPJ informado
// (4) verifica Email se é válido ou não
// ------------------------------------------------------------------------------------------------------------------------------


//(1) Checa formulário (cadastro, alteração...)
function checaForm(form)
{
	form = document.getElementById(form);
		
	var arrayAlerta = new Array();
	var arrayCampo = new Array();
	var totalForm = form.length;
	var j = 0;
	var verifica;
	var requerido;
	
	for(var i =0; i < totalForm; i++)
	{
		verifica = form.elements[i].title;
		elemento = form.elements[i];
		classe = form.elements[i].className;
		
		var myRegExp = /requerido/;
		var requerido = classe.search(myRegExp);
		
		if(requerido != -1)
		{
			
			//Trabalha com o elemento caso ele nao esteja desabilitado
			switch(elemento.type) 
			{

				//Realiza a acao dependendo do tipo de elemento
				case 'text': case 'password': case 'hidden': case 'checkbox':
					
					if(elemento.value=="")
					{
						arrayAlerta[j] = verifica;
						arrayCampo[j] = form.elements[i];
						j++;
						
					}
					else
					{
						if(classe.search(/tipo/) != -1)
						{
							
							if(classe.search(/numero/) != -1)
							{
								if(isNaN(elemento.value))
								{
									arrayAlerta[j] = verifica +  ' - Deve conter apenas números';
									arrayCampo[j] = form.elements[i];
									j++;
								}
							}
								
							if(classe.search(/cpf/) != -1)
							{
								var mensagemCpf = checaCPF(elemento.value);
								
								if(mensagemCpf)
								{
									arrayAlerta[j] = verifica +  ' - ' + mensagemCpf;
									arrayCampo[j] = form.elements[i];
									j++;
								}
							}
								
							if(classe.search(/cnpj/) != -1)
							{
								var mensagemCnpj = checaCNPJ(elemento.value);
								
								if(mensagemCnpj)
								{
									arrayAlerta[j] = verifica +  ' - ' + mensagemCnpj;
									arrayCampo[j] = form.elements[i];
									j++;
									
								}
							}
								
							if(classe.search(/cpfCnpf/) != -1)
							{
								if(elemento.value.length <= 11)
								{
									var mensagemCpf = checaCPF(elemento.value);
									
									if(mensagemCpf)
									{
										arrayAlerta[j] = verifica +  ' - ' + mensagemCpf;
										arrayCampo[j] = form.elements[i];
										j++;
										
									}
								}
								else
								{
									var mensagemCnpj = checaCNPJ(elemento.value);
									
									if(mensagemCnpj)
									{
										arrayAlerta[j] = verifica +  ' - ' + mensagemCnpj;
										arrayCampo[j] = form.elements[i];
										j++;
										
									}
								}
								
							}
								
							if(classe.search(/confirmarEmail/) != -1)
							{
								if (form.elements[i].value != form.elements[i-1].value)
								{
									arrayAlerta[j] = verifica +  ' -  O email e confirmação de email não conferem. ';
									arrayCampo[j] = form.elements[i];
									
									j++;
								}
							}
							
							if(classe.search(/email/) != -1)
							{
									var mensagemEmail = checaEmail(elemento.value);
									
									if(mensagemEmail)
									{
										arrayAlerta[j] = verifica +  ' - ' + mensagemEmail;
										arrayCampo[j] = form.elements[i];
										j++;
									}
							}
							
							if(classe.search(/confirmarSenha/) != -1)
							{
								if (form.elements[i].value != form.elements[i-1].value)
								{
									arrayAlerta[j] = verifica +  ' -  A senha não confere com a senha digitada. ';
									arrayCampo[j] = form.elements[i];
									
									j++;
								}
							}
							
							if(classe.search(/senha/) != -1)
							{
								var comprimentoSenha = (form.elements[i].value).length;
								if (comprimentoSenha < 6 )
								{
									arrayAlerta[j] = verifica +  ' -  a senha deve conter no mínimo 6 dígitos. ';
									arrayCampo[j] = form.elements[i];
									
									j++;
								}
							}
							
							if(classe.search(/login/) != -1)
							{
								var comprimentoLogin = (form.elements[i].value).length;
								if (comprimentoLogin < 4 )
								{
									arrayAlerta[j] = verifica +  ' -  o login deve conter no mínimo 4 dígitos. ';
									arrayCampo[j] = form.elements[i];
									
									j++;
								}
							}
							
							if((classe.search(/data/) != -1) && (classe.search(/dataNasc/) == -1))
							{
								
								var expReg = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/([1][9]\d{2}|[2][0]\d{2}))$/;
								
								if ((elemento.value.match(expReg)) && (elemento.value!='')) {
									
									var vdt = new Date();
									var array_data = elemento.value.split("/");
									var idade = vdt.getFullYear()-parseInt(array_data[2]);
									
									
									var dia = elemento.value.substring(0,2);
									var mes = elemento.value.substring(3,5);
									var ano = elemento.value.substring(6,10);
								
									if((mes==04 && dia > 30) || (mes==06 && dia > 30) || (mes==09 && dia > 30) || (mes==11 && dia > 30)){
										arrayAlerta[j] = verifica +  ' -  O mês especificado contém no máximo 30 dias. ';
										arrayCampo[j] = form.elements[i];
										j++;
									} else{
										if(ano%4!=0 && mes==2 && dia>28){
											arrayAlerta[j] = verifica +  ' -  O mês especificado contém no máximo 28 dias. ';
											arrayCampo[j] = form.elements[i];
											j++;
										} else{
											if(ano%4==0 && mes==2 && dia>29){
												arrayAlerta[j] = verifica +  ' -  O mês especificado contém no máximo 29 dias. ';
												arrayCampo[j] = form.elements[i];
												j++;
											}
										}
									}
								} else {
									arrayAlerta[j] = verifica +  ' -  digite uma data válida. ';
									arrayCampo[j] = form.elements[i];
									j++;
								}
							}

							if(classe.search(/dataNasc/) != -1)
							{
								
								var expReg = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/([1][9]\d{2}|[2][0]\d{2}))$/;
								
								if ((elemento.value.match(expReg)) && (elemento.value!='')) {
									
									var vdt = new Date();
									var array_data = elemento.value.split("/");
									var idade = vdt.getFullYear()-parseInt(array_data[2]);
									
									var dia = elemento.value.substring(0,2);
									var mes = elemento.value.substring(3,5);
									var ano = elemento.value.substring(6,10);
								
									if((mes==04 && dia > 30) || (mes==06 && dia > 30) || (mes==09 && dia > 30) || (mes==11 && dia > 30)){
										arrayAlerta[j] = verifica +  ' -  O mês especificado contém no máximo 30 dias. ';
										arrayCampo[j] = form.elements[i];
										j++;
									} else{
										if(ano%4!=0 && mes==2 && dia>28){
											arrayAlerta[j] = verifica +  ' -  O mês especificado contém no máximo 28 dias. ';
											arrayCampo[j] = form.elements[i];
											j++;
										} else{
											if(ano%4==0 && mes==2 && dia>29){
												arrayAlerta[j] = verifica +  ' -  O mês especificado contém no máximo 29 dias. ';
												arrayCampo[j] = form.elements[i];
												j++;
											} else{
												if ((idade<14) || (idade>90)) {
													arrayAlerta[j] = verifica +  ' -  Ano de nascimento inválido. ';
													arrayCampo[j] = form.elements[i];
													j++;
												}
											}
										}
									}
								} else {
									arrayAlerta[j] = verifica +  ' -  digite uma data válida. ';
									arrayCampo[j] = form.elements[i];
									j++;
								}
							}
						}
					}
					
				break;
				
				case 'radio':
					
					if(classe.search(/nome/) != -1)
					{
						
						var nomeRadio = classe.slice(classe.search(/nome/) + Number(5));
						
						if(classe.search(nomeRadio) != -1)
						{
							
							var radios = document.getElementsByName(nomeRadio + '[]');
							var erro = 0;
							
							for (var x = 0; x < radios.length; x++)
							{
								
								if (radios[x].checked == true)
								{
									
								}else
								{
									erro++;
								}
								
								if(erro > radios.length-1)
								{
									arrayAlerta[j] = verifica;
									arrayCampo[j] = form.elements[i];
									j++;
								}
								
								radios[x].className = 'nome ' + nomeRadio;
							}
							
						}
						
					}
										
				break;
				
				case 'textarea':
					if(elemento.value=="")
					{
						arrayAlerta[j] = verifica;
						arrayCampo[j] = form.elements[i];
						j++;
					}
					
				break;
								
				case 'select-multiple':
					
					if((elemento.value=="")||(elemento.value==0))
					{
						arrayAlerta[j] = verifica;
						arrayCampo[j] = form.elements[i];
						j++;
					}
					else
					{
						if(classe.search(/numero/) != -1)
						{
							if(isNaN(elemento.value))
							{
								arrayAlerta[j] = verifica +  ' - Deve conter apenas números';
								arrayCampo[j] = form.elements[i];
								j++;
							}
							
						}
							
					}
		
				break;
				
				case 'select-one':
					
					if((elemento.value=="")||(elemento.value==0))
					{
						arrayAlerta[j] = verifica;
						arrayCampo[j] = form.elements[i];
						j++;
					}
					else
					{
						if(classe.search(/numero/) != -1)
						{
							if(isNaN(elemento.value))
							{
								arrayAlerta[j] = verifica +  ' - Deve conter apenas números';
								arrayCampo[j] = form.elements[i];
								
								j++;
							}
						}
					}
				
				break;
			}
			
		}
	}


	if(arrayAlerta[0])
	{
		var alerta = 'O(s) seguinte(s) Campo(s) deve(m) ser Preenchido(s) corretamente \n';
		for(var i = 0; i < arrayCampo.length; i++)
		{
			classes = "";
			
			if(arrayCampo[i].className.search(/tipo/) != -1)
			{
				var classes = 'tipo ';
				if(arrayCampo[i].className.search(/numero/) != -1)
				{
					classes += ' numero';
				}
					
				if(arrayCampo[i].className.search(/cpf/) != -1)
				{
					classes += ' cpf';
				}
					
				if(arrayCampo[i].className.search(/cnpj/) != -1)
				{
					classes += ' cnpj';
				}
					
				if(arrayCampo[i].className.search(/cpfCnpf/) != -1)
				{
					classes += ' cpfCnpf';
				}
					
				if(arrayCampo[i].className.search(/email/) != -1)
				{
					classes += ' email';
				}
				
				if(arrayCampo[i].className.search(/confirmarEmail/) != -1)
				{
					classes += ' confirmarEmail';
				}
				if(arrayCampo[i].className.search(/confirmarSenha/) != -1)
				{
					classes += ' confirmarSenha';
				}
				
				if(arrayCampo[i].className.search(/senha/) != -1)
				{
					classes += ' senha';
				}
				
				if(arrayCampo[i].className.search(/login/) != -1)
				{
					classes += ' login';
				}
			
				if(arrayCampo[i].className.search(/data/) != -1)
				{
					classes += ' data';
				}
			
				if(arrayCampo[i].className.search(/dataNasc/) != -1)
				{
					classes += ' dataNasc';
				}
			
				if(arrayCampo[i].className.search(/login/) != -1)
				{
					classes += ' login';
				}
			
			}
			
			if(arrayCampo[i].className.search(/nome/) != -1)
			{
				
				var nomeRadio = arrayCampo[i].className.slice(arrayCampo[i].className.search(/nome/) + Number(5));
				
				if(arrayCampo[i].className.search(nomeRadio) != -1)
				{
				
				
				
				
					classes += ' nome ' + nomeRadio;
				}
				
			}
					
			arrayCampo[i].className='red requerido ' + classes;
			arrayCampo[i].onblur = function()
			{
				this.className = this.className.replace("red","inputbox");
			};
			
			alerta += ' - ' + arrayAlerta[i] + '\n';
			
		}
		
		alert(alerta);
		arrayCampo[0].focus();
		return  false;
		
	}

	//return (true);
	form.submit();
}

//(2) verifica CPF informado
function checaCPF(valor)
{
	// teste se usuário digitou apenas número
	var reDigits = /^\d+(,\d+)?$/;
	if (!reDigits.test(valor)) 
	{
			return ("Digite apenas números !");
	} 
	else 
	{
		s = valor;
		
		var i;
		var c = s.substr(0,9);
		var dv = s.substr(9,2);
		var d1 = 0;
		
		for (i = 0; i < 9; i++)
		{
			d1 += c.charAt(i)*(10-i);
		}
		
		if (d1 == 0)
		{
			return ("verifique o CPF digitado !");
		}
		
		d1 = 11 - (d1 % 11);
		if (d1 > 9) 
		{
			d1 = 0;
		}
		
		if (dv.charAt(0) != d1)
		{
			return ("verifique o CPF digitado !");
		}
	
		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)
		{
			return("verifique o CPF digitado !");
		}
		
	}
}

//(3) verifica CNPJ informado
function checaCNPJ(CNPJ) 
{
	
	erro = new String;
	if (CNPJ.length < 18) erro += " inválido!";
	if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-")){
		if (erro.length == 0) erro = " inválido!";
	}
	//substituir os caracteres que nao sao numeros
	if(document.layers && parseInt(navigator.appVersion) == 4){
		x = CNPJ.substring(0,2);
		x += CNPJ.substring(3,6);
		x += CNPJ.substring(7,10);
		x += CNPJ.substring(11,15);
		x += CNPJ.substring(16,18);
		CNPJ = x;
	} else {
		CNPJ = CNPJ.replace(".","");
		CNPJ = CNPJ.replace(".","");
		CNPJ = CNPJ.replace("-","");
		CNPJ = CNPJ.replace("/","");
	}
	var nonNumbers = /\D/;
	if (nonNumbers.test(CNPJ)) erro = "Digite apenas números !";
		var a = [];
		var b = new Number;
		var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
		for (i=0; i<12; i++){
		a[i] = CNPJ.charAt(i);
		b += a[i] * c[i+1];
	}
	if ((x = b % 11) < 2) { a[12] = 0; } else { a[12] = 11-x; }
		b = 0;
		for (y=0; y<13; y++) {
		b += (a[y] * c[y]);
	}
	if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
	if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
		erro ="Digito verificador com problema!";
	}
	if (erro.length > 0){
		return(erro);
	} else {
		return false;
	}
}

//(4) verifica Email se é válido ou não
function checaEmail(valor)
{
		prim = valor.indexOf("@");
		if(prim < 2)
			return ("O e-mail informado parece não estar correto.");

		if(valor.indexOf(".") < 1) 
			return ("O e-mail informado parece não estar correto.");
		
		if(valor.indexOf(" ") != -1) 
			return ("O e-mail informado parece não estar correto.");
		
		if(valor.indexOf("zipmeil.com") > 0) 
			return ("O e-mail informado parece não estar correto.");
		
		if(valor.indexOf("hotmeil.com") > 0) 
			return ("O e-mail informado parece não estar correto.");
			
		if(valor.indexOf(".@") > 0) 
			return ("O e-mail informado parece não estar correto.");
			
		if(valor.indexOf("@.") > 0) 
			return ("O e-mail informado parece não estar correto.");
			
		if(valor.indexOf(".com.br.") > 0) 
			return ("O e-mail informado parece não estar correto.");
			 
		if(valor.indexOf("/") > 0) 
			return ("O e-mail informado parece não estar correto.");
		
		if(valor.indexOf("[") > 0) 
			return ("O e-mail informado parece não estar correto.");
			
		if(valor.indexOf("]") > 0) 
			return ("O e-mail informado parece não estar correto.");
			
		if(valor.indexOf("(") > 0) 
			return ("O e-mail informado parece não estar correto.");
			
		if(valor.indexOf(")") > 0)
			return ("O e-mail informado parece não estar correto.");

		if(valor.indexOf("..") > 0)
			return ("O e-mail informado parece não estar correto.");

		return false;
	
}
