// JavaScript utéf8
//params={auto: true,delaiAuto: 1600,speed: 600,speedRetour: 400,pas : 2,divConteneur: "#slidesContainer",btLeft: "#slideshow #agauche",btRight : "#slideshow #adroite"}

(function($){
	$.fn.extend({
		Hslideshow: function(params){
			var params = $.extend({
			auto: true,
			delaiAuto: 1600,
			speed: 600,
			speedRetour: 400,
			pas : 2,
			divConteneur: "#slidesContainer",
			btLeft: "#slideshow #agauche",
			btRight : "#slideshow #adroite"
			},params);
			
			var currentSlide=1, formPlayLeft=false, inter=0, that=this; /* that : réf interne*/

//- retenir la position gauche de départ par rapport au parent
			var posX = $(params.divConteneur).offset().left - $(params.divConteneur).offsetParent().offset().left ;

// - calculer la largeur totale et fixer la largeur du conteneur
			var slides = $(params.divConteneur + ' .slide').each( function (i,o) {
				//$(this).css({'z-index':l-i, 'background':'none'});
					o.onmouseover=function(){clearInterval(inter);}
					/* OU lol
					$(this).mouseover(function(e,z){
					clearInterval(inter);
					});*/
				});
			
			var N = slides.length;
			var Lslide = slides.eq(0).outerWidth();
			var largeur= N * Lslide;
			$(params.divConteneur).css({'width':largeur, 'left': posX+'px'});

//- fonction jouer : play()

				this.play=function(setCurrentSlide){
					if(setCurrentSlide) currentSlide=setCurrentSlide;
				
				/* si on est à toc, on rembonine */
					if( currentSlide > N-params.pas ){//retour
					$(params.divConteneur).animate({ 
						left: posX+"px"
						}, params.speedRetour );
					currentSlide=1;
					
					}else{//suivant
					var left= posX-(currentSlide*Lslide);
					$(params.divConteneur).animate({ 
						left: left+"px"
						}, (formPlayLeft?params.speedRetour:params.speed) );
					currentSlide++;
					}
				formPlayLeft=false;
				}
				
				this.playLeft=function(setCurrentSlide){
				/* si on est à 1, on rembonine */
					if( currentSlide < 2 ){//retour
					currentSlide=N-params.pas;
					formPlayLeft=true;
					this.play();
					}else{//suivant
					currentSlide-=2;
					this.play();
					}
				}
				
				$(params.btLeft).click(function(e){
				clearInterval(inter);
				that.playLeft();
				return false;
				});
				
				$(params.btRight).click(function(e){
				clearInterval(inter);
				that.play();
				return false;
				});
				
				this.auto=function(){
				inter = setInterval( function(){
					that.play();
					} , params.delaiAuto );
				}
				
				if(params.auto){
				this.auto();
				}
				
			
		return this;
		} //: Hslideshow
	});//fn
})(jQuery);

/**
 *  
 *  jquery.simplefade.2.1.js
 *  
 *  date : 29/01/2009
 *  auteur : Laurent Bettin  
 *  
 */ 
 /**********************************************************************************

Conventions pour certains paramètres types

jqTab		: un tableau d'éléments jQuery
jqObj		: un objet d'éléments jQuery
jqEl		: un élément jQuery unique
i			: itérateur ou nombre
context 	: contexte d'exécution des sélécteurs jQuery
defaults	: les options par defaut du plugin

**********************************************************************************/

