/**
 * Pgina de Produtos.
 * 
 * @copyright Copyright 2008 W21.
 * @version 1.0
 */
var box;
var jsonPuro;
var lastElem = null;
window.addEvent('domready', function() {

	//Alterar os links dos idiomas no topo, usado para as homes de cada produto
	$('painelTopo').getElement('ul').getElements('li').each(function(itemLink, index) {
			//alert(vars.api  + ' === ' + produto.toSource());
			var alink = itemLink.getElement('a');
			alink.set('href', alink.get('href').split('#')[0] + location.hash);
	});

	//---------------------------------------------------------------------------------------------------------
	/**
	 * Classe que vai pegar todas as Variaveis Globais.
	 */
	var GlobalVars = new Class({
		initialize: function () {
			// Endereo atual.
			this.enderecoAtual = window.location.href;
			// Path raiz
			this.pathRaiz = strPathHttpBase;
			this.pathCatImg = this.pathRaiz + 'servicos/Produto_Upload/mercados/';
			this.pathProdImg = this.pathRaiz + 'servicos/Produto_Upload/';
			this.pathBaseSite = strPathBaseSite; //tem que ser definido como variavel global
			// Endereo da pagina 404
			this.endereco404 = strPathBaseSite + '/' + this.getIdiomaCodigo() + '/error_404/erro_404.aspx'; // TODO: Mudar o endereo
			// Executa todas as variaveis globais
			this.idioma = this.getIdioma();
			this.cat = this.getCat();
			this.api = this.getApi();
			this.prod = this.getProd();
			this.scroll = this.getScroll();
			this.planta = this.getPlanta();
		},
		qString: function() {
			var gets = $get('?') != '' ? '?' + $get('?') : '?' + $get('#');
			return gets;
		},
		getIdioma: function () {
			if(this.enderecoAtual.test("/pt/", "i")) {
				this.idioma = 1;
				return this.idioma;
			}
			else if(this.enderecoAtual.test("/en/", "i")) {
				this.idioma = 2;
				return this.idioma;
			}
			else if(this.enderecoAtual.test("/es/", "i")) {
				this.idioma = 3;
				return this.idioma;
			}
		},
		getIdiomaCodigo: function () {
			if(this.enderecoAtual.test("/pt/", "i")) {
				return 'pt';
			}
			else if(this.enderecoAtual.test("/en/", "i")) {
				return 'en';
			}
			else if(this.enderecoAtual.test("/es/", "i")) {
				return 'es';
			}
		},
		getCat: function () {
			this.cat = $chk($get('', this.qString()).cat) ? $get('',  this.qString()).cat : 1;
			return this.cat;
		},
		getApi: function () {
			this.api = $chk($get('', this.qString()).api) ? $get('', this.qString()).api : false;
			return this.api;
		},
		getProd: function () {
			this.prod = $chk($get('', this.qString()).prod) ? $get('', this.qString()).prod : false;
			return this.prod;
		},
		getScroll: function () {
			this.scroll = $chk($get('', this.qString()).scroll) ? $get('', this.qString()).scroll : false;
			return this.scroll;
		},
		getPlanta: function () {
			if(this.enderecoAtual.test("/brasil/", "i")) {
				//TESTANDO COM CARAVELL
				//this.planta = 4;
				this.planta = 17;
				return this.planta;
			} else if(this.enderecoAtual.test("/world_wide/", "i")) {
				this.planta = 6;
				return this.planta;
			} else if(this.enderecoAtual.test("/usa/", "i")) {
				this.planta = 2;
				return this.planta;
			} else if(this.enderecoAtual.test("/mexico/", "i")) {
				this.planta = 16;
				return this.planta;
			} else if(this.enderecoAtual.test("/caravell/", "i")) {
				this.planta = 4;
				return this.planta;
			} else if(this.enderecoAtual.test("/derby/", "i")) {
				this.planta = 11;
				return this.planta;
			} else if(this.enderecoAtual.test("/klimasan/", "i")) {
				this.planta = 20;
				return this.planta;
			} else if(this.enderecoAtual.test("/coca_cola/", "i")) {
				this.planta = 10;
				return this.planta;
			}
		},
		getId: function (nome) {
			var verifica = true;
			
			if (nome == 'cat' && this.cat) {
				if ($chk(mapaCat[this.cat])) {
					verifica = true;
					return mapaCat[this.cat].index;
				}
				else {
					verifica = false;
				}
			}
			else if (nome == 'api' && this.cat && this.api) {
				if ($chk(mapaCat[this.cat][this.api])) {
					verifica = true;
					return mapaCat[this.cat][this.api].index;
				}
				else {
					verifica = false;
				}
			}
			else if (nome == 'prod' && this.api && this.prod) {
				if ($chk(mapaCat[this.cat][this.api][this.prod])) {
					return mapaCat[this.cat][this.api][this.prod].index;
				}
				else {
					verifica = false;
				}
			}
			
			// Verifica que tudo existe, seno redireciona para a pagina 404
			if (!verifica) {
				window.location = this.endereco404;
			}
		}
	});
	
	//---------------------------------------------------------------------------------------------------------
	/**
	 * Efeito do Scroll do Browser
	 */
	var winScroll = new Fx.Scroll(window, {
		offset: {
			'y': -10
		},
		transition: Fx.Transitions.Quad.easeOut,
		duration: 600
	});
		
	
	//---------------------------------------------------------------------------------------------------------
	/**
	 * Função que retorna o texto do XML
	 * 
	 * @param {XMLObject} nodo
	 */
	function getTexto (nodo) {
		// IE
		if(Browser.Engine.trident) {
			return nodo.childNodes[0].nodeValue;
		}
		else {
			return nodo.textContent;
		}
	}

	
	/**
	 * Função que monta o Flash do Menu de Produtos.
	 *	Quadro 1 
	 * @param {String} json : O JSON da lista de produtos.
	 */
	function montaMenuProdutos(json){
		var menuDeProdutos = new Swiff(vars.pathBaseSite + 'swf/' + vars.getIdiomaCodigo() + '/menu_produtos.swf', {
			id: 'menu_produtos',
			width: 990,
			height: 214,
			params: {
				wmode: 'opaque'
			},
			vars: {
				path: vars.pathRaiz, // TODO: Mudar o endereo.
				pathCatImg:  vars.pathCatImg + 'mercado_[planta]_[cat]_[idioma]_img.jpg',
				pathProdImg: vars.pathProdImg,
				path404: vars.endereco404,
				json: json,
				numCat: vars.getId('cat'),
				numApi: vars.api,
				numProd: vars.prod,
				idioma: vars.idioma,
				codPlanta: vars.planta
			},
			
			container: $('menuProdutos')
		});
	}
	//---------------------------------------------------------------------------------------------------------
		
	//---------------------------------------------------------------------------------------------------------
	/**
	 * Função que faz um mapeamento dos id(cat, api, e prod).
	 */
	function mapeaDados () {
		// Catergorias
		categoriasObj.each(function (categoria, indexCat) {
			// Categoria
			var cat = mapaCat[categoria.id] = {
				// Index da Categoria
				'index': indexCat
			};
			// Aplicaes
			categoria.aplicacao.each(function (aplicacao, indexApi) {
				// Aplicao
				var api = cat[aplicacao.id] = {
					// Index da Aplicao
					'index': indexApi
				};
				if(aplicacao.produto != null)
				{
					// Produtos
					aplicacao.produto.each(function (produto, indexProd) {
						// Produto
						var prod = api[produto.id] = {
							// Index da Aplicao
							'index': indexProd,
							'nome': produto.nome
						};
					});
				}
			});
		});
	}

	//------Evento click do link do SubMenu------
	this.trocarProduto = function (idProd, idApi, idCat) {
		if (intCategoriaProdutoAtualIndice != mapaCat[idCat].index) {
			Swiff.remote($('menu_produtos'), 'trataDados', mapaCat[idCat].index);
			intCategoriaProdutoAtualIndice = mapaCat[idCat].index;
		}
	
		Swiff.remote($('menu_produtos'), 'seleciona', idApi, idProd);
		montaProdutosDesc(idProd, idApi, idCat); // Monta a Desc do Produto
	}
	
	//---------------------------------------------------------------------------------------------------------
	//Funces e objetos (principais)
	//---------------------------------------------------------------------------------------------------------

	this.montaProdutosDesc = function (idProd, idApi, idCat) {
		//var idCat = vars.cat;
		var idIdioma = vars.idioma;
		var idPathRaiz = vars.pathRaiz;
		// Chama a funo que constroi o Sub Menu.
		$('loadingStatus').setStyle('display', 'block');
		$('homeCategoria').setStyle('display', 'none');
		$('produtoCont').setStyles({'display': 'block'});
		$$('.submenu dd').setStyles({'display': 'block'}); // esconde porque quando a div 'produtoCont' fica invisivel, esses itens ficam aparecendo
		winScroll.toTop();
		
		if(mapaCat[idCat][idApi] == undefined || mapaCat[idCat][idApi] == null){
			categoriasObj = JSON.decode(jsonPuro).listaProdutos.categoria; // Decodifica o JSON e transforma ele para um Objeto
			mapeaDados(); // Mapeia os dados com seus ID
		}
		
		//Sub Menu de Produtos
		if (window.subMenu != true) {
			montaGenerico(urlWSProdutos + '?idioma='+idIdioma+'&plantaTipo='+vars.planta+'&statusProduto=1&arquivoTipo=5', idPathRaiz + 'xsl/ajax_usa_produto_menu.xsl', 'listaProdutos');
		}
		//Destaque
		//alert('PRO:'+vars.getId('cat'));
		montaDestaque(urlWSDestaque + '?idioma='+idIdioma+'&produto='+idProd+'&aplicacao='+idApi, idPathRaiz + 'xsl/ajax_produto_destaque.xsl', idProd, mapaCat[idCat][idApi][idProd].nome);
		//Caracteristicas Principais
		montaCaracteristicas(urlWSCaracteristicas + '?idioma='+idIdioma+'&produto='+idProd, idPathRaiz + 'xsl/ajax_produto_caracteristicas.xsl', 'caracteristicasPrinc');
		//Tipos de Download
		montaTiposDownloads(urlWSDownloads + '?idioma='+idIdioma+'&produto='+idProd+'&cdgTiposDownload=12,13,15', idPathRaiz + 'xsl/ajax_produto_imagem_download_esquerda.xsl', idProd, mapaCat[idCat][idApi][idProd].nome);
		//Informações Técnicas
		montaInfoTecnica(urlWSInfoTecnicas + '?idioma='+idIdioma+'&produto='+idProd, idPathRaiz + 'xsl/ajax_produto_informacao_tecnica.xsl', mapaCat[idCat][idApi][idProd].nome);
		//Veja Também
		montaVejaTambem(urlWSVejaTambem + '?idioma='+idIdioma+'&produto='+idProd+'&aplicacao='+idApi+'&arquivoTipo=5&statusProduto=1', idPathRaiz + 'xsl/ajax_produto_veja_tambem.xsl', idCat);
		
		//Flag, para avisar que o submenu foi criado, para no ficar criando toda vez
		window.subMenu = true;
		//Cria o efeito Accordion no sub_menu
		subMenuLateral = new Accordion($$('.submenu dt'), $$('.submenu dd'), {
			display: mapaCat[idCat].index
		});
		
		if($('maioresInfo_btn') != null){
			$('maioresInfo_btn').addEvent('click', function(){
				winScroll.toElement('conteudo');
			});
		}
		if($('maioresInfo2_btn') != null){
			$('maioresInfo2_btn').addEvent('click', function(){
				winScroll.toElement('divInfoTecnicas');
			});
		}
		if($('infoTecnicas_1') == null){
			$('maioresInfo2_btn').setStyle('display', 'none');
		}
		
		box.bindItems(); // atualiza a lista do multibox referentes aos links que existem na pagina, que mudam dinamicamente

		$('loadingStatus').setStyle('display', 'none');
	}
	
	//---------------------------------------------------------------------------------------------------------
	/**
	 * Funo que monta a descrição do Produto.
	 * 
	 * @param {String} idProd : ID do Produto. 
	 */
	//---------------------------------------------------------------------------------------------------------
	// Chamadas diretas
	
	//Declaracoes
	var mapaCat = new Hash();
	// Crio o Obj que vai controlar as variaveis Globais.
	var vars = new GlobalVars();
	//Variavel que pega o ultimo valor da categoria escolhida
	var intCategoriaProdutoAtualIndice = null; // utilizado para evitar que o topo de um reload cada vez que alterar o produto
	// MultiBox
	box = new MultiBox('mb', {useOverlay: true, showControls: false});
	//Objeto que representa o menu lateral direito
	var subMenuLateral = null;
	
	var idCategoriaAtual = null;
	//---------------------------------------------------------------------------------------------------------
	/**
	 * Faz o Request do JSON que tem a Lista de Produtos.
	 */
	// Parametros de consulta ao Web Service da Lista de produtos 
	var dados = new Hash ({
		idioma: vars.idioma,
		plantaTipo: vars.planta,
		statusProduto: 1,
		arquivoTipo: 5
	});

	var categoriasObj = {};
	
	var listaDeProdutos = new Request({
		url: vars.pathRaiz + 'servicos/wsprodutoCaravell/wsproduto.asmx/ListarProdutosJSON',
		method: 'post',
		encoding: 'utf-8',
		autoCancel: true,
		onSuccess: function (text, xml) {
			jsonPuro = getTexto(xml.getElementsByTagName('string')[0]);
			//Codifica em JSON para o Flash usar
			categoriasObj = JSON.decode(jsonPuro).listaProdutos.categoria; // Decodifica o JSON e transforma ele para um Objeto
			mapeaDados(); // Mapeia os dados com seus ID
			//alert(categoriasObj);
			montaMenuProdutos(jsonPuro); // Chama a funo que constroi o Menu dos Produtos(flash).
			
			// Se não estiver na Home Categoria.
			if (vars.prod) {
				// Chama a função que constrói a página
				montaProdutosDesc(vars.prod, vars.api, vars.cat);
				box.bindItems();
			}
			else {
				// Mostra a Home Categoria
				$('homeCategoria').setStyle('display', 'block');
				$('loadingStatus').setStyle('display', 'none');
			}
		},
		onFailure: function(instance) {
			if (instance.status == 406)
				alert('Erro de configura\347\343o no servidor para arquivos JSONs.\n' + 'Erro n\260: ' + instance.status + ".\nMensagem: " + instance.statusText + ".");
			else if (instance.status == 404)
				alert('N\343o foi poss\355vel localizar um dos arquivos.');
			else if (instance.status == 12030) { // Erro no IE7, tentar carregar a pagina novamente
				window.location.reload();
			} else
				alert('Erro de comunica\347\343o com o servidor.\n' + 'Erro n\260: ' + instance.status + ".\nMensagem: " + instance.statusText + ".");
		}

	}).send(dados.toQueryString());
});
