function setup_links() {
	// Unbinding events for reentrant calls
	$('a.ajax_link').unbind('click');
	$('a.dialog_link').unbind('click');
	$('.close_parent').unbind('click');
	$('form.ajax_get_page_form').unbind('submit');
		
	$('a.ajax_link').click(function(e) {
		//alert('ajax_link');
		var link_element = $(this);
		var url = link_element.attr('href') + '&ajax=1';
		var target = link_element.attr('target');
		if (target == "")
			target = "contenu_ajax";
		var funcName = link_element.attr('callback_function');
		var func = (funcName == '') ? null : eval(funcName);
		//aff_loader();
		//alert('url: '+url);
		$('#' + target).load(url, "", function(responseText, textStatus, XMLHttpRequest) {
											   setup_links();
											   if (func != null) func();
												emptyMessage();
										});
		//alert('ajax_link_return');
		return false;
	});

	// Setting up dialog links
	$('a.dialog_link').click(function(e) {
		//aff_loader();
		var link_element = $(this);
		var url = link_element.attr('href') + '&ajax=1';
		var funcName = link_element.attr('callback_function');
		var func = (funcName == 'undefined') ? null : eval(funcName);
		var dialogTitle = $.trim(link_element.attr('title'));
		if (dialogTitle.length == 0)
			dialogTitle = $.trim(link_element.text());
			
		$('#dialog').dialog('destroy');
		$('#dialog').dialog({ autoOpen: false,
							  bgiframe: true,
							  modal: true,
							  title: dialogTitle,
							  width: 600,
							  buttons: { "Valider": function() {
														var form = $(this).find('form');
														
														var callback = function(data, textStatus) {
																var jsonData = $.evalJSON(data);
																
																if (handleJSONResponse(jsonData) && func != null)
																	func(link_element, jsonData, textStatus);
														}
														
														$('#dialog').dialog('destroy');
														if (form.attr('method') == 'post')
															$.post(form.attr('action'), form.serialize(), callback);
														else
															$.get(form.attr('action'), form.serialize(), callback);
												} }
							});
		
		$('#dialog').load(url, null, function(responseText, textStatus, XMLHttpRequest) {
					setup_links();
					$('#dialog').find('form').submit(function() { return false; });
											  
					if (textStatus == "success")
						$('#dialog').dialog('open');
			});
		return false;
	});
	
	$('.close_parent').click(function(e) {
		//aff_loader();
		$(this).parent().hide('slow');
		return false;
	});
	
	$('form.ajax_get_page_form').submit(function(e) {
		//aff_loader();
		var form_element = $(this);
		var action = form_element.attr('action');
		var target = form_element.attr('target');
		if (target == "")
			target = "contenu_ajax";
		$.get(action, form_element.serialize() + "&ajax=1", function (data, textStatus) {
													$('#' + target).html(data);
													setup_links();
												});
		return false;
	});
}

function showErrors() {
	$('#errors').show();
}

function pushError(errString) {
	errString = $.trim(errString);
	if (errString.length == 0)
		return;
	
	showErrors();
	$('#errors_list').append('<li>' + errString + '</li>');
}

function emptyErrors() {
	$('#errors').hide();
	$('#errors_list').empty();
}

function pushMessage(text){
	if(text!=""){
		$('#message').append(text);
		//alert ('pushMessage');
		showMessage();
	}
}

function showMessage() {
	$('#message_div').show();
}

function showNotifications() {
	$('#notifications').show();
}

function pushNotification(notificationString) {
	notificationString = $.trim(notificationString);
	if (notificationString.length == 0)
		return;
	
	showNotifications();
	$('#notifications_list').append('<li>' + notificationString + '</li>');
}

function emptyMessage() {
	//alert('emptyMessage');
	$('#message_div').hide();
	$('#message').empty();
}

/*function emptyMessageEntete(){
	if (document.getElementById('message').innerHTML != '')
		document.getElementById('message').innerHTML = '';
}*/

function emptyNotifications() {
	$('#notifications').hide();
	$('#notifications_list').empty();
}

function toggleVisibility(id) {
	$(id).toggleClass('invisible');
}

function aff_loader(){
	//alert (document.getElementById('loader').style.display);
	document.getElementById('loader').style.display = 'block';
}
function hide_loader(){
	document.getElementById('loader').style.display = 'none';
}


function handleJSONResponse(jsonData) {
	emptyNotifications();
	emptyErrors();
	emptyMessage();
	pushMessage(jsonData.retour[1]);
	
	if (jsonData.retour[0]){
		//hide_loader();
		$.each(jsonData.notifications, function(i, item) { pushNotification(item); });
	}
	else{
		//hide_loader();
		$.each(jsonData.errors, function(i, item) { pushError(item); });
	}
	return jsonData.retour[0];
}

$(function() {
	setup_links();
	$.ajaxSetup ( { 'beforeSend' : function(xhr) { xhr.overrideMimeType('text/html; charset=ISO-8859-1'); } } );
} ) ;
