﻿/*
* twitter-text-js 1.4.10
*
* Copyright 2011 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this work except in compliance with the License.
* You may obtain a copy of the License at:
*
*    http://www.apache.org/licenses/LICENSE-2.0
*/
if (!window.twttr){
    window.twttr={}
}

(function(){
    twttr.txt={};
    twttr.txt.regexen={};
    var C = {"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#39;"};
    twttr.txt.htmlEscape=function(R){
        return R && R.replace(/[&"'><]/g, function(S){
            return C[S]
        })
    };
    function D(S, R){
        R=R || "";
        if (typeof S !== "string"){
            if (S.global && R.indexOf("g") < 0){
                R+="g"
            }
            if (S.ignoreCase && R.indexOf("i") < 0){
                R+="i"
            }
            if (S.multiline && R.indexOf("m") < 0){
                R+="m"
            }
            S=S.source
        }
        return new RegExp(S.replace(/#\{(\w+)\}/g, function(U, T){
            var V = twttr.txt.regexen[T] || "";
            if (typeof V !== "string"){
                V=V.source
            }
            return V
        }), R)
    }
    function E(S, R){
        return S.replace(/#\{(\w+)\}/g, function(U, T){
            return R[T] || ""
        })
    }
    function B(S, U, R){
        var T = String.fromCharCode(U);
        if (R !== U){
            T+="-" + String.fromCharCode(R)
        }
        S.push(T);
        return S
    }
    var J = String.fromCharCode;
    var H = [J(32),J(133),J(160),J(5760),J(6158),J(8232),J(8233),J(8239),J(8287),J(12288)];
    B(H, 9, 13);
    B(H, 8192, 8202);
    twttr.txt.regexen.spaces_group=D(H.join(""));
    twttr.txt.regexen.spaces=D("[" + H.join("") + "]");
    twttr.txt.regexen.punct=/\!'#%&'\(\)*\+,\\\-\.\/:;<=>\?@\[\]\^_{|}~/;
    twttr.txt.regexen.atSigns=/[@＠]/;
    twttr.txt.regexen.extractMentions=D(/(^|[^a-zA-Z0-9_])(#{atSigns})([a-zA-Z0-9_]{1,20})(?=(.|$))/g);
    twttr.txt.regexen.extractReply=D(/^(?:#{spaces})*#{atSigns}([a-zA-Z0-9_]{1,20})/);
    twttr.txt.regexen.listName=/[a-zA-Z][a-zA-Z0-9_\-\u0080-\u00ff]{0,24}/;
    twttr.txt.regexen.extractMentionsOrLists=D(/(^|[^a-zA-Z0-9_])(#{atSigns})([a-zA-Z0-9_]{1,20})(\/[a-zA-Z][a-zA-Z0-9_\-]{0,24})?(?=(.|$))/g);
    var N = [];
    B(N, 1024, 1279);
    B(N, 1280, 1319);
    B(N, 11744, 11775);
    B(N, 42560, 42655);
    B(N, 4352, 4607);
    B(N, 12592, 12677);
    B(N, 43360, 43391);
    B(N, 44032, 55215);
    B(N, 55216, 55295);
    B(N, 65441, 65500);
    B(N, 12449, 12538);
    B(N, 12540, 12542);
    B(N, 65382, 65439);
    B(N, 65392, 65392);
    B(N, 65296, 65305);
    B(N, 65313, 65338);
    B(N, 65345, 65370);
    B(N, 12353, 12438);
    B(N, 12441, 12446);
    B(N, 13312, 19903);
    B(N, 19968, 40959);
    B(N, 173824, 177983);
    B(N, 177984, 178207);
    B(N, 194560, 195103);
    B(N, 12293, 12293);
    B(N, 12347, 12347);
    twttr.txt.regexen.nonLatinHashtagChars=D(N.join(""));
    twttr.txt.regexen.latinAccentChars=D("ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþş\\303\\277");
    twttr.txt.regexen.endScreenNameMatch=D(/^(?:#{atSigns}|[#{latinAccentChars}]|:\/\/)/);
    twttr.txt.regexen.hashtagBoundary=D(/(?:^|$|#{spaces}|[「」。、.,!！?？:;"'])/);
    twttr.txt.regexen.hashtagAlpha=D(/[a-z_#{latinAccentChars}#{nonLatinHashtagChars}]/i);
    twttr.txt.regexen.hashtagAlphaNumeric=D(/[a-z0-9_#{latinAccentChars}#{nonLatinHashtagChars}]/i);
    twttr.txt.regexen.autoLinkHashtags=D(/(#{hashtagBoundary})(#|＃)(#{hashtagAlphaNumeric}*#{hashtagAlpha}#{hashtagAlphaNumeric}*)/gi);
    twttr.txt.regexen.autoLinkUsernamesOrLists=/(^|[^a-zA-Z0-9_]|RT:?)([@＠]+)([a-zA-Z0-9_]{1,20})(\/[a-zA-Z][a-zA-Z0-9_\-]{0,24})?/g;
    twttr.txt.regexen.autoLinkEmoticon=/(8\-\#|8\-E|\+\-\(|\`\@|\`O|\&lt;\|:~\(|\}:o\{|:\-\[|\&gt;o\&lt;|X\-\/|\[:-\]\-I\-|\/\/\/\/Ö\\\\\\\\|\(\|:\|\/\)|∑:\*\)|\( \| \))/g;
    twttr.txt.regexen.validPrecedingChars=D(/(?:[^-\/"'!=A-Za-z0-9_@＠\.]|^)/);
    twttr.txt.regexen.invalidDomainChars=E("\u00A0#{punct}#{spaces_group}", twttr.txt.regexen);
    twttr.txt.regexen.validDomainChars=D(/[^#{invalidDomainChars}]/);
    twttr.txt.regexen.validSubdomain=D(/(?:(?:#{validDomainChars}(?:[_-]|#{validDomainChars})*)?#{validDomainChars}\.)/);
    twttr.txt.regexen.validDomainName=D(/(?:(?:#{validDomainChars}(?:-|#{validDomainChars})*)?#{validDomainChars}\.)/);
    twttr.txt.regexen.validGTLD=D(/(?:(?:aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel)(?=[^a-zA-Z]|$))/);
    twttr.txt.regexen.validCCTLD=D(/(?:(?:ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw)(?=[^a-zA-Z]|$))/);
    twttr.txt.regexen.validPunycode=D(/(?:xn--[0-9a-z]+)/);
    twttr.txt.regexen.validDomain=D(/(?:#{validSubdomain}*#{validDomainName}(?:#{validGTLD}|#{validCCTLD}|#{validPunycode}))/);
    twttr.txt.regexen.validShortDomain=D(/^#{validDomainName}#{validCCTLD}$/);
    twttr.txt.regexen.validPortNumber=D(/[0-9]+/);
    twttr.txt.regexen.validGeneralUrlPathChars=D(/[a-z0-9!\*';:=\+\$\/%#\[\]\-_,~|&#{latinAccentChars}]/i);
    twttr.txt.regexen.wikipediaDisambiguation=D(/(?:\(#{validGeneralUrlPathChars}+\))/i);
    twttr.txt.regexen.validUrlPathChars=D(/(?:#{wikipediaDisambiguation}|@#{validGeneralUrlPathChars}+\/|[\.,]?#{validGeneralUrlPathChars}?)/i);
    twttr.txt.regexen.validUrlPathEndingChars=D(/(?:[\+\-a-z0-9=_#\/#{latinAccentChars}]|#{wikipediaDisambiguation})/i);
    twttr.txt.regexen.validUrlQueryChars=/[a-z0-9!\*'\(\);:&=\+\$\/%#\[\]\-_\.,~|]/i;
    twttr.txt.regexen.validUrlQueryEndingChars=/[a-z0-9_&=#\/]/i;
    twttr.txt.regexen.extractUrl=D("((#{validPrecedingChars})((https?:\\/\\/)?(#{validDomain})(?::(#{validPortNumber}))?(\\/(?:#{validUrlPathChars}+#{validUrlPathEndingChars}|#{validUrlPathChars}+#{validUrlPathEndingChars}?|#{validUrlPathEndingChars})?)?(\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?))", "gi");
    twttr.txt.regexen.validateUrlUnreserved=/[a-z0-9\-._~]/i;
    twttr.txt.regexen.validateUrlPctEncoded=/(?:%[0-9a-f]{2})/i;
    twttr.txt.regexen.validateUrlSubDelims=/[!$&'()*+,;=]/i;
    twttr.txt.regexen.validateUrlPchar=D("(?:#{validateUrlUnreserved}|#{validateUrlPctEncoded}|#{validateUrlSubDelims}|[:|@])", "i");
    twttr.txt.regexen.validateUrlScheme=/(?:[a-z][a-z0-9+\-.]*)/i;
    twttr.txt.regexen.validateUrlUserinfo=D("(?:#{validateUrlUnreserved}|#{validateUrlPctEncoded}|#{validateUrlSubDelims}|:)*", "i");
    twttr.txt.regexen.validateUrlDecOctet=/(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))/i;
    twttr.txt.regexen.validateUrlIpv4=D(/(?:#{validateUrlDecOctet}(?:\.#{validateUrlDecOctet}){3})/i);
    twttr.txt.regexen.validateUrlIpv6=/(?:\[[a-f0-9:\.]+\])/i;
    twttr.txt.regexen.validateUrlIp=D("(?:#{validateUrlIpv4}|#{validateUrlIpv6})", "i");
    twttr.txt.regexen.validateUrlSubDomainSegment=/(?:[a-z0-9](?:[a-z0-9_\-]*[a-z0-9])?)/i;
    twttr.txt.regexen.validateUrlDomainSegment=/(?:[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?)/i;
    twttr.txt.regexen.validateUrlDomainTld=/(?:[a-z](?:[a-z0-9\-]*[a-z0-9])?)/i;
    twttr.txt.regexen.validateUrlDomain=D(/(?:(?:#{validateUrlSubDomainSegment]}\.)*(?:#{validateUrlDomainSegment]}\.)#{validateUrlDomainTld})/i);
    twttr.txt.regexen.validateUrlHost=D("(?:#{validateUrlIp}|#{validateUrlDomain})", "i");
    twttr.txt.regexen.validateUrlUnicodeSubDomainSegment=/(?:(?:[a-z0-9]|[^\u0000-\u007f])(?:(?:[a-z0-9_\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i;
    twttr.txt.regexen.validateUrlUnicodeDomainSegment=/(?:(?:[a-z0-9]|[^\u0000-\u007f])(?:(?:[a-z0-9\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i;
    twttr.txt.regexen.validateUrlUnicodeDomainTld=/(?:(?:[a-z]|[^\u0000-\u007f])(?:(?:[a-z0-9\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i;
    twttr.txt.regexen.validateUrlUnicodeDomain=D(/(?:(?:#{validateUrlUnicodeSubDomainSegment}\.)*(?:#{validateUrlUnicodeDomainSegment}\.)#{validateUrlUnicodeDomainTld})/i);
    twttr.txt.regexen.validateUrlUnicodeHost=D("(?:#{validateUrlIp}|#{validateUrlUnicodeDomain})", "i");
    twttr.txt.regexen.validateUrlPort=/[0-9]{1,5}/;
    twttr.txt.regexen.validateUrlUnicodeAuthority=D("(?:(#{validateUrlUserinfo})@)?(#{validateUrlUnicodeHost})(?::(#{validateUrlPort}))?", "i");
    twttr.txt.regexen.validateUrlAuthority=D("(?:(#{validateUrlUserinfo})@)?(#{validateUrlHost})(?::(#{validateUrlPort}))?", "i");
    twttr.txt.regexen.validateUrlPath=D(/(\/#{validateUrlPchar}*)*/i);
    twttr.txt.regexen.validateUrlQuery=D(/(#{validateUrlPchar}|\/|\?)*/i);
    twttr.txt.regexen.validateUrlFragment=D(/(#{validateUrlPchar}|\/|\?)*/i);
    twttr.txt.regexen.validateUrlUnencoded=D("^(?:([^:/?#]+):\\/\\/)?([^/?#]*)([^?#]*)(?:\\?([^#]*))?(?:#(.*))?$", "i");
    var A = "tweet-url";
    var G = "list-slug";
    var Q = "username";
    var M = "hashtag";
    var O = ' rel="nofollow"';
    function K(T){
        var S = {};
        for (var R in T){
            if (T.hasOwnProperty(R)){
                S[R]=T[R]
            }
        }
        return S
    }
    twttr.txt.autoLink=function(S, R){
        R=K(R || {});
        return twttr.txt.autoLinkUsernamesOrLists(twttr.txt.autoLinkUrlsCustom(twttr.txt.autoLinkHashtags(S, R), R), R)
    };
    twttr.txt.autoLinkUsernamesOrLists=function(X, V){
        V=K(V || {});
        V.urlClass=V.urlClass || A;
        V.listClass=V.listClass || G;
        V.usernameClass=V.usernameClass || Q;
        V.usernameUrlBase=V.usernameUrlBase || "http://twitter.com/";
        V.listUrlBase=V.listUrlBase || "http://twitter.com/";
        if (!V.suppressNoFollow){
            var R = O
        }
        var W = "",U=twttr.txt.splitTags(X);
        for (var T = 0;T < U.length;T++){
            var S = U[T];
            if (T !== 0){
                W+=((T % 2 === 0) ?">": "<")
            }
            if (T % 4 !== 0){
                W+=S
            }
            else{
                W+=S.replace(twttr.txt.regexen.autoLinkUsernamesOrLists, function(f, i, a, e, Y, c, j){
                    var Z = j.slice(c + f.length);
                    var h = {before:i,at:a,user:twttr.txt.htmlEscape(e),slashListname:twttr.txt.htmlEscape(Y),extraHtml:R,preChunk:"",chunk:twttr.txt.htmlEscape(j),postChunk:""};
                    for (var b in V){
                        if (V.hasOwnProperty(b)){
                            h[b]=V[b]
                        }
                    }
                    if (Y && !V.suppressLists){
                        var g = h.chunk = E("#{user}#{slashListname}", h);
                        h.list=twttr.txt.htmlEscape(g.toLowerCase());
                        return E('#{before}#{at}<a class="#{urlClass} #{listClass}" href="#{listUrlBase}#{list}"#{extraHtml}>#{preChunk}#{chunk}#{postChunk}</a>', h)
                    }
                    else{
                        if (Z && Z.match(twttr.txt.regexen.endScreenNameMatch)){
                            return f
                        }
                        else{
                            h.chunk=twttr.txt.htmlEscape(e);
                            h.dataScreenName=!V.suppressDataScreenName ?E('data-screen-name="#{chunk}" ', h): "";
                            return E('#{before}#{at}<a class="#{urlClass} #{usernameClass}" #{dataScreenName}href="#{usernameUrlBase}#{chunk}"#{extraHtml}>#{preChunk}#{chunk}#{postChunk}</a>', h)
                        }
                    }
                })
            }
        }
        return W
    };
    twttr.txt.autoLinkHashtags=function(T, S){
        S=K(S || {});
        S.urlClass=S.urlClass || A;
        S.hashtagClass=S.hashtagClass || M;
        S.hashtagUrlBase=S.hashtagUrlBase || "http://twitter.com/search?q=%23";
        if (!S.suppressNoFollow){
            var R = O
        }
        return T.replace(twttr.txt.regexen.autoLinkHashtags, function(V, W, X, Z){
            var Y = {before:W,hash:twttr.txt.htmlEscape(X),preText:"",text:twttr.txt.htmlEscape(Z),postText:"",extraHtml:R};
            for (var U in S){
                if (S.hasOwnProperty(U)){
                    Y[U]=S[U]
                }
            }
            return E('#{before}<a href="#{hashtagUrlBase}#{text}" title="##{text}" class="#{urlClass} #{hashtagClass}"#{extraHtml}>#{hash}#{preText}#{text}#{postText}</a>', Y)
        })
    };
    twttr.txt.autoLinkUrlsCustom=function(U, S){
        S=K(S || {});
        if (!S.suppressNoFollow){
            S.rel="nofollow"
        }
        if (S.urlClass){
            S["class"]=S.urlClass;
            delete S.urlClass
        }
        var V,T,R;
        if (S.urlEntities){
            V={};
            for (T = 0,R = S.urlEntities.length;T < R;T++){
                V[S.urlEntities[T].url]=S.urlEntities[T]
            }
        }
        delete S.suppressNoFollow;
        delete S.suppressDataScreenName;
        delete S.listClass;
        delete S.usernameClass;
        delete S.usernameUrlBase;
        delete S.listUrlBase;
        return U.replace(twttr.txt.regexen.extractUrl, function(e, h, g, X, i, a, c, j, W){
            var Z;
            if (i){
                var Y = "";
                for (var b in S){
                    Y+=E(' #{k}="#{v}" ', {k:b,v:S[b].toString().replace(/"/, "&quot;").replace(/</, "&lt;").replace(/>/, "&gt;")})
                }
                var f = {before:g,htmlAttrs:Y,url:twttr.txt.htmlEscape(X)};
                if (V && V[X] && V[X].display_url){
                    f.displayUrl=twttr.txt.htmlEscape(V[X].display_url)
                }
                else{
                    f.displayUrl=f.url
                }
                return E('#{before}<a href="#{url}"#{htmlAttrs}>#{displayUrl}</a>', f)
            }
            else{
                return h
            }
        })
    };
    twttr.txt.extractMentions=function(U){
        var V = [],R=twttr.txt.extractMentionsWithIndices(U);
        for (var T = 0;T < R.length;T++){
            var S = R[T].screenName;
            V.push(S)
        }
        return V
    };
    twttr.txt.extractMentionsWithIndices=function(T){
        if (!T){
            return[]
        }
        var S = [],R=0;
        T.replace(twttr.txt.regexen.extractMentions, function(U, Y, X, V, Z){
            if (!Z.match(twttr.txt.regexen.endScreenNameMatch)){
                var W = T.indexOf(X + V, R);
                R=W + V.length + 1;
                S.push({screenName:V,indices:[W,R]})
            }
        });
        return S
    };
    twttr.txt.extractMentionsOrListsWithIndices=function(T){
        if (!T){
            return[]
        }
        var S = [],R=0;
        T.replace(twttr.txt.regexen.extractMentionsOrLists, function(U, Y, X, V, a, Z){
            if (!Z.match(twttr.txt.regexen.endScreenNameMatch)){
                a=a || "";
                var W = T.indexOf(X + V + a, R);
                R=W + V.length + a.length + 1;
                S.push({screenName:V,listSlug:a,indices:[W,R]})
            }
        });
        return S
    };
    twttr.txt.extractReplies=function(S){
        if (!S){
            return null
        }
        var R = S.match(twttr.txt.regexen.extractReply);
        if (!R){
            return null
        }
        return R[1]
    };
    twttr.txt.extractUrls=function(U){
        var T = [],R=twttr.txt.extractUrlsWithIndices(U);
        for (var S = 0;S < R.length;S++){
            T.push(R[S].url)
        }
        return T
    };
    twttr.txt.extractUrlsWithIndices=function(T){
        if (!T){
            return[]
        }
        var S = [],R=0;
        T.replace(twttr.txt.regexen.extractUrl, function(Z, c, b, U, d, W, V, e, a){
            if (!d && !e && W.match(twttr.txt.regexen.validShortDomain)){
                return
            }
            var X = T.indexOf(U, Y),Y=X + U.length;
            S.push({url:U,indices:[X,Y]})
        });
        return S
    };
    twttr.txt.extractHashtags=function(U){
        var T = [],S=twttr.txt.extractHashtagsWithIndices(U);
        for (var R = 0;R < S.length;R++){
            T.push(S[R].hashtag)
        }
        return T
    };
    twttr.txt.extractHashtagsWithIndices=function(T){
        if (!T){
            return[]
        }
        var S = [],R=0;
        T.replace(twttr.txt.regexen.autoLinkHashtags, function(U, X, Y, W){
            var V = T.indexOf(Y + W, R);
            R=V + W.length + 1;
            S.push({hashtag:W,indices:[V,R]})
        });
        return S
    };
    twttr.txt.splitTags=function(X){
        var R = X.split("<"),W,V=[],U;
        for (var T = 0;T < R.length;T += 1){
            U=R[T];
            if (!U){
                V.push("")
            }
            else{
                W=U.split(">");
                for (var S = 0;S < W.length;S += 1){
                    V.push(W[S])
                }
            }
        }
        return V
    };
    twttr.txt.hitHighlight=function(c, e, U){
        var a = "em";
        e=e || [];
        U=U || {};
        if (e.length === 0){
            return c
        }
        var T = U.tag || a,d=["<" + T + ">","</" + T + ">"],b=twttr.txt.splitTags(c),f,k,h,X="",R=0,Y=b[0],Z=0,S=0,o=false,V=Y,g=[],W,l,p,n,m;
        for (k = 0;k < e.length;k += 1){
            for (h = 0;h < e[k].length;h += 1){
                g.push(e[k][h])
            }
        }
        for (W = 0;W < g.length;W += 1){
            l=g[W];
            p=d[W % 2];
            n=false;
            while (Y != null && l >= Z + Y.length){
                X+=V.slice(S);
                if (o && l === Z + V.length){
                    X+=p;
                    n=true
                }
                if (b[R + 1]){
                    X+="<" + b[R + 1] + ">"
                }
                Z+=V.length;
                S=0;
                R+=2;
                Y=b[R];
                V=Y;
                o=false
            }
            if (!n && Y != null){
                m=l - Z;
                X+=V.slice(S, m) + p;
                S=m;
                if (W % 2 === 0){
                    o=true
                }
                else{
                    o=false
                }
            }
            else{
                if (!n){
                    n=true;
                    X+=p
                }
            }
        }
        if (Y != null){
            if (S < V.length){
                X+=V.slice(S)
            }
            for (W = R + 1;W < b.length;W += 1){
                X+=(W % 2 === 0 ?b[W]: "<" + b[W] + ">")
            }
        }
        return X
    };
    var F = 140;
    var P = [J(65534),J(65279),J(65535),J(8234),J(8235),J(8236),J(8237),J(8238)];
    twttr.txt.isInvalidTweet=function(S){
        if (!S){
            return"empty"
        }
        if (S.length > F){
            return"too_long"
        }
        for (var R = 0;R < P.length;R++){
            if (S.indexOf(P[R]) >= 0){
                return"invalid_characters"
            }
        }
        return false
    };
    twttr.txt.isValidTweetText=function(R){
        return !twttr.txt.isInvalidTweet(R)
    };
    twttr.txt.isValidUsername=function(S){
        if (!S){
            return false
        }
        var R = twttr.txt.extractMentions(S);
        return R.length === 1 && R[0] === S.slice(1)
    };
    var L = D(/^#{autoLinkUsernamesOrLists}$/);
    twttr.txt.isValidList=function(S){
        var R = S.match(L);
        return !!(R && R[1] == "" && R[4])
    };
    twttr.txt.isValidHashtag=function(S){
        if (!S){
            return false
        }
        var R = twttr.txt.extractHashtags(S);
        return R.length === 1 && R[0] === S.slice(1)
    };
    twttr.txt.isValidUrl=function(R, W, Z){
        if (W == null){
            W=true
        }
        if (Z == null){
            Z=true
        }
        if (!R){
            return false
        }
        var S = R.match(twttr.txt.regexen.validateUrlUnencoded);
        if (!S || S[0] !== R){
            return false
        }
        var T = S[1],U=S[2],Y=S[3],X=S[4],V=S[5];
        if (!((!Z || (I(T, twttr.txt.regexen.validateUrlScheme) && T.match(/^https?$/i))) && I(Y, twttr.txt.regexen.validateUrlPath) && I(X, twttr.txt.regexen.validateUrlQuery, true) && I(V, twttr.txt.regexen.validateUrlFragment, true))){
            return false
        }
        return(W && I(U, twttr.txt.regexen.validateUrlUnicodeAuthority)) || (!W && I(U, twttr.txt.regexen.validateUrlAuthority))
    };
    function I(S, T, R){
        if (!R){
            return((typeof S === "string") && S.match(T) && RegExp["$&"] === S)
        }
        return(!S || (S.match(T) && RegExp["$&"] === S))
    }
    if (typeof module != "undefined" && module.exports){
        module.exports=twttr.txt
    }
}());TWTR=window.TWTR || {};

if (!Array.prototype.forEach && !Array.prototype.filter && Array.prototype.indexOf) {
    Array.prototype.filter=function(E, F){
        var D = F || window;
        var A = [];
        for (var C = 0,B=this.length;C < B;++C){
            if (!E.call(D, this[C], C, this)){
                continue
            }
            A.push(this[C])
        }
        return A
    };
    Array.prototype.indexOf=function(B, C){
        var C = C || 0;
        for (var A = 0;A < this.length;++A){
            if (this[A] === B){
                return A
            }
        }
        return -1
    }
}

(function(){
    if (TWTR && TWTR.Widget){
        return
    }
    function F(J, M, I){
        for (var L = 0,K=J.length;L < K;++L){
            M.call(I || window, J[L], L, J)
        }
    }
    function B(I, K, J){
        this.el=I;
        this.prop=K;
        this.from=J.from;
        this.to=J.to;
        this.time=J.time;
        this.callback=J.callback;
        this.animDiff=this.to - this.from
    }
    B.canTransition=function(){
        var I = document.createElement("twitter");
        I.style.cssText="-webkit-transition: all .5s linear;";
        return !!I.style.webkitTransitionProperty
    }();
    B.prototype._setStyle=function(I){
        switch (this.prop){
            case"opacity":
                this.el.style[this.prop]=I;
                this.el.style.filter="alpha(opacity=" + I * 100 + ")";
                break;
            default:
                this.el.style[this.prop]=I + "px";
                break
        }
    };
    B.prototype._animate=function(){
        var I = this;
        this.now=new Date();
        this.diff=this.now - this.startTime;
        if (this.diff > this.time){
            this._setStyle(this.to);
            if (this.callback){
                this.callback.call(this)
            }
            clearInterval(this.timer);
            return
        }
        this.percentage=(Math.floor((this.diff / this.time) * 100) / 100);
        this.val=(this.animDiff * this.percentage) + this.from;
        this._setStyle(this.val)
    };
    B.prototype.start=function(){
        var I = this;
        this.startTime=new Date();
        this.timer=setInterval(function(){
            I._animate.call(I)
        }, 15)
    };
    TWTR.Widget=function(I){
        this.init(I)
    };
    (function(){
        var W = window.twttr || {};
        var T = location.protocol.match(/https/);
        var V = /^.+\/profile_images/;
        var b = "https://s3.amazonaws.com/twitter_production/profile_images";
        var c = function(n){
            return T ?n.replace(V, b): n
        };
        var m = {};
        var k = function(o){
            var n = m[o];
            if (!n){
                n=new RegExp("(?:^|\\s+)" + o + "(?:\\s+|$)");
                m[o]=n
            }
            return n
        };
        var J = function(s, w, t, u){
            var w = w || "*";
            var t = t || document;
            var o = [],n=t.getElementsByTagName(w),v=k(s);
            for (var p = 0,q=n.length;p < q;++p){
                if (v.test(n[p].className)){
                    o[o.length]=n[p];
                    if (u){
                        u.call(n[p], n[p])
                    }
                }
            }
            return o
        };
        var l = function(){
            var n = navigator.userAgent;
            return{ie:n.match(/MSIE\s([^;]*)/)}
        }();
        var M = function(n){
            if (typeof n == "string"){
                return document.getElementById(n)
            }
            return n
        };
        var e = function(n){
            return n.replace(/^\s+|\s+$/g, "")
        };
        var a = function(){
            var n = self.innerHeight;
            var o = document.compatMode;
            if ((o || l.ie)){
                n=(o == "CSS1Compat") ?document.documentElement.clientHeight: document.body.clientHeight
            }
            return n
        };
        var j = function(p, n){
            var o = p.target || p.srcElement;
            return n(o)
        };
        var Y = function(o){
            try{
                if (o && 3 == o.nodeType){
                    return o.parentNode
                }
                else{
                    return o
                }
            }
            catch (n){
            }
        };
        var Z = function(o){
            var n = o.relatedTarget;
            if (!n){
                if (o.type == "mouseout"){
                    n=o.toElement
                }
                else{
                    if (o.type == "mouseover"){
                        n=o.fromElement
                    }
                }
            }
            return Y(n)
        };
        var f = function(o, n){
            n.parentNode.insertBefore(o, n.nextSibling)
        };
        var g = function(o){
            try{
                o.parentNode.removeChild(o)
            }
            catch (n){
            }
        };
        var d = function(n){
            return n.firstChild
        };
        var I = function(p){
            var o = Z(p);
            while (o && o != this){
                try{
                    o=o.parentNode
                }
                catch (n){
                    o=this
                }
            }
            if (o != this){
                return true
            }
            return false
        };
        var L = function(){
            if (document.defaultView && document.defaultView.getComputedStyle){
                return function(o, s){
                    var q = null;
                    var p = document.defaultView.getComputedStyle(o, "");
                    if (p){
                        q=p[s]
                    }
                    var n = o.style[s] || q;
                    return n
                }
            }
            else{
                if (document.documentElement.currentStyle && l.ie){
                    return function(n, p){
                        var o = n.currentStyle ?n.currentStyle[p]: null;
                        return(n.style[p] || o)
                    }
                }
            }
        }();
        var i = {has:function(n, o){
            return new RegExp("(^|\\s)" + o + "(\\s|$)").test(M(n).className)
        },add:function(n, o){
            if (!this.has(n, o)){
                M(n).className=e(M(n).className) + " " + o
            }
        },remove:function(n, o){
            if (this.has(n, o)){
                M(n).className=M(n).className.replace(new RegExp("(^|\\s)" + o + "(\\s|$)", "g"), "")
            }
        }};
        var K = {add:function(p, o, n){
            if (p.addEventListener){
                p.addEventListener(o, n, false)
            }
            else{
                p.attachEvent("on" + o, function(){
                    n.call(p, window.event)
                })
            }
        },remove:function(p, o, n){
            if (p.removeEventListener){
                p.removeEventListener(o, n, false)
            }
            else{
                p.detachEvent("on" + o, n)
            }
        }};
        var S = function(){
            function o(q){
                return parseInt((q).substring(0, 2), 16)
            }
            function n(q){
                return parseInt((q).substring(2, 4), 16)
            }
            function p(q){
                return parseInt((q).substring(4, 6), 16)
            }
            return function(q){
                return[o(q),n(q),p(q)]
            }
        }();
        var N = {bool:function(n){
            return typeof n === "boolean"
        },def:function(n){
            return !(typeof n === "undefined")
        },number:function(o){
            return typeof o === "number" && isFinite(o)
        },string:function(n){
            return typeof n === "string"
        },fn:function(n){
            return typeof n === "function"
        },array:function(n){
            if (n){
                return N.number(n.length) && N.fn(n.splice)
            }
            return false
        }};
        var R = ["January","February","March","April","May","June","July","August","September","October","November","December"];
        var X = function(q){
            var v = new Date(q);
            if (l.ie){
                v=Date.parse(q.replace(/( \+)/, " UTC$1"))
            }
            var o = "";
            var n = function(){
                var s = v.getHours();
                if (s > 0 && s < 13){
                    o="am";
                    return s
                }
                else{
                    if (s < 1){
                        o="am";
                        return 12
                    }
                    else{
                        o="pm";
                        return s - 12
                    }
                }
            }();
            var p = v.getMinutes();
            var u = v.getSeconds();
            function t(){
                var s = new Date();
                if (s.getDate() != v.getDate() || s.getYear() != v.getYear() || s.getMonth() != v.getMonth()){
                    return" - " + R[v.getMonth()] + " " + v.getDate() + ", " + v.getFullYear()
                }
                else{
                    return""
                }
            }
            return n + ":" + p + o + t()
        };
        var P = function(u){
            var w = new Date();
            var s = new Date(u);
            if (l.ie){
                s=Date.parse(u.replace(/( \+)/, " UTC$1"))
            }
            var v = w - s;
            var o = 1000,p=o * 60,q=p * 60,t=q * 24,n=t * 7;
            if (isNaN(v) || v < 0){
                return""
            }
            if (v < o * 2){
                return"right now"
            }
            if (v < p){
                return Math.floor(v / o) + " seconds ago"
            }
            if (v < p * 2){
                return"about 1 minute ago"
            }
            if (v < q){
                return Math.floor(v / p) + " minutes ago"
            }
            if (v < q * 2){
                return"about 1 hour ago"
            }
            if (v < t){
                return Math.floor(v / q) + " hours ago"
            }
            if (v > t && v < t * 2){
                return"yesterday"
            }
            if (v < t * 365){
                return Math.floor(v / t) + " days ago"
            }
            else{
                return"over a year ago"
            }
        };
        function h(q){
            var p = {};
            for (var n in q){
                if (q.hasOwnProperty(n)){
                    p[n]=q[n]
                }
            }
            return p
        }
        W.txt.autoLink=function(o, n){
            n=options_links = n || {};
            if (n.hasOwnProperty("extraHtml")){
                options_links=h(n);
                delete options_links.extraHtml
            }
            return W.txt.autoLinkUsernamesOrLists(W.txt.autoLinkUrlsCustom(W.txt.autoLinkHashtags(o, n), options_links), n)
        };
        TWTR.Widget.ify={autoLink:function(n){
            options={extraHtml:"target=_blank",target:"_blank",urlEntities:[]};
            if (n.needle.entities){
                if (n.needle.entities.urls){
                    options.urlEntities=n.needle.entities.urls
                }
                if (n.needle.entities.media){
                    options.urlEntities=options.urlEntities.concat(n.needle.entities.media)
                }
            }
            if (W && W.txt){
                return W.txt.autoLink(n.needle.text, options).replace(/([@＠]+)(<[^>]*>)/g, "$2$1")
            }
            else{
                return n.needle.text
            }
        }};
        function U(o, p, n){
            this.job=o;
            this.decayFn=p;
            this.interval=n;
            this.decayRate=1;
            this.decayMultiplier=1.25;
            this.maxDecayTime=3 * 60 * 1000
        }
        U.prototype={start:function(){
            this.stop().run();
            return this
        },stop:function(){
            if (this.worker){
                window.clearTimeout(this.worker)
            }
            return this
        },run:function(){
            var n = this;
            this.job(function(){
                n.decayRate=n.decayFn() ?Math.max(1, n.decayRate / n.decayMultiplier): n.decayRate * n.decayMultiplier;
                var o = n.interval * n.decayRate;
                o=(o >= n.maxDecayTime) ?n.maxDecayTime: o;
                o=Math.floor(o);
                n.worker=window.setTimeout(function(){
                    n.run.call(n)
                }, o)
            })
        },destroy:function(){
            this.stop();
            this.decayRate=1;
            return this
        }};
        function O(o, n, p){
            this.time=o || 6000;
            this.loop=n || false;
            this.repeated=0;
            this.callback=p;
            this.haystack=[]
        }
        O.prototype={set:function(n){
            this.haystack=n
        },add:function(n){
            this.haystack.unshift(n)
        },start:function(){
            if (this.timer){
                return this
            }
            this._job();
            var n = this;
            this.timer=setInterval(function(){
                n._job.call(n)
            }, this.time);
            return this
        },stop:function(){
            if (this.timer){
                window.clearInterval(this.timer);
                this.timer=null
            }
            return this
        },_next:function(){
            var n = this.haystack.shift();
            if (n && this.loop){
                this.haystack.push(n)
            }
            return n || null
        },_job:function(){
            var n = this._next();
            if (n){
                this.callback(n)
            }
            return this
        }};
        function Q(o){
            var n = '<div class="twtr-tweet-wrap">         <div class="twtr-avatar">           <div class="twtr-img"><a target="_blank" href="http://twitter.com/intent/user?screen_name=' + o.user + '"><img alt="' + o.user + ' profile" src="' + c(o.avatar) + '"></a></div>         </div>         <div class="twtr-tweet-text">           <p>             <a target="_blank" href="http://twitter.com/intent/user?screen_name=' + o.user + '" class="twtr-user">' + o.user + "</a> " + o.tweet + '             <em>            <a target="_blank" class="twtr-timestamp" time="' + o.timestamp + '" href="http://twitter.com/' + o.user + "/status/" + o.id + '">' + o.created_at + '</a> &middot;            <a target="_blank" class="twtr-reply" href="http://twitter.com/intent/tweet?in_reply_to=' + o.id + '">reply</a> &middot;             <a target="_blank" class="twtr-rt" href="http://twitter.com/intent/retweet?tweet_id=' + o.id + '">retweet</a> &middot;             <a target="_blank" class="twtr-fav" href="http://twitter.com/intent/favorite?tweet_id=' + o.id + '">favorite</a>             </em>           </p>         </div>       </div>';
            var p = document.createElement("div");
            p.id="tweet-id-" + ++Q._tweetCount;
            p.className="twtr-tweet";
            p.innerHTML=n;
            this.element=p
        }
        Q._tweetCount=0;
        W.loadStyleSheet=function(p, o){
            if (!TWTR.Widget.loadingStyleSheet){
                TWTR.Widget.loadingStyleSheet=true;
                var n = document.createElement("link");
                n.href=p;
                n.rel="stylesheet";
                n.type="text/css";
                document.getElementsByTagName("head")[0].appendChild(n);
                var q = setInterval(function(){
                    var s = L(o, "position");
                    if (s == "relative"){
                        clearInterval(q);
                        q=null;
                        TWTR.Widget.hasLoadedStyleSheet=true
                    }
                }, 50)
            }
        };
        (function(){
            var n = false;
            W.css=function(q){
                var p = document.createElement("style");
                p.type="text/css";
                if (l.ie){
                    p.styleSheet.cssText=q
                }
                else{
                    var s = document.createDocumentFragment();
                    s.appendChild(document.createTextNode(q));
                    p.appendChild(s)
                }
                function o(){
                    document.getElementsByTagName("head")[0].appendChild(p)
                }
                if (!l.ie || n){
                    o()
                }
                else{
                    window.attachEvent("onload", function(){
                        n=true;
                        o()
                    })
                }
            }
        })();
        TWTR.Widget.isLoaded=false;
        TWTR.Widget.loadingStyleSheet=false;
        TWTR.Widget.hasLoadedStyleSheet=false;
        TWTR.Widget.WIDGET_NUMBER=0;
        TWTR.Widget.REFRESH_MIN=6000;
        TWTR.Widget.ENTITY_RANGE=100;
        TWTR.Widget.ENTITY_PERCENTAGE=70;
        TWTR.Widget.matches={mentions:/^@[a-zA-Z0-9_]{1,20}\b/,any_mentions:/\b@[a-zA-Z0-9_]{1,20}\b/};
        TWTR.Widget.jsonP=function(o, q){
            var n = document.createElement("script");
            var p = document.getElementsByTagName("head")[0];
            n.type="text/javascript";
            n.src=o;
            p.insertBefore(n, p.firstChild);
            q(n);
            return n
        };
        TWTR.Widget.randomNumber=function(n){
            r=Math.floor(Math.random() * n);
            return r
        };
        TWTR.Widget.SHOW_ENTITIES=TWTR.Widget.randomNumber(TWTR.Widget.ENTITY_RANGE) <= TWTR.Widget.ENTITY_PERCENTAGE;
        TWTR.Widget.prototype=function(){
            var t = window.twttr || {};
            var u = T ?"https://": "http://";
            var s = "twitter.com";
            var o = u + "search." + s + "/search.";
            var n = u + "api." + s + "/1/statuses/user_timeline.";
            var q = u + s + "/favorites/";
            var p = u + "api." + s + "/1/";
            var v = 25000;
            var w = T ?"https://twitter-widgets.s3.amazonaws.com/j/1/default.gif": "http://widgets.twimg.com/j/1/default.gif";
            return{init:function(y){
                var x = this;
                this._widgetNumber=++TWTR.Widget.WIDGET_NUMBER;
                TWTR.Widget["receiveCallback_" + this._widgetNumber]=function(z){
                    x._prePlay.call(x, z)
                };
                this._cb="TWTR.Widget.receiveCallback_" + this._widgetNumber;
                this.opts=y;
                this._base=o;
                this._isRunning=false;
                this._hasOfficiallyStarted=false;
                this._hasNewSearchResults=false;
                this._rendered=false;
                this._profileImage=false;
                this._isCreator=!!y.creator;
                this._setWidgetType(y.type);
                this.timesRequested=0;
                this.runOnce=false;
                this.newResults=false;
                this.results=[];
                this.jsonMaxRequestTimeOut=19000;
                this.showedResults=[];
                this.sinceId=1;
                this.source="TWITTERINC_WIDGET";
                this.id=y.id || "twtr-widget-" + this._widgetNumber;
                this.tweets=0;
                this.setDimensions(y.width, y.height);
                this.interval=y.interval ?Math.max(y.interval, TWTR.Widget.REFRESH_MIN): TWTR.Widget.REFRESH_MIN;
                this.format="json";
                this.rpp=y.rpp || 50;
                this.subject=y.subject || "";
                this.title=y.title || "";
                this.setFooterText(y.footer);
                this.setSearch(y.search);
                this._setUrl();
                this.theme=y.theme ?y.theme: this._getDefaultTheme();
                if (!y.id){
                    document.write('<div class="twtr-widget" id="' + this.id + '"></div>')
                }
                this.widgetEl=M(this.id);
                if (y.id){
                    i.add(this.widgetEl, "twtr-widget")
                }
                if (y.version >= 2 && !TWTR.Widget.hasLoadedStyleSheet){
                    if (T){
                        t.loadStyleSheet("https://twitter-widgets.s3.amazonaws.com/j/2/widget.css", this.widgetEl)
                    }
                    else{
                        if (y.creator){
                            t.loadStyleSheet("/stylesheets/widgets/widget.css", this.widgetEl)
                        }
                        else{
                            t.loadStyleSheet("http://widgets.twimg.com/j/2/widget.css", this.widgetEl)
                        }
                    }
                }
                this.occasionalJob=new U(function(z){
                    x.decay=z;
                    x._getResults.call(x)
                }, function(){
                    return x._decayDecider.call(x)
                }, v);
                this._ready=N.fn(y.ready) ?y.ready: function(){
                };
                this._isRelativeTime=true;
                this._tweetFilter=false;
                this._avatars=true;
                this._isFullScreen=false;
                this._isLive=true;
                this._isScroll=false;
                this._loop=true;
                this._behavior="default";
                this.setFeatures(this.opts.features);
                this.intervalJob=new O(this.interval, this._loop, function(z){
                    x._normalizeTweet(z)
                });
                return this
            },setDimensions:function(x, y){
                this.wh=(x && y) ?[x,y]: [250,300];
                if (x == "auto" || x == "100%"){
                    this.wh[0]="100%"
                }
                else{
                    this.wh[0]=((this.wh[0] < 150) ?150: this.wh[0]) + "px"
                }
                this.wh[1]=((this.wh[1] < 100) ?100: this.wh[1]) + "px";
                return this
            },setRpp:function(x){
                var x = parseInt(x);
                this.rpp=(N.number(x) && (x > 0 && x <= 100)) ?x: 30;
                return this
            },_setWidgetType:function(x){
                this._isSearchWidget = false,this._isProfileWidget = false,this._isFavsWidget = false,this._isListWidget = false;
                switch (x){
                    case"profile":
                        this._isProfileWidget=true;
                        break;
                    case"search":
                        this._isSearchWidget = true,this.search = this.opts.search;
                        break;
                    case"faves":
                    case"favs":
                        this._isFavsWidget=true;
                        break;
                    case"list":
                    case"lists":
                        this._isListWidget=true;
                        break
                }
                return this
            },setFeatures:function(x){
                if (x){
                    if (N.def(x.filters)){
                        this._tweetFilter=x.filters
                    }
                    if (N.def(x.dateformat)){
                        this._isRelativeTime=!!(x.dateformat !== "absolute")
                    }
                    if (N.def(x.fullscreen) && N.bool(x.fullscreen)){
                        if (x.fullscreen){
                            this._isFullScreen=true;
                            this.wh[0]="100%";
                            this.wh[1]=(a() - 90) + "px";
                            var y = this;
                            K.add(window, "resize", function(AA){
                                y.wh[1]=a();
                                y._fullScreenResize()
                            })
                        }
                    }
                    if (N.def(x.loop) && N.bool(x.loop)){
                        this._loop=x.loop
                    }
                    if (N.def(x.behavior) && N.string(x.behavior)){
                        switch (x.behavior){
                            case"all":
                                this._behavior="all";
                                break;
                            case"preloaded":
                                this._behavior="preloaded";
                                break;
                            default:
                                this._behavior="default";
                                break
                        }
                    }
                    if (N.def(x.avatars) && N.bool(x.avatars)){
                        if (!x.avatars){
                            t.css("#" + this.id + " .twtr-avatar { display: none; } #" + this.id + " .twtr-tweet-text { margin-left: 0; }");
                            this._avatars=false
                        }
                        else{
                            var z = (this._isFullScreen) ?"90px": "40px";
                            t.css("#" + this.id + " .twtr-avatar { display: block; } #" + this.id + " .twtr-user { display: inline; } #" + this.id + " .twtr-tweet-text { margin-left: " + z + "; }");
                            this._avatars=true
                        }
                    }
                    else{
                        if (this._isProfileWidget){
                            this.setFeatures({avatars:false});
                            this._avatars=false
                        }
                        else{
                            this.setFeatures({avatars:true});
                            this._avatars=true
                        }
                    }
                    if (N.def(x.live) && N.bool(x.live)){
                        this._isLive=x.live
                    }
                    if (N.def(x.scrollbar) && N.bool(x.scrollbar)){
                        this._isScroll=x.scrollbar
                    }
                }
                else{
                    if (this._isProfileWidget || this._isFavsWidget){
                        this._behavior="all"
                    }
                }
                return this
            },_fullScreenResize:function(){
                var x = J("twtr-timeline", "div", document.body, function(y){
                    y.style.height=(a() - 90) + "px"
                })
            },setTweetInterval:function(x){
                this.interval=x;
                return this
            },setBase:function(x){
                this._base=x;
                return this
            },setUser:function(y, x){
                this.username=y;
                this.realname=x || " ";
                if (this._isFavsWidget){
                    this.setBase(q + y + ".")
                }
                else{
                    if (this._isProfileWidget){
                        this.setBase(n + this.format + "?screen_name=" + y)
                    }
                }
                this.setSearch(" ");
                return this
            },setList:function(y, x){
                this.listslug=x.replace(/ /g, "-").toLowerCase();
                this.username=y;
                this.setBase(p + y + "/lists/" + this.listslug + "/statuses.");
                this.setSearch(" ");
                return this
            },setProfileImage:function(x){
                this._profileImage=x;
                this.byClass("twtr-profile-img", "img").src=c(x);
                this.byClass("twtr-profile-img-anchor", "a").href="http://twitter.com/intent/user?screen_name=" + this.username;
                return this
            },setTitle:function(x){
                this.title=x;
                this.widgetEl.getElementsByTagName("h3")[0].innerHTML=this.title;
                return this
            },setCaption:function(x){
                this.subject=x;
                this.widgetEl.getElementsByTagName("h4")[0].innerHTML=this.subject;
                return this
            },setFooterText:function(x){
                this.footerText=(N.def(x) && N.string(x)) ?x: "Join the conversation";
                if (this._rendered){
                    this.byClass("twtr-join-conv", "a").innerHTML=this.footerText
                }
                return this
            },setSearch:function(y){
                this.searchString=y || "";
                this.search=encodeURIComponent(this.searchString);
                this._setUrl();
                if (this._rendered){
                    var x = this.byClass("twtr-join-conv", "a");
                    x.href="http://twitter.com/" + this._getWidgetPath()
                }
                return this
            },_getWidgetPath:function(){
                if (this._isProfileWidget){
                    return this.username
                }
                else{
                    if (this._isFavsWidget){
                        return this.username + "/favorites"
                    }
                    else{
                        if (this._isListWidget){
                            return this.username + "/lists/" + this.listslug
                        }
                        else{
                            return"#search?q=" + this.search
                        }
                    }
                }
            },_setUrl:function(){
                var y = this;
                function x(){
                    return"&" + (+new Date) + "=cachebust"
                }
                function z(){
                    return(y.sinceId == 1) ?"": "&since_id=" + y.sinceId + "&refresh=true"
                }
                if (this._isProfileWidget){
                    this.url=this._includeEntities(this._base + "&callback=" + this._cb + "&include_rts=true&count=" + this.rpp + z() + "&clientsource=" + this.source)
                }
                else{
                    if (this._isFavsWidget || this._isListWidget){
                        this.url=this._includeEntities(this._base + this.format + "?callback=" + this._cb + z() + "&clientsource=" + this.source)
                    }
                    else{
                        this.url=this._includeEntities(this._base + this.format + "?q=" + this.search + "&callback=" + this._cb + "&rpp=" + this.rpp + z() + "&clientsource=" + this.source);
                        if (!this.runOnce){
                            this.url+="&result_type=recent"
                        }
                    }
                }
                this.url+=x();
                return this
            },_includeEntities:function(x){
                if (TWTR.Widget.SHOW_ENTITIES){
                    return x + "&include_entities=true"
                }
                return x
            },_getRGB:function(x){
                return S(x.substring(1, 7))
            },setTheme:function(AC, x){
                var AA = this;
                var y = " !important";
                var AB = ((window.location.hostname.match(/twitter\.com/)) && (window.location.pathname.match(/goodies/)));
                if (x || AB){
                    y=""
                }
                this.theme={shell:{background:function(){
                    return AC.shell.background || AA._getDefaultTheme().shell.background
                }(),color:function(){
                    return AC.shell.color || AA._getDefaultTheme().shell.color
                }()},tweets:{background:function(){
                    return AC.tweets.background || AA._getDefaultTheme().tweets.background
                }(),color:function(){
                    return AC.tweets.color || AA._getDefaultTheme().tweets.color
                }(),links:function(){
                    return AC.tweets.links || AA._getDefaultTheme().tweets.links
                }()}};
                var z = "#" + this.id + " .twtr-doc,                      #" + this.id + " .twtr-hd a,                      #" + this.id + " h3,                      #" + this.id + " h4 {            background-color: " + this.theme.shell.background + y + ";            color: " + this.theme.shell.color + y + ";          }          #" + this.id + " .twtr-tweet a {            color: " + this.theme.tweets.links + y + ";          }          #" + this.id + " .twtr-bd, #" + this.id + " .twtr-timeline i a,           #" + this.id + " .twtr-bd p {            color: " + this.theme.tweets.color + y + ";          }          #" + this.id + " .twtr-new-results,           #" + this.id + " .twtr-results-inner,           #" + this.id + " .twtr-timeline {            background: " + this.theme.tweets.background + y + ";          }";
                if (l.ie){
                    z+="#" + this.id + " .twtr-tweet { background: " + this.theme.tweets.background + y + "; }"
                }
                t.css(z);
                return this
            },byClass:function(AA, x, y){
                var z = J(AA, x, M(this.id));
                return(y) ?z: z[0]
            },render:function(){
                var z = this;
                if (!TWTR.Widget.hasLoadedStyleSheet){
                    window.setTimeout(function(){
                        z.render.call(z)
                    }, 50);
                    return this
                }
                this.setTheme(this.theme, this._isCreator);
                if (this._isProfileWidget){
                    i.add(this.widgetEl, "twtr-widget-profile")
                }
                if (this._isScroll){
                    i.add(this.widgetEl, "twtr-scroll")
                }
                if (!this._isLive && !this._isScroll){
                    this.wh[1]="auto"
                }
                if (this._isSearchWidget && this._isFullScreen){
                    document.title="Twitter search: " + escape(this.searchString)
                }
                this.widgetEl.innerHTML=this._getWidgetHtml();
                var y = this.byClass("twtr-timeline", "div");
                if (this._isLive && !this._isFullScreen){
                    var AA = function(AB){
                        if (z._behavior === "all"){
                            return
                        }
                        if (I.call(this, AB)){
                            z.pause.call(z)
                        }
                    };
                    var x = function(AB){
                        if (z._behavior === "all"){
                            return
                        }
                        if (I.call(this, AB)){
                            z.resume.call(z)
                        }
                    };
                    this.removeEvents=function(){
                        K.remove(y, "mouseover", AA);
                        K.remove(y, "mouseout", x)
                    };
                    K.add(y, "mouseover", AA);
                    K.add(y, "mouseout", x)
                }
                this._rendered=true;
                this._ready();
                return this
            },removeEvents:function(){
            },_getDefaultTheme:function(){
                return{shell:{background:"#8ec1da",color:"#ffffff"},tweets:{background:"#ffffff",color:"#444444",links:"#1985b5"}}
            },_getWidgetHtml:function(){
                var z = this;
                function AB(){
                    if (z._isProfileWidget){
                        return'<a target="_blank" href="http://twitter.com/" class="twtr-profile-img-anchor"><img alt="profile" class="twtr-profile-img" src="' + w + '"></a>                      <h3></h3>                      <h4></h4>'
                    }
                    else{
                        return"<h3>" + z.title + "</h3><h4>" + z.subject + "</h4>"
                    }
                }
                function y(){
                    return z._isFullScreen ?" twtr-fullscreen": ""
                }
                var AA = T ?"https://twitter-widgets.s3.amazonaws.com/i/widget-logo.png": "http://widgets.twimg.com/i/widget-logo.png";
                if (this._isFullScreen){
                    AA="https://twitter-widgets.s3.amazonaws.com/i/widget-logo-fullscreen.png"
                }
                var x = '<div class="twtr-doc' + y() + '" style="width: ' + this.wh[0] + ';">            <div class="twtr-hd">' + AB() + '             </div>            <div class="twtr-bd">              <div class="twtr-timeline" style="height: ' + this.wh[1] + ';">                <div class="twtr-tweets">                  <div class="twtr-reference-tweet"></div>                  <!-- tweets show here -->                </div>              </div>            </div>            <div class="twtr-ft">              <div><a target="_blank" href="http://twitter.com"><img alt="" src="' + AA + '"></a>                <span><a target="_blank" class="twtr-join-conv" style="color:' + this.theme.shell.color + '" href="http://twitter.com/' + this._getWidgetPath() + '">' + this.footerText + "</a></span>              </div>            </div>          </div>";
                return x
            },_appendTweet:function(x){
                this._insertNewResultsNumber();
                f(x, this.byClass("twtr-reference-tweet", "div"));
                return this
            },_slide:function(y){
                var z = this;
                var x = d(y).offsetHeight;
                if (this.runOnce){
                    new B(y, "height", {from:0,to:x,time:500,callback:function(){
                        z._fade.call(z, y)
                    }}).start()
                }
                return this
            },_fade:function(x){
                var y = this;
                if (B.canTransition){
                    x.style.webkitTransition="opacity 0.5s ease-out";
                    x.style.opacity=1;
                    return this
                }
                new B(x, "opacity", {from:0,to:1,time:500}).start();
                return this
            },_chop:function(){
                if (this._isScroll){
                    return this
                }
                var AC = this.byClass("twtr-tweet", "div", true);
                var AD = this.byClass("twtr-new-results", "div", true);
                if (AC.length){
                    for (var z = AC.length - 1;z >= 0;z--){
                        var AB = AC[z];
                        var AA = parseInt(AB.offsetTop);
                        if (AA > parseInt(this.wh[1])){
                            g(AB)
                        }
                        else{
                            break
                        }
                    }
                    if (AD.length > 0){
                        var x = AD[AD.length - 1];
                        var y = parseInt(x.offsetTop);
                        if (y > parseInt(this.wh[1])){
                            g(x)
                        }
                    }
                }
                return this
            },_appendSlideFade:function(y){
                var x = y || this.tweet.element;
                this._chop()._appendTweet(x)._slide(x);
                return this
            },_createTweet:function(x){
                x.tweet=TWTR.Widget.ify.autoLink(x);
                x.timestamp=x.created_at;
                x.created_at=this._isRelativeTime ?P(x.created_at): X(x.created_at);
                this.tweet=new Q(x);
                if (this._isLive && this.runOnce){
                    this.tweet.element.style.opacity=0;
                    this.tweet.element.style.filter="alpha(opacity:0)";
                    this.tweet.element.style.height="0"
                }
                return this
            },_getResults:function(){
                var x = this;
                this.timesRequested++;
                this.jsonRequestRunning=true;
                this.jsonRequestTimer=window.setTimeout(function(){
                    if (x.jsonRequestRunning){
                        clearTimeout(x.jsonRequestTimer);
                        x.jsonRequestTimer=null
                    }
                    x.jsonRequestRunning=false;
                    g(x.scriptElement);
                    x.newResults=false;
                    x.decay()
                }, this.jsonMaxRequestTimeOut);
                TWTR.Widget.jsonP(x.url, function(y){
                    x.scriptElement=y
                })
            },clear:function(){
                var y = this.byClass("twtr-tweet", "div", true);
                var x = this.byClass("twtr-new-results", "div", true);
                y=y.concat(x);
                F(y, function(z){
                    g(z)
                });
                return this
            },_sortByMagic:function(x){
                var y = this;
                if (this._tweetFilter){
                    if (this._tweetFilter.negatives){
                        x=x.filter(function(z){
                            if (!y._tweetFilter.negatives.test(z.text)){
                                return z
                            }
                        })
                    }
                    if (this._tweetFilter.positives){
                        x=x.filter(function(z){
                            if (y._tweetFilter.positives.test(z.text)){
                                return z
                            }
                        })
                    }
                }
                switch (this._behavior){
                    case"all":
                        this._sortByLatest(x);
                        break;
                    case"preloaded":
                    default:
                        this._sortByDefault(x);
                        break
                }
                if (this._isLive && this._behavior !== "all"){
                    this.intervalJob.set(this.results);
                    this.intervalJob.start()
                }
                return this
            },_sortByLatest:function(x){
                this.results=x;
                this.results=this.results.slice(0, this.rpp);
                this.results.reverse();
                return this
            },_sortByDefault:function(y){
                var z = this;
                var x = function(AA){
                    return new Date(AA).getTime()
                };
                this.results.unshift.apply(this.results, y);
                F(this.results, function(AA){
                    if (!AA.views){
                        AA.views=0
                    }
                });
                this.results.sort(function(AB, AA){
                    if (x(AB.created_at) > x(AA.created_at)){
                        return -1
                    }
                    else{
                        if (x(AB.created_at) < x(AA.created_at)){
                            return 1
                        }
                        else{
                            return 0
                        }
                    }
                });
                this.results=this.results.slice(0, this.rpp);
                this.results=this.results.sort(function(AB, AA){
                    if (AB.views < AA.views){
                        return -1
                    }
                    else{
                        if (AB.views > AA.views){
                            return 1
                        }
                    }
                    return 0
                });
                if (!this._isLive){
                    this.results.reverse()
                }
            },_prePlay:function(y){
                if (this.jsonRequestTimer){
                    clearTimeout(this.jsonRequestTimer);
                    this.jsonRequestTimer=null
                }
                if (!l.ie){
                    g(this.scriptElement)
                }
                if (y.error){
                    this.newResults=false
                }
                else{
                    if (y.results && y.results.length > 0){
                        this.response=y;
                        this.newResults=true;
                        this.sinceId=y.max_id_str;
                        this._sortByMagic(y.results);
                        if (this.isRunning()){
                            this._play()
                        }
                    }
                    else{
                        if ((this._isProfileWidget || this._isFavsWidget || this._isListWidget) && N.array(y) && y.length){
                            this.newResults=true;
                            if (!this._profileImage && this._isProfileWidget){
                                var x = y[0].user.screen_name;
                                this.setProfileImage(y[0].user.profile_image_url);
                                this.setTitle(y[0].user.name);
                                this.setCaption('<a target="_blank" href="http://twitter.com/intent/user?screen_name=' + x + '">' + x + "</a>")
                            }
                            this.sinceId=y[0].id_str;
                            this._sortByMagic(y);
                            if (this.isRunning()){
                                this._play()
                            }
                        }
                        else{
                            this.newResults=false
                        }
                    }
                }
                this._setUrl();
                if (this._isLive){
                    this.decay()
                }
            },_play:function(){
                var x = this;
                if (this.runOnce){
                    this._hasNewSearchResults=true
                }
                if (this._avatars){
                    this._preloadImages(this.results)
                }
                if (this._isRelativeTime && (this._behavior == "all" || this._behavior == "preloaded")){
                    F(this.byClass("twtr-timestamp", "a", true), function(y){
                        y.innerHTML=P(y.getAttribute("time"))
                    })
                }
                if (!this._isLive || this._behavior == "all" || this._behavior == "preloaded"){
                    F(this.results, function(z){
                        if (z.retweeted_status){
                            z=z.retweeted_status
                        }
                        if (x._isProfileWidget){
                            z.from_user=z.user.screen_name;
                            z.profile_image_url=z.user.profile_image_url
                        }
                        if (x._isFavsWidget || x._isListWidget){
                            z.from_user=z.user.screen_name;
                            z.profile_image_url=z.user.profile_image_url
                        }
                        z.id=z.id_str;
                        x._createTweet({id:z.id,user:z.from_user,tweet:z.text,avatar:z.profile_image_url,created_at:z.created_at,needle:z});
                        var y = x.tweet.element;
                        (x._behavior == "all")?x._appendSlideFade(y):x._appendTweet(y)
                    });
                    if (this._behavior != "preloaded"){
                        return this
                    }
                }
                return this
            },_normalizeTweet:function(y){
                var x = this;
                y.views++;
                if (this._isProfileWidget){
                    y.from_user=x.username;
                    y.profile_image_url=y.user.profile_image_url
                }
                if (this._isFavsWidget || this._isListWidget){
                    y.from_user=y.user.screen_name;
                    y.profile_image_url=y.user.profile_image_url
                }
                if (this._isFullScreen){
                    y.profile_image_url=y.profile_image_url.replace(/_normal\./, "_bigger.")
                }
                y.id=y.id_str;
                this._createTweet({id:y.id,user:y.from_user,tweet:y.text,avatar:y.profile_image_url,created_at:y.created_at,needle:y})._appendSlideFade()
            },_insertNewResultsNumber:function(){
                if (!this._hasNewSearchResults){
                    this._hasNewSearchResults=false;
                    return
                }
                if (this.runOnce && this._isSearchWidget){
                    var AA = this.response.total > this.rpp ?this.response.total: this.response.results.length;
                    var x = AA > 1 ?"s": "";
                    var z = (this.response.warning && this.response.warning.match(/adjusted since_id/)) ?"more than": "";
                    var y = document.createElement("div");
                    i.add(y, "twtr-new-results");
                    y.innerHTML='<div class="twtr-results-inner"> &nbsp; </div><div class="twtr-results-hr"> &nbsp; </div><span>' + z + " <strong>" + AA + "</strong> new tweet" + x + "</span>";
                    f(y, this.byClass("twtr-reference-tweet", "div"));
                    this._hasNewSearchResults=false
                }
            },_preloadImages:function(x){
                if (this._isProfileWidget || this._isFavsWidget || this._isListWidget){
                    F(x, function(z){
                        var y = new Image();
                        y.src=c(z.user.profile_image_url)
                    })
                }
                else{
                    F(x, function(y){
                        (new Image()).src=c(y.profile_image_url)
                    })
                }
            },_decayDecider:function(){
                var x = false;
                if (!this.runOnce){
                    this.runOnce=true;
                    x=true
                }
                else{
                    if (this.newResults){
                        x=true
                    }
                }
                return x
            },start:function(){
                var x = this;
                if (!this._rendered){
                    setTimeout(function(){
                        x.start.call(x)
                    }, 50);
                    return this
                }
                if (!this._isLive){
                    this._getResults()
                }
                else{
                    this.occasionalJob.start()
                }
                this._isRunning=true;
                this._hasOfficiallyStarted=true;
                return this
            },stop:function(){
                this.occasionalJob.stop();
                if (this.intervalJob){
                    this.intervalJob.stop()
                }
                this._isRunning=false;
                return this
            },pause:function(){
                if (this.isRunning() && this.intervalJob){
                    this.intervalJob.stop();
                    i.add(this.widgetEl, "twtr-paused");
                    this._isRunning=false
                }
                if (this._resumeTimer){
                    clearTimeout(this._resumeTimer);
                    this._resumeTimer=null
                }
                return this
            },resume:function(){
                var x = this;
                if (!this.isRunning() && this._hasOfficiallyStarted && this.intervalJob){
                    this._resumeTimer=window.setTimeout(function(){
                        x.intervalJob.start();
                        x._isRunning=true;
                        i.remove(x.widgetEl, "twtr-paused")
                    }, 2000)
                }
                return this
            },isRunning:function(){
                return this._isRunning
            },destroy:function(){
                this.stop();
                this.clear();
                this.runOnce=false;
                this._hasOfficiallyStarted=false;
                this._profileImage=false;
                this._isLive=true;
                this._tweetFilter=false;
                this._isScroll=false;
                this.newResults=false;
                this._isRunning=false;
                this.sinceId=1;
                this.results=[];
                this.showedResults=[];
                this.occasionalJob.destroy();
                if (this.jsonRequestRunning){
                    clearTimeout(this.jsonRequestTimer)
                }
                i.remove(this.widgetEl, "twtr-scroll");
                this.removeEvents();
                return this
            }}
        }()
    })();
    var E = /twitter\.com(\:\d{2,4})?\/intent\/(\w+)/,H={tweet:true,retweet:true,favorite:true},G="scrollbars=yes,resizable=yes,toolbar=no,location=yes",D=screen.height,C=screen.width;
    function A(O){
        O=O || window.event;
        var N = O.target || O.srcElement,J,K,I,M,L;
        while (N && N.nodeName.toLowerCase() !== "a"){
            N=N.parentNode
        }
        if (N && N.nodeName.toLowerCase() === "a" && N.href){
            J=N.href.match(E);
            if (J){
                K=550;
                I=(J[2] in H) ?420: 560;
                M=Math.round((C / 2) - (K / 2));
                L=0;
                if (D > I){
                    L=Math.round((D / 2) - (I / 2))
                }
                window.open(N.href, "intent", G + ",width=" + K + ",height=" + I + ",left=" + M + ",top=" + L);
                O.returnValue=false;
                O.preventDefault&&O.preventDefault()
            }
        }
    }
    if (document.addEventListener){
        document.addEventListener("click", A, false)
    }
    else{
        if (document.attachEvent){
            document.attachEvent("onclick", A)
        }
    }
})();
