function showItems( container, items, num )
{
    container.empty();
    
    newItem = "<p><a href=\"" + items[num].link + "\">" + items[num].text + "</a> <span class=\"date\">" + relative_time( items[num].time ) + "</span></p>";

    newItem = $( newItem );
    newItem.hide();
    container.append( newItem );
    newItem.fadeIn( "slow" );

    window.setTimeout( function()
    {
        showItems( container, items, ( num + 1 ) % items.length )
    }, 30000 );
}

( function( $ ) {
	$.fn.getFeed = function( options )
    {
		$.fn.getFeed.defaults = {
			url: null,
			count: 5
		};

		var options = $.extend( {}, $.fn.getFeed.defaults, options );

		return this.each( function()
        {
			var container = $(this);

            $.get( options.url, function( feed )
            {
                var items = [];
                $( "item", feed ).each( function( key, value )
                {
                    items.push( {
                        text: value.getElementsByTagName( "title" )[0].firstChild.nodeValue,
                        link: value.getElementsByTagName( "link" )[0].firstChild.nodeValue,
                        time: parseRssDate( value.getElementsByTagName( "pubDate" )[0].firstChild.nodeValue )
                    } );
                } );

                showItems( container, items.slice( 0, options.count ), 0 );
            } );
		} );
	};

	$.fn.getTweets = function( options )
    {
		$.fn.getTweets.defaults = {
			name: null,
			count: 5
		};

		var options = $.extend( {}, $.fn.getTweets.defaults, options );

		return this.each( function()
        {
			var container = $(this);
			$.getScript( "http://twitter.com/statuses/user_timeline/" + options.name + ".json?callback=twitterCallback2&count=" + options.count, function()
            {
                var items = [];
                $.each( tweets, function( key, value )
                {
                    items.push( {
                        text: value.text,
                        link: "http://twitter.com/" + value.user.screen_name + "/statuses/" + value.id,
                        time: parseTwitterDate( value.created_at )
                    } );
                } );

                showItems( container, items.slice( 0, options.count ), 0 );
            } );
		} );
	};
} )( jQuery );

var tweets = [];
function twitterCallback2( data )
{
    tweets = data;
}

function parseTwitterDate( date )
{
    var values = date.split( " " );
    time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
    return Date.parse( time_value );
}

function parseRssDate( date )
{
    var values = date.split( " " );
    time_value = values[2] + " " + values[1] + ", " + values[3] + " " + values[4];
    return Date.parse( time_value );
}

function relative_time( date )
{
    var relative_to = ( arguments.length > 1 ) ? arguments[1] : new Date();
    var delta = parseInt( ( relative_to.getTime() - date ) / 1000 );
    delta = delta + ( relative_to.getTimezoneOffset() * 60 );

    if (delta < 0) {
        event_date = new Date();
        event_date.setTime( date );

        months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
        return event_date.getDate() + ". " + months[event_date.getMonth()] + " " + event_date.getFullYear();
    } else if (delta < 60) {
        return 'less than a minute ago';
    } else if(delta < 120) {
        return 'about a minute ago';
    } else if(delta < (60*60)) {
        return (parseInt(delta / 60)).toString() + ' minutes ago';
    } else if(delta < (120*60)) {
        return 'about an hour ago';
    } else if(delta < (24*60*60)) {
        return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
    } else if(delta < (48*60*60)) {
        return '1 day ago';
    } else {
        return (parseInt(delta / 86400)).toString() + ' days ago';
    }
}


