jQuery.noConflict();

jQuery(function($){
   $("#txtBuscaCep").mask("99999-999",{placeholder:" "});
});

jQuery(window).unload(finalize);

jQuery(document).ready(function(){
	// Ajustes para o IE
	if(jQuery.browser.msie) {
		jQuery("#txtBuscaCep").css("height","19px");
	}

    buscaDados(init);
 });

var rennerData;
var mapLoja;
var directions;
var jsonUrl = "http://portal.lojasrenner.com.br/feeds/Lojas.json";
//var jsonUrl = "http://localhost:8084/Site/Lojas.json";

function buscaDados(callback) {
	jQuery.ajax({
		type: "GET",
		url: jsonUrl,
		cache: true,
		dataType: "json",
		success: function(data, textStatus) {
			////console.log("Executando buscaDados - sucesso");
			rennerData = data;
			////console.log("Executando buscaDados - sucesso - executando funcoes de callback");
			callback();
		},
		error: function(XMLHttpRequest, textStatus, errorThrown) {
			//console.log("Executando buscaDados - erro: " + textStatus + " - " + errorThrown);
			jQuery("#conteudo").block({
				message: "<h2>Ocorreu um erro ao obter os dados:<br/>" + textStatus + " - " + errorThrown + "</h2>",
				css: { border: "4px solid #cc0000", padding: "5px" }
			});
		}
	});
}

function init() {
	//console.log("Executando carregaTextoAbertura");
	carregaTextoAbertura();
	//console.log("Executando carregaEstados");
	carregaEstados();
	//console.log("Executando carregaMapaBrasil");
	carregaMapaBrasil();
}

function finalize() {
	// Executa rotina de libera��o de mem�ria do Google Maps
	GUnload();
}

function swap(divshow, divhide) {
	jQuery(divshow).show("slow");
	jQuery(divhide).hide("slow");
}

function carregaTextoAbertura() {
	var textoAbertura;
	
	if(rennerData.textoAbertura) {
		textoAbertura = rennerData.textoAbertura;
	}
	else {
		textoAbertura = "A Lojas Renner possui " + rennerData.lojas.length + " lojas em todos os estados do Brasil";
	}
	
	jQuery("#spnTextoAbertura").text(textoAbertura);
}

function carregaEstados() {
	jQuery("<option>").attr("value", "XX").text("Selecione").appendTo("#cboEstado");
	jQuery.each(rennerData.estados, 
		function(i, estado) { 
			//console.log("Executando carregaEstados - adicionando estado " + estado.nome);
			jQuery("<option>").attr("value", estado.sigla).text(estado.nome).appendTo("#cboEstado"); 
	});
 }
 
