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

function blogposts (domId, feedUrl) {
	var gf = new google.feeds.Feed(feedUrl);
	gf.setNumEntries(1);
	//gf.setResultFormat(google.feeds.Feed.MIXED_FORMAT);
	gf.load(function(result) {
		if (!result.error) {
			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('#' + domId).append('<h3><a href="'+entry.link+'">'+entry.title+'</a></h3>');
				//jQuery('#' + domId).append('<br>');
				//jQuery('#' + domId).append('<p>by <a href="'+result.feed.link+'">'+author+'</a> <span class="quiet">'+tweet.relativeTime(entry.publishedDate)+'</span></p>');
				//jQuery('#' + domId).append(entry.contentSnippet);
				var content = entry.content;
				content = content.replace(/(<\/?[\S][^>]*>)/gi, '');
				content = content.substr(0, 500);
				content = content + '... <a href="'+entry.link+'">Read more</a>'
				jQuery('#' + domId).append(content);
			}
		}
	});
}

function tweets (domId, username) {
	var tweetNum = 20;
	jQuery.getJSON('http://twitter.com/statuses/user_timeline.json?screen_name='+username+'&count='+tweetNum+'&callback=?', function (data) {
		for (var i in data) {
			var status = data[i].text;
			if (status.substr(0, 1) != '@') {
				break;
			}
		}
		jQuery('#' + domId).append(tweet.mash(status));
	});
}

function delicious (domId, tag) {
	var numEntries = 5;
	var feedUrl = 'http://feeds.delicious.com/v2/json/tag/' + tag;
	jQuery.getJSON(feedUrl + '?count=' + numEntries + '&callback=?', function (data) {
		var buffer = '';
		buffer = buffer + '<ul>';
		jQuery.each(data, function (i, item) {
			var d = item.d.substr(0, 140);
			buffer = buffer + '<li><a href="' + item.u + '">' + d + '</a></li>';
		});
		buffer = buffer + '</ul>';
		jQuery('#' + domId).append(buffer);
	});
}

function mosaic (domId, url) {
	var feed = new google.feeds.Feed(url);
	var rows = 2;
	var row = 12;
	var numEntries = rows * row;
	feed.setNumEntries(numEntries);
	feed.includeHistoricalEntries();
	feed.setResultFormat(google.feeds.Feed.MIXED_FORMAT);
	feed.load(function(result) {
		if (!result.error) {
			for (var i = 1; i <= result.feed.entries.length; i++) {
				var entry = result.feed.entries[i - 1];
				var image = jQuery(entry.xmlNode).find('[nodeName=media:thumbnail]').attr('url');
				if (image) {
					jQuery('#' + domId).append('<a href="'+entry.link+'"><img src="'+image+'" alt="" title="'+entry.title+'" class="thumbnail"></a>');
				}				
			}
		}
	});	
}

function slideshare (domId, username) {
	var feed = new google.feeds.Feed('http://www.slideshare.net/rss/user/' + username);
	feed.setNumEntries(1);
	//feed.setResultFormat(google.feeds.Feed.MIXED_FORMAT);
	feed.load(function(result) {
		if (!result.error) {
			for (var i = 1; i <= result.feed.entries.length; i++) {
				var entry = result.feed.entries[i - 1];
				var content = entry.content;
				content = content.replace(/(<br>)/gi, '');
				jQuery('#' + domId).append(content);
			}
		}
	});	
}

google.setOnLoadCallback(function(){
	blogposts('blogpost', 'http://natasha.saxberg.dk/feed/atom/?tag=webcomdk');
	tweets('tweet', 'nfsaxberg');
	delicious('delicious', 'webcomdk');
	mosaic('mosaic', 'http://api.flickr.com/services/feeds/photos_public.gne?id=91043280@N00&tags=webcomdk&format=rss2');
	slideshare('slide', 'nfsaxberg');
});
