/**
 * Script permettant d'ajouter la couche Ajax et de définir la méthode réalisant les appels Ajax
 */

/**
 * Code permettant de reparcourir le DOM pour checker s'il y a des lien ajax multipage
 * fonction appelée après la recherche de personnes, lorsque le multipage est chargé
 */

function reload_listener_multipage_personne(){
	// Multipage personnes
	$("a[@f_ajax_multipage_membre]").each(function(){
			$(this).bind("click", function(event){
    			event.preventDefault();
    			// appel du script action
    			// alert('appel');
			appelScriptAction($(this).attr('f_ajax_multipage_membre'), this,'MultipagePersonne');
		});
	});
}

function reload_listener_multipage_groupe(){
	// Multipage personnes
	$("a[@f_ajax_multipage_groupe]").each(function(){
			$(this).bind("click", function(event){
    			event.preventDefault();
    			// appel du script action
    			// alert('appel');
			appelScriptAction($(this).attr('f_ajax_multipage_groupe'), this,'MultipageGroupe');
		});
	});
}

function bind_groupe_utilisateur_desinscription() {
	// Désinscription
	$("a[@f_ajax_desinscription_groupe]").each(function(){
			$(this).unbind();
			$(this).bind("click", function (event){
    			event.preventDefault();
    			// appel du script action
				if(confirm("Etes-vous sûr de vouloir vous désinscrire de ce groupe ?")) {
					appelScriptAction($(this).attr('f_ajax_desinscription_groupe'), this,'DesinscriptionGroupe');
				}
		});
	});
}

/*
function bind_groupe_utilisateur_description() {
	// Modification  de la description
	$("a[@f_ajax_modifier_description]").each(function(){
    		$(this).bind("click", function(event){
    			event.preventDefault();
    			var url_temp = $(this).attr('f_ajax_modifier_description');
    			var id_textarea = "desc_"+$(this).attr("f_info");
    			var reference_mavie_passion = "reference_passion_"+$(this).attr("f_info");
				//var descrp = $("#"+id_textarea).val();
				var descrp = $("#"+id_textarea).val().replace(/\n/g,'<br>');
				//descrp = encodeURIComponent(descrp);
				
				//descrp = descrp.replace(/<br>/g,
				// On vire ce qu'il y a après le 1er & pour nettoyer l'url
				var id_passion = $("#"+reference_mavie_passion).val();
				var index_eperluette = url_temp.indexOf('&');
				if (index_eperluette != -1) {
					url_temp = url_temp.substring(0,url_temp.indexOf('&'));
				}
				var url_complete = url_temp+'&f_description='+descrp+'&reference_mavie_id_passion='+id_passion;
				$(this).attr('f_ajax_modifier_description',url_complete);
    			descrp = '';
    			id_textarea = '';
    			index_eperluette = '';
    			url_temp = '';
    			appelScriptAction($(this).attr('f_ajax_modifier_description'), this,'ModifierDescriptionGroupe');
		});
	});
}
*/

function valide_une_lettre(lettre){
	// on enleve le gras sur toutes les lettres...
	for(code_ascii = 65; code_ascii <= 90; code_ascii++){
		lettre_en_cours = String.fromCharCode(code_ascii);
		$('#formulaire_grouperecherchepersonne_complet #lien_lettre_'+lettre_en_cours).removeClass('passion_liste_personne_premiere_lettre_selectionnee');
	}
	
	if(lettre == 'TOUS'){
		// on ajoute le gras sur "TOUS"
		$('#formulaire_grouperecherchepersonne_complet #lien_lettre_TOUS').addClass('passion_liste_personne_premiere_lettre_selectionnee');
		// on met la valeur à vide pour la mise à jour des input hidden ci-dessous
		lettre = '';
	}else{
		// on enleve le gras sur "TOUS"
		$('#formulaire_grouperecherchepersonne_complet #lien_lettre_TOUS').removeClass('passion_liste_personne_premiere_lettre_selectionnee');
		// on met en gras la lettre selectionnée
		$('#formulaire_grouperecherchepersonne_complet #lien_lettre_'+lettre).addClass('passion_liste_personne_premiere_lettre_selectionnee');
	}

	// on met la valeur de la lettre dans les input hidden des deux formulaires
	$('#formulaire_grouperecherchepersonne_complet #f_lettre').val(lettre);
	$('#formulaire_grouperecherchepersonne_leger #f_lettre').val(lettre);
}

function Remplace(expr,a,b) {
	var i=0
	while (i!=-1) {
	   i=expr.indexOf(a,i);
	   if (i>=0) {
	      expr=expr.substring(0,i)+b+expr.substring(i+a.length);
	      i+=b.length;
	   }
	}
	return expr
}

