jQuery.fn.twitterTicker = function(options) {
    if (!options)
        return;

    if (!options['url'])
        return;

    options = jQuery.extend({
        dateFormat: 'dddd, mmmm dS, yyyy, h:MM:ss TT',
        pauseOnMouseOver: true,
        scrollAmount: '2',
        scrollDelay: '20'
    }, options);

    var serviceOptions = {};
    if (options['count'])
        serviceOptions.count = options['count'];

    return this.each(function() {
        var el = jQuery(this);
        el.addClass('ticker');
        var w = el.width();
        var h = el.height();

        $.getJSON(options['url'], serviceOptions, function(data) {
            $.each(data, function(i, item) {
                var date = new Date(item.date);

                var tweet = $('<span>').addClass('tweet');
                $('<span>').addClass('date').text(date.format(options['dateFormat'])).appendTo(tweet);
                $('<span>').addClass('text').text(item.text).appendTo(tweet);

                if (options['separator'])
                    $('<span>').addClass('separator').text(options['separator']).appendTo(tweet);

                el.append(tweet);
            });

            el.attr('scrollAmount', options['scrollAmount']);
            el.attr('scrollDelay', options['scrollDelay']);
            el.attr('width', w);
            el.attr('height', h);

            var marquee = el.marquee('ticker');

            if (options['pauseOnMouseOver']) {
                marquee.mouseover(function() {
                    $(this).trigger('stop');
                });

                marquee.mouseout(function() {
                    $(this).trigger('start');
                });
            }
        });
    });
};
