﻿var _proTweets = {
        apt : [] ,
        page: 0,
        cpage: 1,
        pto: null,
        numberToShow : 10,
        end: false,
        scroll : false
    };
(function ($) {
    $.fn.proTweets = function (options) {
        $.ajaxSetup({ cache: false });
        var defaults = {
            tweets: 5,
            before: "<li>",
            after: "</li>",
            reset: false,
            twitterUser: null,
            append: false,
            page:1,
            scroll:true,
            paneHeight:500
            }

        var options = $.extend(defaults, options);
        var el = this;
        if(options.scroll)
           {
               // $(el).height(options.paneHeight); 
           /*$(el).jScrollPane({scrollbarWidth:15,dragMinHeight:37,dragMaxHeight:37 });*/ 
           }
        function _init(){
            var tweetContainer = $(this).find('ul.tweetsList');
            var _ul = $('<ul class="tweetsList" />');
            if(tweetContainer.length==0)
            {
                tweetContainer = _ul;
                $(el).append(tweetContainer);
            }
            $(el).append(_ul);
            _ul.append('<li class="loadMoreTweets"><div class="ajaxLoader left"></div></li>');
            var url = '/services/getJSON.aspx?op=getProTweets';
            //if(!window.location.href.match('http://www.nflplayers.com'))
                //url = 'http://www.nflplayers.com/services/getJSON.aspx?op=getProTweets&callback=?';
            $.getJSON(url, function (data) {
                try{
                    if(data.error.length >0)
                    {
                        _ul.find('li').html('<h2>Feed currently unavailable.  Please try again later.</h2>');
                        return;
                    }
                }
                catch(er){
	               _proTweets.apt=data;
	               populate();
                   $(el).find('.loadMoreTweets').remove();
                   if(options.scroll)
                   {
                        //scroll detection here
                        $(window).scroll(function(){
                            if(!_proTweets.end){
                                if  (($(window).scrollTop()) > ($(document).height()*.8) - $(window).height() ){
                                    $('#loadMoreTweets').html('<div class="ajaxLoader"></div>');
                                    if(_proTweets.to)
                                        clearTimeout(_proTweets.to);
                                        
                                    if(tweetContainer.find('li.loadMoreTweets').length==0)
                                        tweetContainer.append('<li class="loadMoreTweets"><div class="ajaxLoader left"></div></li>');
                                    _proTweets.to = setTimeout(function(){populate();},500);
                                }
                            }
                            else                            
                                $(el).find('.loadMoreTweets').remove();
                        });
                   }
                 }
          	});
        }
        function _initWithUser() {
            options.page = 1;
            _proTweets.cpage = options.page;
            _getUserTweets();
        }
        function _getUserTweets()
        { 
            var user = options.twitterUser;
            var count = options.tweets;
            var page = _proTweets.cpage;
            var url = "http://twitter.com/statuses/user_timeline.json?screen_name=" +
            user + "&count=" +
            count + "&page=" +
            page + "&callback=?";
            var tweetContainer = $(this).find('ul.tweetsList');
            var ul = $('<ul class="tweetsList" />');
            if(tweetContainer.length==0)
            {
                tweetContainer = ul;
                $(el).append(tweetContainer);
            }
            if(tweetContainer.find('li.loadMoreTweets').length==0)
                tweetContainer.append('<li class="loadMoreTweets"><div class="ajaxLoader left"></div></li>');
            $.getJSON(url, function (data) {
                for (var x = 0; x < data.length; x++) {
                    renderOut(data[x]);
                }
                if(options.scroll)                   
                   { /*$(el).jScrollPane({scrollbarWidth:15,dragMinHeight:37,dragMaxHeight:37 });*/ }
                tweetContainer.renderTweets();
                tweetContainer.find('.loadMoreTweets').remove();
            });
        }
        function parseTwitterDate(text) {
            var newtext = text.replace(/(\+\S+) (.*)/, '$2 $1');
            var date = new Date(Date.parse(newtext)).toLocaleDateString();
            var time = new Date(Date.parse(newtext)).toLocaleTimeString();
            return date +' • ' + time;
        }
        function populate(){
            var obj = $(el);
            var cursor = _proTweets.numberToShow * _proTweets.page;
            for (var i = cursor; i < cursor + _proTweets.numberToShow; i++)
            {
                renderOut(_proTweets.apt[i]);                
                if(i==_proTweets.apt.length - 1)
                    _proTweets.end = true;

            }
            obj.renderTweets();
            obj.find('.loadMoreTweets').remove();
            _proTweets.page++;
            if(options.scroll)                   
               { /*$(el).jScrollPane({scrollbarWidth:15,dragMinHeight:37,dragMaxHeight:37 });*/ }
         }
         function renderOut(data)
         {
            var tweet = data;
            if(tweet && tweet.text !== undefined) 
            {
                var _li = $('<li />');
                var _a = $('<a target="_blank" class="left" ></a>');
                _a.attr('href','http://www.twitter.com/'+ tweet.user.screen_name);
                var _th = $('<img class="tweetImg" />');
                var _txt = $('<div class="tweetText"></div>');
                var _clr = $('<div class="clear"></div>');
                var _meta = $('<div class="tweetMeta" />');
                _txt.html('<div class="tweet">'+tweet.text+'</div>');
                _meta.html(tweet.user.name);
                var _date = parseTwitterDate(tweet.created_at);
                _meta.append('<span class="right">- '+ _date +'</span>');
                _txt.append(_meta);
                _th.attr('src', tweet.user.profile_image_url);
                _a.append(_th);
                _li.append(_a);
                _li.append(_txt);
                _li.append(_clr);
                $(el).find('ul.tweetsList').append(_li);
            }
        }
         if(options.reset)
         {
             _proTweets.apt = [];
             _proTweets.page = 0;
             _proTweets.to = null;
             _proTweets.end= false;
             $(el).html('');
         }
         if(options.twitterUser== null)
         {
            { /*$(el).jScrollPane({scrollbarWidth:15,dragMinHeight:37,dragMaxHeight:37 });*/ }
            _init();
         }
         else
         {
            { /*$(el).jScrollPane({scrollbarWidth:15,dragMinHeight:37,dragMaxHeight:37 });*/ }
            _initWithUser();
         }
        return this;
    }
})(jQuery);

(function ($) {
    $.fn.renderTweets = function (options) {
        var defaults = {
            domain: 'www.nflplayers.com'
            }

        var options = $.extend(defaults, options);
        var el = this;
        function _init(){
            var re =  new RegExp(/\bhttp:\/\/[\S]+/g);
            var user = new RegExp(/@([a-zA-Z0-9-_]+)/g);
            el.find('.tweetText').find('.tweet').each(function(){
            var t = $(this);
            t.html(t.text().replace(re, "<a href=\"$&\" target=_blank>$&</a>"));
            t.html(t.html().replace(user, "@<a href=\"http://twitter.com/$1\" target=_blank>$1</a>"));
            });
        }
         _init();
        return this;
    }
})(jQuery);

