/**
 * Pepsi Tweets jquery plugin
 */
(function($) {
    $.fn.pepsitweets = function(o){
        var s = {
          avatar_size: 30,                      // [integer]  height and width of avatar if displayed (48px max)
          intro_text: null,                       // [string]   do you want text BEFORE your your tweets?
          outro_text: null,                       // [string]   do you want text AFTER your tweets?
          loading_text: '',
          users: [],
          onComplete:null,
          hashtag:'pnid',
          since:'',
          rpp:4,
          query:'',
          interval:null,
          timeout:null
        };
        
    
        function relative_time(time_value) {
          var parsed_date = Date.parse(time_value);
          var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
          var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
          if(delta < 60) {
          return 'less than a minute ago';
          } else if(delta < 120) {
          return 'about a minute ago';
          } else if(delta < (45*60)) {
          return (parseInt(delta / 60)).toString() + ' minutes ago';
          } else if(delta < (90*60)) {
          return 'about an hour ago';
          } else if(delta < (24*60*60)) {
          return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
          } else if(delta < (48*60*60)) {
          return '1 day ago';
          } else {
          return (parseInt(delta / 86400)).toString() + ' days ago';
          }
        }
        
        function get_tweets(elem,base,query) {
            
          elem = $(elem);
          var intro = '<p class="tweet_intro">'+s.intro_text+'</p>'
          var outro = '<p class="tweet_outro">'+s.outro_text+'</p>'
          var loading = $('<p class="loading">'+s.loading_text+'</p>');
          
           var usernames = {};
           for (i in s.users) {
                u = s.users[i];
                if (u.screenname) usernames[u.screenname.toLowerCase()] = u;
            }
            
          if (s.loading_text) elem.append(loading);
          var url = base+query+'&callback=?';
            
            $.getJSON(url,  function(data){   

                var list = $('<ul class="tweet_list"></ul>');
                if (s.loading_text) loading.remove();
                list.html('');
                if (s.intro_text) list.before(intro);
                $.each(data.results, function(i,item){
                    // item.text = item.text.replace(new RegExp('#'+s.hashtag+':?\s*','gi'), '');
                     item.text = item.text.replace(/(\w+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&#\?\/.=]+)/gi, '<a target="_blank" href="$1">$1</a>');
                     item.text = item.text.replace(/[\@]+([A-Za-z0-9-_]+)/gi, '<a href="http://twitter.com/$1">@$1</a>');
                     var loc = company = title = name = status = '';
                     var lcuser = item.from_user.toLowerCase();
                     if(usernames[lcuser]) {
                        if (usernames[lcuser].location) loc = usernames[lcuser].location; 
                        if (usernames[lcuser].title) title = usernames[lcuser].title; 
                        if (usernames[lcuser].name) name = usernames[lcuser].name; 
                        if (usernames[lcuser].company) company = usernames[lcuser].company; 
                        if (usernames[lcuser].status) status = usernames[lcuser].status;
                     } 
					 
					 var li_class='usertype_none';
                     if (status) li_class='usertype_'+status;
                     
                     var append = '<li class="'+li_class+'">'
                        + (s.avatar_size ? '<div class="div_avatar"><a class="tweet_avatar" href="http://twitter.com/'+ item.from_user+'"><img src="'+item.profile_image_url+'" height="'+s.avatar_size+'" width="'+s.avatar_size+'" alt="'+item.from_user+'\'s avatar" border="0"/></a></div>' : '')
                        + '<div class="div_tweet">'
                        + (status=='moderator'?'<span class="caption_moderator">Porter Novelli</span>':'')
                        + '<span class="tweet_text">' + item.text + '</span><span class="tweet_info">'
                        + ' <span class="tweet_date"><a target="_blank" href="http://twitter.com/'+item.from_user+'/statuses/'+item.id+'" title="view tweet on twitter">'+relative_time(item.created_at)+'</a></span>'
                        + ' from <span class="tweet_user"><a target="_blank" href="http://twitter.com/'+item.from_user+'">'+(name?name:item.from_user)+'</a></span>'
                        + (loc?'<span class="tweet_loc"><br /> <span class="tweet_title">'+(title?title+', ':'')+ '</span> <span class="tweet_company">'+company+'</span> <span class="tweet_location">'+loc+'</span></span>':'')
                        + '</span></div><div class="clear"></div></li>';
                      list.append(append);
                    });
                
                $('.tweet_list li:odd').addClass('tweet_even');
                $('.tweet_list li:even').addClass('tweet_odd');
                $('.tweet_list li:first').addClass('tweet_first');
                $('.tweet_list li:last').addClass('tweet_last');
                if (s.outro_text) list.after(outro);
                list.fadeIn('fast');
                var pagination = $('<div class="tweet_pagination"></div>');
                $('<span class="page_number">Page '+data.page+'</span>').appendTo(pagination);
                if (data.page > 1) {
                    var a = $('<a href="javascript:void(0)" class="page">&laquo; previous</a>').appendTo(pagination);
                    a.click(function(){
                        elem.fadeOut('fast',    
                            function() {   
                                $(window).scrollTop(0);
                                if (s.loading_text) { elem.html(''); elem.show() }
                                if (s.timeout) clearTimeout(s.timeout);
                                get_tweets(elem,base,query.replace(/page=\d+/,'page='+(data.page-1)));
                            }
                        );
                    });
                }
                if (data.next_page) {
                    var a = $('<a href="javascript:void(0)" class="page">next &raquo;</a>').appendTo(pagination);
                    a.click(function(){
                        elem.fadeOut('fast',
                            function() {
                              $(window).scrollTop(0);
                              if (s.loading_text) { elem.html(''); elem.show() }
                              if (s.timeout) clearTimeout(s.timeout);
                              get_tweets(elem,base,data.next_page);
                            }
                        );
                    });
                }
                
                elem.html(list.html());
                elem.append(pagination);
                elem.fadeIn('fast');
                if (s.interval) {
                    s.timeout = setTimeout(function(){get_tweets(elem,base,query)},s.interval);
                }
                if (s.onComplete) s.onComplete();
            }); // getJson
        };
        
        if(o) $.extend(s, o);
        var base = 'http://search.twitter.com/search.json';
        var query ='?q=%23'+encodeURIComponent(s.hashtag)+'&rpp='+s.rpp+'&since='+s.since+'&'+s.query;
        return this.each(function(i,elem) {
             $(elem).show('fast');
            get_tweets(elem,base,query)
        } );
    }
})(jQuery);



/**
 * Set up the page
 */
function loadTweets() {

    //pahhs93H95yp2BbgzqgmGag
    GSpreadsheet.load("p1ZJ6ezYtsZvyIkLYvvHiCA", {}, function(gs) {
        //$.dump(gs.data);
        var users = [];
        var moderators = [];
        var moderators_byscreenname = [];
        for (i in gs.data) {
            users[users.length] = gs.data[i];
        }
        
        /* Set up the tweet board */
        $('#tweets').pepsitweets({
                'users':users,
                'interval':10000
        }).html('<div class="loading"><img src="indicator_black.gif" alt="" width="32" height="32" border="0"><p>Pulling tweets from Twitter.com. Hit refresh if messages do not appear.</p></div>');
     
      
       
    });
}


