///////////////////////////////////////  VALIDAÇÃO GENÉRICA DE FORM V. 2.0 ///////////////////////////////////////////////////
//																															//
//	CRIADA POR: 			Denis Carneiro - denis@agenciadmk.com.br - São Paulo - Brasil									//
//	DATA DE FINALIZAÇÃO: 	03/06/2007 20:00																				//
//																															//
//									INSTRUÇÕES DE CONFIGURAÇÃO																//
//																															//
// Colocar um campo do tipo hidden com o nome (nome do formulario) + validação. Ex: form1validacao.							//
// No <form> colocar onsubmit="return validaForm(this);"																	//
//																															//
// 						A CONFIGURAÇÃO DE CADA CAMPO DEVE SER FEITA ASSIM:													//
// 																															//
//		1- id_do_campo(regra_de_validação{}tipo_de_validação)Outro_id_de_campo(...											//
// 		2- Para colocar várias alternativas, colocar || (ou). EX: senha(regra1 || regra2 {} tipo)							//
// 		3- Para colocar várias alternativas obrigatórias, basta colocar 2 validações para o mesmo							//
//		   campo. Ex: senha(regra{}validação)senha(regra2{}validação)...													//
// 		4- O campo pode ter ou não uma validação. Neste caso usar: campo(regra) ou campo(regra{})							//
// 																															//
// 									AS VALIDAÇÕES DISPONIVEIS SÃO:															//
// 																															//
// 		1- 	dt 	 -	data formato: dd/mm/aa																					//
// 		2- 	dt2  -	data formato: dd/mm/aaaa																				//
// 		3- 	dt3  -	data formato: dd/mm																						//
// 		4- 	dt4  -	data formato: mm/aa																						//
// 		5- 	dt5  -	data formato: mm/aaaa																					//
// 		6- 	h 	 -	hora formato: hh:mm:ss																					//
// 		7- 	h2   -	hora formato: hh:mm																						//
// 		9- 	n  	 -	numérico																								//
// 		10- em   -	e-mail																									//
// 		11- cep  -	cep																										//
// 		12- cpf  -	cpf																										//
// 		13- cnpj -	cnpj																									//
// 		14- rg   -	rg																										//
// 		15- url  -	url																										//
// 		16- fl   -	float com 1 casa decimal, positivos ou negativos, com ou sem separação de milhar.						//
// 		17- fl2  -	float com 2 casas decimais, positivos ou negativos, com ou sem separação de milhar.						//
// 		18- fl3  -	float com 3 casas decimais, positivos ou negativos, com ou sem separação de milhar. 					//
// 		19- fl4  -	float com de uma até infinitas casas decimais, positivos ou negativos, com ou sem separação de milhar.	//
// 		20- fl5  -	float com de duas casas decimais, positivos ou negativos, com ou sem separação de milhar, podendo não   //
// 					ter casas decimais.																						//
// 																															//
// 										AS REGRAS DE VALIDAÇÃO SÃO															//
// 																															//
// 		1- Para forçar o preenchimento ou seleção de um campo, colocar campo(ni;nf), sendo que								//       
//		   ni = a quantidade inicial (para não obrigatório, colocar 0) e nf é a quantidade final (para  					//
// 		   não obrigar a quantidade máxima, pode-se colocar n ou nada (campo(2;n) ou campo(2;))								//
// 		   esta regra serve tanto para caracteres, quanto seleção em checkbox ou select múltiplo.							//
// 																															//
// 		2- Para forçar o campo a ser igual a uma string, colocar a string entre aspas simples.								//
//		   Ex: campo('denis') ou campo('denis'{})																			//
// 																															//
// 		3- Para forçar um campo a ser preenchido com o valor igual ao valor de outro campo, colocar o						//
// 		   Id do outro campo sem aspas. Ex: confirmasenha(senha)															//
// 																															//
// 		4- Para o caso 2 ou 3, podemos querer que o campo tenha parte de uma string ou do valor de outro					//
// 		   campo. Neste caso, usamos o sinal de %:																			//
// 		   a) campo(%'enis') 	- o campo termina com "enis" - pode ser: "tenis" ou "denis"...								//
// 		   b) campo('denis'%) 	- o campo começa com "denis"  -	pode ser: "denis" ou "denise"								//
// 		   c) campo(%'bomba'%) 	- o campo contém "bomba" 	 -	pode ser: "bomba" ou "bombas" ou "anti-bombas" 				//
// 		   d) campo(%outrocampo)- o campo termina com o valor de outro campo								  				//
// 		   e) campo(outrocampo%)- o campo começa com o valor de outro campo													//
// 		   f) campo(%outrocampo%)- o campo contém o valor de outro campo									  				//
// 		 																													//
// 		5- Para usar uma condição, usar o "<" antes do nome do campo 														//
// 		   Ex. <onde('outro')qual(1;) --> se o campo onde tiver o valor outro, o campo qual torna-se obrigatório			//
// 		   Ex.2 <pessoa('fisica')documento(1;{}cpf) -> se o radio pessoa for selecionado como física, então					//
// 		   o campo documento deve ser preenchido com um cpf válido															//
// 																															//
// 												EXEMPLO DE USO																//
// 																															//
// 		1- Suponhamos que temos uma tela de cadastro de usuário com os campos: 												//
// 		   a) Login (id = login - textfielf, tipo e-mail, obrigatório)														//
// 		   b) Senha (id = senha - textfield, tipo numérica, deve ser preenchida de 8 a 10 caracteres)						//
// 		   c) Confirma senha (id = confirmasenha - textfield, deve ter valor igual ao campo senha)							//
// 		   d) Onde conheceu o site? (id = onde - select múltiplo - pelo menos um deve ser preenchido)						//
// 		   e) Aceito os termos (id = aceito	- radio - a opção "sim" deve ser selecionada									//
// 		   f) cidades (id = cidades - checkbox - deve ser selecionada de 5 a 10 ciaddes)									//
// 		   g) Sexo	(id = sexo - radio - uma opção deve ser selecionada)													//
// 		   h) outro (id = outro - textfield - é obrigatório se o onde tiver o value "outros"								//
// 																															//
// 																															//
// 										A validação ficaria assim:															//
// 																															//
//login(1;{}em)senha(8;10{}n)confirmasenha(senha)onde(1;)aceito('sim')cidades(5;10)sexo(1;1)<onde('outros')outro(1;)		//
// 																															//
// 									O HTML DESTE FORM FICARIA ASSIM															//
// 																															//
//<form id="formteste" name="formteste" method="post" action="#" onsubmit="return validaForm(this);">						//
//  Login: <input type="text" name="login" id="login" maxlength="64" /><br />												//
//  Senha: <input type="text" name="senha" id="senha" maxlength="10" /><br />												//
//  Confirme a senha: <input type="text" name="confirmasenha" id="confirmasenha" maxlength="10" /><br />					//
//  Onde conheceu o site?																									//
//  <select name="onde" size="4" multiple>																					//
//  	<option value="Revista">Revista</option>																			//
//	<option value="Internet">Internet</option>																				//
//	<option value="Televisão">Televisão</option>																			//
//	<option value="Outro">Outro</option>																					//
//  </select> 																												//
//  Qual? <input type="text" name="outro" id="outro" maxlength="32" /><br />												//
//  Selecione de 5 a 10 cidades abaixo:<br />																				//
//  cidade1 <input name="cidades" type="checkbox" value="cidade1" /><br />													//
//  cidade2 <input name="cidades" type="checkbox" value="cidade2" /><br />													//
//  cidade3 <input name="cidades" type="checkbox" value="cidade3" /><br />													//
//  cidade4 <input name="cidades" type="checkbox" value="cidade4" /><br />													//
//  cidade5 <input name="cidades" type="checkbox" value="cidade5" /><br />													//
//  cidade6 <input name="cidades" type="checkbox" value="cidade6" /><br />													//
//  cidade7 <input name="cidades" type="checkbox" value="cidade7" /><br />													//
//  cidade8 <input name="cidades" type="checkbox" value="cidade8" /><br />													//
//  cidade9 <input name="cidades" type="checkbox" value="cidade9" /><br />													//
//  cidade10 <input name="cidades" type="checkbox" value="cidade10" /><br />												//
//  cidade11 <input name="cidades" type="checkbox" value="cidade11" /><br />												//
//  Sexo:<br />																												//
//  Masculino <input name="sexo" type="radio" value="Masculino" /> 															//
//	Feminino <input name="sexo" type="radio" value="Feminino" />															//
//  <br />																													//
//  Você aceita os termos? sim <input name="aceito" type="radio" value="sim" /> 											//
//  não <input name="aceito" type="radio" value="não" /><br />																//
//  <input type="hidden" name="formtestevalidacao" id="formtestevalidacao" value="login(1;{}em)senha(8;{}n)					//
//  confirmasenha(senha)onde(1;)<onde(%'Outro'%)outro(1;)cidades(5;10)sexo(1;1)aceito('sim')" />							//
//  <input type="submit" />																									//
//</form>																													//
//																															//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function validaForm(qualForm){
	var hidden = "";
	hidden = qualForm.name + "validacao";
	hidden = $id(hidden);
	if(hidden != null && hidden != undefined){
		if(hidden.value != "" && hidden.type == "hidden"){
			hidden = hidden.value.replace(/ /g,"");
			if(processaER(/^[<\w-]+\(.+?\)/,hidden,false)){
				var elementos = "";
				var mensagem 	= "Atenção\n\n";
				var valor 		= [1];
				var validacao 	= "";
				var regra 		= "";
				var campo		= "";
				var passou 		= false;
				var mensagemFim = "";
				var condicao 	= false;
				var errocondicao= false;
				var numElementos= qualForm.elements.length;
				hidden 			= hidden.replace(/\)/g,")!@#$%");
				hidden 			= hidden.replace(/!@#\$%$/,"");
				elementos 		= hidden.split("!@#$%");
				for(x = 0; x < elementos.length; x++){
					if(condicao){
						condicao = false;
					}else{
						if(!processaER(/^[<\w-]+\(.+?\)$/,elementos[x],false)){
							alert(mensagem + "A " + (x+1) + "ª validação está com má formação.\n\nPor favor, contate o administrador do sistema informando esta mensagem.");
							return false;
						}else{
							if(elementos[x].substring(0,1) == "<"){
								elementos[x] = elementos[x].substring(1,elementos[x].length);
								condicao = true;
							}
							campo = $id(processaER(/^[\w-]+(?=\()/,elementos[x],true));										   
							if(campo == null || campo == undefined){
								campo = $_(processaER(/^[\w-]+(?=\()/,elementos[x],true));
								if(campo != null || campo != undefined){
									campo = campo[0];
								}
							}
							if(campo == null || campo == undefined){
								alert(mensagem + "O campo com o ID ou nome '" + processaER(/^[\w-]+(?=\()/,elementos[x],true) + "' não foi encontrado.\n\nPor favor, contate o administrador do sistema informando esta mensagem.");
								return false;
							}else{
								valor[0]	= "";
								valor[1]	= 0;
								mensagemFim = "";
								validacao = ((elementos[x].substring(elementos[x].indexOf("(")+1,elementos[x].indexOf(")"))).replace(/{}$/,"")).split("{}");
								if(campo.type == "radio" || campo.type == "checkbox" || campo.type == "select-multiple"){
									switch(campo.type){
										case "radio":
										case "checkbox":
											for(y=0; y<numElementos; y++){
												if(qualForm.elements[y].name == campo.name && (qualForm.elements[y].type == "radio" || qualForm.elements[y].type == "checkbox") && qualForm.elements[y].checked){
													valor[0]	+= qualForm.elements[y].value;
													if(qualForm.elements[y].checked){valor[1] += 1;}													
												}
											}
										break;
										case "select-multiple":
											for (y = 0; y < campo.options.length; y++){
												if(campo.options[y].selected){
													valor[0]	+= campo.options[y].value;
													if(campo.options[y].selected){valor[1] += 1;}
												}
											}
										break;
									}
								}else{
									valor[0] = campo.value;
									valor[1] = campo.value.length;
								}
								mensagem = "Atenção\n\nO campo " + campo.name + " não foi preenchido corretamente.\n\n"
								if(validacao.length > 1 && condicao == false){
									if(valor[0].length >= 1){
										regra = validacao[1];
										switch(regra.toLowerCase()){
											case "dt":
												expressao = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|1[0-2])|31\/(0?[13578]|1[02]))\/\d{2}$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o com uma data válida no formato dd/mm/aa.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "dt2":
												expressao = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|1[0-2])|31\/(0?[13578]|1[02]))\/(19|20)\d{2}$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o com uma data válida no formato dd/mm/aaaa.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "dt3":
												expressao = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|1[0-2])|31\/(0?[13578]|1[02]))$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o com uma data válida no formato dd/mm.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "dt4":
												expressao = /^((0?[1-9])|1[0-2])\/\d{2}$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o com uma data válida no formato mm/aa.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "dt5":
												expressao = /^((0?[1-9])|1[0-2])\/(19|20)\d{2}$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o com uma data válida no formato mm/aaaa.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "h":
												expressao = /^(2[0–3]|[01]\d):[0–5]\d:[0–5]\d$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o com uma hora válida no formato hh:mm:ss.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "h2":
												expressao = /^(2[0–3]|[01]\d):[0–5]\d$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o com uma hora válida no formato hh:mm.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "n":
												expressao = /^\d+$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o apenas com números.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "em":
												expressao = /^[a-zA-Z0-9]{1}([\._a-zA-Z0-9-]+)(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+){1,3}$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o com um formato de e-mail válido.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "cep":
												expressao = /^\d{5}[- .]?\d{3}$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o no formato ddddd-ddd ou ddddd.ddd ou ddddd ddd ou.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
												if(parseInt(valor[0].substring(0,5),10) < 1000){
													mensagemFim = "\n\nO CEP digitado não existe.";
													retorna(mensagem,campo,mensagemFim);
													return false;					
												}
											break;
											case "cpf":
												expressao = /^(\d{3}[. -]?){3}\d{2}$/;
												if(processaER(expressao,valor[0],false) == false){
													retorna(mensagem,campo,"");
													return false;
												}
												i = 0;
												for(i=0;i<valor[0].length;i++)
												{
													temp = valor[0].substring(i,i+1);
													if(temp == "." || temp == "-" || temp == " ")
													{
														valor[0] = valor[0].substring(0,i) + valor[0].substring(i+1,valor[0].length);
														campo.value = valor[0];
													}
												}
						
												if (valor[0].length != 11 || valor[0] == "00000000000" || valor[0] == "11111111111" || valor[0] == "22222222222" ||	valor[0] == "33333333333" || valor[0] == "44444444444" || valor[0] == "55555555555" || valor[0] == "66666666666" || valor[0] == "77777777777" || valor[0] == "88888888888" || valor[0] == "99999999999"){
													retorna(mensagem,campo,"");
													return false;
												}
												soma = 0;
												for (i=0; i < 9; i ++){
													soma += parseInt(valor[0].charAt(i)) * (10 - i);
												}
												resto = 11 - (soma % 11);
												if (resto == 10 || resto == 11){resto = 0;}
												if (resto != parseInt(valor[0].charAt(9))){
													retorna(mensagem,campo,"");
													return false;
												}
												soma = 0;
												for (i = 0; i < 10; i ++){soma += parseInt(valor[0].charAt(i)) * (11 - i);}
												resto = 11 - (soma % 11);
												if (resto == 10 || resto == 11){resto = 0;}
												if (resto != parseInt(valor[0].charAt(10))){
													retorna(mensagem,campo,"");
													return false;
												}
											break;
											case "cnpj":
												expressao = /^\d{2}[. -]?\d{3}[. -]?\d{3}[. - \/]?\d{4}[. -]?\d{2}$/;
												if(processaER(expressao,valor[0],false) == false){
													retorna(mensagem,campo,"");
													return false;
												}
												i = 0;
												for(i=0;i<valor[0].length;i++){
													temp = valor[0].substring(i,i+1);
													if(temp == "." || temp == "-" || temp == " " || temp == "/"){
														valor[0] = valor[0].substring(0,i) + valor[0].substring(i+1,valor[0].length);
														campo.value = valor[0];
													}
												}
												var numeros, digitos, soma, resultado, pos, tamanho, digitos_iguais;
												digitos_iguais = 1;
												for (i = 0; i < 14; i++){
													if (valor[0].charAt(i) != valor[0].charAt(i + 1)){
														digitos_iguais = 0;
														break;
													}
												}
												if (!digitos_iguais){
													tamanho = valor[0].length - 2;
													numeros = valor[0].substring(0,tamanho);
													digitos = valor[0].substring(tamanho);
													soma = 0;
													pos = tamanho - 7;
													for (i = tamanho; i >= 1; i--){
														soma += numeros.charAt(tamanho - i) * pos--;
														if (pos < 2){pos = 9;}
													}
													resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
													if (resultado != digitos.charAt(0)){
														retorna(mensagem,campo,"");
														return false;
													}
													tamanho = tamanho + 1;
													numeros = valor[0].substring(0,tamanho);
													soma = 0;
													pos = tamanho - 7;
													for (i = tamanho; i >= 1; i--){
														soma += numeros.charAt(tamanho - i) * pos--;
														if (pos < 2){
															pos = 9;
														}
													}
													resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
													if (resultado != digitos.charAt(1)){
														retorna(mensagem,campo,"");
														return false;
													}
												}else{
													retorna(mensagem,campo,"");
													return false;
												} 
											break;
											case "rg":
												expressao = /^\d{2}[\. -]?\d{3}[\. -]?\d{3}([\. -]?(\d|x|X))?$/;
												if(processaER(expressao,valor[0],false) == false){
													retorna(mensagem,campo,"");
													return false;
												}
											break;
											case "url":
												expressao = /^(http:\/\/)?(www.)?([_a-zA-Z-\d]{3,}(\.?[_a-zA-Z-\d]+)?)(\.[a-z]{2,3})(\.[a-z]{2})?$/;
												if(processaER(expressao,valor[0],false) == false){
													retorna(mensagem,campo,"");
													return false;
												}
											break;
											case "fl":
												expressao = /^\d{1,3}(\.?\d{3})*,\d$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o apenas com números inteiros positivos ou negativos, pontos (para separar milhar) e vírgula (para determinar decimal), com UM número decimal.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "fl2":
												expressao = /^\d{1,3}(\.?\d{3})*,\d{2}$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o apenas com números inteiros positivos ou negativos, pontos (para separar milhar) e vírgula (para determinar decimal), com DOIS números decimais.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "fl3":
												expressao = /^\d{1,3}(\.?\d{3})*,\d{3}$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o apenas com números inteiros positivos ou negativos, pontos (para separar milhar) e vírgula (para determinar decimal), com TRÊS números decimais.";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "fl4":
												expressao = /^\d{1,3}(\.?\d{3})*,\d+$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o apenas com números inteiros positivos ou negativos, pontos (para separar milhar) e vírgula (para determinar decimal).";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
											case "fl5":
												expressao = /^\d{1,3}(\.?\d{3})*(,\d{2})?$/;
												if(processaER(expressao,valor[0],false) == false){
													mensagemFim = "Preencha-o apenas com números inteiros positivos ou negativos, pontos (para separar milhar) e vírgula (para determinar decimal).";
													retorna(mensagem,campo,mensagemFim);
													return false;
												}
											break;
										}
									}
								}
								regra 	= validacao[0].split("||");
								passou 	= false;
								for(i=0;i<regra.length;i++){
									expressao = "";
									if(regra[i].indexOf(";") == -1){
										if(regra[i].indexOf("'") != -1 && regra[i].lastIndexOf("'") > regra[i].indexOf("'")){
											expressao = regra[i].replace(/[%']/g,"");
										}else{
											expressao = $id(regra[i].replace(/[%']/g,""));
											if(expressao == undefined){
												alert("Atenção\n\nO campo com o ID '" + regra[i].replace(/[%']/g,"") + "' não foi encontrado.\n\nPor favor, contate o administrador do sistema informando esta mensagem.");
												return false;																														 
											}
											expressao = expressao.value;
										}
										expressao = expressao.replace(/\\/g,"\\\\");
										expressao = expressao.replace(/\./g,"\\.");
										expressao = expressao.replace(/\[/g,"\\[");
										expressao = expressao.replace(/\]/g,"\\]");
										expressao = expressao.replace(/\?/g,"\\?");
										expressao = expressao.replace(/\+/g,"\\+");
										expressao = expressao.replace(/\{/g,"\\{");
										expressao = expressao.replace(/\}/g,"\\}");
										if(regra[i].charAt(0) != "%"){
											expressao = "^" + expressao;
										}else{
											expressao = expressao.replace(/^\^/,"\\^");
										}
										if(regra[i].charAt(regra[i].length-1) != "%"){
											expressao += "$";
										}else{
											expressao = expressao.replace(/\$$/,"\\$");
										}
										expressao = new RegExp(expressao)
										if(processaER(expressao,valor[0],false) == true){
											passou = true;
											condicao = false;
											break;
										}else{
											if(condicao){passou = true;}
										}
									}else{
										passou = true;
										errocondicao = false;
										intervalo = regra[i].split(";");
										if(parseInt(intervalo[0]) > valor[1]){
											if(condicao){
												errocondicao = true;
											}else{
												if(campo.type == "select-multiple" || campo.type == "radio" || campo.type == "checkbox"){
													mensagemFim += "Por favor, selecione no mínimo " + parseInt(intervalo[0]) + " opç"
													if(parseInt(intervalo[0]) > 1){
														mensagemFim += "ões."
													}else{
														mensagemFim += "ão."
													}
												}else{
													mensagemFim += "Por favor, preencha-o com no mínimo " + parseInt(intervalo[0]) + " caractere"
													if(parseInt(intervalo[0]) > 1){
														mensagemFim += "s."
													}else{
														mensagemFim += "."
													}
												}
												retorna(mensagem,campo,mensagemFim);
												return false;
											}
										}
										if(intervalo.length > 1){
											if(intervalo[1].toLowerCase() != "n" || intervalo[1].toLowerCase() != ""){
												if(parseInt(intervalo[1]) < valor[1]){
													if(condicao){
														errocondicao = true;
													}else{
														if(campo.type == "select-multiple" || campo.type == "radio" || campo.type == "checkbox"){
															mensagemFim += "Por favor, selecione no máximo " + parseInt(intervalo[1]) + " opç"
															if(parseInt(intervalo[1]) > 1){
																mensagemFim += "ões."
															}else{
																mensagemFim += "ão."
															}
														}else{
															mensagemFim += "Por favor, preencha-o com no máximo " + parseInt(intervalo[1]) + " caractere"
															if(parseInt(intervalo[1]) > 1){
																mensagemFim += "s."
															}else{
																mensagemFim += "."
															}
														}
														retorna(mensagem,campo,mensagemFim);
														return false;
													}
												}
											}
										}
										if(errocondicao == false){
											condicao = false;
											break;
										}
									}
								}
								if(!passou){
									mensagemFim += ""
									retorna(mensagem,campo,mensagemFim);
									return false;
								}
							}
						}
					}
				}
			}
		}
	}
	function processaER(expressao,string,metodo){
		if(metodo){
			return expressao.exec(string);
		}else{
			return expressao.test(string);
		}
	}
	function retorna(inicioMensagem,objeto,mensagemFim){
		alert(inicioMensagem + mensagemFim);
		objeto.focus();
	}
	function $id(id){
		return document.getElementById(id);
	}
	function $_(nome){
		return document.getElementsByName(nome);
	}
	return true;
}
