(function ($) {
    var setupMarquee = function (ctx) {
        var stopTime = 5000;
        var width = ctx.width();
        var marquee = ctx.marquee();
        marquee.attr('id', 'scroller');
        marquee.data('active', false);
        marquee.data('stoppedItems', {});

        marquee.mouseover(function() {
            var active = marquee.data('active');
            if(active) {
                marquee.trigger('stop');
            }
        });

        marquee.mouseout(function() {
            var active = marquee.data('active');
            if(active) {
                marquee.trigger('start');
            }
        });

        var startMarquee = function() {
            marquee.data('active', true);
            marquee.trigger('start');
            $('#scroller-item-list .stopped').each(function() {
                $(this).removeClass('stopped');
            });
        };

        var stopMarquee = function() {
            marquee.data('active', false);
            marquee.trigger('stop');
        };

        marquee.bind('reset', function() {
            marquee.data('stoppedItems', {});
        });
        marquee.bind('frame', function() {
            $('#scroller-item-list .scroller-item').each(function() {
                var active = marquee.data('active');
                var stoppedItems = marquee.data('stoppedItems');
                if(!active) {
                    return;
                }
                var item = $(this);
                if(!item.hasClass('stop')) {
                    return;
                }

                var id = item.attr('id');
                if(stoppedItems[id] !== undefined) {
                    return;
                }

                var threshold = (width - item.width()) / 2;
                if(item.position().left <= threshold) {
                    stoppedItems[id] = true;
                    item.addClass('stopped');
                    stopMarquee();
                    setTimeout(startMarquee, stopTime);
                }
            });
        });

        startMarquee();
    };

    bounce = function() {

        return false;
    };

    $.fn.extend({
        amtMarquee: function(url) {
            var ctx = $(this);
            var links = jQuery.getJSON(url, function(data) {
                $.each(data, function(i, item) {
                    if(!item) {
                        return;
                    }
                    var element = $('<li/>');
                    element.attr('id', 'scroller-item' + i);
                    element.addClass('scroller-item');

                    if(item.s) {
                        element.addClass('stop');
                    }

                    var linkContent = false;
                    if(item.l) {
                        linkContent = true;
                        element.append($('<a/>')
                                .attr('href', item.l)
                                .text(item.t)
                                .click(bounce));
                    } else if(item.t) {
                        linkContent = true;
                        element.append(item.t);
                    }
                    
                    if(item.a) {
                        if(linkContent) {
                            element.append(' - ');
                        }
                        element.append(item.a);
                    }
                    element.appendTo("#scroller-item-list");
                });

                setupMarquee(ctx);
            });
        }
    });
}(jQuery));

