var Banner = {
	
	screenTime : 2000,
	transitionTime : 2000,
	
	current : 0,
	space : 0,
	slideWidth : 0,
	
	slideCount : 0,
	slideHolder : null,
	space : null,
	
	isRunning : false,
	
	timers : [],
	
	init : function(slideHolder)
	{
		Banner.slideHolder = $(slideHolder);
		Banner.space = parseFloat(Banner.slideHolder.children("li").eq(0).css("margin-right"));
		Banner.slideCount = Banner.slideHolder.children("li").size();
		Banner.slideWidth = Banner.slideHolder.children("li").eq(0).outerWidth();
		return Banner;
	},
	
	start : function()
	{
		Banner.createTimer();
		Banner.isRunning = true;
		return Banner;
	},
	
	stop : function()
	{
		Banner.clearTimers();
		Banner.isRunning = false;
		return Banner
	},
	
	clearTimers : function()
	{
		while(Banner.timers.length > 0) {
			clearTimeout(Banner.timers[0]);
			Banner.timers.shift();
		}
	},
	
	createTimer : function()
	{
		Banner.clearTimers();
		var timer = setTimeout(Banner.timerHandler, Banner.screenTime);
		Banner.timers.push(timer);
	},
	
	timerHandler : function()
	{
		Banner.transitionNext();
	},
	
	transitionTo : function(index, fast)
	{
		var speed = fast == true ? Banner.transitionTime/2 : Banner.transitionTime;
		Banner.clearTimers();
		Banner.current = index;
		Banner.slideHolder.stop().animate({ left:-(Banner.current * (Banner.slideWidth + Banner.space)) }, speed, "easeInOutQuart", function() {
			if(Banner.isRunning) Banner.createTimer();
		});
		return Banner;
	},
	
	transitionNext : function(fast)
	{
		if(typeof(fast) == 'undefined') fast = false;
		Banner.clearTimers();
		Banner.transitionTo(Banner.current + 1 >= Banner.slideCount ? 0 : Banner.current + 1, fast);
		return Banner;
	},
	
	transitionPrev : function(fast)
	{
		if(typeof(fast) == 'undefined') fast = false;
		Banner.clearTimers();
		Banner.transitionTo(Banner.current - 1 < 0 ? Banner.slideCount-1 : Banner.current - 1, fast);
		return Banner;
	}
	
};
