﻿/// <reference path="TeslaLibrary.js" />
/// <reference path="Geral.js" />
var refinamento_passo = 0;
Busca = {
    Interesse: {
        Comprar: 4,
        Alugar: 3
    },
    Condicao: {
        Lancamento: 1,
        Revenda: 2,
        Locacao: 3,
        Compra: 4
    },
    Finalidade: {
        Residencial: 1,
        Comercial: 2,
        Industrial: 3
    },
    ReplacePostBack_KeyPress: function(sender, e, postBackHandler) {
        var evento = e || window.event;
        var whichCode = evento.which || evento.keyCode;

        if (whichCode == 13) {
            if (postBackHandler)
                postBackHandler();

            return false;
        }

        return true;
    },
    GetCheckBoxValues: function(name, justCheckeds) {
        var chks;
        var i;
        var ret;

        if (justCheckeds == undefined)
            justCheckeds = true;

        chks = document.getElementsByName(name);
        ret = '';

        if (chks) {
            for (i = 0; i < chks.length; i++) {
                var chk;
                chk = chks[i];

                if (chk.checked || !justCheckeds) {
                    if (ret != '')
                        ret = ret + ',';
                    ret = ret + String(chk.value);
                }
            }
        }

        return ret;
    },
    SetCheckBoxState: function(name, value) {
        var chks = document.getElementsByName(name);

        if (chks) {
            for (var i = 0; i < chks.length; i++)
                chks[i].checked = value;
        }
    },
    GetCheckBoxLabels: function(name) {
        var chks;
        var ret;

        chks = document.getElementsByName(name);
        ret = '';

        if (chks) {
            for (var i = 0; i < chks.length; i++) {
                var chk;
                chk = chks[i];

                if (chk.checked) {
                    if (ret != '')
                        ret = ret + ', ';
                    ret = ret + $Get(chk.id + '_label').innerHTML;
                }
            }
        }

        return ret;
    },
    ValidarQuantidadeCheckBox: function(sender, qtdPermitida) {
        var qtdSelecionada = 0;
        var chks = document.getElementsByName(sender.name);

        if (chks) {
            var i = 0;

            // Soma quantidade selecionada
            for (i = 0; i < chks.length; i++) {
                if (chks[i].checked)
                    qtdSelecionada++;
            }

            // Altera status de habilitado dos itens
            for (i = 0; i < chks.length; i++) {
                if (!chks[i].checked) {
                    chks[i].disabled = (qtdSelecionada >= qtdPermitida);
                }
            }
        }
    },
    GetCheckBoxControlState: function(name) {
        var state = [];
        var chks = document.getElementsByName(name);

        if (chks) {
            for (var i = 0; i < chks.length; i++) {
                var item = { id: 0, checked: false, disabled: false };
                item.id = chks[i].id;
                item.checked = chks[i].checked;
                item.disabled = chks[i].disabled;

                state.push(item);
            }
        }

        return state;
    },
    SetCheckBoxControlState: function(state) {
        for (var i = 0; i < state.length; i++) {
            var chk = $Get(state[i].id);
            chk.checked = state[i].checked;
            chk.disabled = state[i].disabled;
        }
    },
    RemoverTextoExemplo: function(txt) {
        if (txt.value == $GetAttr(txt, 'valueExemplo'))
            txt.value = '';
    },
    InserirTextoExemplo: function(txt) {
        if (txt.value == '')
            txt.value = $GetAttr(txt, 'valueExemplo');
    },
    ObterValor: function(txt) {
        if (txt.value == $GetAttr(txt, 'valueExemplo'))
            return '';
        else
            return txt.value;
    }
}

BuscaSuperior = {
    Modo: {
        BuscaRapida: 1,
        BuscaCodigo: 2,
        BuscaCompleta: 3,
        BuscaCondominio: 4
    },
    SelecionaModoBusca: function(n) {
        for (var i = 1; i <= 4; i++) {
            if (i == n) {
                $("#" + 'divBusca' + i).fadeIn("slow");
                ReplaceClassNameUndescore('BtBusca' + i, 'off', 'on');
            }
            else {
                $Get('divBusca' + i).style.display = 'none';
                ReplaceClassNameUndescore('BtBusca' + i, 'on', 'off');
            }
        }

        if (document.body.focus) document.body.focus();
        if (document.body.setFocus) document.body.setFocus();
    }
}

