 function CtrBuscaRapida() {
	
	var autoReferencia = this;
	this.setAutoReferencia(this);
	
	this.setId("CtrBuscaRapida");

	this.instanciarLimite = function() {
		return new LimBuscaRapida(this);
	}
	
	this.inicializa = function() {
	}
	
	//VARIAVEIS GLOBAIS
	this.depto = null;
	this.pesquisa = null;
	this.controladorRequisitante = null;
	this.arrayRegistros = null;
	this.posicaoRealce = 0;
	this.posicaoAnterior = 0;
	this.campoAtual = null;
	this.proximoCampo = null;
	this.temporizador = null;
	
	//EVENTOS
	this.efetuaBuscaRapida = function() {
		var depto = eval("new "+this.getDepto());
		var limite = this.getLimite();
		
		this.setArrayRegistros(null);
		
		var entPesquisa = new EntPesquisa();
		entPesquisa.setCodigo(0);
		entPesquisa.setDescricao(limite.getCampoNome() == " " ? "%" : "%" + limite.getCampoNome() + "%");
		entPesquisa.setAtivo(true);
		entPesquisa.setRegistroInicial(0);
		entPesquisa.setQuantidadeRegistros(20);
		entPesquisa.setPesquisa(this.getPesquisa());
		
		limite.limpaValoresDiarios();
		limite.mostrarImagem("barraCarregando");
		depto.pesquisa(entPesquisa, this.metodoRetornoPesquisa);
	}
	
	this.metodoRetornoPesquisa = function(resposta) {
		autoReferencia.setPosicaoRealce(0);
		autoReferencia.setPosicaoAnterior(0);
		
		if (autoReferencia.trataRespostaServidor(resposta.codErro, resposta.mensagem, false)) {
			if (resposta.dados[0].registros != null) {
				var registros = autoReferencia.montaRegistros(resposta.dados[0].registros);
				autoReferencia.setArrayRegistros(registros);
				autoReferencia.imprimeListagem();
			} else {
				autoReferencia.getLimite().limparMensagem();
			}
		}
	}
	
	//RESPONSAVEL POR MONTAR TODOS OS REGISTROS VINDO DO SERVIDOR
	this.montaRegistros = function(registros) {
		var arrayRegistros = new Array();
		
		for(var i = 0; i < registros.length; i ++) {
			var entRegistro = new EntRegistro();
			
			entRegistro.setCodigo(registros[i].codigo);
			entRegistro.setDescricao(registros[i].descricao);
			
			arrayRegistros.push(entRegistro);
		}
		return arrayRegistros;
	}
	
	//RESPONSAVEL POR IMPRIMIR A LISTAGEM DE REGISTROS
	this.imprimeListagem = function() {
		var limite = this.getLimite();
		var arrayRegistros = this.getArrayRegistros();
		
		limite.setImprimeListagem(arrayRegistros);
	}
	
	// CHAMADO QUANDO UM REGISTRO EH SELECIONADO.
	// O CONTROLADOR REQUISITANTE DEVE OBRIGATORIAMENTE IMPLEMENTAR O METODO "retornoPesquisas".
	this.retornaRegistro = function() {
		var codigo = this.getArrayRegistros()[this.getPosicaoRealce()].getCodigo();
		var descricao = this.getArrayRegistros()[this.getPosicaoRealce()].getDescricao();
		var controladorRequisitante = aplicativo.getControlador(this.getControladorRequisitante());
		
		controladorRequisitante.retornoPesquisas(codigo, descricao, this.getPesquisa());
		
		this.setFocoProximoCampoNoControladorRequisitante();
	}	
	
	//RESPONSAVEL POR COLOCAR O FOCO NO PROXIMO CAMPO CASO O CLIENTE PRESSIONE A TECLA 'ENTER'
	this.setFocoProximoCampoNoControladorRequisitante = function() {
		var controladorRequisitante = aplicativo.getControlador(this.getControladorRequisitante());
		var formRequisitante = controladorRequisitante.getLimite().getIdFormulario();
		eval("$(" + formRequisitante + ")." + this.getProximoCampo() + ".focus();");
	}
	
	//RESPONSAVEL POR COLOCAR O FOCO NO MESMO CAMPO CASO O CLIENTE PRESSIONE A TECLA 'ESC'
	this.setFocoCampoAtualNoControladorRequisitante = function() {
		var controladorRequisitante = aplicativo.getControlador(this.getControladorRequisitante());
		var formRequisitante = controladorRequisitante.getLimite().getIdFormulario();
		eval("$(" + formRequisitante + ")." + this.getCampoAtual() + ".focus();");
	}
	
	//RESPONSAVEL POR TRATAR A POSICAO EM QUE SERA COLOCADO O REALCE DE COR VERDE
	this.posRealceAcima = function() {
		if (this.getArrayRegistros() != null) {
			if	(this.getPosicaoRealce() > 0) {
				this.setPosicaoAnterior(this.getPosicaoRealce());
				this.setPosicaoRealce(this.getPosicaoRealce() - 1);
				this.getLimite().realceValoresLista(this.getPosicaoRealce(), this.getPosicaoAnterior());
			}
		}
	}
	
	//RESPONSAVEL POR TRATAR A POSICAO EM QUE SERA COLOCADO O REALCE DE COR VERDE
	this.posRealceAbaixo = function() {
		if (this.getArrayRegistros() != null) {
			if	(this.getPosicaoRealce() < (this.getArrayRegistros().length - 1)) {
				this.setPosicaoAnterior(this.getPosicaoRealce());
				this.setPosicaoRealce(this.getPosicaoRealce() + 1);
				this.getLimite().realceValoresLista(this.getPosicaoRealce(), this.getPosicaoAnterior());
			}
		}
	}
	
	//GETS E SETS
	this.getDepto = function() {
		return this.depto;
	}
	
	this.setDepto = function(valor) {
		this.depto = valor;
	}
	
	this.getPesquisa = function() {
		return this.pesquisa;
	}
	
	this.setPesquisa = function(valor) {
		this.pesquisa = valor;
	}
	
	this.getControladorRequisitante = function() {
		return this.controladorRequisitante;
	}
	
	this.setControladorRequisitante = function(objValor) {
		this.controladorRequisitante = objValor;
	}
	
	this.getArrayRegistros = function() {
		return this.arrayRegistros;
	}
	
	this.setArrayRegistros = function(aValor) {
		this.arrayRegistros = aValor;
	}
	
	this.getPosicaoRealce = function() {
		return this.posicaoRealce;
	}
	
	this.setPosicaoRealce = function(vValor) {
		this.posicaoRealce = vValor;
	}
	
	this.getPosicaoAnterior = function() {
		return this.posicaoAnterior;
	}
	
	this.setPosicaoAnterior = function(vValor) {
		this.posicaoAnterior = vValor;
	}
	
	this.setTemporizador = function(temp) {
		this.temporizador = temp;
	}
	
	this.getTemporizador = function() {
		return this.temporizador;
	}
	
	this.iniciaTemporizadorBusca = function() {
		this.cancelaTemporizadorBusca();
		eval("aplicativo.getControlador('CtrBuscaRapida').setTemporizador(setTimeout(\"aplicativo.getControlador('CtrBuscaRapida').efetuaBuscaRapida()\", 500));")
	}
	
	this.cancelaTemporizadorBusca = function() {
		eval("clearTimeout(aplicativo.getControlador('CtrBuscaRapida').getTemporizador())");
		this.setTemporizador(null);	
	}
	
	this.setCampoAtual = function(campoAtual) {
		this.campoAtual = campoAtual;
	}
	
	this.getCampoAtual = function() {
		return this.campoAtual;
	}
	
	this.setProximoCampo = function(proximoCampo) {
		this.proximoCampo = proximoCampo;
	}
	
	this.getProximoCampo = function() {
		return this.proximoCampo;
	}
}
CtrBuscaRapida.prototype = new Controlador;