// Declarada aqui para ser variável global. Esta variável armazenará o texto contido no select de bairros quando nenhum bairro foi selecionado.
var selectBairrosText = '';

// Guarda a lista completa de cidades
var cidades = '';

$(document).ready(function() {
	setTitleAsValue('edit-area-construida');
	setTitleAsValue('edit-codigo');
	
	$('form').each(function() {
		$(this).attr('autocomplete', 'off'); // Pro firefox
	});	

    // Faz a troca entre os fieldsets de busca por código e por perfil
	if ($("input[name='tipo_busca']:checked").val() == 'codigo') {
		$('#fieldset-perfil').hide();
		$("#edit-tipo-busca-codigo-wrapper").hide();
	} else {
		$('#fieldset-codigo').hide();
		$("#edit-tipo-busca-perfil-wrapper").hide();
	}
	$("[name='tipo_busca']").each(function(i) {
		$(this).click(function(){
			if ($(this).is(':checked') && $(this).val() == "perfil") {
				$("fieldset#fieldset-perfil").show();
				$("fieldset#fieldset-codigo").hide();
				$("#edit-tipo-busca-codigo-wrapper").show();
				$("#edit-tipo-busca-perfil-wrapper").hide();
			} else {
				$("fieldset#fieldset-codigo").show();			
				$("fieldset#fieldset-perfil").hide();
				$("#edit-tipo-busca-perfil-wrapper").show();
				$("#edit-tipo-busca-codigo-wrapper").hide();
			}
		});
	});
	
	if ($("#edit-tipo option:selected").val() == 14)
			$("#edit-quartos").attr('disabled', 'disabled');
	$("#edit-tipo").change(function() {
		var value = $("#edit-tipo option:selected").val();
		if (value.indexOf('separador') == 0) {
			$("#edit-tipo option:eq(0)").attr('selected', 'selected');
		}
		if ($("#edit-tipo option:selected").val() == 14) {
			$("#edit-quartos").attr('disabled', 'disabled');
		} else {
			$("#edit-quartos").attr('disabled', false);
		}	
	});

    // Faz a troca entre os botoes de transacao (aluguel e compra)
	$("#edit-limite-valor-wrapper, #edit-limite-valor-aux-wrapper").hide();
	for (var i = 13; i <= 19; i++)
		$("#edit-limite-valor option:eq(13)").remove();

	for (var i = 2; i <= 12; i++)
		$("#edit-limite-valor-aux option:eq(2)").remove();
	
	var estados = $('#edit-perfil-estado').clone(true);
	var opcaoBAperfil = $("#edit-perfil-estado option[value='BA']").clone();
	var opcaoBAcodigo = $("#edit-perfil-estado option[value='BA']").clone();
	var opcaoCEperfil = $("#edit-perfil-estado option[value='CE']").clone();
	var opcaoCEcodigo = $("#edit-perfil-estado option[value='CE']").clone();
	if ($("input[name='transacao']:checked").val() == 'compra') {
		$("#edit-transacao-compra-wrapper").attr('class', 'active');
		$("#edit-transacao-aluguel-wrapper").attr('class', '');
		
		$("#edit-limite-valor-aux-wrapper").hide();
		$("#edit-limite-valor-aux").attr('name', 'limite_valor_aux');
		$("#edit-limite-valor-wrapper").show();
		$("#edit-limite-valor").attr('name', 'limite_valor');
		
		$("#edit-perfil-estado option[value='BA'], #edit-perfil-estado option[value='CE']").remove();
		$("#edit-codigo-estado option[value='BA'], #edit-codigo-estado option[value='CE']").remove();
	} else {
		$("#edit-transacao-aluguel-wrapper").attr('class', 'active');
		$("#edit-transacao-compra-wrapper").attr('class', '');

		$("#edit-limite-valor-wrapper").hide();
		$("#edit-limite-valor").attr('name', 'limite_valor_aux');
		$("#edit-limite-valor-aux-wrapper").show();
		$("#edit-limite-valor-aux").attr('name', 'limite_valor');
	}
	$("#fieldset-transacao label").each(function(i) {
		$(this).click(function(){
			$("#fieldset-transacao input").each(function() { $(this).attr('checked', false); })
			$(this).find("input").attr('checked', 'checked');
			if ($(this).find('input').is(':checked') && $(this).find('input').val() == "compra") {
				$("#edit-transacao-compra-wrapper").attr('class', 'active');
				$("#edit-transacao-aluguel-wrapper").attr('class', '');

				$("#edit-limite-valor-aux-wrapper").hide();
				$("#edit-limite-valor-aux").attr('name', 'limite_valor_aux');
				$("#edit-limite-valor-wrapper").show();
				$("#edit-limite-valor").attr('name', 'limite_valor');

				if ($("#edit-perfil-estado option:selected").val() == 'BA' || $("#edit-perfil-estado option:selected").val() == 'CE') {
					$("#edit-perfil-estado option:selected").removeAttr('selected');
					cidadesChange($("#edit-cidade"));
					estadosChange($("#edit-perfil-estado"));
					$("#edit-cidade option:not(':eq(0)')").remove();
					$("#edit-cidade").attr('disabled', 'disabled');
				}
				$("#edit-perfil-estado option[value='BA'], #edit-perfil-estado option[value='CE']").remove();
				$("#edit-codigo-estado option[value='BA'], #edit-codigo-estado option[value='CE']").remove();
			} else {
				$("#edit-transacao-aluguel-wrapper").attr('class', 'active');
				$("#edit-transacao-compra-wrapper").attr('class', '');

				$("#edit-limite-valor-wrapper").hide(); 
				$("#edit-limite-valor").attr('name', 'limite_valor_aux');
				$("#edit-limite-valor-aux-wrapper").show();
				$("#edit-limite-valor-aux").attr('name', 'limite_valor');
				
				opcaoBAperfil.attr('selected', false);
				opcaoCEperfil.attr('selected', false);
				opcaoBAcodigo.attr('selected', false);
				opcaoCEcodigo.attr('selected', false);
				$("#edit-perfil-estado option[value='RJ']").before(opcaoBAperfil);
				$("#edit-perfil-estado option[value='RJ']").before(opcaoCEperfil);
				$("#edit-codigo-estado option[value='RJ']").before(opcaoBAcodigo);
				$("#edit-codigo-estado option[value='RJ']").before(opcaoCEcodigo);
			}
		});
	});
		
    // No submit, se os valores ainda forem os do "title", ele atribui ''.
	if ($.browser.safari) {
		$('#apsa-imoveis-busca-avancada #edit-submit, #apsa-imoveis-busca-avancada-block #edit-submit, #apsa-imoveis-busca-simples-block #edit-submit').click(function() {
			if ($('#edit-area-construida').val() == $('#edit-area-construida').attr('title')) {
				$('#edit-area-construida').val('');
			}
			if ($('#edit-codigo').val() == $('#edit-codigo').attr('title')) {
				$('#edit-codigo').val('');
			}
			
			$.post("", $("#apsa-imoveis-busca-avancada, #apsa-imoveis-busca-avancada-block, #apsa-imoveis-busca-simples-block").serialize());
		});
	}
	$('#apsa-imoveis-busca-avancada, #apsa-imoveis-busca-avancada-block, #apsa-imoveis-busca-simples-block').submit(function() {
		if ($('#edit-area-construida').val() == $('#edit-area-construida').attr('title')) {
			$('#edit-area-construida').val('');
		}
		if ($('#edit-codigo').val() == $('#edit-codigo').attr('title')) {
			$('#edit-codigo').val('');
		}
	});
	
	/* PARTE DE LOCALIZAÇÃO DOS IMÓVEIS*/
	selectBairrosText = $('#select-bairros option').html();

	// Cria atributos de "cidade" e "estado" no select de cidades e nos checkboxes de bairro para facilitar a manipulação
	$('#edit-cidade option').each(function() {
		var value = $(this).val();
		$(this).attr('cidade', value.substr(0, value.indexOf("_")));
		$(this).attr('estado', value.substr((value.length - 2), value.length));
	});	
	$('#edit-cidade').change(function() { cidadesChange($(this)); });
	$('#bairros .form-checkboxes input').each(function() {
		var value = $(this).val();
		$(this).attr('bairro', value.substr(0, value.indexOf("_")));
		$(this).attr('cidade', value.substr((value.indexOf("_") + 1)));
	});	

	// Visualização dos bairros
	$('#bairros .form-checkboxes').prepend('<div class="loading"><img src="'+Drupal.settings.basePath+'sites/all/modules/apsa_imoveis/images/loading.gif" /></div><div class="fechar"><a id="bairros-prosseguir" href="#no-anchor"><span>&nbsp;</span>Selecionar &raquo;</a><a href="#no-anchor" id="bairros-cancelar"><span>&nbsp;</span>Cancelar</a></div>');
	$('#bairros .form-checkboxes').append('<div class="avise-me">Não encontrou seu Imóvel? <a href="#" id="avise-me-link">Clique aqui</a> e seja avisado quando houver disponibilidade</div>');
	
	$('#select-bairros').click(function(e) {
		if ($('#edit-cidade').val() != '') {
			$('#bairros .form-checkboxes > div').hide();
			$('#bairros .form-checkboxes div.loading').show();
			var query = 'transacao='+$("input[name='transacao']:checked").val();
			query += '&limite_valor='+((!$("select[name='limite_valor']").val()) ? '0' : $("select[name='limite_valor']").val());
			queryNaoEncontrado = '&valor='+((!$("select[name='limite_valor']").val()) ? '0' : $("select[name='limite_valor']").val());
			query += '&tipo='+$("select[name='tipo']").val();
			queryNaoEncontrado += '&tipo='+$("select[name='tipo'] option:selected").html();
			if ($("select[name='quartos']").size() > 0)
				query += '&quartos='+$("select[name='quartos']").val();
			if ($("select[name='vagas']").size() > 0)
				query += '&vagas='+$("select[name='vagas']").val();
			query += '&area_construida='+((isNaN(parseInt($("input[name='area_construida']").val()))) ? '0' : parseInt($("input[name='area_construida']").val()));
			query += '&perfil_estado='+$("select[name='perfil_estado']").val();
			query += '&cidade='+$("select[name='cidade'] option:selected").attr('cidade');
			var url = Drupal.settings.basePath+'imoveis/busca/bairros?'+query;
			$('#avise-me-link').attr('href', Drupal.settings.basePath+'imoveis/busca/resultado-nao-encontrado?'+query + queryNaoEncontrado);
			$.getJSON(url, function(data) {
				$("#bairros .form-checkboxes input[cidade='"+$("select[name='cidade'] option:selected").attr('cidade')+"']").each(function() {
					if ((data[$(this).val()])) {
						$(this).parent().show();
					} else {
						$(this).parent().hide();
					}
					$(this).parent().find('span').html((data[$(this).val()]) ? data[$(this).val()] : "*");
				});
				$('#bairros .form-checkboxes > div').show();
				$('#bairros .form-checkboxes > div.loading').hide();
			});
			$('#bairros .form-checkboxes').show();
			// Sanando bug do chrome ¬¬
			$(this).hide();
			$(this).blur();
			$(this).show();
		}
	});
	
	$('#bairros-prosseguir').click(function() {
		setBairrosOption();
		$('#bairros .form-checkboxes').hide(); 
	});
	$('#bairros-cancelar').click(function() { 
		$('#select-bairros option').html(selectBairrosText);
		$('#bairros .form-checkboxes input').each(function(i) {
			$(this).attr('checked', false);
		});
		$('#bairros .form-checkboxes').hide(); 
	});
	$('body').click(function(e) {
		if ($(e.target).attr('id') != 'select-bairros' && $('#bairros .form-checkboxes').css('display') == 'block') {
			setBairrosOption();
			$('#bairros .form-checkboxes').hide();
		}
	});
	$('#bairros .form-checkboxes').click(function(event){ event.stopPropagation(); });


    cidades = $('#edit-cidade').clone();
	// Desabilita as cidades e os bairros, obrigando o usuário a selecionar o estado primeiro
	// Exceto quando o estado ou a cidade já estão selecionados
	if ($('#edit-perfil-estado').val() == '') {
		$('#edit-cidade').attr('disabled', 'disabled');
		$('#select-bairros').attr('disabled', 'disabled');
	} else {
		$("#edit-cidade option[estado!='"+$('#edit-perfil-estado').val()+"']:not(':eq(0)')").remove();
	}
	if ($('#edit-cidade').val() == '') {
		$("input[name^='bairro']").parent().hide();
		$('#select-bairros').attr('disabled', 'disabled');
	} else {
		$("input[name^='bairro']").parent().hide();
		$("input[name^='bairro'][cidade='"+$('#edit-cidade option:selected').attr('cidade')+"']").parent().show();	
		setBairrosOption();
	}
	
    // Quando o estado muda...
	$('#edit-perfil-estado').change(function() { estadosChange($(this)); });
	// Fim das mudanças de estado, cidade e bairro.
	
	$('.tooltip').click(function(event) {
		return false;
	});
});