BuscaRapida = {
    ConfigurarAutoComplete: function() {
        var url = page.ResolveUrl("~/AutoComplete/BuscaRapida.axd");
        $(document).ready
        (
            function() {
                $("#txtBuscaRapidaOnde").autocomplete
	            (
		            url,
		            {
		                delay: 100,
		                minChars: 3,
		                autoFill: false,
		                cacheLength: 0,
		                onItemSelect: BuscaRapida.txtBuscaRapidaOnde_onItemSelect
		            }
	            );
            }
        );
    },
    txtBuscaRapidaOnde_onItemSelect: function(obj) {
        BuscaRapida.RemoveEstado($Get('txtBuscaRapidaOnde'));
    },
    RemoveEstado: function(ctrl) {
        var value = ctrl.value;

        var pos = value.lastIndexOf(",");
        if (pos > 0) {
            var ultimaParte = value.substr(pos + 1, value.length - pos).Trim();

            if (ultimaParte.length <= 2) {
                page.ddlBuscaRapidaEstado.SelectItem(ultimaParte);
                ctrl.value = value.substr(0, pos).Trim();
            }
        }

    },
    GetFinalidade: function() {
        if ($Get('rbtBuscaRapidaResidencial').checked)
            return Busca.Finalidade.Residencial;
        else if ($Get('rbtBuscaRapidaComercial').checked)
            return Busca.Finalidade.Comercial;
        else if ($Get('rbtBuscaRapidaIndustrial').checked)
            return Busca.Finalidade.Industrial;
        else
            return 0;
    },
    GetCondicao: function() {
        if (page.ddlBuscaRapidaInteresse.SelectedValue == null || page.ddlBuscaRapidaInteresse.SelectedValue == '')
            return 0;
        return page.ddlBuscaRapidaInteresse.SelectedValue;
    },
    GetIdTipoImovel: function() {
        return Busca.GetCheckBoxValues('chkBuscaRapidaTipoImovel');
    },
    GetOnde: function() {
        return Busca.ObterValor($Get('txtBuscaRapidaOnde'));
    },
    rbtBuscaRapidaFinalidade_OnClick: function(sender) {
        if (sender.value == Busca.Finalidade.Residencial) {
            $Get('lblBuscaRapidaTituloFinalidade').innerHTML = 'Residencial';
            ReplaceClassName(page.boxBuscaRapidaTipoImovel, 'off', 'on');
        }
        else if (sender.value == Busca.Finalidade.Comercial) {
            $Get('lblBuscaRapidaTituloFinalidade').innerHTML = 'Comercial';
            ReplaceClassName(page.boxBuscaRapidaTipoImovel, 'off', 'on');
        }
        else if (sender.value == Busca.Finalidade.Industrial) {
            $Get('lblBuscaRapidaTituloFinalidade').innerHTML = 'Industrial';
            ReplaceClassName(page.boxBuscaRapidaTipoImovel, 'off', 'on');
        }
        else {
            $Get('lblBuscaRapidaTituloFinalidade').innerHTML = '';
            ReplaceClassName(page.boxBuscaRapidaTipoImovel, 'on', 'off');
        }

        BuscaRapida.PesquisarTipoImoveis();
        BuscaRapida.Validar();
    },
    PesquisarTipoImoveis: function() {
        var condicao = BuscaRapida.GetCondicao();
        var finalidade = BuscaRapida.GetFinalidade();

        page.rptBuscaRapidaTipoImovel.ClearContent();

        if (condicao != 0 && finalidade != 0)
            Ajax.Busca.FiltroBuscaTipoImovel(window['IdRegional'], condicao, finalidade, BuscaRapida.PesquisarTipoImoveisCallBack);
    },
    PesquisarTipoImoveisCallBack: function(list) {
        if (list && list.length > 0)
            page.rptBuscaRapidaTipoImovel.DataBind(list);

        if (page.popBuscaRapidaTipoImovel.Data == null)
            page.popBuscaRapidaTipoImovel.Data = { TempList: null, List: null };

        page.popBuscaRapidaTipoImovel.Data.TempList = list;
    },
    PesquisarTipoImoveisFirstLoadCallBack: function(list) {
        if (list && list.length > 0)
            page.rptBuscaRapidaTipoImovel.DataBind(list);

        if (page.popBuscaRapidaTipoImovel.Data == null)
            page.popBuscaRapidaTipoImovel.Data = { TempList: null, List: null };

        page.popBuscaRapidaTipoImovel.Data.List = list;
        page.popBuscaRapidaTipoImovel.Data.TempList = list;
        page.popBuscaRapidaTipoImovel.SaveControlState();
    },
    CarregarRangeValor: function() {
        var condicao = BuscaRapida.GetCondicao();

        if (condicao == 0)
            return;

        page.ddlBuscaRapidaValorInicial.Clear();
        page.ddlBuscaRapidaValorFinal.Clear();

        Ajax.Busca.ListarValorImovel_ComboValorInicial(condicao, BuscaRapida.CarregarRangeValorInicialCallBack);
        Ajax.Busca.ListarValorImovel_ComboValorFinal(condicao, BuscaRapida.CarregarRangeValorFinalCallBack);
    },
    CarregarRangeValorCallBack: function(list) {
        if (list) {
            list.unshift({ Descricao: 'Indiferente', QtdMin: '' });
            page.ddlBuscaRapidaValorFinal.DataBind(list, 'QtdMin', 'Descricao');

            list.pop();
            page.ddlBuscaRapidaValorInicial.DataBind(list, 'QtdMin', 'Descricao');

        }
    },
    CarregarRangeValorInicialCallBack: function(list) {
        if (list) {
            list.unshift({ Descricao: 'Indiferente', QtdMin: '' });

            page.ddlBuscaRapidaValorInicial.DataBind(list, 'QtdMin', 'Descricao');
        }
    },
    CarregarRangeValorFinalCallBack: function(list) {
        if (list) {
            list.unshift({ Descricao: 'Indiferente', QtdMin: '' });

            page.ddlBuscaRapidaValorFinal.DataBind(list, 'QtdMin', 'Descricao');
        }
    },
    ddlBuscaRapidaInteresse_ItemClick: function(sender, e) {
        page.popBuscaRapidaTipoImovel.SetEnabled(sender.SelectedValue != null);

        BuscaRapida.PesquisarTipoImoveis();

        if (e.OldValue != e.NewValue) {
            BuscaRapida.CarregarRangeValor();
        }

        BuscaRapida.Validar();
    },
    ddlBuscaRapidaEstado_ItemClick: function(sender, e) {
        BuscaRapida.Validar();
    },
    popBuscaRapidaTipoImovel_OKClick: function(sender, e) {
        var idTipoImovel = BuscaRapida.GetIdTipoImovel();

        if (idTipoImovel == null || idTipoImovel == '') {
            e.Cancel = true;
            ShowMessage('Selecione algum Tipo de Imóvel.');
            return;
        }
        else
            page.popBuscaRapidaTipoImovel.SetText(Busca.GetCheckBoxLabels('chkBuscaRapidaTipoImovel'));

        page.popBuscaRapidaTipoImovel.Data.List = page.popBuscaRapidaTipoImovel.Data.TempList;

        BuscaRapida.Validar();
    },
    popBuscaRapidaTipoImovel_FirstOpen: function(sender, args) {
        $Get('rbtBuscaRapidaResidencial').checked = true;
        ReplaceClassName(page.boxBuscaRapidaTipoImovel, 'off', 'on');

        var condicao = BuscaRapida.GetCondicao();
        var finalidade = BuscaRapida.GetFinalidade();

        page.rptBuscaRapidaTipoImovel.ClearContent();

        if (condicao != 0 && finalidade != 0)
            Ajax.Busca.FiltroBuscaTipoImovel(window['IdRegional'], condicao, finalidade, BuscaRapida.PesquisarTipoImoveisFirstLoadCallBack);
    },
    popBuscaRapidaTipoImovel_SaveControlState: function(sender, e) {
        var state = { Finalidade: null, TipoImovel: null, TituloFinalidade: null };
        state.Finalidade = Busca.GetCheckBoxControlState('rbtBuscaRapidaFinalidade');
        state.TipoImovel = Busca.GetCheckBoxControlState('chkBuscaRapidaTipoImovel');
        state.TituloFinalidade = $Get('lblBuscaRapidaTituloFinalidade').innerHTML;

        if (page.popBuscaRapidaTipoImovel.Data != null)
            page.popBuscaRapidaTipoImovel.Data.TempList = page.popBuscaRapidaTipoImovel.Data.List;

        e.State = state;
    },
    popBuscaRapidaTipoImovel_RestoreControlState: function(sender, e) {
        Busca.SetCheckBoxControlState(e.State.Finalidade);
        $Get('lblBuscaRapidaTituloFinalidade').innerHTML = e.State.TituloFinalidade;

        if (page.popBuscaRapidaTipoImovel.Data != null) {
            var list = page.popBuscaRapidaTipoImovel.Data.List;
            if (list == null || list.length == 0)
                page.rptBuscaRapidaTipoImovel.ClearContent();
            else
                page.rptBuscaRapidaTipoImovel.DataBind(list);
        }

        Busca.SetCheckBoxControlState(e.State.TipoImovel);
    },
    ddlBuscaRapidaValorInicial_ItemClick: function(sender, e) {
        BuscaRapida.Validar();
    },
    ddlBuscaRapidaValorFinal_ItemClick: function(sender, e) {
        BuscaRapida.Validar();
    },
    Validar: function() {
        var ok = true;

        var condicao = BuscaRapida.GetCondicao();
        var finalidade = BuscaRapida.GetFinalidade();
        var idEstado = page.ddlBuscaRapidaEstado.SelectedValue;
        var onde = BuscaRapida.GetOnde();
        var idTipoImovel = BuscaRapida.GetIdTipoImovel();
        var valorInicial = page.ddlBuscaRapidaValorInicial.SelectedValue;
        var valorFinal = page.ddlBuscaRapidaValorFinal.SelectedValue;

        if (condicao == 0)
            ok = false;

        if (finalidade == 0)
            ok = false;

        if (idEstado == null || idEstado.Trim() == '')
            ok = false;

        if (onde == null || onde.Trim() == '')
            ok = false;

        if (idTipoImovel == null || idTipoImovel == '')
            ok = false;

        if (ok)
            ReplaceClassName($Get('btnBuscaRapidaBuscar'), 'bt_buscar_off', 'bt_buscar');
        else
            ReplaceClassName($Get('btnBuscaRapidaBuscar'), 'bt_buscar', 'bt_buscar_off');

        return ok;
    },
    Executar: function() {
        var ok;

        ok = BuscaRapida.Validar();

        if (ok) {
            var condicao = BuscaRapida.GetCondicao();
            var finalidade = BuscaRapida.GetFinalidade();
            var idEstado = page.ddlBuscaRapidaEstado.SelectedValue;
            var onde = BuscaRapida.GetOnde();
            var idTipoImovel = BuscaRapida.GetIdTipoImovel();
            var valorInicial = page.ddlBuscaRapidaValorInicial.SelectedValue;
            var valorFinal = page.ddlBuscaRapidaValorFinal.SelectedValue;

            if (valorInicial == '') valorInicial = -1;
            if (valorFinal == '') valorFinal = -1;

            //Caso os valores min e max tenham sido invertidos, reinverte
            if (valorInicial > valorFinal && (valorFinal != -1)) {
                var temp = valorInicial;
                valorInicial = valorFinal;
                valorFinal = temp;
            }

            Ajax.Busca.BuscaSemantica(window['IdRegional'], condicao, finalidade, idEstado, onde, idTipoImovel, valorInicial, valorFinal, BuscaRapida.ExecutarCallBack);
        }
    },
    ExecutarCallBack: function(resultadoBuscaSemantica) {
        if (resultadoBuscaSemantica) {
            if (resultadoBuscaSemantica.Acao == 'Redirect')
                page.Redirect(resultadoBuscaSemantica.URL);
            else if (resultadoBuscaSemantica.Acao == 'Select') {
                page.rptBuscaRapidaLocalidadeDuplicada.DataBind(resultadoBuscaSemantica.Lista);

                if (resultadoBuscaSemantica.OrigemLista == "GeoCoding" || resultadoBuscaSemantica.OrigemLista == "GeoCodingExterno" || resultadoBuscaSemantica.OrigemLista == "BancoDadosIncompleto")
                    page.flwBuscaRapidaLocalidadeDuplicada.SetTitle('Você quis dizer:');
                else
                    page.flwBuscaRapidaLocalidadeDuplicada.SetTitle('Existem mais de um endereço com este nome em diferentes localidades.');

                if (resultadoBuscaSemantica.Lista.length <= 15)
                    page.flwBuscaRapidaLocalidadeDuplicada.RemoveContentHeight();
                else
                    page.flwBuscaRapidaLocalidadeDuplicada.SetContentHeight('300px');

                page.flwBuscaRapidaLocalidadeDuplicada.Open();
                window['BuscaRapida_Parametros'] = resultadoBuscaSemantica.Parametros;
            }
            else if (resultadoBuscaSemantica.Acao == 'Message')
                ShowMessage(resultadoBuscaSemantica.Mensagem);
        }
        else
            ShowMessage('Não foram encontrados resultados para a busca.');
    },
    lnkLocalidadeDuplicada_Click: function(sender) {
        var localidadeBuscaSemantica = { IdEstado: '', Latitude: 0.0, Longitude: 0.0, RaioBusca: null, Tipo: null, Descricao: null, IdEndereco: null, IdBairro: null, IdCidade: null, IdRegiao: null };

        localidadeBuscaSemantica.IdEstado = $GetAttr(sender, 'idEstado');

        localidadeBuscaSemantica.IdEndereco = $GetAttr(sender, 'idEndereco') || 0;
        if (localidadeBuscaSemantica.IdEndereco == null)
            localidadeBuscaSemantica.IdEndereco = 0;

        localidadeBuscaSemantica.IdBairro = $GetAttr(sender, 'idBairro') || 0;
        if (localidadeBuscaSemantica.IdBairro == null)
            localidadeBuscaSemantica.IdBairro = 0;

        localidadeBuscaSemantica.IdCidade = $GetAttr(sender, 'idCidade') || 0;
        if (localidadeBuscaSemantica.IdCidade == null)
            localidadeBuscaSemantica.IdCidade = 0;

        localidadeBuscaSemantica.IdRegiao = $GetAttr(sender, 'idRegiao') || 0;
        if (localidadeBuscaSemantica.IdRegiao == null)
            localidadeBuscaSemantica.IdRegiao = 0;

        localidadeBuscaSemantica.Latitude = $GetAttr(sender, 'latitude');
        localidadeBuscaSemantica.Longitude = $GetAttr(sender, 'longitude');
        localidadeBuscaSemantica.RaioBusca = $GetAttr(sender, 'raioBusca');
        localidadeBuscaSemantica.Tipo = $GetAttr(sender, 'tipo');
        localidadeBuscaSemantica.Descricao = sender.innerHTML;

        Ajax.Busca.SelecionarLocalidadeBuscaSemantica(localidadeBuscaSemantica, window['BuscaRapida_Parametros'], BuscaRapida.ExecutarCallBack);
    }
}
//-------------------- tsu:display object ---
function display_object(o)
{
    var recursion_level = 10;
    var str = display_object_sub(o, recursion_level, "");
    alert(str);
}

