/************************************************************************
* FUNÇÂO: Validar os formulários de cadastro                            *
* AUTOR: Gilnei Greco                                                   *
* DATA: 26/11/2003                                                      *
* OBS: Para o uso desta função deve-se criar nas tags os parametros     *
*       ob:(obrigatório)  desc: (descrição) e tipo.                     *
* Ex:<input type=text id="cpf" name="cpf" ob="1" desc="O CPF" tipo="cpf"*
*     size="20" maxlength="14">                                         *
************************************************************************/
//fução para validar CPF

function valida_CPF(s)
{
	var i;
	s = so_numero(s);
	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 false;

	d1 = 11 - (d1 % 11);
	if(d1 > 9)
		d1 = 0;

	if(dv.charAt(0) != d1)
	{
		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)
	{
		return false;
	}

	return true;
}

//fução para validar CNPJ

function valida_CGC(s)
{
	var i;
	s = so_numero(s);
	var c = s.substr(0, 12);
	var dv = s.substr(12, 2);
	var d1 = 0;
	for(i = 0; i < 12; i++)
	{
		d1 += c.charAt(11 - i) * (2 + (i % 8));
	}

	if(d1 == 0)
		return false;

	d1 = 11 - (d1 % 11);
	if(d1 > 9)
		d1 = 0;

	if(dv.charAt(0) != d1)
	{
		return false;
	}

	d1 *= 2;
	for(i = 0; i < 12; i++)
	{
		d1 += c.charAt(11 - i) * (2 + ((i + 1) % 8));
	}

	d1 = 11 - (d1 % 11);
	if(d1 > 9)
		d1 = 0;

	if(dv.charAt(1) != d1)
	{
		return false;
	}

	return true;
}

function campo_obrigatorio(fr)
{
	var a;
	var s = new String;
	var resp;
	a = 0;
	resp = true;
	for(a = 0; a < fr.elements.length; a++)
	{
		if(fr.elements[a].getAttribute('ob') == "1")
		{
			//limpa se já tem uma mensagem
			removeSeforClasse(fr.elements[a].previousSibling, "msg");
			//Verifca se a caixa em questão é um INPUT ou uma COMBO
			if(fr.elements[a].tagName != "select")
			{
				//Se for um INPUT faz a validação para INPUTs que consistem em ...
				s = fr.elements[a].value;
				//Limpar a string e verificar se seu tamanho (depois de limpa) é 0. Se for, ela só tinha espaços em branco
				s = tira_espacos(s);
				if((s.length == 0))
				{
					var mens = fr.elements[a].getAttribute('desc');
					fr.elements[a].focus();
					fr.elements[a].style.background = "#FFB3B3";
					fr.elements[a].style.color = "red";
					removeSeforClasse(fr.elements[a].previousSibling, "msg");
					if(mens != "")
					{
						mens += " é campo obrigatório!";
					}
					else
					{
						mens = "Campo Obrigatório";
					}

					printMsg(fr.elements[a], mens);
					resp = false;
				}
				else
				{
					fr.elements[a].style.color = "black";
					fr.elements[a].style.background = "#fff";
				}
			}
			else
			{
				//Caso a caixa seja uma COMBO seu valor é comparado a -99 para saber se está ou não preenchida
				// A exibição da mensagem de erro é igual
				if(fr.elements[a].item(fr.elements[a].selectedIndex).value == -99)
				{
					fr.elements[a].focus();
					fr.elements[a].style.background = "#FFB3B3";
					removeSeforClasse(fr.elements[a].previousSibling, "msg");
					if(mens != "")
					{
						mens += " é campo obrigatório!";
					}
					else
					{
						mens = "Campo Obrigatório";
					}

					printMsg(fr.elements[a], mens);
					resp = false;
				}
				else
				{
					fr.elements[a].style.color = "black";
					fr.elements[a].style.background = "#fff";
				}
			}
		}
	}

	// Se algum erro ocorreu, resp contém false e o formulário não será enviado
	return(resp);
}

//função que percorre o formutário procurando os campos obrigatórios e validando conforme o parâmetro tipo

function validar_tipos(fr)
{
	//Define as variáveis utilizadas na função
	var resp;
	var a = 0;
	var temp;
	var s;
	resp = true;
	var invalid;
	invalid = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
	// Faz o laço através de todos os elementos do form
	for(a = 0; a < fr.elements.length; a++)
	{
		if(fr.elements[a].getAttribute('tipo') == "cpf")
		{
			// Se o tipo for cpf, faz a validação de valores
			s = fr.elements[a].value;
			s = tira_espacos(s);
			if(fr.elements[a].getAttribute('ob') == "1" || s.length > 0)
			{
				// A validação só é feita se o campo for obrigatório OU se estiver preenchido
				temp = so_numero(fr.elements[a].value);
				if(temp.length == 11)
				{
					if(valida_CPF(temp) == false)
					{
						removeSeforClasse(fr.elements[a].previousSibling, "msg");
						printMsg(fr.elements[a], "CPF inválido!");
						fr.elements[a].style.color = "red";
						resp = false;
					}
					else
					{
						fr.elements[a].style.color = "black";
					}
				}
				else
				{
					removeSeforClasse(fr.elements[a].previousSibling, "msg");
					printMsg(fr.elements[a], "CPF deve possuir 11 dígitos!");
					fr.elements[a].style.color = "red";
					resp = false;
				}
			}
		}

		if(fr.elements[a].getAttribute('tipo') == "cnpj")
		{
			{
				// Se o tipo for cpf, faz a validação de valores
				s = fr.elements[a].value;
				s = tira_espacos(s);
				if(fr.elements[a].getAttribute('ob') == "1" || s.length > 0)
				{
					// A validação só é feita se o campo for obrigatório OU se estiver preenchido
					temp = so_numero(fr.elements[a].value);
					if(temp.length == 14)
					{
						if(valida_CGC(temp) == false)
						{
							removeSeforClasse(fr.elements[a].previousSibling, "msg");
							printMsg(fr.elements[a], "CNPJ inválido!");
							fr.elements[a].style.color = "red";
							resp = false;
						}
						else
						{
							fr.elements[a].style.color = "black";
						}
					}
					else
					{
						removeSeforClasse(fr.elements[a].previousSibling, "msg");
						printMsg(fr.elements[a], "CNPJ deve possuir 14 dígitos!");
						fr.elements[a].style.color = "red";
						resp = false;
					}
				}
			}
		}

		if(fr.elements[a].getAttribute('tipo') == "email")
		{
			{
				// Se o tipo for email, faz a validação de valores
				s = fr.elements[a].value;
				s = tira_espacos(s);
				if(fr.elements[a].getAttribute('ob') == "1" || s.length > 0)
				{
					// A validação só é feita se o campo for obrigatório OU se estiver preenchido
					if(invalid.test(fr.elements[a].value) == false)
					{
						removeSeforClasse(fr.elements[a].previousSibling, "msg");
						printMsg(fr.elements[a], "E-mail inválido!");
						fr.elements[a].focus();
						fr.elements[a].style.color = "red";
						resp = false;
					}
					else
					{
						fr.elements[a].style.color = "black";
					}
				}
			}
		}
	}

	//Se algo foi inválido, resp contém false
	return(resp);
}

//FUNÇÃO PRINCIPAL de validação

function valid(fr)
{
	var resp;
	resp = campo_obrigatorio(fr);
	if(resp == false)
	{
		return(false);
	}
	else
	{
		return(validar_tipos(fr));
	}
}

