﻿/// <reference path="jquery-1.3.2.js" />

// gerenciador de marcardores (Estabelecimentos/Bairros)
var markerManagerFullGeral;
var markerManagerFullBairrosGeral;

// Variaveis receptoras dos xml de localização
var xmlInputGeral;
var xmlDocGeral;

// variavel controladora do mapa
var mapGeral;

// pontos dos bairros
var pontosBairros;

// array de markers do bairro
var arrMarkersBairroGeral = new Array();

// Flag para validar o uso do viewport ou não
var isViewPortSearchEnabledGeral = true;

// indica se foi feita uma pesquisa de info de um restaurante
var isInfoBoxOpened = false;

// filtro de mapa de listagem
var bairroLista = "";
var cozinhaLista = "";
var especialidadeLista = "";
var tipoLista = "";
var redeLista = "";
var buscaListaGeral = "";
var pedidoOnline = "";
var premiumLista = "";


/**
* ShowMapLista - Função que inicializa o mapa principal das listagens
*
*/
function ShowMapLista(tipoBusca, idBusca) {
    switch (tipoBusca) {
        case "C":
            cozinhaLista = idBusca;
            break;

        case "P":
            especialidadeLista = idBusca;
            break;

        case "T":
            tipoLista = idBusca;
            break;

        case "Bairro":
            bairroLista = idBusca;
            break;

        case "rede":
            redeLista = idBusca;
            break;

        case "B":
            buscaListaGeral = idBusca;
            break;

        case "delivery":
            pedidoOnline = true;
            break;

        case "premium":
            premiumLista = "3";
            break;
    }
    ShowMap();
}

/**
* ShowMap - Função que inicializa o mapa principal
*
*/
function ShowMap() {
    try {

        if ($('object')) {
            //esconde tags object
            $('object').css('display', 'none');
        }

        var loaderBox = document.getElementById("loaderBox");

        $('#mainMapContainer').modal({
            overlayCss: {
                backgroundColor: '#000'
            },
            containerCss: {
                height: 537,
                width: 970,
                margin: 5
            }
        });

        loaderBox.innerHTML = '<center><label style="font-family: Arial; font-weight: bold; font-size: 10pt; color: #771300" for="chkTeleentrega"><b>Carregando</b></label><br><img src="http://static2.foodbrasil.com.br/img/loader.gif" width="100px" height="15px"/></center>';
        InitializeMapGeral();
    }
    catch (err) { }
}

/**
* applySearchGeral - Faz a busca dos filtros que serão utilizados nas pesquisas do mapa
*
* @param isFiltering flag que indica se sera utilizado os filtros ou não
* @param isViewAll flag que indica se sera vizualizado todos itens do mapa
*/
function applySearchGeral(isFiltering, isViewAll) {
    try {
        var bairro = '';
        var tipoEstabelecimento = '';
        var tipoCozinha = '';
        var especialidade = '';
        var telentrega = '';
     
        if (isViewAll == false) {

            bairro = $('#ctl00_FormCPH_mapaGeral_ddlBairro').val();
            tipoEstabelecimento = $('#ctl00_FormCPH_mapaGeral_ddlTipoEstabelecimento').val();
            tipoCozinha = $('#ctl00_FormCPH_mapaGeral_ddlCozinha').val();
            especialidade = $('#ctl00_FormCPH_mapaGeral_ddlEspecialidades').val();
            telentrega = $('#chkTeleentrega').attr('checked') ? "S" : "";
        }

        SearchMarkersGeral(bairro, tipoEstabelecimento, tipoCozinha, especialidade, telentrega, isFiltering);
    }
    catch (err) { }
}

