/**
	 * Horizontal Stock Ticker for jQuery.
	 *
	 * @package jStockTicker
	 * @author Peter Halasz <skinner@gmail.com>
	 * @license http://www.gnu.org/licenses/gpl-3.0.txt GPL v3.0
	 * @copyright (c) 2009, Peter Halasz all rights reserved.
	 */
	( function($) {

		$.fn.jStockTicker = function(options) {

			if (typeof (options) == 'undefined') {
				options = {};
			}

			var settings = $.extend( {}, $.fn.jStockTicker.defaults, options);

			var $ticker = $(this);

			settings.tickerID = $ticker[0].id;

			$.fn.jStockTicker.settings[settings.tickerID] = {};

			var $wrap = null;

			if ($ticker.parent().get(0).className != 'wrap') {
				$wrap = $ticker.wrap("<div class='wrap'></div>");
			}

			var $tickerContainer = null;

			if ($ticker.parent().parent().get(0).className != 'container') {
				$tickerContainer = $ticker.parent().wrap(
						"<div class='container'></div>");
			}
			
			if ($ticker.children().length > 0)
			{
				var totalItemsWidth = 0;
				$ticker.children().each(function(i){
					totalItemsWidth += $(this).width();
				});
				
				if (totalItemsWidth > $ticker.width())
				{
					var node = $ticker[0].firstChild;
					var next;
	
					while(node) {
						next = node.nextSibling;
						if(node.NodeType == 3) {
							$ticker[0].removeChild(node);
						}
						node = next;
					}
	
					var shiftLeftAt = $ticker.children().get(0).offsetWidth;
	
					$.fn.jStockTicker.settings[settings.tickerID].shiftLeftAt = shiftLeftAt;
					$.fn.jStockTicker.settings[settings.tickerID].left = 0;
					$.fn.jStockTicker.settings[settings.tickerID].runid = null;
	
					$ticker.width(2 * screen.availWidth);
	
					function startTicker() {
						stopTicker();
	
						var params = $.fn.jStockTicker.settings[settings.tickerID];
						params.left -= settings.speed;
						if(params.left <= params.shiftLeftAt * -1) {
							params.left = 0;
							$ticker.append($ticker.children().get(0));
							params.shiftLeftAt = $ticker.children().get(0).offsetWidth;
						}
	
						$ticker.css('left', params.left + 'px');
						params.runId = setTimeout(arguments.callee, settings.interval);
	
						$.fn.jStockTicker.settings[settings.tickerID] = params;
					}
	
					function stopTicker() {
						var params = $.fn.jStockTicker.settings[settings.tickerID];
						if (params.runId)
						    clearTimeout(params.runId);
	
						params.runId = null;
	
						$.fn.jStockTicker.settings[settings.tickerID] = params;
					}
	
					function updateTicker() {
	
						stopTicker();
						startTicker();
					}
	
					$ticker.hover(stopTicker,startTicker);
	
					startTicker();
				}
				else
				{
					$ticker.css('text-align', 'center');
				}
			}
		};

		$.fn.jStockTicker.settings = {};

		$.fn.jStockTicker.defaults = {
			tickerID :null,
			url :null,
			speed :1,
			interval :20
		};
	})(jQuery);