// --------------------------------------------------
//
// Carousel
//
// USAGE: $("#carousel").carousel({options});
//
// AUTHOR: Alex Brendon
//
// DEPENDENCIES:
// jQuery 1.6 or later
//
// --------------------------------------------------

(function($){
	$.fn.carousel = function(options) {
	
		var defaults = {
			 perPage: 5,
			 speed: 500,
			 interval: 6000,
			 nav: "#carousel-nav",
			 prev: "#prev",
			 next: "#next",
			 autoScroll: true,
			 nextWrap: false,
			 fade: false
		};
		
		var options = $.extend(defaults, options);
		
		return this.each(function(){
			obj = $(this);
			var panel = obj.find("li");
			var numberOf = panel.length; // Number of items
			var page = Math.ceil(numberOf / options.perPage); // Calculate number of pages
			var elWidth = panel.outerWidth(true); // Get the width of a single element
			var width = options.perPage * elWidth; // get pixels per page
			var sliderWidth = (options.fade) ? width : width * page; // get pixels for entire slider
				
			obj.css({width: sliderWidth + 'px'}); // Set slider width
			
			
			if(options.fade){
				for(i=0;i<panel.length;i++){
					$(panel).eq(i).css({zIndex: -i});
				}
				panel.css({position:"absolute"});
			}
			
			// Add buttons depending on number of pages
			for(var i=1; i<page; i++){
				$('<li><a href="#"></a></li>').appendTo(options.nav);
			}
			
			// auto scroll
			if(options.autoScroll === true){
				var timer = setInterval(function(){slide(true)}, options.interval);
			}
			
			$(options.nav).find("li").click(function(){
				clearInterval(timer);
				
				var index = $(this).index();
				index = index * -width;
				obj.animate({left: index + 'px'}, options.speed);
				$(options.nav).find("li").removeClass('current');
				$(this).addClass('current');
				
				return false;
			});
			
			$(options.next).click(function(){
				clearInterval(timer);
				slide();
			});
			
			$(options.prev).click(function(){
				clearInterval(timer);
				slidePrev();
			});
			
			
			function slide(auto){
					var $this = $(options.nav).find("li.current");
					var index = $this.index();
					var number = $(options.nav).find("li").length;
					if(options.fade){
						$(panel).css({zIndex: 0});
					} else {
						if(index == (number-1)){
							if(options.nextWrap == true || auto){
								index = 0;
								pixels = (index) * - width;
								obj.stop().animate({left: pixels + 'px'}, options.speed);
								$(options.nav).find("li.current").removeClass('current');
								$this.parent().find('li:first').addClass('current');
							}
						} else {
							pixels = (index + 1) * - width;
							obj.stop().animate({left: pixels + 'px'}, options.speed);
							$(options.nav).find("li").removeClass('current');
							$this.next().addClass('current');
						}
					}

					return false;
			}

			function slidePrev(){
					var $this = $(options.nav).find("li.current");
					var index = $this.index();
					var number = $(options.nav).find("li").length;
					if(index === 0){
						if(options.nextWrap == true){
							index = number-1;
							pixels = (index) * - width;
							obj.stop().animate({left: pixels + 'px'}, options.speed);
							$(options.nav).find("li.current").removeClass('current');
							$this.parent().find('li:last').addClass('current');
						}
					} else {
						pixels = (index) * - width + width;
						obj.stop().animate({left: pixels + 'px'}, options.speed);
						$(options.nav).find("li.current").removeClass('current');
						$this.prev().addClass('current');
					}

					return false;
			}
		});		
	};	
})(jQuery);	
