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