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

		param.output = param.output?param.output:null
		param.auto = param.auto?param.auto:0;
		param.speed = param.speed?param.speed:'normal';
		param.start = param.start?param.start:0;
		param.input = param.input?param.input:'';
		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},param.speed);
				}
				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.speed);
				}
				param.idx = (param.idx+1)%els.length
				
				if(param.auto>0)
				{
					clearTimeout(param.autoInterval);
					param.autoInterval = setTimeout(function(c){ /*console.debug(c),*/ $('.mediaSlider-next',c).trigger('click'); },param.auto,$(_container).parent());
				}
			});
			$(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},param.speed);
				}
				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.speed);
				}
				
				param.idx = (param.idx-1)%els.length
				
				if(param.auto>0)
				{
					clearTimeout(param.autoInterval);
					param.autoInterval = setTimeout(function(c){ /*console.debug(c),*/ $('.mediaSlider-next',c).trigger('click'); },param.auto,$(_container).parent());
				}
			});
			$(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); 
			}
			
			if(param.output!=null)
			{
				$('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+'">');
					}
					else if(href.match(/http:\/\/www.dailymotion.com\/video\//))
					{
						var code = href.replace(/http:\/\/www.dailymotion.com\/video\/([^_]+)_.+/,'$1');
						$(param.output).html('<div><object width="'+mediaWidth+'" height="'+mediaHeight+'"><param name="movie" value="http://www.dailymotion.com/swf/'+code+'"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.dailymotion.com/swf/'+code+'" type="application/x-shockwave-flash" width="'+mediaWidth+'" height="'+mediaHeight+'" allowFullScreen="true" allowScriptAccess="always"></embed></object></div>');
					}
					else if(href.match(/youtube.com\/watch\?v=/))
					{
						var code = href.replace(/.+youtube.com\/watch\?v=([^_]+)/,'$1');
						$(param.output).html('<object width="'+mediaWidth+'" height="'+mediaHeight+'"><param name="movie" value="http://www.youtube.com/v/'+code+'&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/'+code+'&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="'+mediaWidth+'" height="'+mediaHeight+'"></embed></object>');
					}
					
					if(param.input!='')
						$(param.input).val(href);
					
					return false;
				});
			}
			else
			{
				$('a',el).css('cursor','default');
			}
		}
		
		$('a',$('li',_container).eq(param.start?param.start:0)).trigger('click');
		
		if(param.auto>0)
			param.autoInterval = setTimeout(function(c){ /*console.debug(c),*/ $('.mediaSlider-next',c).trigger('click'); },param.auto,$(_container).parent());
	}
});