(function($){
     $.Fade = function(context, pluginOptions){
    	
		/*PRIVATES PARAM*/
        var defaults = {
                        delay : 2000, //durée de la transition
                        timeout : 3000, //temps d'attente entre 2 transitions
                        startCallback : null, //callback au début d'une transition
                        endCallback: null //callback à la fin d'une transition
                    };
    	
		var base = this;

		var context = $(context);
        var jqObj	= context.children();

		/*PUBLICS PARAM*/
		base.opts 		= $.extend({}, defaults, pluginOptions);
		base.current 	= $(jqObj[0]); /*element affiché mis à jour une fois la transition entre 2 images terminées*/
		base.t			= 1;
		
		
		/*PRIVATES METHODS*/
		function init () {
			base.current.show();
			fadeEl();			
		};

        function fadeEl() {
								
			//Fonction de callback au départ de la transition
			if( $.isFunction( base.opts.startCallback ) ) { 
				base.opts.startCallback( base.current );
			}
			
			if ( base.t ) {
				base.t = setTimeout ( function () {
			
					var nextEl 		= base.current.next();
					var nextToFade 	= nextEl.length ? nextEl : $(jqObj[0]) ;

					base.current.fadeOut ( base.opts.delay );
		
					nextToFade.fadeIn ( base.opts.delay, function () {
						/*MAJ de l'élément en cours d'affichage*/
						base.current = $(this);
						/*Callback de fin*/
						if( $.isFunction(base.opts.endCallback) ) { 
							base.opts.endCallback( base.current );
						}
						fadeEl()
					});
		
				}, base.opts.timeout );
			};
			
		};
        
		/*PUBLICS METHODS*/
		base.stopFade = function () {
			base.t = 0;
		}
		
		base.restartFade = function () {
			base.t = 1;
			init();
		}
		
		init();

    };
		
	 $.fn.fade = function(pluginOptions){
        return this.each(function(){
			if ($(this).data('fadePluginDatas')) {
				return;
			}			
            $(this).data('fadePluginDatas', new $.Fade(this, pluginOptions) );
        });
    };
	
})(jQuery);


