if (typeof renderTwitters != 'function')(function() {
    var j = (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 k = 0;
    var n = [];
    var o = 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;
        var charactercount = 0;//Counter for the sum of the characters of the tweets. (See VWTWEB-120)
        for (i = 0; i < max && a[i]; i++) {
            d = getTwitterData(a[i]);
            charactercount += d.text.length;
            if ( charactercount > ( 100 * max )) {//We do not display tweets if they are too long. They might cause overflow.
                continue;
            }
            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 = linkify(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 = linkify(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)
            }
            f.appendChild(li)
        }
        if (b.clearContents) {
            while (c.firstChild) {
                c.removeChild(c.firstChild)
            }
        }
        c.appendChild(f)
    };
    window.getTwitters = function(e, f, g, h) {
        k++;
        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' + k] = function(a) {
            if (h.timeout) {
                clearTimeout(window['twitterTimeout' + k])
            }
            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';
                if (c.timeout) {
                    window['twitterTimeout' + d] = setTimeout(function() {
                        if (c.onTimeoutCancel)window['twitterCallback' + d] = function() {
                        };
                        c.onTimeout.call(document.getElementById(c.twitterTarget))
                    }, c.timeout)
                }
                var b = document.createElement('script');
                b.setAttribute('src', a);
                document.getElementsByTagName('head')[0].appendChild(b)
            }
        })(h, k))
    };
    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 (!o) {
            n.push(a)
        } else {
            a.call()
        }
    }

    function fireReady() {
        o = true;
        var a;
        while (a = n.shift()) {
            a.call()
        }
    }

    function DOMReady() {
        if (j.mozilla || j.opera) {
            document.addEventListener("DOMContentLoaded", fireReady, false)
        } else if (j.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 (j.safari) {
            var b = setInterval(function() {
                if (document.readyState == "loaded" || document.readyState == "complete") {
                    clearInterval(b);
                    b = null;
                    fireReady.call()
                }
            }, 10)
        }
    }

    function relative_time(a) {
        var b = a.split(" ");
        a = b[1] + " " + b[2] + ", " + b[5] + " " + b[3];
        var c = Date.parse(a);
        var d = (arguments.length > 1) ? arguments[1] : new Date();
        var e = parseInt((d.getTime() - c) / 1000);
        e = e + (d.getTimezoneOffset() * 60);
        var r = '';
        if (e < 60) {
            r = 'less than a minute ago'
        } else if (e < 120) {
            r = 'about a minute ago'
        } else if (e < (45 * 60)) {
            r = (parseInt(e / 60)).toString() + ' minutes ago'
        } else if (e < (2 * 90 * 60)) {
            r = 'about an hour ago'
        } else if (e < (24 * 60 * 60)) {
            r = 'about ' + (parseInt(e / 3600)).toString() + ' hours ago'
        } else if (e < (48 * 60 * 60)) {
            r = '1 day ago'
        } else {
            r = (parseInt(e / 86400)).toString() + ' days ago'
        }
        return r
    }

    function linkify(s) {
        return s.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/g, function(m) {
            return m.link(m)
        }).replace(/@[\S]+/g, function(m) {
            return'<a href="http://twitter.com/' + m.substr(1) + '">' + m + '</a>'
        })
    }
})();