/**
 * Atribui como valor do input o conteúdo do seu atributo "title"
 * @param id id do input
 */
function setTitleAsValue(id) {
	try {
		if($('#'+id).val() == "") {
			$('#'+id).val($('#'+id).attr('title'));
		}
		$('#'+id).focus(function() {
			if ($(this).val() == $('#'+id).attr('title')) {
				$(this).val('');
			}
		}).blur(function() {
			if ($(this).val() == "" || isNaN(parseInt($(this).val()))) {
				$('#'+id).val($('#'+id).attr('title'));
			} else {
				$('#'+id).val(parseInt($(this).val()));
			}
		}).keyup(function() {
			$(this).val(((isNaN(parseInt($(this).val()))) ? '' : parseInt($(this).val())));
		});
	} catch (err) {}
}

function cidadesChange (object) {
	var cidade = $(object).val();
	$("input[name^='bairro']").parent().hide();
	$("#select-bairros option").html(selectBairrosText);
	if (cidade != "") {
		$('#select-bairros').removeAttr('disabled');
		$("input[name^='bairro'][cidade='"+$('#edit-cidade option:selected').attr('cidade')+"']").parent().show();
		$("input[name^='bairro']").each(function() {
			$(this).attr('checked', false);
		})
	} else {
		$('#select-bairros').attr('disabled', 'disabled');
	}
}