function display_object_sub(o, r, ident)
{
    if(!r) return "-- TOO MUCH RECURSION --";

    var str = "";

    for(var i in o)
    {
        if(typeof o[i] == "function") continue;
        str += "" + ident + i + ": ";
        if(typeof o[i] == "object") str += "\n" + ident + "{\n" +
	        display_object_sub(o[i], r - 1, ident + "\t") + ident + "}\n";
        else if(typeof o[i] == "string") str += "\"" + o[i] + "\"" + ";\n";
        else str += o[i] + ";\n";
    }
    return str;
}
//-------------------- tsu:display object ---

BuscaCondominio = {
    Mostrar: function(sender, args) {
        var logo_destination = $('#lnkLogoCoelho').offset().top;
        $("html:not(:animated),body:not(:animated)").animate({ scrollTop: logo_destination + parseInt(10) }, 300);    

        ReplaceClassName($Get('lblBuscaCondominioLoading'), 'loading_off', 'loading_on');
        Ajax.Busca.FiltroBuscaCondominio(window['IdRegional'], BuscaCondominio.MostrarCallBack);
    },
    MostrarCallBack: function(originalList) {
        var qtdColunas = 2;
        var list = new Array();
        
//        display_object(originalList);

        var qtdLinhas = Math.floor((originalList.length - 1) / qtdColunas) + 1;
        var itensUltimaLinha = originalList.length % qtdColunas;
        if (itensUltimaLinha == 0) itensUltimaLinha = 3;
        var l = 0;

        for (var i = 0; i < originalList.length; i++) {
            list.push(originalList[l]);
            
            if (i == originalList.length - 1) break;

            if (i % qtdColunas == qtdColunas - 1) {
                l = Math.floor((i - 1) / qtdColunas) + 1;
            }
            else {
                if (i % qtdColunas < itensUltimaLinha)
                    l += qtdLinhas;
                else
                    l += (qtdLinhas - 1);
            }
        }
        
//        display_object(list);
        
        if (list && list.length > 0) {
            $.each(list, function() {
                var html = "";
                html += '<li style="width:250px">';
                html += '<input type="checkbox" name="chkBuscaCondominio" id="chkBuscaCondominio_' + this.IdItem + '" value="' + this.IdItem + '" onclick="Busca.ValidarQuantidadeCheckBox(this, 10);" />';
                html += '<label id="chkBuscaCondominio_' + this.IdItem + '_label" for="chkBuscaCondominio_' + this.IdItem + '">' + this.NomeItem + '</label>';
                html += '<br class="cb" />';
                html += '</li>';

                $("#condominios").append(html);
            });
        }

        ReplaceClassName($Get('lblBuscaCondominioLoading'), 'loading_on', 'loading_off');
    },
    OKClick: function(sender, e) {
    
        var idCondominios = Busca.GetCheckBoxValues('chkBuscaCondominio');

        if (!idCondominios || idCondominios.length == 0) {
            e.Cancel = true;
            ShowMessage('Selecione algum item.');
        }
        else {
            page.popBuscaCondominio.SetText(Busca.GetCheckBoxLabels('chkBuscaCondominio'));
            Ajax.Busca.BuscaCondominio(idCondominios, BuscaCondominio.OKCallBack);
        }
    },
    OKCallBack: function(url) {
        if (url == null)
            ShowMessage('Não foi encontrado nenhum imóvel.');
        else
            page.Redirect(url);
    },
    SaveControlState: function(sender, e) {
        e.State = Busca.GetCheckBoxControlState('chkBuscaCondominio');
    },
    RestoreControlState: function(sender, e) {
        Busca.SetCheckBoxControlState(e.State);
    }
}

BuscaDireta = {
    GetCodigo: function() {
        return Busca.ObterValor($Get('txtBuscaDiretaCodigo'));
    },
    ConfigurarAutoComplete: function() {
        var url = page.ResolveUrl("~/AutoComplete/BuscaDireta.axd");
        $(document).ready
        (
            function() {                
                $("#txtBuscaDiretaCodigo").autocomplete
	            (
		            url,
		            {
		                delay: 100,
		                minChars: 3,
		                autoFill: false,
		                cacheLength: 0,
		                extraParams: { IdRegional: window['IdRegional'] }
		            }
	            );
            }
        );
    },
    Validar: function(showMessage) {
        var ok = true;
        var codigo = BuscaDireta.GetCodigo();

        if (codigo == null || codigo.Trim() == '') {
            ok = false;
            if (showMessage)
                ShowMessage('Informe o código ou nome do empreendimento.');
        }

        if (ok)
            ReplaceClassName($Get('lnkBuscaDiretaExecutar'), 'bt_buscar_off', 'bt_buscar');
        else
            ReplaceClassName($Get('lnkBuscaDiretaExecutar'), 'bt_buscar', 'bt_buscar_off');

        return ok;
    },
    Executar: function() {
        var ok;

        ok = BuscaDireta.Validar(true);

        if (ok)
            Ajax.Busca.BuscaDireta(BuscaDireta.GetCodigo(), BuscaDireta.ExecutarCallBack);
    },
    ExecutarCallBack: function(url) {
        if (url == null)
            ShowMessage('Não foi encontrado nenhum imóvel.');
        else
            page.Redirect(url);
    }
}

