// JavaScript Document

(function($) {
	
	var homecarousel,
	c,
	slides,
	numslides,
	slide,
	oldslide,
	timer,
	playing,
	settings = {
		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,
		
		refreshsIFR:			false
		
	};

	homecarousel = $.fn.homecarousel = function(options) {
	
		settings = $.extend(true,settings,options);
		
		c = this;
		slides = $(settings.images+' li', c);
		numslides = slides.length;
		if (numslides<=1) return false;
		
		slide = settings.slideStart-1;
		
		if(settings.autoPlay){
			playing = true;
		} else {
			playing = false;
		}
		
		homecarousel._initialize();
		
		return this;
		
	}
		
	homecarousel._initialize = function(){
		homecarousel._settext();
		homecarousel._setimages();
		homecarousel._resetplaypause();		
		homecarousel._resetbuttons();
		homecarousel._resettime();
	}
		
	homecarousel._settext = function(){
		$(settings.text+' li',c).each(function(s){
			$(this).css({'position':'absolute','top':0,'left':0})
			if(s==slide){
				$(this).show();
			} else {
				$(this).hide();
			}
		});
	}
		
	homecarousel._setimages = function(){
		
		$(slides).each(function(s){
			if(s==slide){
				$(this).show();
			} else {
				$(this).hide();
			}
		});
	}
		
	homecarousel._resetplaypause = function(){
		if(playing){
			$(settings.controls+' a.'+settings.classes.play,c).each(function(){
				$(this).removeClass(settings.classes.play).addClass(settings.classes.pause);
				$(this).html("pause");
			});
		} else {
			$(settings.controls+' a.'+settings.classes.pause,c).each(function(){
				$(this).removeClass(settings.classes.pause).addClass(settings.classes.play);
				$(this).html("play");
			});
		}
	}
		
	homecarousel._resetbuttons = function(){
		var b = 0;
		$(settings.controls+' a',c).each(function(){
			if( $(this).hasClass(settings.classes.btn) ){
				$(this).unbind('click').bind('click', {b: b}, function(e){
					if(slide!=e.data.b){
						homecarousel._gotoslide(e.data.b);
					}
					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(){
					homecarousel._prev();
					return false;
				});
			} else if($(this).hasClass(settings.classes.next)){
				$(this).unbind('click');
				$(this).bind('click', function(){
					homecarousel._next();
					return false;
				});					
			} else if($(this).hasClass(settings.classes.play)){
				$(this).unbind('click');
				$(this).bind('click', function(){
					homecarousel._play();
					return false;
				});
			} else if($(this).hasClass(settings.classes.pause)){
				$(this).unbind('click');
				$(this).bind('click', function(){
					homecarousel._pause();
					return false;
				});
			}
		});
	}
		
	homecarousel._gotoslide = function(s){
		oldslide = slide;
		slide = s;
		homecarousel._slide();
	}
		
	homecarousel._prev = function(){
		s = slide;
		if(s==0){
			s = numslides-1;
		} else {
			s--;	
		}
		homecarousel._gotoslide(s);
	}
		
	homecarousel._next = function(){
		s = slide;
		if(s==(numslides-1)){
			s = 0;
		} else {
			s++;
		}
		homecarousel._gotoslide(s);
	}
		
	homecarousel._play = function(){
		playing = true;
		homecarousel._next();
		homecarousel._resetplaypause();
		homecarousel._resetbuttons();
	}
		
	homecarousel._pause = function(){
		playing = false;
		clearTimeout(timer);
		homecarousel._resetplaypause();
		homecarousel._resetbuttons();
	}
		
	homecarousel._slide = function(){
		playing = true;
		$(slides).each(function(s){
			if(s==slide){
				// ANIMATE IN
				homecarousel._animate(this,'in',settings.slideAnimationType,settings.slideSpeed,settings.slideShiftDistance,settings.slideEaseIn,false);					
			} else {
				// ANIMATE OUT
				homecarousel._animate(this,'out',settings.slideAnimationType,settings.slideSpeed,settings.slideShiftDistance,settings.slideEaseOut,false);
			}
		});
		$(settings.text+" li").each(function(s){
			if(s==slide){
				// ANIMATE IN
				homecarousel._animate(this,'in',settings.textAnimationType,settings.textSpeed,settings.textShiftDistance,settings.textEaseIn,settings.refreshsIFR);					
			} else {
				// ANIMATE OUT
				homecarousel._animate(this,'out',settings.textAnimationType,settings.textSpeed,settings.textShiftDistance,settings.textEaseOut,settings.refreshsIFR);
			}
		});
		homecarousel._resetplaypause();
		homecarousel._resettime();
		homecarousel._resetbuttons();
		
		$(c).trigger('slide',[slide,oldslide]);
	}
		
	homecarousel._animate = function(s,type,animType,speed,distance,ease,refreshsIFR){
		$(s).stop(true,true);
		// shiftLeft, shiftRight,shiftUp, shiftDown, slideLeft, slideRight, slideUp, slideDown, fade
		switch(animType){
		
			case "shiftLeft" :
				if(type=="in"){
					$(s).show().css({"left":distance, "opacity":0});
					if(refreshsIFR){
						homecarousel._refreshsIFR();
					}
					$(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});
					if(refreshsIFR){
						homecarousel._refreshsIFR();
					}
					$(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});
					if(refreshsIFR){
						homecarousel._refreshsIFR();
					}
					$(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});
					if(refreshsIFR){
						homecarousel._refreshsIFR();
					}
					$(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,function(){
						if(refreshsIFR){
							homecarousel._refreshsIFR();
						}
					});
				} else {
					$(s).fadeOut(speed);
				}
				break;
				
		}
	}
		
	homecarousel._resettime = function(){
		clearTimeout(timer);
		timer = setTimeout(function(){
			homecarousel._next();
		}, settings.slideTime);
	}
		
	homecarousel._refreshsIFR = function(){
		sIFRreplace(sIFR);
	}
		
	homecarousel._getslide = function(){
		return(slide);
	}

})(jQuery);