/* 

	@Description: Carousel Air france
	@Auteur: Neov - w
	@Creation: 07/10/2008
	@modification: 02/12/2008

*/

(function($){
		
	$.fn.extend({
				
		
		// ajout scrollableImage Reference 
		scrollableImageReference: function(param)
		{
			this.each(
				function()
				{
					// parametres
					var s = $.extend(
						{
							index		: 0,
							nbrImg		: 0,
							globalWidth : 0,
							sens		: 0,
							time		: 20,
							interval	: 0,
							parent		: $(this),
							waitImage	: '<img src="' + j_basepath + 'design/front/images/design/preload.gif" class="waiting" />'
						}
						, param
					);
					
					// desactive les boutons precedent et suivant au chargement
					$(this).parent().find('.picto').find('a').addClass('inactive');
					$(this).find('li').hide();
					
					// affiche l'image de prechargement
					$(this).append(s.waitImage);
					
					// suppression marge du dernier element
					$('ul > li:last-child', this).find('img').css({marginRight: 0});
					
					// appel le prechargement des images
					s.nbrImg = $(this).find('img').length;

					$(this).find('img').each(
						function()
						{
							$(this).preloadImage(s);
						}
					);
				}
			);
		},
		
		// preload image.
		preloadImage: function(s)
		{		
			var imagePreloader = new Image();
	
			imagePreloader.onload = function () {
				imagePreloader.onload = null;
				var imgWidth = imagePreloader.width;
				s.index++;
				
				// action lors de la fin du preload
				if(s.index == s.nbrImg)	$().setScroll(s);
			};
					
			imagePreloader.src = $(this).attr('src');

		},
		
		// mise en place du scrolling
		setScroll: function(s)
		{
			var $parent = s.parent;
			var pWidth = parseInt($parent.width());
			
			// cache l'image de prechargement
			$parent.find('.waiting').animate(
				{opacity:'hide'},
				200,
				function() {
					$parent.find('li').show();
				}
			);
			
			// modification de la taille de la liste
			$parent.find('ul').find('li').each(
				function()
				{
					s.globalWidth += $(this).width();
				}
			);
			
			$parent.find('ul').width(s.globalWidth);
						
			// initialisation de la position des elements defilants
			$parent.find('ul').css({left: 0 });
			
			// active ou non les boutons
			if ( s.globalWidth <= pWidth ) {
				// desactivation des boutons
				$parent.parent().find('.suiv').find('a').addClass('inactive');
				$parent.parent().find('.prec').find('a').addClass('inactive');
				
			} else {
				// activation des boutons suivants au chargement et ajout des evenements sur les boutons
				$parent.parent().find('.suiv').find('a')
					.removeClass('inactive')
					.click(
						function()
						{
							clearInterval(s.interval);
							$parent.find('ul').scrollRight(s);
							
						}
					);
				$parent.parent().find('.prec').find('a')
					.removeClass('inactive')
					.click(
						function()
						{
							clearInterval(s.interval);
							$parent.find('ul').scrollLeft(s);
							
						}
					);
				
				// lance le scroll et l'action au rollover des images
				$parent.find('ul').scrollLeft(s);
				$parent.find('ul').find('li').hoverAction(s);
			}
		},
		
		// scrolling vers la gauche
		scrollLeft: function(s) {
			s.sens = 0;
			var w = $(this).find('li').eq(0).width();
			var $el = $(this);
			
			s.interval = setInterval(
				function()
				{
					var leftPos = parseInt($el.css('left'));
					leftPos --;
					
					if( leftPos == -$el.find('li').eq(0).width() ) {
						$el.find('li').eq(0).appendTo($el);
						leftPos = 0;
					}
					
					$el.css({left: leftPos + 'px'});
				},
				
				s.time
			);
			
		},
		
		// scrolling vers la droite
		scrollRight: function(s)
		{
			s.sens = 1;
			var l = $(this).find('li').length;
			var w = $(this).find('li').eq(l-1).width();
			var $el = $(this);
			var leftPos = parseInt($el.css('left')) ;

			
			s.interval = setInterval(
				function()
				{				
					if( leftPos == 0 ) {
						$el.find('li').eq(l-1).prependTo($el);
						leftPos = leftPos - $el.find('li').eq(0).width();
					}
					
					$el.css({left: leftPos + 'px'});
					leftPos ++;
					
				},
				
				s.time
			);
		},
		
		// action au rollover
		hoverAction: function(s)
		{
			
			$(this).hover(
				function()
				{
					clearInterval(s.interval);
				},
				function()
				{
					if (s.sens == 0) {
						s.parent.find('ul').scrollLeft(s);
					} else {
						s.parent.find('ul').scrollRight(s);
					}
				}
			);
		}
	
	});
	
})(jQuery);

$(function() {
		   
	$('.enveloppe_image').scrollableImageReference();
	
});