/**
* SearchMarkersGeral - Função para realizar pesquisas no mapa usando web services e redesenhandos os markers que devem
* demonstrados
*
* @param - pbairro contem o codigo do bairro a ser filtrado
* @param - ptipoEstabelecimento contem o codigo do tipo de estabelecimento a ser filtrado
* @param - ptipoCozinha contem o codigo do tipo de cozinha a ser filtrado
* @param - pespecialidade contem o codigo do tipo de especialidade a ser filtrado
* @param - ptelentrega  flag para verificar se o mapa deve filtrar por estabelecimentos com tele - entrega
* @param - isFiltering  flag para verificar se deve realizar os filtros no mapa
*
*/
function SearchMarkersGeral(pbairro, ptipoEstabelecimento, ptipoCozinha, pespecialidade, ptelentrega, isFiltering) {
    try {
        if (isFiltering) {
            var loaderBox = document.getElementById("loaderBox");
            loaderBox.innerHTML = '<center><label style="font-family: Arial; font-weight: bold; font-size: 10pt; color: #771300" for="chkTeleentrega"><b>Carregando</b></label><br><img src="http://static2.foodbrasil.com.br/img/loader.gif" width="100px" height="15px"/></center>';
            loaderBox.style.display = "block";
        }

        $.post(GcidadeUrl+'/service/mapSearch.aspx',
        { bairro: pbairro, tipoEstabelecimento: ptipoEstabelecimento, tipoCozinha: ptipoCozinha, especialidade: pespecialidade, telentrega: ptelentrega, redeEstab: redeLista, conteudoBusca: buscaListaGeral, pedidoOnlineBusca: pedidoOnline, premiumMapaGeral: premiumLista },
			function(data) {
			    xmlInputGeral = data;
			   
			    if (isFiltering == false) {
			        InitializeFullMapGeral();
			    }
			    else {
			        if (markerManagerFullGeral) {
			            markerManagerFullGeral.clearMarkers();
			        }
			        InitializeFullMapGeral();

			        $.post(GcidadeUrl+'/service/getBairrosCidade.aspx',
			        { buscarTodos: false, bairroId: pbairro, tipoEstabelecimento: ptipoEstabelecimento, tipoCozinha: ptipoCozinha, especialidade: pespecialidade, telentrega: ptelentrega, redeEstab: redeLista, conteudoBusca: buscaListaGeral, pedidoOnlineBusca: pedidoOnline, premiumMapaGeral: premiumLista, premiumMapaGeral: premiumLista },
							function(data) {
							    bairrosGeral = data;

							    if (pbairro != "") {
							        centralizaBairroGeral(bairrosGeral);
							    }

							    markerManagerFullBairrosGeral.clearMarkers();
							    markerManagerFullBairrosGeral = new MarkerManager(mapGeral, { borderPadding: 0 });
							    PlaceMarkersBairrosGeral(bairrosGeral);
							    markerManagerFullBairrosGeral.refresh();
							}
					 );
			    }
			}
		);
    }
    catch (err) { }
}

/**
* InitializeFullMapGeral Inicializa os restaurantes no mapa
* Utilizando o xml retornado do web service de estabelecimentos
*/
function InitializeFullMapGeral() {
    try {
        // Verifica se browser do usuario suporta exibicao dos mapas
        if (GBrowserIsCompatible()) {

            xmlDocGeral = getXmlFromString(xmlInputGeral);

            if (xmlDocGeral === null) {
                alert("Seu navegador não é compatível com a exibição de mapas.")
            }

            // Ajusta Centro
            var root = xmlDocGeral.getElementsByTagName("r")[0];

            var centerItems = root.getElementsByTagName("c");

            // Pega o marcador central	
            for (var idxCenter = 0; idxCenter < centerItems.length; idxCenter++) {

                var element = centerItems[idxCenter];

                var Nome = element.attributes.getNamedItem("n").nodeValue;
                centerByAddressGeral(Nome);
            }
        }
        else {
            mapContainer.innerHTML = 'O navegador de internet que você está utilizando não suporta a visualização de mapas.';
        }
    }
    catch (err) { }
}

