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

	this.setId("LimPesquisaGenerica");
	this.setLargura(490);
	this.setAltura(400);
	this.setTitulo("Pesquisa");
	this.setHtml("commons/pesquisa_generica.html");
	this.setIdFormulario("formPesquisaGenerica");

	this.setControlador(objControlador);

	// Dados do paginador
	this.paginador = new Paginador();
	this.arrayDadosPaginador = null;
	this.resultadosPorPagina = 30;
	
	
	/*
	 * Método que é executado após o carregamento do HTML
	 */
	this.posCarregamento = function() {
		this.colocaFoco("idCampoNome");
	}
	
	
	/*
	 * Métodos de acesso
	 */
	this.getCampoSituacao = function() {
		return $(this.getIdFormulario()).idRadioButtonSituacaoAtivo.checked;
	}
	
	this.getCampoCodigo = function() {
		return $(this.getIdFormulario()).idCampoCodigo.value;
	}
	
	this.getCampoNome = function() {
		return $(this.getIdFormulario()).idCampoNome.value;
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

	this.imprimirListaDeDados = function(objRespPaginador) {
		this.getObjDvResposta().update();
		var corTab = "";
		var mouseOver = "#C4FFD7";
		var contResposta = 0;
		var arMensagem = objRespPaginador;
		
		for(i=0; i < arMensagem.length; i++) {
			if(arMensagem[i] != undefined) {
				if (i % 2 == 0){
					corTab = "#FFFFFF"; 
				} else {
					corTab = "#F3F3F3";
				}
			var listaParaImpressao = "<table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" class=\"fonte\">";
			listaParaImpressao += "<tr bgcolor='" + corTab + "' style='cursor: pointer' onMouseOver=\"bgColor='" + mouseOver + "'\"; onMouseOut=\"bgColor='" + corTab + "'\" onClick=\"aplicativo.getControlador('CtrPesquisa').getLimite().retornaPesquisa(" + arMensagem[i].codigo + ", '" + this.trataAspas(arMensagem[i].descricao) + "', " + i + "); \">\n";
			listaParaImpressao += "<td width='78'>" + arMensagem[i].codigo + "</td><td width='342'>" + arMensagem[i].descricao + "</td></tr></table>";
					
			var addItem = document.createElement("div");		
			addItem.id = "itemPesquisa" + i;
				
			this.getObjDvResposta().appendChild(addItem);
			addItem.innerHTML = listaParaImpressao;			
			addItem.style.backgroundColor = corTab;
			} 				
			this.getObjDvResposta().style.display = "";
			this.trataScroll(this.getObjDvResposta());				
		}
		if(this.getControlador().getMultiSelecao()) {
			this.checaSelecionados(arMensagem);
		}
	}

	this.proximaPagina = function() {
		var objPaginador = this.getPaginador();
		var objControlador = this.getControlador();
		objPaginador.setTotalDeDados(objControlador.getTotalRegistros());
		var numeroPagina = this.getNumeroPagina();
		if(this.getNumeroPagina() <= this.getPaginador().maximoDePaginas()) {

			this.setNumeroPagina(numeroPagina + 1);
			
			var valorNovaReq = objPaginador.novaRequisicao(this.getNumeroPagina());
			
			if(valorNovaReq == -1) {
				var arDados = objPaginador.proxima();
				this.setArrayDadosPaginador(arDados);
				this.imprimirListaDeDados(arDados);
				this.definirSituacaoBotoes(objPaginador.primeiraPagina(), objPaginador.ultimaPagina(), objPaginador.getPaginaAtual());	
			} else {
				objControlador.setRegistroInicial(valorNovaReq);
				objControlador.efetuarPesquisa();
			}
		} else {
			$(this.getIdFormulario()).numeroPagina.value = objPaginador.getPaginaAtual();
		}
	}
	
	this.paginaAnterior = function() {
		var objPaginador = this.getPaginador();
		var objControlador = this.getControlador();
		objPaginador.setTotalDeDados(objControlador.getTotalRegistros());
		
		if(this.getNumeroPagina() <= this.getPaginador().maximoDePaginas()) {
			this.setNumeroPagina(this.getNumeroPagina() - 1);
			var valorNovaReq = objPaginador.novaRequisicao(this.getNumeroPagina());			
			if(valorNovaReq == -1) {
				var arDados = objPaginador.anterior();
				this.setArrayDadosPaginador(arDados);
				this.imprimirListaDeDados(arDados);
				this.definirSituacaoBotoes(objPaginador.primeiraPagina(), objPaginador.ultimaPagina(), objPaginador.getPaginaAtual());			
			} else {
				objControlador.setRegistroInicial(valorNovaReq);
				objControlador.efetuarPesquisa();
			}
		} else {
			$(this.getIdFormulario()).numeroPagina.value = objPaginador.getPaginaAtual();
		}
	}
	
	this.paginaEspecifica = function() {
		var objPaginador = this.getPaginador();
		var objControlador = this.getControlador();
		objPaginador.setTotalDeDados(objControlador.getTotalRegistros());
		var numeroPagina = this.getNumeroPagina();

		if(this.getNumeroPagina() <= this.getPaginador().maximoDePaginas()) {
			objPaginador.setTotalDeDados(objControlador.getTotalRegistros());
			var valorNovaReq = objPaginador.novaRequisicao(this.getNumeroPagina());			
			if(valorNovaReq == -1) {
				var arDados = objPaginador.getPagina(this.getNumeroPagina());
				this.setArrayDadosPaginador(arDados);
				this.imprimirListaDeDados(arDados);
				this.definirSituacaoBotoes(objPaginador.primeiraPagina(), objPaginador.ultimaPagina(), objPaginador.getPaginaAtual());
			} else {
				objControlador.setRegistroInicial(valorNovaReq);
				objControlador.efetuarPesquisa();				
			}				
		} else {
			$(this.getIdFormulario()).numeroPagina.value = objPaginador.getPaginaAtual();
		}
	}

	
	this.inicializarListagem = function() {
		var arrayResp = this.getControlador().getArrayDadosResp();
		this.getPaginador().setArrayResultados(arrayResp);
		this.paginaEspecifica();
	}

	this.limparPaginacao = function() {
		this.getObjDvAlerta().innerHTML = "";
		this.getObjDvResposta().innerHTML = "";
		$("divPesquisaMaximoDePaginas").update();
		$(this.getIdFormulario()).numeroPagina.value = 1;
		$("divImgPesquisaAvancarHabilitado").style.display = "none";
		$("divImgPesquisaAvancarDesabilitado").style.display = "";
		$("divImgPesquisaRecuarHabilitado").style.display = "none";
		$("divImgPesquisaRecuarDesabilitado").style.display = "";
		if(this.getControlador().getArrayDadosResp().length == 0) {
			$(this.getIdFormulario()).numeroPagina.disabled = true;
			$(this.getIdFormulario()).numeroPagina.className = "input30d";
		} else {
			$(this.getIdFormulario()).numeroPagina.disabled = false;
			$(this.getIdFormulario()).numeroPagina.className = "input30";
		}	
	}
	
	this.definirSituacaoBotoes = function(vPrimeiraPagina, vUltimaPagina, vPaginaAtual) {

		if(vUltimaPagina && vPrimeiraPagina) {
			$("divImgPesquisaAvancarHabilitado").style.display = "none";
			$("divImgPesquisaAvancarDesabilitado").style.display = "";
			$("divImgPesquisaRecuarHabilitado").style.display = "none";
			$("divImgPesquisaRecuarDesabilitado").style.display = "";
		} else if(!vUltimaPagina && !vPrimeiraPagina) {
			$("divImgPesquisaAvancarHabilitado").style.display = "";
			$("divImgPesquisaAvancarDesabilitado").style.display = "none";
			$("divImgPesquisaRecuarHabilitado").style.display = "";
			$("divImgPesquisaRecuarDesabilitado").style.display = "none";						
		} else if(vPrimeiraPagina) {
			$("divImgPesquisaAvancarHabilitado").style.display = "";
			$("divImgPesquisaAvancarDesabilitado").style.display = "none";
			$("divImgPesquisaRecuarHabilitado").style.display = "none";
			$("divImgPesquisaRecuarDesabilitado").style.display = "";
		} else if(vUltimaPagina) {
			$("divImgPesquisaAvancarHabilitado").style.display = "none";
			$("divImgPesquisaAvancarDesabilitado").style.display = "";
			$("divImgPesquisaRecuarHabilitado").style.display = "";
			$("divImgPesquisaRecuarDesabilitado").style.display = "none";
					
		}
		$(this.getIdFormulario()).numeroPagina.disabled = false;
		$(this.getIdFormulario()).numeroPagina.className = "input30";	
		$(this.getIdFormulario()).numeroPagina.value = vPaginaAtual;
		$("divPesquisaMaximoDePaginas").innerHTML = " de " + this.getPaginador().maximoDePaginas();
	}

	/**
	 * SELECAO DE RESULTADOS 
	 */
	this.selecionaItem = function(vId) {
		
		if (vId % 2 == 0){
			var corTab = "#FFFFFF"; 
		} else {
			var corTab = "#F3F3F3";
		}
				
		var objArraySelecao = this.getArraySelecao();
		var objArrayCodigosSelecionados = this.getArrayCodigosSelecionados();
		var objArrayDadosPaginador = this.getArrayDadosPaginador()[vId];
		var vPosCod = objArrayCodigosSelecionados.indexOf(objArrayDadosPaginador.codigo);
		var objSelecao = eval( "$('itemPesquisa" + vId + "')");
		
		if(vPosCod == -1) {
			objArraySelecao.push(objArrayDadosPaginador);
			objArrayCodigosSelecionados.push(objArrayDadosPaginador.codigo);
			objSelecao.style.backgroundColor = "#D5D5D5";
			objSelecao.setAttribute("onmouseout", "this.style.backgroundColor = '#D5D5D5'");
			objSelecao.setAttribute("onmouseover", "this.style.backgroundColor = '#D5D5D5'");			
		} else {
			objSelecao.style.backgroundColor = corTab;			
			objSelecao.setAttribute("onmouseover", "this.style.backgroundColor = '#C4FFD7'");
			objSelecao.setAttribute("onmouseout", "this.style.backgroundColor = '" + corTab + "'");
			objArraySelecao[vPosCod] = undefined;
			objArrayCodigosSelecionados[vPosCod] = undefined;
			this.setArraySelecao(objArraySelecao.compact());
			this.setArrayCodigosSelecionados(objArrayCodigosSelecionados.compact());
		}
	}
	
	//VERIFICA SE A EXISTE ITEM SELECIONADO NA INTERFACE SOLICITANTE
	this.checaSelecionados = function(objResp) {
		
		var objResposta = objResp;
		var objCtr = this.getControlador();
		var objArraySelecao = this.getArraySelecao();
		var objArrayCodigosSelecionados = this.getArrayCodigosSelecionados();
		
		for(i=0; i < objResposta.length; i++) {
			if(objResposta[i] != undefined) {
				var pos = objArrayCodigosSelecionados.indexOf(objResposta[i].codigo);

				if(pos != -1) {
					objArrayCodigosSelecionados[pos] = undefined;
					objArraySelecao[pos] = undefined;
					this.selecionaItem(i);
				}
			}
		}
	}

	this.mostrarRespostaInclusao = function(vNovos, vExistentes) {
		mensagem = "<table width='100%' align='center' class='alertapesquisaitensestoque' cellpadding='0' cellspacing='2'><tr><td valign='middle'><strong>" + vNovos + "</strong> itens adicionados, <strong>" + vExistentes + "</strong> existentes.</td></tr></table>";
		this.getObjDvAlerta().innerHTML = mensagem;
	}			
	
	this.mostrarAlertaSelecao = function() {
		mensagem = "<table width='100%' align='center' class='respostaalerta' cellpadding='0' cellspacing='2'><tr><td valign='middle'>Selecione pelo menos um item antes de incluir.</td></tr></table>";
		this.getObjDvAlerta().innerHTML = mensagem;
	}	
		


	
	/*
	 * SETS / GETS
	 */	

	//OBJ DV RESPOSTA
	this.getObjDvResposta = function() { 
		return $("divPesquisaResp"); 
	}

	//OBJ DV RESPOSTA INCLUSAO
	this.getObjDvAlerta = function() { 
		return $("divPesquisaRespostaInclusao"); 
	}

	//NUMERO PAGINA	
	this.setNumeroPagina = function(vPagina) { 
		this.numeroPagina = vPagina; 
		$(this.getIdFormulario()).numeroPagina.value = this.setDadoNoFormulario(vPagina); 
	}
	
	this.getNumeroPagina = function() { 
		return Number($(this.getIdFormulario()).numeroPagina.value); 
	}
	
	//ARRAY CODIGOS SELECIONADOS
	this.setArrayCodigosSelecionados = function(vValor) { 
		this.arrayCodigosSelecionados = vValor; 
	}
	
	this.getArrayCodigosSelecionados = function() { 
		return this.arrayCodigosSelecionados; 
	}

	//ATIVO / INATIVO
	this.getAtivo = function() {
		return this.ativo;
	}
	
	//REFERENCIA DO PAGINADOR
	this.setPaginador = function(vObj) {
		this.paginador = vObj;
	}
	
	this.getPaginador = function() {
		return this.paginador;
	}	

	//SETA DADOS ARRAY DE RETORNO NO PAGINADOR
	this.setArrayDadosPaginador = function(vDados) {
		this.arrayDadosPaginador = vDados;
	}
	
	this.getArrayDadosPaginador = function() {
		return this.arrayDadosPaginador;
	}
	
	//MAXIMO RESULTADOS POR PAGINA		
	this.setResultadosPorPagina = function(vValor) {
		this.resultadosPorPagina = vValor;	
	}
	
	this.getResultadosPorPagina = function() {
		return this.resultadosPorPagina;	
	}			
}
LimPesquisaGenerica.prototype = new LimPrincipal;
