/**
* Função de validação para campos de um form
* Para implementar esta função basta setar as regras direto no documento onde encontra-se o form
* A documentação encontra-se na wiki da biblioteca
* 
*
* @autor Alexandre I. Kopelevitch
*
* @criado - 15/09/2008
* -------------------------------
* @(15/09/2008 | 10:00) até (17/09/2008 | 10:00) / Alexandre I. Kopelevitch
* @tempo total - 17:00
* -------------------------------
* @deprecated - não
*/

function html_entity_decode(str) 
{
	var ta=document.createElement("textarea");
	ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
	return ta.value;
}

function valida(form)
{
	var elem      = document.getElementById(form).elements;
	var alertErro = ''; 
	// var label = document.getElementsByTagName('label');
	
	// Limpa os labels
	/*for(var j = 0; j < label.length; j++)
	{
		document.getElementsByTagName('label')[j].innerHTML = '';
	}// fim FOR
	*/
	
	for(var i = 0; i < elem.length; i++)
	{
		
		//alert(elem[i].obrigatorio[1]);
		var eValor  = elem[i].value;
		var eNome   = elem[i].name;
		var eLength = elem[i].value.length;
		
		//var label = document.getElementsByTagName('label')[i];
		
		/****************************
		Checagem de valores obrigatórios
		****************************/
		if (elem[i].obrigatorio && elem[i].obrigatorio[0] == 1)
		{
			var eTitulo = elem[i].obrigatorio[1];
			if (eValor == '')
			{
				if(!elem[i].obrigatorioErro){erro = '- ' + eTitulo + ' &eacute; um campo obrigat&oacute;rio'}else{erro = elem[i].obrigatorioErro;}
				alertErro += erro + '\n';
				/*label.innerHTML = erro;
				label.style.display = 'inline';*/
				var erro = 1;
				elem[i].focus();
			}// fim IF
			
			/****************************
			Checagem dos tipos de valores
			****************************/
			if (elem[i].tipo)
			{
				
				switch (elem[i].tipo)
				{
					case 'email':
						var reg = /^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
						
						if(!reg.test(eValor))
						{
							if(!elem[i].tipoErro){erro = '- Email inv&aacute;lido'}else{erro = elem[i].tipoErro;}
							alertErro += erro + '\n';
							/*if (!label.innerHTML){label.innerHTML = erro}; 
							label.style.display = 'inline';*/
							erro = 1;
							elem[i].focus();
						}// fim IF
						
					break;
					
					case 'data':
						var reg = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$/;
						
						if(!reg.test(eValor))
						{
							if(!elem[i].tipoErro){erro = '- Data inv&aacute;lida'}else{erro = elem[i].tipoErro;}
							alertErro += erro + '\n';
							/*if (!label.innerHTML){label.innerHTML = erro}; 
							label.style.display = 'inline';*/
							erro = 1;
							elem[i].focus();
						}// fim IF
						
					break;
					
					case 'cep':
						var reg = /^[0-9]{5}-[0-9]{3}$/;
						
						if(!reg.test(eValor))
						{
							if(!elem[i].tipoErro){erro = '- CEP inv&aacute;lido'}else{erro = elem[i].tipoErro;}
							alertErro += erro + '\n';
							/*if (!label.innerHTML){label.innerHTML = erro}; 
							label.style.display = 'inline';*/
							erro = 1;
							elem[i].focus();
						}// fim IF
						
					break;
					
					case 'numerico':
						var reg = /^[0-9]*$/;
						
						if(!reg.test(eValor))
						{
							if(!elem[i].tipoErro){erro = '- ' + eTitulo + ' deve ser num&eacute;rico'}else{erro = elem[i].tipoErro;}
							alertErro += erro + '\n';
							/*if (!label.innerHTML){label.innerHTML = erro}; 
							label.style.display = 'inline';*/
							erro = 1;
							elem[i].focus();
						}// fim IF
						
					break;
					
				}// fim SWITCH
				
			}// fim IF
			
			/****************************
			Checagem de compmin - Comprimento Mínimo do campo
			****************************/
			if (elem[i].compMin)
			{
				if (eLength < elem[i].compMin)
				{
					if(!elem[i].compMinErro){erro = '- ' + eTitulo + ' n&atilde;o pode ter menos que '+elem[i].compMin+' caract&eacute;res'}else{erro = elem[i].compMinErro;}
					alertErro += erro + '\n';
					/*label.innerHTML = erro; 
					label.style.display = 'inline';*/
					erro = 1;
elem[i].focus();
				}// fim IF
				
			}// fim IF
			
			/****************************
			Checagem de compMax - Comprimento Máximo do campo
			****************************/
			if (elem[i].compMax)
			{
				if (eLength > elem[i].compMax)
				{
					if(!elem[i].compMaxErro){erro = '- ' + eTitulo + ' n&atilde;o pode ter mais que '+elem[i].compMax+' caract&eacute;res'}else{erro = elem[i].compMaxErro;}
					alertErro += erro + '\n';
					/*label.innerHTML = erro;
					label.style.display = 'inline';*/
					erro = 1;
elem[i].focus();
				}// fim IF
				
			}// fim IF
			
			
			/****************************
			Checagem de igualdade entre os campos
			****************************/
			if (elem[i].igual)
			{
				
				if (eValor != document.getElementById(elem[i].igual).value)
				{
					if(!elem[i].igualErro){erro = '- ' + eTitulo + ' n&atilde;o coincide'}else{erro = elem[i].igualErro;}
					alertErro += erro + '\n';
					/*label.innerHTML = erro; 
					label.style.display = 'inline';*/
					erro = 1;
					elem[i].focus();
					elem[i].focus();
				}// fim IF
				
			}// fim IF
			
			 
			
		}// fim IF
		
	}// fim FOR
	
	if (erro == 1) {alert(html_entity_decode(alertErro)); return false} else {return true};
}