/**
* InitializeMapGeral - Inicializa o mapa na visão de bairros ou mesmo na visão corrente do usuário 
*  Carrega todos os markers de bairros
*
* @param - zoomFixo Recebe ou não o zoom em que deve ser fixado o mapa em determinada busca
*/
function InitializeMapGeral(zoomFixo) {
    try {
        // Verifica se browser do usuario suporta exibicao dos mapas
        if (GBrowserIsCompatible()) {

            // Definicao/Inicializacao das variaveis/funcoes
            var loaderBox = document.getElementById("loaderBox");
            var nomeCidade;
            var bairros;
            var mapContainer = document.getElementById("innerMap");
            var geocoder = new GClientGeocoder();

            mapGeral = new GMap2(mapContainer);
            geocoder.setBaseCountryCode("pt_BR");

            mapGeral.addControl(new GLargeMapControl());
            mapGeral.addControl(new GOverviewMapControl());

            GEvent.addListener(mapGeral, "moveend", function() {
                recuperaMarkersViewPortGeral();
            });

            $.post(GcidadeUrl+'/service/getCidadeCentroMapa.aspx',
				function(data) {
				    nomeCidade = getNomeCidadeXMLGeral(data);
				    centralizaMapaCidadeGeral(nomeCidade, true, zoomFixo);
				}
			);
        }
        else {
            mapContainer.innerHTML = 'O navegador de internet que você está utilizando não suporta a visualização de mapas.';
        }
    }
    catch (err) { }
}

/**
* centralizaMapaCidadeGeral - Centraliza o mapa na cidade corrente do usuário
*
* @param - localidade recebe o id da localidade (cidade) corrente
* @param - inicializaMarkersBairros flag que indica se reinicializa os markers de bairros ou não
* @param - zoomFixo Recebe o zoom que deve plotar o mapa ou se não receber nada inicia no padrão 13 (bairros)
*/
function centralizaMapaCidadeGeral(localidade, inicializaMarkersBairros, zoomFixo) {
    try {
        var geocoder = new GClientGeocoder();
        geocoder.getLatLng(
			localidade,
			function(point) {
			    if (point) {
			        if (zoomFixo != undefined) {
			            mapGeral.setCenter(point, zoomFixo);
			        } else {
			            mapGeral.setCenter(point, 13);
			        }
			        mapGeral.setUIToDefault();
			        if (inicializaMarkersBairros == true) {
			            $.post(GcidadeUrl+'/service/getBairrosCidade.aspx',
			            // parametros para busca de bairros vistos da lista
                                {buscarTodos: false, bairroId: bairroLista, tipoEstabelecimento: tipoLista, tipoCozinha: cozinhaLista, especialidade: especialidadeLista, redeEstab: redeLista, conteudoBusca: buscaListaGeral, pedidoOnlineBusca: pedidoOnline, premiumMapaGeral: premiumLista },
								function(data) {
								    bairros = data;
								    markerManagerFullBairrosGeral = new MarkerManager(mapGeral, { borderPadding: 0 });
								    PlaceMarkersBairrosGeral(bairros);
								    markerManagerFullBairrosGeral.refresh();

								    /// filtros para o mapa quando vistos das listagens
								    if (bairroLista != "") {
								        buscaPorBairroCentralizarGeral(bairroLista);
								    }
								    setComboFiltroLista();
								    resetVariaveisLista();

								}
						);
			        }
			    }
			}
		);
    }
    catch (err) { }
}

function resetVariaveisLista() {
   bairroLista = "";
   tipoLista = ""; 
   cozinhaLista = ""; 
   especialidadeLista ="";
}

function setComboFiltroLista() {
    $('#ctl00_FormCPH_mapaGeral_ddlBairro').val(bairroLista);
    $('#ctl00_FormCPH_mapaGeral_ddlTipoEstabelecimento').val(tipoLista);
    $('#ctl00_FormCPH_mapaGeral_ddlCozinha').val(cozinhaLista);
    $('#ctl00_FormCPH_mapaGeral_ddlEspecialidades').val(especialidadeLista);
}

