google.load("feeds", "1");

function initialize() {
	var feed = new google.feeds.Feed("http://twitter.com/statuses/user_timeline/" + reliable_twitter_id + ".rss");
	var feedReturn = "";
	feed.load(function(result) {
	if (!result.error) {
		var username = result.feed.title.substring(10);
		if (reliable_twitter_show >= result.feed.entries.length) reliable_twitter_show = result.feed.entries.length + 1;
		for (var i = 0; i < reliable_twitter_show; i++) {
			var entry = result.feed.entries[i];
			if (entry != undefined) {
				var tweetcontents = entry.title.substring(username.length + 2) + " ";
				var created_at = entry.publishedDate;
				tweetcontents = tweetcontents.parseURL().parseUsername().parseHashtag();
				feedReturn += "<li>";
				feedReturn += "<span>" + tweetcontents + "</span>";
				feedReturn += "<a style=\"font-size:85%\" href=\"http://twitter.com/"+username+"\" target=\"_blank\">" + relative_time(created_at) + "</a>";
				feedReturn += "</li>\n";
			}
		}
		document.getElementById("twitter_update_list").innerHTML = feedReturn;
	}});
}

google.setOnLoadCallback(initialize);

String.prototype.parseURL = function() {
	return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/g, function(url) {
		//return url.link(url);
		return "<a href=\"" + url + "\" target=\"_blank\">" + url + "</a>";
	});
};
String.prototype.parseUsername = function() {
	return this.replace(/[@]+[A-Za-z0-9-_]+/g, function(u) {
		var username = u.replace("@","")
		return "<a href=\"http://twitter.com/" + username + "\" target=\"_blank\">" + u + "</a>";
	});
};
String.prototype.parseHashtag = function() {
	return this.replace(/[#]+[A-Za-z0-9-_]+/g, function(t) {
		var tag = t.replace("#","%23")
		//return t.link("http://search.twitter.com/search?q="+tag);
		return "<a href=\"http://search.twitter.com/search?q=" + tag + "\" target=\"_blank\">" + t + "</a>";
	});
};
function relative_time(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';
	}
}