/**
 * Twitter JS v1.13
 * http://code.google.com/p/twitterjs/
 * Copyright (c) 2009 Remy Sharp / MIT License
 * $Date: 2010-11-25 19:49:56 $
 */
if (typeof renderTwitters != 'function')(function() {
    var j = function() {
        var c = {
            '"': '&quot;',
            '&': '&amp;',
            '<': '&lt;',
            '>': '&gt;'
        };
        return {
            "link": function(t) {
                return t.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+[^\.,\)\s*$]/g,
                function(m) {
                    return '<a href="' + m + '">' + ((m.length > 25) ? m.substr(0, 24) + '...': m) + '</a>'
                })
            },
            "at": function(t) {
                return t.replace(/(^|[^\w]+)\@([a-zA-Z0-9_]{1,15})/g,
                function(m, a, b) {
                    return a + '@<a href="http://twitter.com/' + b + '">' + b + '</a>'
                })
            },
            "hash": function(t) {
                return t.replace(/(^|[^\w]+)\#([a-zA-Z0-9_]+)/g,
                function(m, a, b) {
                    return a + '#<a href="http://search.twitter.com/search?q=%23' + b + '">' + b + '</a>'
                })
            },
            "clean": function(a) {
                return this.hash(this.at(this.link(a)))
            }
        }
    } ();
    var k = (function() {
        var b = navigator.userAgent.toLowerCase();
        return {
            safari: /webkit/.test(b),
            opera: /opera/.test(b),
            msie: /msie/.test(b) && !(/opera/).test(b),
            mozilla: /mozilla/.test(b) && !(/(compatible|webkit)/).test(b)
        }
    })();
    var n = 0;
    var o = [];
    var p = false;
    window.renderTwitters = function(a, b) {
        function node(e) {
            return document.createElement(e)
        }
        function text(t) {
            return document.createTextNode(t)
        }
        var c = document.getElementById(b.twitterTarget);
        var d = null;
        var f = node('ul'),
        li,
        statusSpan,
        timeSpan,
        i,
        max = a.length > b.count ? b.count: a.length;
        for (i = 0; i < max && a[i]; i++) {
            d = getTwitterData(a[i]);
            if (b.ignoreReplies && a[i].text.substr(0, 1) == '@') {
                max++;
                continue
            }
            li = node('li');
            if (b.template) {
                li.innerHTML = b.template.replace(/%([a-z_\-\.]*)%/ig,
                function(m, l) {
                    var r = d[l] + "" || "";
                    if (l == 'text' && b.enableLinks) r = j.clean(r);
                    return r
                })
            } else {
                statusSpan = node('span');
                statusSpan.className = 'twitterStatus';
                timeSpan = node('span');
                timeSpan.className = 'twitterTime';
                statusSpan.innerHTML = a[i].text;
                if (b.enableLinks == true) {
                    statusSpan.innerHTML = j.clean(statusSpan.innerHTML)
                }
                timeSpan.innerHTML = relative_time(a[i].created_at);
                if (b.prefix) {
                    var s = node('span');
                    s.className = 'twitterPrefix';
                    s.innerHTML = b.prefix.replace(/%(.*?)%/g,
                    function(m, l) {
                        return a[i].user[l]
                    });
                    li.appendChild(s);
                    li.appendChild(text(' '))
                }
                li.appendChild(statusSpan);
                li.appendChild(text(' '));
                li.appendChild(timeSpan)
            }
            if (b.newwindow) {
                li.innerHTML = li.innerHTML.replace(/<a href/gi, '<a target="_blank" href')
            }
            f.appendChild(li)
        }
        if (b.clearContents) {
            while (c.firstChild) {
                c.removeChild(c.firstChild)
            }
        }
        c.appendChild(f)
    };
    window.getTwitters = function(e, f, g, h) {
        n++;
        if (typeof f == 'object') {
            h = f;
            f = h.id;
            g = h.count
        }
        if (!g) g = 1;
        if (h) {
            h.count = g
        } else {
            h = {}
        }
        if (!h.timeout && typeof h.onTimeout == 'function') {
            h.timeout = 10
        }
        if (typeof h.clearContents == 'undefined') {
            h.clearContents = true
        }
        if (h.withFriends) h.withFriends = false;
        h['twitterTarget'] = e;
        if (typeof h.enableLinks == 'undefined') h.enableLinks = true;
        window['twitterCallback' + n] = function(a) {
            if (h.timeout) {
                clearTimeout(window['twitterTimeout' + n])
            }
            renderTwitters(a, h)
        };
        ready((function(c, d) {
            return function() {
                if (!document.getElementById(c.twitterTarget)) {
                    return
                }
                var a = 'http://www.twitter.com/statuses/' + (c.withFriends ? 'friends_timeline': 'user_timeline') + '/' + f + '.json?callback=twitterCallback' + d + '&count=20&cb=' + Math.random();
                if (c.timeout) {
                    window['twitterTimeout' + d] = setTimeout(function() {
                        if (c.onTimeoutCancel) window['twitterCallback' + d] = function() {};
                        c.onTimeout.call(document.getElementById(c.twitterTarget))
                    },
                    c.timeout * 1000)
                }
                var b = document.createElement('script');
                b.setAttribute('src', a);
                document.getElementsByTagName('head')[0].appendChild(b)
            }
        })(h, n))
    };
    DOMReady();
    function getTwitterData(a) {
        var b = a,
        i;
        for (i in a.user) {
            b['user_' + i] = a.user[i]
        }
        b.time = relative_time(a.created_at);
        return b
    }
    function ready(a) {
        if (!p) {
            o.push(a)
        } else {
            a.call()
        }
    }
    function fireReady() {
        p = true;
        var a;
        while (a = o.shift()) {
            a.call()
        }
    }
    function DOMReady() {
        if (k.mozilla || k.opera) {
            document.addEventListener("DOMContentLoaded", fireReady, false)
        } else if (k.msie) {
            document.write("<scr" + "ipt id=__ie_init defer=true src=//:><\/script>");
            var a = document.getElementById("__ie_init");
            if (a) {
                a.onreadystatechange = function() {
                    if (this.readyState != "complete") return;
                    this.parentNode.removeChild(this);
                    fireReady.call()
                }
            }
            a = null
        } else if (k.safari) {
            var b = setInterval(function() {
                if (document.readyState == "loaded" || document.readyState == "complete") {
                    clearInterval(b);
                    b = null;
                    fireReady.call()
                }
            },
            10)
        }
    }
    function relative_time(c) {
		var str = c.replace( /^\w+ (\w+) (\d+) ([\d:]+) \+0000 (\d+)$/, '$1 $2 $4, $3 UTC' );
        var date = new Date( str );

        function formatTime(a) {
            var b = a.getHours(),
            min = a.getMinutes() + "";
            if (b.toString().length == 1) {
                b = '0' + b
            }
            if (min.length == 1) {
                min = '0' + min
            }
            return b + ':' + min
        }
        function formatDate(a) {
            var months = [ DC_MONTH_1, DC_MONTH_2, DC_MONTH_3, DC_MONTH_4, DC_MONTH_5, DC_MONTH_6,
						   DC_MONTH_7, DC_MONTH_8, DC_MONTH_9, DC_MONTH_10, DC_MONTH_11, DC_MONTH_12 ];
            var b = a.toDateString().split(/ /),
            mon = months[a.getMonth()],
            day = a.getDate().toString(),
            year = a.getFullYear();

            if (day.substr(0, 1) == '0') {
                day = day.substr(1)
            }

            return day + ' ' + mon + ' ' + year;
        }
        return formatTime(date) + ', ' + formatDate(date);
    }
})();
