/**
* 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
 */

/**
 * collection de fonctions d'effets visuels pour l'ihm
 *
 * @author Damien BENOIT <benoit@benchmark.fr>
 * @package bibliotheque
 * @subpackage html_include
 * @version 1.00
 * @since 16/07/08 création du fichier
 * @since 09/10/08 récupération depuis projet maa, changement interface et intégration nouveau framework
 */

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.effet ) == "undefined") { benchmark.framework.ihm.effet = new Object();}
if(typeof( benchmark.framework.ihm.effet.ObjEffet ) == "undefined") { benchmark.framework.ihm.effet.ObjEffet = new Object();}


/**
* déplace un element (de manière animée)
* @author Damien BENOIT <benoit@benchmark.fr>
* @param string selecteur selecteur jquery
* @param int x coordonnée x de destination
* @param int y coordonnée y de destination
* @param int vitesse ms temps d'execution
* @param boolean sansAnimation (faux par defaut) (typiquement pour les moteurs js pauvres comme celui d'ie )
* @return void
*/

benchmark.framework.ihm.effet.ObjEffet.deplace = function(selecteur,x,y,vitesse,sansAnimation) {

		if( typeof(selecteur) != 'string') 	{ return false; }
		if( typeof(x) == 'undefined') 	{ x = 0; }
		if( typeof(y) == 'undefined') 	{ y = 0; }
		if( typeof(vitesse) == 'undefined') 	{ vitesse = 200; }
		if( typeof(sansAnimation) == 'undefined') 	{ sansAnimation = false; }

		if (!sansAnimation)
		{
			$(selecteur)
				.animate( { top : y+'px',left: x+'px'  } , vitesse );
		}
		else
		{
			$(selecteur)
				.css('top' , y+'px')
				.css('left', x+'px')
				.show()
				;
		}
};


/**
* redimensionne un element (de manière animée)
* @author Damien BENOIT <benoit@benchmark.fr>
* @param string selecteur selecteur jquery
* @param int largeur
* @param int hauteur
* @param int vitesse ms temps d'execution
* @param boolean sansAnimation (faux par defaut) (typiquement pour les moteurs js pauvres comme celui d'ie )
* @param boolean visible Indique si il s'agit d'un déplacement visible
* @return void
*/

benchmark.framework.ihm.effet.ObjEffet.redimensionne = function(selecteur,largeur,hauteur,vitesse,sansAnimation,visible) {

		if( typeof(selecteur) != 'string') 	{ return false;  }
		if( typeof(largeur) == 'undefined') { largeur = 100; }
		if( typeof(hauteur) == 'undefined') { hauteur = 100; }
		if( typeof(vitesse) == 'undefined') { vitesse = 200; }
		if( typeof(sansAnimation) == 'undefined') 	{ sansAnimation = false; }
		if( typeof(visible) == 'undefined') 	{ visible = true; }

		if (!sansAnimation && visible)
		{
			$(selecteur)
				.animate( { width : largeur+'px', height: hauteur+'px'  } , vitesse );
		}
		else
		{
			if(visible){
				$(selecteur)
					.css('width' , largeur+'px')
					.css('height', hauteur+'px')
					.show();
			}else{
				$(selecteur)
					.css('width' , largeur+'px')
					.css('height', hauteur+'px')
					.hide();
			}
		}
};


/**
* effectue un effet de clignotement sur un selecteur jquery donné
* @author Damien BENOIT <benoit@benchmark.fr>
* @param string selecteur selecteur jquery
* @param objet de configuration vitesse opaciteMax opaciteMin iteration
* @return void
*/
benchmark.framework.ihm.effet.ObjEffet.clignote = function(selecteur,configuration)
	{
		if (typeof selecteur == 'undefined') { return false;}

		// configuration par defaut :
		this.configurationDefaut 	= {
				vitesse 	:500,
				opaciteMax 	:1,
				opaciteMin	:0.2,
				iteration	:2
			};
	 	/**
	 	* configure l'objet en réattribuant les valeurs par defaut négligées à l'objet de configuration :
	 	* @return void
	 	*/
		this.configure = function () {
			for ( var valueName in this.configurationDefaut )
			{
				if( typeof(this.configuration[valueName]) == 'undefined' )
				{
					this.configuration[valueName] = this.configurationDefaut[valueName];
				}
			}
			delete(valueName);
		};

	 	// on recupere les arguments :
		this.configuration = configuration || {};
		// on configure :
		this.configure();
		// on agit :

		if(! $.browser.msie){
			for (i=0;i<this.configuration.iteration;i++)
			{
				$(selecteur)
					.animate({opacity:this.configuration.opaciteMin},this.configuration.vitesse)
					.animate({opacity:this.configuration.opaciteMax},this.configuration.vitesse)
					;
			}
		}
		else
		{
			// les deux ie nous sortent sinon une police completement gachée en fin de traitement
			for (i=0;i<this.configuration.iteration;i++)
			{
			$(selecteur)
				/*
				.fadeTo(this.configuration.vitesse,this.configuration.opaciteMin)
				.fadeTo(this.configuration.vitesse,this.configuration.opaciteMax)
				*/
				.fadeOut(this.configuration.vitesse)
				.fadeIn(this.configuration.vitesse)
				;
		}
	}
};

