jQuery.fn.extend({
	mediaSlider : function(param)
	{
		// on doit obligatoirement avoir une liste UL >LI ciblé au départ

		// Vérification des paramètres
		if(param.output==undefined) 
		{
			alert('MediaSlider : Output not defined'); 
			return false;
		};
		param.scroll = param.scroll?param.scroll:'V';
		param.display = param.display?param.display:1;
		param.title = param.title?param.title:'';
		param.idx = 0; // index de décalage (++1 ou --1 selon les clique sur prev et next)
		
		// Création d'un conteneur intégrant les paramètres
		var _container	 = $(this).wrap('<div class="mediaSlider-container mediaSlider-'+(param.skin?param.skin:'default')+'">');

		if($('li',_container).length > param.display)
		{
			// Ajout du bouton précédent
			var _prev = $('<div class="mediaSlider-prev">Prev.</div>');
			$(_prev).bind('click',function()
			{
				// récupération de la liste
				var els = $('li',_container);
				var _decal = param.scroll=='V' ? els.eq(0).height():els.eq(0).width();
				if(param.scroll=='V')
				{
					$(els).stop();
					for(var i=0; i<els.length-param.display; i++)
					{
						var idx = (els.length+(els.length-1)-i-param.idx)%els.length;
						$(els[idx]).css('top',_decal*(-1-i));
					}
					for(var i=0; i<param.display; i++)
					{
						var idx = (els.length+i-param.idx)%els.length;
						$(els[idx]).css('top',_decal*i);
					}
					$(els).animate({'top':'+='+_decal});
				}
				if(param.scroll=='H')
				{
					$(els).stop();
					for(var i=0; i<els.length-param.display; i++)
					{
						var idx = (els.length+(els.length-1)-i-param.idx)%els.length;
						$(els[idx]).css('left',_decal*(-1-i));
					}
					for(var i=0; i<param.display; i++)
					{
						var idx = (els.length+i-param.idx)%els.length;
						$(els[idx]).css('left',_decal*i);
					}
					$(els).animate({'left':'+='+_decal});
				}
				param.idx = (param.idx+1)%els.length
			});
			$(this).before(_prev);
			
			// Ajout du bouton suivant
			var _next = $('<div class="mediaSlider-next">Next.</div>');
			$(_next).bind('click',function()
			{
				
				// récupération de la liste
				var els = $('li',_container);
				var _decal = param.scroll=='V' ? els.eq(0).height():els.eq(0).width();
				if(param.scroll=='V')
				{
					$(els).stop();
					for(var i=0; i<els.length-param.display; i++)
					{
						var idx = ((els.length-1)-i-param.idx)%els.length;
						$(els[idx]).css('top',_decal*(param.display+(els.length-param.display-1-i)));
					}
					for(var i=0; i<param.display; i++)
					{
						var idx = (i-param.idx)%els.length;
						$(els[idx]).css('top',_decal*i);
					}
					$(els).animate({'top':'-='+_decal});
				}
				if(param.scroll=='H')
				{
					$(els).stop();
					for(var i=0; i<els.length-param.display; i++)
					{
						var idx = ((els.length-1)-i-param.idx)%els.length;
						$(els[idx]).css('left',_decal*(param.display+(els.length-param.display-1-i)));
					}
					for(var i=0; i<param.display; i++)
					{
						var idx = (i-param.idx)%els.length;
						$(els[idx]).css('left',_decal*i);
					}
					$(els).animate({'left':'-='+_decal});
				}
				
				param.idx = (param.idx-1)%els.length
			});
			$(this).after(_next);
		}
		
		// Réduction de la zone de Slide selon la valeur souhaité
		if(param.scroll=='V')
			$(this).css('height',$('li',this).height()*param.display);
		else
			$(this).css('width',$('li',this).width()*param.display);
		
		
		// intégration des actions sur les objets média
		var els = $('li',this);
		for(var i=0; i<els.length; i++)
		{
			var el = els.eq(i);
			
			// décalage de base
			if(param.scroll=='V')
			{
				el.css('top',el.height()*i); 
				el.css('left',0);
			}
			else
			{
				el.css('top',0); 
				el.css('left',el.width()*i); 
			}
			
			$('a',el).bind('click',function()
			{
				var mediaWidth = $(param.output).width();
				var mediaHeight = $(param.output).height();

				// affichage du Titre si zone de sortie définit
				if(param.title!='')
					$(param.title).html($(this).attr('title')?$(this).attr('title'):'&nbsp;');

				// Gestion des type de média - modde d'affichage conditionné
				var href = $(this).attr('href');
				if(href.match(/.jpg|.png|.gif/))
				{
					//$(param.output).html('<img src="'+href+'" width="'+mediaWidth+'" height="'+mediaHeight+'">');
					$(param.output).html('<img src="'+href+'">');
				}
				
				return false;
			});
		}
		
		$('a',$('li',_container).eq(param.start?param.start:0)).trigger('click');
	}
});