function carregaMapaBrasil() {
	if (GBrowserIsCompatible()) {
		var gmarkers = [];
		var gmap = new GMap2(document.getElementById("divMapaBrasil"));
		
		// Centra o mapa no Brasil
		gmap.setCenter(new GLatLng(-14.235004, -51.92528), 3);
		gmap.disableScrollWheelZoom();
		gmap.disableDoubleClickZoom();
		gmap.disableGoogleBar();
		gmap.disableDragging();
		
		function makeIcon () {
			var icon = new GIcon();
			var rootPath = jQuery("#hdnRootPath").val();
			icon.image = rootPath + "_img/bullet_small.png";
			icon.iconSize = new GSize(8, 8);
			icon.iconAnchor = new GPoint(8, 1);
			return icon;
		}
		
		function createMarker(input) {
			var point = new GLatLng(input.latitude, input.longitude);
			var marker = new GMarker(point, makeIcon() );
						
			return marker;
		}
		
		for (var i = 0; i < rennerData.lojas.length; i++) {
			var marker = createMarker(rennerData.lojas[i]);
			gmap.addOverlay(marker);
		}
	}
	else {
		jQuery("#divMapaBrasil").block({
			message: "<h2>Este browser não é capaz de exibir mapas</h2>",
			css: { border: "4px solid #cc0000", padding: "5px" }
		});
	}
 }
  
 function carregaMapaLoja(loja) {
	if (GBrowserIsCompatible()) {
		function makeIcon () {
			var icon = new GIcon();
			var rootPath = jQuery("#hdnRootPath").val();
			icon.image = rootPath + "_img/image.png";
			icon.shadow = rootPath + "_img/shadow.png";
			icon.iconSize = new GSize(38, 38);
			icon.shadowSize = new GSize(50, 40);
			icon.iconAnchor = new GPoint(1, 38);
			return icon;
		}
		
		var geocoder = null;
		
		mapLoja = new GMap2(document.getElementById("divMapaLoja"));
		mapLoja.setUIToDefault();
		
		geocoder = new GClientGeocoder();
		geocoder.setBaseCountryCode("BR");
		
		function showAddress(address) {
			if (geocoder) {
				geocoder.getLatLng(
					address,
					function(point) {
						if (!point) {
							//console.log(address + " não encontrado");
						} else {
							mapLoja.setCenter(point, 16);
							var marker = new GMarker(point, makeIcon());
							mapLoja.addOverlay(marker);
						}
					}
				);
			}
		}
		
		var address = loja.endereco + ", " + loja.cidade + ", Brasil";
		
		if(loja.latitude != 0 && loja.longitude != 0) {
			var point = new GLatLng(loja.latitude, loja.longitude);
			mapLoja.setCenter(new GLatLng(loja.latitude, loja.longitude), 16);
			mapLoja.addOverlay(new GMarker(point, makeIcon()));
		}
		else {
			showAddress(address);
		}
		
		jQuery("#txtEnderecoDestino").val(address);
	}
	else {
		jQuery("#divMapaLoja").block({
			message: "<h2>Este browser não é capaz de exibir mapas</h2>",
			css: { border: "4px solid #cc0000", padding: "5px" }
		});
	}
 }
 
 function montaLista(el, loja) {
	var li = jQuery("<li>");
	jQuery("<strong>").attr("class", "lnk").text(loja.cidade + " - " + loja.estado).appendTo(li);
	jQuery("<br>").appendTo(li);
	jQuery("<strong>").text("Loja: " + loja.nome).appendTo(li);
	jQuery("<br>").appendTo(li);
	jQuery("<span>").text(loja.endereco).appendTo(li);
	jQuery("<br>").appendTo(li);
	jQuery("<span>").text("Bairro: " + loja.bairro).appendTo(li);
	jQuery("<br>").appendTo(li);
	jQuery("<span>").text("Cep: " + loja.cep).appendTo(li);
	jQuery("<br>").appendTo(li);
	jQuery("<span>").text("Fone: " + loja.telefone).appendTo(li);
	jQuery("<br>").appendTo(li);
	jQuery("<a>").attr("class", "lnk").attr("href", "#topo").text("mapa").bind("click", {loja: loja, directions: false}, exibeMapa).appendTo(li);
	jQuery("<span>").text(" | ").appendTo(li);
	jQuery("<a>").attr("class", "lnk").attr("href", "#topo").text("como chegar").bind("click", {loja: loja, directions: true}, exibeMapa).appendTo(li);
	li.appendTo(el);
 }
 
 function buscaPorCEP() {
	var cep = jQuery("#txtBuscaCep").val();
	
	if(cep == "") {
		//console.log("Informe o CEP");
		jQuery("#txtBuscaCep").focus();
		return;
	}
	
	jQuery("#divTituloResultadoBusca").hide();
	jQuery("#divMensagemResultadoBusca").hide();
	jQuery("#divResultadoBusca").empty();
	
	var lojasPorCep = filtraLojasPorCep(cep, rennerData.lojas);
	
	if(lojasPorCep.length === 0) {
		jQuery("#spnMensagemResultadoBusca").text("Não foi encontrada nenhuma loja pr\u00f3xima ao CEP " + cep);
	}
	else if(lojasPorCep.length === 1) {
		jQuery("#spnMensagemResultadoBusca").text("Foi encontrada uma loja pr\u00f3xima ao CEP " + cep);
	}
	else {
		jQuery("#spnMensagemResultadoBusca").text("Foram encontradas " + lojasPorCep.length + " lojas pr\u00f3ximas ao CEP " + cep);
	}
	
	var ul = jQuery("<ul>").attr("id", "listaLojas");
	var contadorLoja = 1;
	
	jQuery.each(lojasPorCep, 
		function() { 
			montaLista(ul, this);
			
			if(contadorLoja > 0 && contadorLoja % 3 === 0) {
				ul.appendTo("#divResultadoBusca");
				ul = jQuery("<ul>").attr("id", "listaLojas");
			}
			
			if(contadorLoja == lojasPorCep.length && lojasPorCep.length > 3) {
				ul.appendTo("#divResultadoBusca");
			}
			
			if(contadorLoja == lojasPorCep.length && lojasPorCep.length < 3) {
				ul.appendTo("#divResultadoBusca");
			}

			contadorLoja++;
	});
	
	jQuery("#divTituloResultadoBusca").show();
	jQuery("#divMensagemResultadoBusca").show();
	jQuery("#divResultadoBusca").show();
 }
 
 function filtraLojasPorCep(cep, lojas) {
	var lojasPorCep = filtroCep(cep, lojas, 5);
			
	if(lojasPorCep.length == 0)
	{
		lojasPorCep = filtroCep(cep, lojas, 2);
	}
	
	return lojasPorCep;
 }
 
 function filtroCep(cep, lojas, tamanhoAmostraCep) {
	var index = 0;
	var lojasPorCep = [];
	jQuery.each(lojas, function(i, loja) {
		if(loja.cep.substr(0, tamanhoAmostraCep) == cep.substr(0, tamanhoAmostraCep)) {
			lojasPorCep[index] = loja;
			index++;
		}
	});
	return lojasPorCep;
 }
 
 function filtraLojasPorEstado(sigla, lojas) {
	var index = 0;
	var lojasPorEstado = [];
	jQuery.each(lojas, function(i, loja) {
		if(loja.estado == sigla) {
			lojasPorEstado[index] = loja;
			index++;
		}
	});
	return lojasPorEstado;
 }
 
 function buscaPorEstado() {
	var sigla;
	var nome;
	
	jQuery("#divTituloResultadoBusca").hide();
	jQuery("#divMensagemResultadoBusca").hide();
	jQuery("#divResultadoBusca").empty();
	
	jQuery("#cboEstado option:selected").each(function() 
		{
			sigla = jQuery(this).val();
			nome = jQuery(this).text();
		}
	);
	
	if(sigla === "XX") {
		//console.log("Selecione um estado");
		return;
	}
	
	var lojasPorEstado = filtraLojasPorEstado(sigla, rennerData.lojas);
	
	if(lojasPorEstado.length === 1) {
		jQuery("#spnMensagemResultadoBusca").text("Foi encontrada uma loja no Estado " + nome);
	}
	else {
		jQuery("#spnMensagemResultadoBusca").text("Foram encontradas " + lojasPorEstado.length + " lojas no Estado " + nome);
	}
	
	var ul = jQuery("<ul>").attr("id", "listaLojas");
	var contadorLoja = 1;
	
	jQuery.each(lojasPorEstado, 
		function() { 
			montaLista(ul, this);
			
			if(contadorLoja > 0 && contadorLoja % 3 === 0) {
				ul.appendTo("#divResultadoBusca");
				ul = jQuery("<ul>").attr("id", "listaLojas");
			}
			
			if(contadorLoja == lojasPorEstado.length && lojasPorEstado.length > 3) {
				ul.appendTo("#divResultadoBusca");
			}
			
			if(contadorLoja == lojasPorEstado.length && lojasPorEstado.length < 3) {
				ul.appendTo("#divResultadoBusca");
			}

			contadorLoja++;
	});
	
	jQuery("#divTituloResultadoBusca").show();
	jQuery("#divMensagemResultadoBusca").show();
	jQuery("#divResultadoBusca").show();
 }
 
 function comoChegar(e) {
	var loja = e.data;
	var from = jQuery("#txtEnderecoOrigem").val();
	var to = loja.endereco + ", " + loja.cidade + ", Brasil";
	var tipoRota;
	
	jQuery("#divGaleriaFotos").hide();
	jQuery("#divMapaLoja").show();
	
	jQuery("#cboTipoRota option:selected").each(function() 
		{
			tipoRota = jQuery(this).val();
		}
	);
	
	carregaMapaLoja(loja);
	
	directions = new GDirections(mapLoja, document.getElementById("divComoChegarInstrucoes"));
	directions.locale = "pt-BR";
	var travelMode = tipoRota == 0 ? G_TRAVEL_MODE_DRIVING : G_TRAVEL_MODE_WALKING;
	directions.load("from: " + from + " to: " + to, {getSteps: true, locale: "pt-BR", travelMode: travelMode});
	
	var reasons = [];
	reasons[G_GEO_SUCCESS]            	= "Sucesso";
	reasons[G_GEO_MISSING_ADDRESS]    	= "Endereço Faltando: o endereco esta faltando ou nao possui valor.";
	reasons[G_GEO_UNKNOWN_ADDRESS]    	= "Endereço Desconhecido: nao foi encontrada localizacao geografica correspondente ao endereco especificado.";
	reasons[G_GEO_UNAVAILABLE_ADDRESS]	= "Endereço Indisponavel: a localizacao geografica para o endereco especificado nao pode ser retornada devido a razies legais ou contratuais.";
	reasons[G_GEO_BAD_KEY]            	= "Erro na Chave: a chave da API é invalida ou nao esta de acordo com o dominio para o qual ela foi emitida.";
	reasons[G_GEO_TOO_MANY_QUERIES]   	= "Excesso de Queries: a quota diaria de localizacao geografica para este site foi excedida.";
	reasons[G_GEO_SERVER_ERROR]       	= "Erro no Servidor: a requisicao de localizacao geografica nao pode ser processada com sucesso.";
	reasons[G_GEO_BAD_REQUEST]        	= "A requisicao de endereco nao pode ser tratada com sucesso.";
	reasons[G_GEO_MISSING_QUERY]      	= "Nao foi especificada uma consulta na entrada de dados.";
	reasons[G_GEO_UNKNOWN_DIRECTIONS] 	= "O objeto GDirections nao pode computar enderecos entre os pontos.";

	// Trata erros
	GEvent.addListener(directions, "error", function() {
		var code = directions.getStatus().code;
		var reason = "Codigo " + code;
		if (reasons[code]) {
			reason = reasons[code]
		} 

		//console.log("Falha ao obter enderecos\n"+reason);
	});
	
	GEvent.addListener(directions, "load", function() {
		swap("#divComoChegarInstrucoes", "#divDadosLoja");
		setTimeout('customPanel(mapLoja,"mapLoja",directions,document.getElementById("divComoChegarInstrucoes"))', 1);
	});
 }
 
 function customPanel(map, mapname, dirn, div) {
	var html = "";
	
	html += "<div class='navegacaoEsq' title='ocultar painel' onclick='swap(\"#divDadosLoja\", \"#divComoChegarInstrucoes\");'></div>";
	
	function waypoint(point, type, address) {
		var target = '"' + mapname+".showMapBlowup(new GLatLng("+point.toUrlValue(6)+"))"  +'"';
		html += '<table style="border: 1px solid silver; margin: 10px 0px; background-color: rgb(238, 238, 238); border-collapse: collapse; color: rgb(0, 0, 0);font-size:10px;">';
		html += '  <tr style="cursor: pointer;" onclick='+target+'>';
		html += '    <td style="padding: 4px 15px 0px 5px; vertical-align: middle; width: 20px;">';
		html += '      <img src="http://www.google.com/intl/en_ALL/mapfiles/icon-dd-' +type+ '-trans.png">'
		html += '    <\/td>';
		html += '    <td style="vertical-align: middle; width: 100%;">';
		html +=        address;
		html += '    <\/td>';
		html += '  <\/tr>';
		html += '<\/table>';
	}
	
	function routeDistance(dist) {
		html += '<div style="text-align: right; padding-bottom: 0.3em;font-size:10px;">' + dist + '<\/div>';
	}
	
	function detail(point, num, description, dist) {
		var target = '"' + mapname+".showMapBlowup(new GLatLng("+point.toUrlValue(6)+"))"  +'"';
		html += '<table style="margin: 0px; padding: 0px; border-collapse: collapse;font-size:10px;">';
		html += '  <tr style="cursor: pointer;" onclick='+target+'>';
		html += '    <td style="border-top: 1px solid rgb(205, 205, 205); margin: 0px; padding: 0.3em 3px; vertical-align: top; text-align: right;">';
		html += '      <a href="javascript:void(0)"> '+num+'. <\/a>';
		html += '    <\/td>';
		html += '    <td style="border-top: 1px solid rgb(205, 205, 205); margin: 0px; padding: 0.3em 3px; vertical-align: top; width: 100%;">';
		html +=        description;
		html += '    <\/td>';
		html += '    <td style="border-top: 1px solid rgb(205, 205, 205); margin: 0px; padding: 0.3em 3px 0.3em 0.5em; vertical-align: top; text-align: right;">';
		html +=        dist;
		html += '    <\/td>';
		html += '  <\/tr>';
		html += '<\/table>';
	}
	
	function copyright(text) {
		html += '<div style="font-size: 0.86em;">' + text + "<\/div>";
	}
	
	for (var i=0; i<dirn.getNumRoutes(); i++) {
		if (i==0) {
			var type="play";
		} else {
			var type="pause";
		}
		var route = dirn.getRoute(i);
		var geocode = route.getStartGeocode();
		var point = route.getStep(0).getLatLng();
		// Waypoint at the start of each GRoute
		waypoint(point, type, geocode.address);
		routeDistance(route.getDistance().html+" (cerca de "+route.getDuration().html+")");

		for (var j=0; j<route.getNumSteps(); j++) {
			var step = route.getStep(j);
			// Detail lines for each step
			detail(step.getLatLng(), j+1, step.getDescriptionHtml(), step.getDistance().html);
		}
	}
	
	var geocode = route.getEndGeocode();
	var point = route.getEndLatLng();

	waypoint(point, "stop", geocode.address);
	copyright(dirn.getCopyrightsHtml());

	div.innerHTML = html;
}

