/*
* Imitweet Twitter Plugin v1.0.0
* imitweet@google.com
*/

/* Debugging (fixes console.log for IE) */
if (typeof console == "object") log = console.log;
else log = function() { };

/* Plugin */

(function($) {
    $.fn.jdTweets = function(options) {
        var jdPluginName = 'jdTweets';
        var obj;
        var loading;
        var defaults = {
            username: '',
            top: 10,
            loadingImage: null,
            showIcon: false,
            onTweetsGrabbed: function(){}
        }
        var opts = $.extend({}, defaults, options);
        
        
        log('[' + jdPluginName + '] Plugin Loading...');
        
        if(opts.loadingImage != null)
        {
            var loadingImg = new Image();
            loadingImg.src = opts.loadingImage;
            loading = '<span id="jdTweets-loading"><img src="' + opts.loadingImage +'" /></span>';
        }
        else
            loading = '<span id="jdTweets-loading">Loading Tweet' + (opts.top > 1 ? 's' : '') + '...</span>';

        return this.each(function() {
            if (opts.username != '') {
                obj = this;
                
                $(obj).html(loading);
                
                $.ajax({ dataType: 'jsonp',
                    url: 'http://twitter.com/statuses/user_timeline/' + opts.username + '.json',
                    callback: 'dostuff',
                    success: function(result) {
                        var i;
                        var tweet;
                        
                        if(opts.top > 1) //Create list
                        {
                            var list = $('<ul id="jdTweets-tweet-list"></ul>');
                            for (i = 0; i < opts.top; i++) {
                                tweet = parseTweetUrls(result[i].text);
                                tweet = parseTwitterUser(tweet);
                                $(list).append('<li><img src="' + result[i].user.profile_image_url + '" width="24" height="24" align="absmiddle" /><span class="jdTweets-tweet"><span class="jdTweets-tweet-text">' + tweet + '</span><span class="jdTweets-tweet-time">' + transformDate(result[i].created_at) + '</span></span></li>');
                            }
                            $(obj).html(list);
                        }
                        else if(opts.top == 1) //Individual tweet
                        {
                            tweet = parseTweetUrls(result[0].text);
                            $(obj).html('<span class="jdTweets-tweet"><span class="jdTweets-tweet-text">' + tweet + '<span class="jdTweets-tweet-time">' + result[0].created_at + '</span></span></span>');
                        }
                        
                        opts.onTweetsGrabbed.call(obj);
                    }
                });
            }
            else
                $(this).html('A default Twitter user name is required.<br />($(obj).wtTwitter({username:\'my name\'}))').attr('style', 'font-family:courier new;font-size:12px;');
        });

        function parseTweetUrls(tweet) {
            var regexp = /((ftp|http|https:[/][/]|(www.))(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
            var t = tweet.replace(regexp, '<a href="$1" target="_blank">$1</a>');
            if(t.indexOf('<a href="www') > -1)
                return t.replace('href="www', 'href="http://www');
            
            return t;
        }
        
        function parseTwitterUser(tweet) {
            var regexp = /(@([A-Za-z0-9_]+))/gi;
            var t = tweet.replace(regexp, '<a href="http://twitter.com/$1" target="_blank">$1</a>');
            t = t.replace('/@','/');
            
            return t;
        }
        
        function transformDate(time){
	        var date = new Date((time || "").replace(/-/g,"/").replace(/'+0000'/g," ")),
		        diff = (((new Date()).getTime() - date.getTime()) / 1000),
		        day_diff = Math.floor(diff / 86400);
            
	        if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
		        return;
        			
	        return day_diff == 0 && (
			        diff < 60 && "just now" ||
			        diff < 120 && "1 minute ago" ||
			        diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
			        diff < 7200 && "1 hour ago" ||
			        diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
		            day_diff == 1 && "Yesterday" ||
		            day_diff < 7 && day_diff + " days ago" ||
		            day_diff < 31 && Math.ceil( day_diff / 7 ) + " week(s) ago";
        }
    }
})(jQuery);
