(function($){
	$.fn.gwSlider = function(options) {
	
		var defaults = {
			auto:				true,
			delay:				8,
			animationSpeed:		"fast",
			controls:			true,
			status_controls:	true,
			keyboard:			true,
			boucles:			0,
			sens:				"right"
		};
				
		var options = $.extend(defaults, options);
		
		this.each(function(){
			if($("li.liSlideCarousel", slider).length > 1){
				var slider			= $(this);
				var sens			= options.sens;
				var pause			= false;
				var width			= 0;
				var height			= 0;
				var current_slide	= 0;
				var nb_slides		= $("li.liSlideCarousel", slider).length;
				var inter			= null;
				
				slider.parent().mouseenter(function(){
					if(options.controls) {
						slider.siblings(".gwSlider_controls").fadeIn(options.animationSpeed);
					}
				}).mouseleave(function(){
					if(options.controls) {
						slider.siblings(".gwSlider_controls").fadeOut(options.animationSpeed);
					}
				});
				
				function init() {
					width	= $("li.liSlideCarousel:first", slider).width();
					height	= $("li.liSlideCarousel:first", slider).height();
					
					slider.width(width);
					slider.height(height);
					slider.parent().width(width);
					slider.parent().height(height);
					
					if(options.controls) {
						slider.siblings(".gwSlider_status").show();
					}
					
					if(options.controls && options.status_controls) {
						$("#gwSlider_bullet_"+(parseInt($("li.liSlideCarousel", slider).index($("li.liSlideCarousel:first-child", slider)))+1)).addClass("on");
					}
				}
				
				if(options.auto) {
					inter = setInterval(function(){displayDiaporama(options)}, (options.delay*1000));
				}
				
				$("li.liSlideCarousel", slider).hide();
				$("li.liSlideCarousel:first", slider).addClass("selected").fadeIn(options.animationSpeed, init);
				
				$("li.liSlideCarousel", slider).each(function(){
					elt = $(this);
					
					i = parseInt($("li.liSlideCarousel", slider).index($(this))+1);
					$(this).attr("id", "gwSlider_div_"+i);
				});
				
				if(options.keyboard) {
					$(document).keydown(function(event) {
						switch(event.keyCode){
							case 37 :
								prev();
							break;
							
							case 39 :
								next();
							break;
						}
					});
				}
				
				if(options.controls) {
					slider.after("<div class='gwSlider_status'></div>");
					$("li.liSlideCarousel", slider).each(function(){
						i = parseInt($("li.liSlideCarousel", slider).index($(this))+1);
						$(".gwSlider_status", slider.parent()).append("<a id='gwSlider_bullet_"+i+"' class='gwSlider_bullet' href='#'></a>");
					})
					
					$(".gwSlider_status a", slider.parent()).click(function(){
						if($("li.liSlideCarousel.selected", slider).attr("id").split("_")[2] != $(this).attr("id").split("_")[2]) {
							nextImage(options, $(this));
						}
						return false;
					})
					
					slider.after("<div class='gwSlider_controls'>"+((options.auto)?"<a href='#' class='pause'>Pause</a>":"")+"</div>");
					
					$(".prev").click(function(){
						prev();
						return false;
					});
					
					$(".next").click(function(){
						next();
						return false;
					});
					
					$(".pause", slider.siblings()).click(function(){
						if($(this).hasClass("pause")) {
							$(this).removeClass("pause").addClass("play");
							clearInterval(inter);
							pause = true;
						} else {
							$(this).removeClass("play").addClass("pause");
							inter = setInterval(function(){displayDiaporama(options)}, (options.delay*1000));
							pause = false;
						}
						
						return false;
					});
				}
				
				function next() {
					if(!$("li.liSlideCarousel.selected", slider).is(":last-child")) {
						elt =  $("li.liSlideCarousel.selected", slider).next();
					} else {
						elt =  $("li.liSlideCarousel:first-child", slider);
					}
						
					nextImage(options, elt);
					sens = "right";
				}
				
				function prev() {
					if(!$("li.liSlideCarousel.selected", slider).is(":first-child")) {
						elt =  $("li.liSlideCarousel.selected", slider).prev();
					} else {
						elt =  $("li.liSlideCarousel:last-child", slider);
					}
						
					nextImage(options, elt);
					sens = "left";
				}
				
				function nextImage(options, elt) {
					clearInterval(inter);

					id = elt.attr("id").split("_")[2];
					
					$("li.liSlideCarousel.selected", slider).removeClass("selected").fadeOut(options.animationSpeed, function() {
						$(".gwSlider_status a").removeClass("on");
						if(options.controls && options.status_controls) {
							$("#gwSlider_bullet_"+id).addClass("on");
						}						
						$("li#gwSlider_div_"+id, slider).addClass("selected").fadeIn(options.animationSpeed);
					});
					
						
					if(!pause && options.auto) {	
						if(options.boucles == 0 || (options.boucles > 0 && (slider.data("current_slide")/slider.children().length) < options.boucles )) {
							inter = setInterval(function(){displayDiaporama(options)}, (options.delay*1000));
						} else {
							$(".pause", slider.siblings()).remove();
						}
					}
				}
				
				function displayDiaporama(options) {
					current_slide++;
					slider.data("current_slide", current_slide);
					
					if(sens == "right") {
						next();
					} else {
						prev();
					}
				}
			}
		});		
		return this;
	};
})(jQuery);

