/**
 * @package parcours
 * @subpackage benchmark
 * @filesource
 */

/**
 * objet js de stocker gerer un bloc question reponse, gérer les binds, stocker les urls, etc
 *
 *
 * @author Arnaud De Bock <debock@benchmark.fr>
 * @package framework
 * @subpackage html_include
 * @version 1.00
 * @since 18/05/2009 Arnaud De Bock <debock@benchmark.fr> création
 */

if(typeof(benchmark) == "undefined") { var benchmark = new Object(); }
if(typeof(benchmark.application) == "undefined") { benchmark.application = new Object(); }
if(typeof(benchmark.application.questionreponse) == "undefined") { benchmark.application.questionreponse = new Object(); }

/**
 * constructeur :
 * @return void
 */
benchmark.application.questionreponse.ObjGestionQuestionReponse = function(mode){

	/**
	 * id de la question selectionnée
	 */
	 this.id_question_selection = null;

	/**
	 * libellé de la question selectionnée
	 */
	 this.libelle_question_selection = null;

	/**
	 * flag alerte pour la question selectionnée ou pas
	 */
	 this.flag_alerte_question_selection = false;

	/**
	 * id de la reponse selectionnée
	 */
	 this.id_reponse_selection = null;

	/**
	* url de base du controleur :
	*/
	this.urlBase = '/question-reponse/framework/lib/objcontroleurajax3/cgi/controleur_ajax.norevue.php?f_action=';

	/**
	* tableau devant contenir les urls du controleur ajax, finallement stockées en dur
	*/
	this.tableauUrlAjax =
		{
			selectionneQuestion :
			{
				formulaire 	: this.urlBase+'64d4c5c3c7d0c5d7d7c90cd79e97959e86d3c6cecbc9d7d8cdd3d2d5d9c9d7d8cdd3d2d6c9d4d3d2d7c9cbd6d3d9d4c9869f0c0cd4c5c3d1c9d8ccd3c8c90cd79e959d9e86d7c9d0c9c7d8cdd3d2d2c9d5d9c9d7d8cdd3d2869f0c0cd4c5c3d4c5d6c5d1c9d8d6c90cc59e949edfe10c0cd6c5c7cdd2c9c3d3c6ce0cd79e9a9e86cbd6d3d9d4c9869f0c0cd4c5c3c9d2c7d3c8c5cbc90cd79e989e86ced7d3d2869f0c0cced7d3d2c7c5d0d0c6c5c7cf0cb29f'
			},
			modifieSuiviMail :
			{
				formulaire 	: this.urlBase+'d64738363a43384a4a3c7e4a110a0811f84639413e3c4a4b404645484c3c4a4b404645493c4746454a3c3e49464c473cf8127e7e473836443c4b3f463b3c7e4a11080d11f844463b403d403c4a4c404d4044384043f8127e7e47383647384938443c4b493c7e3811071152547e7e49383a40453c364639417e4a110d11f83e49464c473cf8127e7e4738363c453a463b383e3c7e4a110b11f8414a4645f8127e7e414a46453a38434339383a427e2512'
			},
			supprimeQuestion :
			{
				formulaire 	: this.urlBase+'41b1a2a0a4ada2b4b4a6e8b47b74727b63b0a3aba8a6b4b5aab0afb2b6a6b4b5aab0afb3a6b1b0afb4a6a8b3b0b6b1a6637ce8e8b1a2a0aea6b5a9b0a5a6e8b47b72787b63a2afb0afbaaeaab4a6b2b6a6b4b5aab0af637ce8e8b1a2a0b1a2b3a2aea6b5b3a6e8a27b717bbcbee8e8b3a2a4aaafa6a0b0a3abe8b47b777b63a8b3b0b6b1a6637ce8e8b1a2a0a6afa4b0a5a2a8a6e8b47b757b63abb4b0af637ce8e8abb4b0afa4a2adada3a2a4ace88f7c'
			},
			supprimeReponse :
			{
				formulaire 	: this.urlBase+'57c7b8b6bac3b8cacabcfeca918a889179c6b9c1bebccacbc0c6c5c8ccbccacbc0c6c5c9bcc7c6c5cabcbec9c6ccc7bc7992fefec7b8b6c4bccbbfc6bbbcfeca91888c9179caccc7c7c9c0c4bcc9bcc7c6c5cabc7992fefec7b8b6c7b8c9b8c4bccbc9bcfeb8918791d2d4fefec9b8bac0c5bcb6c6b9c1feca918d9179bec9c6ccc7bc7992fefec7b8b6bcc5bac6bbb8bebcfeca918b9179c1cac6c57992fefec1cac6c5bab8c3c3b9b8bac2fea592'
			},
			supprimeSelection :
			{
				formulaire 	: this.urlBase+'1a8a7b797d867b8d8d7fc18d544d4b543c897c84817f8d8e8389888b8f7f8d8e8389888c7f8a89888d7f818c898f8a7f3c55c1c18a7b79877f8e82897e7fc18d544b51543c8d8f8a8a8c83877f8d7f867f7d8e8389883c55c1c18a7b798a7b8c7b877f8e8c7fc17b544a549597c1c18c7b7d83887f79897c84c18d5450543c818c898f8a7f3c55c1c18a7b797f887d897e7b817fc18d544e543c848d89883c55c1c1848d89887d7b86867c7b7d85c16855'
			}
		};


	/**
	* applique les binds sur les liens du module
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.controleAjaxRetourErreur = function(){
		//alert('PB lors de la requête');
	};

	/**
	* selection de la question
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.controleAjaxRetourSelectionneQuestion = function(pEvent){
		$("a[id^='selectionner_question_"+benchmark.execution.objGestionQuestionReponse.id_question_selection+"']").removeClass("icone_direction");
		$("a[id^='selectionner_question_"+benchmark.execution.objGestionQuestionReponse.id_question_selection+"']").addClass("lien_valide");
	}

	/**
	* selection de la question
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.selectionneQuestion = function(id_question, flag_alerte){
		// appel au controleur ajax
		benchmark.framework.net.ObjControleurAjax3.appelScriptAction(
			benchmark.execution.objGestionQuestionReponse,
			// url + id de la categorie courante
			benchmark.execution.objGestionQuestionReponse.tableauUrlAjax.selectionneQuestion.formulaire+'&f_id_question='+id_question+'&f_flag_alerte='+flag_alerte,
			{
				//COMPLET: 'DEFAUT',
				// méthodes retout de l'objet avec un delegate appliqué pour conserver le contexte objet :
				SUCCES: benchmark.framework.util.delegate(benchmark.execution.objGestionQuestionReponse,benchmark.execution.objGestionQuestionReponse.controleAjaxRetourSelectionneQuestion),
				//AVANT_ENVOI: [ecouteurPersoAvantEnvoi],
				ERREUR: benchmark.framework.util.delegate(benchmark.execution.objGestionQuestionReponse,benchmark.execution.objGestionQuestionReponse.controleAjaxRetourErreur)
			},
			{}
		);
	}

	/**
	 * fenêtre de confirmation pour la sélection de question
	 * @author Arnaud De Bock <debock@benchmark.fr>
	 * @void
	 */
	 this.confirmeSelectionQuestion = function(id_question, libelle_question){
		benchmark.framework.ihm.popup.ObjPopupFabrique.creerPopUpConfirmation(
			'<div class="popup_selection_question">'
			+'<div class="titre_popup_selection_question">Sélectionner une question</div><br>'
			+'En ajoutant la question « <b>'+libelle_question+'</b> » à votre sélection, '
			+'vous pourrez la retrouver dans votre espace personnel « Questions Réponses ».<br><br>'
			+'Vous pouvez aussi recevoir les mails de suivi des réponses à cette question :<br><br>'
			+'<input type="checkbox" id="selection_question_envoie_alerte" name="selection_question_envoie_alerte" onChange="benchmark.execution.objGestionQuestionReponse.flag_alerte_question_selection = $(\'#selection_question_envoie_alerte\').is(\':checked\');"> <label for="selection_question_envoie_alerte">Je souhaite être averti gratuitement par e-mail quand des réponses à cette question sont publiées'
			+'<div class="notice_popup_selection_question">&nbsp;(un message par jour maximum)</div></label></div>', // le message de confirmation
			function(event){benchmark.execution.objGestionQuestionReponse.selectionneQuestion(benchmark.execution.objGestionQuestionReponse.id_question_selection, benchmark.execution.objGestionQuestionReponse.flag_alerte_question_selection)}, // fonction appelé quand l'utilisateur clique sur le bouton valider
			function(event){}//fonction appelé quand l'utilisateur clique sur le bouton annuler
			// ici peut être passé un objet de configuration optionnel
		);
	 };


	/**
	* modifie le suivi de la question
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.controleAjaxRetourModifieSuiviMailQuestion = function(pEvent){
		if(pEvent.json.message_retour == 'on'){
			$("a[id^='suivi_mail_question_"+benchmark.execution.objGestionQuestionReponse.id_question_selection+"']").removeClass("lien_invalide");
			$("a[id^='suivi_mail_question_"+benchmark.execution.objGestionQuestionReponse.id_question_selection+"']").addClass("lien_valide");
		}
		else{
			$("a[id^='suivi_mail_question_"+benchmark.execution.objGestionQuestionReponse.id_question_selection+"']").removeClass("lien_valide");
			$("a[id^='suivi_mail_question_"+benchmark.execution.objGestionQuestionReponse.id_question_selection+"']").addClass("lien_invalide");
		}
	}

	/**
	* retour de suppression de la question, on supprime la ligne
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.controleAjaxRetourSupprimeQuestion = function(pEvent){
		$("div[id^='ligne_question_"+benchmark.execution.objGestionQuestionReponse.id_question_selection+"']").slideUp();
	}

	/**
	* suppression de la question
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.supprimeQuestion = function(id_question){
		// appel au controleur ajax
		benchmark.framework.net.ObjControleurAjax3.appelScriptAction(
			benchmark.execution.objGestionQuestionReponse,
			// url + id de la question
			benchmark.execution.objGestionQuestionReponse.tableauUrlAjax.supprimeQuestion.formulaire+'&f_id_question='+id_question,
			{
				//COMPLET: 'DEFAUT',
				// méthodes retout de l'objet avec un delegate appliqué pour conserver le contexte objet :
				SUCCES: benchmark.framework.util.delegate(benchmark.execution.objGestionQuestionReponse,benchmark.execution.objGestionQuestionReponse.controleAjaxRetourSupprimeQuestion),
				//AVANT_ENVOI: [ecouteurPersoAvantEnvoi],
				ERREUR: benchmark.framework.util.delegate(benchmark.execution.objGestionQuestionReponse,benchmark.execution.objGestionQuestionReponse.controleAjaxRetourErreur)
			},
			{}
		);
	}

	 /**
	  * Confirmation de suppression de question
	  * @author Arnaud De Bock <debock@benchmark.fr>
	  * @void
	  */
	 this.confirmeSupprimeQuestion = function(id_question){
		benchmark.framework.ihm.popup.ObjPopupFabrique.creerPopUpConfirmation(
				'<div class="popup_selection_question">'
				+'<div class="titre_popup_selection_question">Supprimer une question</div><br>'
				+'En supprimant la question de votre espace personnel, la question ne vous sera plus attribuée : <b>votre nom, prénom et photo</b> n’apparaitront plus sur cette question.<br><br>'
				+'En revanche la question elle-même et les réponses associées pourront toujours être consultées par les lecteurs et les membres Copains.', // le message de confirmation
				function(event){benchmark.execution.objGestionQuestionReponse.supprimeQuestion(benchmark.execution.objGestionQuestionReponse.id_question_selection)}, // fonction appelé quand l'utilisateur clique sur le bouton valider
				function(event){}//fonction appelé quand l'utilisateur clique sur le bouton annuler
				// ici peut être passé un objet de configuration optionnel
			);
	 };

	/**
	* retour de suppression de la reponse, on supprime la ligne
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.controleAjaxRetourSupprimeReponse = function(pEvent){
		$("div[id^='ligne_reponse_"+benchmark.execution.objGestionQuestionReponse.id_reponse_selection+"']").slideUp();
	}

	/**
	* suppression de la reponse
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.supprimeReponse = function(id_reponse){
		// appel au controleur ajax
		benchmark.framework.net.ObjControleurAjax3.appelScriptAction(
			benchmark.execution.objGestionQuestionReponse,
			// url + id de la question
			benchmark.execution.objGestionQuestionReponse.tableauUrlAjax.supprimeReponse.formulaire+'&f_id_reponse='+id_reponse,
			{
				//COMPLET: 'DEFAUT',
				// méthodes retout de l'objet avec un delegate appliqué pour conserver le contexte objet :
				SUCCES: benchmark.framework.util.delegate(benchmark.execution.objGestionQuestionReponse,benchmark.execution.objGestionQuestionReponse.controleAjaxRetourSupprimeReponse),
				//AVANT_ENVOI: [ecouteurPersoAvantEnvoi],
				ERREUR: benchmark.framework.util.delegate(benchmark.execution.objGestionQuestionReponse,benchmark.execution.objGestionQuestionReponse.controleAjaxRetourErreur)
			},
			{}
		);
	}

	 /**
	  * Confirmation de suppression de reponse
	  * @author Arnaud De Bock <debock@benchmark.fr>
	  * @void
	  */
	 this.confirmeSupprimeReponse = function(id_reponse){
		benchmark.framework.ihm.popup.ObjPopupFabrique.creerPopUpConfirmation(
			'<div class="popup_selection_question">'
			+'<div class="titre_popup_selection_question">Supprimer une réponse</div><br>'
			+ '<p> La réponse n\'apparaitra plus sur L\'Internaute Copains<br> ni sur votre page Copains</p><br>'
			+'Etes-vous sûr de vouloir supprimer cette réponse ?', // le message de confirmation
			function(event){benchmark.execution.objGestionQuestionReponse.supprimeReponse(benchmark.execution.objGestionQuestionReponse.id_reponse_selection)}, // fonction appelé quand l'utilisateur clique sur le bouton valider
			function(event){}//fonction appelé quand l'utilisateur clique sur le bouton annuler
			// ici peut être passé un objet de configuration optionnel
				);
		};


	/**
	* retour de suppression du suivi de la question, on supprime la ligne
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.controleAjaxRetourSupprimeSelection = function(pEvent){
		$("div[id^='ligne_question_"+benchmark.execution.objGestionQuestionReponse.id_question_selection+"']").slideUp();
	}

	/**
	* suppression du suivi de la question
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.supprimeSelection = function(id_question){
		// appel au controleur ajax
		benchmark.framework.net.ObjControleurAjax3.appelScriptAction(
			benchmark.execution.objGestionQuestionReponse,
			// url + id de la question
			benchmark.execution.objGestionQuestionReponse.tableauUrlAjax.supprimeSelection.formulaire+'&f_id_question='+id_question,
			{
				//COMPLET: 'DEFAUT',
				// méthodes retout de l'objet avec un delegate appliqué pour conserver le contexte objet :
				SUCCES: benchmark.framework.util.delegate(benchmark.execution.objGestionQuestionReponse,benchmark.execution.objGestionQuestionReponse.controleAjaxRetourSupprimeSelection),
				//AVANT_ENVOI: [ecouteurPersoAvantEnvoi],
				ERREUR: benchmark.framework.util.delegate(benchmark.execution.objGestionQuestionReponse,benchmark.execution.objGestionQuestionReponse.controleAjaxRetourErreur)
			},
			{}
		);
	}

	 /**
	  * Confirmation de suppression de suivi de mail
	  * @author Arnaud De Bock <debock@benchmark.fr>
	  * @void
	  */
	 this.confirmeSupprimeSelection = function(id_reponse){
		benchmark.framework.ihm.popup.ObjPopupFabrique.creerPopUpConfirmation(
				'<div class="popup_selection_question">'
				+'<div class="titre_popup_selection_question">Supprimer une sélection</div><br>'
				+'Voulez-vous supprimer cette question de votre liste?', // le message de confirmation
				function(event){benchmark.execution.objGestionQuestionReponse.supprimeSelection(benchmark.execution.objGestionQuestionReponse.id_question_selection)}, // fonction appelé quand l'utilisateur clique sur le bouton valider
				function(event){}//fonction appelé quand l'utilisateur clique sur le bouton annuler
				// ici peut être passé un objet de configuration optionnel
					);
			};

	/**
	* initialisation
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.initialise = function(){
		this.bindActions();

		// objet d'analyse de l'url
		var parseurUrl = new benchmark.framework.util.url();

		// on est là si jamais on veut passer en param l'id de question a virer le suivi par mail
		if(parseurUrl.recupereParametre('f_id_question') != undefined && parseurUrl.recupereParametre('f_id_question') > 0 && parseurUrl.urlContient("/question-reponse/personnel/")){
			// en suite on test si on est sur une page de type selection ou question suivant le cas c'est pas la même action qui est appelée
			if(parseurUrl.urlContient("/question-reponse/personnel/selection/")){
				this.id_question_selection = parseurUrl.recupereParametre('f_id_question');
				this.confirmeSupprimeSelection(this.id_question_selection);
			}
			else if(parseurUrl.urlContient("/question-reponse/personnel/question/")){
				this.id_question_selection = parseurUrl.recupereParametre('f_id_question');
				this.confirmeSupprimeQuestion(this.id_question_selection);
			}
		}
	};

	
	/**
	* applique les binds sur les éléments nécéssaires
	* @author Arnaud De Bock <debock@benchmark.fr>
	* @return void
	*/
	this.bindActions = function(){
		// si on selectionne une question
		$("a[id^='selectionner_question_']")
			.bind('click',
				{self:this},
				function(e){

					// on réinitialise les champs
					e.data.self.id_question_selection = null;
					e.data.self.libelle_question_selection = null;
					e.data.self.flag_alerte_question_selection = false;

					e.data.self.id_question_selection = $(this).attr('id').substr(22, $(this).attr('id').length);
					e.data.self.libelle_question_selection = $(this).attr('libelle');

					if(e.data.self.id_question_selection > 0 && e.data.self.libelle_question_selection != null){
						e.data.self.confirmeSelectionQuestion(e.data.self.id_question_selection, e.data.self.libelle_question_selection);
					}
				}
			);

		// si on click pour activer ou non le suivi
		$("a[id^='suivi_mail_question_']")
			.bind('click',
				{self:this},
				function(e){

					// on réinitialise les champs
					e.data.self.id_question_selection = null;
					e.data.self.id_question_selection = $(this).attr('id').substr(20, $(this).attr('id').length);

					if(e.data.self.id_question_selection > 0){
						// appel au controleur ajax
						benchmark.framework.net.ObjControleurAjax3.appelScriptAction(
							benchmark.execution.objGestionQuestionReponse,
							// url + id de la question courante
							benchmark.execution.objGestionQuestionReponse.tableauUrlAjax.modifieSuiviMail.formulaire+'&f_id_question='+e.data.self.id_question_selection,
							{
								//COMPLET: 'DEFAUT',
								// méthodes retout de l'objet avec un delegate appliqué pour conserver le contexte objet :
								SUCCES: benchmark.framework.util.delegate(benchmark.execution.objGestionQuestionReponse,benchmark.execution.objGestionQuestionReponse.controleAjaxRetourModifieSuiviMailQuestion),
								//AVANT_ENVOI: [ecouteurPersoAvantEnvoi],
								ERREUR: benchmark.framework.util.delegate(benchmark.execution.objGestionQuestionReponse,benchmark.execution.objGestionQuestionReponse.controleAjaxRetourErreur)
							},
							{}
						);
					}
				}
			);

		// si on supprime une question
		$("a[id^='suppression_question_']")
			.bind('click',
				{self:this},
				function(e){

					// on réinitialise les champs
					e.data.self.id_question_selection = null;
					e.data.self.id_question_selection = $(this).attr('id').substr(21, $(this).attr('id').length);
					//this.urlBase+
					if(e.data.self.id_question_selection > 0){
						e.data.self.confirmeSupprimeQuestion(e.data.self.id_question_selection, e.data.self.libelle_question_selection);
					}
				}
			);

		// si on supprime une reponse
		$("a[id^='suppression_reponse_']")
			.bind('click',
				{self:this},
				function(e){

					// on réinitialise les champs
					e.data.self.id_reponse_selection = null;
					e.data.self.id_reponse_selection = $(this).attr('id').substr(20, $(this).attr('id').length);

					if(e.data.self.id_reponse_selection > 0){
						e.data.self.confirmeSupprimeReponse(e.data.self.id_reponse_selection);
					}
				}
			);

		// si on supprime un suivi de question
		$("a[id^='suppression_suivi_mail_question_']")
			.bind('click',
				{self:this},
				function(e){

					// on réinitialise les champs
					e.data.self.id_question_selection = null;
					e.data.self.id_question_selection = $(this).attr('id').substr(32, $(this).attr('id').length);

					if(e.data.self.id_question_selection > 0){
						e.data.self.confirmeSupprimeSelection(e.data.self.id_question_selection);
					}
				}
			);
	};
	this.initialise();
};

/**
* pour l'instant l'instanciation est automatique :
*/
$(document)
	.ready(
		function()
		{
			/**
			* on créé si besoin le domaine d'instanciation :
			*/
			if(typeof(benchmark.execution) == 'undefined') { benchmark.execution = new Object(); }
			// instance :
			benchmark.execution.objGestionQuestionReponse = new benchmark.application.questionreponse.ObjGestionQuestionReponse();
		}
	);