// JavaScript Document

(function($) {
	$.fn.homecarousel = function(settings) {
		
		var settings = jQuery.extend({
			container:			"carousel-images-container",
			list:				"carousel-images",
			previousButton: 	"prev-btn", 
			nextButton: 		"next-btn",
			info:				"carousel-info",
			thumbs:				"carousel-thumbs-container",
			slideWidth:			688,
			startSlide:			1
		}, settings);
		// Caching the jQuery object with all elements matched
		var container = this; // This, in this context, refer to jQuery object
		var containerID = this.attr("id");
		var numChildren = $('#'+containerID+' .'+settings.list+' li').length;
		var listWidth = numChildren*settings.slideWidth;
		var slideIndex = 0;
		var animating = false;
		var pauseBtn = null;
		var timer;
		
		function _initialize(){
			$('#'+containerID+' .'+settings.container).width(listWidth);
			$('#'+containerID+' .'+settings.list).width(listWidth);
			if(settings.startSlide!=1){
				slideIndex = settings.startSlide-1;
			}
			
			if(!animating){
				animating = true;
				_shift();
			}
		}
		
		function _jumpto(index){
			if(index!=slideIndex){
				animating = true;
				slideIndex = index;
				_shift();
			}
			
		}
		
		function _next(){
			if(!animating){
				animating = true;
				if(slideIndex==(numChildren-1)){
					slideIndex = 0;
				} else {
					slideIndex++;
				}
				_shift();
			}
			return false;	
		}
		
		function _changeThumbs(){
			$('#'+containerID+' .'+settings.thumbs+' li').each(function(i){
				if(i==slideIndex){
					if(!$(this).hasClass("on")){
						$(this).addClass("on");	
					}
				} else {
					if($(this).hasClass("on")){
						$(this).removeClass("on");
					}
				}
			});	
		}
		
		function _shift(){
			var endX = -1*((settings.slideWidth*slideIndex));
			$('#'+containerID+' .'+settings.list).stop();
			$('#'+containerID+' .'+settings.list).animate({left:endX+'px'},1000,'easeInOutQuint',_animatingOff);
			_changeThumbs();
			if($(pauseBtn).hasClass('pause') || pauseBtn == null){
				_resetTime();
			}
		}
		
		function _animatingOff(){
			animating = false;
		}
		
		function _resetTime(){
			clearTimeout(timer);
			timer = setTimeout(function(){
				_next();
			}, 5000);
		}
		
		function _playPause(){
			if($(pauseBtn).hasClass('pause')){
				$(pauseBtn).toggleClass('pause');
				$(pauseBtn).toggleClass('play');
				clearTimeout(timer);	
			} else {
				$(pauseBtn).toggleClass('pause');
				$(pauseBtn).toggleClass('play');
				_resetTime();
			}
		}
		
		_initialize();
		$('#'+containerID+' .'+settings.thumbs+' li').each(function(i){
			if($(this).hasClass('pause') || $(this).hasClass('play')){
				pauseBtn = this;
				$(this).click(function(){
					_playPause();
					return false;
				});
			} else {
				$(this).click(function(){
					_jumpto(i);
					return false;
				});
			}
		});

	};
})(jQuery);
