document.observe("dom:loaded", function() {

    if (!$("twitter") || !$("stats")) {
        return;
    }

    var callback = function(timeline) {

        var wrapper = new Template([
            '<h2>Twitter <a href="http://twitter.com/ithinkihaveacat"><img src="https://si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png" width="16" height="16"/></a></h2>',
            '#{tweets}'
        ].join("\n"));

        var tweets = new Template([
            '<p>#{text}&#160;<a href="https://twitter.com/intent/tweet?in_reply_to=#{id_str}"><img title="Reply" src="https://si0.twimg.com/images/dev/cms/intents/icons/reply.png" style="position: absolute" width="16" height="16"/></a></p>'
        ].join("\n"));

        // var username_or_hashtag = /(?:@\w)|(?:#\w)/;

        function filter(status) {
            return !status.in_reply_to_status_id;
            // return !username_or_hashtag.test(status.text);
        }

        function linker(status) {
            status.text = status.text.replace(
                /https?:\/\/\S+[\w\/]/g,
                function (s) { return s.link(s); }
            );
            status.text = status.text.replace(
                /[@#]\w+/g,
                function (s) { 
                    return (s[0] == "@") ? 
                        s.link("http://twitter.com/#!/" + s.substr(1)) :
                        s.link("http://search.twitter.com/search?q=%23" + s.substr(1));
                }
            );
            return status;
        }

        $("twitter").update(wrapper.evaluate({
            "tweets": $A(timeline).filter(filter).map(linker).map(
                function (status) { return tweets.evaluate(status); }
            ).slice(0, 5).join("\n")
        }));
        $("twitter").show();
        $("stats").show();
        $("elsewhere").show();

    };

    var client = new Http();

    client.request(
        'https://api.twitter.com/1/statuses/user_timeline.json?screen_name=ithinkihaveacat&trim_user=1&callback={callback}',
        callback            
    );

});

