(function($) {
	$.fn.gigaFlow = function(settings) {
		var config = {'speed': 500, 'initialSlide': 1, 'autoFlow': 8};
 
		if (settings) $.extend(config, settings);
		
		jQuery.extend( jQuery.easing,
		{
			easeGigaFlow: function (x, t, b, c, d) {
				if ((t/=d/2) < 1) return c/2*t*t*t + b;
				return c/2*((t-=2)*t*t + 2) + b;
			}
		});
		
		function doSlide() {
			$('#slidecontent').stop().animate({'top':-slideOffset*270},{duration:config.speed, easing:'easeGigaFlow'});
			$('#slidenav .navspot').each(function(j) {
				if (j==slideOffset) {
					$(this).addClass('navspotsel');
				} else {
					$(this).removeClass('navspotsel');
				}
			});
		}
		
		function nextSlide() {
			slideOffset++;
			if (slideOffset>slideMax-1) {
				slideOffset=0;
			}
			doSlide();
		}
		
		function previousSlide() {
			slideOffset--;
			if (slideOffset<0) {
				slideOffset=slideMax-1;
			}
			doSlide();
		}
		
		var slideOffset=config.initialSlide-1;
		var slideMax=$('#slidecontent>div').length;
		var slideInterval;
		
		if (config.autoFlow!=0) {
			slideInterval=window.setInterval(nextSlide, config.autoFlow*1000);
			
			this.hover(function() {
				window.clearInterval(slideInterval);
				slideInterval=null;
			}, function() {
				if (!slideInterval) {
					slideInterval=window.setInterval(nextSlide, config.autoFlow*1000);
				}
			});
			
		}
		
		$('#slidecontent').css({'top': -slideOffset*270});
		
		for(var i=0; i<slideMax; i++) {
			$('#slidenav').append('<div class="navspot"></div>');
		}
		
		$('#slidenav .navspot').each(function(j) {
			$(this).css('right',(slideMax-j-1)*26+4+'px');
			if (j==slideOffset) {
				$(this).addClass('navspotsel');
			} else {
				$(this).removeClass('navspotsel');
			}		
		});
		
		$('#slidenav .navspot').click(function() {
			slideOffset=$('#slidenav .navspot').index(this)
			doSlide();
		});
		
		$('#next').click(nextSlide);

		$('#prev').click(previousSlide);
		
		
		
		return this;
	};
 })(jQuery);

