﻿/// <reference path="TeslaLibrary.js" />
/// <reference path="Geral.js" />

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
	},
	SelecionaModoBusca: function(n) {
		for (var i = 1; i <= 3; i++) {
			if (i == n)
			//$Get('divBusca' + i).style.display = 'block';
				$("#" + 'divBusca' + i).fadeIn("slow");
			else
				$Get('divBusca' + i).style.display = 'none';
			i == n ? ReplaceClassNameUndescore('BtBusca' + i, 'off', 'on') : ReplaceClassNameUndescore('BtBusca' + i, 'on', 'off');
			//$Get('BtBusca' + i).className = (i == n ? "on" : "off");
			//blur();
		}
		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(condicao, BuscaRapida.CarregarRangeValorCallBack);
		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;

		// Valor Opcional
		//        if (valorInicial == '')
		//            ok = false;

		//        if (valorFinal == '')
		//            ok = false;

		//04-03-2010 - Poderá receber valores invertidos
		// if (parseInt(valorInicial) > parseInt(valorFinal))
		//    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);
	}
}

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(condicao, BuscaCompleta.CarregarRangeValorCallBack);
        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)
    {
        $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();

        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);

            //page.rptBuscaCompletaBairroOuCidade.DataBind(list);



            // 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)
            {
                //console.debug(list[i].NomeGrupo + ' - ' + list[i].NomeItem + ' - ' + list[i].PrioridadeItem);
                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.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 < 20 ? '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);

        if (passo1)
        {
            ReplaceClassName($Get('liBuscaCompletaLinha2'), 'linha2_off', 'linha2');
            ReplaceClassName($Get('liBuscaCompletaLinha3'), 'linha3_off', 'linha3');
            //IEPNGFix.update();
        }
        else
        {
            ReplaceClassName($Get('liBuscaCompletaLinha2'), 'linha2', 'linha2_off');
            ReplaceClassName($Get('liBuscaCompletaLinha3'), 'linha3', 'linha3_off');
        }

        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('rbtBuscaCompletaPagamentoAVista').checked)
        {
            //			if (parseInt(valorInicial) > parseInt(valorFinal)) {
            //				//BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaValor', false);
            //				passo2 = false;
            //			}
            //			else {
            //				//BuscaCompleta.TrocarStatusCampo('spanBuscaCompletaValor', true);
            //			}
        }
        else 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');
        else
            ReplaceClassName($Get('btnBuscaCompletaBuscar'), '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);
    }
}

//Mostra balão busca passo 3
function mostraBalao(obj) {
	document.getElementById(obj).style.display = "block";
}

function escondeBalao(obj) {
	document.getElementById(obj).style.display = "none";
}