(function( $ ){
    $.fn.listTweets = function(user, count) {
       
	var htmlifyTweet = function(text) {
	    return text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
		return '<a href="' + url + '">' + url + '</a>';
	    }).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
		return  '<a href="http://twitter.com/' + reply.substring(1) +
		'">' + reply + '</a>';
	    }).replace(/\B#([_a-z0-9]+)/ig, function(tag) {
		return '<a href="http://twitter.com/#!/search?q=%23' + 
		tag.substring(1) + '">' + tag + '</a>';
	    });
	};

      var 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 = new Date();
         var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
         delta = delta + (relative_to.getTimezoneOffset() * 60);

         if (delta < 60) {
           return 'less than a minute ago';
         } else if(delta < (60*60)) {
            return (parseInt(delta / 60)).toString() + ' minutes ago';
         } else if(delta < (24*60*60)) {
            return (parseInt(delta / 3600)).toString() + ' hours ago';
         } else {
            return values[2] + " " + values[1];
        }
      };

      return this.each(function() {
	      var con = $(this);
	      con.hide();
	      con.empty();
	      var $list = $('<ul></ul>');
	      con.append($list);
	      $.getJSON("http://api.twitter.com/1/statuses/user_timeline/" +
			user + ".json?count=" + count +
			"&callback=?", function(data){
			    for(t in data){
				$list.append('<li><span class="tweet">' +
					 htmlifyTweet(data[t].text) + 
					 '</span><span><a href="http://twitter.com/#!/' + 
					 data[t].user.screen_name + 
					 '/status/' + data[t].id_str + 
					 '">' + relative_time(data[t].created_at) + 
					 '</a> via ' + data[t].source + '</span></li>');
            }
         });
	      con.show();
      });
      };
})( jQuery );
