//dependency on $.fn.delegate method which is located in newsFeed.js

(function($){
	$.Carousel = function(options){
		var self = this;
		this.defaults = {
			interval: 5000, speed: 750
		}
		this.settings = $.extend({}, this.defaults, options);
		var timer;
		var animating = false;
		
		this.init = function(){
			this.setIndex();
			
			if (this.settings.images.size() < 8){
				var count = this.settings.images.size();
				this.settings.pagination.find('li').each(function(){
					if (parseInt($(this).children('a').text()) > count) $(this).remove();
				})
			}
			
			this.settings.pagination.delegate('click', {
				'a': function(e){
					e.preventDefault();
					if(!animating){
						self.stopTimer();
						var $target = $(e.target);
						var index = parseInt($target.text()) - 1;
						self.hide(function(){
							self.show(index);
							self.startTimer();
						});
						
						self.settings.pagination.find('a.active').removeClass('active');
						$target.addClass('active');
					}
				}
			})
			
			this.startTimer();
		}
		
		this.show = function(index, callback){
			callback = (typeof callback == 'undefined') ? function(){} : callback;
			index = (index >= this.settings.images.size()) ? 0 : index;
			animating = true;
			this.settings.images.eq(index).fadeIn(this.settings.speed, function(){
				animating = false;
				callback();
			})
		}
		
		this.hide = function(callback){
			callback = (typeof callback == 'undefined') ? function(){} : callback;
			animating = true;
			this.settings.images.filter(':visible').fadeOut(this.settings.speed, function(){
				animating = false;
				callback();
			})
		}
		
		this.setIndex = function(){
			var imgCount = 1;
			this.settings.images.each(function(){
				$(this).data('index', imgCount);
				imgCount++;
			});
		}
		
		this.startTimer = function(){
			timer = setInterval(function(){
				var index = self.settings.images.filter(':visible').data('index');
				index = (index >= self.settings.images.size()) ? 0 : index;
				self.hide(function(){
					self.show(index);
				});
				
				self.settings.pagination.find('a.active').removeClass('active');
				self.settings.pagination.find('a').eq(index).addClass('active');
			}, self.settings.interval);
		}
		
		this.stopTimer = function(){
			if (timer) clearInterval(timer)
		}
		
		this.init();
	}
})(jQuery);

