//--- SLIDER

(function($) { 
	$.fn.jSlider = function(o)
	{
		o = $.extend({
			speed: 1500,
			continuous: false,
			auto: 0,
			btns: true,
			prevTitle: 'Précédent',
			nextTitle: 'Suivant'
		}, o);

		$(this).each(function(){
			var way = -1;
			var slider = $(this);
			var maskW = $('.mask', slider).css('overflow','hidden').width();
			var list = $('.list', slider);
			var items = $('.case', list);
			var itemW = items.width() + parseInt(items.css('paddingLeft')) + parseInt(items.css('paddingRight')) + parseInt(items.css('marginLeft')) + parseInt(items.css('marginRight'));
			var listW = items.length * itemW;
			list.css('width', listW);

			if (listW > maskW) {

				var slideFunc = function(){
					if (!slider.hasClass('slidering')){
						slider.addClass('slidering');

						if (((o.auto > 0) || (o.continuous == true)) && (way > 0)){
							items = $('.case', list);
							list.prepend(items.last());							
							list.css('marginLeft', parseInt(list.css('marginLeft'))- itemW);
						}

						var listL = parseInt(list.css('marginLeft')) + itemW*way;

						if (o.btns && (o.auto <= 0) && (o.continuous == false)){
							var btnHide = function(btn){ btn.animate({'opacity':0}, 250, function(){ btn.css('visibility','hidden'); }); };
							var btnShow = function(btn){ btn.css('visibility','visible'); btn.animate({'opacity':1}, 250); };
							listL < 0 ? btnShow(prev) : btnHide(prev);
							listL > (-listW + maskW) ? btnShow(next): btnHide(next);
						}

						list.stop().animate({'marginLeft':listL}, o.speed, function(){

							if (((o.auto > 0) || (o.continuous == true)) && (way < 0)){
								list.append(items.eq(0));
								list.css('marginLeft', 0);
								items = $('.case', list);
							}

							slider.removeClass('slidering');
						});
						way = -1;
					}
					return false;
				};

				if (o.btns){
					var prev = $('.prev', slider);
					if (prev.length < 1){
						prev = $(document.createElement('a')).addClass('btn prev').attr('title', o.prevTitle);
						var prevIcon = prev.append($(document.createElement('span')).addClass('icon'));
						slider.append(prev);
					}
					if ((o.auto <= 0) && (o.continuous == false)){ prev.css('visibility','hidden'); }
					else { prev.css('visibility','visible'); }
					prev.click(function(){ if (!slider.hasClass('slidering')){ way = 1; slideFunc();} });

					var next = $('.next', slider);
					if (next.length < 1){
						next = $(document.createElement('a')).addClass('btn next').attr('title', o.nextTitle);
						var nextIcon = next.append($(document.createElement('span')).addClass('icon'));
						slider.append(next);
					}
					next.css('visibility','visible').click(function(){ if (!slider.hasClass('slidering')){ way = -1; slideFunc();} });
				}
				else { $('.btn', slider).hide(); }

				if (o.auto > 0){
					var auto = false;
					var autoFunc = function(){
						clearInterval(auto);
						auto = setInterval(slideFunc, o.auto *1000);
					};
					autoFunc();
					items.hover(
						function(){ clearInterval(auto); },
						function(){ autoFunc(); }
					);
					$('.btn', slider).click(function(){ autoFunc(); });
				}
			}
		});
	};
})(jQuery);
