/******
 * News Ticker
 *
 * Company: SiteCrafting
 * Author: Paul Sayre
 * Created: 2009-04-23
 * Updated: 2009-04-24
 */
(function($) {
$(function() {

	// Config
	var fps = 15; // In frames per sec
	var tickSpeed = 15; // In px per sec
	var jumpSpeed = 200 // In px per sec
	var jumpSpeedMultiplyer = 2; // How much faster the jump will be
	
	var tickerSelector = '.ticker';
	var upButtonSelector = '.ticker_btn_up';
	var downButtonSelector = '.ticker_btn_down';
	var scrollContentSelector = '.scrollup';
	var wrapperClassname = 'ticker-wrapper';
	
	
	// Application (shouldn't need to edit below here)
	$(tickerSelector).each(function() {
		var $this = $(this);
		var $upBtn = $(upButtonSelector, $this);
		var $downBtn = $(downButtonSelector, $this);
		var $scroll = $(scrollContentSelector, $this);
		var height = $scroll.height();
		
		if(height < $this.height()) return;
		
		var timeout = 1000/fps;
		var pxTick = tickSpeed/fps;
		var pxJump = (jumpSpeed/fps) * jumpSpeedMultiplyer;
		
		var $tickerWrapper = $scroll.wrap('<div class="'+wrapperClassname+'"/>');
		var $scrollCopy = $scroll.clone();
		$scroll.after($scrollCopy);
				
		var timer;
		var margin = 0;
		
		var tick = function() {
			margin -= pxTick;
			if(-margin > height) margin += height;
			$tickerWrapper.css('margin-top', margin);
		}
		
		var start = function() {
			clearInterval(timer);
			timer = setInterval(tick, timeout);
		}
		
		var stop = function() {
			clearInterval(timer);
		}
		
		var jumpUp = function() {
			var startMargin = -margin;
			var stopMargin = (startMargin + jumpSpeed) % height;
			
			(function() {
				clearTimeout(timer);
				timer = setTimeout(arguments.callee, timeout);
				margin -= pxJump;
				if(-margin > height) margin += height;
				$tickerWrapper.css('margin-top', margin);
				
				if(-margin < stopMargin) return;
				if(startMargin > stopMargin && startMargin < -margin) return;
				
				clearTimeout(timer);
			})();
		}
		
		var jumpDown = function() {
			var startMargin = -margin;
			var stopMargin = (startMargin + height - jumpSpeed) % height;
			(function() {
				clearTimeout(timer);
				timer = setTimeout(arguments.callee, timeout);
				margin += pxJump;
				if(-margin < 0) margin -= height;
				$tickerWrapper.css('margin-top', margin);
				
				if(-margin > stopMargin) return;
				if(startMargin < stopMargin && startMargin > -margin) return;
				
				clearTimeout(timer);
			})();
		}
		
		$this.hover(stop, start);
		$upBtn.click(jumpUp);
		$downBtn.click(jumpDown);
		
		start();
	})

})
})(jQuery);