jQuery.fn.reverse = Array.prototype.reverse;
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) {
        var username = u.replace("@", "")
        return u.link("http://twitter.com/" + username);
    });
};
String.prototype.linktag = function() {
    return this.replace(/[#]+[A-Za-z0-9-_]+/, function(t) {
        var tag = t.replace("#", "%23")
        return t.link("http://search.twitter.com/search?q=" + tag);
    });
};

var tweetsArray = new Array();
var tweetsArrayKeys = new Array();
var rrp = 50;

var TwitChat = new Object();

TwitChat.pause = function(millis) {
    var date = new Date();
    var curDate = null;

    do { curDate = new Date(); }
    while (curDate - date < millis);
}

TwitChat.fetch_tweets = function(elem) {
    elem = $(elem);
    input = elem.attr('title');
    lang = elem.attr('lang');
    if (input != TwitChat.ChatBox['text-' + input]) {
        TwitChat.ChatBox['last_id' + input] = 0;
        TwitChat.ChatBox['text-' + input] = input;
        TwitChat.ChatBox['count-' + input] = 12;
    }

    var user1url = "http://search.twitter.com/search.json?q=" + input + " from:" + user1 + "&lang=" + lang + "&rpp=" + rrp + "&since_id=" + TwitChat.ChatBox['last_id' + input] + "&page=1&callback=?";
    var user2url = "http://search.twitter.com/search.json?q=" + input + " from:" + user2 + "&lang=" + lang + "&rpp=" + rrp + "&since_id=" + TwitChat.ChatBox['last_id' + input] + "&page=1&callback=?";

    tweetsArray.length = 0;
    tweetsArrayKeys.length = 0;
    $.getJSON(user1url, TwitChat.JSONCallback);
    $.getJSON(user2url, TwitChat.JSONCallback);
    TwitChat.hide_tweets(tweetsArray, elem);
}
TwitChat.JSONCallback = function(json) {
    $(json.results).reverse().each(function() {
        tweetsArray[this.id] = this;
        tweetsArrayKeys.push(this.id);
    })
    tweetsArrayKeys.sort();
}

TwitChat.hide_tweets = function(tweetsArray, elem) {
    $('div.tweet:gt(' + TwitChat.ChatBox['limit'] + ')', elem).each(function() {
        $(this).hide()
    });
    setTimeout(function() {
        TwitChat.display_tweets(tweetsArray, elem) 
    }, 1000);
}

TwitChat.display_tweets = function(tweetsArray, elem) {
    //alert("!");
    for (var i = 0; i < tweetsArrayKeys.length; ++i) {
        if ($('#tw' + tweetsArray[tweetsArrayKeys[i]].id, elem).length == 0) {
            var user;
            if (tweetsArray[tweetsArrayKeys[i]].from_user.toLowerCase() == user1.toLowerCase())
                user = 'user1';
            else
                user = 'user2';
            var thedate = new Date(Date.parse(tweetsArray[tweetsArrayKeys[i]].created_at));
            var thedatestr = thedate.toLocaleTimeString();
            var divstr = '<div id="tw' + tweetsArray[tweetsArrayKeys[i]].id + '" class="tweet ' + user + '"><img width="48" height="48" src="' + tweetsArray[tweetsArrayKeys[i]].profile_image_url + '" ><p class="text">' + tweetsArray[tweetsArrayKeys[i]].text.linkify().linkuser().linktag() + '<br />&nbsp;<b><a href="http://twitter.com/' + tweetsArray[tweetsArrayKeys[i]].from_user + '" target="_blank">' + tweetsArray[tweetsArrayKeys[i]].from_user + '</a></b> &nbsp;-&nbsp;<b>' + thedatestr + '</b></p></div>';
            TwitChat.ChatBox['last_id' + input] = tweetsArray[tweetsArrayKeys[i]].id;
            elem.prepend(divstr);
            //$('#tw' + tweetsArray[tweetsArrayKeys[i]].id, elem).hide();
            //$('#tw' + tweetsArray[tweetsArrayKeys[i]].id + ' img', elem).hide();
            $('#tw' + tweetsArray[tweetsArrayKeys[i]].id + ' img', elem).fadeIn('slow');
            $('#tw' + tweetsArray[tweetsArrayKeys[i]].id, elem).fadeIn('slow');
        }
    };

    input = escape(input);
    rrp = 1;
    setTimeout(function() {
        TwitChat.fetch_tweets(elem)
    }, 4000);   
}

$(document).ready(function() {
    TwitChat.ChatBox = {};
	TwitChat.ChatBox['limit'] = 100;
    $('.ChatBox').each(function(e) {
        rrp = 50;
        TwitChat.fetch_tweets(this);
    });
});