// simple twitter tweet fetching plugin
(function($) {
    $.fn.twitter = function(options) {

        var defaults = {
			loaderText: 'Loading...',
            username: 'rvision',
            numTweets: 3
        };

        // extend defaults with options
        if(options)
            options = $.extend({}, defaults, options);

        // fetch and display
        return this.each(function() {
			var $this=$(this);
			$this.html(options.loaderText);
			$.getJSON('http://twitter.com/statuses/user_timeline/' + options.username + '.json?callback=?', function(data) {
				var html='';
				for(var i=0; i < options.numTweets && i < data.length; i++) {
					html += '<li><b><a href="http://twitter.com/' + options.username + '/statuses/' + data[i].id + '">' + relative_time(data[i].created_at) + ':</a></b> ' + linkify(data[i].text) + '</li>';
				}
				$this.html('<ul>' + html + '</ul>');
            });
        });
    };

    linkify = function(txt) {
		var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
		return txt.replace(regexp,'<a href="$1">$1</a>');
    };

    relative_time = function(time_value) {
		var values = time_value.split(" ");
		time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
		var parsed_date = Date.parse(time_value);
		var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
		var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
		delta = delta + (relative_to.getTimezoneOffset() * 60);
		var r = '';
		if (delta < 60) {
			r = 'a minute ago';
		} else if (delta < 120) {
			r = 'couple of minutes ago';
		} else if (delta < (45 * 60)) {
			r = (parseInt(delta / 60)).toString() + ' minutes ago';
		} else if (delta < (90 * 60)) {
			r = 'an hour ago';
		} else if (delta < (24 * 60 * 60)) {
			r = '' + (parseInt(delta / 3600)).toString() + ' hours ago';
		} else if (delta < (48 * 60 * 60)) {
			r = '1 day ago';
		} else {
			r = (parseInt(delta / 86400)).toString() + ' days ago';
		}
		return r;
	};
})(jQuery);

