$(document).ready(function(){

	//
	// configuração geral do ajax
	//
	$.ajaxSetup({
		error:function(x,e){
			if(x.status==0){
			alert('Está sem rede!!\n Por favor verifique a sua ligação de rede.');
			}else if(x.status==404){
			alert('O URL pedido não foi encontrado.');
			}else if(x.status==500){
			alert('Erro Interno no Servidor.');
			}else if(e=='parsererror'){
			alert('Erro.\nO tratamento do XML falhou.');
			}else if(e=='timeout'){
			alert('O Pedido expirou.');
			}else {
			alert('Erro Desconhecido.\n'+x.responseText);
			}
		}
	});

	//
	// menu ou ligação para outro conteúdo
	//
	$("a:not([target])").live("click",function(){
		var href = $(this).attr("href");
		// testar se a ligação inclui uma página ou se apenas tem parâmetros
		if($(this).attr("href").indexOf("?")>0) {
			// a referência inclui uma página
			// abrir nova janela com essa página
			window.open('http://localhost/cbk/'+href,'_newtab');
			return false;
		} else {
			// obter parâmetros para preparar chamada ajax
			var href = $(this).attr("href").substring(1, $(this).attr("href").length); // retirar caracter "?" do URL
			var aba = href.search(/aba=/);
			var grupo = href.search(/grupo=/);
			var menu = href.search(/menu=/);
			var atividade = href.search(/atividade=/);
			var fotos = href.search(/fotos=/);
			// testar se foi um clique num menu principal
			if(grupo==-1 && menu==-1 && atividade==-1 && fotos==-1) {
				// atualizar menu principal
				$("li.current").removeClass("current");
				$(this).parent().addClass("current");
				// atualizar menu secundário
				$("div.visivel[name=menu]").addClass("oculto");
				$("div.visivel[name=menu]").removeClass("visivel");
				$("div.visivel[name^=right_]").addClass("oculto");
				$("div.visivel[name^=right_]").removeClass("visivel");
				var target = "#menu_"+$(this).find("span").text();
				target = target.replace(/ /g,"_");
				$(target).removeClass("oculto");
				$(target).addClass("visivel");
				target = "[name^=right_"+$(this).find("span").text()+"]";
				target = target.replace(/ /g,"_");
				$(target).removeClass("oculto");
				$(target).addClass("visivel");
			}
			carregarDados(href,"#conteudo",true);
			// cancelar a operação de clique do anchor
			return false;
		}
	});

	// forms
    $("form").live("submit", function() { return false; });
	// submeter dados
	$("input[name=submit]").live("click", function() {
		var $form = $(this).parents("form");
		var params = $form.serialize();
		var erros = false;
		// obter parâmetros
        var formdata = $form.attr("action").substring(1, $form.attr("action").length) +
						"&" + $form.serialize() +
						"&submit=" + encodeURI($(this).attr("value"));
		carregarDados(formdata,"#conteudo",true);
		// cancelar a operação de submit do form
        return false;
    });
	// cancelar submissão
	$("input[name=cancelar]").live("click", function() {
		var $form = $(this).parents("form");
		var params = $form.serialize();
		var erros = false;
		// obter parâmetros
        var formdata = $form.attr("action").substring(1, $form.attr("action").length) +
						"&" + $form.serialize() +
						"&submit=" + encodeURI($(this).attr("value"));
		carregarDados(formdata,"#conteudo",true);
		// cancelar a operação de submit do form
        return false;
    });
	// alterar submissão
	$("input[name=alterar]").live("click", function() {
		var $form = $(this).parents("form");
		var params = $form.serialize();
		var erros = false;
		// obter parâmetros
        var formdata = $form.attr("action").substring(1, $form.attr("action").length) +
						"&" + $form.serialize() +
						"&submit=" + encodeURI($(this).attr("value"));
		carregarDados(formdata,"#conteudo",true);
		// cancelar a operação de submit do form
        return false;
    });
	// tratar clique da escolha da opção de inscrição
	$("[type=radio],select").live("click", function() {
		var LEVEL_SEPARATOR = "-";
		var $input_name = $(this).attr("name");
		$this_children = $input_name.replace(/(:|\.)/g,'\\$1');
		// desativar todas as opções dos níveis abaixo
		$("[name^="+$this_children+"]").not("[name="+$this_children+"]").each( function() {
			if($(this).attr("type")=="radio" || $(this).attr("type")=="checkbox") {
				$(this).removeAttr("checked");
				$(this).attr("disabled","disabled");
			} else if($(this).attr("type")=="text" || $(this).get(0).tagName=="textarea") {
				$(this).val("");
				$(this).attr("disabled","disabled");
			}
		});
		// ativar as opções do nível atual
		$this_children = $input_name+$(this).val()+LEVEL_SEPARATOR;
		$this_children = $this_children.replace(/(:|\.)/g,'\\$1');
		$("[name^="+$this_children+"]").removeAttr("disabled");
		// verificar se este campo influencia o cálculo das quantias
		var $calculations = $(this).parents(".calculations");
		if ($calculations.length) {
			var $form = $(this).parents("form");
			atualizarQuantias($form.serialize());
		}
	});
	$("[type=checkbox]").live("click", function() {
		var LEVEL_SEPARATOR = "-";
		var $input_name = $(this).attr("name");
		var $this_children = $input_name+LEVEL_SEPARATOR;
		$this_children = $this_children.replace(/(:|\.)/g,'\\$1');
		if ($(this).is(':checked')) {
			// ativar as opções do nível atual
			$("[name^="+$this_children+"]").removeAttr("disabled");
		} else {
			// desativar todas as opções dos níveis abaixo
			$("[name^="+$this_children+"]").not("[name="+$this_children+"]").each( function() {
				if($(this).attr("type")=="radio" || $(this).attr("type")=="checkbox") {
					$(this).removeAttr("checked");
					$(this).attr("disabled","disabled");
				} else if($(this).attr("type")=="text" || $(this).get(0).tagName=="textarea") {
					$(this).val("");
					$(this).attr("disabled","disabled");
				}
			});
			/*$("input[type=radio][name^="+$this_children+"]").removeAttr("checked");
			$("input[type=checkbox][name^="+$this_children+"]").removeAttr("checked");
			$("input[type=text][name^="+$this_children+"]").val("");
			$("textarea[name^="+$this_children+"]").val("");
			$("[name^="+$this_children+"]").attr("disabled","disabled");*/
		}
		var $calculations = $(this).parents(".calculations");
		if ($calculations.length) {
			var $form = $(this).parents("form");
			atualizarQuantias($form.serialize());
		}
	});
/*		if($(this).attr("value")=="full") {
			// desativar pacotes
			$("input[type=checkbox][name*=booking_type\\/option\\/partial\\/option\\#]").removeAttr("checked");
			$("input[type=checkbox][name*=booking_type\\/option\\/partial\\/option\\#]").attr("disabled","disabled");
			$("input[type=radio][name=pacote_opcao]").removeAttr("checked");
			$("input[type=radio][name=pacote_opcao]").attr("disabled","disabled");
			// seleccionar todas as sessões
			$("input[type=checkbox][name*=sessao_]").attr("checked","checked");
			$("input[type=checkbox][name*=sessao_]").attr("disabled","disabled");
			// atualizar quantias
			apagarQuantias();
			var $form = $(this).parents("form");
			atualizarQuantias($form.serialize());
		} else if($(this).attr("value")=="partial") {
			// ativar pacotes
			$("input[type=checkbox][name*=booking_type\\/option\\/partial\\/option\\#]").removeAttr("disabled");
			$("input[type=radio][name=pacote_opcao]").removeAttr("disabled");
			// eliminar seleção de todas as sessões
			$("input[type=checkbox][name*=sessao_]").removeAttr("checked");
			$("input[type=checkbox][name*=sessao_]").attr("disabled","disabled");
			apagarQuantias();
		} else if($(this).attr("value")=="individual") {
			// desativar pacotes
			$("input[type=checkbox][name*=booking_type\\/option\\/partial\\/option\\#]").removeAttr("checked");
			$("input[type=checkbox][name*=booking_type\\/option\\/partial\\/option\\#]").attr("disabled","disabled");
			// permitir seleccionar sessões
			$("input[type=checkbox][name*=sessao]").removeAttr("checked");
			$("input[type=checkbox][name*=sessao]").removeAttr("disabled");
			apagarQuantias();
		}
	});*/
	// tratar clique da escolha de pacotes
/*	$("input[name*=pacote_]").live("click", function() {
		$("input[type=checkbox][name*=sessao]").removeAttr("checked");
		$("input[name*=pacote_]").each( function() {
			sessoes = $(this).attr("sessoes").split(",");
			if($(this).attr("checked")=="checked") {
				$.each(sessoes, function(index, value) {
					$("input[type=checkbox][name=sessao_"+value+"]").attr("checked","checked");
				});
			}
		});
		var $form = $(this).parents("form");
		atualizarQuantias($form.serialize());
	});
	// tratar clique da escolha de sessões
	$("input[name*=sessao_]").live("click", function() {
		var $form = $(this).parents("form");
		atualizarQuantias($form.serialize());
	});
	// tratar clique da escolha de formas de pagamento
	$("input[type=radio][name=pagamentos]").live("click", function() {
		$("[name*=pagamento_]").removeClass("visivel");
		$("[name*=pagamento_]").addClass("oculto");
		$("[name*=pagamento_"+$(this).attr("value")+"]").removeClass("oculto");
		$("[name*=pagamento_"+$(this).attr("value")+"]").addClass("visivel");
	});*/
});

