
function init () {
	blogposts("blogposts", "http://natasha.saxberg.dk/feed/atom/?tag=twitter");
	//mosaic('http://api.flickr.com/services/feeds/photos_public.gne?tags=twitterbogen&format=rss2');
	mosaic('http://api.flickr.com/services/feeds/photos_public.gne?id=91043280@N00&tags=twitterbogen&format=rss2');
	links();
	mentions();
}

function links () {
	var numEntries = 15;
	//var feed = 'http://feeds.delicious.com/v2/json/nf.saxberg/twitter';
	//var feed = 'http://feeds.delicious.com/v2/json/nf.saxberg/twitterbogen';
	//var feed = 'http://feeds.delicious.com/v2/json/popular/twitterbogen';
	var feed = 'http://feeds.delicious.com/v2/json/tag/twitterbogen';
	jQuery.getJSON(feed+'?count='+numEntries+'&callback=?', function (data) {
		var buffer = '';
		for (var i = 0; i < data.length; i++) {
			var entry = data[i];
			buffer = buffer + '<li><a href="'+entry.u+'">'+entry.d+'</a></li>';
		}
		buffer = buffer + '<li><em><a href="http://delicious.com/tag/twitterbogen">flere</a></em></li>';
		jQuery('#links').append(buffer);
	});
}

function mentions () {
	var numEntries = 25;
	var feed = 'http://search.twitter.com/search.json?q=twitterbogen+OR+%23twitterbogen';
	jQuery.getJSON(feed + '&rpp='+numEntries+'&callback=?', function (data) {
		var buffer = '';
		for (var i = 0; i < data.results.length; i++) {
			var entry = data.results[i];
			buffer = buffer + '<li>';
			buffer = buffer + '<a href="http://twitter.com/'+entry.from_user+'" class="strong">'+entry.from_user+'</a> ';
			buffer = buffer + tweet.mash(entry.text);
			buffer = buffer + ' <em class="quiet">'+tweet.relativeTime(entry.created_at)+'</em>';
			buffer = buffer + '</li>';
		}
		buffer = buffer + '<li><em><a href="http://search.twitter.com/search?tag=twitterbogen">flere</a></em></li>';
		jQuery('#mentions').append(buffer);
	});
}

function blogposts ($id, $feed) {
	var feed = new google.feeds.Feed($feed);
	feed.setNumEntries(10);
	feed.setResultFormat(google.feeds.Feed.MIXED_FORMAT);
	feed.load(function(result) {
		if (!result.error) {
			jQuery('#blogsLoading').hide();
			for (var i = 0; i < result.feed.entries.length; i++) {
				var entry = result.feed.entries[i];
				var author = jQuery(entry.xmlNode).find('[nodeName=dc:creator]').text();
				jQuery('#' + $id).append('<h2><a href="'+entry.link+'">'+entry.title+'</a></h2>');
				jQuery('#' + $id).append('<p>by <a href="'+result.feed.link+'">'+author+'</a> <span class="quiet">'+tweet.relativeTime(entry.publishedDate)+'</span></p>');
				jQuery('#' + $id).append(entry.content);
			}
		}
	});
}

function mosaic (url) {
	var feed = new google.feeds.Feed(url);
	var rows = 2;
	var row = 8;
	var numEntries = rows * row;
	feed.setNumEntries(numEntries);
	feed.setResultFormat(google.feeds.Feed.MIXED_FORMAT);
	feed.load(function(result) {
		if (!result.error) {
			jQuery('#blogsLoading').hide();
			for (var i = 1; i <= result.feed.entries.length; i++) {
				var entry = result.feed.entries[i - 1];
				var classLast = (i == 8 || i == 16 || i == 24) ? 'last' : '';
				var classMarginTop = (i > row) ? 'margintop' : '';
				var image = jQuery(entry.xmlNode).find('[nodeName=media:thumbnail]').attr('url');
				if (image) {
					jQuery('#slideshow').append('<div class="column '+classLast+' '+classMarginTop+'"><a href="'+entry.link+'"><img src="'+image+'" alt="" title="'+entry.title+'" class="thumbnail" /></a></div>');
				}				
			}
		}
	});	
}

/*
	Inspired by http://tweet.seaofclouds.com
	License: http://www.opensource.org/licenses/mit-license.php
*/
var tweet = {
	mash: function (txt) {
		return this.linkHash(this.linkUser(this.linkUrl(txt)));
	},
	linkUrl: 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>");
	},
	linkUser: function (txt) {
		var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
		return txt.replace(regexp,"<a href=\"http://twitter.com/$1\">@$1</a>");
	},
	linkHash: function (txt) {
		var regexp = /(?:^| )[\#]+([A-Za-z0-9-_]+)/gi;
		return txt.replace(regexp, ' <a href="http://search.twitter.com/search?tag=$1">#$1</a>');
	},
	relativeTime: function (tv) {
		var parsed_date = Date.parse(tv);
		var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
		var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
		if (delta < 60) {
			return 'less than a minute ago';
		} else if (delta < 120) {
			return 'about a minute ago';
		} else if (delta < (45*60)) {
			return (parseInt(delta / 60)).toString() + ' minutes ago';
		} else if (delta < (90*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';
		}
	}	
}

/* The End */

google.setOnLoadCallback(init);