function estadosChange (object) {
	var estado = $(object).val();

	// Deleta as cidades que estão lá para usar a cópia.
	$('#edit-cidade').remove();
	// Habilita a cópia
	if (estado != '') {
		cidades.removeAttr('disabled');
	} else {
		cidades.attr('disabled', 'disabled');
		$("#edit-cidade option:not(':eq(0)')").remove();
	}
	
	// Quando a cidade muda...
	cidades.change(function() { cidadesChange($(this)) });
	// Coloca a cópia no lugar
	$('#edit-cidade-wrapper').append(cidades);
	$('#edit-cidade option').each(function() {
		var value = $(this).val();
		$(this).attr('cidade', value.substr(0, value.indexOf("_")));
		$(this).attr('estado', value.substr((value.length - 2), value.length));
	});	

	// Pega outra cópia
	cidades = $('#edit-cidade').clone();

	// Faz a mágica de sumir com as cidades que não correspondem ao estado, sem remover a primeira opção
	$("#edit-cidade option[estado!='"+estado+"']:not(':eq(0)')").remove();
	
	//
	$("input[name^='bairro']").each(function() {
		$(this).attr('checked', false);
	})
	$("#select-bairros option").html(selectBairrosText);
	$("#edit-cidade").find("option:eq(0)").attr('selected', 'selected');
	$('#select-bairros').attr('disabled', 'disabled');
}

function setBairrosOption() {
	var bairros = '';
	$('#bairros .form-checkboxes input').each(function(i) {
		if ($(this).is(':checked')) {
			bairros += ", "+$(this).attr('bairro');
		}
	});
	bairros = bairros.substr(2);
	if (bairros.length > 0)
		$('#select-bairros option').html(bairros);
}