﻿
/// <reference path="Busca.js" />
/// <reference path="TeslaLibrary.js" />

ResultadoBusca =
{
    GetCondicao: function()
    {
        var hdn = $Get('hdnFiltroResultadoCondicao');
        if (hdn.value == Busca.Condicao.Locacao)
            return Busca.Condicao.Locacao;
        else if (hdn.value == Busca.Condicao.Compra || hdn.value == Busca.Condicao.Lancamento || hdn.value == Busca.Condicao.Revenda)
        {
            var chkLancamento = $Get('chkFiltroResultadoCondicaoLancamento');
            var chkRevenda = $Get('chkFiltroResultadoCondicaoRevenda');
            if (chkLancamento.checked && chkRevenda.checked)
                return Busca.Condicao.Compra;
            else if (chkLancamento.checked)
                return Busca.Condicao.Lancamento;
            else if (chkRevenda.checked)
                return Busca.Condicao.Revenda;
        }

        return 0;
    },
    GetFinalidade: function()
    {
        var hdn = $Get('hdnFiltroResultadoFinalidade');
        return parseInt(hdn.value);
    },
    GetBairroOuCidadeValues: function(tipoItem, justCheckeds)
    {
        var chks;
        var i;
        var ret;

        chks = document.getElementsByName('chkFiltroResultadoBairroCidade');
        ret = '';

        if (chks)
        {
            for (i = 0; i < chks.length; i++)
            {
                var chk;
                chk = chks[i];

                if ($GetAttr(chk, 'tipoItem') == tipoItem)
                {
                    if (chk.checked || !justCheckeds)
                    {
                        if (ret != '')
                            ret = ret + ',';
                        ret = ret + String(chk.value);
                    }
                }
            }
        }

        return ret;
    },
    LocalidadeGrupoChecked: function(idGrupoUnico, checked)
    {
        var chks;
        var i;
        chks = document.getElementsByName('chkFiltroResultadoBairroCidade');

        if (chks)
        {
            for (i = 0; i < chks.length; i++)
            {
                var chk = chks[i];
                if ($GetAttr(chk, 'idGrupoUnico') == idGrupoUnico)
                {
                    chk.checked = checked;
                }
            }
        }
    },
    LocalidaadeItemChecked: function(idGrupoUnico)
    {
        var chks;
        var chkGrupo;
        var i;
        var checked = false;

        chks = document.getElementsByName('chkFiltroResultadoBairroCidade');
        chkGrupo = $Get('chkFiltroResultadoGrupoBairroCidade_' + idGrupoUnico);

        if (chks)
        {
            for (i = 0; i < chks.length; i++)
            {
                var chk = chks[i];
                if ($GetAttr(chk, 'idGrupoUnico') == idGrupoUnico)
                {
                    if (chk.checked)
                    {
                        checked = true;
                        break;
                    }
                }
            }

            chkGrupo.checked = checked;
        }
    },
    Validar: function(showMessage)
    {
        // Tipo de imóvel
        if (ResultadoBusca.GetCondicao() == 0 || String.IsNullOrEmpty(Busca.GetCheckBoxValues('chkFiltroResultadoTipoImovel', true)))
        {
            if (showMessage)
                ShowMessage('Informe o tipo do imóvel.');
            return false;
        }

        // Localização
        if (String.IsNullOrEmpty(ResultadoBusca.GetBairroOuCidadeValues('Bairro', true)) && String.IsNullOrEmpty(ResultadoBusca.GetBairroOuCidadeValues('Cidade', true)))
        {
            if (showMessage)
                ShowMessage('Informe a localização.');
            return false;
        }

        // Área
        var valorAreaMinima = page.ddlFiltroResultadoAreaInicial.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoAreaInicial.SelectedValue);
        var valorAreaMaxima = page.ddlFiltroResultadoAreaFinal.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoAreaFinal.SelectedValue);

        if (valorAreaMinima >= 0 && valorAreaMaxima >= 0)
        {
            if (valorAreaMaxima < valorAreaMinima)
            {
                if (showMessage)
                    ShowMessage('O valor máximo da área deve ser maior ou igual ao valor mínimo.');
                return false;
            }
        }

        // Condição de Pagamento
        if ($Get('rbtFiltroResultadoCPgtoAVista').checked)
        {
            // Valor
            var valorMinimo = page.ddlFiltroResultadoValorInicial.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoValorInicial.SelectedValue);
            var valorMaximo = page.ddlFiltroResultadoValorFinal.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoValorFinal.SelectedValue);

            //04/03/2010 - Poderá receber valores invertidos
            //			if (valorMaximo >= 0 && valorMinimo >= 0) {
            //				if (valorMaximo < valorMinimo) {
            //					if (showMessage)
            //						ShowMessage('O valor máximo do imóvel deve ser maior ou igual ao valor mínimo.');
            //					return false;
            //				}
            //			}
        }
        else if ($Get('rbtFiltroResultadoCPgtoFinanciamento').checked)
        {
            // Financiamento
            var valorEntrada = ConvertToNumber($Get('txtFiltroResultadoValorEntrada').value);
            var valorParcela = ConvertToNumber($Get('txtFiltroResultadoValorParcela').value);

            if (valorEntrada == null || valorEntrada <= 0)
            {
                if (showMessage)
                    ShowMessage('Informe o valor de entrada.');
                return false;
            }

            if (valorParcela == null || valorParcela <= 0)
            {
                if (showMessage)
                    ShowMessage('Informe o valor de parcela.');
                return false;
            }
        }

        return true;
    },
    Executar: function()
    {
        if (ResultadoBusca.Validar(true))
        {
            var idRegional = window['IdRegional'];
            var condicao = ResultadoBusca.GetCondicao();
            var finalidade = ResultadoBusca.GetFinalidade();
            var listaIdTipoImovel = Busca.GetCheckBoxValues('chkFiltroResultadoTipoImovel', false);
            var idEstado = $Get('hdnFiltroResultadoEstado').value;
            var tipoLocalidade = $Get('hdnFiltroResultadoTipoLocalidade').value;
            var listaIdItemLocalidade = $Get('hdnFiltroResultadoListaIdItemLocalidade').value;
            var bairroListaItemId = ResultadoBusca.GetBairroOuCidadeValues('Bairro', false);
            var cidadeListaItemId = ResultadoBusca.GetBairroOuCidadeValues('Cidade', false);
            var listaIdCaracteristicaBool = Busca.GetCheckBoxValues('chkFiltroResultadoCaracteristica', true);
            var valorAreaMinima = page.ddlFiltroResultadoAreaInicial.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoAreaInicial.SelectedValue);
            var valorAreaMaxima = page.ddlFiltroResultadoAreaFinal.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoAreaFinal.SelectedValue);
            var qtdMinimaDormitorios = page.ddlFiltroResultadoDormitorio.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoDormitorio.SelectedValue);
            var qtdMinimaSuites = page.ddlFiltroResultadoSuite.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoSuite.SelectedValue);
            var qtdMinimaBanheiros = page.ddlFiltroResultadoBanheiro.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoBanheiro.SelectedValue);
            var qtdMinimaVagasGaragem = page.ddlFiltroResultadoVagasGaragem.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoVagasGaragem.SelectedValue);
            var resultadosPorPagina = $Get('hdnFiltroResultadoResultadosPorPagina').value == '' ? -1 : parseInt($Get('hdnFiltroResultadoResultadosPorPagina').value);
            var numeroPagina = -1;
            var ordenacao = $Get('hdnFiltroResultadoOrdenacao').value;
            var listaIdTipoImovelSelecionado = Busca.GetCheckBoxValues('chkFiltroResultadoTipoImovel', true);
            var bairroListaItemIdSelecionado = ResultadoBusca.GetBairroOuCidadeValues('Bairro', true);
            var cidadeListaItemIdSelecionado = ResultadoBusca.GetBairroOuCidadeValues('Cidade', true);
            var condicaoOriginal = $Get('hdnFiltroResultadoCondicaoOriginal').value;

            var painelTipoImovel = ($Get('lnkFiltroResultadoTipoImovel').innerHTML != 'Mais');
            var painelLocalizacao = ($Get('lnkFiltroResultadoLocalizacao').innerHTML != 'Mais');
            var painelCaracteristica = ($Get('lnkFiltroResultadoCaracteristicaImovel').innerHTML != 'Mais');
            var painelCondicaoPagamento = ($Get('lnkFiltroResultadoCondicaoPagamento').innerHTML != 'Mais');

            var buscaSemantica = $Get('hdnFiltroResultadoBuscaSemantica').value;
            var latitude = $Get('hdnFiltroResultadoLatitudeBuscaSemantica').value;
            var longitude = $Get('hdnFiltroResultadoLongitudeBuscaSemantica').value;

            var idEnderecoBuscaRapida = $Get('hdnFiltroResultadoIdEnderecoBuscaRapida').value;
            var idBairroBuscaRapida = $Get('hdnFiltroResultadoIdBairroBuscaRapida').value;
            var idCidadeBuscaRapida = $Get('hdnFiltroResultadoIdCidadeBuscaRapida').value;
            var idRegiaoBuscaRapida = $Get('hdnFiltroResultadoIdRegiaoBuscaRapida').value;

            var valorMinimo = -1;
            var valorMaximo = -1;
            var valorEntradaFinanciamento = 0;
            var valorParcelaFinanciamento = 0;

            if ($Get('rbtFiltroResultadoCPgtoAVista').checked)
            {
                valorMinimo = page.ddlFiltroResultadoValorInicial.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoValorInicial.SelectedValue);
                valorMaximo = page.ddlFiltroResultadoValorFinal.SelectedValue == '' ? -1 : parseInt(page.ddlFiltroResultadoValorFinal.SelectedValue);

                //04-03-2010 - Caso os valores min e max tenham sido invertidos, reinverte
                if (valorMinimo > valorMaximo && (valorMaximo != -1))
                {
                    var temp = valorMinimo;
                    valorMinimo = valorMaximo;
                    valorMaximo = temp;
                }
            }
            else if ($Get('rbtFiltroResultadoCPgtoFinanciamento').checked)
            {
                valorEntradaFinanciamento = ConvertToNumber($Get('txtFiltroResultadoValorEntrada').value);
                valorParcelaFinanciamento = ConvertToNumber($Get('txtFiltroResultadoValorParcela').value);
            }

            Ajax.Busca.BuscaCompleta
            (
                idRegional,
                condicao,
                finalidade,
                listaIdTipoImovel,
                idEstado,
                tipoLocalidade,
                listaIdItemLocalidade,
                bairroListaItemId,
                cidadeListaItemId,
                valorMinimo,
                valorMaximo,
                listaIdCaracteristicaBool,
                valorAreaMinima,
                valorAreaMaxima,
                qtdMinimaDormitorios,
                qtdMinimaSuites,
                qtdMinimaBanheiros,
                qtdMinimaVagasGaragem,
                resultadosPorPagina,
                numeroPagina,
                ordenacao,
                listaIdTipoImovelSelecionado,
                bairroListaItemIdSelecionado,
                cidadeListaItemIdSelecionado,
                condicaoOriginal,
                painelTipoImovel,
                painelLocalizacao,
                painelCaracteristica,
                painelCondicaoPagamento,
                buscaSemantica,
                latitude,
                longitude,
                idEnderecoBuscaRapida,
                idBairroBuscaRapida,
                idCidadeBuscaRapida,
                idRegiaoBuscaRapida,
                valorEntradaFinanciamento,
                valorParcelaFinanciamento,
                ResultadoBusca.ExecutarCallBack
            );
        }
    },
    ExecutarCallBack: function(url)
    {
        if (url)
            page.Redirect(url);
    },
    PageReload: function()
    {
        var url;

        url = window.location.href;
        if (url.indexOf('?') > 0)
            url = url.substr(0, url.indexOf('?'));

        window.location.href = (url + '?' + page.QueryString.toString(false));
    },
    MudarPagina: function(novaPagina)
    {
        page.QueryString.Remove('Pagina');
        page.QueryString.Add('Pagina', novaPagina);

        ResultadoBusca.PageReload();
    },
    AdicionarFavoritos: function(idImovel)
    {
        var cookieName = "coelhodafonseca_favoritos";
        var favoritos = Tesla.CookieManager.LoadObject(cookieName);

        if (!favoritos)
            favoritos = [];

        var encontrou = false;

        for (var i = 0; i < favoritos.length; i++)
        {
            if (favoritos[i].IdImovel == idImovel)
            {
                encontrou = true;
                break;
            }
        }

        if (!encontrou)
        {
            var item = { "IdImovel": "0" };
            item.IdImovel = idImovel;
            favoritos.push(item);
            Tesla.CookieManager.SaveObject(cookieName, favoritos);
        }
    },
    GetZoomMapa: function(configuracao)
    {
        if (configuracao.minLongitude == 0 && configuracao.maxLatitude == 0 && configuracao.minLatitude == 0 && configuracao.maxLatitude == 0)
        {
            return 1;
        }
        else
        {
            var divMapa = page.Map.GetMapDiv();
            var mapDisplay = Math.min(divMapa.offsetWidth, divMapa.offsetHeight - 60);
            var interval = 0;

            if ((configuracao.maxLatitude - configuracao.minLatitude) > (configuracao.maxLongitude - configuracao.minLongitude))
            {
                interval = (configuracao.maxLatitude - configuracao.minLatitude) / 2;
                configuracao.minLongitude = configuracao.avgLongitude - interval;
                configuracao.maxLongitude = configuracao.avgLongitude + interval;
            }
            else
            {
                interval = (configuracao.maxLongitude - configuracao.minLongitude) / 2;
                configuracao.minLatitude = configuracao.avgLatitude - interval;
                configuracao.maxLatitude = configuracao.avgLatitude + interval;
            }

            var dist = (6371 * Math.acos(Math.sin(configuracao.minLatitude / 57.2958) * Math.sin(configuracao.maxLatitude / 57.2958) + (Math.cos(configuracao.minLatitude / 57.2958) * Math.cos(configuracao.maxLatitude / 57.2958) * Math.cos((configuracao.maxLongitude / 57.2958) - (configuracao.minLongitude / 57.2958)))));

            return Math.min(Math.floor(8 - Math.log(1.6446 * dist / Math.sqrt(2 * (mapDisplay * mapDisplay))) / Math.log(2)), 15);
        }
    },
    MontarMapa: function(divID, resultPage, configuracao)
    {
        if (!page.Map)
        {
            page.Map = new Tesla.Map.MapControl(divID);
            page.Map.DisableToolPanel();
            page.Map.SetCenter(new Tesla.Map.Point(configuracao.avgLatitude, configuracao.avgLongitude), ResultadoBusca.GetZoomMapa(configuracao));
            /*page.Map.OnMarkerMouseOver = ResultadoBusca.Map_OnMarkerMouseOver;*/
            /*page.Map.OnMarkerMouseOut = ResultadoBusca.Map_OnMarkerMouseOut;*/
            page.Map.OnMarkerClick = ResultadoBusca.Map_OnMarkerClick;
        }

        page.Map.ClearMarkers();
        for (var i = 0; i < resultPage.Page.length; i++)
        {
            var item = resultPage.Page[i];
            if (item.Latitude != undefined && item.Longitude != undefined)
            {
                var icon = new Tesla.Map.MarkerIcon(page.ResolveUrl('~/images/marcadorMapa_SP.gif'), new Tesla.Map.Size(50, 51), new Tesla.Map.Point(40, 25), null, null, new Tesla.Map.Point(5, 25));
                var marker = new Tesla.Map.Marker(page.Map, new Tesla.Map.Point(item.Latitude, item.Longitude));
                marker.Icon = icon;

                marker.Item = item;
                page.Map.AddMarker(marker);
            }
        }
    },
    AbreFechaBox: function(link, div)
    {
        if (link.innerHTML == 'Mais')
        {
            ReplaceClassName(link, 'abre', 'fecha');
            ReplaceClassName(div, 'off', 'on');
            link.innerHTML = 'Menos';
        }
        else // Menos
        {
            ReplaceClassName(link, 'fecha', 'abre');
            ReplaceClassName(div, 'on', 'off');
            link.innerHTML = 'Mais';
        }
    },
    MostrarTodasLocaliades: function()
    {
        var hdns;
        hdns = document.getElementsByName('hdnFiltroResultadoIdGrupoUnico');

        for (var i = 0; i < hdns.length; i++)
        {
            ReplaceClassName($Get('ulFiltroResultadoGrupoBairroCidade_' + hdns[i].value), 'ul_topN_off', 'ul_topN_on');
            ReplaceClassName($Get('ulFiltroResultadoBairroCidade_' + hdns[i].value), 'ul_topN_off', 'ul_topN_on');
        }
    },
    GetTipoImovelNaoFinanciavelSelecionado: function()
    {
        var ret = new Array();

        if ($Get('chkFiltroResultadoCondicaoLancamento').checked)
            ret.push('Lançamentos');

        var chks = document.getElementsByName('chkFiltroResultadoTipoImovel');
        if (chks)
        {
            for (var i = 0; i < chks.length; i++)
            {
                var chk = chks[i];
                if (chk.checked && $GetAttr(chk, 'financiavel') == '0')
                    ret.push($Get(chk.id + '_label').innerHTML.Replace("\\*", "").Trim());
            }
        }

        return ret;
    },
    SetOrdenacao: function(novaOrdenacao)
    {
        page.QueryString.Remove('Ordenacao');
        page.QueryString.Add('Ordenacao', novaOrdenacao);

        ResultadoBusca.PageReload();
    },
    SetOrdenacaoLista: function(novaOrdenacao)
    {
        var ordenacaoAtual = page.QueryString['ordenacao'];
        if (ordenacaoAtual == novaOrdenacao + 'Asc')
            ResultadoBusca.SetOrdenacao(novaOrdenacao + 'Desc');
        else
            ResultadoBusca.SetOrdenacao(novaOrdenacao + 'Asc');
    },
    ddlResultadoOrdenarBottom_ItemClick: function(sender, e)
    {
        page.ddlResultadoOrdenarTop.SelectItem(sender.SelectedValue);
    },
    ddlResultadoPaginasBottom_ItemClick: function(sender, e)
    {
        page.ddlResultadoPaginasTop.SelectItem(sender.SelectedValue);
    },
    chkFiltroResultadoGrupoBairroCidade_Click: function(sender)
    {
        ResultadoBusca.LocalidadeGrupoChecked($GetAttr(sender, 'idGrupoUnico'), sender.checked);
    },
    chkFiltroResultadoBairroCidade_Click: function(sender)
    {
        ResultadoBusca.LocalidaadeItemChecked($GetAttr(sender, 'idGrupoUnico'));
    },
    ddlResultadoOrdenarTop_ItemClick: function(sender, e)
    {
        ResultadoBusca.SetOrdenacao(sender.SelectedValue);
    },
    ddlResultadoPaginasTop_ItemClick: function(sender, e)
    {
        page.QueryString.Remove('ResultadosPorPagina');
        page.QueryString.Add('ResultadosPorPagina', sender.SelectedValue);

        page.QueryString.Remove('Pagina');
        page.QueryString.Add('Pagina', '1');

        ResultadoBusca.PageReload();
    },
    Map_OnMarkerMouseOver: function(marker)
    {
        page.tplResultadoBuscaImovelMapa.Show(marker.Item);
        var point = marker.GetPixelPoint();
        page.tplResultadoBuscaImovelMapa.SetCenter(point.Y, point.X);
    },
    Map_OnMarkerMouseOut: function(marker)
    {
        page.tplResultadoBuscaImovelMapa.Hide();
    },
    Map_OnMarkerClick: function(marker)
    {
        page.tplResultadoBuscaImovelMapa.Configure();
        var html = page.tplResultadoBuscaImovelMapa.Template.DataBind(marker.Item, null, null);
        marker.ShowInfo("", html);
        //page.Redirect(marker.Item.URLDetalhe);
    },
    rbtFiltroResultadoCPgto_OnClick: function(sender)
    {
        var txtFiltroResultadoValorEntrada = $Get('txtFiltroResultadoValorEntrada');
        var txtFiltroResultadoValorParcela = $Get('txtFiltroResultadoValorParcela');

        if (sender.value == "1")
        {
            page.ddlFiltroResultadoValorInicial.SetEnabled(true);
            page.ddlFiltroResultadoValorFinal.SetEnabled(true);

            txtFiltroResultadoValorEntrada.disabled = true;
            txtFiltroResultadoValorEntrada.value = '';
            txtFiltroResultadoValorParcela.disabled = true;
            txtFiltroResultadoValorParcela.value = '';
        }
        else if (sender.value == "2")
        {
            page.ddlFiltroResultadoValorInicial.SetEnabled(false);
            page.ddlFiltroResultadoValorInicial.SelectFirstItem();

            page.ddlFiltroResultadoValorFinal.SetEnabled(false);
            page.ddlFiltroResultadoValorFinal.SelectFirstItem();

            txtFiltroResultadoValorEntrada.disabled = false;
            txtFiltroResultadoValorParcela.disabled = false;

            //*************
            var lista = ResultadoBusca.GetTipoImovelNaoFinanciavelSelecionado();
            if (lista.length > 0)
            {
                var html = '';
                for (var i = 0; i < lista.length; i++)
                    html += '- ' + lista[i] + '<br />';

                $Get('pFiltroResultadoAvisoFinanciamento').innerHTML = html;
                $Get('popFiltroResultadoAvisoFinanciamento').style.display = '';
            }
        }
    }
}

