/*****************************************

	@Arquivo:
		appImovel.js

	@Data:
		03/03/2011

	@Objetivo:
		Funções javascript necessárias para os imóveis

	@Modificações (Data - Descrição):
		- sem modificações -


*****************************************/

var appImovel = {
	vars: {
		  estadosCarregados	: true
		, cidadesCarregadas	: true
		, bairrosCarregados	: true
	}
	
	, ajax: {
		onChangeCombo_pais: function(_idPais){
			$('#actionButton').hide();
			
			appImovel.vars.estadosCarregados = false;
			appImovel.vars.cidadesCarregadas = false;
			appImovel.vars.bairrosCarregados = false;
			
			appImovel.ajax.carregarComboEstados(_idPais, 0);
		}
		
		, onChangeCombo_estado: function(_idEstado){
			$('#actionButton').hide();
			
			appImovel.vars.cidadesCarregadas = false;
			appImovel.vars.bairrosCarregados = false;
			
			appImovel.ajax.carregarComboCidades(_idEstado, 0);
		}
		
		, onChangeCombo_cidade: function(_idEstado, _idCidade){
			$('#actionButton').hide();
			
			appImovel.vars.bairrosCarregados = false;
			
			appImovel.ajax.carregarComboBairros(_idEstado, _idCidade, 0);
		}
		
		, carregarComboEstados: function(_idPais, _idEstado){
			var objCombo = document.frmPsqImovel.imv_psq_estado;
			
			appImovel.vars.estadosCarregados = false;
			
			appImovel.extras.loadingCombo(objCombo, 'Carregando os estados...');
			
			//carrega a lista de estados do país selecionado
			$.ajax({
				url: 'index.php',
				data: {
					ajax		: 'true',
					fuse		: 'imoveis.montarComboEstados',
					idPaisSel	: _idPais
				},
				success: function(data){
					appImovel.extras.montaValoresCombo(
						objCombo,
						jQuery.parseJSON(data),
						'NULL',
						'NULL'
					);
					
					appImovel.vars.estadosCarregados = true;
					
					appImovel.extras.habilitaBtnPesquisa();
					
					var idEstadoSel	= 0;
					var objJson 	= jQuery.parseJSON(data);
					
					if(objJson.length > 0)
						idEstadoSel = objJson[0].id;
					
					appImovel.ajax.carregarComboCidades(idEstadoSel, 0);
				}
			});
		}
		
		, carregarComboCidades: function(_idEstado, _idCidade){
			var objCombo = document.frmPsqImovel.imv_psq_cidade;
			
			appImovel.vars.cidadesCarregadas = false;
			
			appImovel.extras.loadingCombo(objCombo, 'Carregando as cidades...');
			
			//carrega a lista de cidades do estado selecionado
			$.ajax({
				url: 'index.php',
				data: {
					ajax		: 'true',
					fuse		: 'imoveis.montarComboCidades',
					idEstadoSel	: _idEstado
				},
				success: function(data){
					appImovel.extras.montaValoresCombo(
						objCombo,
						jQuery.parseJSON(data),
						'all',
						'- Cidade (Todas) -'
					);
					
					appImovel.vars.cidadesCarregadas = true;
					
					appImovel.extras.habilitaBtnPesquisa();
					
					appImovel.ajax.carregarComboBairros(_idEstado, 0, 0);
				}
			});
		}
		
		, carregarComboBairros: function(_idEstado, _idCidade, _idBairro){
			var objCombo = document.frmPsqImovel.imv_psq_bairro;
			
			appImovel.vars.bairrosCarregados = false;
			
			appImovel.extras.loadingCombo(objCombo, 'Carregando os bairros...');
			
			//carrega a lista de bairros da cidade selecionada
			$.ajax({
				url: 'index.php',
				data: {
					ajax		: 'true',
					fuse		: 'imoveis.montarComboBairros',
					idEstadoSel	: _idEstado,
					idCidadeSel	: _idCidade
				},
				success: function(data){
					appImovel.extras.montaValoresCombo(
						objCombo,
						jQuery.parseJSON(data),
						'all',
						'- Bairro (Todos) -'
					);
					
					appImovel.vars.bairrosCarregados = true;
					
					appImovel.extras.habilitaBtnPesquisa();
				}
			});
		}
		
		, changeImgGaleria: function(_idImg, _contabilizar){
			//esconde as setas de navegação
			$('div#btn-prev-galeria').unbind().hide();
			$('div#btn-next-galeria').unbind().hide();
			
			//loading imagem.
			$('div#imagemMaior').html('<div class="galeria_loader"><img src="objetos/imagens/ajax-loader.gif" align="absmiddle"><br />Carregando a imagem selecionada. Aguarde...</div>');
			
			var _contabilizar = (typeof _contabilizar == 'undefined') ? 'S' : 'N';
			
			//carrega os dados da imagem selecionada
			$.ajax({
				url: 'index.php',
				data: {
					ajax	: 'true',
					fuse	: 'imoveis.carregarImagemGaleria',
					idImgGaleria : _idImg,
					contabilizar: _contabilizar
				},
				success: function(data){
					var objJSON = jQuery.parseJSON(data);
					
					$('div#imagemMaior').html('<a href="' + objJSON[0].img_srcReal +  '" title="' + objJSON[0].img_legenda  + '" rel="shadowbox"><img src="' + objJSON[0].img_srcThumb + '"></a>');
					
					Shadowbox.setup();
					
					//Define o links da imagem anterior
					if(objJSON[0].img_anterior > 0){
						$('div#btn-prev-galeria').show().one('click', function(){
							appImovel.ajax.changeImgGaleria(objJSON[0].img_anterior);
						});
					}
					
					//Define o links da próxima imagem
					if(objJSON[0].img_proxima > 0){
						$('div#btn-next-galeria').show().one('click', function(){
							appImovel.ajax.changeImgGaleria(objJSON[0].img_proxima);
						});
					}
				}
			});
		}
		
		, changeImgGaleriaResultadoBusca: function(_idImg){
			//esconde as setas de navegação
			$('div#btn-prev-galeria').unbind().hide();
			$('div#btn-next-galeria').unbind().hide();
			
			//loading imagem.
			$('span#imagemMaior').html('<div class="galeria_loader"><img src="objetos/imagens/ajax-loader.gif" align="absmiddle"><br />Carregando a imagem selecionada. Aguarde...</div>');
			
			//carrega os dados da imagem selecionada
			$.ajax({
				url: 'index.php',
				data: {
					ajax	: 'true',
					fuse	: 'imoveis.carregarImagemGaleria',
					idImgGaleria : _idImg,
					contabilizar: 'S'
				},
				success: function(data){
					var objJSON = jQuery.parseJSON(data);
					
					$('span#imagemMaior').html( '<a href="' + objJSON[0].img_srcReal +  '" title="' + objJSON[0].img_legenda  + '"><img src="' + objJSON[0].img_srcThumb + '"></a>' );

					//Define o links da imagem anterior
					if(objJSON[0].img_anterior > 0){
						$('div#btn-prev-galeria').show().one('click', function(){
							appImovel.ajax.changeImgGaleriaResultadoBusca(objJSON[0].img_anterior);
						});
					}
					
					//Define o links da próxima imagem
					if(objJSON[0].img_proxima > 0){
						$('div#btn-next-galeria').show().one('click', function(){
							appImovel.ajax.changeImgGaleriaResultadoBusca(objJSON[0].img_proxima);
						});
					}
				}
			});
		}
	}
	
	, validate: {
		frmPsqInicial: function(){
			var _frm = document.frmPsqImovel;
			var urlPsqParams = '';
			
			//palavra chave ou código do imóvel
			if(	_frm.imv_psq_plvchave.value.length == 0 ||
				_frm.imv_psq_plvchave.value.toLowerCase() == 'palavra chave ou código do imóvel'){
				
					urlPsqParams += 'PC-0';
			}
			else{
					urlPsqParams += 'PC-' + appImovel.extras.convertStringToPermalink(_frm.imv_psq_plvchave.value);
			}
			
			//país
			urlPsqParams += '-PA-' + _frm.imv_psq_pais.value;
			//estado
			urlPsqParams += '-ES-' + _frm.imv_psq_estado.value;
			//cidade
			urlPsqParams += '-CI-' + _frm.imv_psq_cidade.value.toUpperCase();
			//bairro
			urlPsqParams += '-BA-' + _frm.imv_psq_bairro.value.toUpperCase();
			//tipo do imóvel
			urlPsqParams += '-TP-' + _frm.imv_psq_tipo.value.toUpperCase();
			//finalidade
			urlPsqParams += '-FN-' + _frm.imv_psq_finalidade.value.toUpperCase();
			//paginação: nº da página
			urlPsqParams += '-PG-1';
			
			$('#actionButton').html('Realizando a busca. Aguarde...');
			
			window.location = gbProjetoDomain + 'imoveis/pesquisar/' + urlPsqParams;
		}
		
		, validarFormIndique: function(_frm){
			if(_frm.ind_nome_indicador.value.length == 0){
				alert("Informe o SEU NOME para prosseguir!");
				_frm.ind_nome_indicador.focus();
				return false;
			}
			if(_frm.ind_email_indicador.value.length == 0){
				alert("Informe o SEU EMAIL para prosseguir!");
				_frm.ind_email_indicador.focus();
				return false;
			}
			if(!fieldMaskValidator.email(_frm.ind_email_indicador))
				return false;
			
			if(_frm.ind_nome_indicado.value.length == 0){
				alert("Informe o NOME DA PESSOA PARA QUEM VAI INDICAR para prosseguir!");
				_frm.ind_nome_indicado.focus();
				return false;
			}
			if(_frm.ind_email_indicado.value.length == 0){
				alert("Informe o EMAIL DA PESSOA PARA QUEM VAI INDICAR para prosseguir!");
				_frm.ind_email_indicado.focus();
				return false;
			}
			if(!fieldMaskValidator.email(_frm.ind_email_indicado))
				return false;
			
			if(_frm.ind_texto.value.length > 300){
				alert("Suas OBSERVAÇÕES SOBRE ESTE IMÓVEL não deverá ultrapassar 300 caracteres!");
				_frm.ind_texto.focus();
				return false;
			}
			
			$("#actionButtons").html('Enviando...');
				_frm.submit();
		}
		
		, frmPsqInicialMobile: function(){
			var _frm = document.frmPsqImovel;
			var urlPsqParams = '';
			
			//palavra chave ou código do imóvel
			if(	_frm.imv_psq_plvchave.value.length == 0){
				urlPsqParams += 'PC-0';
			}
			else{
				urlPsqParams += 'PC-' + appImovel.extras.convertStringToPermalink(_frm.imv_psq_plvchave.value);
			}
			
			//país
			urlPsqParams += '-PA-' + _frm.imv_psq_pais.value;
			//estado
			urlPsqParams += '-ES-' + _frm.imv_psq_estado.value;
			//cidade
			urlPsqParams += '-CI-' + _frm.imv_psq_cidade.value.toUpperCase();
			//bairro
			urlPsqParams += '-BA-' + _frm.imv_psq_bairro.value.toUpperCase();
			//tipo do imóvel
			urlPsqParams += '-TP-' + _frm.imv_psq_tipo.value.toUpperCase();
			//finalidade
			urlPsqParams += '-FN-' + _frm.imv_psq_finalidade.value.toUpperCase();
			//paginação: nº da página
			urlPsqParams += '-PG-1';
			
			$('#actionButton').html('Realizando a busca. Aguarde...');
			
			window.location = gbProjetoDomain + 'imoveis/pesquisarmobile/' + urlPsqParams;
		}
	}
	
	, extras: {
		/*
		 @DESC:
		 	Limpa os valores do objeto combo e adiciona uma mensagem de 'Carregando' no primeiro elemento.
		*/
		loadingCombo: function(_objCombo, _msgLoad){
			var tamCombo = _objCombo.length;
			
			if(typeof _msgLoad == 'undefined')
				_msgLoad = 'Carregando...';
			
			for(i=tamCombo-1; i>0; i--){
				_objCombo.remove(i);
			}
			
			_objCombo.options[0].text = _msgLoad;
		}
		
		/*
		 @DESC:
		 	Alimenta um combo com os valores da lista JSON obtida
		*/
		, montaValoresCombo: function(_objCombo, _objJson, _vlPrim, _txPrim){
			var tamLista 	= _objJson.length;
			var idx			= ( (_objCombo.length - 1) < 0 ) ? 0 : (_objCombo.length - 1);
			
			if(_vlPrim != 'NULL'){
				_objCombo.options[idx].value	= _vlPrim;
				_objCombo.options[idx].text		= _txPrim;
				idx++;
			}
			
			for(i=0; i<tamLista; i++){
				var vl 	= _objJson[i].id;
				var nm 	= _objJson[i].nome;
				
				_objCombo.options[idx++] = new Option(nm, vl);
			}
			
			return true;
		}
		
		/*
		 @DESC:
		 	Verifica se todos os combos (países, estados, cidades e bairros) foram carregados
				e habilita o botão de pesquisa novamente
		*/
		, habilitaBtnPesquisa: function(){
			if(appImovel.vars.estadosCarregados && appImovel.vars.cidadesCarregadas && appImovel.vars.bairrosCarregados)
				$('#actionButton').show();
		}
		
		/*
		 @DESC:
		 	Define a ação de foco (focus) e saída (blur) do campo de palavra chave do formulário
		*/
		, defineCampoPalavraChave: function(){
			$("#imv_psq_plvchave").focusin( function(){ focoCampo(this, 'Palavra chave ou código do imóvel', 'in'); }).focusout( function(){ focoCampo(this, 'Palavra chave ou código do imóvel', 'out'); });
		}
		
		/*
		 @DESC:
		 	Converte uma string em um valor válido para permalink
		*/
		, convertStringToPermalink: function(_str){
			var strConvertFrom	= 'áéíóúàèìòùâêîôûãõç "!@#$%¨&*()_+{}[]<>,.;:?/|ªº\'\\'.split('');
			var strConvertTo	= 'aeiouaeiouaeiouaoc+------------------------------'.split('');
			var strConverted	= '';
			var	letra			= '';
			
			//converte a letra pela equivalente.
			for(i=0;i<_str.length;i++){
				letra 				= _str.charAt(i).toLowerCase();
				findLetraOnArrays	= strConvertFrom.toString().replace(/,/g,'').indexOf(letra);
				
				if(findLetraOnArrays != -1)
					strConverted += strConvertTo[findLetraOnArrays];
				else
					strConverted += letra;
			}
			
			//retira os caracteres especiais da pesquisa, que foram substituídos por (-)
			strConverted = strConverted.replace(/-/g,'');
			
			return(strConverted.toUpperCase());
		}
	}
}


