/*
 * CLASSE GENERICA DE PESQUISA E MULTISELECAO
 */ 
 
 function CtrPesquisaColaboradores() {

	this.setAutoReferencia(this);
	var autoReferencia = this;
	
	this.controladorRequisitante = null;
	this.pesquisaPF = true;
	this.pesquisaPJ = true;
		
	/**
	 * M�todo que instancia o limite que representa a interface gr�fica (GUI).
	 */
	this.instanciarLimite = function() {
		return new LimPesquisaColaboradores(this);
	}
	
/*
 * ATRIBUTOS
 */	
	this.multiSelecao = false;
	
	this.arrayDadosResp = new Array();
	this.totalRegistros = 0;
	this.registroInicial = 0;
	this.qtdRegistrosPorRequisicao = 300;	
	
	
	/**
	 * M�todo que obt�m do formul�rio os dados informados pelo usu�rio e executa o m�todo recebido
	 * pelo controlador afim de tratar a solicita��o do usu�rio de pesquisar dados.
	 */
	this.efetuarPesquisa = function() {
		var objLimite = this.getLimite();
		var codigo = objLimite.getCodigo();

		if(codigo == undefined || codigo == null || codigo == "" || codigo < 0) { 
			codigo = 0; 
		}

		var iniciais = objLimite.getDescricao();
		var ativo = objLimite.getAtivo();
		
		var regInicial = this.getRegistroInicial();
			
		this.setRegistrosPorRequisicao(this.qtdRegistrosPorRequisicao);
		
		var qtdDeRegistros = this.qtdRegistrosPorRequisicao;

		this.metodoDePesquisa(codigo, iniciais, ativo, regInicial, qtdDeRegistros);
	}
	
	this.metodoDePesquisa = function(codigo, iniciais, ativo, regInicial, qtdDeRegistros) {
		var objLimite = this.getLimite();
		objLimite.mostrarImagem("barraCarregando");
		var controladorRequisitante = this.getControladorRequisitante();

		//controladorRequisitante.metodoDePesquisa(codigo, iniciais, ativo, regInicial, qtdDeRegistros, this.metodoDeRetorno);
		this.pesquisaColaborador(codigo, iniciais, ativo, regInicial, qtdDeRegistros, this.metodoDeRetorno);
	}
	
	this.pesquisaColaborador = function(codigo, iniciais, ativo, regInicial, qtdDeRegistros, metodoDeRetorno) {
		var objLimite = this.getLimite();

		DeptoPessoalFacade.colaboradores_listarPesquisa(codigo, objLimite.getCpfCnpj(), iniciais, this.getPesquisaPF(), this.getPesquisaPJ(), ativo, objLimite.tipoCliente, objLimite.tipoFornecedor, objLimite.tipoFuncionario, regInicial, qtdDeRegistros, metodoDeRetorno);
	}
		
	this.metodoDeRetorno = function(dados) {
		var xml = new Xml();
		xml.lerXml(dados);

		var mensagem = xml.getValorElemento("resposta");
		var objLimite = autoReferencia.getLimite();
		var nomeAtributo = autoReferencia.getControladorRequisitante().getNomeAtributoRetornoPesquisa();
		var codigoAtributoRegistro = autoReferencia.getControladorRequisitante().getValorAtributoCodigoPesquisa();
		var descricaoAtributoRegistro = autoReferencia.getControladorRequisitante().getValorAtributoDescricaoPesquisa();
		
		if(autoReferencia.trataMensagemRespostaServidor(mensagem.codErro, mensagem.mensagem, false)) {
			if(mensagem.dados != undefined) {
				if(nomeAtributo != null) {
					mensagem.dados.Registro = eval("mensagem.dados." + nomeAtributo);
					if(mensagem.dados.Registro.length != undefined){
						for(i=0; i<mensagem.dados.Registro.length; i++){
							mensagem.dados.Registro[i].codigo = eval("mensagem.dados.Registro["+ i +"]." + codigoAtributoRegistro);
							mensagem.dados.Registro[i].descricao = eval("mensagem.dados.Registro["+ i +"]." + descricaoAtributoRegistro);
						}
					} 
					else {
						mensagem.dados.Registro.codigo = eval("mensagem.dados.Registro." + codigoAtributoRegistro);
						mensagem.dados.Registro.descricao = eval("mensagem.dados.Registro." + descricaoAtributoRegistro);
					}
				}
				autoReferencia.criaArrayDadosResp(mensagem);
				objLimite.inicializarListagem();
			} else {
				objLimite.getObjDvResposta().style.display = "none";
				objLimite.mostrarMensagem("alerta", "Sem resultados para esta pesquisa.");	
				objLimite.limparPaginacao();
			}
		} else {
			objLimite.getObjDvResposta().style.display = "none";
			objLimite.limparPaginacao();
		}
	}

	this.criaArrayDadosResp = function(mensagem) {
		if(mensagem.dados != undefined) {
			if(mensagem.dados.Registro.length == undefined) {
				var arResp = new Array(1);
				arResp[0] = mensagem.dados.Registro;
				this.setArrayDadosResp(arResp);				
			} 
			else {				
				var arResp = new Array(mensagem.dados.Registro.length);

				for(i=0; i< mensagem.dados.Registro.length; i++) {
					if(mensagem.dados.Registro[i] != undefined) {
						arResp[i] = mensagem.dados.Registro[i]; 						
					}
				}
				this.setArrayDadosResp(arResp);
			}
			this.setTotalRegistros(this.getArrayDadosResp()[0].totalDeRegistros != undefined ? this.getArrayDadosResp()[0].totalDeRegistros : mensagem.qtdeDados);
		}
	}	

	this.retornaPesquisa = function(codigo, descricao, cont){
		var controladorRequisitante = autoReferencia.getControladorRequisitante();
		controladorRequisitante.metodoDeRetorno(codigo, descricao);
	}	

	this.enviaArraySelecao = function() {
		if(this.getArrayDadosResp().length > 0) {
			if(this.getLimite().getArraySelecao().length > 0) {
				this.getControladorRequisitante().metodoDeRetorno(this.getLimite().getArraySelecao(), this);			
			} else {
				this.getLimite().mostrarAlertaSelecao();
			}			
		} else {
			this.getLimite().getObjDvResposta().style.display = "none";
			this.getLimite().mostrarMensagem("alerta", "Fa&ccedil;a uma busca, e selecione pelo menos um item.");	
			this.getLimite().limparPaginacao();
		}
	}	
	
	this.respostaInclusao = function(vNovos, vExistentes) {
		this.getLimite().mostrarRespostaInclusao(vNovos, vExistentes);
		this.getLimite().limparTudo();
	}		

	
	/**
	 * M�todo informado ao controlador de pesquisa para que, quando uma pesquisa de dados em um cadastro
	 * for executada, esse m�todo � invocado
	 */

	
	/*********** M�todos de acesso e modifica��o ***********/
	
	this.setControladorRequisitante = function(controlador) {
		this.setPesquisaPF(true);
		this.setPesquisaPJ(true);
		this.controladorRequisitante = controlador;	
	}
	
	this.getControladorRequisitante = function() {
		return this.controladorRequisitante;
	}
	
/**
 * SETS / GETS
 */	
//MULTISELECAO
	this.setMultiSelecao = function(vValor) { 
		this.multiSelecao = vValor; 
	}
	this.getMultiSelecao = function() { 
		return this.multiSelecao; 
	}
 
//ARRAY DADOS RESPOSTA
	this.setArrayDadosResp = function(vValor) { 
		this.arrayDadosResp = vValor; 
	}
	this.getArrayDadosResp = function() { 
		return this.arrayDadosResp; 
	}

//VALOR MAXIMO DE REGISTROS POR REQUISICAO
	this.setRegistrosPorRequisicao = function(vValor) { 
		this.qtdRegistrosPorRequisicao = vValor; 
	}
	this.getRegistrosPorRequisicao = function() { 
		return this.qtdRegistrosPorRequisicao;
	 }
	
//REGISTRO INICIAL
	this.setRegistroInicial = function(vValor) { 
		this.registroInicial = vValor;
	}
 	this.getRegistroInicial = function() { 
 		return this.registroInicial;
 	}


//TOTAL DE REGISTROS
	this.setTotalRegistros = function(vTotal) { 
		this.totalRegistros = vTotal; 
	}
	this.getTotalRegistros = function() { 
		return this.totalRegistros;
	} 
	
// VERIFICA SE A PESQUISA VAI SER DE COLABORADOR PJ, PF OU AMBOS.
	this.setPesquisaPF = function(valor) {
		this.pesquisaPF = valor
	}

	this.getPesquisaPF = function() {
		return this.pesquisaPF;
	}

	this.setPesquisaPJ = function(valor) {
		this.pesquisaPJ = valor
	}

	this.getPesquisaPJ = function() {
		return this.pesquisaPJ;
	}


	
 		
}

CtrPesquisaColaboradores.prototype = new Controlador;
