/**
 * Tipos disponiveis: padrao(tipo vazio), email, numerico, placa
 */
//var ie = /msie/i.test(navigator.userAgent);

//tipos de mensagem
var tipoMemsagemDeslizante = 14;
var tipoNormal = 10;
var ret = "";
var colorValidado = " #FFFFFF";
var colorInValidado = " #FFE4DC";
var debug = null;
var mensagemDebug = null;
var focoNesseCampo = null;
//-----------------------//

function Verificador(titulo)
{
	var jssIncluidos = new Array();
	var validacaOk = false;
	var camposEncontrados = new Array();
	var validacoesUsuario = new Array();
	var mensagensUsuario = new Array();
	this.obrigatorios = new Array();
	var mascaras = new Array();
	var funcoesNoEnvio = new Array();
	this.mensagemPadrao = "Os campos em vermelho est&atilde;o incorretos.";
	this.jaExibiuMensagemPadrao = false;
	this.verificar = function(){
		this.carregaNodos();

		for (var i = 0; i < this.obrigatorios.length; i++) {
			this.verificaTipos(this.obrigatorios[i].campo);
			this.trataIncluisaoJS(this.obrigatorios[i], false);

			this.verificaOutrosTipos(this.obrigatorios[i].campo);
			this.obrigatorios[i].campo.tipoCampo = "obrigatorio";

			this.obrigatorios[i].campo.validado=false;
		}
		for (var i = 0; i < mascaras.length; i++){
			this.verificaTipos(mascaras[i].campo);
			this.trataIncluisaoJS(mascaras[i], true);

			this.verificaOutrosTipos(mascaras[i].campo);
			mascaras[i].campo.tipoCampo = "mascara";
			mascaras[i].campo.validado=true;
		}
	}
	this.setarEventos = function() {
		for(var c=0; c< camposEncontrados.length; c++) {
			this.setKeyPress(camposEncontrados[c]);
		}
	}

	this.verificaTipos  = function(node) {
		if(node.tipo == null)
			node.tipo = "padrao";
		return node.tipo;
	}
	this.trataIncluisaoJS = function(nodePrincipal,podeValorBranco) {
		if (nodePrincipal != null) {
			node = nodePrincipal.campo;
			if((nodePrincipal.tipo == "padrao" )&& (node.nodeName == "SELECT")) {
				nodePrincipal.tipo = "combo";
			}

			for(var i = 0 ; i < nodePrincipal.attributes.length; i++){
				if((nodePrincipal.attributes[i].nodeValue != null)&&(nodePrincipal.attributes[i].nodeValue != "")){
					eval("node."+nodePrincipal.attributes[i].nodeName+" = '"+nodePrincipal.attributes[i].nodeValue+"'");
				}
			}
			node.podeBranco = podeValorBranco;
			this.incluirArquivoJS(node.tipo);
			if(node.mensagem == null){
				eval("node.mensagem = '"+this.mensagemPadrao+"'");
			}
			camposEncontrados[camposEncontrados.length] = node;

		}
		if(node.tipo == "moeda"){
			node.value = node.value.replace(".",",");
			aux = node.value.split(",");
			if(aux.length > 0){
				if(aux[1]!= null && aux[1].length == 1)
					node.value +="0";
			}
		}
		if(node.tipo == "cep"){
			temp = node.value;
			Trim(node);
			aux = node.value;			
			if(aux == "-"){
				node.value="";
				
			}
		}
	}
	this.verificaOutrosTipos  = function(node) {
		if(node.outrostipos != null) {
			lista = node.outrostipos.split(",");
			for(cnt=0; cnt<lista.length; cnt++) {
				if(lista[cnt] != "") {
					this.incluirArquivoJS(lista[cnt]);
				}
			}
		}
	}
	this.setKeyPress = function(nodo) {
		if(nodo.tipo != "") {
			if(nodo.eventos == null)
				nodo.eventos = new Array();
			if(nodo.mascaras == null)
				nodo.mascaras = new Array();
			nodo.eventos[nodo.eventos.length] = "obrigatorio_" + nodo.tipo + "(event)";
			if(nodo.tipo != "combo") {
				nodo.mascaras[nodo.mascaras.length] = "mascara_" + nodo.tipo + "(event)";
				if(nodo.caixaalta == "true") {
					nodo.mascaras[nodo.mascaras.length] = "fazCaixaAlta(source)";
					nodo.eventos[nodo.eventos.length] = "fazCaixaAlta(source)";
				}
			}

		      switch (nodo.tipo){
				case "combo" :
					if(nodo.onchange != null)
						nodo.eventos[nodo.eventos.length] = nodo.onchange;
					nodo.onchange = function(event) { return verificador.invocaMetodoNaDigitacao(event) };
					nodo.eventos[nodo.eventos.length] = nodo.onchange;
			           	break;
				default :
           				nodo.onkeypress = function(event) { return verificador.invocaMetodoNaDigitacao(event) };
           				nodo.eventos[nodo.eventos.length] = nodo.onkeypress;
			           	break;
		      }
		   if(nodo.completaraosair){
			   nodo.onblur = function(event) { return verificador.invocaMetodoAoSair(event, "completaraosair_" + nodo.tipo + "(event)") };
		   }
		}
	}

	this.invocaMetodoAoSair = function(event, metodo){
			if(event == null)
				event = window.event;
			var source = pegaCampoFonte(event);
			if(source != null)
				return eval(metodo);
			else
				return true;

	}


	this.invocaMetodoNaDigitacao = function(event){

			if(event == null)
				event = window.event;
			var source = pegaCampoFonte(event);
			if(source != null)
				return this.acionaMascaras(event) ;
			else
				return true;

	}
	this.incluirArquivoJS  = function(tipo) {
		if(jssIncluidos[tipo] == null) {
			document.write("<script type='text/javascript' src='templates/aeroporto/js/ver_"+tipo+".js' ></script>");
			jssIncluidos[tipo] = true;
		}
	}
	this.incluirVerificadorDeMascaras = function(){
			if(jssIncluidos["js_mascaras"] == null) {
				document.write("<script language='JavaScript' type='text/JavaScript' src='templates/aeroporto/js/verificadorMascaras.js' ></script>");
				jssIncluidos["js_mascaras"] = true;
			}
	}

	this.exibirMensagemAviso = function(mensagem, funcao) {

		var encontrou = false;
		for(h=0; h<validacoesUsuario.length; h++) {
			if(validacoesUsuario[h] == funcao) {
				encontrou = true;
			}
		}
		if(!encontrou) {
			validacoesUsuario[validacoesUsuario.length] = funcao;
			mensagensUsuario[mensagensUsuario.length] = mensagem;
		}
	}

	this.noEnvio = function() {
		if (typeof validacaoEspecifica != 'undefined'){
			return validacaoEspecifica.validate();
		}
		var ret=true;
		document.getElementById("__msgVerificador").innerHTML = "";
		document.getElementById("msgs_servidor").innerHTML = "";
		this.jaExibiuMensagemPadrao = false;
		var msg = "";
		
		for(h=0; h < camposEncontrados.length; h++) {
			if(!camposEncontrados[h].disabled) {
				if((camposEncontrados[h].tipoCampo == "obrigatorio") || (camposEncontrados[h].value != ""))
					this.acionaValidacao(camposEncontrados[h]);
				else
					this.acionaMascaras(camposEncontrados[h]);

				if(!camposEncontrados[h].validado) {
					ret = false;
					if(camposEncontrados[h].mensagem == this.mensagemPadrao) {
						if(! this.jaExibiuMensagemPadrao){
							msg += "<li>"+camposEncontrados[h].mensagem+"</li>";
							this.jaExibiuMensagemPadrao = true;
						}
					} else {
						msg += "<li>"+camposEncontrados[h].mensagem+"</li>";

					}
				}
			}
		}
		for(h=0; h<validacoesUsuario.length; h++) {
			if(eval(validacoesUsuario[h]+" == false")) {
				msg = msg + "<li>" + mensagensUsuario[h] + "</li>";
				ret = false;
			}
		}
		if(!ret) {
			dsp = document.getElementById("msg");

			//limpar mensagem dos struts validator.
			if(dsp !=null)
				dsp.style.display ="none";

			document.getElementById("__msgVerificador").innerHTML=
				"<div id='msg'><table align='center'><tr><td width='30'><img src='imagens/icon_msg_aviso.png'/></td><td class='msg_aviso' align='left'>" + msg + "</td></tr></table></div>";
		} else{
			this.chamaEventosNoEnvio();
			for(h=0; h < camposEncontrados.length; h++) {
				if(!camposEncontrados[h].disabled) {
					if((camposEncontrados[h].tipo == "moeda")){
						node.value = node.value.replace(",",".");
					}
				}
			}
		}
		return ret;
	}
	this.desabilitarTodos = function() {
		for(h=0; h < camposEncontrados.length; h++) {	
			camposEncontrados[h].disabled = true;
		}
	}
	this.habilitarTodos = function() {
		for(h=0; h < camposEncontrados.length; h++) {	
			camposEncontrados[h].disabled = false;
		}
	}
	this.chamaEventosNoEnvio = function() {
		for(ccc=0; ccc<funcoesNoEnvio.length; ccc++) {
			ret &= eval(funcoesNoEnvio[ccc]);
		}
	}
	this.addEventoNoEnvio = function(str) {
		funcoesNoEnvio[funcoesNoEnvio.length] = str;
	}
	this.addEvent = function(obj, evType, fn) {
		if (obj.addEventListener) obj.addEventListener(evType, fn, true);
		if (obj.attachEvent) obj.attachEvent("on"+evType, fn);
	}

	this.acionaValidacao = function(event){
		var source = pegaCampoFonte(event);

		if(source.podeBranco && source.value == "") {
			source.validado = true;
			return true;
		}

		var podeExecutar = (source.obrigatorio_se == null);
		if(!podeExecutar)
			podeExecutar = (eval(source.obrigatorio_se));

		if(podeExecutar){
			for(var i = 0 ; i < source.eventos.length; i++){
				if(source.eventos[i] != null){
					eval(source.eventos[i]);
				}
			}
		} else {
			source.validado = true;
		}
		return true;
	}

	this.acionaMascaras = function(event) {
		var source = pegaCampoFonte(event);
		var retorno = true;

		for(var i = 0 ; i < source.mascaras.length; i++){
			if(source.mascaras[i] != null){
				retorno = eval(source.mascaras[i]) && retorno;
			}
		}
		return retorno;
    }

	this.carregaNodos = function() {
		elementos = document.getElementsByTagName("*");
		if(elementos != null){
    		for(var i = 0 ; i < elementos.length; i++ ) {
    			if(elementos[i].tagName == "OBRIGATORIO"){
    				this.obrigatorios[this.obrigatorios.length] = elementos[i];
    				this.obrigatorios[this.obrigatorios.length-1].campo = elementos[i+1];
    			}
    			if(elementos[i].tagName == "MASCARA"){
    				mascaras[mascaras.length] = elementos[i];
    				mascaras[mascaras.length-1].campo = elementos[i+1];
    			}
    		}
		}
		/*if(addOutros) {
			addOutros();
		}*/
	}
	this.carregaNodosForm = function(formulario) {
		elementos = formulario.getElementsByTagName("*");
		if(elementos != null){
    		for(var i = 0 ; i < elementos.length; i++ ) {
    			if(elementos[i].tagName == "OBRIGATORIO"){
    				this.obrigatorios[this.obrigatorios.length] = elementos[i];
    				this.obrigatorios[this.obrigatorios.length-1].campo = elementos[i+1];
    			}
    			if(elementos[i].tagName == "MASCARA"){
    				mascaras[mascaras.length] = elementos[i];
    				mascaras[mascaras.length-1].campo = elementos[i+1];
    			}
    		}
		}
		/*if(addOutros) {
			addOutros();
		}*/
	}

    this.trocaTipo = function(nodo, novoTipo) {
	    if(novoTipo != null && novoTipo != "") {
	    	nodo.tipo = novoTipo;
	    	nodo.eventos = null;
	    	nodo.mascaras = null;
	    	this.setKeyPress(nodo);
	    	this.acionaMascaras(nodo);
	    } 
    }

	this.redefinirCores = function() {
		elementos = document.getElementsByTagName("*");
		if(elementos != null){
    		for(var i = 0 ; i < elementos.length; i++ ) {
    			if(elementos[i].tagName == "OBRIGATORIO"){
    				if(elementos[i+1].disabled == false) {
	    				elementos[i+1].validado = false;
	    				elementos[i+1].style.background = colorValidado;
    				} else {
    					elementos[i+1].style.background = null;
    				}
    			}
    			if(elementos[i].tagName == "MASCARA"){
    				if(elementos[i+1].disabled == false) {
	    				elementos[i+1].style.background = colorValidado;
    				} else {
    					elementos[i+1].style.background = null;
    				}
    			}
    		}
		}
	}

	this.refinirDesabilitados = function() {
		elementos = document.getElementsByTagName("*");
		if(elementos != null){
    		for(var i = 0 ; i < elementos.length; i++ ) {
    			if(elementos[i].tagName == "OBRIGATORIO" || elementos[i].tagName == "MASCARA"){
    				if(elementos[i+1].disabled) {
	    				elementos[i+1].style.background = null;
					}
    			}
    		}
		}
	}


};


