/**
 * 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 != 'StockTickerWrap') {
            $wrap = $ticker.wrap("<div class='StockTickerWrap'></div>");
        }

        var $tickerContainer = null;

        if ($ticker.parent().parent().get(0).className != 'StockTickerContainer') {
            $tickerContainer = $ticker.parent().wrap(
					"<div class='StockTickerContainer'></div>");
        }


        var node = $ticker[0].firstChild;

        var next;

        while (node) {
            next = node.nextSibling;
            if (node.NodeType == 3) {
                $ticker[0].removeChild(node);
            }
            node = next;
        }

        if (typeof ($ticker.children().get(0)) == 'undefined')
            return;

        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();
    };

    $.fn.jStockTicker.settings = {};

    $.fn.jStockTicker.defaults = {
        tickerID: null,
        url: null,
        speed: 1,
        interval: 20
    };
})(jQuery);
