/* Rotator
 * Version 1.0.2
 * Author Michael Neil
 * URI: http://www.fluxar.com/
 */
(function($){ //jQuery.noConflict()compliant	
  
  var rotator_num_init_unique = 0;
  
    $.fn.rotator = function(o){
		$(this).each(function(el){
		  if(el>0) rotator_num_init_unique++;
			$(this).data( 'rotator', new Rotator( this, o, rotator_num_init_unique ) );
		});
		rotator_num_init_unique++;
	}
    
	
	var Rotator = function(element, o, el){
    	o = $.extend({ //defaults, can be overidden
    		arrows		: {left:".leftarrow",right:".rightarrow"},
	    	tranSpeed	: 800,//ms transition speed
	    	delay		: 4000,//ms delay before next transition
	    	auto		: true,//sets auto scrolling through rotator
	    	loop		: true,//infinite scroll on or off, default false rotates back to beginning
	    	backwards	: false,
	    	onChange  : function(index){}
        }, o ||
        {});

        var dontRun = false;
        if(!$(element)){alert("Must specify an object to target.");return false;}
		if($(element).children().length <= 1){dontRun = true;console.log(element+" has one or fewer children to fade");}
       	   
        var reverse = false;
        if(o.backwards)reverse = true;
        if(o.backwards && !o.loop)
        	o.backwards = false;
			       
				   
    	var that = $(element);
    	beforeN = $(element).children().length;
				
		var numbers = "";
    	var beforeN = 0;
		var inner = "";
		
		addNumbers(el, o);
		
		if(o.loop){
			var curFade = 0;
			beforeN = $(element).children().length;
			inner = $(element).html();
			$(element).children("li:first").before(inner);
			$(element).children("li:last").after(inner);
        }
		       	
		var w = $(element).children().width();
		var n = $(element).children().length;
		var cur = beforeN;
		var animate = false;
		
		$(element).css({"margin-left": -cur * w});
		$(element).css({width: w * n});
		
		
		$(o.arrows.right).click(function(){
			if(dontRun)return;
			if(cur == n-1)return;
			if(o.auto){clearInterval(interval);interval = setInterval(goNext,o.delay);o.backwards = false;}
			if(animate)return;cur++;animate = true;
			that.animate({marginLeft:-cur*w},o.tranSpeed,reset);
			o.onChange(cur);
		});
		$(o.arrows.left).click(function(){
			if(dontRun)return;
			if(cur==0)return;
			if(o.auto){clearInterval(interval);interval = setInterval(goNext,o.delay);o.backwards = true;}
			if(animate)return;cur--;animate = true;
			that.animate({marginLeft:-cur*w},o.tranSpeed,reset);
			o.onChange(cur);
		});
		if(o.auto && !dontRun){
			var interval = setInterval(goNext,o.delay);
		}
		function goNext(){
			if(dontRun)return;
			if(cur == n-1){if(reverse){o.backwards = true}else{return}};//else{};
			if(cur == 0 && reverse)o.backwards = false;
			if(animate)return;if(!o.backwards){cur++}else{cur--};animate = true;
			that.animate({marginLeft:-cur*w},o.tranSpeed,reset);
			$(".slider-numbers-"+el+" li a").removeClass("active");
			var thumb = cur-beforeN;
			if(cur == beforeN*2)thumb = 0;
			$(".slider-numbers-"+el+" li").eq(thumb).children("a").addClass("active");
		}
		function reset(){
			animate = false;
			if ((cur == 0 || cur == n - beforeN)) {
				cur = beforeN;
				$(element).css({"margin-left": -cur * w});
			}
		}
		
		function addNumbers(el, o){
			if(dontRun)return;
			var len = $(element).children().length;
			numbers = "<ul class='slider-numbers slider-numbers-"+el+"'>";
			for(var i=0;i<len;i++)
				numbers +="<li class='num_"+(i+1)+"'><a href=''>"+(i+1)+"</a></li>";
			numbers += "</ul>";
			$(element).after(numbers);
			numbers = ".slider-numbers-"+el+" a";
			
			
			$(numbers).each(function(i){
				if(i==0)$(this).addClass("active");
				
				$(this).click(function(){
				
				
  			 if(that.attr('id') == 'media-slider') {
  			 	  i = parseInt($(this).html())-1;                 
            if(i+1 > that.find('li').length || i < 0) {
              return false;
            }            
          }

								
					//if(cur == i)return false;
					clearInterval(interval);
					$(numbers).removeClass("active");
					$(this).addClass("active");
					
					cur = beforeN+i;
					if(o.backwards)cur = beforeN-i;
					
					o.onChange(cur);
					that.animate({marginLeft:-cur*w},o.tranSpeed,reset);
					
					if(o.auto)
					interval = setInterval(goNext,o.delay);
					return false;
				});
			})
			
		}
        
        
	}
})(jQuery);