function fazCaixaAlta(source){
	if(source !=null){
		if(source.value !=null){
			aux= source.value.toUpperCase();
			if(source.value != aux)
				source.value = aux;
		}
	}
}
function trataBackground(validado, source) {
   source.validado=validado;
   if(source.dependente){
       source.style.background = colorInValidado;
       return false;
   }       if(source.value == "" && source.podeBranco) {
       source.style.background = colorValidado;
       return true;
   } else {
       if(!source.disabled) {
           if(validado) {
               source.style.background = colorValidado;
               return true;
           } else {
               source.style.background = colorInValidado;
               return false;
           }
       }
   }
}

function validaRegExpCores(regexp, source) {
	var isValidado = regexp.test(source.value);
	trataBackground(isValidado, source);
	return isValidado;
}
function pegaCampoFonte(e){
	if(typeof(e)=='undefined')
		var e=window.event;
	source=e.target?e.target:e.srcElement;
	if(source == null)
		source = e;
	return source;
}

function focoNoPrimeiroCampo(node) {
	if(node!=null) {
		if((node.nodeName == "INPUT" && node.getAttribute("type")!="hidden")||(node.nodeName == "SELECT")||(node.nodeName == "TEXTAREA")){
			if(!node.disabled)
				node.focus();
			return false;
		}
		if(node.hasChildNodes())
			for(var j=0; j<node.childNodes.length; j++)
				if(!focoNoPrimeiroCampo(node.childNodes[j]))
					return false;
		return true;
	}
	return false;
}
function limparMsg(tipo) {
	if(tipo == tipoNormal){
		 document.getElementById("__msgVerificador").innerHTML = "";
	}

	if(tipo == tipoMemsagemDeslizante) {
		document.getElementById("__divTopoDirMsgFlutua").innerHTML = "";
		document.getElementById("__divTopoDirMsgFlutua").style.display = "none";
	}
}

