﻿BuscaMapaBox.OnSelectItem = function(itemType, latitude, longitude, itemData)
{
    var id = itemData.IdItemBuscaMapa.toString();
    ResultadoBuscaMapa.AtualizaPaineisInformacao(itemType, id);

    switch (itemType)
    {
        case 0:
            ResultadoBuscaMapa.ChangeMultipleTabsLock(true, true, true, true);
            ResultadoBuscaMapa.ApplyContent('Busca por destino', 'Selecione o Tipo de Intercâmbio e navegue pelo mapa ao lado, clicando nos pontos para conhecer os programas disponíveis em cada localidade.', 'spnNomeContinente', 'spnNomeContinenteTexto', 'parTextoContinete');
            break;
        case TiposDeItemMapa.Continente:
            ResultadoBuscaMapa.ChangeMultipleTabsLock(false, true, true, true);
            break;
        case TiposDeItemMapa.Pais:
            ResultadoBuscaMapa.SetIdPais(id);
            Ajax.BuscaMapa.ObtemPais(id, this.End_ObtemPais);
            ResultadoBuscaMapa.ChangeMultipleTabsLock(false, false, true, true);
            break;
        case TiposDeItemMapa.Regiao:
            break;
        case TiposDeItemMapa.Cidade:
            Ajax.BuscaMapa.ObtemCidade(id, this.End_ObtemCidade);
            ResultadoBuscaMapa.ChangeMultipleTabsLock(false, false, false, true);
            break;
        case TiposDeItemMapa.Centro:
            Ajax.BuscaMapa.ObtemInstituicao(id, this.End_ObtemInstituicao);
            ResultadoBuscaMapa.ChangeMultipleTabsLock(false, false, false, false);
            break;
    }
}

BuscaMapaBox.OnChangeTipoIntercambio = function(combo)
{
    ResultadoBuscaMapa.ClearSelection();
    BuscaMapaBox.OnMove();
}

Mensagens = {
    SemTipoIntercambio: "Selecione o tipo de intercâmbio e a opção que você deseja.",
    SemPais: "Navegue pelo mapa e clique no ícone do país que você deseja obter mais informações.",
    SemCentro: "Selecione um país, uma cidade e em seguida a escola que você procura, clicando nos ícones do mapa.",
    SemResultados: "Nenhum produto encontrado. Para realizar a busca avançada, <a href='javascript:void(0);' onclick='location.href = RedirecionaParaLandindTipoDeIntercambio(); return false;'> clique aqui</a>."
}
function RedirecionaParaLandindTipoDeIntercambio()
{
    switch (BuscaMapaBox.IdTipoIntercambio)
    {
        case "1": return page.ResolveUrl("~/intercambio-estudo/"); break;
        case "2": return page.ResolveUrl("~/intercambio-trabalho/"); break;
        case "3": return page.ResolveUrl("~/pacote-turismo/"); break;
    }
    
}

BuscaMapaBox.IdTipoIntercambio

