/************************************************************************************************************
* 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...
*																											*
*************************************************************************************************************/

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;
						}
					}
				
					else if ((TP_Campo == 'HR1') && (erro == 0))  {
						if (document.getElementById(NM_Elemento).value) {
							vHora = document.getElementById(NM_Elemento).value;
							if ((vHora.length == 5) && (vHora.charAt(2) == ':') && (vHora.split(':')[0]*1 <= 24) && (vHora.split(':')[1]*1 <= 60))  {
								//Hora válida...
							} else {
								alert('Por favor complete o campo "' + NM_Campo +'" com formato hh:mm');
								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();
	}else{
		return false;	
	}
}

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;
		}
	}
}

function MascaraHora(vCampoRecebido,vTextoRecebido) {

var vCodKey
if (!window.event) {
	vCodKey = 0;
} else {
	vCodKey = window.event.keyCode;
}

if (vCodKey != 8) {

		var vHora = '';
		vHora = vHora + vTextoRecebido;

		if (vHora.length == 2) {
			vHora = vHora + ':';
			document.getElementById(vCampoRecebido).value = vHora;
		}
	}
}


function BlurField(obj) {
	valor = document.getElementById(obj).value;
	valor = valor.toUpperCase();
	
	valor = valor.replace('Á','A');
	valor = valor.replace('À','A');
	valor = valor.replace('Ã','A');
	valor = valor.replace('Â','A');
	valor = valor.replace('Ä','A');
	valor = valor.replace('Ç','C');
	valor = valor.replace('É','E');
	valor = valor.replace('È','E');
	valor = valor.replace('Ê','E');
	valor = valor.replace('Ë','E');
	valor = valor.replace('Í','I');
	valor = valor.replace('Ì','I');
	valor = valor.replace('Î','I');
	valor = valor.replace('Ï','I');
	valor = valor.replace('Ñ','N');
	valor = valor.replace('Ó','O');
	valor = valor.replace('Ò','O');
	valor = valor.replace('Ô','O');
	valor = valor.replace('Õ','O');
	valor = valor.replace('Ö','O');
	valor = valor.replace('Ú','U');
	valor = valor.replace('Ù','U');
	valor = valor.replace('Û','U');
	valor = valor.replace('Ü','U');
	
	//Caracteres que são inválidos...
	vInvalid = '\'\\#$%&*!()´`^[]+=¨£¿º®Ðäå\":??';
	
	for (j=0; j<=valor.length+1; j++) {
		for (x=0; x<=valor.length-1; x++) {
			if (vInvalid.indexOf(valor.charAt(x)) >= 0) {
				valor = valor.replace(valor.charAt(x),'');
			}
		}
	}
	
	for (x=0; x<=valor.length-1; x++) {
		if (vInvalid.indexOf(valor.charAt(x)) >= 0) {
			valor = valor.replace(valor.charAt(x),'');
		}
	}
	
	document.getElementById(obj).value = valor;
}