/**
* getNomeCidadeXMLGeral - Busca o nome da cidade de um xml
*
* @param - xml arquivo de xml com a cidade
*/
function getNomeCidadeXMLGeral(xml) {
    try {
        xmlInputGeral = xml;

        xmlDocGeral = getXmlFromString(xmlInputGeral);

        var raizDoc = xmlDocGeral.getElementsByTagName("r")[0];
        var item = raizDoc.getElementsByTagName("c");
        var elemento = item[0];
        var nomeCidade = elemento.attributes.getNamedItem("n").nodeValue;

        return nomeCidade;
    }
    catch (err) { }
}

/**
* centerByAddressGeral - Centraliza no endereço passado
*
* @param - address recebe o endereço onde deve ser centralizado
*/
function centerByAddressGeral(address) {
    try {
        var geocoder = new GClientGeocoder();
        var loaderBox = document.getElementById("loaderBox");

        markerManagerFullGeral = new MarkerManager(mapGeral, { borderPadding: 0 });

        PlaceMarkersGeral();

        markerManagerFullGeral.refresh();
        loaderBox.innerHTML = "";
        loaderBox.style.display = "none";
    }
    catch (err) { }
}

/**
* PlaceMarkersGeral - cria os markers solicitado pelos filtros e os mostra no mapa
*    
*/
function PlaceMarkersGeral() {
    try {
        xmlDocGeral = getXmlFromString(xmlInputGeral);
        if (xmlDocGeral === null) {
            alert("Seu navegador não é compatível com a exibição de mapas.")
        }

        // Definicao/Inicializacao das variaveis/funcoes
        var arrMarkers = new Array();
        var arrMarkersPremium = new Array();

        var root = xmlDocGeral.getElementsByTagName("r")[0];

        // pega os demais marcadores
        var markerItems = root.getElementsByTagName("m");
        // Pega o marcador centras
        for (var idxMarkers = 0; idxMarkers < markerItems.length; idxMarkers++) {

            var element = markerItems[idxMarkers];

            var Nome = element.attributes.getNamedItem("n").nodeValue;
            var Latitude = element.attributes.getNamedItem("lt").nodeValue;
            var Longitude = element.attributes.getNamedItem("lg").nodeValue;
            var TipoConta = element.attributes.getNamedItem("t").nodeValue;
            var Reference = element.attributes.getNamedItem("r").nodeValue;

            var IconImage;

            if (TipoConta == "P")
                IconImage = "http://static2.foodbrasil.com.br/img/icoPremium.gif";
            else
                IconImage = "http://static2.foodbrasil.com.br/img/icoLite.gif";

            if (TipoConta === "P")
                arrMarkersPremium.push(CreateMarkerGeral(Nome, Latitude, Longitude, TipoConta, IconImage, Reference));
            else
                arrMarkers.push(CreateMarkerGeral(Nome, Latitude, Longitude, TipoConta, IconImage, Reference));

        }

        // Estabelecimentos lite
        markerManagerFullGeral.addMarkers(arrMarkers, 15, 17);

        // Estabelecimentos premium
        markerManagerFullGeral.addMarkers(arrMarkersPremium, 15, 17);
    }
    catch (err) { }
}

