(function($) { 
	$.fn.slider = function(o)
	{
		o = $.extend({
			decal: 1,
			speed: 800,
			auto: false,
			wait: 3,
			btns: true,
			prevTitle: 'Précédent',
			nextTitle: 'Suivant'
		}, o);

		$(this).each(function(){
			var way = -1;
			var slider = $(this);
			var list = $('ul', this);
			var items = $('> li', list);
			var itemW = items.width() + parseInt(items.css('marginLeft')) + parseInt(items.css('marginRight'));
			var listW = items.length * itemW;
			list.css('width', listW);
			var maskW = $('.mask', slider).width();

			if (listW > maskW) {

				if (o.btns){
					var prev = this.appendChild(document.createElement('a'));
					var next = this.appendChild(document.createElement('a'));
					prev.className = 'btn prev';
					next.className = 'btn next';
					prev.title = o.prevTitle;
					next.title = o.nextTitle;
					prev = $(prev);
					next = $(next);
					next.css('visibility','visible');
					prev.css('visibility','hidden');
					prev.animate({'opacity': 0});
					prev.click(function(){way = 1; slideFunc();});
					next.click(function(){way = -1; slideFunc();});
				}

				if (o.auto == true){
					var autoFunc = function(){
						if (items.eq(0).css('visibility') == 'visible'){way = -1;}
						if (items.eq(items.length -1).css('visibility') == 'visible'){way = 1;}
						slideFunc();
					};
					var auto = setInterval(autoFunc, o.wait *1000);
					var autoEnable = true;
					items.hover(function(){
						clearInterval(auto);
						autoEnable = false;
					},
					function(){
						clearInterval(auto);
						auto = setInterval(autoFunc, o.wait *1000);
						autoEnable = true;
					});
				}

				items.each(function(){
					var index = items.index(this) +1;
					var indexR = maskW / itemW;
					if (index > indexR){$(this).css('visibility','hidden');}
				});

				var slideFunc = function(){

					if (!$(slider).hasClass('slidering')){

						if (o.auto == true){clearInterval(auto);}
						$(slider).addClass('slidering');
						var listL = parseInt(list.css('marginLeft')) + itemW * o.decal * way;

						if (o.btns){
							var hidePrev = function(){ prev.animate({'opacity':0}, 250, function(){ prev.css('visibility','hidden'); }); };
							var hideNext = function(){ next.animate({'opacity':0}, 250, function(){ next.css('visibility','hidden'); }); };
							var showPrev = function(){ prev.css('visibility','visible'); prev.animate({'opacity':1}, 250); };
							var showNext = function(){ next.css('visibility','visible'); next.animate({'opacity':1}, 250); };
							listL < 0 ? showPrev() : hidePrev();
							listL > (-listW + maskW) ? showNext(): hideNext();
						}

						items.each(function(){
							var index = items.index(this) +1;
							var indexL = Math.abs(listL) / itemW;
							var indexR = indexL + maskW / itemW;
							if (index <= indexL || index > indexR){$(this).animate({opacity:0}, o.speed, function(){ $(this).css('visibility','hidden'); });}
							else{$(this).css('visibility','visible').animate({opacity:1}, o.speed);}
						});

						list.animate({'marginLeft':listL}, o.speed, function(){
							$(slider).removeClass('slidering');
							if (o.auto == true && autoEnable){auto = setInterval(autoFunc, o.wait *1000);}
						});

					}

					return false;
				};

			}

		});
	};
})(jQuery);
