/**
* Ce fichier fait parti d'un package, toute modification doit entrainer la génération
* d'un nouveau package pour être pris en compte.
* voir l'objet ObjFichierPackage pour connaitre la marche à suivre pour regénérer un package
* @since 20/05/2009 Olivier REYT <reyt@benchmark.fr> 
*/

/**
 * Code javascript directement lié à l'objnote (version 2.00 et ultérieure)
 * Ne peut être executé directement
 * Action sur les notes (onmousover, onmouseout, onclick)
 * 
 *
 * @author trotoux <trotoux@benchmark.fr>
 * @package bibliothèque
 * @subpackage html_include
 * @version 2.00 de l'objnote et +
 * @since 2.00 - 21/01/2008 trotoux <trotoux@benchmark.fr> Création du fichier
 */

if(typeof benchmark == "undefined") var benchmark = new Object();

/**
 * Constructeur de l'objet ObjGestionCaractere
 */
benchmark.ObjNote = function() {
	this.nb_bloc_objnote = 0;
	this.timer_onmouseout = 10;
	this.liste_note = new Array();
}

/**
 * Méthodes publiques de l'objet ObjNote
 */
benchmark.ObjNote.prototype = {

	
	
	// Fonction initialisant les actions sur tous les blos relatifs à l'objnote
	// Et mettant la valeur par défaut si une note est pré-enregistrée
	initialiseListeObjNote: function() {
		
		// Conservation de la référence de l'objet
		var refObjet = this;
		
		this.nb_bloc_objnote = 0;
		// Boucle sur l'ensemble des div ayant la class objnote
		$("div.objnote").each(
			function(){
				refObjet.initialiseBloc(this);
				refObjet.nb_bloc_objnote++;
			}
		);
	
	},
	
	// Fonction initialisant les actions d'un bloc
	initialiseBloc: function(bloc) {

		// Test pour éviter d'éventuelles erreurs
		if(typeof(liste_note) == 'undefined') {
			return false;
		}
		
		// Conservation de la référence de l'objet
		var refObjet = this;

		var attribut_name = $(bloc).attr("name");
		var tableau=attribut_name.split("::");
		var identifiant = tableau[0];
		var categorie = tableau[1];
		var application = tableau[2];
		var identifiant_note = $(bloc).attr("id");

		// Initialisation du timer du bloc
		var timerListeObjNote = 'timer'+identifiant_note;
		timerListeObjNote = setTimeout("",0);
	
		// Modification de la valeur par défaut si une note est pré-enregistrée
		var note = $("#f_note_"+identifiant+"_"+categorie).attr("value");
		this.selectionneUneNote(liste_note[application],identifiant,categorie,note);
		
		// Si on est en mode saisie, on enregistre les actions sur les blocs objnote
		if($("#"+identifiant_note).hasClass('objnote_saisie') ){
	
			// Mouseover
			$("#"+identifiant_note+" span.note").bind("mouseover",
				function(evt) {
					
					
					// Suppression du timer
					if(timerListeObjNote) clearTimeout(timerListeObjNote);
					
					// Récupération de la note
					var note = $(this).attr("name");
					// Actions
					refObjet.survolUneNote(liste_note[application],identifiant,categorie,note);
				} 
			);
		
			// Mouseout
			$("#"+identifiant_note+" span.note").bind("mouseout",
				function(evt) {
					// Actions
					
					//quitteUneNote(liste_note[application],identifiant,categorie);
					timerListeObjNote = setTimeout(function() {
						refObjet.quitteUneNote(liste_note[application],identifiant,categorie);
					}, refObjet.timer_onmouseout);
				} 
			);
	
			// Mousedown
			$("#"+identifiant_note+" span.note").bind("mousedown",
				function(evt) {
					// Modification du style
					$(this).addClass("clicked");
					$("#"+identifiant_note+" p.libelle").addClass("clicked");
					$("#"+identifiant_note+" span.precision").addClass("precision_clicked");
					
					// Récupération de la note
					var note = $(this).attr("name");
					// Actions
					refObjet.selectionneUneNote(liste_note[application],identifiant,categorie,note);
				} 
			);
	
			// Mouseup
			$("#"+identifiant_note+" span.note").bind("mouseup",
				function(evt) {
					// Modification du style
					$(this).removeClass("clicked");
					$("#"+identifiant_note+" span.precision").removeClass("precision_clicked");
				} 
			);
	
			// Click sur le textarea avec la classe defaut: on vide ce champ & on supprime la classe defaut
			$("#f_commentaire_"+identifiant+"_"+categorie+".objnote_defaut").bind("click",
				function(evt) {
					if ($(this).hasClass('objnote_defaut') ){
						//$(this).val('');
						//$("f_commentaire_"+identifiant+"_"+categorie).value('');
						document.getElementById("f_commentaire_"+identifiant+"_"+categorie).value = '';
						$(this).removeClass("objnote_defaut");
					}
				} 
			);
			
			// Clic sur le input:texte avec la classe autre : on vide ce champ
			$("#f_libelle_"+identifiant+"_"+categorie+".objnote_libelle_appel_ajax").bind("click",
				function(evt) {
					if ($(this).hasClass('objnote_libelle_appel_ajax') ){
						$(this).val('');
						$(this).removeClass("objnote_libelle_appel_ajax");
					}
				} 
			);
			
		 }
	},

	// Réinitialisation des couleurs : couleur par défaut partout
	reinitialiseCouleur: function(liste_note,identifiant,identifiant_note) {
		
		// Test pour éviter d'éventuelles erreurs
		if(typeof(liste_note) == 'undefined') {
			return false;
		}
		
		for(indice=0;indice<liste_note.length;indice++) {
			$("#span_note_"+identifiant+"_"+identifiant_note+"_"+indice).css({ backgroundColor:liste_note[0]["couleur"]});	
		}
		this.reinitialiseLibellePrecision(liste_note,identifiant,identifiant_note);
	},
	
	// Modification de la couleur de fond avec traitement de l'ensemble des notes inférieurs
	selectionneCouleur: function(liste_note,identifiant,identifiant_note,note) {
		
		// Test pour éviter d'éventuelles erreurs
		if(typeof(liste_note) == 'undefined') {
			return false;
		}
		
		for(indice=note;indice>0;indice--) {
			$("#span_note_"+identifiant+"_"+identifiant_note+"_"+indice).css({ backgroundColor:liste_note[indice]["couleur"]});	
		}
		this.changeLibellePrecision(liste_note,identifiant,identifiant_note,note);
	},
	
	// Mise à unchecked de tous les champs checkbox + mise à checked de la note sélectionnée
	gestionCheckbox: function(liste_note,identifiant,identifiant_note,note) {
		
		for(indice=0;indice<liste_note.length;indice++) {
			$("#f_checked_note_"+identifiant+"_"+identifiant_note+"_"+indice).attr("checked", "");
		}
		// Modification du checkbox sélectionné
		$("#f_checked_note_"+identifiant+"_"+identifiant_note+"_"+note).attr("checked", "checked");
		$("#f_note_"+identifiant+"_"+identifiant_note).val(note);
	},
	
	// Sélection d'une note : changement couleur + hidden
	selectionneUneNote: function(liste_note,identifiant,identifiant_note,note) {
		// Gestion couleurs
		this.reinitialiseCouleur(liste_note,identifiant,identifiant_note);
		this.selectionneCouleur(liste_note,identifiant,identifiant_note,note);
		// Gestion libellé
		this.changeLibellePrecision(liste_note,identifiant,identifiant_note,note);
		// Gestion du champs hidden
		$("#f_note_"+identifiant+"_"+identifiant_note).val(note);
	},
	
	// Action lors du onmouseout d'une note
	quitteUneNote: function(liste_note,identifiant,identifiant_note) {
		
		// Modification de la couleur de fond avec traitement de l'ensemble des notes inférieurs
		this.reinitialiseCouleur(liste_note,identifiant,identifiant_note);
		// Changement du libellé
		this.reinitialiseLibellePrecision(liste_note,identifiant,identifiant_note);
		// Si une note est sélectionné, on la sélectionne
		var valeur_initiale = $("#f_note_"+identifiant+"_"+identifiant_note).attr("value");
		if(valeur_initiale > 0) {
			this.selectionneUneNote(liste_note,identifiant,identifiant_note,valeur_initiale);
		}
	
	},
	
	// Action lors du onmousover d'une note
	survolUneNote: function(liste_note,identifiant,identifiant_note,note) {
		// Réinitialisation des couleurs : couleur par défaut partout
		this.reinitialiseCouleur(liste_note,identifiant,identifiant_note);
		// Modification de la couleur de fond avec traitement de l'ensemble des notes inférieurs
		this.selectionneCouleur(liste_note,identifiant,identifiant_note,note);
		// Changement du libellé
		this.changeLibellePrecision(liste_note,identifiant,identifiant_note,note);
	},	
	
	// Changement du libellé du div precision : valeur par défaut
	reinitialiseLibellePrecision: function(liste_note,identifiant,identifiant_note) {
		$("#objnote_"+identifiant+"_"+identifiant_note+" span.precision").text(liste_note[0]["libelle"]);
	},
	
	// Changement du libellé du div precision
	changeLibellePrecision: function(liste_note,identifiant,identifiant_note,note) {
		$("#objnote_"+identifiant+"_"+identifiant_note+" span.precision").text(liste_note[note]["libelle"]);
	}

}

// Gestion du onload
jQuery(function($) {
	// Initialisation de l'objet
	var objNote = new benchmark.ObjNote();
	objNote.initialiseListeObjNote();
});