/**
*PlaceMarkersBairrosGeral - Posiciona os merkers dos bairros em suas posições corretas
*
* @param - bairrosXml xml com coordenadas de bairros
*/
function PlaceMarkersBairrosGeral(bairrosXml) {
    try {
        var loaderBox = document.getElementById("loaderBox");

        xmlDocGeral = getXmlFromString(bairrosXml);
        if (xmlDocGeral === null) {
            alert("Seu navegador não é compatível com a exibição de mapas.")
        }

        var arrMarkersBairroGeral = new Array();

        // Definicao/Inicializacao das variaveis/funcoes          
        var geocoder = new GClientGeocoder();
        geocoder.setBaseCountryCode("pt_BR");

        var root = xmlDocGeral.getElementsByTagName("r")[0];

        // pega os demais marcadores
        var markerItems = root.getElementsByTagName("b");

        var qtdMakersBairro = 0;

        // Pega o marcador centras
        for (var idxMarkers = 0; idxMarkers < markerItems.length; idxMarkers++) {

            var element = markerItems[idxMarkers];

            var endereco = element.attributes.getNamedItem("end").nodeValue;
            var latitude = element.attributes.getNamedItem("lat").nodeValue;
            var longitude = element.attributes.getNamedItem("lng").nodeValue;
            var title = element.attributes.getNamedItem("title").nodeValue;
            var bairroId = element.attributes.getNamedItem("bairroId").nodeValue;
            var IconImage = "http://static2.foodbrasil.com.br/img/icoPremium.gif";

            arrMarkersBairroGeral.push(CreateMarkerGeral(title, latitude, longitude, "L", IconImage, bairroId, "BAIRRO"));
            qtdMakersBairro++;
        }

        if (qtdMakersBairro > 0) {
            markerManagerFullBairrosGeral.addMarkers(arrMarkersBairroGeral, 10, 14);
        }
        loaderBox.innerHTML = "";
        loaderBox.style.display = "none";
    }
    catch (err) { }
}

/**
* buscaPorBairroCentralizarGeral - Centraliza o mapa usando o filtro de bairros da tela
* podendo centralizar em um bairro especial ou atualizando todos
*
* @param - idBairro bairro selecionado na combo de filtros
*/
function buscaPorBairroCentralizarGeral(idBairro) {
    try {
        var loaderBox = document.getElementById("loaderBox");
        if (idBairro != "") {
            $.post(GcidadeUrl+'/service/getBairrosCidade.aspx',
					{ buscarTodos: false, bairroId: idBairro },
					function(data) {
					centralizaBairroGeral(data);
					    applySearchGeral(true, false);
					}
			);
        }
        else {
            InitializeMapGeral(mapGeral.getZoom());
            recuperaMarkersViewPortGeral();
        }
    }
    catch (err) { }
}

/**
* centralizaBairroGeral - Centraliza mapa pelas coordenadas retornadas no xml de bairros
*
* @param bairroXML xml contendo coordenadas do bairro a ser centralizado
*/
function centralizaBairroGeral(bairroXML) {
    try {
        xmlGeral = bairroXML;
        xmlDocGeral = getXmlFromString(xmlGeral);

        var arrMarkersBairroGeral = new Array();

        var geocoder = new GClientGeocoder();
        geocoder.setBaseCountryCode("pt_BR");

        var root = xmlDocGeral.getElementsByTagName("r")[0];

        // pega os demais marcadores
        var markerItems = root.getElementsByTagName("b");

        var qtdMakersBairro = 0;

        // Pega o marcador centras
        for (var idxMarkers = 0; idxMarkers < markerItems.length; idxMarkers++) {
            var element = markerItems[idxMarkers];
            var latitude = element.attributes.getNamedItem("lat").nodeValue;
            var longitude = element.attributes.getNamedItem("lng").nodeValue;
            qtdMakersBairro++;
        }
        if (qtdMakersBairro > 0) {
            mapGeral.setCenter(new GLatLng(latitude, longitude), 15);
        }
    }
    catch (err) { }
}