TiposDeItemMapa = {
    Continente: 1,
    Pais: 2,
    Regiao: 3,
    Cidade: 4,
    Centro: 5
}
ResultadoBuscaMapa = {
    ItensPorPagina: 10,
    ChangingLocationLabel: false,
    EfetuaBuscaTimeout: null,
    IdTipoProduto: 0,
    IdContinente: 0,
    IdPais: 0,
    IdCidade: 0,
    IdInstituicao: 0,
    Ordenacao: 1,
    MsgPadrao: 'Selecione o Tipo de Intercâmbio e navegue pelo mapa ao lado, clicando nos pontos para conhecer os programas disponíveis em cada localidade.',
    GetAtributosList: function(itemBusca)
    {
        if (!itemBusca || !itemBusca.Atributos || itemBusca.Atributos.length == 0)
            return '';

        var itensPorColuna = Math.floor((itemBusca.Atributos.length + 1) / 2);
        var fnGetSpan = function(titulo, valor) { return "<span><strong>" + (titulo || "") + ": </strong> " + (valor || "") + "</span>"; }
        var fnGetLi = function(titulo, valor, fullLine) { return "<li" + (fullLine ? " class=\"full_line\"" : "") + "><strong>" + (titulo || "") + ":</strong> <span>" + (valor || "") + "</span></li>"; }

        var strRetorno = '<ul class="detalhes">';
        for (var i = 0; i < itemBusca.Atributos.length; i++)
        {
            strRetorno += fnGetLi(itemBusca.Atributos[i].Key, itemBusca.Atributos[i].Value, itemBusca.Atributos[i].FullLine) + '\n';
        }
        if (itemBusca.Observacoes)
        {
            strRetorno += fnGetLi("Observações", itemBusca.Observacoes, true) + '\n';
        }
        strRetorno += '</ul>';
        return strRetorno;
    },
    GetUrlProduto: function(itemBusca)
    {
    },
    SetMessage: function(msg)
    {
        if (!msg)
        {
            page.divMensagem.style.display = 'none';
        }
        else
        {
            page.divMensagem.style.display = '';
            $Get('divTextoMensagem').innerHTML = msg;
        }
    },
    GetEstiloBoxPreco: function(itemBusca)
    {
        if (itemBusca.Valor && itemBusca.Valor != '')
            return '';
        else
            return ''; //display: none
    },
    GetTextoValor: function(itemBusca)
    {
        var ret = '';
        if (itemBusca.Valor && itemBusca.Valor != '')
        {
            ret += '<b> A partir de <br />' + itemBusca.Valor + '</b><br />';
            if (itemBusca.Parcela && itemBusca.Parcela != '' && itemBusca.Parcela != 0)
                ret += 'ou<br /> <b> ' + itemBusca.Parcela + '</b> de <b>' + itemBusca.ValorParcela + '</b>';
        }
        else
            ret += '<b>Sob consulta</b><br/><br/>';
        return ret;
    },
    Init: function()
    {
        page.ddlTipoIntercambioMapa.onchange = ResultadoBuscaMapa.OnChangeTipoIntercambio;

        if (page.ddlTipoIntercambioMapa.SelectedValue() != 0)
            ResultadoBuscaMapa.OnChangeTipoIntercambio();
        else
            ResultadoBuscaMapa.SetMessage(Mensagens.SemTipoIntercambio);

        $Get(divResultadoBuscaId).style.display = 'none';

        setTimeout('ResultadoBuscaMapa.EfetuaBusca();', 300);
    },
    OnChangeTipoIntercambio: function()
    {
        if (BuscaMapaBox.IdTipoIntercambio != 0 && page.ddlTipoIntercambioMapa.SelectedValue() != 0)
            ResultadoBuscaMapa.IdTipoProduto = BuscaMapaBox.IdTipoProduto = 0;

        if (BuscaMapaBox.IdTipoIntercambio == 2 || BuscaMapaBox.IdTipoProduto == 2)
        {
            ResultadoBuscaMapa.ChangeTabsLock(3, false);
            ResultadoBuscaMapa.ChangeTabsLock(4, false);
        }
        ResultadoBuscaMapa.ChangeMultipleTabsLock(false, false, true, true);
        BuscaMapaBox.IdTipoIntercambio = page.ddlTipoIntercambioMapa.SelectedValue();
        if (BuscaMapaBox.IdTipoIntercambio && BuscaMapaBox.IdTipoIntercambio != 0)
        {
            $Get('divParametrosTipo').style.display = '';
            Ajax.BuscaMapa.ListaTipoProdutoPorIntercambio(BuscaMapaBox.IdTipoIntercambio, ResultadoBuscaMapa.End_ListaTipoProdutoPorIntercambio);
        }
        else
        {
            $Get('divParametrosTipo').style.display = 'none';
        }
        BuscaMapaBox.OnMove();
        ResultadoBuscaMapa.EfetuaBusca();
    },
    OnSelectTipoProduto: function(idTipoProduto, lnk)
    {
        var par = lnk.parentNode;
        var lista = par.parentNode;
        for (var i = 0; i < lista.childNodes.length; i++)
        {
            if (lista.childNodes[i].tagName && lista.childNodes[i].tagName.toLowerCase() == 'p')
                RemoveClassName(lista.childNodes[i], 'selected');
        }
        ResultadoBuscaMapa.SetIdTipoProduto(idTipoProduto);
        AddClassName(par, 'selected');
        if (BuscaMapaBox.IdTipoIntercambio == 2 || BuscaMapaBox.IdTipoProduto == 2)
        {
            ResultadoBuscaMapa.ChangeTabsLock(3, true);
            ResultadoBuscaMapa.ChangeTabsLock(4, true);
        }
    },
    End_ListaTipoProdutoPorIntercambio: function(ret)
    {
        ResultadoBuscaMapa.PopulaRepeaterTiposProduto(ret);
    },
    PopulaRepeaterTiposProduto: function(ret)
    {
        for (var i = 0; i < ret.length; i++)
        {
            if (ret[i].IdTipoProduto == ResultadoBuscaMapa.IdTipoProduto)
                ret[i].Estilo = 'selected';
            else
                ret[i].Estilo = '';
        }
        page.rptTipoProduto.DataBind(ret);
    },
    SetIdTipoProduto: function(idTipoProduto)
    {
        ResultadoBuscaMapa.IdTipoProduto = BuscaMapaBox.IdTipoProduto = idTipoProduto;
        BuscaMapaBox.BeginAtualizaMapa();
        ResultadoBuscaMapa.LimpaResultadosBusca();
        ResultadoBuscaMapa.EfetuaBusca();
    },
    SetIdPais: function(idPais)
    {
        if (ResultadoBuscaMapa.IdPais != idPais)
            ResultadoBuscaMapa.IdInstituicao = 0;
        ResultadoBuscaMapa.IdPais = idPais;
        ResultadoBuscaMapa.LimpaResultadosBusca();
        ResultadoBuscaMapa.EfetuaBusca();
    },
    SetIdContinente: function(idContinente)
    {
        ResultadoBuscaMapa.IdContinente = idContinente;
        ResultadoBuscaMapa.LimpaResultadosBusca();
    },
    SetIdCidade: function(idCidade)
    {
        if (ResultadoBuscaMapa.IdCidade != idCidade)
            ResultadoBuscaMapa.IdInstituicao = 0;

        ResultadoBuscaMapa.IdCidade = idCidade;
        ResultadoBuscaMapa.LimpaResultadosBusca();
        ResultadoBuscaMapa.EfetuaBusca();
    },
    SetIdInstituicao: function(idInstituicao)
    {
        ResultadoBuscaMapa.IdInstituicao = idInstituicao;
        ResultadoBuscaMapa.LimpaResultadosBusca();
        ResultadoBuscaMapa.EfetuaBusca();
    },
    SetItensPorPagina: function(qtd)
    {
        this.ItensPorPagina = parseInt(qtd, 10) || 10;
        ResultadoBuscaMapa.EfetuaBusca();
    },
    SetOrdenacao: function(ordenacao)
    {
        ResultadoBuscaMapa.Ordenacao = ordenacao;
        ResultadoBuscaMapa.EfetuaBusca();
    },
    EfetuaBusca: function(pagina)
    {
        if (ResultadoBuscaMapa.EfetuaBuscaTimeout)
        {
            clearTimeout(ResultadoBuscaMapa.EfetuaBuscaTimeout);
            ResultadoBuscaMapa.EfetuaBuscaTimeout = null;
        }
        ResultadoBuscaMapa.EfetuaBuscaTimeout = setTimeout('ResultadoBuscaMapa.InternalEfetuaBusca(\'' + (pagina || 1) + '\')', 800);
    },
    InternalEfetuaBusca: function(pagina)
    {
        ResultadoBuscaMapa.EfetuaBuscaTimeout = null;
        //SetMessage
        if (!BuscaMapaBox.IdTipoIntercambio || BuscaMapaBox.IdTipoIntercambio == 0)
        {
            ResultadoBuscaMapa.SetMessage(Mensagens.SemTipoIntercambio);
            $Get(divResultadoBuscaId).style.display = 'none';
            return;
        }
        if (!ResultadoBuscaMapa.IdPais || ResultadoBuscaMapa.IdPais == 0)
        {
            ResultadoBuscaMapa.SetMessage(Mensagens.SemPais);
            $Get(divResultadoBuscaId).style.display = 'none';
            return;
        }
        if (BuscaMapaBox.IdTipoIntercambio == 1 && ResultadoBuscaMapa.IdTipoProduto != 2 && !ResultadoBuscaMapa.IdInstituicao)
        {
            ResultadoBuscaMapa.SetMessage(Mensagens.SemCentro);
            $Get(divResultadoBuscaId).style.display = 'none';
            return;
        }
        pagina = pagina || 1;
        ResultadoBuscaMapa.SetMessage();
        Ajax.BuscaMapa.BuscaProdutosMapa(BuscaMapaBox.IdTipoIntercambio, ResultadoBuscaMapa.IdTipoProduto, ResultadoBuscaMapa.IdContinente, ResultadoBuscaMapa.IdPais, ResultadoBuscaMapa.IdCidade, ResultadoBuscaMapa.IdInstituicao, ResultadoBuscaMapa.ItensPorPagina, pagina, ResultadoBuscaMapa.Ordenacao, ResultadoBuscaMapa.End_BuscaProdutosMapa);
    },
    End_BuscaProdutosMapa: function(ret)
    {
        document.documentElement.scrollTop = 0;
        if (ret.TotalItems < 1)
        {
            $Get(divResultadoBuscaId).style.display = 'none';
            ResultadoBuscaMapa.SetMessage(Mensagens.SemResultados);
        }
        else
        {
            $Get(divResultadoBuscaId).style.display = '';
            ResultadoBuscaMapa.SetMessage();

        }

        //Exibindo <b><span></span></b> resultados
        if (ret.TotalItems <= ret.Page.length)
            $Get('lblQtdResultados').innerHTML = "Exibindo <b><span>" + ret.TotalItems + "</span></b> resultados";
        else
        {
            var firstPageItem = (((ret.CurrentPage - 1) * ret.ItemsPerPage) + 1).toString();
            var lastPageItem = Math.min((ret.CurrentPage * ret.ItemsPerPage), ret.TotalItems).toString();

            $Get('lblQtdResultados').innerHTML = "Exibindo de <b><span>" + firstPageItem + '</span></b> a <b><span>' + lastPageItem + '</span></b> de um total de <b><span>' + ret.TotalItems + '</span></b> resultados';
        }
        for (var i = 0; i < ret.Page.length; i++)
        {
            ret.Page[i].ListaAtributos = ResultadoBuscaMapa.GetAtributosList(ret.Page[i]);
            ret.Page[i].TextoValor = ResultadoBuscaMapa.GetTextoValor(ret.Page[i]);
            ret.Page[i].EstiloBoxPreco = ResultadoBuscaMapa.GetEstiloBoxPreco(ret.Page[i]);
        }
        page.rptResultadoBusca.DataBind(ret.Page);
        ResultadoBuscaMapa.MontaPaginador(ret);
    },
    LimpaResultadosBusca: function()
    {
        ResultadoBuscaMapa.End_BuscaProdutosMapa({ TotalItems: 0, Page: [] });
    },
    MontaPaginador: function(ret)
    {
        var div = $Get('divPaginacaoResultadoBuscaMapa');
        div.innerHTML = '';
        if (ret.TotalPages < 2) return;

        var pagesToShow = 5;
        var fnCreateLink = function(nome, pagina, cssclass)
        {
            var nelement = document.createElement('a');
            nelement.href = '#';
            nelement.onclick = new Function('ResultadoBuscaMapa.SelecionaPagina(' + pagina.toString() + '); return false;');
            nelement.className = cssclass;
            nelement.innerHTML = nome;
            return nelement;
        }
        var fnCreateSpan = function(nome, pagina, cssclass)
        {
            var nelement = document.createElement('span');
            nelement.className = cssclass;
            nelement.innerHTML = nome;
            return nelement;
        }

        if (ret.CurrentPage > 1)
            div.appendChild(fnCreateLink('Primeira', 1, 'bd_1 preenchimento_1'));
        if (ret.CurrentPage > 1)
            div.appendChild(fnCreateLink('« Anterior', ret.CurrentPage - 1, 'bd_1 preenchimento_1'));

        var firstPage = Math.max(1, ret.CurrentPage - Math.floor(pagesToShow / 2));
        var lastPage = Math.min(firstPage + (pagesToShow - 1), ret.TotalPages);

        for (var i = firstPage; i <= lastPage; i++)
        {
            if (i != ret.CurrentPage)
                div.appendChild(fnCreateLink(i.toString(), i, 'bd_1 preenchimento_2'));
            else
                div.appendChild(fnCreateSpan(i.toString(), i, 'bd_1 preenchimento_2'));
        }

        if (ret.CurrentPage < ret.TotalPages)
            div.appendChild(fnCreateLink('Próxima »', ret.CurrentPage + 1, 'bd_1 preenchimento_1'));
        if (ret.CurrentPage < ret.TotalPages)
            div.appendChild(fnCreateLink('Última', ret.TotalPages, 'preenchimento_1'));


    },
    SelecionaPagina: function(pagina)
    {
        document.scrollTop = 0;
        ResultadoBuscaMapa.EfetuaBusca(pagina);
    },
    UnLockTabs: function(tabId)
    {
        this.ChangeTabsLock(tabId, false);
    },
    LockTabs: function(tabId)
    {
        this.ChangeTabsLock(tabId, true);
    },
    ChangeMultipleTabsLock: function(tab1, tab2, tab3, tab4)
    {
        var tabId = !tab4 ? 4 : !tab3 ? 3 : !tab2 ? 2 : !tab1 ? 1 : 0;
        this.ChangeTabsLock(1, tab1);
        this.ChangeTabsLock(2, tab2);
        this.ChangeTabsLock(3, tab3);
        this.ChangeTabsLock(4, tab4);
        if (tabId != 0) Tabs.Select($Get(this.GetTabByID(tabId)).parentNode);
    },
    GetTabByID: function(id)
    {
        switch (id)
        {
            case 1: return 'spnNomeContinente';
            case 2: return 'spnNomePais';
            case 3: return 'spnNomeCidade';
            case 4: return 'spnNomeEscola';
        }
    },
    ChangeTabsLock: function(tabId, value)
    {
        var tabName = this.GetTabByID(tabId);
        this.ChangeTabLock(tabName, value);
    },
    ChangeTabLock: function(tabId, value)
    {
        var tab = $Get(tabId).parentNode;
        if (value)
        {
            Tabs.Lock(tab);
            tab.style.display = 'none';
        }
        else
        {
            Tabs.UnSelectTab(tab);
            Tabs.UnLock(tab);
            tab.style.display = '';
        }
    },
    AtualizaPaineisInformacao: function(itemType, id)
    {
        ResultadoBuscaMapa.ChangingLocationLabel = true;
        switch (itemType)
        {
            case TiposDeItemMapa.Continente:
                Ajax.BuscaMapa.ObtemCoontinente(id, this.End_ObtemContinente);
                break;
            case TiposDeItemMapa.Pais:
                Ajax.BuscaMapa.ObtemPais(id, this.End_ObtemPais);
                break;
            case TiposDeItemMapa.Regiao:
                break;
            case TiposDeItemMapa.Cidade:
                ResultadoBuscaMapa.SetIdCidade(id);
                Ajax.BuscaMapa.ObtemCidade(id, this.End_ObtemCidade);
                break;
            case TiposDeItemMapa.Centro:
                ResultadoBuscaMapa.SetIdInstituicao(id);
                Ajax.BuscaMapa.ObtemInstituicao(id, this.End_ObtemInstituicao);
                break;
        }
    },
    End_ObtemContinente: function(ret)
    {
        ResultadoBuscaMapa.ApplyContent(ret.Nome, ret.Detalhe, 'spnNomeContinente', 'spnNomeContinenteTexto', 'parTextoContinete');
    },
    End_ObtemPais: function(ret)
    {
        ResultadoBuscaMapa.SetIdContinente(ret.IdContinente);
        Ajax.BuscaMapa.ObtemCoontinente(ret.IdContinente, ResultadoBuscaMapa.End_ObtemContinente);
        ResultadoBuscaMapa.ApplyContent(ret.Nome, ret.Detalhe, 'spnNomePais', 'spnNomePaisTexto', 'parTextoPais');
    },
    End_ObtemRegiao: function(ret)
    {
        ResultadoBuscaMapa.SetIdPais(ret.IdPais);
        Ajax.BuscaMapa.ObtemPais(ret.IdPais, ResultadoBuscaMapa.End_ObtemPais);
    },
    End_ObtemCidade: function(ret)
    {
        Ajax.BuscaMapa.ObtemRegiao(ret.IdRegiao, ResultadoBuscaMapa.End_ObtemRegiao);
        ResultadoBuscaMapa.ApplyContent(ret.Nome, ret.Detalhe, 'spnNomeCidade', 'spnNomeCidadeTexto', 'parTextoCidade');
    },
    End_ObtemInstituicao: function(ret)
    {
        Ajax.BuscaMapa.ObtemCidade(ret.IdCidade, ResultadoBuscaMapa.End_ObtemCidade);
        ResultadoBuscaMapa.ApplyContent(ret.Nome, ret.Descricao, null, 'spnNomeEscolaTexto', 'parTextoEscola');

        var newA = document.createElement('a');
        newA.name = 'spnNomeEscola';
        newA.id = 'spnNomeEscola';
        newA.innerHTML = 'Escola';
        var parentElement = $Get('spnNomeEscola').parentNode;
        parentElement.replaceChild(newA, $Get('spnNomeEscola'));
    },
    ClearSelection: function()
    {
        ResultadoBuscaMapa.ApplyContent(' ', ' ', 'spnNomeContinente', 'spnNomeContinenteTexto', 'parTextoContinete');
        ResultadoBuscaMapa.ApplyContent(' ', ' ', 'spnNomePais', 'spnNomePaisTexto', 'parTextoPais');
        ResultadoBuscaMapa.ApplyContent(' ', ' ', 'spnNomeCidade', 'spnNomeCidadeTexto', 'parTextoCidade');
        ResultadoBuscaMapa.ApplyContent(' ', ' ', 'spnNomeEscola', 'spnNomeEscolaTexto', 'parTextoEscola');
        BuscaMapaBox.ResetZoom();
    },
    ApplyContent: function(nome, descricao, idSpanAba, idTituloTexto, idParTexto)
    {
        if (!nome) return;
        if (ResultadoBuscaMapa.ChangingLocationLabel && nome != '')
        {
            if (nome.length < 30)
            {
                page.BoxBuscaMapaControls_h3Localidade.innerHTML = nome;
                $Get('h2TituloPagina').innerHTML = String.Format('Busca por Destino - Intercâmbio: {0}', nome);
            }
            else
                page.BoxBuscaMapaControls_h3Localidade.innerHTML = 'Busca por Destino';
            ResultadoBuscaMapa.ChangingLocationLabel = false;
        }
        if (idSpanAba)
        {
            if (nome.length < 14)
            {
                var newA = document.createElement('a');
                newA.name = idSpanAba;
                newA.id = idSpanAba;
                newA.innerHTML = nome;
                var parentElement = $Get(idSpanAba).parentNode;
                parentElement.replaceChild(newA, $Get(idSpanAba));
            }
            else
            {
                var newA = document.createElement('span');
                newA.name = idSpanAba;
                newA.id = idSpanAba;
                newA.innerHTML = nome;
                var parentElement = $Get(idSpanAba).parentNode;
                parentElement.replaceChild(newA, $Get(idSpanAba));
            }
        }
        $Get(idTituloTexto).innerHTML = nome;
        $Get(idParTexto).innerHTML = (descricao || ResultadoBuscaMapa.MsgPadrao);
    }
}