BuscaCompleta = {
    rbtBuscaCompletaCondicao_OnClick: function(sender) {
        BuscaCompleta.PesquisarTipoImoveis();

        if (sender.value == Busca.Condicao.Compra)
            $Get('divBuscaCompletaComprar').style.display = '';
        else
            $Get('divBuscaCompletaComprar').style.display = 'none';
    },
    rbtBuscaCompletaFinalidade_OnClick: function(sender) {
        BuscaCompleta.ShowTituloFinalidade(sender.value);
        BuscaCompleta.PesquisarTipoImoveis();
    },
    chkBuscaCompletaComprar_OnClick: function(sender) {
        BuscaCompleta.PesquisarTipoImoveis();
    },
    ShowTituloFinalidade: function(n) {
        if (n == Busca.Finalidade.Residencial) {
            $Get('lblBuscaCompletaTituloFinalidade').innerHTML = 'Residencial';
            ReplaceClassName(page.boxBuscaCompletaTipoImovel, 'off', 'on');
        }
        else if (n == Busca.Finalidade.Comercial) {
            $Get('lblBuscaCompletaTituloFinalidade').innerHTML = 'Comercial';
            ReplaceClassName(page.boxBuscaCompletaTipoImovel, 'off', 'on');
        }
        else if (n == Busca.Finalidade.Industrial) {
            $Get('lblBuscaCompletaTituloFinalidade').innerHTML = 'Industrial';
            ReplaceClassName(page.boxBuscaCompletaTipoImovel, 'off', 'on');
        }
        else {
            $Get('lblBuscaCompletaTituloFinalidade').innerHTML = '';
            ReplaceClassName(page.boxBuscaCompletaTipoImovel, 'on', 'off');
        }
    },
    GetCondicao: function() {
        if ($Get('rbtBuscaCompletaComprar').checked) {
            var chkLancamento = $Get('chkBuscaCompletaComprarLancamento');
            var chkRevenda = $Get('chkBuscaCompletaComprarRevenda');

            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;
            else
                return 0;
        }
        else if ($Get('rbtBuscaCompletaAluguel').checked)
            return Busca.Condicao.Locacao;
        else
            return 0;
    },
    GetCondicaoMacro: function() {
        if ($Get('rbtBuscaCompletaComprar').checked)
            return Busca.Condicao.Compra;
        else if ($Get('rbtBuscaCompletaAluguel').checked)
            return Busca.Condicao.Locacao;
        else
            return 0;
    },
    GetFinalidade: function() {
        if ($Get('rbtBuscaCompletaResidencial').checked)
            return Busca.Finalidade.Residencial;
        else if ($Get('rbtBuscaCompletaComercial').checked)
            return Busca.Finalidade.Comercial;
        else if ($Get('rbtBuscaCompletaIndustrial').checked)
            return Busca.Finalidade.Industrial;
        else
            return 0;
    },
    GetIdTipoImovel: function() {
        return Busca.GetCheckBoxValues('chkBuscaCompletaTipoImovel');
    },
    GetIdCidadeOuIdRegiao: function() {
        return Busca.GetCheckBoxValues('chkBuscaCompletaCidadeOuRegiao');
    },
    GetTipoLocalidade: function() {
        return $Get('hdnBuscaCompletaTipoLocalidade').value;
    },
    SetTipoLocalidade: function(tipoLocalidade) {
        $Get('hdnBuscaCompletaTipoLocalidade').value = tipoLocalidade;
    },
    GetIdItemLocalidade: function() {
        return Busca.GetCheckBoxValues('chkBuscaCompletaBairroOuCidade');
    },
    CarregarRangeValor: function() {
        var condicao = BuscaCompleta.GetCondicao();

        if (condicao == 0)
            return;

        page.ddlBuscaCompletaValorInicial.Clear();
        page.ddlBuscaCompletaValorFinal.Clear();

        Ajax.Busca.ListarValorImovel_ComboValorInicial(condicao, BuscaCompleta.CarregarRangeValorInicialCallBack);
        Ajax.Busca.ListarValorImovel_ComboValorFinal(condicao, BuscaCompleta.CarregarRangeValorFinalCallBack);
    },
    CarregarRangeValorCallBack: function(list) {
        if (list) {
            list.unshift({ Descricao: 'Indiferente', QtdMin: '' });
            page.ddlBuscaCompletaValorFinal.DataBind(list, 'QtdMin', 'Descricao');

            list.pop();
            page.ddlBuscaCompletaValorInicial.DataBind(list, 'QtdMin', 'Descricao');
        }
    },
    CarregarRangeValorInicialCallBack: function(list) {
        if (list) {
            list.unshift({ Descricao: 'Indiferente', QtdMin: '' });

            page.ddlBuscaCompletaValorInicial.DataBind(list, 'QtdMin', 'Descricao');
        }
    },
    CarregarRangeValorFinalCallBack: function(list) {
        if (list) {
            list.unshift({ Descricao: 'Indiferente', QtdMin: '' });

            page.ddlBuscaCompletaValorFinal.DataBind(list, 'QtdMin', 'Descricao');
        }
    },
    PesquisarTipoImoveis: function() {
        var condicao = BuscaCompleta.GetCondicao();
        var finalidade = BuscaCompleta.GetFinalidade();

        // Efetua a busca
        page.rptBuscaCompletaTipoImovel.ClearContent();

        if (condicao == 0 || finalidade == 0)
            return; // Os parâmetros para a busca não foram informados por completo

        Ajax.Busca.FiltroBuscaTipoImovel(window['IdRegional'], condicao, finalidade, BuscaCompleta.PesquisarTipoImoveisCallBack);
    },
    popBuscaCompletaTipoImovel_FirstOpen: function(sender, args) {
        //Se na url tiver texto alugar ou aluguel, o campo de busca vai para opção de Alugar.
        url = location.href;
        if (url.indexOf('aluguel') != -1) {
            $Get('rbtBuscaCompletaAluguel').checked = true;
        }
        else if (url.indexOf('alugar') != -1) {
            $Get('rbtBuscaCompletaAluguel').checked = true;
        }
        else {
            $Get('rbtBuscaCompletaComprar').checked = true;
        } 

        if (!$Get('chkBuscaCompletaComprarLancamento').disabled)
            $Get('chkBuscaCompletaComprarLancamento').checked = true;
        $Get('chkBuscaCompletaComprarRevenda').checked = true;
        $Get('rbtBuscaCompletaResidencial').checked = true;

        $Get('divBuscaCompletaComprar').style.display = '';

        BuscaCompleta.ShowTituloFinalidade(Busca.Finalidade.Residencial);

        var condicao = BuscaCompleta.GetCondicao();
        var finalidade = BuscaCompleta.GetFinalidade();

        // Efetua a busca
        page.rptBuscaCompletaTipoImovel.ClearContent();

        var logo_destination = $('#lnkLogoCoelho').offset().top;
        $("html:not(:animated),body:not(:animated)").animate({ scrollTop: logo_destination + parseInt(10) }, 300);

        if (condicao == 0 || finalidade == 0)
            return; // Os parâmetros para a busca não foram informados por completo

        Ajax.Busca.FiltroBuscaTipoImovel(window['IdRegional'], condicao, finalidade, BuscaCompleta.PesquisarTipoImoveisFirstLoadCallBack);
    },
    PesquisarTipoImoveisCallBack: function(list) {
        if (list && list.length > 0)
            page.rptBuscaCompletaTipoImovel.DataBind(list);

        if (page.popBuscaCompletaTipoImovel.Data == null)
            page.popBuscaCompletaTipoImovel.Data = { TempList: null, List: null };

        page.popBuscaCompletaTipoImovel.Data.TempList = list;
    },
    PesquisarTipoImoveisFirstLoadCallBack: function(list) {
        if (list && list.length > 0)
            page.rptBuscaCompletaTipoImovel.DataBind(list);

        if (page.popBuscaCompletaTipoImovel.Data == null)
            page.popBuscaCompletaTipoImovel.Data = { TempList: null, List: null };

        page.popBuscaCompletaTipoImovel.Data.List = list;
        page.popBuscaCompletaTipoImovel.Data.TempList = list;
        page.popBuscaCompletaTipoImovel.SaveControlState();
    },
    popBuscaCompletaTipoImovel_OKClick: function(sender, e) {
        var idTipoImovel = BuscaCompleta.GetIdTipoImovel();

        if (idTipoImovel && idTipoImovel.length > 0) {
            page.popBuscaCompletaTipoImovel.Data.List = page.popBuscaCompletaTipoImovel.Data.TempList;

            var finalidade = BuscaCompleta.GetFinalidade();
            if (finalidade == Busca.Finalidade.Residencial) {
                page.ddlBuscaCompletaDormitorio.SetEnabled(true);
                page.ddlBuscaCompletaSuite.SetEnabled(true);
                page.ddlBuscaCompletaVagasGaragem.SetEnabled(true);
            }
            else if (finalidade == Busca.Finalidade.Comercial || finalidade == Busca.Finalidade.Industrial) {
                page.ddlBuscaCompletaDormitorio.SetEnabled(false);
                page.ddlBuscaCompletaDormitorio.SelectItem('');
                page.ddlBuscaCompletaSuite.SetEnabled(false);
                page.ddlBuscaCompletaSuite.SelectItem('');
                page.ddlBuscaCompletaVagasGaragem.SetEnabled(false);
                page.ddlBuscaCompletaVagasGaragem.SelectItem('');
            }

            page.popBuscaCompletaTipoImovel.SetText(Busca.GetCheckBoxLabels('chkBuscaCompletaTipoImovel'));

            var opcaoFinancHab = BuscaCompleta.GetCondicaoMacro() == Busca.Condicao.Compra && BuscaCompleta.TipoImovelFinanciavelSelecionado();
            BuscaCompleta.AlterarStatusPagamentoFinanciamento(false, opcaoFinancHab);
            BuscaCompleta.AlterarStatusPagamentoAVista(true);
            $Get('divOU').style.display = opcaoFinancHab ? '' : 'none';

            $Get('rbtBuscaCompletaPagamentoAVista').checked = true;
            $Get('rbtBuscaCompletaPagamentoFinanciamento').checked = false;

            if (page.popBuscaCompletaTipoImovel.controlState.ValorCondicaoMacro != BuscaCompleta.GetCondicaoMacro())
                BuscaCompleta.CarregarRangeValor();
            BuscaCompleta.PesquisarEstados();
            BuscaCompleta.ValidarPasso1();
        }
        else {
            e.Cancel = true;
            ShowMessage('Selecione algum Tipo de Imóvel.');
        }
    },
    popBuscaCompletaTipoImovel_SaveControlState: function(sender, e) {
        var state = { Condicao: null, CondicaoCompra: null, Finalidade: null, TipoImovel: null, TituloFinalidade: null, ValorCondicaoMacro: null };
        state.ValorCondicaoMacro = BuscaCompleta.GetCondicaoMacro();
        state.Condicao = Busca.GetCheckBoxControlState('rbtBuscaCompletaCondicao');
        state.CondicaoCompra = Busca.GetCheckBoxControlState('chkBuscaCompletaComprar');
        state.Finalidade = Busca.GetCheckBoxControlState('rbtBuscaCompletaFinalidade');
        state.TituloFinalidade = $Get('lblBuscaCompletaTituloFinalidade').innerHTML;
        state.TipoImovel = Busca.GetCheckBoxControlState('chkBuscaCompletaTipoImovel');

        if (page.popBuscaCompletaTipoImovel.Data != null)
            page.popBuscaCompletaTipoImovel.Data.TempList = page.popBuscaCompletaTipoImovel.Data.List;

        e.State = state;
    },
    popBuscaCompletaTipoImovel_RestoreControlState: function(sender, e) {
        Busca.SetCheckBoxControlState(e.State.Condicao);
        Busca.SetCheckBoxControlState(e.State.CondicaoCompra);

        if ($Get('rbtBuscaCompletaComprar').checked)
            $Get('divBuscaCompletaComprar').style.display = '';
        else
            $Get('divBuscaCompletaComprar').style.display = 'none';

        Busca.SetCheckBoxControlState(e.State.Finalidade);
        $Get('lblBuscaCompletaTituloFinalidade').innerHTML = e.State.TituloFinalidade;

        if (page.popBuscaCompletaTipoImovel.Data != null) {
            var list = page.popBuscaCompletaTipoImovel.Data.List;
            if (list == null || list.length == 0)
                page.rptBuscaCompletaTipoImovel.ClearContent();
            else
                page.rptBuscaCompletaTipoImovel.DataBind(list);
        }

        Busca.SetCheckBoxControlState(e.State.TipoImovel);
    },
    PesquisarEstados: function() {
        var condicao = BuscaCompleta.GetCondicao();
        var finalidade = BuscaCompleta.GetFinalidade();
        var idTipoImovel = BuscaCompleta.GetIdTipoImovel();

        // Efetua pesquisa de estados para popular o drop down
        page.ddlBuscaCompletaEstado.Clear();
        page.rptBuscaCompletaCidadeOuRegiao.ClearContent();
        page.rptBuscaCompletaBairroOuCidade.ClearContent();

        Ajax.Busca.FiltroBuscaEstado(window['IdRegional'], condicao, finalidade, idTipoImovel, BuscaCompleta.PesquisarEstadosCallBack);
    },
    PesquisarEstadosCallBack: function(list) {
        if (list && list.length > 0) {
            page.ddlBuscaCompletaEstado.DataBind(list, "IdEstado", "IdEstado", window['EstadoPadraoRegional']);
        }
    },
    ddlBuscaCompletaEstado_ItemClick: function(sender, e) {
        BuscaCompleta.PesquisarCidadesOuRegioes();
        BuscaCompleta.ValidarPasso1();
    },
    PesquisarCidadesOuRegioes: function() {
        var condicao = BuscaCompleta.GetCondicao();
        var finalidade = BuscaCompleta.GetFinalidade();
        var idTipoImovel = BuscaCompleta.GetIdTipoImovel();
        var idEstado = page.ddlBuscaCompletaEstado.SelectedValue;

        ReplaceClassName($Get('lblBuscaCompletaLocaliadeLoading'), 'loading_off', 'loading_on');
        page.rptBuscaCompletaCidadeOuRegiao.ClearContent();
        page.rptBuscaCompletaBairroOuCidade.ClearContent();

        Ajax.Busca.FiltroBuscaCidadeOuRegiao(window['IdRegional'], condicao, finalidade, idTipoImovel, idEstado, BuscaCompleta.PesquisarCidadesOuRegioesCallBack);
    },
    PesquisarCidadesOuRegioesCallBack: function(originalList) {
        var tipoLocalidade = 'Regiao';
        var qtdColunas = 2;
        var list = new Array();

        var qtdLinhas = Math.floor((originalList.length - 1) / qtdColunas) + 1;
        var itensUltimaLinha = originalList.length % qtdColunas;
        if (itensUltimaLinha == 0) itensUltimaLinha = 3;
        var l = 0;

        for (var i = 0; i < originalList.length; i++) {
            list.push(originalList[l]);

            if (i == originalList.length - 1) break;

            if (i % qtdColunas == qtdColunas - 1) {
                l = Math.floor((i - 1) / qtdColunas) + 1;
            }
            else {
                if (i % qtdColunas < itensUltimaLinha)
                    l += qtdLinhas;
                else
                    l += (qtdLinhas - 1);
            }
        }

        if (list && list.length > 0) {
            // Carrega lista
            page.rptBuscaCompletaCidadeOuRegiao.DataBind(list);

            // Todos os itens devem ser do mesmo tipo
            tipoLocalidade = list[0].TipoItem;
        }

        BuscaCompleta.SetTipoLocalidade(tipoLocalidade);
        if (tipoLocalidade == 'Regiao') {
            $Get('lblBuscaCompletaTituloLocalidadeOuCidade').innerHTML = 'Localidade*';
            $Get('lblBuscaCompletaTituloLocalidadeOuCidadePopup').innerHTML = 'Selecione até três localidades:';
            page.popBuscaCompletaLocalidadeOuCidade.SetText('Localidade');

            page.popBuscaCompletaBairroOuCidade.SetText('Cidade/Bairro');
            $Get('lblBuscaCompletaBairroOuCidade').innerHTML = 'Cidade/Bairro*';
        }
        else if (tipoLocalidade == 'Cidade') {
            $Get('lblBuscaCompletaTituloLocalidadeOuCidade').innerHTML = 'Cidade*';
            $Get('lblBuscaCompletaTituloLocalidadeOuCidadePopup').innerHTML = 'Selecione até três cidades:';
            page.popBuscaCompletaLocalidadeOuCidade.SetText('Cidade');

            page.popBuscaCompletaBairroOuCidade.SetText('Bairro');
            $Get('lblBuscaCompletaBairroOuCidade').innerHTML = 'Bairro*';
        }

        ReplaceClassName($Get('lblBuscaCompletaLocaliadeLoading'), 'loading_on', 'loading_off');
    },
    popBuscaCompletaLocalidadeOuCidade_OKClick: function(sender, e) {
        var idCidadeOuIdRegiao = BuscaCompleta.GetIdCidadeOuIdRegiao();

        if (idCidadeOuIdRegiao && idCidadeOuIdRegiao.length > 0) {
            page.popBuscaCompletaLocalidadeOuCidade.SetText(Busca.GetCheckBoxLabels('chkBuscaCompletaCidadeOuRegiao'));
            BuscaCompleta.PesquisarBairrosOuCidades();
            BuscaCompleta.ValidarPasso1();
        }
        else {
            e.Cancel = true;
            ShowMessage('Selecione algum item.');
        }
    },
    popBuscaCompletaLocalidadeOuCidade_SaveControlState: function(sender, e) {
        e.State = Busca.GetCheckBoxControlState('chkBuscaCompletaCidadeOuRegiao');
    },
    popBuscaCompletaLocalidadeOuCidade_RestoreControlState: function(sender, e) {
        Busca.SetCheckBoxControlState(e.State);
    },
    PesquisarBairrosOuCidades: function() {
        var condicao = BuscaCompleta.GetCondicao();
        var finalidade = BuscaCompleta.GetFinalidade();
        var idTipoImovel = BuscaCompleta.GetIdTipoImovel();
        var idEstado = page.ddlBuscaCompletaEstado.SelectedValue;
        var tipoLocalidade = BuscaCompleta.GetTipoLocalidade();
        var idCidadeOuIdRegiao = BuscaCompleta.GetIdCidadeOuIdRegiao();

        ReplaceClassName($Get('lblBuscaCompletaCidadeBairroLoading'), 'loading_off', 'loading_on');
        page.rptBuscaCompletaBairroOuCidade.ClearContent();

        Ajax.Busca.FiltroBuscaBairroCidade(window['IdRegional'], condicao, finalidade, idTipoImovel, idEstado, tipoLocalidade, idCidadeOuIdRegiao, BuscaCompleta.PesquisarBairrosOuCidadesCallBack);
    },
    PesquisarBairrosOuCidadesCallBack: function(list) {
        var bairro = false;
        var cidade = false;
        var text = 'Cidade/Bairro';
        var textPlural = 'cidades/bairros';
        var listaReordenada = new Array();

        if (list && list.length > 0) {
            //CarregarLista - ordenar a lista para por colunas e não por linhas.
            listaReordenada = BuscaCompleta.OrganizarPorColunas(list, 2, 20, 10);
            page.rptBuscaCompletaBairroOuCidade.DataBind(listaReordenada);

            // Verifica se retornou bairro e/ou cidade
            for (var i = 0; i < list.length; i++) {
                if (list[i].TipoItem == 'Bairro')
                    bairro = true;
                else if (list[i].TipoItem == 'Cidade')
                    cidade = true;

                if (bairro && cidade)
                    break;
            }
        }

        // Atribui textos de tíulos
        if (bairro && cidade) {
            text = 'Cidade/Bairro';
            textPlural = 'cidades/bairros';
        }
        else if (bairro) {
            text = 'Bairro';
            textPlural = 'bairros';
        }
        else if (cidade) {
            text = 'Cidade';
            textPlural = 'cidades';
        }

        page.popBuscaCompletaBairroOuCidade.SetText(text);
        $Get('lblBuscaCompletaBairroOuCidade').innerHTML = text + '*';
        $Get('lblBuscaCompletaAvisoBairroOuCidade').innerHTML = 'Selecione até vinte ' + textPlural + ':';

        ReplaceClassName($Get('lblBuscaCompletaCidadeBairroLoading'), 'loading_on', 'loading_off');
    },
    OrganizarPorColunas: function(list, columns, visibleItems, maxItensPrioritarios) {

        var currentGroup = list[0].IdGrupoUnico;
        var tempList = new Array();
        var sortedList = new Array();
        var auxList = new Array();

        for (var i = 0; i < list.length; i++) {

            if (currentGroup == list[i].IdGrupoUnico) {
                tempList.push(list[i]);
                if (i != list.length - 1)
                    continue;

            }

            currentGroup = list[i].IdGrupoUnico;
            auxList = new Array();

            var listPrioritarios = new Array();
            var listNaoPrioritarios = new Array();

            if (tempList.length > visibleItems) {

                //descobrir prioritários
                var qtdPrioritarios = Math.min(tempList.length, maxItensPrioritarios);

                for (x = 0; x < tempList.length; x++) {
                    if (tempList[x].PrioridadeItem > 0 && x < qtdPrioritarios) {
                        listPrioritarios.push(tempList[x]);
                    }
                    else {//se houver mais prioritários, tratá-los como itens normais
                        tempList[x].PrioridadeItem = 0;
                    }
                }

                //descobrir itens não prioritários
                for (x = 0; x < tempList.length; x++) {
                    if (tempList[x].PrioridadeItem == 0) {
                        listNaoPrioritarios.push(tempList[x]);
                    }
                }
            } //término: separar lista em prioritários e não prioritários
            else {
                //como não há necessidade de separar a lista, todos serão considerados prioritários
                listPrioritarios = tempList;

                //ordenar a lista em ordem alfabética
                listPrioritarios.sort(
                function(a, b) {
                    return (a.NomeItem < b.NomeItem) ? -1 : (a.NomeItem > b.NomeItem) ? 1 : 0;
                });
            }

            //processar prioritários
            var numeroLinhas = Math.ceil(listPrioritarios.length / columns);
            var pos = 0;
            while (pos < numeroLinhas) {

                var aux = pos;
                while (aux < listPrioritarios.length) {

                    if (listPrioritarios[aux] == undefined) {
                        aux += numeroLinhas;
                        continue;
                    }

                    if (listPrioritarios[aux].used != true) {
                        auxList.push(listPrioritarios[aux]);
                    }


                    listPrioritarios[aux].used = true;
                    aux += numeroLinhas;
                }
                pos++;
            }

            //marcar a ordem de cada item

            for (x = 0; x < auxList.length; x++) {
                auxList[x].Order = x;
            }

            //marcar o último item para que o espaçamento aumente caso
            //o número de prioritários seja ímpar.
            if (auxList.length % columns == 1 && tempList.length > visibleItems)
                auxList[auxList.length - 1].Ultimo = true;

            //processar os itens restantes
            var auxList2 = new Array();

            numeroLinhas = Math.ceil(listNaoPrioritarios.length / columns);
            pos = 0;
            while (pos < numeroLinhas) {

                var aux = pos;
                while (aux < listNaoPrioritarios.length) {

                    if (listNaoPrioritarios[aux] == undefined) {
                        aux += numeroLinhas;
                        continue;
                    }

                    if (listNaoPrioritarios[aux].used != true)
                        auxList2.push(listNaoPrioritarios[aux]);

                    listNaoPrioritarios[aux].used = true;
                    aux += numeroLinhas;
                }
                pos++;
            }

            var listaRegiao = auxList.concat(auxList2);




            sortedList = sortedList.concat(listaRegiao);

            //criar uma nova lista para continuar com a leitura dos itens
            tempList = new Array();
            tempList.push(list[i]);
        }

        return sortedList;

    },
    MostrarTodos: function(link) {
        if ($(link).html() == $(link).attr('modoVerTodos')) {
            $('#' + $(link).attr('ulId')).removeClass('ul_topN_off');
            $('#' + $(link).attr('ulId')).addClass('ul_topN_on');
            $(link).html('Ocultar');
        } else {
            $('#' + $(link).attr('ulId')).removeClass('ul_topN_on');
            $('#' + $(link).attr('ulId')).addClass('ul_topN_off');
            $(link).html($(link).attr('modoVerTodos'));
        }

        /*
        if (link.innerHTML == $GetAttr(link, 'modoVerTodos')) {
        ReplaceClassName($Get($GetAttr(link, 'ulId')), 'ul_topN_off', 'ul_topN_on');
        link.innerHTML = 'Ocultar';
        }
        else {
        ReplaceClassName($Get($GetAttr(link, 'ulId')), 'ul_topN_on', 'ul_topN_off');
        link.innerHTML = $GetAttr(link, 'modoVerTodos');
        }
        */
    },
    GetCSSClassLinkVerTodos: function(dataSource, dataItem) {
        var qtd = 0;

        for (var i = 0; i < dataSource.length; i++) {
            if (dataSource[i].IdGrupo == dataItem.IdGrupo)
                qtd++;
        }

        return qtd < 21 ? 'a_topN_off' : 'a_topN_on';
    },
    GetCSSClassLIVerTodos: function(groupIndex) {
        return groupIndex < 10 ? 'topN' : '';
    },
    popBuscaCompletaBairroOuCidade_OKClick: function(sender, e) {
        var idItemLocalidade = BuscaCompleta.GetIdItemLocalidade();

        if (!idItemLocalidade || idItemLocalidade.length == 0) {
            e.Cancel = true;
            ShowMessage('Selecione algum item.');
        }
        else {
            page.popBuscaCompletaBairroOuCidade.SetText(Busca.GetCheckBoxLabels('chkBuscaCompletaBairroOuCidade'));
            BuscaCompleta.ValidarPasso1();
        }
    },
    popBuscaCompletaBairroOuCidade_SaveControlState: function(sender, e) {
        e.State = Busca.GetCheckBoxControlState('chkBuscaCompletaBairroOuCidade');
    },
    popBuscaCompletaBairroOuCidade_RestoreControlState: function(sender, e) {
        Busca.SetCheckBoxControlState(e.State);
    },
    ddlBuscaCompletaValorInicial_ItemClick: function(sender, e) {
        BuscaCompleta.ValidarPasso2(BuscaCompleta.ValidarPasso1());
    },
    ddlBuscaCompletaValorFinal_ItemClick: function(sender, e) {
        BuscaCompleta.ValidarPasso2(BuscaCompleta.ValidarPasso1());
    },
    ddlBuscaCompletaDormitorio_ItemClick: function(sender, e) {
        BuscaCompleta.ValidarPasso2(BuscaCompleta.ValidarPasso1());
    },
    ddlBuscaCompletaSuite_ItemClick: function(sender, e) {
        BuscaCompleta.ValidarPasso2(BuscaCompleta.ValidarPasso1());
    },
    ddlBuscaCompletaVagasGaragem_ItemClick: function(sender, e) {
        BuscaCompleta.ValidarPasso2(BuscaCompleta.ValidarPasso1());
    },
    ddlBuscaCompletaAreaInicial_ItemClick: function(sender, e) {
        var passo1 = false;
        var passo2 = false;

        passo1 = BuscaCompleta.ValidarPasso1();
        passo2 = BuscaCompleta.ValidarPasso2(passo1);
    },
    ddlBuscaCompletaAreaFinal_ItemClick: function(sender, e) {
        var passo1 = false;
        var passo2 = false;

        passo1 = BuscaCompleta.ValidarPasso1();
        passo2 = BuscaCompleta.ValidarPasso2(passo1);
    },
    rbtBuscaCompletaPagamento_OnClick: function(sender) {
        if (sender.value == "1") {
            BuscaCompleta.AlterarStatusPagamentoAVista(true);
            BuscaCompleta.AlterarStatusPagamentoFinanciamento(false, null);
        }
        else if (sender.value == "2") {
            BuscaCompleta.AlterarStatusPagamentoAVista(false);
            BuscaCompleta.AlterarStatusPagamentoFinanciamento(true, null);

            var lista = BuscaCompleta.GetTipoImovelNaoFinanciavelSelecionado();
            if (lista.length > 0) {
                var html = '';
                for (var i = 0; i < lista.length; i++)
                    html += '- ' + lista[i] + '<br />';

                $Get('pBuscaCompletaAvisoFinanciamento').innerHTML = html;
                $Get('popBuscaCompletaAvisoFinanciamento').style.display = '';
            }
        }

        var passo1 = false;
        var passo2 = false;

        passo1 = BuscaCompleta.ValidarPasso1();
        passo2 = BuscaCompleta.ValidarPasso2(passo1);
    },
    TipoImovelFinanciavelSelecionado: function() {
        if ($Get('chkBuscaCompletaComprarRevenda').checked) {
            var chks = document.getElementsByName('chkBuscaCompletaTipoImovel');
            if (chks) {
                for (var i = 0; i < chks.length; i++) {
                    var chk = chks[i];
                    if (chk.checked && $GetAttr(chk, 'financiavel') == '1')
                        return true;
                }
            }
        }
        return false;
    },
    GetTipoImovelNaoFinanciavelSelecionado: function() {
        var ret = new Array();

        if ($Get('chkBuscaCompletaComprarLancamento').checked)
            ret.push('Lançamentos');

        var chks = document.getElementsByName('chkBuscaCompletaTipoImovel');
        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;
    },
    TrocarStatusCampo: function(spanID, novoStatus) {
        if (novoStatus)
            ReplaceClassName(spanID, 'bullet_off', 'bullet_on');
        else
            ReplaceClassName(spanID, 'bullet_on', 'bullet_off');
    },
    AlterarStatusPagamentoAVista: function(enabled) {
        page.ddlBuscaCompletaValorInicial.SetEnabled(enabled);
        page.ddlBuscaCompletaValorFinal.SetEnabled(enabled);

        if (!enabled) {
            page.ddlBuscaCompletaValorInicial.SelectFirstItem();
            page.ddlBuscaCompletaValorFinal.SelectFirstItem();
        }
    },
    AlterarStatusPagamentoFinanciamento: function(enabled, radioEnabled) {
        var txtBuscaCompletaValorEntrada = $Get('txtBuscaCompletaValorEntrada');
        var txtBuscaCompletaValorParcela = $Get('txtBuscaCompletaValorParcela');

        txtBuscaCompletaValorEntrada.disabled = !enabled;
        txtBuscaCompletaValorParcela.disabled = !enabled;

        if (enabled) {
            ReplaceClassName('spnBuscaCompletaValorEntrada', 'inputText_off', 'inputText');
            ReplaceClassName('spnBuscaCompletaValorParcela', 'inputText_off', 'inputText');
            ReplaceClassName('ulBuscaCompletaValorEntrada', 'entrada_max_off', 'entrada_max');
            ReplaceClassName('ulBuscaCompletaValorParcela', 'parcela_mensal_off', 'parcela_mensal');
        }
        else {
            txtBuscaCompletaValorEntrada.value = '';
            txtBuscaCompletaValorParcela.value = '';

            ReplaceClassName('spnBuscaCompletaValorEntrada', 'inputText', 'inputText_off');
            ReplaceClassName('spnBuscaCompletaValorParcela', 'inputText', 'inputText_off');
            ReplaceClassName('ulBuscaCompletaValorEntrada', 'entrada_max', 'entrada_max_off');
            ReplaceClassName('ulBuscaCompletaValorParcela', 'parcela_mensal', 'parcela_mensal_off');
        }

        if (radioEnabled != null) {
            var rbtBuscaCompletaPagamentoAVista = $Get('rbtBuscaCompletaPagamentoAVista');
            var rbtBuscaCompletaPagamentoFinanciamento = $Get('rbtBuscaCompletaPagamentoFinanciamento');

            rbtBuscaCompletaPagamentoFinanciamento.disabled = !radioEnabled;

            if (radioEnabled)
                ReplaceClassName('divBuscaCompletaPagamentoFinanciamento', 'financiamento_off', 'financiamento');
            else
                ReplaceClassName('divBuscaCompletaPagamentoFinanciamento', 'financiamento', 'financiamento_off');
        }
    },
    ValidarPasso1: function() {
        var passo1 = true;
        var idTipoImovel = BuscaCompleta.GetIdTipoImovel();
        var idEstado = page.ddlBuscaCompletaEstado.SelectedValue;
        var idCidadeOuIdRegiao = BuscaCompleta.GetIdCidadeOuIdRegiao();
        var idItemLocalidade = BuscaCompleta.GetIdItemLocalidade();
        var finalidade = BuscaCompleta.GetFinalidade();

        if (idTipoImovel == null || idTipoImovel.length == 0) {
            BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaTipoImovel', false);
            page.ddlBuscaCompletaEstado.SetEnabled(false);
            page.popBuscaCompletaLocalidadeOuCidade.SetEnabled(false);
            page.popBuscaCompletaBairroOuCidade.SetEnabled(false);

            passo1 = false;
        }
        else {
            BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaTipoImovel', true);
            page.ddlBuscaCompletaEstado.SetEnabled(true);

            if (idEstado == null || idEstado.length == 0) {
                BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaEstado', false);

                page.popBuscaCompletaLocalidadeOuCidade.SetEnabled(false);
                page.popBuscaCompletaBairroOuCidade.SetEnabled(false);

                passo1 = false;
            }
            else {
                BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaEstado', true);
                page.popBuscaCompletaLocalidadeOuCidade.SetEnabled(true);

                if (idCidadeOuIdRegiao == null || idCidadeOuIdRegiao.length == 0) {
                    BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaLocalidadeOuCidade', false);
                    page.popBuscaCompletaBairroOuCidade.SetEnabled(false);
                    passo1 = false;
                }
                else {
                    BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaLocalidadeOuCidade', true);
                    page.popBuscaCompletaBairroOuCidade.SetEnabled(true);

                    if (idItemLocalidade == null || idItemLocalidade.length == 0) {
                        BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaBairroOuCidade', false);
                        passo1 = false;
                    }
                    else {
                        BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaBairroOuCidade', true);
                    }
                }
            }
        }

        page.ddlBuscaCompletaDormitorio.SetEnabled(passo1 && finalidade == Busca.Finalidade.Residencial);
        page.ddlBuscaCompletaAreaInicial.SetEnabled(passo1);
        page.ddlBuscaCompletaAreaFinal.SetEnabled(passo1);
        page.ddlBuscaCompletaSuite.SetEnabled(passo1 && finalidade == Busca.Finalidade.Residencial);
        page.ddlBuscaCompletaVagasGaragem.SetEnabled(passo1 && finalidade == Busca.Finalidade.Residencial);

        refinamento_passo = passo1;

        if (passo1)
            mostra_botao_refinamento(1);
        else
            mostra_botao_refinamento(0);

        BuscaCompleta.ValidarPasso2(passo1);

        return passo1;
    },
    ValidarPasso2: function(passo1) {
        // =====================================
        // O passo 3 também será validado neste método
        // =====================================
        var passo2 = passo1;

        var qtdMinimaDormitorios = page.ddlBuscaCompletaDormitorio.SelectedValue == '' ? -1 : parseInt(page.ddlBuscaCompletaDormitorio.SelectedValue);
        var valorAreaInicial = page.ddlBuscaCompletaAreaInicial.SelectedValue;
        var valorAreaFinal = page.ddlBuscaCompletaAreaFinal.SelectedValue;
        var qtdMinimaSuites = page.ddlBuscaCompletaSuite.SelectedValue == '' ? -1 : parseInt(page.ddlBuscaCompletaSuite.SelectedValue);
        var qtdMinimaVagasGaragem = page.ddlBuscaCompletaVagasGaragem.SelectedValue == '' ? -1 : parseInt(page.ddlBuscaCompletaVagasGaragem.SelectedValue);
        var valorInicial = page.ddlBuscaCompletaValorInicial.SelectedValue;
        var valorFinal = page.ddlBuscaCompletaValorFinal.SelectedValue;
        var valorEntrada = ConvertToNumber($Get('txtBuscaCompletaValorEntrada').value);
        var valorParcela = ConvertToNumber($Get('txtBuscaCompletaValorParcela').value);


        if (qtdMinimaDormitorios > 0)
            BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaDormitorio', true);
        else
            BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaDormitorio', false);

        if (valorAreaInicial != '' && valorAreaFinal != '') {
            if (parseInt(valorAreaInicial) > parseInt(valorAreaFinal)) {
                BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaArea', false);
                passo2 = false;
            }
            else {
                BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaArea', true);
            }
        }
        else {
            BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaArea', false);
        }

        if (qtdMinimaSuites > 0)
            BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaSuite', true);
        else
            BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaSuite', false);

        if (qtdMinimaVagasGaragem > 0)
            BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaVagasGaragem', true);
        else
            BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaVagasGaragem', false);

        if ($Get('rbtBuscaCompletaPagamentoFinanciamento').checked) {
            if (valorEntrada == null || valorEntrada <= 0 || valorParcela == null || valorParcela <= 0)
                passo2 = false;
        }

        if (passo2) {
            ReplaceClassName($Get('btnBuscaCompletaBuscar'), 'bt_buscar_off', 'bt_buscar');
            ReplaceClassName($Get('btnBuscaCompletaBuscar2'), 'bt_buscar_off', 'bt_buscar');
        }
        else {
            ReplaceClassName($Get('btnBuscaCompletaBuscar'), 'bt_buscar', 'bt_buscar_off');
            ReplaceClassName($Get('btnBuscaCompletaBuscar2'), 'bt_buscar', 'bt_buscar_off');
        }

        return passo2;
    },
    GetBairroOuCidadeValues: function(tipoItem, justCheckeds) {
        var chks;
        var i;
        var ret;

        chks = document.getElementsByName('chkBuscaCompletaBairroOuCidade');
        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;
    },
    Executar: function() {
        var passo1 = false;
        var passo2 = false;
        var ok;

        var idRegional = window['IdRegional'];
        var condicao = BuscaCompleta.GetCondicao();
        var finalidade = BuscaCompleta.GetFinalidade();
        var listaIdTipoImovel = Busca.GetCheckBoxValues('chkBuscaCompletaTipoImovel', true);
        var idEstado = page.ddlBuscaCompletaEstado.SelectedValue;
        var tipoLocalidade = BuscaCompleta.GetTipoLocalidade();
        var listaIdItemLocalidade = BuscaCompleta.GetIdCidadeOuIdRegiao();
        var bairroListaItemId = BuscaCompleta.GetBairroOuCidadeValues('Bairro', true);
        var cidadeListaItemId = BuscaCompleta.GetBairroOuCidadeValues('Cidade', true);
        var listaIdCaracteristicaBool = null;
        var valorAreaMinima = page.ddlBuscaCompletaAreaInicial.SelectedValue == '' ? -1 : parseInt(page.ddlBuscaCompletaAreaInicial.SelectedValue);
        var valorAreaMaxima = page.ddlBuscaCompletaAreaFinal.SelectedValue == '' ? -1 : parseInt(page.ddlBuscaCompletaAreaFinal.SelectedValue);
        var qtdMinimaDormitorios = page.ddlBuscaCompletaDormitorio.SelectedValue == '' ? -1 : parseInt(page.ddlBuscaCompletaDormitorio.SelectedValue);
        var qtdMinimaSuites = page.ddlBuscaCompletaSuite.SelectedValue == '' ? -1 : parseInt(page.ddlBuscaCompletaSuite.SelectedValue);
        var qtdMinimaBanheiros = -1;
        var qtdMinimaVagasGaragem = page.ddlBuscaCompletaVagasGaragem.SelectedValue == '' ? -1 : parseInt(page.ddlBuscaCompletaVagasGaragem.SelectedValue);
        var resultadosPorPagina = -1;
        var numeroPagina = -1;
        var ordenacao = null;
        var listaIdTipoImovelSelecionado = Busca.GetCheckBoxValues('chkBuscaCompletaTipoImovel', true);
        var bairroListaItemIdSelecionado = BuscaCompleta.GetBairroOuCidadeValues('Bairro', true);
        var cidadeListaItemIdSelecionado = BuscaCompleta.GetBairroOuCidadeValues('Cidade', true);
        var condicaoOriginal = BuscaCompleta.GetCondicao();

        var valorMinimo = -1;
        var valorMaximo = -1;
        var valorEntradaFinanciamento = 0;
        var valorParcelaFinanciamento = 0;

        if ($Get('rbtBuscaCompletaPagamentoAVista').checked) {
            valorMinimo = page.ddlBuscaCompletaValorInicial.SelectedValue == '' ? -1 : parseInt(page.ddlBuscaCompletaValorInicial.SelectedValue);
            valorMaximo = page.ddlBuscaCompletaValorFinal.SelectedValue == '' ? -1 : parseInt(page.ddlBuscaCompletaValorFinal.SelectedValue);

            //Caso os valores min e max tenham sido invertidos, reinverte
            if (valorMinimo != -1 && valorMaximo != -1 && valorMinimo > valorMaximo) {
                var temp = valorMinimo;
                valorMinimo = valorMaximo;
                valorMaximo = temp;
            }
        }
        else if ($Get('rbtBuscaCompletaPagamentoFinanciamento').checked) {
            valorEntradaFinanciamento = ConvertToNumber($Get('txtBuscaCompletaValorEntrada').value);
            valorParcelaFinanciamento = ConvertToNumber($Get('txtBuscaCompletaValorParcela').value);
        }

        passo1 = BuscaCompleta.ValidarPasso1();
        passo2 = BuscaCompleta.ValidarPasso2(passo1);

        ok = (passo1 && passo2);

        if (ok) {
            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,
                true,
                true,
                true,
                true,
                '',
                0, /*Latitude*/
                0, /* Longitude */
                0, /*IdEnderecoBuscaRapida*/
                0, /*IdBairroBuscaRapida*/
                0, /*IdCidadeBuscaRapida*/
                0, /*IdRegiaoBuscaRapida*/
                valorEntradaFinanciamento,
				valorParcelaFinanciamento,
                BuscaCompleta.ExecutarCallBack
            );
        }
    },
    ExecutarCallBack: function(url) {
        if (url)
            page.Redirect(url);
    }
}