/**
* verTodosGeral - Função para reiniciar o mapa na visualização de bairros (nivel 13 de zoom)	
*/
function verTodosGeral() {
    try {
        var loaderBox = document.getElementById("loaderBox");

        $('#ctl00_FormCPH_mapaGeral_ddlBairro').val('');
        $('#ctl00_FormCPH_mapaGeral_ddlTipoEstabelecimento').val('');
        $('#ctl00_FormCPH_mapaGeral_ddlCozinha').val('');
        $('#ctl00_FormCPH_mapaGeral_ddlEspecialidades').val('');
        $('#chkTeleentrega').removeAttr('checked');

        // Limpa a variavel redeLista ( contem as redes pesquisadas no site ) 
        // para o mapa de listagens (botao : Visão do Mapa)
        redeLista = "";

        // Limpa a variavel buscaListaGeral ( contem as palavras usadas para pesquisa de estabelecimentos no site ) 
        // para o mapa de listagens (botao : Visão do Mapa)
        buscaListaGeral = "";

        loaderBox.innerHTML = '<center><label style="font-family: Arial; font-weight: bold; font-size: 10pt; color: #771300" for="chkTeleentrega"><b>Carregando</b></label><br><img src="http://static2.foodbrasil.com.br/img/loader.gif" width="100px" height="15px"/></center>';
        loaderBox.style.display = "block";

        InitializeMapGeral();
    }
    catch (err) { }
}

/**
* recuperaMarkersViewPortGeral - Função que realiza a busca de markers pelo viewport ( parte da tela corrente do usuario)
*
*/
function recuperaMarkersViewPortGeral() {
    try {
        if (isInfoBoxOpened == true) {
            isInfoBoxOpened = false;
            isViewPortSearchEnabledGeral = true;
        }

        if (isViewPortSearchEnabledGeral) {
            var zoom = mapGeral.getZoom();
            if (zoom > 14) {
                var centroMapa = mapGeral.getCenter();
                var limitesMapa = mapGeral.getBounds();
                var pontoMinimoEsq = limitesMapa.getSouthWest();
                var pontoMaximoDir = limitesMapa.getNorthEast();
                var latMin = pontoMinimoEsq.lat();
                var lngMin = pontoMinimoEsq.lng();
                var latMax = pontoMaximoDir.lat();
                var lngMax = pontoMaximoDir.lng();

                var bairro = '';
                var tipoEstabelecimento = '';
                var tipoCozinha = '';
                var especialidade = '';
                var telentrega = '';

                bairro = $('#ctl00_FormCPH_mapaGeral_ddlBairro').val();
                tipoEstabelecimento = $('#ctl00_FormCPH_mapaGeral_ddlTipoEstabelecimento').val();
                tipoCozinha = $('#ctl00_FormCPH_mapaGeral_ddlCozinha').val();
                especialidade = $('#ctl00_FormCPH_mapaGeral_ddlEspecialidades').val();
                telentrega = $('#chkTeleentrega').attr('checked') ? "S" : '';

                var loaderBox = document.getElementById("loaderBox");
                loaderBox.innerHTML = '<center><label style="font-family: Arial; font-weight: bold; font-size: 10pt; color: #771300" for="chkTeleentrega"><b>Carregando</b></label><br><img src="http://static2.foodbrasil.com.br/img/loader.gif" width="100px" height="15px"/></center>';
                loaderBox.style.display = "block";

                $.post(GcidadeUrl+'/service/mapSearch.aspx',
						{ bairro: bairro, tipoEstabelecimento: tipoEstabelecimento
						  , tipoCozinha: tipoCozinha, especialidade: especialidade, telentrega: telentrega
						  , latitudeMin: latMin, latitudeMax: latMax, longMin: lngMin, longMax: lngMax, redeEstab: redeLista, conteudoBusca: buscaListaGeral, pedidoOnlineBusca: pedidoOnline, premiumMapaGeral: premiumLista
						},
							function(data) {
							    xmlInputGeral = data;
							    if (markerManagerFullGeral) {
							        markerManagerFullGeral.clearMarkers();
							    }
							    InitializeFullMapGeral();
							}
				);
            }
        }
    }
    catch (err) {
    }
}
