(function ($) {
    $.fn.twitterfeed = function (username, options) {
        var defaults = {
            limit: 10,
            header: false,
            tweeticon: true,
            tweetname: false,
            tweettime: true
        };
        var options = $.extend(defaults, options);
        return this.each(function (i, e) {
            var $e = $(e);
            if (!$e.hasClass('twitterFeed')) $e.addClass('twitterFeed');
            if (username == null) return false;
            var url = 'http://twitter.com/statuses/user_timeline/' + username + '.json';
            var params = {};
            params.count = options.limit;
            jQuery.ajax({
                url: url,
                data: params,
                dataType: 'jsonp',
                success: function (o) {
                    _callback(e, o, options);
                }
            });
        });
    };
    var _callback = function (e, feeds, options) {
        if (!feeds) {
            return false;
        }
        var html = '';
        var row = 'odd';
        if (options.header) var name = feeds[0].user.name;
        var screenname = feeds[0].user.screen_name;
        var icon = feeds[0].user.profile_image_url;
        /*
		var link = '<a href="http://twitter.com/' + screenname + '/" title="Visit ' + name + ' on Twitter">';
        html += '<div class="twitterHeader">' + link + '<img src="' + icon + '" alt="' + name + '" /></a>' + '<span>' + link + name + '</a></span>' + '</div>';
        html += '<div class="twitterBody">' + '<ul>'; */
        for (var i = 0; i < feeds.length; i++) {
            var tweet = feeds[i];
            var link = '<a href="http://twitter.com/' + tweet.user.screen_name + '/" title="Visit ' + tweet.user.name + ' on Twitter">';
            html += '<li class="twitterRow ' + row + '">';
            if (options.tweeticon) {
                var icon = tweet.user.profile_image_url;
                html += link + '<img src="' + icon + '" alt="' + name + '" /></a>';
            }
            if (options.tweetname) {
                var name = tweet.user.name;
                html += '<div class="tweetName">' + link + name + '</a></div>'
            }
            if (options.tweettime) {
                var lapsedTime = getLapsedTime(tweet.created_at);
                html += '<div class="tweetTime">' + lapsedTime + '</div>'
            }
            var text = tweet.text.replace(/(https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/, function (u) {
                var shortUrl = (u.length > 30) ? u.substr(0, 30) + '...' : u;
                return '<a href="' + u + '" title="Click to view this link">' + shortUrl + '</a>';
            }).replace(/@([a-zA-Z0-9_]+)/g, '@<a href="http://twitter.com/$1" title="Click to view $1 on Twitter">$1</a>').replace(/(?:^|\s)#([^\s\.\+:!]+)/g, function (a, u) {
                return ' <a href="http://twitter.com/search?q=' + encodeURIComponent(u) + '" title="Click to view this on Twitter">#' + u + '</a>';
            });
            html += '<p>' + text + '</p>'
            html += '</li>';
            if (row == 'odd') {
                row = 'even';
            } else {
                row = 'odd';
            }
        }
        html += '</ul>' + '</div>'
        $(e).html(html);
    };

    function getLapsedTime(strDate) {
        strDate = Date.parse(strDate.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i, '$1,$2$4$3'));
        var todayDate = new Date();
        var tweetDate = new Date(strDate)
        var lapsedTime = Math.round((todayDate.getTime() - tweetDate.getTime()) / 1000)
        if (lapsedTime < 60) {
            return '< 1m';
        } else if (lapsedTime < (60 * 60)) {
            return Math.round(lapsedTime / 60) + 'm';
        } else if (lapsedTime < (24 * 60 * 60)) {
            return Math.round(lapsedTime / 3600) + 'h';
        } else if (lapsedTime < (7 * 24 * 60 * 60)) {
            return Math.round(lapsedTime / 86400) + 'd';
        } else {
            return Math.round(lapsedTime / 604800) + 'w';
        }
    };
})(jQuery);