function alerta(msg) {

	exibirMsg(msg, tipoMemsagemDeslizante);
	mensagemDebug = msg;
	document.getElementById("__divTopoDirMsgFlutua").style.background="yellow";
}
function alertaMais(msg) {

	exibirMsg(msg+'\n'+mensagemDebug, tipoMemsagemDeslizante);
	mensagemDebug = msg+'\n'+mensagemDebug;
	document.getElementById("__divTopoDirMsgFlutua").style.background="yellow";
}
function exibirMsg(msg, tipo) {
	//caso a mensagem seja "" ou nula limpar mensagem anteriores;
	if(tipo == null || tipo == "") {
		tipo = tipoNormal;
	}

	if(msg == null || msg == "") {
		limparMsg(tipo);
		return; // tipo um "goto"
	}

	var img = "<img src='imagens/icon_msg_aviso.png'/>";

	if(tipo == tipoNormal) {
		var html = "<div id='msg'><table align='center'><tr><td width='30'>" + img
			+ "</td><td class='msg_aviso' align='left'><li>" + msg + "</li></td></tr></table></div>";
		document.getElementById("__msgVerificador").innerHTML = html;
		dsp = document.getElementById("msg");	
		if(dsp !=null){
			setTimeout("limparMsg('"+tipo+"')", 3000);
		}
	}
	if(tipo == tipoMemsagemDeslizante) {
		document.getElementById("__divTopoDirMsgFlutua").innerHTML = img + "&nbsp;&nbsp;&nbsp;&nbsp;" + msg;
		document.getElementById("__divTopoDirMsgFlutua").style.display = "block";
		dsp = document.getElementById("msg");
		if(dsp !=null)
			dsp.style.display ="none";
	}

}

var ns = (navigator.appName.indexOf("Netscape") != -1);
var d = document;
var px = document.layers ? "" : "px";

function trataTamanho(campo,tamanho){
	if(campo != null){
		if(campo.value != null){
			if(tamanho != null){
				if(campo.value.length > tamanho){
					campo.value = campo.value.substring(0,tamanho);

				}
			}
		}
	}
}

verificador=new Verificador();