function mostra_botao_refinamento(acao) {
    if (acao) {
        ReplaceClassName(document.getElementById('botao_refinamento'), 'disabled', 'off');
    }
    else {
        ReplaceClassName(document.getElementById('botao_refinamento'), 'on', 'disabled');
        ReplaceClassName(document.getElementById('botao_refinamento'), 'off', 'disabled');
    }
}



function mostra_refinamento() {
    if (refinamento_passo) {
        if ($('#liBuscaCompletaLinha2').hasClass('linha2')) {
            ReplaceClassName($Get('liBuscaCompletaLinha2'), 'linha2', 'linha2_off');
            ReplaceClassName($Get('liBuscaCompletaLinha3'), 'linha3', 'linha3_off');
            ReplaceClassName(document.getElementById('botao_refinamento'), 'on', 'off');
        } else {
            ReplaceClassName($Get('liBuscaCompletaLinha2'), 'linha2_off', 'linha2');
            ReplaceClassName($Get('liBuscaCompletaLinha3'), 'linha3_off', 'linha3');
            ReplaceClassName(document.getElementById('botao_refinamento'), 'off', 'on');
        }
    }
    else {
        ReplaceClassName($Get('liBuscaCompletaLinha2'), 'linha2', 'linha2_off');
        ReplaceClassName($Get('liBuscaCompletaLinha3'), 'linha3', 'linha3_off');
    }
}


//Mostra balão busca passo 3
function mostraBalao(obj) {
    document.getElementById(obj).style.display = "block";
}

function escondeBalao(obj) {
    document.getElementById(obj).style.display = "none";
}