function exibeFoto(e) {
	jQuery("#divGaleriaFotosNavegacao").attr("class", "navegacaoEsq").click(function () {
		swap("#divMapaLoja", "#divGaleriaFotos");
	});
	
	exibeFoto2(e);
	
	swap("#divGaleriaFotos", "#divMapaLoja");
}

function exibeFoto2(e) {
	jQuery("#divFotoGrandePlaceholder").empty();
	jQuery("<img>").attr("src", e.data).attr("width", 350).attr("height", 260).appendTo("#divFotoGrandePlaceholder");
}

function exibeFoto3() {
	jQuery("#divFotoGrandePlaceholder").empty();
	jQuery("<img>").attr("src", this.src).attr("width", 350).attr("height", 260).appendTo("#divFotoGrandePlaceholder");
}

function visaoDefault() {
	jQuery("#divDadosLoja").show();
	jQuery("#divMapaLoja").show();
	jQuery("#divGaleriaFotos").hide();
	jQuery("#divComoChegarInstrucoes").hide();
}

function exibeMapa(e) {
	visaoDefault();
	
	var loja = e.data.loja;
	var showDirections = e.data.directions;
	var title = loja.nome + " (" + loja.cidade + " - " + loja.estado + ")";
	
	if(showDirections) {
		jQuery("#divComoChegarInstrucoes").empty();
		jQuery("#txtEnderecoOrigem").val("");
		jQuery("#btnComoChegar").bind("click", loja, comoChegar);
		jQuery("#divComoChegar").show();
	}
	else {
		jQuery("#divComoChegar").hide();
	}
	
	jQuery("#infoCidadeEstado").text(loja.cidade + " - " + loja.estado);
	jQuery("#infoNomeLoja").text(loja.nome);
	jQuery("#infoEndereco").text(loja.endereco);
	jQuery("#infoBairro").text(loja.bairro);
	jQuery("#infoCep").text(loja.cep);
	jQuery("#infoTelefone").text(loja.telefone);
	
	jQuery("#divFotos").empty();
	jQuery("#divFotos2").empty();
	
	jQuery.each(loja.fotos, 
		function() {
			var img = jQuery("<img>").css("width","142").css("height","50").css("top","0").css("left","0").css("border","none").css("cursor","hand");
			img.attr("src", this).appendTo("#divFotos");
			img.bind("click", this, exibeFoto);
			
			var img2 = jQuery("<img>").css("width","38").css("height","25").css("top","0").css("left","0").css("border","none").css("cursor","hand");
			img2.attr("src", this).appendTo("#divFotos2");
			img2.bind("click", this, exibeFoto2);
	});
	
	jQuery("#divFotos").cycle({
		fx: "fade",
		speed: "fast",
		timeout: 0, 
		next: "#lnkNext",
		prev: "#lnkPrev"
	});
	
	jQuery("#divFotos2").cycle({
		fx: "fade",
		speed: "fast",
		timeout: 0, 
		next: "#lnkNext2",
		prev: "#lnkPrev2",
		after: exibeFoto3
	});
	
	var html = "";
	
	jQuery.each(loja.funcionamento, function() {
		html += this + "<br/>";
	});
	
	jQuery("#spnInfoFuncionamento").html(html);
	
	var url = "#TB_inline?height=415&width=710&inlineId=divMapa2";
	tb_show(title, url);
	
	carregaMapaLoja(loja);
};
