(function($) {
	$.fn.jawaSlides = function(settings){
		var defaults = {
			duration:		10000,
			transitionTime:	1000,
			slideList:		"SlideList",
			defaultSlide:	0
		};
		
		var slides = 		this;
		var id, slideHolder, numSlides, currentSlide, interval;
		
		$.extend(this, {
			cleanStart: function()
			{
				this.id = $(this).attr('id');
				
				$(this).remove('#'+this.id + ' #SlideHolder');
				$(this).append('<div id="SlideHolder"></div>');
				this.slideHolder = $('#'+this.id+' #SlideHolder');
				
				$(this).addClass('JawaSlides');
				var slidesElm = $('.JawaSlides .' + this.slideList);
				
				slidesElm.hide();
				this.numSlides = slidesElm.children().size();
				this.currentSlide = 0;
				
				this.generateNav();
				this.attachClicks();
				
				this.gotoSlide(this.defaultSlide);
				this.startTimer();
			},
			
			generateNav: function()
			{
				this.slideHolder.append('<div class="Navi"></div>');
				var navi = $('#'+this.id+' .Navi');
				
				navi.append('<a href="" id="Prev" class="Prev" title="Previous">&nbsp;</a>');
				for(var i = 0; i < this.numSlides; i++){
					navi.append('<a href="" class="SlideNum" id="' + i + '">' + (i + 1) + '</a>');
				}
				navi.append('<a href="" id="Next" class="Next" title="Next">&nbsp;</a>');
			},
			
			attachClicks: function()
			{
				$('#' + this.id + ' .Navi a[class="Prev"]').click(function(){
					slides.gotoPrevSlide();
					return false;
				});
				$('#' + this.id + ' .Navi a[class="Next"]').click(function(){
					slides.gotoNextSlide();
					return false;
				});
				$('#' + this.id + ' .Navi a[class="SlideNum"]').click(function(){
					slide = $(this).attr('id');
					if(slide != this.currentSlide)
						slides.gotoSlide(slide);
					return false;
				});
				
				// This ones actually a hover
				$(this).hover(
					function(){
						slides.stopTimer();
					},
					function(){
						slides.startTimer();
					});
			},
			
			startTimer: function()
			{
				this.interval = setInterval(function(){
					slides.gotoNextSlide();
				},this.duration);
			},
			
			stopTimer: function()
			{
				clearInterval(this.interval);
			},
			
			gotoSlide: function(idx)
			{
				$('.JawaSlides div.Slide:first').removeClass("First");
				this.slideHolder.prepend('<div class="Slide First" id="'+idx+'"></div>');
				
				//Fade to new slide
				var slide = $('.JawaSlides .' + this.slideList + ' li:eq(' + idx + ')');
				
				var topSlide = $('.JawaSlides div.Slide:last');
				var bottomSlide = $('.JawaSlides div.Slide:first');
				
				bottomSlide.html(slide.html());
				$('.JawaSlides div.Slide:not(.First)').each(function(){
						$(this).fadeOut(slides.transitionTime,function(){
							$(this).remove();
						});
				});
				
				$('#' + this.id + ' .Navi a').removeClass('Active');
				$('#' + this.id + ' .Navi a[id="' + idx + '"]').addClass('Active');
				
				this.currentSlide = idx;
			},
			
			gotoNextSlide: function()
			{
				var nextSlide = (this.currentSlide >= (this.numSlides - 1)) ? 0 : parseInt(this.currentSlide) + 1;
				this.gotoSlide(nextSlide);
			},
			
			gotoPrevSlide: function()
			{
				var prevSlide = (this.currentSlide <= 0) ? (this.numSlides - 1) :  this.currentSlide - 1;
				this.gotoSlide(prevSlide);
			}
		});
			
		$.extend(this, defaults, settings);
		
		this.cleanStart();
		
		slides = this;
		
		return this;
	};
})(jQuery);