/*
 * TwitStream - A jQuery plugin for the Twitter Search API
 * Version 1.2
 * http://kjc-designs.com/TwitStream
 * Copyright (c) 2009 Noah Cooper
 * Licensed under the GNU General Public License <http://www.gnu.org/licenses/>
 */

String.prototype.linkify = function() {
	return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&;\?\/.=]+/g, function(m) {
		return m.link(m);
	});
};

String.prototype.linkuser = function() {
	return this.replace(/[@]+[A-Za-z0-9-_]+/g, function(u) {
		return u.link('http://twitter.com/' + u.replace('@', ''));
	});
};

String.prototype.linktag = function() {
	return this.replace(/[]+[A-Za-z0-9-_]+/, function(t) {
		return t;
	});
};

var showTweetLinks = 'none';

function fetch_tweets(elem) {

	elem = $(elem);
	keyword = escape(elem.attr('title'));
	num = elem.attr('class').split(' ').slice(-1);
	var url = "http://search.twitter.com/search.json?q="+keyword+"&rpp="+num+"&callback=?";

	$.getJSON(url, function(json) {
		$(json.results).each(function() {

			/*
			 * Time Settings.
			 */
			var tTime = new Date(Date.parse(this.created_at));
			var cTime = new Date();
			var sinceMin = Math.round((cTime-tTime)/60000);

			/*
			 * Less than a minute ago.
			 */
			if (sinceMin == 0) {
				var sinceSec = Math.round((cTime-tTime)/1000);
				if (sinceSec < 10)
					var since = 'less than 10 seconds ago';
				else if (sinceSec < 20)
					var since='less than 20 seconds ago';
				else
					var since='half a minute ago';
			}

			/*
			 * Up to a minute ago.
			 */
			else if (sinceMin == 1) {
				var sinceSec = Math.round((cTime-tTime)/1000);
				if (sinceSec == 30)
					var since = 'half a minute ago';
				else if (sinceSec < 60)
					var since = 'less than a minute ago';
				else
					var since = '1 minute ago';
			}

			/*
			 * Hours ago.
			 */
			else if (sinceMin < 45)
				var since = sinceMin + ' minutes ago';
			else if (sinceMin > 44 && sinceMin < 60)
				var since = 'about 1 hour ago';
			else if (sinceMin < 1440) {
				var sinceHr = Math.round(sinceMin/60);
				if (sinceHr == 1)
					var since = 'about 1 hour ago';
				else
					var since = 'about ' + sinceHr + ' hours ago';
			}

			/*
			 * Days ago.
			 */
			else if (sinceMin > 1439 && sinceMin < 2880)
				var since = '1 day ago';
			else {
				var sinceDay = Math.round(sinceMin/1440);
				var since = sinceDay + ' days ago';
			}

			/*
			 * Construction.
			 */
			var tweetBy='<a class="tweeter" rel="external" href="http://twitter.com/' + this.from_user + '">@' + this.from_user + '</a>';
			var howLong = '<span>' + since + '</span>';

			if (showTweetLinks.indexOf('reply') != -1) {
				tweetBy = tweetBy + ' &middot; <a class="tweet-reply" target="_blank" href="http://twitter.com/?status=@'+this.from_user+' &in_reply_to_status_id='+this.id+'&in_reply_to='+this.from_user+'">Reply</a>';
			}

			if (showTweetLinks.indexOf('view') != -1) {
				tweetBy = tweetBy + ' &middot; <a class="tweet-view" target="_blank" href="http://twitter.com/'+this.from_user+'/statuses/'+this.id+'">View Tweet</a>';
			}

			if (showTweetLinks.indexOf('rt') != -1) {
				tweetBy = tweetBy + ' &middot; <a class="tweet-rt" target="_blank" href="http://twitter.com/?status=RT @' + this.from_user + ' ' + escape(this.text.replace(/&quot;/g,'"')) + '&in_reply_to_status_id=' + this.id + '&in_reply_to=' + this.from_user + '">RT</a>';
			}

			var tweet='<div class="tweet">';
			tweet += '<p>'
			tweet += this.text.linkify().linkuser().linktag().replace(/<a/g,'<a rel="external"');
			tweet += '<span class="date">' + since + ' by <a class="tweet-view" rel="external" target="_blank" href="http://twitter.com/'+this.from_user+'/statuses/'+this.id+'">'+this.from_user+'</a></span>';
			tweet += '</p>';
			tweet += '</div>';

			elem.append(tweet);

		});
	});

	return(false);

}
