var Twitter = {
	username: "",
	count: 6,
	get: function() {
		jQuery.getJSON("http://twitter.com/status/user_timeline/" + Twitter.username + ".json?count=" + Twitter.count + "&callback=?", function(data) {
		jQuery("#tweets li.loading").remove();
		
		jQuery.each(data, function(i, item) {
			var tweet = jQuery("<li/>")
				.html(Twitter.parse(item.text) + "<br />")
				.appendTo("#tweets");
				
			var meta = jQuery("<span/>")
				.addClass('meta')
				.appendTo(tweet);
				
			jQuery(meta).append(jQuery("<a/>")
				.html(Twitter.relative_time(item.created_at))
				.attr({ href : 'http://twitter.com/' + Twitter.username + '/status/' + item.id }));
				
			jQuery(meta).append(" via " + item.source);
			
			if (item.in_reply_to_status_id) {
				jQuery(meta).append(" ");
				jQuery(meta).append(jQuery("<a/>")
					.html('in reply to ' + item.in_reply_to_screen_name)
					.attr({ href : 'http://twitter.com/' + item.in_reply_to_screen_name + '/status/' + item.in_reply_to_status_id}));
			}
		});
		
		jQuery("<li/>").append(jQuery('<a/>')
			.html('View more...')
			.attr({ href: 'http://twitter.com/' + Twitter.username }))
			.appendTo('#tweets');
		});
	},
	parse: function(text) {
		if (text) {
			// URLs
			text = text.replace(
				/((https?\:\/\/)|(www\.))(\S+)(\w{2,4})(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/gi,
				function(url){
					var full_url = url;
					if (!full_url.match('^https?:\/\/')) {
						full_url = 'http://' + full_url;
					}
					return '<a href="' + full_url + '" target="_blank">' + url + '</a>';
				}
			);
			
			// Usernames
			text = text.replace(
				/[\@]+([A-Za-z0-9-_]+)?/gi,
				'@<a href="http://twitter.com/$1" target="_blank">$1</a>'
			);
			
			// Hashtags
			text = text.replace(
				/ [\#]+([A-Za-z0-9-_]+)/gi,
				' <a href="http://twitter.com/search?q=%23$1">#$1</a>'
			);
		}
		return text;
	},
	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);

	  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';
	  }
	}
};