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 Oscars = new Object();

Oscars.pause = function(millis) {
    var date = new Date();
    var curDate = null;

    do { curDate = new Date(); }
    while (curDate - date < millis);
}

Oscars.fetch_tweets = function(elem) {
    elem = $(elem);
    input = elem.attr('title');
    lang = elem.attr('lang');
    if (input != Oscars.monitter['text-' + input]) {
        Oscars.monitter['last_id' + input] = 0;
        Oscars.monitter['text-' + input] = input;
        Oscars.monitter['count-' + input] = 12;
    }
    if (Oscars.monitter['count-' + input] > 10) {
        elem.prepend('<div class="tweet"><img src="http://monitter.com/widget/favicon.gif" align="absmiddle" />real time twitter by: <a href="http://monitter.com" target="_blank">monitter.com</a></div>');
        Oscars.monitter['count-' + input] = 0;
    }
    var user1url = "http://search.twitter.com/search.json?q=from:" + user1 + "&lang=" + lang + "&rpp=" + rrp + "&since_id=" + Oscars.monitter['last_id' + input] + "&page=1&callback=?";
    var user2url = "http://search.twitter.com/search.json?q=from:" + user2 + "&lang=" + lang + "&rpp=" + rrp + "&since_id=" + Oscars.monitter['last_id' + input] + "&page=1&callback=?";

    tweetsArray.length = 0;
    tweetsArrayKeys.length = 0;
    $.getJSON(user1url, Oscars.JSONCallback);
    $.getJSON(user2url, Oscars.JSONCallback);
    Oscars.hide_tweets(tweetsArray, elem);
}
Oscars.JSONCallback = function(json) {
    $(json.results).reverse().each(function() {
        tweetsArray[this.id] = this;
        tweetsArrayKeys.push(this.id);
    })
    tweetsArrayKeys.sort();
}

Oscars.hide_tweets = function(tweetsArray, elem) {
    $('div.tweet:gt(' + Oscars.monitter['limit'] + ')', elem).each(function() {
        $(this).hide()
    });
    setTimeout(function() {
        Oscars.display_tweets(tweetsArray, elem) 
    }, 1000);
}

Oscars.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.getHours() + ':' + thedate.getMinutes();
            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>';
            Oscars.monitter['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() {
        Oscars.fetch_tweets(elem)
    }, 5000);   
}

$(document).ready(function() {
    Oscars.monitter = {};
    $('.monitter').each(function(e) {
        rrp = 50;
        Oscars.fetch_tweets(this);
    });
});