(function(e){
    e.fn.jTweetsAnywhere=function(a){
        a=e.extend({
            username:"tbillenstein",
            list:null,
            searchParams:null,
            count:0,
            tweetProfileImagePresent:null,
            tweetFilter:defaultTweetFilter,
            showTweetFeed:true,
            showFollowButton:false,
            showConnectButton:false,
            showLoginInfo:false,
            showTweetBox:false,
            mainDecorator:defaultMainDecorator,
            tweetFeedDecorator:defaultTweetFeedDecorator,
            tweetDecorator:defaultTweetDecorator,
            tweetProfileImageDecorator:defaultTweetProfileImageDecorator,
            tweetBodyDecorator:defaultTweetBodyDecorator,
            tweetUsernameDecorator:defaultTweetUsernameDecorator,
            tweetTextDecorator:defaultTweetTextDecorator,
            tweetAttributesDecorator:defaultTweetAttributesDecorator,
            tweetTimestampDecorator:defaultTweetTimestampDecorator,
            tweetSourceDecorator:defaultTweetSourceDecorator,
            tweetGeoLocationDecorator:defaultTweetGeoLocationDecorator,
            tweetInReplyToDecorator:defaultTweetInReplyToDecorator,
            tweetRetweeterDecorator:defaultTweetRetweeterDecorator,
            tweetFeedControlsDecorator:defaultTweetFeedControlsDecorator,
            tweetFeedControlsMoreBtnDecorator:defaultTweetFeedControlsMoreBtnDecorator,
            tweetFeedControlsPrevBtnDecorator:defaultTweetFeedControlsPrevBtnDecorator,
            tweetFeedControlsNextBtnDecorator:defaultTweetFeedControlsNextBtnDecorator,
            tweetFeedAutorefreshTriggerDecorator:defaultTweetFeedAutorefreshTriggerDecorator,
            tweetFeedAutorefreshTriggerContentDecorator:defaultTweetFeedAutorefreshTriggerContentDecorator,
            connectButtonDecorator:defaultConnectButtonDecorator,
            loginInfoDecorator:defaultLoginInfoDecorator,
            loginInfoContentDecorator:defaultLoginInfoContentDecorator,
            followButtonDecorator:defaultFollowButtonDecorator,
            tweetBoxDecorator:defaultTweetBoxDecorator,
            linkDecorator:defaultLinkDecorator,
            usernameDecorator:defaultUsernameDecorator,
            hashtagDecorator:defaultHashtagDecorator,
            loadingDecorator:defaultLoadingDecorator,
            errorDecorator:defaultErrorDecorator,
            noDataDecorator:defaultNoDataDecorator,
            tweetTimestampFormatter:defaultTweetTimestampFormatter,
            tweetTimestampTooltipFormatter:defaultTweetTimestampTooltipFormatter,
            tweetVisualizer:defaultTweetVisualizer,
            loadingIndicatorVisualizer:defaultLoadingIndicatorVisualizer,
            autorefreshTriggerVisualizer:defaultAutorefreshTriggerVisualizer,
            onDataRequestHandler:defaultOnDataRequestHandler,
            onRateLimitDataHandler:defaultOnRateLimitDataHandler,
            _tweetFeedConfig:{
                expandHovercards:false,
                showTimestamp:{
                    refreshInterval:0
                },
                showSource:false,
                showGeoLocation:true,
                showInReplyTo:true,
                showProfileImages:null,
                showUserScreenNames:null,
                showUserFullNames:false,
                includeRetweets:true,
                paging:{
                    mode:"none",
                    _limit:0,
                    _offset:0
                },
                autorefresh:{
                    mode:"none",
                    interval:60,
                    duration:3600,
                    _startTime:null,
                    _triggerElement:null
                },
                _pageParam:0,
                _maxId:null,
                _recLevel:0,
                _noData:false,
                _clearBeforePopulate:false
            },
            _tweetBoxConfig:{
                counter:true,
                width:515,
                height:65,
                label:"What's happening?",
                defaultContent:"",
                onTweet:function(){}
            },
        _connectButtonConfig:{
            size:"medium"
        },
        _baseSelector:null,
        _baseElement:null,
        _tweetFeedElement:null,
        _tweetFeedControlsElement:null,
        _followButtonElement:null,
        _loginInfoElement:null,
        _connectButtonElement:null,
        _tweetBoxElement:null,
        _loadingIndicatorElement:null,
        _noDataElement:null,
        _tweetsCache:[],
        _autorefreshTweetsCache:[],
        _stats:{
            dataRequestCount:0,
            rateLimitPreventionCount:0,
            rateLimit:{
                remaining_hits:150,
                hourly_limit:150
            }
        }
        },a);
if(a.mainDecorator){
    a._baseSelector=this.selector;
    if(typeof a.username!="string"){
        if(!a.searchParams)a.searchParams=["q=from:"+a.username.join(" OR from:")];
        a.username=a.username[0]
        }
        typeof a.showTweetFeed=="object"&&e.extend(true,a._tweetFeedConfig,a.showTweetFeed);
    if(typeof a.showTweetBox=="object"){
        a._tweetBoxConfig=a.showTweetBox;
        a.showTweetBox=true
        }
        if(typeof a.showConnectButton=="object"){
        a._connectButtonConfig= a.showConnectButton;
        a.showConnectButton=true
        }
        if(a._tweetFeedConfig.showProfileImages==null)a._tweetFeedConfig.showProfileImages=a.tweetProfileImagePresent;
    if(a._tweetFeedConfig.showProfileImages==null)a._tweetFeedConfig.showProfileImages=(a.list||a.searchParams)&&a.tweetProfileImageDecorator;
    if(a._tweetFeedConfig.showUserScreenNames==null){
        if(a.list||a.searchParams)a._tweetFeedConfig.showUserScreenNames=true;
        if(!a.tweetUsernameDecorator)a._tweetFeedConfig.showUserScreenNames=false
            }
            if(a._tweetFeedConfig.showUserFullNames== null){
        if(a.list||a.searchParams)a._tweetFeedConfig.showUserFullNames=true;
        if(!a.tweetUsernameDecorator)a._tweetFeedConfig.showUserFullNames=false
            }
            a.count=validateRange(a.count,0,a.searchParams?100:20);
    a._tweetFeedConfig.autorefresh.interval=Math.max(30,a._tweetFeedConfig.autorefresh.interval);
    a._tweetFeedConfig.paging._offset=0;
    a._tweetFeedConfig.paging._limit=a.count;
    if(a.count==0||!a.showTweetFeed){
        a.tweetFeedDecorator=null;
        a.tweetFeedControlsDecorator=null
        }
        if(a._tweetFeedConfig.paging.mode=="none")a.tweetFeedControlsDecorator= null;
    if(!a.showFollowButton)a.followButtonDecorator=null;
    if(!a.showTweetBox)a.tweetBoxDecorator=null;
    if(!a.showConnectButton)a.connectButtonDecorator=null;
    if(!a.showLoginInfo)a.loginInfoDecorator=null;
    if(!a._tweetFeedConfig.showTimestamp)a.tweetTimestampDecorator=null;
    if(!a._tweetFeedConfig.showSource)a.tweetSourceDecorator=null;
    if(!a._tweetFeedConfig.showGeoLocation)a.tweetGeoLocationDecorator=null;
    if(!a._tweetFeedConfig.showInReplyTo)a.tweetInReplyToDecorator=null;
    e.ajaxSetup({
        cache:true
    });
    return this.each(function(){
        a._baseElement= e(this);
        a._tweetFeedElement=a.tweetFeedDecorator?e(a.tweetFeedDecorator(a)):null;
        a._tweetFeedControlsElement=a.tweetFeedControlsDecorator?e(a.tweetFeedControlsDecorator(a)):null;
        a._followButtonElement=a.followButtonDecorator?e(a.followButtonDecorator(a)):null;
        a._tweetBoxElement=a.tweetBoxDecorator?e(a.tweetBoxDecorator(a)):null;
        a._connectButtonElement=a.connectButtonDecorator?e(a.connectButtonDecorator(a)):null;
        a._loginInfoElement=a.loginInfoDecorator?e(a.loginInfoDecorator(a)):null;
        a.mainDecorator(a);
        populateTweetFeed(a);
        populateAnywhereControls(a);
        bindEventHandlers(a);
        a._tweetFeedConfig.autorefresh._startTime=(new Date).getTime();
        startAutorefresh(a);
        startTimestampRefresh(a)
        })
    }
};

defaultMainDecorator=function(a){
    a._tweetFeedElement&&a._baseElement.append(a._tweetFeedElement);
    a._tweetFeedControlsElement&&a._baseElement.append(a._tweetFeedControlsElement);
    a._connectButtonElement&&a._baseElement.append(a._connectButtonElement);
    a._loginInfoElement&&a._baseElement.append(a._loginInfoElement);
    a._followButtonElement&& a._baseElement.append(a._followButtonElement);
    a._tweetBoxElement&&a._baseElement.append(a._tweetBoxElement)
    };

defaultTweetFeedControlsDecorator=function(a){
    var b="";
    if(a._tweetFeedConfig.paging.mode=="prev-next"){
        if(a.tweetFeedControlsPrevBtnDecorator)b+=a.tweetFeedControlsPrevBtnDecorator(a);
        if(a.tweetFeedControlsNextBtnDecorator)b+=a.tweetFeedControlsNextBtnDecorator(a)
            }else if(a._tweetFeedConfig.paging.mode!="endless-scroll")if(a.tweetFeedControlsMoreBtnDecorator)b+=a.tweetFeedControlsMoreBtnDecorator(a);
    return'<div class="jta-tweet-list-controls">'+b+"</div>"
    };

defaultTweetFeedControlsMoreBtnDecorator=function(){
    return'<span class="jta-tweet-list-controls-button jta-tweet-list-controls-button-more">More</span>'
    };

defaultTweetFeedControlsPrevBtnDecorator=function(){
    return'<span class="jta-tweet-list-controls-button jta-tweet-list-controls-button-prev">Prev</span>'
    };

defaultTweetFeedControlsNextBtnDecorator=function(){
    return'<span class="jta-tweet-list-controls-button jta-tweet-list-controls-button-next">Next</span>'
    };
defaultTweetFeedAutorefreshTriggerDecorator=function(a,b){
    var c="";
    if(b.tweetFeedAutorefreshTriggerContentDecorator)c=b.tweetFeedAutorefreshTriggerContentDecorator(a,b);
    return'<li class="jta-tweet-list-autorefresh-trigger">'+c+"</li>"
    };

defaultTweetFeedAutorefreshTriggerContentDecorator=function(a){
    return'<span class="jta-tweet-list-autorefresh-trigger-content">'+(""+a+" new "+(a>1?" tweets":" tweet"))+"</span>"
    };

defaultTweetFeedDecorator=function(){
    return'<ul class="jta-tweet-list"></ul>'
    };

defaultTweetDecorator= function(a,b){
    var c="";
    if(b._tweetFeedConfig.showProfileImages)c+=b.tweetProfileImageDecorator(a,b);
    if(b.tweetBodyDecorator)c+=b.tweetBodyDecorator(a,b);
    c+='<div class="jta-clear">&nbsp;</div>';
    return'<li class="jta-tweet-list-item">'+c+"</li>"
    };

defaultTweetProfileImageDecorator=function(a){
    a=a.retweeted_status||a;
    var b=a.user?a.user.screen_name:a.from_user;
    return'<div class="jta-tweet-profile-image">'+('<a class="jta-tweet-profile-image-link" href="http://twitter.com/'+b+'" target="_blank"><img src="'+ (a.user?a.user.profile_image_url:a.profile_image_url)+'" alt="'+b+'"'+(isAnywherePresent()?"":' title="'+b+'"')+"/></a>")+"</div>"
    };

defaultTweetBodyDecorator=function(a,b){
    var c="";
    if(b.tweetTextDecorator)c+=b.tweetTextDecorator(a,b);
    if(b.tweetAttributesDecorator)c+=b.tweetAttributesDecorator(a,b);
    return'<div class="jta-tweet-body '+(b._tweetFeedConfig.showProfileImages?"jta-tweet-body-list-profile-image-present":"")+'">'+c+"</div>"
    };

defaultTweetTextDecorator=function(a,b){
    var c=a.text;
    if(a.retweeted_status&& (b._tweetFeedConfig.showUserScreenNames||b._tweetFeedConfig.showUserScreenNames==null||b._tweetFeedConfig.showUserFullNames||b._tweetFeedConfig.showUserFullNames==null))c=a.retweeted_status.text;
    if(b.linkDecorator)c=b.linkDecorator(c,b);
    if(b.usernameDecorator)c=b.usernameDecorator(c,b);
    if(b.hashtagDecorator)c=b.hashtagDecorator(c,b);
    if(b._tweetFeedConfig.showUserScreenNames||b._tweetFeedConfig.showUserFullNames||a.retweeted_status&&(b._tweetFeedConfig.showUserScreenNames==null||b._tweetFeedConfig.showUserFullNames== null))c=b.tweetUsernameDecorator(a,b)+" "+c;
    return'<span class="jta-tweet-text">'+c+"</span>"
    };

defaultTweetUsernameDecorator=function(a,b){
    var c=a.retweeted_status||a,d=c.user?c.user.screen_name:c.from_user;
    c=c.user?c.user.name:null;
    var f;
    if(d&&(b._tweetFeedConfig.showUserScreenNames||b._tweetFeedConfig.showUserScreenNames==null&&a.retweeted_status))f='<span class="jta-tweet-user-screen-name"><a class="jta-tweet-user-screen-name-link" href="http://twitter.com/'+d+'" target="_blank">'+d+"</a></span>";
    var g;
    if(c&&(b._tweetFeedConfig.showUserFullNames||b._tweetFeedConfig.showUserFullNames==null&&a.retweeted_status))g='<span class="jta-tweet-user-full-name">'+(f?" (":"")+'<a class="jta-tweet-user-full-name-link" href="http://twitter.com/'+d+'" name="'+d+'" target="_blank">'+c+"</a>"+(f?")":"")+"</span>";
    d="";
    if(f)d+=f;
    if(g){
        if(f)d+=" ";
        d+=g
        }
        if(f||g)d='<span class="jta-tweet-user-name">'+(a.retweeted_status?"RT ":"")+d+"</span>";
    return d
    };

defaultTweetAttributesDecorator=function(a,b){
    var c="";
    if(b.tweetTimestampDecorator|| b.tweetSourceDecorator||b.tweetGeoLocationDecorator||b.tweetInReplyToDecorator||a.retweeted_status&&b.tweetRetweeterDecorator){
        c+='<span class="jta-tweet-attributes">';
        if(b.tweetTimestampDecorator)c+=b.tweetTimestampDecorator(a,b);
        if(b.tweetSourceDecorator)c+=b.tweetSourceDecorator(a,b);
        if(b.tweetGeoLocationDecorator)c+=b.tweetGeoLocationDecorator(a,b);
        if(b.tweetInReplyToDecorator)c+=b.tweetInReplyToDecorator(a,b);
        if(a.retweeted_status&&b.tweetRetweeterDecorator)c+=b.tweetRetweeterDecorator(a,b);
        c+="</span>"
        }
        return c
    };

defaultTweetTimestampDecorator=function(a,b){
    var c=a.retweeted_status||a,d=formatDate(c.created_at),f=b.tweetTimestampFormatter(d),g=b.tweetTimestampTooltipFormatter(d);
    return'<span class="jta-tweet-timestamp"><a class="jta-tweet-timestamp-link" data-timestamp="'+d+'" href="http://twitter.com/'+(c.user?c.user.screen_name:c.from_user)+"/status/"+c.id+'" target="_blank" title="'+g+'">'+f+"</a></span>"
    };

defaultTweetTimestampTooltipFormatter=function(a){
    return(new Date(a)).toLocaleString()
    };
defaultTweetTimestampFormatter=function(a){
    var b=new Date,c=parseInt((b.getTime()-Date.parse(a))/1E3),d="";
    if(c<60)d+=c+" second"+(c==1?"":"s")+" ago";
    else if(c<3600){
        b=parseInt((c+30)/60);
        d+=b+" minute"+(b==1?"":"s")+" ago"
        }else if(c<86400){
        b=parseInt((c+1800)/3600);
        d+=b+" hour"+(b==1?"":"s")+" ago"
        }else{
        a=new Date(a);
        a.getHours();
        a.getMinutes();
        d+=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][a.getMonth()]+" "+a.getDate();
        if(a.getFullYear()<b.getFullYear())d+=", "+a.getFullYear();
        b=parseInt((c+43200)/86400);
        d+=" ("+b+" day"+(b==1?"":"s")+" ago)"
        }
        return d
    };

exTimestampFormatter=function(a){
    var b=parseInt(((new Date).getTime()-Date.parse(a))/1E3),c="";
    if(b<60)c+="less than a minute ago";
    else if(b<3600){
        b=parseInt((b+30)/60);
        c+=b+" minute"+(b==1?"":"s")+" ago"
        }else if(b<86400){
        b=parseInt((b+1800)/3600);
        c+="about "+b+" hour"+(b==1?"":"s")+" ago"
        }else{
        b=parseInt((b+43200)/86400);
        c+="about "+b+" day"+(b==1?"":"s")+" ago";
        a=new Date(a);
        b="AM";
        var d=a.getHours();
        if(d>12){
            d-=12;
            b="PM"
            }
            var f= a.getMinutes();
        c+=" ("+d+":"+((f<10?"0":"")+f)+" "+b+" "+(a.getMonth()+1)+"/"+a.getDate()+"/"+a.getFullYear()+")"
        }
        return c
    };

defaultTweetSourceDecorator=function(a){
    return'<span class="jta-tweet-source"> via <span class="jta-tweet-source-link">'+(a.retweeted_status||a).source.replace(/\&lt\;/gi,"<").replace(/\&gt\;/gi,">").replace(/\&quot\;/gi,'"')+"</span></span>"
    };

defaultTweetGeoLocationDecorator=function(a){
    var b="";
    a=a.retweeted_status||a;
    var c;
    if(a.geo&&a.geo.coordinates)c=a.geo.coordinates.join();
    else if(a.place&&a.place.full_name)c=a.place.full_name;
    if(c){
        b="here";
        if(a.place&&a.place.full_name)b=a.place.full_name;
        b='<span class="jta-tweet-location"> from <a class="jta-tweet-location-link" href="'+("http://maps.google.com/maps?q="+c)+'" target="_blank">'+b+"</a></span>"
        }
        return b
    };

defaultTweetInReplyToDecorator=function(a){
    a=a.retweeted_status||a;
    var b="";
    if(a.in_reply_to_status_id&&a.in_reply_to_screen_name)b='<span class="jta-tweet-inreplyto"> <a class="jta-tweet-inreplyto-link" href="http://twitter.com/'+ a.in_reply_to_screen_name+"/status/"+a.in_reply_to_status_id+'" target="_blank">in reply to '+a.in_reply_to_screen_name+"</a></span>";
    return b
    };

defaultTweetRetweeterDecorator=function(a){
    var b="";
    if(a.retweeted_status){
        b=a.user?a.user.screen_name:a.from_user;
        a=(a.retweeted_status.retweet_count||0)-1;
        var c=" and "+a+(a>1?" others":" other");
        b='<br/><span class="jta-tweet-retweeter">Retweeted by '+('<a class="jta-tweet-retweeter-link" href="http://twitter.com/'+b+'" target="_blank">'+b+"</a>")+(a>0? c:"")+"</span>"
        }
        return b
    };

defaultConnectButtonDecorator=function(){
    return'<div class="jta-connect-button"></div>'
    };

defaultLoginInfoDecorator=function(){
    return'<div class="jta-login-info"></div>'
    };

defaultLoginInfoContentDecorator=function(a,b){
    var c="";
    if(b.isConnected()){
        c=b.currentUser.data("screen_name");
        var d=b.currentUser.data("profile_image_url");
        c='<div class="jta-login-info-profile-image"><a href="http://twitter.com/'+c+'" target="_blank"><img src="'+d+'" alt="'+c+'" title="'+c+'"/></a></div><div class="jta-login-info-block"><div class="jta-login-info-screen-name"><a href="http://twitter.com/'+ c+'" target="_blank">'+c+'</a></div><div class="jta-login-info-sign-out">Sign out</div></div><div class="jta-clear">&nbsp;</div>'
        }
        return c
    };

defaultFollowButtonDecorator=function(){
    return'<div class="jta-follow-button"></div>'
    };

defaultTweetBoxDecorator=function(){
    return'<div class="jta-tweet-box"></div>'
    };

defaultLinkDecorator=function(a){
    return a.replace(/((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi,'<a href="$1" class="jta-tweet-a jta-tweet-link" target="_blank" rel="nofollow">$1</a>')
    };
defaultUsernameDecorator=function(a){
    return isAnywherePresent()?a:a.replace(/@([a-zA-Z0-9_]+)/gi,'@<a href="http://twitter.com/$1" class="jta-tweet-a twitter-anywhere-user" target="_blank" rel="nofollow">$1</a>')
    };

defaultHashtagDecorator=function(a){
    return a.replace(/#([a-zA-Z0-9_]+)/gi,'<a href="http://search.twitter.com/search?q=%23$1" class="jta-tweet-a jta-tweet-hashtag" title="#$1" target="_blank" rel="nofollow">#$1</a>')
    };

defaultLoadingDecorator=function(){
    return'<li class="jta-loading">loading ...</li>'
    };
defaultErrorDecorator=function(a){
    return'<li class="jta-error">ERROR: '+a+"</li>"
    };

defaultNoDataDecorator=function(){
    return'<li class="jta-nodata">No more data</li>'
    };

defaultTweetFilter=function(){
    return true
    };

defaultTweetVisualizer=function(a,b,c){
    a[c](b)
    };

defaultLoadingIndicatorVisualizer=function(a,b,c,d){
    defaultVisualizer(a,b,"append","fadeIn",600,"fadeOut",200,d)
    };

defaultAutorefreshTriggerVisualizer=function(a,b,c,d){
    defaultVisualizer(a,b,"prepend","slideDown",600,"fadeOut",200,d)
    };

defaultVisualizer= function(a,b,c,d,f,g,k,h){
    var j=function(){
        h&&h()
        };

    if(a){
        b.hide();
        a[c](b);
        b[d](f,j)
        }else b[g](k,function(){
        b.remove();
        j()
        })
    };

defaultOnDataRequestHandler=function(){
    return true
    };

defaultOnRateLimitDataHandler=function(){};

updateLoginInfoElement=function(a,b){
    if(a._loginInfoElement&&a.loginInfoContentDecorator){
        a._loginInfoElement.children().remove();
        a._loginInfoElement.append(a.loginInfoContentDecorator(a,b));
        e(a._baseSelector+" .jta-login-info-sign-out").bind("click",function(){
            twttr.anywhere.signOut()
            })
        }
    };
getFeedUrl=function(a,b){
    var c="https:"==document.location.protocol?"https:":"http:";
    if(a.searchParams)c+="//search.twitter.com/search.json?"+(a.searchParams instanceof Array?a.searchParams.join("&"):a.searchParams)+"&rpp=100";
    else if(a.list)c+="//api.twitter.com/1/"+a.username+"/lists/"+a.list+"/statuses.json?per_page=20";
    else{
        c+="//api.twitter.com/1/statuses/user_timeline.json?screen_name="+a.username+"&count=20";
        if(a._tweetFeedConfig.includeRetweets)c+="&include_rts=true"
            }
            if(b)c+=(a._tweetFeedConfig._maxId? "&max_id="+a._tweetFeedConfig._maxId:"")+"&page="+a._tweetFeedConfig._pageParam;
    c+="&callback=?";
    return c
    };

isAnywherePresent=function(){
    return typeof twttr!="undefined"
    };

clearTweetFeed=function(a){
    a._tweetFeedElement&&a._tweetFeedElement.empty()
    };

populateTweetFeed=function(a){
    a.tweetDecorator&&a._tweetFeedElement&&getPagedTweets(a,function(b,c){
        c._tweetFeedConfig._clearBeforePopulate&&clearTweetFeed(c);
        hideLoadingIndicator(c,function(){
            e.each(b,function(d,f){
                c.tweetVisualizer(c._tweetFeedElement, e(c.tweetDecorator(f,c)),"append",c)
                });
            if(c._tweetFeedConfig._noData&&c.noDataDecorator&&!c._tweetFeedConfig._noDataElement){
                c._tweetFeedConfig._noDataElement=e(c.noDataDecorator(c));
                c._tweetFeedElement.append(c._tweetFeedConfig._noDataElement)
                }
                c._tweetFeedConfig._clearBeforePopulate&&c._tweetFeedElement.scrollTop(0);
            addHovercards(c)
            })
        })
    };

populateTweetFeed2=function(a){
    if(a._tweetFeedElement&&a._autorefreshTweetsCache.length>0)if(a._tweetFeedConfig.autorefresh.mode=="trigger-insert")if(a._tweetFeedConfig.autorefresh._triggerElement)a.tweetFeedAutorefreshTriggerContentDecorator&& a._tweetFeedConfig.autorefresh._triggerElement.html(a.tweetFeedAutorefreshTriggerContentDecorator(a._autorefreshTweetsCache.length,a));
        else{
        if(a.tweetFeedAutorefreshTriggerDecorator){
            a._tweetFeedConfig.autorefresh._triggerElement=e(a.tweetFeedAutorefreshTriggerDecorator(a._autorefreshTweetsCache.length,a));
            a._tweetFeedConfig.autorefresh._triggerElement.bind("click",function(){
                a.autorefreshTriggerVisualizer(null,a._tweetFeedConfig.autorefresh._triggerElement,a,function(){
                    insertTriggerTweets(a)
                    });
                a._tweetFeedConfig.autorefresh._triggerElement= null
                });
            a.autorefreshTriggerVisualizer(a._tweetFeedElement,a._tweetFeedConfig.autorefresh._triggerElement,a)
            }
        }else insertTriggerTweets(a)
        };

insertTriggerTweets=function(a){
    if(a.tweetDecorator&&a._autorefreshTweetsCache.length>0){
        for(;a._autorefreshTweetsCache.length>0;){
            var b=a._autorefreshTweetsCache.pop();
            a._tweetsCache.unshift(b);
            a._tweetFeedConfig.paging._offset++;
            a.tweetVisualizer(a._tweetFeedElement,e(a.tweetDecorator(b,a)),"prepend",a)
            }
            addHovercards(a)
        }
    };

addHovercards=function(a){
    isAnywherePresent()&& twttr.anywhere(function(b){
        b(a._baseSelector+" .jta-tweet-list").hovercards({
            expanded:a._tweetFeedConfig.expandHovercards
            });
        b(a._baseSelector+" .jta-tweet-profile-image img").hovercards({
            expanded:a._tweetFeedConfig.expandHovercards,
            username:function(c){
                return c.alt
                }
            });
    b(a._baseSelector+" .jta-tweet-retweeter-link").hovercards({
        expanded:a._tweetFeedConfig.expandHovercards,
        username:function(c){
            return c.text
            }
        });
    b(a._baseSelector+" .jta-tweet-user-screen-name-link").hovercards({
        expanded:a._tweetFeedConfig.expandHovercards,
        username:function(c){
            return c.text
            }
        });
b(a._baseSelector+" .jta-tweet-user-full-name-link").hovercards({
    expanded:a._tweetFeedConfig.expandHovercards,
    username:function(c){
        return c.name
        }
    })
})
};

populateAnywhereControls=function(a){
    isAnywherePresent()&&twttr.anywhere(function(b){
        a.tweetBoxDecorator&&b(a._baseSelector+" .jta-tweet-box").tweetBox(a._tweetBoxConfig);
        a.followButtonDecorator&&b(a._baseSelector+" .jta-follow-button").followButton(a.username);
        if(a.connectButtonDecorator){
            var c=e.extend({
                authComplete:function(){
                    updateLoginInfoElement(a, b)
                    },
                signOut:function(){
                    updateLoginInfoElement(a,b)
                    }
                },a._connectButtonConfig);
        b(a._baseSelector+" .jta-connect-button").connectButton(c);
        updateLoginInfoElement(a,b)
        }
    })
};

bindEventHandlers=function(a){
    if(a.tweetFeedControlsDecorator)if(a._tweetFeedConfig.paging.mode=="prev-next"){
        e(a._baseSelector+" .jta-tweet-list-controls-button-prev").bind("click",function(){
            !isLoading(a)&&a._tweetFeedConfig.paging._offset>0&&prevPage(a,true)
            });
        e(a._baseSelector+" .jta-tweet-list-controls-button-next").bind("click", function(){
            isLoading(a)||nextPage(a,true)
            })
        }else a._tweetFeedConfig.paging.mode=="endless-scroll"?a._tweetFeedElement.bind("scroll",function(){
        !isLoading(a)&&e(this)[0].scrollHeight-e(this).scrollTop()==e(this).outerHeight()&&nextPage(a,false)
        }):e(a._baseSelector+" .jta-tweet-list-controls-button-more").bind("click",function(){
        isLoading(a)||nextPage(a,false)
        })
    };

nextPage=function(a,b){
    doPage(a,b,Math.min(a._tweetFeedConfig.paging._offset+a._tweetFeedConfig.paging._limit,a._tweetsCache.length))
    };

prevPage= function(a,b){
    doPage(a,b,Math.max(0,a._tweetFeedConfig.paging._offset-a._tweetFeedConfig.paging._limit))
    };

doPage=function(a,b,c){
    a._tweetFeedConfig.paging._offset=c;
    a._tweetFeedConfig._clearBeforePopulate=b;
    populateTweetFeed(a)
    };

startAutorefresh=function(a){
    if(a._tweetFeedConfig.autorefresh.mode!="none"&&a._tweetFeedConfig.paging.mode!="prev-next"&&a._tweetFeedConfig.autorefresh.duration!=0&&(a._tweetFeedConfig.autorefresh.duration<0||(new Date).getTime()-a._tweetFeedConfig.autorefresh._startTime<= a._tweetFeedConfig.autorefresh.duration*1E3))window.setTimeout(function(){
        processAutorefresh(a)
        },a._tweetFeedConfig.autorefresh.interval*1E3)
    };

stopAutorefresh=function(a){
    a._tweetFeedConfig.autorefresh.duration=0
    };

processAutorefresh=function(a){
    if(a._tweetFeedConfig.autorefresh.duration!=0){
        getRateLimitedData(a,true,getFeedUrl(a,false),function(b,c){
            var d=(b.results||b).slice(0);
            d.reverse();
            e.each(d,function(f,g){
                isTweetInCache(g,c)||c.tweetFilter(g,c)&&c._autorefreshTweetsCache.unshift(g)
                });
            populateTweetFeed2(c)
            });
        startAutorefresh(a)
        }
    };

startTimestampRefresh=function(a){
    a.tweetTimestampDecorator&&typeof a._tweetFeedConfig.showTimestamp=="object"&&a._tweetFeedConfig.showTimestamp.refreshInterval>0&&window.setTimeout(function(){
        processTimestampRefresh(a)
        },a._tweetFeedConfig.showTimestamp.refreshInterval*1E3)
    };

processTimestampRefresh=function(a){
    e.each(a._tweetFeedElement.find(".jta-tweet-timestamp-link"),function(b,c){
        var d=e(c).attr("data-timestamp");
        e(c).html(a.tweetTimestampFormatter(d))
        });
    startTimestampRefresh(a)
    };
isTweetInCache=function(a,b){
    for(var c=b._tweetsCache.length,d=0;d<c;d++)if(a.id==b._tweetsCache[d].id)return true;return false
    };

showLoadingIndicator=function(a){
    if(a._tweetFeedElement&&a.loadingDecorator&&!a._loadingIndicatorElement){
        a._loadingIndicatorElement=e(a.loadingDecorator(a));
        a.loadingIndicatorVisualizer(a._tweetFeedElement,a._loadingIndicatorElement,a,null);
        a._tweetFeedElement.scrollTop(1E6)
        }
    };

hideLoadingIndicator=function(a,b){
    if(a._loadingIndicatorElement){
        a.loadingIndicatorVisualizer(null, a._loadingIndicatorElement,a,b);
        a._loadingIndicatorElement=null
        }else b&&b()
        };

isLoading=function(a){
    return a._loadingIndicatorElement!=null
    };

formatDate=function(a){
    return a.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i,"$1,$2$4$3")
    };

validateRange=function(a,b,c){
    if(a<b)a=b;
    if(a>c)a=c;
    return a
    };

showError=function(a,b){
    a.errorDecorator&&a._tweetFeedElement&&a._tweetFeedElement.append(a.errorDecorator(b,a))
    };

getPagedTweets=function(a,b){
    a._tweetFeedConfig._recLevel=0;
    getRecPagedTweets(a,a._tweetFeedConfig.paging._offset, a._tweetFeedConfig.paging._limit,b)
    };

getRecPagedTweets=function(a,b,c,d){
    ++a._tweetFeedConfig._recLevel;
    if(b+c<=a._tweetsCache.length||a._tweetFeedConfig._recLevel>3||a._tweetFeedConfig._noData){
        if(b+c>a._tweetsCache.length)c=Math.max(0,a._tweetsCache.length-b);
        for(var f=[],g=0;g<c;g++)f[g]=a._tweetsCache[b+g];
        d(f,a)
        }else{
        ++a._tweetFeedConfig._pageParam;
        getRateLimitedData(a,false,getFeedUrl(a,true),function(k,h){
            var j=k.results||k;
            if(j.length==0)h._tweetFeedConfig._noData=true;else e.each(j,function(l, i){
                if(i.id_str)i.id=i.id_str;
                if(i.in_reply_to_status_id_str)i.in_reply_to_status_id=i.in_reply_to_status_id_str;
                if(!h._tweetFeedConfig._maxId)h._tweetFeedConfig._maxId=i.id;
                h.tweetFilter(i,h)&&h._tweetsCache.push(i)
                });
            getRecPagedTweets(h,b,c,d)
            })
        }
    };

getRateLimitedData=function(a,b,c,d){
    getRateLimit(a,function(f){
        if(f&&f.remaining_hits<=0){
            a._stats.rateLimitPreventionCount++;
            hideLoadingIndicator(a,null)
            }else getData(a,b,c,d)
            })
    };

getData=function(a,b,c,d){
    a._stats.dataRequestCount++;
    if(a.onDataRequestHandler(a._stats, a)){
        b||showLoadingIndicator(a);
        e.getJSON(c,function(f){
            f.error?showError(a,f.error):d(f,a)
            })
        }else hideLoadingIndicator(a,null)
        };

getRateLimit=function(a,b){
    e.getJSON("http://api.twitter.com/1/account/rate_limit_status.json?callback=?",function(c){
        a._stats.rateLimit=c;
        a.onRateLimitDataHandler(a._stats,a);
        b(c)
        })
    }
})(jQuery);
