/**
* 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>
*/

/**
 * @package bibliotheque
 * @subpackage benchmark
 * @filesource
 */

/**
 * objet js permettant une gestion globale des affichages de valeur de champs par défaut
 *
 * @note Attention, cet objet ne necessite aucune instanciation manuelle, il s'auto-instancie dès que le dom est prêt.
 * @require objchaine.js
 *
 * son utilisation est simple, il suffit d'ajouter aux champs désirés une balise du type valeurParDefaut="valeur d'example " , par exemple :
 * <input type="text" id="f_inputExemple" valeurParDefaut="valeur d'exemple" >
 * ou bien
 * <textarea id="f_inputExemple" valeurParDefaut="valeur d'exemple"></textarea>
 *
 * il n'est dès lors plus besoin de saisir de valeur par defaut, elle sera ajouté par l'objet ci présent
 * au focus elle disparaitra
 * elle sera réinjecté sur le blur si rien n'est saisi
 * elle sera ajoutée en title s'il n'y en a pas sur le champs
 *
 * @note En cas d'import ajax dans le dom on réactualise avec la méthode suivante :
 * if(typeof(benchmark.execution.objValeurParDefaut) == 'object')	{ benchmark.execution.objValeurParDefaut.initialise(); }
 * ou bien :
 * if(typeof(benchmark.execution.objValeurParDefaut) == 'object')	{ benchmark.execution.objValeurParDefaut.initialise('#selecteur'); }
 *
 * @note Si on souhaite obtenir les valeurs d'un formulaire utilisant les valeursParDefaut on privilégiera l'utilisation de
 * des méthodes getFormulaireDonneeJson() ou bien getFormulaireDonneeUrl() qui retourneront au format json ou url les parametres
 * avec les valeurs correctement remplacées.
 *
 * @todo étudier la méthode du bind onChange sur le dom
 * @todo si jQuery 1.3 déployé, utiliser jQuery.live
 *
 * @author Damien BENOIT <benoit@benchmark.fr>
 * @package bibliotheque
 * @subpackage html_include
 * @version 1.00
 * @since 31/03/2009 Damien BENOIT <benoit@benchmark.fr> création
 */

if(typeof(benchmark) == "undefined") { var benchmark = new Object(); }
if(typeof(benchmark.framework) == "undefined") { benchmark.framework = new Object(); }
if(typeof(benchmark.framework.ihm) == "undefined") { benchmark.framework.ihm = new Object(); }
if(typeof(benchmark.framework.ihm.form) == "undefined") { benchmark.framework.ihm.form = new Object(); }

/**
 * constructeur :
 * @return void
 */
benchmark.framework.ihm.form.ObjValeurParDefaut = function()
{
	/**
	* initialisation
	* @author Damien BENOIT <benoit@benchmark.fr>
	* @param string [option] limite sur un selecteur donnée.
	* @return void
	*/
	this.initialise = function(selecteur)
	{
		if(typeof(selecteur) == 'string')
		{
			selecteur = selecteur + ' [valeurParDefaut]';
		}
		else
		{
			selecteur = '[valeurParDefaut]';
		}

		$(selecteur)
			.each(
				function()
				{
					// on récupère la valeur par defaut du champs:
					var valeur = $(this).attr('valeurParDefaut');
					// on applique les differents comportement :
					$(this)
						.bind("focus"	,{valeur:valeur},benchmark.execution.objValeurParDefaut.onFocus)
						.bind("blur"	,{valeur:valeur},benchmark.execution.objValeurParDefaut.onBlur)
						;
					// s'il n'y a pas déjà un title html on le set :
					if($(this).attr("title") == '')
					{
						$(this)
							.attr("title",valeur);
					}
					// s'il n'y a pas déjà une valeur html on la set :
					if(
							benchmark.framework.chaine.ObjChaine.trim($(this).attr("value")).length < 1
							|| $(this).attr("value") == valeur
						)
					{
						$(this)
							.addClass('valeurParDefaut')
							.attr("value",valeur);
					}

				}
			);
	};

	/**
	* ce qui arrive au focus de la zone :
	* @param evenement jquery (avec evenement.data.valeur contenant la valeur par defaut)
	* @author Damien BENOIT <benoit@benchmark.fr>
	* @return void
	*/
	this.onFocus = function (evenement)
	{
		if(evenement.target.value == evenement.data.valeur)
			{
				evenement.target.value = '';
			}
		$(evenement.target).removeClass('valeurParDefaut');
	};

	/**
	* ce qui arrive au focus de la zone :
	* @param evenement jquery (avec evenement.data.valeur contenant la valeur par defaut)
	* @author Damien BENOIT <benoit@benchmark.fr>
	* @return void
	*/
	this.onBlur = function (evenement)
	{
		if(evenement.target.value == '')
			{
				$(evenement.target).addClass('valeurParDefaut');
				evenement.target.value = evenement.data.valeur;
			}
	};

	/**
	* remet les valeurs par defaut à null si nécéssaire
	* @author Damien BENOIT <benoit@benchmark.fr>
	* @param string [option] limite sur un selecteur donnée.
	* @note utilisé par exemple avant la soumission d'un formulaire
	* @see objformulaire.js
	* @return void
	*/
	this.valeurVide = function(selecteur)
	{
		if(typeof(selecteur) == 'string')
		{
			selecteur = selecteur + ' [valeurParDefaut]';
		}
		else
		{
			selecteur = '[valeurParDefaut]';
		}

		$(selecteur)
			.each(
				function()
				{
					// si la valeur = valeur par defaut, reset :
					if($(this).attr('value') == $(this).attr('valeurParDefaut') )
					{
						$(this).attr('value','');
					}
				}
			);
	};

	/**
	* remet les valeurs par defaut si nécéssaire
	* @author Damien BENOIT <benoit@benchmark.fr>
	* @param string [option] limite sur un selecteur donnée.
	* @note utilisé par exemple après la soumission d'un formulaire
	* @see objformulaire.js
	* @return void
	*/
	this.valeurParDefaut = function(selecteur)
	{
		if(typeof(selecteur) == 'string')
		{
			selecteur = selecteur + ' [valeurParDefaut]';
		}
		else
		{
			selecteur = '[valeurParDefaut]';
		}

		$(selecteur)
			.each(
				function()
				{
					// si pas de valeur, valeur par défaut :
					if($(this).attr('value') == '' )
					{
						$(this).attr('value', $(this).attr('valeurParDefaut') );
					}
				}
			);
	};


	/**
	* constructeur :
	* @author Damien BENOIT <benoit@benchmark.fr>
	* @return void
	*/
	//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.objValeurParDefaut = new benchmark.framework.ihm.form.ObjValeurParDefaut();
			benchmark.execution.objValeurParDefaut.initialise();
		}
	);

	/**
	@since 31/03/2009 Damien BENOIT <benoit@benchmark.fr>
	@todo étudier cette méthode (pas le temps)
	 semble au moins marcher partiellement sous ff, gros doute pour ie ..
	.bind("change",
		function()
		{
			if(typeof(benchmark.execution.objValeurParDefaut) == 'object')
			{
				benchmark.execution.objValeurParDefaut.initialise();
			}
		}
	)
;
*/
