/*
 * jQuery plugin for tweets
 *
 * @author Petter Svensson-Silfver
 * @date 2010-11-11
 */

(function() {
    $.fn.tweets = function(options) {
        var
        defaults = {
            user: 'mobiento',
            url: 'http://www.twitter.com/',
            urlJSON: 'http://api.twitter.com/statuses/user_timeline/'
        },
        settings = $.extend({}, defaults, options);

        if (!this) return false;

        this.each(function() {
            var $this = $(this);
            var callURL = settings.urlJSON + settings.user + '.json?count=5&callback=?'

            $.ajaxSetup({
                cache: true
            });
            $.getJSON(callURL,function(data) {
                $.each(data, function(i, item) {
                    var status = item.text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
                        return '<a href="'+url+'">'+url+'</a>';
                    }).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
                        return  reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>';
                    });
                    var htmlStr = '';
                    htmlStr += '<li class="clearfix">';
                    htmlStr += '<div class="grid_7 mobile_stretch_2">';
                    htmlStr += '<p>';
                    htmlStr += status;
                    htmlStr += '</p>';
                    htmlStr += '</div>';
                    htmlStr += '<div class="grid_2 mobile_stretch_7">';
                    htmlStr += '<p class="type_right">';
                    htmlStr += '<a href="http://twitter.com/' + settings.user + '/statuses/' + item.id + '">' + relativeTime(item.created_at) + '</a>';
                    htmlStr += '</p>';
                    htmlStr += '</div>';
                    htmlStr += '</li>';
                    $this.append(htmlStr)
                //$this.append(relativeTime(item.created_at) + ':' +  status)
                });
            });
        });

        return this;
    };
})(jQuery);

function relativeTime(time_value) {
    var values = time_value.split(" ");
    time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
    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);
    delta = delta + (relative_to.getTimezoneOffset() * 60);

    if (delta < 60) {
        return 'less than a minute ago';
    } else if(delta < 120) {
        return 'about a minute ago';
    } else if(delta < (60*60)) {
        return (parseInt(delta / 60)).toString() + ' minutes ago';
    } else if(delta < (120*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';
    }
}
