/**
 * Script permettant d'ajouter la couche Ajax et de définir la méthode réalisant les appels Ajax
 * @warning ATTENTION, ce script est incompatible avec la version 2.00 et > du contrôleur Ajax
 */


/**
 * Code permettant dès la fin du chargement d'ajouter la couche Ajax pour les liens "a" contenant l'attribut f_ajax
 */
jQuery(function($) {
  $(function(){
    // L’arbre DOM est complètement chargé
    $("a[@f_ajax]").each(function(lien){
			$(this).bind("click", function(){
				$(this).attr('href', 'JavaScript:void(0);' );
				appelScriptAction($(this).attr('f_ajax'), this);
			});
		});
	});
});

var ajax_en_cours = new Array();

/**
 * Fonction a appeler pour déclencher une action distante
 *
 * @remarks L'alerte sur la requête en cours est désactivée car il n'espas nécessaire dans 
 * la majorité des cas d'en informer l'internaute tant qu'il a ce qu'il veut.
 *
 * @param string url_action URL encodée de l'action à réaliser
 * @param object cur_elt element du DOM déclenchant l'événement
 */
function appelScriptAction(url_action, cur_elt) {
	// test une requete Ajax identique (meme id) est en cours
	var ajax_en_cours_ir;
	var id_requete;

	// calcul de l'ID de la requête Ajax
	//id_requete = url_action.substr(url_action.length-20, 20);
	id_requete = url_action.replace(
		/[^a-zA-Z0-9]/g,
		function(match){
			return '';
		}
	);
	
	// Test si la requête est en cours
	if(ajax_en_cours[id_requete]){
		ajax_en_cours_ir = ajax_en_cours[id_requete];
	}else{
		ajax_en_cours_ir = 0;
	}
	if(ajax_en_cours_ir == 0){

		ajax_en_cours[id_requete] = 1;

		$.ajax({
			type: "GET",

			url: url_action,

			dataType: "json",

			beforeSend: function(xhr){
					avantEnvoiAction (xhr, cur_elt, id_requete);
				},

			complete: function(xhr, msg){
					ajax_en_cours[id_requete] = 0;
					apresTraiteRetourAction(xhr, msg, id_requete);
				},

			success: function(json){
					traiteRetourAction (json);
				},

			error: function (xhr, msg, exception){
					if(xhr.status != 200) {
						traiteRetourErreur (xhr, msg, exception);
					}
				}
		});
	} else{
		//alert("Attention : Une requête est en cours, veuillez patienter !\n");
	}
}
