/* include after app.js */
var home = {
	timers: {},
	extensions: {}
};
home.timers.start = {};
home.timers.restart = {};
home.timers.timerID = {};
home.timers.interval = 10000;
home.timers.clear = function() {
	for (timerID in home.timers.timerID)
	{
		clearTimeout(home.timers.timerID[timerID]);
	}
};
home.extensions = {
	fiftyFiftyInit: function() {
		return this.each(function() {
			var $this = $(this);	//$(".ff")
			
			var $leftList = $this.find("#ffLeft .fiftyFifty");
			var $rightList = $this.find("#ffRight .fiftyFifty");
			
			var $bothLists = [$leftList, $rightList];
			
			var updateCurrent = function ($list, change) {
				var length = $list.length;
				
				var $old = $list.filter(".current");
				var index = $list.index($old);
				index = index + change;
				while(index < 0)
				{
					index += length;
				}
				index = index % length;
				
				var $current = $list.eq(index)

				$list.hide();
				$list.stop().animate({opacity:0},0);
				$list.addClass("disabled");
				$list.removeClass("current");

				$current.addClass("current");
				$current.removeClass("disabled");
				$current.show();
				$current.stop().animate({opacity:1},500, function() {
					 //remove the opacity in IE
				    jQuery.each(jQuery.browser, function(i) {
				        if($.browser.msie){
				            $current.css({opacity:''});
				        }
				    });
				});
			}
			
			for (i in $bothLists)
			{
				var $list = $bothLists[i]; 
				updateCurrent($list, 1);
			}
			
			
			home.timers.start.ffLeft = function()
			{
				updateCurrent($leftList, 1);
				home.timers.restart.ffLeft();
			};
			
			home.timers.start.ffRight = function()
			{
				updateCurrent($rightList, 1);
				home.timers.restart.ffRight();
			};
		});
	},
	carouselInit: function() {
		return this.each(function() {
			var $this = $(this),	//$(".carousel")
			$wrapper = $this.find(".carouselwrapper"),
			$previous = $this.find(".previous"),
			$next = $this.find(".next"),
			length = $wrapper.find(".content > div").length;
			
			var updateRotateIndex = function(newIndex)
			{
				while (newIndex < 0)
				{
					newIndex += length;
				}
				
				newIndex = newIndex % length;
				
				return newIndex;
			}
			
			var rotate = function(change)
			{
				$this.addClass("busy");
				var newIndex = updateRotateIndex(index+1);
				
				$previous.removeClass("disabled");
				$next.removeClass("disabled");
				
				var left = $wrapper.scrollLeft();
				var index = $nav.index($nav.filter(".current"));
				var newIndex = updateRotateIndex(index+change);
				$nav.removeClass("current");
				$nav.eq(newIndex).addClass("current");
				
				if (newIndex == 0) $previous.addClass("disabled");
				if (newIndex == length - 1) $next.addClass("disabled");
				
				$wrapper.stop().animate({scrollLeft: newIndex*$wrapper.width()}, "slow", "easeOutQuart", function() {
					$this.removeClass("busy");
				});
			}
			
			home.timers.start.carousel = function() {
				rotate(1)
				home.timers.restart.carousel();
			};
			
			
			
			$wrapper.scrollLeft(0);
			
			var $nav = $("<ul class=\"nav\" />");
			
			for (var i=0; i<length; i++) $nav.append($("<li><a href=\"#\"></a></li>"));
			
			$this.append($nav);
			$nav = $nav.find("a");
			$nav.eq(0).addClass("current");
			
			$previous.click(function() {
				if (!$this.hasClass("busy")) {
					home.timers.clear();
					rotate(-1);
					home.timers.restart.all();
				}
				return false;
			});
			$next.click(function() {
				if (!$this.hasClass("busy")) {
					home.timers.clear();
					rotate(1);
					home.timers.restart.all();
				}
				return false;
			});
			$nav.click(function() {
				if (!$this.hasClass("busy")) {
					var index = $nav.index($nav.filter(".current"));
					var newIndex = $nav.index($(this));
					home.timers.clear();
					rotate(newIndex - index);
					home.timers.restart.all();
				}
				
				return false;
			});
		});
	}
};

$(function(){

	$.fn.extend(home.extensions);
	
	$(".carousel").carouselInit(); 
	$(".ff").fiftyFiftyInit();

	home.timers.restart.carousel = function() {
		var timerID = setTimeout(home.timers.start.carousel, home.timers.interval);
		home.timers.timerID.carousel = timerID;
	};
	home.timers.restart.ffLeft = function() {
		var timerID = setTimeout(home.timers.start.ffLeft, home.timers.interval);
		home.timers.timerID.ffLeft = timerID;
	};
	home.timers.restart.ffRight = function() {
		var timerID = setTimeout(home.timers.start.ffRight, home.timers.interval/2);
		home.timers.timerID.ffRight = timerID;
	};
	home.timers.restart.all = function() {
		home.timers.restart.carousel();
		home.timers.restart.ffLeft();
		home.timers.restart.ffRight();
	};
	
	home.timers.restart.all();
});

