// JavaScript Document
//Sistema de busca
var buscaAvancadaProdutos = new Class({
	options: {
		script_ajax: location.hostname == 'servidor' ? 'http://servidor/Minascontrol/inc/php/func/' : 'http://www.minascontrol.com/inc/php/func/',
		msg_falha_comunicacao: 'Falha na comunicação com o banco de dados.',
		msg_erro_inesperado: 'Um erro inesperado ocorreu. Por favor entre em contato com a 3Pixel.',
		tributo_tri_id: 0
	},
	
	//Método de inicialização da Classe
	initialize: function(options)
	{ 
		this.setOptions(options);
		this.pagina_atual = 1;
		this.total_paginas = null;
		this.total_por_pagina = 4;
		this.pesquisa_usuario = {};
		this.change_pagina = false;
		this.oper = '';
		this.janela_busca = undefined;
		this.resultados_busca = new Array();
		
		// Inicializando o botão para a busca avançada
		$('busca_avancada').addEvent('click', this.abre_janela_busca.bind(this));
		// Evento onChange para buscar grupos
		$('pesquisa_fabricante').addEvent('change', this.busca_grupos.bind(this));
		// Evento onChange para buscar categorias
		$('pesquisa_grupo').addEvent('change', this.busca_categorias.bind(this));
		// Evento que oculta filtros da pesquisa caso pesquise por código
		$('tipo_pesquisa').addEvent('change', this.tipo_pesquisa.bind(this));
		// Busca produtos ao clicar botão pesquisar
		$('btn_buscar_produtos').addEvent('click', this.busca_produtos.bind(this));
		// Fecha a janela de busca
		$('btn_buscar_cancelar').addEvent('click', this.fecha_janela_busca.bind(this));
		// Setas da paginação
		$('paginas').addEvent('change', this.muda_pagina.bind(this));
		$('seta_esquerda').addEvent('click', this.muda_pagina.bind(this));
		$('seta_direita').addEvent('click', this.muda_pagina.bind(this));

		// Busca produtos com parametros passados por GET
		if(this.options.target == 'self')
			this.busca_produtos();
		
		// Executa a última busca
		//this.busca_produtos('pesquisa_anterior');
	},
	
	// Monta HTML da caixa de pesquisa
	abre_janela_busca: function()
	{
		if(typeof(this.janela_busca) != "undefined")
		{
			this.janela_busca.show();
			this.janela_busca.expand(true);
		}
		else
		{
			// Cria Janela
			this.janela_busca = new Ext.Window({
				collapsible: true,
				width: 420,
				height: 290,
				resizable: false,
				title: 'Busca Avan&ccedil;ada de Produtos',
				closeAction: 'hide',
				animateTarget: 'busca_avancada',
				plain: true,
				contentEl: 'janela_busca_produtos'
			});

			// Popula campos select
			this.busca_fabricantes();
			this.janela_busca.show();
		}

		// Busca resultados da última pesquisa
		//this.busca_produtos('pesquisa_anterior');
	},
	
	fecha_janela_busca: function()
	{
		this.janela_busca.hide();
	},

	// Monta combobox de fabricantes
	busca_fabricantes: function()
	{
		var funcao_retorno = function(obj)
		{
			if(obj.tipo_retorno == 'sucesso')
			{
				// retorna lista de fabricantes
				var tmp = {rotulo: 'Selecione um fabricante', valor: ''};
				monta_select($('pesquisa_fabricante'), obj.valores, tmp);
			}
			// Não foram encontradas as variáveis de seção ou ocorreu erro
			else
				alert(obj.mensagem);
		};
		
		var variaveis = {oper:'busca_fabricantes'};
		// Envia XHttpRequest
		setTimeout(function()
		{
			var script = this.options.script_ajax + 'fabricantes.php';
			var request = {url: script, vars: variaveis, funcao: funcao_retorno, msg: 'Buscando dados'};
			var retorno = new enviaRequisicao(request);
			variaveis = null;
		}.bind(this), 100);
		// Libera memória
		retorno = null; request = null;
	},

	// Busca lista de grupos do fabricante selecionado
	// fab_id: id do fabricante, dom_obj: objeto select a ser atualizado, 
	// primeiro: objeto com id e rótulo do primeiro item do select (opcional)
	busca_grupos: function()
	{
		var funcao_retorno = function(obj)
		{
			if(obj.tipo_retorno == 'sucesso')
			{
				var tam = obj.valores.length;
				for (var i = 0; i < tam; i++) 
					monta_select($(obj.dom_obj), obj.valores, obj.primeiro_item);
			}
		}
		
		var fab_id = $('pesquisa_fabricante').value;
		var dom_obj = 'pesquisa_grupo';
		var rotulo = 'Selecione um grupo';
		var valor = '';
		
		if(fab_id != 0)
		{
			var variaveis = {oper:'busca_grupos', fab_id: fab_id, rotulo: rotulo, valor: valor, dom_obj: dom_obj};	
			var script = this.options.script_ajax + 'grupos.php';
			enviaRequisicao({url: script, vars: variaveis, funcao: funcao_retorno, mostra_processando: false});
		}
	},
	
	// Método disparado pelo onChange do combobox Grupos
	busca_categorias: function()
	{
		var funcao_retorno = function(obj)
		{
			if(obj.tipo_retorno == 'sucesso')
			{
				var tam = obj.valores.length;
				for (var i = 0; i < tam; i++) 
					monta_select($(obj.dom_obj), obj.valores, obj.primeiro_item);
			}
		}
		
		var gru_id = $('pesquisa_grupo').value;
		var dom_obj = 'pesquisa_categoria';
		var rotulo = 'Selecione uma categoria';
		var valor = '0';
		
		if(gru_id != 0)
		{
			var variaveis = {oper:'busca_categorias', gru_id: gru_id, rotulo: rotulo, valor: valor, dom_obj: dom_obj};	
			var script = this.options.script_ajax + 'categorias.php';
			enviaRequisicao({url: script, vars: variaveis, funcao: funcao_retorno, mostra_processando: false});
		}
	},

	// Envia XHR para pesquisa de produtos
	busca_produtos: function(oper, informacoes)
	{
		var funcao_retorno = function(obj)
		{	
			if(obj.produtos.length > 0)
				this.monta_resultado(obj);
			else
				alert('Nenhum produto foi encontrado com os parametros infomados.');
		}.bind(this);
		
		this.oper = oper == undefined ? 'busca_produtos' : oper;
		
		//Pesquisa anterior
		if(oper == "pesquisa_anterior")
		{
			this.pesquisa_usuario.oper = 'pesquisa_anterior';
			var request = {url: this.options.script_ajax, vars: this.pesquisa_usuario, funcao: this.monta_resultado.bind(this), msg: 'Processando'};
			var retorno = new enviaRequisicao(request);
		}
		//Mudança de página
		else if(oper == "muda_pagina")
		{
			var pagina = $('paginas').value;
			this.pesquisa_usuario.pagina = this.pagina_atual;
			this.pesquisa_usuario.oper = oper;
			// Busca produtos da página
			// Envia XHttpRequest
			setTimeout(function()
			{
				var url = this.options.script_ajax + 'busca_avancada.php';
				var request = {url: url, vars: this.pesquisa_usuario, funcao: funcao_retorno, msg: 'Buscando dados'};
				var retorno = new enviaRequisicao(request);
			}.bind(this), 100);
		}
		//Pesquisa avançada ou mundança manual no menu
		else
		{
			// Pega parametros passados via url
			var parametros = getUrlVars();
			if(parametros['oper'] && oper == undefined)
				oper = parametros['oper'];
			else
			   parametros = null;

			//Verificando se trata-se de uma navegação de menu lateral
			if(oper == "seleciona_menu")
			{
				this.pesquisa_usuario.oper = 'busca_produtos';
				this.pesquisa_usuario.tipo_pesquisa = "palavra_chave";
				this.pesquisa_usuario.palavra_chave = "";
				this.pesquisa_usuario.fabricante = parametros['fabricante'];
				this.pesquisa_usuario.grupo = parametros['grupo'];
				this.pesquisa_usuario.categoria = parametros['categoria'];
			}
			//Busca avançada
			else if($('valor_pesquisa').value != '' || $('pesquisa_categoria').value != '' || $('pesquisa_grupo').value != '')
			{
				this.pesquisa_usuario.oper = 'busca_produtos';
				this.pesquisa_usuario.tipo_pesquisa = $('tipo_pesquisa').value;
				this.pesquisa_usuario.fabricante = $('pesquisa_fabricante').value;
				this.pesquisa_usuario.grupo = $('pesquisa_grupo').value;
				this.pesquisa_usuario.categoria = $('pesquisa_categoria').value;
				this.pesquisa_usuario.palavra_chave = $('valor_pesquisa').value;
			}
			else if(oper == 'menu_lateral')
			{
				this.pesquisa_usuario.oper = 'busca_produtos';
				this.pesquisa_usuario.tipo_pesquisa = "palavra_chave";
				this.pesquisa_usuario.palavra_chave = "";
				this.pesquisa_usuario.fabricante = informacoes.fabricante;
				this.pesquisa_usuario.grupo = informacoes.grupo;
				this.pesquisa_usuario.categoria = informacoes.categoria;
			}
			
			this.pesquisa_usuario.resultados_pagina = !Number($('itens_por_pagina').value) ? 6 : $('itens_por_pagina').value;
			this.pesquisa_usuario.pagina = 1;
			this.pagina_atual = 1;
			
			if(this.pesquisa_usuario.oper)
			{
				// Envia XHttpRequest
				setTimeout(function()
				{
					var url = this.options.script_ajax + 'busca_avancada.php';
					var request = {url: url, vars: this.pesquisa_usuario, funcao: funcao_retorno, msg: 'Buscando dados'};
					var retorno = new enviaRequisicao(request);
					variaveis = null; url = null;
				}.bind(this), 100);
				// Libera memória
				retorno = null; request = null;
			}
		}
		// libera memória
		oper = null; pagina = null; request = null; retorno = null;
	},

	// Processa retorno server side
	retorno: function(obj)
	{
		// Monta select de categoria e sub-categoria
		if(obj.oper == 'busca_categorias')
		{
			if(obj.tipo_resposta == 'sucesso')
			{
				if(obj.primeiro_item)
				{
					monta_select($(obj.dom_obj), obj.valores, obj.primeiro_item);
				}
				else
				{
					monta_select($(obj.dom_obj), obj.valores);
				}
			}
			// Algum erro ocorreu
			else
			{
				alert(obj.mensagem);
			}
		}
	},

	// Monta resultado visual da busca
	monta_resultado : function(obj)
	{
		// Percorre produtos
		var tam = obj.produtos.length;
		if(tam > 0)
		{
			// Cria elementos para adicionar na página
			var resultados = new Element('div', {'id': 'informacoes'});
			
			this.resultados_busca = new Array();
			
			for(var i = 0; i < tam; i++)
			{
				var preco = obj.produtos[i].pro_preco.replace(/,/,'.');
				var div_produto = 'div_' + obj.produtos[i].pro_id;
				// Armazena resultados em objeto (lido nas áreas reservadas revenda e consulotr
				this.resultados_busca[obj.produtos[i].pro_id] = {
					'pro_nome':obj.produtos[i].pro_nome, 
					'pro_preco':obj.produtos[i].pro_preco, 
					'pro_preco_original':obj.produtos[i].pro_preco_original, 
					'ppe_valor_conversao_moeda_original':obj.produtos[i].ppe_valor_conversao_moeda_original, 
					'pro_thumb':obj.produtos[i].pro_thumb, 
					'moe_id':obj.produtos[i].moe_id, 
					'moe_nome':obj.produtos[i].moe_nome, 
					'moe_valor_conversao':obj.produtos[i].moe_valor_conversao, 
					'moe_dt_cotacao':obj.produtos[i].moe_dt_cotacao,
					'pro_precos': obj.produtos[i].pro_precos
				};
				
				var temp_div = new Element('div', {'id': div_produto, 'pro_id':obj.produtos[i].pro_id, 'class':'produto'});
		
				var html = '<div id="box_produto" class="caixa_produto">';
				html    += '<div id="titulo">' + obj.produtos[i].pro_nome + '</div>';
				html    += '<div id="foto" codigo_produto="' + obj.produtos[i].pro_id + '"><img id="' + div_produto + '_thumb"src="' + obj.produtos[i].pro_thumb + '" border="0" /></div>';
				html    += '<div id="descricao">';
				html    += obj.produtos[i].pro_descricao;
				
				
				if(obj.produtos[i].arq_nome_fisico != '' && (obj.modo_reservado == false || obj.modo_reservado == 'false'))
					html    += '<a href="' + obj.produtos[i].arq_nome_fisico + '" class="saiba_mais" target="_blank">Mais informa&ccedil;&otilde;es</a>';
				else
					html    += '<a onclick="' + this.options.classe + '.saiba_mais(\'' + obj.produtos[i].arq_nome_fisico + '\')" class="saiba_mais" target="_blank">Mais informa&ccedil;&otilde;es</a>';
				
				// Se efetuou login, adiciona botão adicionar a lista de pedido
				if(obj.modo_reservado == true || obj.modo_reservado == 'true')
				{
					if(! obj.produtos[i].pro_precos)
					{
						html += '<br /><div class="saiba_mais">R$ ' + obj.produtos[i].pro_preco + '</div>';
					}
					else
					{
						var tam_precos = obj.produtos[i].pro_precos.length;
						for(var x = 0; x < tam_precos; x++)
							html += '<br /><div class="saiba_mais">R$ ' + obj.produtos[i].pro_precos[x].preco + '</div>';
					}
					// adiciona_produto_lista(id do div, store no qual sera adicionado);
					html += '<br /><a class="saiba_mais" onclick="' + this.options.classe + '.adiciona_produto_grid(\'' + div_produto + '\',\'pedido\')" style="cursor:pointer" >Adicionar &agrave; minha lista de produtos</a>';
					html += '</div></div>';
				}

				// Insere HTML no div criado
				temp_div.innerHTML = html;
				// Adiciona o div na página
				resultados.appendChild(temp_div);
			}
			
			if(tam > 0)
			{
				// Adiciona resultados à div
				$('informacoes').replaceWith(resultados);
				// Minimiza janela de pesquisa
				if(obj.oper != 'pesquisa_anterior')
				{
					if(this.janela_busca)
						this.janela_busca.hide();
				}

				// Mostra controles de paginação
				this.controle_paginacao(obj.total_paginas, obj.num_produtos);

				// libera memória das variáveis			
				html = null; display = null; temp_div = null; preco = null; div_produto = null; resultados = null; tam = null; i = null;
			}

			// Seta página no combobox, atualiza indices nas setas e controla visibilidade destas	
			if(obj.sincroniza)
				this.sincroniza_paginacao();
			
			obj = null;
		}
	},

	// Controla exibição de filtros
	tipo_pesquisa: function()
	{
		var tipo = $('tipo_pesquisa').value;
		if(tipo == 'palavra_chave')
		{
			$('div_pesquisa_fabricante').style.display = 'block';
			$('div_pesquisa_categoria').style.display = 'block';
			$('div_pesquisa_subcategoria').style.display = 'block';
		}
		else
		{
			$('div_pesquisa_fabricante').style.display = 'none';
			$('div_pesquisa_categoria').style.display = 'none';
			$('div_pesquisa_subcategoria').style.display = 'none';
		}
	},

	//PAGINAÇÃO
	// Popula combobox da paginação, deixa controles visíveis
	controle_paginacao: function(total_paginas, total_produtos)
	{
		var funcao_visibilidade = function(visibilidade)
		{
			$("paginacao").setStyle("visibility", visibilidade);
			$("paginas").setStyle("visibility", visibilidade);
			$("seta_esquerda").setStyle("visibility", visibilidade);
			$("seta_direita").setStyle("visibility", visibilidade);
			$("texto_resultado").setStyle("visibility", visibilidade);
		};
		
		if(Number(total_paginas) > 1)
		{
			// Limpa texto da página caso exista
			funcao_visibilidade('hidden');
			this.total_paginas = total_paginas;
			
			if(total_paginas > 1)
			{
				funcao_visibilidade('visible');
			}
			else
			{
				funcao_visibilidade('hidden');
			}
		
			//Preenchimento do combobox
			var combobox = $("paginas");
			for(var i=0; i<total_paginas; i++)
			{
				combobox[i] = new Option("Pag. " + (i+1) + " de " + total_paginas, (i+1));
			}
			// Seta página no combobox, atualiza indices nas setas e contra visibilidade destas
			this.sincroniza_paginacao();
		}
		// Oculta controles de paginação, uma página
		else
		{
			funcao_visibilidade('hidden');
		}
		$("nome_revenda").setHTML("Busca Avan&ccedil;ada - <b>" + total_produtos + "</b> produto(s) localizado(s)");
	},

	// Seta visibilidade dos controles de paginação
	sincroniza_paginacao: function()
	{
		// Seta visibilidade dos controles
		// Seta esquerda
		if(this.pagina_atual > 1)
			$("seta_esquerda").setStyle("visibility", "visible");
		else
			$("seta_esquerda").setStyle("visibility", "hidden");

		//Seta direita
		if(this.pagina_atual < this.total_paginas)
			$("seta_direita").setStyle("visibility", "visible");
		else
			$("seta_direita").setStyle("visibility", "hidden");
		
		$("paginas").selectedIndex = (this.pagina_atual-1);
	},

	// Altera a página (paginação)
	muda_pagina: function(evento)
	{
		var event = new Event(evento);
		var obj = event.target;
		
		// Seta página atual
		if(obj.id == 'paginas')
			this.pagina_atual = Number($('paginas').value);
		else if(obj.id == 'seta_esquerda')
			this.pagina_atual--;			
		else if(obj.id == 'seta_direita')
			this.pagina_atual++;

		// Sincroniza controles de paginação
		this.sincroniza_paginacao();
		
		//Mudando de página
		this.busca_produtos('muda_pagina');
	}
});
buscaAvancadaProdutos.implement(new Options, new Events);


function monta_select(obj, valores, inicio)
{
	// Limpa o select
	obj.length = 0;
	var tam = valores.length;
	if(typeof(inicio) != undefined)
	{
		obj[0] = new Option(inicio.rotulo, inicio.valor, false, false);
		var indice = 1;
	}
	else
		var indice = 0;

	for(var i = 0; i < tam; i++)
	{
		obj[indice] = new Option(valores[i].rotulo, valores[i].id, false, false);
		indice++;
	}

	obj = null; valores = null; inicio = null; indice = null;
};