/**
 * Objet de gestion des résolutions
 *
 * @author Arnaud De Bock <debock@benchmark.fr>
 * @package parcours
 * @subpackage html_include
 * @version 1.00
 * @since 1.00 - 09/01/2009 Arnaud De Bock <debock@benchmark.fr> Création du fichier
 *
 * @note en cours de création
 *
 */

if(typeof benchmark == "undefined") var benchmark = new Object();

/**
 * Constructeur de l'objet ObjGestionResolution
 */
benchmark.ObjGestionResolution = function() {
	//alert("constructeur");
	/**#@+
	 * @var int Nombre d'appel ajax lancé pour le bloc 'autre'
	 * dans le formulaire de dépose de caractère
	/**#@-*/
	this.nb_bloc_appel_ajax = 0;
	this.nb_bloc_resolution = 0;
	this.liste_note = new Array;
}

/**
 * Méthodes publiques de l'objet ObjGestionResolution
 */
benchmark.ObjGestionResolution.prototype = {

	/**
	 * Affiche le bloc 'monresolution' sur la home et la fiche membre
	 * Masque le loading
	 */
	afficheResolution: function() {
		$("#resolution #bloc_contenant_resolution").show();
		$("#resolution #loading_resolution").hide();
	},

	/**
	 * Affiche le bloc action de 'monresolution' sur la home
	 */
	afficheActionResolution: function() {
		$("#resolution #detail_action_resolution").show();
		
	},

	/**
	 * Initialisation des actions concernant le bloc 'monresolution' sur la home et la fiche membre
	 */
	initialiseResolution: function () {
	
		
		// Conservation de la référence de l'objet
		var refObjet = this;
		
		// Comptage du nombre de bloc à l'aide d'une variable globale (afin de mettre un message lorsqu'il n'y a plus de caractère)
		this.nb_bloc_resolution = 0;
		$(".objnote_resolution").each(
			function(){
				refObjet.nb_bloc_resolution ++;
			}
		);
		
		// Boucle sur tous les liens de classe modifier_note dans le bloc #ajouter_resolution
		$("#resolution .modifier_note").each(
			function(){
				$(this).bind("click",
					function(evt) {
						refObjet.afficheFormulaireResolution(false);
					}
				);
			}
		);
		
		// Boucle sur tous les liens de classe supprimer_note dans le bloc #ajouter_resolution
		$("#resolution .supprimer_note").each(
			function(){
				$(this).bind("click",
					function(evt) {
						
						// Récupération des information
						var tableau= this.name.split("::");
						var id_resolution = tableau[0];
						var id_liaison = tableau[1];
						var url_action = $(this).attr('href');
		
						// Remplacement du bloc action par un loading
						bloc_action = $('#action_note_'+id_resolution+'_'+id_liaison)
						bloc_action.html('<img class="feed_attente" src="/framework/lib/js/image/chargement.gif" />');				
									
						// Modification du style de la ligne
						$("#objnote_resolution_"+id_resolution).addClass('objnote_supprime');
						
						var tableau = url_action.split('?f_action='); 
						
						var url_action = tableau[0];
						var f_action = tableau[1];
							
						// ObjUrl
						if(url_action == 'javascript:void(0);') {
							url_action = "/cgi/resolution/suppression_home.norevue.php?f_id_liaison="+id_liaison;
							$(this).load(url_action,
								function(data) {
									refObjet.suppressionLigne(id_resolution);
								}
							);
						}
						
						// Contrôleur ajax
						else {
							jQuery.post( url_action,{'f_action':f_action},
							function(data){
								if(data.code_retour == 1) {
									refObjet.suppressionLigne(id_resolution);
								}
							},"json"
						);
						}

						return false;
		
					}
				);
			}
		);
						
		// Action sur le lien ajouter_resolution
		$(".module_lien_bas #ajouter_resolution").bind("click",
			function(evt) {	
				//$("#bloc_contenant_formulaire_resolution").remove();			
				//
				
				if(refObjet.nb_bloc_appel_ajax>0) {
					refObjet.ajouterResolution();				
				}
				else {
					refObjet.afficheFormulaireResolution(true);
				}
			}
		);
		
		// Action sur le lien modifier_resolution
		$(".module_lien_bas #modifier_resolution").bind("click",
			function(evt) {
				$("#bloc_contenant_formulaire_resolution").remove();
				refObjet.afficheFormulaireResolution(false);
			}
		);
		
		// Réinitialise l'ensemble des actions sur les blocs
		if(typeof(objNote)!='object') var objNote = new benchmark.ObjNote();
		objNote.initialiseListeObjNote();
			
		
	},

	/**
	 * Fonction à lancer lorsqu'une ligne a bien été supprimé
	 * 10/02/2008 Arnaud De Bock <debock@benchmark.fr>
	 */
	suppressionLigne: function(id_resolution) {
	
		// On désincrémente le nb caractère saisi
		this.nb_bloc_resolution --;
		// Si aucun bloc, affichage du message 
		if(this.nb_bloc_resolution==0){
			$("#objnote_resolution_"+id_resolution).hide();
			$("#bloc_contenant_resolution").html('<p style="margin:10px;font-weight:bold;">Vous n\'avez saisi aucune résolution.</p>');
		}
		else {
			 // Suppression du bloc lié au caractère
			$("#objnote_resolution_"+id_resolution).remove();
		}
		
		// Réinitialisation des couleurs paires et impaires
		this.reinitialiseCouleurResolution();
		
		// Mise à jour des feeds
		if(typeof(objGestionFeed)=='object') {
			objGestionFeed.reinitialiseBlocFeed();
		}
	},

	/**
	 * Ré-initialisation des couleurs paires et impaires
	 */
	reinitialiseCouleurResolution: function() {
		
		// Boucle sur tous les liens de classe modifier_note dans le bloc #ajouter_resolution
		var indice = 0;
		var classe_impaire = 'objnote_impair';
		var classe_paire = 'objnote_pair';
		
		$("#resolution .objnote_resolution").each(
			function(){
				indice++;
				
				// Supprime les classes initiales s'il y a 
				$(this).removeClass(classe_impaire);
				$(this).removeClass(classe_paire);
				
				// Mise en place de la classe
				classe = (indice%2)?classe_impaire:classe_paire;
				$(this).addClass(classe);
			}
		);
	},

	/**
	 * Affiche le formulaire dans le bloc home
	 */
	afficheFormulaireResolution: function(charger_nouveau_resolution) {
		
		//this.nb_bloc_appel_ajax = 0;
		
		// Conservation de la référence de l'objet
		var refObjet = this;
		
		// Récupération de la hauteur du bloc bloc_contenant_resolution
		//var hauteur = $("#resolution #bloc_contenant_resolution").css('height');
		//var hauteur = document.getElementById('bloc_contenant_resolution').offsetHeight;
				
		var hauteur = $('#bloc_contenant_resolution').height();		
		hauteur = parseInt(hauteur - 12);
	
		// Affiche le loading
		$("#resolution #loading_resolution").css("height",hauteur+"px");
		$("#resolution #loading_resolution").show();
		
		// Masque le contenu
		$("#resolution #bloc_contenant_resolution").hide();
		
		// Charge le nouveau contenu
		$("#resolution").load('/cgi/resolution/modification_home.norevue.php'
						,''
						, function() { 
							if(charger_nouveau_resolution){
								refObjet.ajouterResolution();
							} 
							
							// Réinitialise l'ensemble des actions sur les blocs
							if(typeof(objNote)!='object') var objNote = new benchmark.ObjNote();
							objNote.initialiseListeObjNote();
							
							// on ajoute une longueur max à tt les Textarea nous concernant :
							$('span.commentaire textarea , .libelle_appel_ajax').bind('keydown keyup',
								function(e) 
								{
									var longueurMax = 200;
									if( typeof ($(this).attr('value')) != 'undefined' && $(this).attr('value').length > longueurMax )
									{
										$(this).attr('value',$(this).attr('value').substring(0,longueurMax));
									}
								});
							
							// Action sur le bt valdier du formumaire
							$("#valider_resolution").bind("click",
								function(evt) {
									refObjet.validerFormulaireResolution();
								}
							);
						});
		
		// Réinitialise l'ensemble des actions sur les blocs
		//if(typeof(objNote)!='object') var objNote = new benchmark.ObjNote();
		//objNote.initialiseListeObjNote();
	
		
	},

	/**
	 * Ajoute un champ ObjNote (ajax) dans le formulaire de saisie des traits de personnalités
	 * Le bloc créé est positionné juste à la fin du div #liste_categorie
	 * @see /resolution/resolution.php
	 * @return void
	 */
	ajouterResolution: function() {	
		// try & catch pour contourner le bug lors d'un ajout de resolution alors que le formulaire n'est pas affiché
		//try
		//{

			// Affiche le loading
			$("#resolution #loading_ajout_resolution").show();
			
			//if(this.nb_bloc_appel_ajax == undefined)
			//	this.nb_bloc_appel_ajax = 0;
			
			// Appel ajax pour créer le bloc 'autre critère'
			urlAjax = '/cgi/resolution/ajout_resolution.norevue.php?f_identifiant=resolution&f_identifiant_note='+this.nb_bloc_appel_ajax;
			var html = $.ajax({
				url: urlAjax,
				async: false}).responseText;
			
			$("#liste_resolutions").append(html);
			
			// On se place tout en bas du div
			
			var targetOffset = $("#objnote_appel_ajax_resolution_"+this.nb_bloc_appel_ajax).offset().top;
			if(targetOffset) {
				$('#conteneur_liste_resolutions').animate({scrollTop:targetOffset}, 1000);
			}
			
					
			// Réinitialise l'ensemble des actions sur les blocs
			if(typeof(objNote)!='object') var objNote = new benchmark.ObjNote();
			objNote.initialiseListeObjNote();
			
			// Action ajax sur le libellé autre
			this.initCompletionChampResolution("#f_libelle_appel_ajax_resolution_"+this.nb_bloc_appel_ajax);
			
			// Incrémentation de la variable globale 
			this.nb_bloc_appel_ajax++;
			
			// Masque le loading
			$("#resolution #loading_ajout_resolution").hide();
			
			// Réinitialisation des couleurs paires et impaires
			this.reinitialiseCouleurResolution();
		//}
		//catch(err)
		//{
			//this.afficheFormulaireResolution(true);
			
		//}
	},

	/** 
	 * Validation en ajax du formulaire de caractère 
	 */
	validerFormulaireResolution: function() {
		
		// Conservation de la référence de l'objet
		var refObjet = this;
		
		// Récupération de la hauteur du bloc bloc_contenant_resolution
		//var hauteur = $("#resolution #bloc_contenant_resolution").css('height');
		var hauteur = document.getElementById("bloc_contenant_formulaire_resolution").offsetHeight;
		hauteur = parseInt(hauteur - 12);
		
		// Affiche le loading
		$("#resolution #loading_resolution").css("height",hauteur+"px");
		$("#resolution #loading_resolution").show();
	
		// Masque le contenu
		$("#resolution div.bloc_pied_court").hide();
		$("#resolution #bloc_contenant_formulaire_resolution").hide();
		
		
		// Initialise l'action
		$('#formulaire_resolution').attr('action','/cgi/resolution/validation_home.norevue.php');
		
		// Validation du formulaire
		var optionsResolution = { 
			success: function(responseText) {
			
				
				// Modifie le contenu html du bloc
				$("#resolution").html(responseText);
	
				// Masque le loading
				$("#loading_resolution").hide();
				
				// Affiche le bloc
				$("#bloc_contenant_resolution").show();
				
				// Réinitialisation des actions
				refObjet.initialiseResolution();
				
							
				// Mise à jour des feeds
				if(typeof(objGestionFeed)=='object') {
					objGestionFeed.reinitialiseBlocFeed();
				}
				
				refObjet.nb_bloc_appel_ajax = 0;
			}
				
				
		};
		$('#formulaire_resolution').ajaxSubmit(optionsResolution);	
	},
	
	/**
	 * Lance un script ajax pour recherche une liste de caractère
	 * @param identifiant pour savoir sur quel champ on lance l'ajax
	 */
	initCompletionChampResolution: function(identifiant){
		$(identifiant).Autocomplete(
			{
				source: '/cgi/resolution/recherche_resolution.norevue.php',
				delay: 100,
				autofill: false,
				autoriseNouveau : true,
				helperClass: 'autocompleter',
				selectClass: 'selectAutocompleter',
				minchars: 3
			}
		);
	}
}


/*if(typeof(objGestionResolution)!='object') {
	var objGestionResolution = new benchmark.ObjGestionResolution();	
}*/