/*
Add Twitter Tweets - jQuery Plugin
20090217
*/

/* ---- Related Functions ---- */
String.prototype.linkify = function() { return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) { return m.link(m); }); };
String.prototype.atify = function() { return this.replace(/@[\w]+/g, function(m) { return '<a href="http://www.twitter.com/' + m.replace('@','')+ '/">' + m + '</a>'; }); };
String.prototype.hashify = function() { return this.replace(/(#(\S*))/, function(m) { return '<a href="http://search.twitter.com/search?q=+%23' + m.replace('#','')+ '">' + m + '</a>'; }); };

function relative_time(time_value) {
	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);
	if(delta < 60) {
		return 'less than 1 minute ago';
	} else if(delta < 120) {
		return 'about 1 minute ago';
	} else if(delta < (45*60)) {
		return (parseInt(delta / 60)).toString() + ' minutes ago';
	} else if(delta < (2*90*60)) { // 2* because sometimes read 1 hours ago
		return 'about 1 hour ago';
	} else if(delta < (24*60*60)) {
		return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
	} else if(delta < (48*60*60)) {
		return 'yesterday';
	} else {
		return (parseInt(delta / 86400)).toString() + ' days ago';
	}
}

/* ---- jQuery Plugin ---- */
(function($){
	$.fn.addTweets = function(options) {
		var o = $.extend({}, $.fn.addTweets.defaults, options);
		var holder = $(this);
		var url = 'http://search.twitter.com/search.json?q=&ands=&phrase=&ors=&nots=&tag=' + o.tweetTag + '&lang=all&from=' + o.tweetFrom + '&to=&ref=&near=&within=15&units=mi&since=&until=&rpp=15&callback=?';

		$.getJSON(url, function(data) {
			holder.append('\t<ol id="tweets">\n\t\t\t\t\t\t\t');
			var tweets = holder.children('ol');
			tweets.append('<li id="no_tweets">No posts available</li>\n\t\t\t\t\t\t\t');

			$.each(data.results, function(i,item){
				if (data.results.item != "undefined") {
					$('li#no_tweets').remove();

					var tweetText = item.text.linkify().atify().hashify();
					var tweetDate = relative_time(item.created_at);

					tweets.append('<li>' + tweetText + ' <span class="time">' + tweetDate + '</span></li>\n\t\t\t\t\t\t\t');
					if ( i == (o.tweetCount - 1) ) { return false; }
				}
			});
		});
	};
	$.fn.addTweets.defaults = {
		tweetTag: 'via',
		tweetFrom: 'starbucks',
		tweetCount: 2
	};
})(jQuery);