function appel_recherche_personne(objet_lien, type_recherche, type_lien){
	
	id_formulaire = "formulaire_grouperecherchepersonne_"+type_recherche;
	if(type_lien){
		nom_attribut_ajax = "f_ajax_grouperecherchepersonne_complet";
	}else{
		nom_attribut_ajax = "f_ajax";
	}
	
	
	id_champ_id_formulaire = $("#"+id_formulaire+" #f_id_formulaire").val();
	
	id_champ_id_ville = "f_id_ville_" + id_champ_id_formulaire;
	id_champ_libelle_ville = "f_localisation_" + id_champ_id_formulaire;
	
	recherche_nom = $("#"+id_formulaire+" #f_nom").val();
	recherche_prenom = $("#"+id_formulaire+" #f_prenom").val();
	recherche_ordre_de_tri = $("#"+id_formulaire+" #f_ordre_de_tri").val();
	
	recherche_id_departement = $("#"+id_formulaire+" select[@name=f_id_departement] option[@selected]").val();
	recherche_libelle_ville = $("#"+id_formulaire+" #"+id_champ_libelle_ville).val();
	recherche_id_ville = $("#"+id_formulaire+" #"+id_champ_id_ville).val();
	// pour le cas où on n'a pas fait de recherche ajax --> id_ville_X non défini
	if(recherche_id_ville === undefined){
	     recherche_id_ville = '';
	}

	// on donne les valeurs saisies à l'autre formulaire
	if(type_recherche == 'leger'){
		type_recherche_inverse = 'complet';
	}else{
		type_recherche_inverse = 'leger';
	}
	id_formulaire_inverse = "formulaire_grouperecherchepersonne_"+type_recherche_inverse;
	id_champ_id_formulaire_inverse = $("#"+id_formulaire_inverse+" #f_id_formulaire").val();
	id_champ_id_ville_inverse = "f_id_ville_" + id_champ_id_formulaire_inverse;
	id_champ_libelle_ville_inverse = "f_localisation_" + id_champ_id_formulaire_inverse;
	
	$("#"+id_formulaire_inverse+" #f_nom").val(recherche_nom);
	$("#"+id_formulaire_inverse+" #f_prenom").val(recherche_prenom);

	$("#"+id_formulaire_inverse+" #"+id_champ_libelle_ville_inverse).val(recherche_libelle_ville);
	$("#"+id_formulaire_inverse+" #"+id_champ_id_ville_inverse).val(recherche_id_ville);
	
	 // on recupere le contenu généré par le bloc ville
	 contenu_bloc_ville = $("#"+id_formulaire+" #localisation_"+id_champ_id_formulaire).html();
	 // remplacement des valeurs
	 if(contenu_bloc_ville != null){
	 	contenu_bloc_ville = Remplace(contenu_bloc_ville,id_champ_id_ville, id_champ_id_ville_inverse);
		 // on le set dans l'autre formulaire
		 $("#"+id_formulaire_inverse+" #localisation_"+id_champ_id_formulaire_inverse).html(contenu_bloc_ville);
		 $("#"+id_formulaire_inverse+" #localisation_"+id_champ_id_formulaire_inverse).show();
	 }
	
	// maj du departement dans le 'autre formulaire
	if (recherche_id_departement != null) {
	    $("#"+id_formulaire_inverse+" select[@name=f_id_departement]").selectOptions(recherche_id_departement);
	}else{
		alert('dept : '+id_formulaire_inverse);
	    $("#"+id_formulaire_inverse+" select[@name=f_id_departement]").get(0).selectedIndex = 0;
	}

	// tranche age : seulement dans le cas du formulaire complet
	if(type_recherche == 'complet'){
		recherche_tranche_age = $("#"+id_formulaire+" select[@name=f_flag_tranche_age] option[@selected]").val();
		$('#formulaire_grouperecherchepersonne_leger #f_flag_tranche_age').val(recherche_tranche_age);
	}else{
		recherche_tranche_age = $('#formulaire_grouperecherchepersonne_leger #f_flag_tranche_age').val();
	}

	// lettre
	nom_attribut_f_lettre = 'f_lettre';
	longueur_attribut_f_lettre = nom_attribut_f_lettre.length;
	
	url_recherche = $(objet_lien).attr(nom_attribut_ajax);
	position_f_lettre = url_recherche.indexOf(nom_attribut_f_lettre);
	if(position_f_lettre > 0){
		// lettre déja specifiée dans url (lien sur une lettre dans formulaire complet)
		critere_recherche_lettre = '';
		longueur_min = position_f_lettre + longueur_attribut_f_lettre + 1;
		// recuperation de la valeur de la lettre
		if(url_recherche.length > longueur_min){
			lettre = url_recherche.charAt(longueur_min);
			valide_une_lettre(lettre);
			// on a cliqué sur une lettre --> on enleve la valeur dans l'input texte nom
			recherche_nom = '';
			$("#formulaire_grouperecherchepersonne_leger #f_nom").val('');
			$("#formulaire_grouperecherchepersonne_complet #f_nom").val('');
		}else{
			valide_une_lettre('TOUS');
		}
	}else{
		// lettre non specifiée dans url --> on la recupere dans le champ hidden du formulaire
		critere_recherche_lettre = '&f_lettre=' + $("#"+id_formulaire+" #f_lettre").val();
		
	}
	
	if(recherche_nom.length > 0){
		valide_une_lettre('TOUS');
	}
	
      mon_url = url_recherche
      	+ '&f_nom=' + recherche_nom
      	+ '&f_prenom=' + recherche_prenom
      	+ '&f_ordre_de_tri=' + recherche_ordre_de_tri
      	+ '&f_id_ville=' + recherche_id_ville
      	+ '&f_id_departement=' + recherche_id_departement
      	+ '&f_libelle_ville=' + recherche_libelle_ville
      	+ '&f_flag_tranche_age=' + recherche_tranche_age
      	+ critere_recherche_lettre;

	appelScriptAction(mon_url, $("#"+id_formulaire+" #bouton_valider"),'RechercheGroupePersonne');

}