// funções de apoio
function atualizarQuantias(param) {
	if ($("[name=quantias]").length){
		carregarDados(param,"[name=quantias]",false);
	}
}
function apagarQuantias() {
	$("[name*=quantias_]").html("");
}
function carregarDados(param,campo,scroll) {
	// Chamada original que não funciona com o IE
	// http://stackoverflow.com/questions/3290856/ajax-working-in-firefox-but-not-in-ie
/*	$.ajax({
		type: "GET",
		url: "http://www.meditar.org/index.php",
		contentType: "application/xml; charset=utf-8", 
		data: "js&"+param,
		dataType: "xml",
		success: function(xml) { 
			parseXml(xml,campo);
		}
	});*/
	$.ajax({
		type: "GET",
		url: "http://www.meditar.org/index.php",
		contentType: "application/xml; charset=utf-8", 
		data: "js&"+param,
		dataType: ($.browser.msie) ? "text" : "xml",
		success: function(data) { 
			var xml;
			//
			// início do código para evitar o Bug do parse XML no IE com o ajax do jQuery
			if (typeof data == "string") {
				xml = new ActiveXObject("Microsoft.XMLDOM");
				xml.async = false;
				xml.loadXML(data);
			} else {
				xml = data;
			}
			// fim do código
			//
			parseXml(xml,campo,scroll);
		}
	});
}
function parseXml(xml,campo,scroll) {
	$(campo).html($(xml).children("html").text());
	if(scroll)
		window.scrollTo(0,0);
}