/**
* Désactive la selection à la souris sur un element dom (pour le drag&drop, les evenements dblclick, etc)
*
* @param target element dom (par exemple resultat d'un selecteur jquery)
* @author Damien BENOIT <benoit@benchmark.fr>
* @since 06/05/2009 Damien BENOIT <benoit@benchmark.fr> création
* @return void
* @note fonctionnement validé sous ffox, ie 6/7, safari, opera
*/
benchmark.framework.ihm.effet.ObjEffet.desactiveSelection = function (target)
{
	if (typeof target.onselectstart!="undefined") //IE
	{
		target.onselectstart=function(){return false;};
	}
	else if (typeof target.style.MozUserSelect!="undefined") //Firefox et assimilés
	{
		target.style.MozUserSelect="none";
	}
	else // le reste, opéra et safari
	{
		target.onmousedown=function(){return false;};
		target.style.cursor = "default";
	}
};

/**
* change la source d'une image, par un clone de celle-ci et avec une effet de fadeIn fadeOut.
*
* @param target image sous forme d'element dom (par exemple resultat d'un selecteur jquery), ou selecteur lui même
* @param string url de destination
* @param [option] int vitesse d'animation
* @param [option] function à executer quand l'image est chargée (reçoit l'evenement en cours)
* @param [option] objet contenant les differents attribus à régler ou modifier (ne seront là qu'après le chargement, (mais avant l'execution du onload))
*
* @author Damien BENOIT <benoit@benchmark.fr>
* @since 25/06/2009 Damien BENOIT <benoit@benchmark.fr> création
* @return void
* @note fonctionnement validé sous ffox 3.0 , ie 6 / 7 , safari, chrome, opera
* @require jquery.findPos()
* @exemple 	$('.image_zoom').bind('mouseenter',function(){benchmark.framework.ihm.effet.ObjEffet.changeImage('#image_principale img',$(this).attr('src_350'),500);});
*/
benchmark.framework.ihm.effet.ObjEffet.changeImage = function (img,url,vitesse,onLoad,attributs)
{
	if (typeof(enCours) == 'undefined' || !enCours)
	{
		if(typeof(vitesse) == 'undefined'){ vitesse=500;}
		var enCours = true;
		// on récupère l'image actuelle et sa position :
		var old  = $(img);
		// pour éviter les problèmes d'instances d'images multiples :
		if ($(old).length > 1 )
		{
			$(old).each(function(i){if(i!=1){$(this).remove();}})
			old  = $(img);
		}
		// on récupère la position :
		var pos  = $(old).findPos();
		// on clone et agit :
		$(old)
			.css('opacity',1)
			.clone()
			.css('display','none')
			.css('position','absolute')
			.css('top',pos.y+'px')
			.css('left',pos.x+'px')
			.attr('src',url)
			.prependTo('#image_principale')
			.bind('load',
					function(e)
					{
						$(old).fadeOut(vitesse);
						$(this).fadeIn(vitesse);
						var self = this;
						setTimeout(
							function()
							{
								$(self).css('top','0px').css('left','0px').show().css('position','relative');
								$(old).remove();
								enCours = false;
							},vitesse+10);
						// on ajoute les attributs optionnels :
						if(typeof(attributs) != 'undefined' )
						{
							for (var attribut in attributs )
							{
								$(this).attr(attribut,attributs[attribut]);
							}
						}
						// on execute la fonction au chargement :
						if(typeof(onLoad) == 'function'){ onLoad(e); }
					}
			);
	}
};

