/**
 * Twitter JS v1.13
 * http://code.google.com/p/twitterjs/
 * Copyright (c) 2009 Remy Sharp / MIT License
 * $Date: 2009-08-21 11:00:33 +0100 (Fri, 21 Aug 2009) $
 */
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 + '" rel="nofollow" target="_blank">' + ((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 + '" rel="nofollow" target="_blank">' + 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 + '" rel="nofollow" target="_blank">' + 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" rel="nofollow" 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 d = c.split(" "),
            parsed_date = Date.parse(d[1] + " " + d[2] + ", " + d[5] + " " + d[3]),
            date = new Date(parsed_date),
            relative_to = (arguments.length > 1) ? arguments[1] : new Date(),
        delta = parseInt((relative_to.getTime() - parsed_date) / 1000),
        r = '';

        function formatTime(a) {
            var b = a.getHours(),
                min = a.getMinutes() + "",
                ampm = 'AM';
            if (b == 0) {
                b = 12
            } else if (b > 12) {
                b -= 12;
                ampm = 'PM'
            }
            if (min.length == 1) {
                min = '0' + min
            }
            return b + ':' + min + ' ' + ampm
        }

        function formatDate(a) {
            var b = a.toDateString().split(/ /),
                mon = b[1],
                day = b[2],
                dayi = parseInt(day),
                year = a.getFullYear(),
                thisyear = (new Date()).getFullYear(),
                th = 'th';
            if ((dayi % 10) == 1 && day.substr(0, 1) != '1') {
                th = 'st'
            } else if ((dayi % 10) == 2 && day.substr(0, 1) != '1') {
                th = 'nd'
            } else if ((dayi % 10) == 3 && day.substr(0, 1) != '1') {
                th = 'rd'
            }
            if (day.substr(0, 1) == '0') {
                day = day.substr(1)
            }
            return mon + ' ' + day + th + (thisyear != year ? ', ' + year : '')
        }
        delta = delta + (relative_to.getTimezoneOffset() * 60);
        if (delta < 5) {
            r = 'less than 5 seconds ago'
        } else if (delta < 30) {
            r = 'half a minute ago'
        } else if (delta < 60) {
            r = 'less than a minute ago'
        } else if (delta < 120) {
            r = '1 minute ago'
        } else if (delta < (45 * 60)) {
            r = (parseInt(delta / 60)).toString() + ' minutes ago'
        } else if (delta < (2 * 90 * 60)) {
            r = 'about 1 hour ago'
        } else if (delta < (24 * 60 * 60)) {
            r = 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago'
        } else {
            if (delta < (48 * 60 * 60)) {
                r = formatTime(date) + ' yesterday'
            } else {
                r = formatTime(date) + ' ' + formatDate(date)
            }
        }
        return r
    }
})();