/**
 * Validation du formulaire de recherche
 * @param id_formulaire
 * @param int type_recherche : 1=recherche sur libelle_groupe uniquement / 2=recherche sur libelle groupe, nom et prenom
 */
function verifierSaisieRechercheGroupe(id_formulaire, id_message_erreur, type_recherche){

	libelle_groupe = $("#"+id_formulaire+" #f_libelle_groupe").val();
	if(type_recherche == 2){
		nom_personne = $("#"+id_formulaire+" #f_nom_personne").val();
		prenom_personne = $("#"+id_formulaire+" #f_prenom_personne").val();
		libelle_ville = $("#"+id_formulaire+" #f_libelle_ville").val();
		libelle_etablissement = $("#"+id_formulaire+" #f_libelle_etablissement").val();
		vide = (nom_personne.length < 2) && (prenom_personne.length < 2) && (libelle_groupe.length < 2) && (libelle_ville.length < 2) && (libelle_etablissement.length < 2);
	}else{
		vide = (libelle_groupe.length < 2);
	}
		
	if(vide){
		$("#"+id_message_erreur).show();
		return false;
	}else{
		$("#"+id_message_erreur).hide();
		return true;
	}
}

/**
 * Code permettant dès la fin du chargement d'ajouter la couche Ajax pour les liens "a" contenant l'attribut f_ajax
 */
jQuery(function($) {
	
  	// Inscription
	$("a[@f_ajax_inscription_groupe]").each(function(){
    		$(this).bind("click", function(event){
    			event.preventDefault();
    			appelScriptAction($(this).attr('f_ajax_inscription_groupe'), this,'InscriptionGroupe');
		});
	});
	// Inscription (annulation)
	$("a[@f_ajax_inscription_annulation_groupe]").each(function(){
    		$(this).bind("click", function(event){
    			event.preventDefault();
    			appelScriptAction($(this).attr('f_ajax_inscription_annulation_groupe'), this,'InscriptionGroupeAnnulation');
		});
	});

	// recherche sur liste de membres leger
	$("#form_recherche_1").bind("submit", function(event){
		// desactive la validation du formulaire
		event.preventDefault();
		// appel du script action
		appel_recherche_personne(this, 'leger', false);

	});

	// recherche sur liste de membres complet
	$("#form_recherche_2").bind("submit", function(event){
		// desactive la validation du formulaire
		event.preventDefault();
		// appel du script action
		appel_recherche_personne(this, 'complet', false);

	});

	// recherche sur liste de membres sur clic sur les lettres
	$("a[@f_ajax_grouperecherchepersonne_complet]").each(function(){
    		$(this).bind("click", function(event){
    			appel_recherche_personne(this, 'complet', true);
		});
	});

	// bloc recherche personne/groupe en colonne de droite
	$("#bloc_rechercherapide").bind("submit", function(event){
		return verifierSaisieRechercheGroupe('bloc_rechercherapide','message_erreur_rechercherapide_groupe',2);
	});

	// bloc recherche sur groupes dans corps de page (liste de groupes, page categorie, page groupe proche)
	$("#recherche_groupe").bind("submit", function(event){
		return verifierSaisieRechercheGroupe('recherche_groupe','message_erreur_recherche_groupe',1);
	});
	
	// bloc recherche personne/groupe dans corps de page de recherche
	$("#bloc_rechercherapide_page").bind("submit", function(event){
		return verifierSaisieRechercheGroupe('bloc_rechercherapide_page','message_erreur_rechercherapide_groupe_page',2);
	});

	// Désinscription
	bind_groupe_utilisateur_desinscription();
	
	// Multipage personne
	reload_listener_multipage_personne();
	// Multipage groupe
	reload_listener_multipage_groupe();

});

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
 * @param string type_action ...
 */
function appelScriptAction(url_action, cur_elt, type_action) {
	// test une requete Ajax identique (meme id) est en cours
	var ajax_en_cours_ir;
	var id_requete;
	var url_action_tronquee;

	// 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, type_action);
				},

			complete: function(xhr, msg){
					ajax_en_cours[id_requete] = 0;
					apresTraiteRetourAction(xhr, msg, id_requete);
				},

			success: function(json){
					eval('traiteRetourAction'+type_action+'(json)');
				},

			error: function (xhr, msg, exception){
					if(xhr.status != 200) {
						traiteRetourErreur (xhr, msg, exception);
					}
				}
		});
		
		// On retourne false pour ne pas valider le formulaire
		return false;
		
	} else{
		//alert("Attention : Une requête est en cours, veuillez patienter !\n");
	}
}
