// JavaScript Document

(function($) {
	$.fn.homecarousel = function(settings) {
		
		
		var settings = jQuery.extend({
			images:				"#carousel-images",
			text:				"#carousel-text",
			controls:			"#carousel-controls",
			classes:			
			{
				btn:			"btn",
				on:				"on",
				play:			"play-btn",
				pause:			"pause-btn",
				previous:		"previous-btn",
				next:			"next-btn"
			},
			animateText:		false,
			
			// shiftLeft, shiftRight,shiftUp, shiftDown, slideLeft, slideRight, slideUp, slideDown, fade
			textAnimationType:	"fade",
			textSpeed:			500, // milliseconds
			textEaseIn:			"easeInOutQuad",
			textEaseOut:		"easeInOutQuad",
			
			slideAnimationType:	"fade",
			slideSpeed:			500, // milliseconds
			slideEaseIn:		"easeInOutQuad",
			slideEaseOut:		"easeInOutQuad",
			
			textShiftDistance:		50, // pixels
			slideShiftDistance:		300, // pixels
			
			slideStart:			1,
			
			slideTime:			5000,
			
			autoPlay:			true,
			
			useCookies:			true
			
		}, settings);
		
		var c = this;
		var slides = $(settings.images+' li', c);
		var numslides = slides.length;
		if (numslides<=1) return false;
		
		var slide = settings.slideStart-1;
		var timer;
		var playing;
		
		if(settings.autoPlay){
			playing = true;
		} else {
			playing = false;
		}
		
		function _initialize(){
			_settext();
			_setimages();
			_resetplaypause();		
			_resetbuttons();
			_resettime();
		}
		
		function _settext(){
			$(settings.text).each(function(s){
				if(s==slide){
					$(this).show();
				} else {
					$(this).hide();
				}
			});
		}
		
		function _setimages(){
			$(slides).each(function(s){
				if(s==slide){
					$(this).show();
				} else {
					$(this).hide();
				}
			});
		}
		
		function _resetplaypause(){
			if(playing){
				$(settings.controls+' li.'+settings.classes.play,c).each(function(){
					$(this).removeClass(settings.classes.play).addClass(settings.classes.pause);
				});
			} else {
				$(settings.controls+' li.'+settings.classes.pause,c).each(function(){
					$(this).removeClass(settings.classes.pause).addClass(settings.classes.play);
				});
			}
		}
		
		function _resetbuttons(){
			var b = 0;
			$(settings.controls+' li',c).each(function(){
				if( $(this).hasClass(settings.classes.btn) ){
					$(this).unbind('click');
					$(this).bind('click', {b: b}, function(e){
						if(slide!=e.data.b){
							slide = e.data.b;
							_slide();
						}
						return false;
					});
					if(b==slide){
						$(this).addClass('on');
					} else {
						$(this).removeClass('on');	
					}
					b++;
				} else if($(this).hasClass(settings.classes.previous)){
					$(this).unbind('click');
					$(this).bind('click', function(){
						_prev();
						return false;
					});
				} else if($(this).hasClass(settings.classes.next)){
					$(this).unbind('click');
					$(this).bind('click', function(){
						_next();
						return false;
					});					
				} else if($(this).hasClass(settings.classes.play)){
					$(this).unbind('click');
					$(this).bind('click', function(){
						_play();
						return false;
					});
				} else if($(this).hasClass(settings.classes.pause)){
					$(this).unbind('click');
					$(this).bind('click', function(){
						_pause();
						return false;
					});
				}
			});
		}
		
		function _prev(){
			if(slide==0){
				slide = numslides-1;
			} else {
				slide--;	
			}
			_slide();
		}
		
		function _next(){
			if(slide==(numslides-1)){
				slide = 0;
			} else {
				slide++;	
			}
			_slide();
		}
		
		function _play(){
			playing = true;
			_next();
			_resetplaypause();
			_resetbuttons();
		}
		
		function _pause(){
			playing = false;
			clearTimeout(timer);
			_resetplaypause();
			_resetbuttons();
		}
		
		function _slide(){
			$(slides).each(function(s){
				if(s==slide){
					// ANIMATE IN
					_animate(this,'in',settings.slideAnimationType,settings.slideSpeed,settings.slideShiftDistance,settings.slideEaseIn);					
				} else {
					// ANIMATE OUT
					_animate(this,'out',settings.slideAnimationType,settings.slideSpeed,settings.slideShiftDistance,settings.slideEaseOut);
				}
			});
			$(settings.text+" li").each(function(s){
				if(s==slide){
					// ANIMATE IN
					_animate(this,'in',settings.textAnimationType,settings.textSpeed,settings.textShiftDistance,settings.textEaseIn);					
				} else {
					// ANIMATE OUT
					_animate(this,'out',settings.textAnimationType,settings.textSpeed,settings.textShiftDistance,settings.textEaseOut);
				}
			});
			_resettime();
			_resetbuttons();
		}
		
		function _animate(s,type,animType,speed,distance,ease){
			$(s).stop();
			// shiftLeft, shiftRight,shiftUp, shiftDown, slideLeft, slideRight, slideUp, slideDown, fade
			switch(animType){
			
				case "shiftLeft" :
					if(type=="in"){
						$(s).show().css({"left":distance, "opacity":0});
						$(s).animate({"left":0, "opacity":1},speed,ease);
					} else {
						$(s).animate({"left":(-1*distance), "opacity":0, "display":"none"},speed,ease);
					}
					break;
					
				case "shiftRight" :
					if(type=="in"){
						$(s).show().css({"left":(-1*distance), "opacity":0});
						$(s).animate({"left":0, "opacity":1},speed,ease);
					} else {
						$(s).animate({"left":distance, "opacity":0, "display":"none"},speed,ease);
					}
					break;
					
				case "shiftUp" :
					if(type=="in"){
						$(s).show().css({"top":distance, "opacity":0});
						$(s).animate({"top":0, "opacity":1},speed,ease);
					} else {
						$(s).animate({"top":(-1*distance), "opacity":0, "display":"none"},speed,ease);
					}
					break;
					
				case "shiftDown" :
					if(type=="in"){
						$(s).show().css({"top":(-1*distance), "opacity":0});
						$(s).animate({"top":0, "opacity":1},speed,ease);
					} else {
						$(s).animate({"top":distance, "opacity":0, "display":"none"},speed,ease);
					}
					break;
					
				case "fade" :
					if(type=="in"){
						$(s).fadeIn(speed);
					} else {
						$(s).fadeOut(speed);
					}
					break;
					
			}
		}
		
		function _resettime(){
			clearTimeout(timer);
			timer = setTimeout(function(){
				_next();
			}, settings.slideTime);
		}
		
		_initialize();

	};
})(jQuery);
