// 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:		true,

			

			// shiftLeft, shiftRight,shiftUp, shiftDown, slideLeft, slideRight, slideUp, slideDown, fade

			textAnimationType:	"shiftDown",

			textSpeed:			500, // milliseconds

			textEaseIn:			"easeInOutQuad",

			textEaseOut:		"easeInOutQuad",

			

			slideAnimationType:	"shiftRight",

			slideSpeed:			500, // milliseconds

			slideEaseIn:		"easeInOutQuad",

			slideEaseOut:		"easeInOutQuad",

			

			textShiftDistance:		50, // pixels

			slideShiftDistance:		300, // pixels

			

			slideStart:			1,

			

			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();

			}, 5000);

		}

		

		_initialize();



	};

})(jQuery);