/*
 * 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=from:katcarrbond";
	var url = "http://search.twitter.com/search.json?q=" + keyword + "&rpp=" + num + "&callback=?";
	var tCount = 0;
	$.getJSON(url, function(json) {
	    $(json.results).each(function() {
	        tCount++;
	        //alert("test");
	        var tTime = new Date(Date.parse(this.created_at));
	        var cTime = new Date();
	        var sinceMin = Math.round((cTime - tTime) / 60000);
	        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';
	        }
	        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';
	        }
	        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';
	        }
	        else if (sinceMin > 1439 && sinceMin < 2880)
	            var since = '1 day ago';
	        else {
	            var sinceDay = Math.round(sinceMin / 1440);
	            var since = sinceDay + ' days ago';
	        }
	        var tweetBy = '<a class="tweet-user" target="_blank" href="http://twitter.com/' + this.from_user + '">@' + this.from_user + '</a> <span class="tweet-time">' + 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 = '';
	        tweet += '<div class="tweet tweet' + tCount + '"'
	        tweet += '><!--<div class="tweet-left"><a target="_blank" href="http://twitter.com/' + this.from_user + '"><img width="48" height="48" alt="' + this.from_user + ' on Twitter" src="' + this.profile_image_url + '" /></a></div>--><div class="tweet-right"><p class="text">' + this.text.linkify().linkuser().linktag().replace(/<a/g, '<a target="_blank"') + '<!--<br />--> ' + tweetBy + '</p></div></div>';
	        elem.append(tweet);
	    });
	    
	    startTicker(num,1);
	    //alert($(".tweet1").width());
	});
	return(false);
}

function startTicker(tNum, tCount) {
    var nextCount = tCount + 1;
    if (tCount > tNum) {
        //alert("reinitialize tweets " + tCount + " " + tNum);
        $('.twitStream').each(function() {
            $(this).html('');
            fetch_tweets(this);
        });
    }
    $('.tweet').css('display', 'none');
    $('.tweet').css('margin-left', '0px');


    $('.tweet' + tCount).fadeIn(5000, function() {
        //$('.tweet' + tCount).css('left', '0');
        //alert($('.tweet' + tCount).width() + " " + $('#tweets').width());
        if ($('.tweet' + tCount).width() > $('#tweets').width()) {
            var tMove = $('.tweet' + tCount).width() - $('#tweets').width();
            $('.tweet' + tCount).delay(2000).animate({
                'margin-left': '-=' + tMove
            }, tMove * 30, function() {

                $('.tweet' + tCount).delay(5000).fadeOut(2000, function() {
                    startTicker(tNum, nextCount);
                });
            });
        } else {
            $('.tweet' + tCount).delay(5000).fadeOut(2000, function() {
                startTicker(tNum, nextCount);
            });
        }
    });
    
    //

}

$(function() {
    showTweetLinks = showTweetLinks.toLowerCase();
    if (showTweetLinks.indexOf('all') != -1)
        showTweetLinks = 'reply,view,rt';
    $('.twitStream').each(function() {
        fetch_tweets(this);
    });

});
