// JavaScript Document

(function($) {
	$.fn.carousel = function(settings) {
		
		var c = this;
		var slides = $('#callout_dynamic .slate', c);
		var numslides = slides.length;
		if (numslides<=1) return false;
		
		var slide = 0;
		var timer;
		var playing = false;
		
		function _initialize(){
			_resetbuttons();
			_slide();
		}
		
		function _settext(){
			$(settings.text+' li',c).each(function(s){
				$(this).css({'position':'absolute','top':0,'left':0})
				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;
			$('#callout_nav li',c).each(function(){
				if( $(this).hasClass("control") ){
					$(this).unbind('click').bind('click', {b: b}, function(e){
						if(slide!=e.data.b){
							slide = e.data.b;
							_slide();
						}
						return false;
					});
					if(b==slide){
						$('a',this).addClass('current');
					} else {
						$('a',this).removeClass('current');	
					}
					b++;
				}
			});
		}
		
		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(){
			$('#callout_dynamic .slate',c).each(function(s){
				if(s==slide){
					// ANIMATE IN
					_animate(this,'in',"fade",500,0,"linear",false);
					
					if($(this).hasClass('slate-gallery')){
						var g = this;
						var gslides = $('.gallery-slider ul li',this).length;
						$(this).data("gslide",0);
						$(this).data("gslides",gslides);
						$('.gallery-slider ul',this).css({'width':(gslides*100),'left':0});
						_gsetup(g);
						_gswap(g,0);
					}	
				} else {
					// ANIMATE OUT
					_animate(this,'out',"fade",200,0,"linear",false);
				}
			});			
			_resetbuttons();
		}
		
		function _gsetup(g){
			var gslide = $(g).data("gslide");
			var gslides = $(g).data("gslides");
			if(gslide==0 || (gslides-3)<=0){
				$('.prev-btn').fadeTo(200,0.3);
			} else {
				$('.prev-btn').fadeTo(200,1);
			}
			
			if(gslide==(gslides-3) || (gslides-3)<=0){
				$('.next-btn').fadeTo(200,0.3);
			} else {
				$('.next-btn').fadeTo(200,1);
			}
			
			$('.prev-btn').unbind('click').bind('click',function(){
				_gprev(g);
				return false;
			});
			$('.next-btn').unbind('click').bind('click',function(){
				_gnext(g);
				return false;
			});
			
			$('.gallery-slider ul li a',g).each(function(s){
				$(this).unbind('mouseenter').bind('mouseenter',{g:g,s:s},function(){
					_gswap(g,s);
				});
			});
		}
		
		function _gswap(g,s){
			$('.slate-images .slate-image',g).each(function(ss){
				if(ss==s){
					$(this).stop(true,true).fadeIn(100);
				} else {
					$(this).stop(true,true).fadeOut(100);
				}
			});
		}
		
		function _gslide(g){
			var gslide = $(g).data("gslide");
			$('.gallery-slider ul',g).animate({'left':(-100*gslide)});
			_gsetup(g);
		}
		
		function _gprev(g){
			var gslide = $(g).data("gslide");
			if(gslide>0){
				$(g).data("gslide",gslide-1);
				_gslide(g);
			}
		}
		
		function _gnext(g){
			var gslide = $(g).data("gslide");
			var gslides = $(g).data("gslides");
			if(gslide<(gslides-3)){
				$(g).data("gslide",gslide+1);
				_gslide(g);
			}			
		}
		
		function _animate(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){
							_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){
							_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){
							_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){
							_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){
								_refreshsIFR();
							}
						});
					} else {
						$(s).fadeOut(speed);
					}
					break;
					
			}
		}
		
		function _resettime(){
			clearTimeout(timer);
			timer = setTimeout(function(){
				_next();
			}, settings.slideTime);
		}
		
		function _refreshsIFR(){
			sIFRreplace(sIFR);
		}
		
		_initialize();

	};
})(jQuery);