/**
 *  
 *  jquery.slide.2.js
 *  
 *  auteur : Laurent Bettin  
 *  
 */ 
 /**********************************************************************************

Conventions pour certains paramètres types

jqA(monTab)		: un tableau d'éléments jQuery
jqO(MonObj)		: un objet d'éléments jQuery
jqE(monEl)		: un élément jQuery unique
context 		: contexte d'exécution des sélécteurs jQuery
defaults		: les options par defaut du plugin

**********************************************************************************/
(function($){
     $.slide = function(context, pluginOptions) {
		
		var defaults = {
			delay 			: 500, 					// durée de la transition
			timeout 		: 5000, 				// temps d'attente entre 2 transitions
			scrollRight		: '',					// bouton suivant (facultatif)
	        scrollLeft 		: '',					// bouton précédent (facultatif)
			startCallback 	: null, 				// callback au début d'une transition
            endCallback		: null 					// callback à la fin d'une transition
		};
		
		var base = this;
		
		/*PRIVATE PARAM*/
		/*Stocke les références des objets jquery à manipuler*/
		var jqEcontext 			= $(context);
		var jqEscrollContainer	= jqEcontext.find($.slide.defaultClasses.scrollContainer);
		var jqOchildren			= jqEscrollContainer.children();
		var l					= jqOchildren.length;
		var first				= jqOchildren.eq(0);
		var i					= 0;
		var decal 				= 0;
		var btnRight;
		var btnLeft;
		
		/*PUBLICS PARAM*/
		base.opts = $.extend({}, defaults, pluginOptions);
		base.data = {
			timer : 1	
		};
		
		/*PRIVATES METHODS*/
		function init() {
			
			jqEcontext.bind('scroll', scrollNext);
			
			//Si des boutons sont définis
			if ( base.opts.scrollRight ) {
				btnRight = jqEcontext.find(base.opts.scrollRight);
				bindRight();
			};
			
			if ( base.opts.scrollLeft ) {
				btnLeft = jqEcontext.find(base.opts.scrollLeft);
				bindLeft();
			};
			
		};
		
		var bindRight = function() {
			btnRight.click( function(e) {
				e.preventDefault();					 
			});
			
			btnRight.bind('click.scroll', function(e) {
				
				e.preventDefault();
				//bloque le bouton next si on est au dernier élément du slide et qu'on ne boucle pas
				if( i === l-1 ) {
					return false;
				};
				clearTimeout(base.data.timer);
				//déclenche l'évent scrollLeft en précisant la direction du scroll ( dir : 'rtl' )
				$(this).trigger({type : 'scroll', dir : 'rtl'});
			});
		};
		
		var bindLeft = function() {
			btnLeft.click( function(e) {
				e.preventDefault();					 
			});
			btnLeft.bind('click.scroll', function(e) {
				e.preventDefault();
				//bloque le bouton previous si on est au premier élément du slide et qu'on ne boucle pas
				if( i === 0 ) {
					return false;
				};
				clearTimeout(base.data.timer);
				//déclenche l'évent scrollLeft en précisant la direction du scroll ( dir : 'rtl' )
				$(this).trigger({type : 'scroll', dir : 'ltr'});
			});
		};
		
		//decale le pointeur qui dui définit le prochain élément à afficher en fonction de la direction
		var setPointeur = function (dir) {
			if( dir === 'rtl' ) {
				i = i === l-1 ? 0 : ++i;
			}else{
				i = --i;
			};
		};
		
		var scrollNext = function(e) {
			e.stopPropagation();
			if ( jqEscrollContainer.is(':animated') ) {
				return false;
			}else{
				setPointeur(e.dir);
				base.next();
			};
		};
		
		function slideHorizontal () {
			
			/*
				Changement par rapport à la version 1.2 : comme on déplace des éléments de largeur unique on ne calcule le décalage qu'une seule fois
				et on le stocke comme propriété de l'objet context
			*/
			if( !decal ) {
				
				/*
				Astuce pour éviter un bug IE : si aucune marge n'est définie sur l'élément parcouru firefox renvoie 0 alors que IE renvoie 'auto'
				ce qui fait bugger le calcul de la position (auto -> Not A Number)
				*/
				var marginLeft 	= first.css('margin-left') == 'auto' ? 0 : parseInt(first.css('margin-left'));
				var marginRight = first.css('margin-right') == 'auto' ? 0 : parseInt(first.css('margin-right'));
				
				/*Calcul de la position à atteindre en fonction de la position de l'élément cliqué*/
				decal = first.innerWidth() + marginLeft + marginRight;
				
			};
						
			var diff = i*decal;
						
			/*Si cette position est inférieur ou égale à la position de l'élément on se déplace vers la gauche (*-1) sinon vers la droite*/
			diff = parseInt(jqEscrollContainer.css('left')) <= diff ? diff * -1 : diff; 
			
			jqEscrollContainer.animate({
				left : diff
			},  base.opts.delay, function() {
					if( $.isFunction ( base.opts.endCallback ) ) { 
						base.opts.endCallback(base);
					};
				}
			);
			
		};
		
		/*PUBLICS METHODS*/
		base.next = function () {
			slideHorizontal();
		};
		
		base.setNextElToshow = function ( num ) {
			i = num;
			return jqOchildren.eq(num);
		};
		
		base.getNextElToshow = function () {
			return jqOchildren.eq(i);
		};
		
		base.setCurrentIndex = function( num ) {
			i = num;
			return i;
		};
		
		base.getCurrentIndex = function() {
			return i;
		};
		
		base.getChildrenLength = function() {
			return l;
		};
		
		base.getContext = function() {
			return jqEcontext;
		};
		
		base.stopSlider = function () {
			clearTimeout(base.data.timer);
			base.data.timer = 0;
		};
		
		base.restartSlider = function () {
			base.data.timer = 1;
			init();
		};
		
		base.rebindLeft = function () {
			bindLeft();
		};
		
		base.rebindRight = function () {
			bindRight();
		};
		
		init();

    };
	
	$.slide.customTransition = {
		'customTransition' : null
	};
	
	$.slide.defaultClasses = {
        scrollContainer : '.scrollContainer' // zone à faire défiler
    };
	
	$.fn.slide = function(pluginOptions){
		return this.each(function(){
			if ($(this).data('slidePluginDatas')) {
				return;
			}			
			$(this).data('slidePluginDatas', new $.slide(this, pluginOptions) );
		});
	};
	
})(jQuery);

