
function validaFormulario(qualMeioSub)
{
	var mensagem = "Favor preencher corretamente o campo.";
	var campoProblema = "";
	var problema = false;

	// qualMeioSub
	// verifica se o submit foi dado pelo botao
	// ou via enter de teclado	
	
	for(var i=0;i<camposForm.length;i++)
	{
		var objVez = camposForm[i];
		var objVezValor = document.forms[objVez.nomeForm][objVez.nome].value;
		var alerta = "";
		
		alerta += "Nome campo: " + objVez.nome + "\n"
		alerta += "Nome Form: " + objVez.nomeForm + "\n"
		alerta += "Tipo Campo: " + objVez.tipoCampo + "\n"
		alerta += "Obrigatorio: " + objVez.obrigatorio + "\n"
		alerta += "Regra Validação: " + objVez.regraValida + "\n"
		alerta += "Num Caracteres Min: " + objVez.numCarMin + "\n"
		alerta += "Num Caracteres Max: " + objVez.numCarMax + "\n"
		alerta += "Mensagem: " + objVez.mensagem + "\n\n"
	
		alerta += "Valor do campo: " + objVezValor + "\n"
		//alert(alerta);
		
		if(objVez.obrigatorio)
		{
			// valores proibidos
			var arrProibidos = ["","--","-"];
			
			for(var z=0;z<arrProibidos.length;z++)
			{
				
				if(objVezValor == arrProibidos[z])
				{
					campoProblema = document.forms[objVez.nomeForm][objVez.nome];
					problema = true;
					break;
				}
			}
			if(problema)
				break;
		
		}
		
		// se ainda não deu problema
		if(!problema)
		{
			if((objVez.obrigatorio)||(objVezValor !=""))
			{
			
				// verifica número mínimo de caracteres
				if(objVez.numCarMin!="")
				{
					if(objVezValor.length < objVez.numCarMin)
					{
						campoProblema = document.forms[objVez.nomeForm][objVez.nome];
						problema = true;
						mensagem = "Existe um número mínimo de " + objVez.numCarMin + " caracteres a serem preenchidos neste campo.";
						break;
					}
				}

				// verifica número máximo de caracteres
				if(objVez.numCarMax!="")
				{
					if(objVezValor.length > objVez.numCarMax)
					{
						campoProblema = document.forms[objVez.nomeForm][objVez.nome];
						problema = true;
						mensagem = "Existe um número máximo de " + objVez.numCarMax + " caracteres a serem preenchidos neste campo.";
						break;
					}
				}			
			
			}
			
		}
		
		if(!problema)
		{
			//procura pela regra de validação específica
			if(objVez.regraValida=="soNumeros")
			{
				var testeNumero = objVezValor;
				
    				for (var zxc = 0; zxc < testeNumero.length; zxc++)
    				{   
				        // Check that current character is number.
					var caracTes = testeNumero.charAt(zxc);
				        if (!isDigit(caracTes)) 
				        {
				        	campoProblema = document.forms[objVez.nomeForm][objVez.nome];
						problema = true;
						mensagem = "Favor preencher este campo apenas com números.";
						break;
				        }
    				}
				
				if(problema)
					break;
				
			}
			
			//procura pela regra de validação específica
			if((!problema)&&(objVez.regraValida=="email"))
			{
				var posArroba = objVezValor.indexOf("@");
				var posPonto = objVezValor.indexOf(".",posArroba);
				
				if((posArroba <=0)||(posPonto <=0))
					problema = true;
	
				if(posArroba+1 == posPonto)
					problema = true;

				if(posPonto == (objVezValor.length-1))
					problema = true;

				if((posPonto+3) > objVezValor.length)
					problema = true;
								
				if(problema)
				{
					campoProblema = document.forms[objVez.nomeForm][objVez.nome];
					mensagem = "Favor preencher este campo com um e-mail válido.";
					break;
				}
			}
			
			//procura pela regra de validação específica
			if((!problema)&&(objVez.regraValida=="cpf"))
			{				
				if(!confereCPF(objVezValor))
				{
					problema = true;
					campoProblema = document.forms[objVez.nomeForm][objVez.nome];
					mensagem = "Favor preencher este campo com um CPF válido.";
					break;
				}	
			}
			
			
		}
	}
	
	
	if(problema)
	{
		//alert(objVez.nome);
		
		if(campoProblema)
		{
			alert(mensagem);
			//campoProblema.value="aaaaaaaaaaaaaaaaaa";
			campoProblema.focus();
		}
		
		if (qualMeioSub==2)
			return false;
	}
	else
	{
		if (qualMeioSub==2)
			return true;
		else
			document.forms[0].submit();
	}

}

//-----------------------------------------

function confereCPF(cpf)
{
	var conferido = false;

	if (cpf.length>10)
	{
		var semDigito = cpf.substring(0,(cpf.length)-2);
		var dv = calcRes(semDigito);

		conferido = (dv==cpf.substring(cpf.length-2,cpf.length-1));

		if (conferido)
		{
			 semDigito = semDigito + dv;

			 conferido = (calcRes(semDigito)== cpf.substring(cpf.length-1,cpf.length));
		 }
  	}


	if (!conferido)
	{
		   return false;
	}
	else
	{
		return true;
	}

}

function calcRes(oque)
{
      var invertido = reverso(oque);
   	  var soma = 0;
	   for (var i = 0; i < invertido.length; i++)
            soma = soma + (i+2)*eval(invertido.charAt(i))

      soma*=10;

      return ((soma % 11) % 10)
}


function reverso(oque)
{

   var strT = "";

   for (var i = (oque.length-1); i >=0; i--)
      strT += oque.charAt(i);

   return strT;

}

//-----------------------------------------

function objForm(nome, nomeForm, tipoCampo, obrigatorio, regraValida, numCarMin, numCarMax, mensagem)
{
	// nome do campo ex: endereco
	this.nome = nome;
	
	// nome do formulário
	this.nomeForm = nomeForm
	
	// tipo = type do obj do formulário ex: text, select
	this.tipoCampo = tipoCampo;
	
	// diz se o campo é obrigatório
	this.obrigatorio = obrigatorio;
	
	// regra de validação
	this.regraValida = regraValida;
	
	// número de caracteres mínimo
	// mesmo que o campo não seja obrigatório,
	// pode-se exigir que caso exista algum 
	// valor digitado exista um número mínimo
	// de caracteres a serem preenchidos
	this.numCarMin = numCarMin;
	
	// número de caracteres máximo
	// mesmo caso anterior porém
	// limitação máxima de caracteres
	
	this.numCarMax = numCarMax;
	
	// mensagem caso haja erro na validação
	// esta mensagem sobreescreve a mensagem
	// padrao e a mensagem do tipo de validacao
	this.mensagem = mensagem;

}

//-----------------------------------------

function isDigit (c)
{   
	return ((c >= "0") && (c <= "9"))
}