﻿/**
* TwitterMentions
* jQuery Plugin to Display Twitter Mentions
* http://www.ctrl-zetta.com/#code
* http://www.infectedfx.net/
*
* Copyright (c) 2009 zetta & infectedfx
*
* Released under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
*
* Since  : 0.1 - 10/07/2009
*/
(function(jQuery) {
    /** public methods **/

    jQuery.fn.twitterMentions = function(user, options) {
        try {
            var 
      opts = jQuery.extend({}, jQuery.fn.twitterMentions.defaults, options),
      c = jQuery.isFunction(opts.callback) ? opts.callback : _build,
      url = 'http://search.twitter.com/search.json'
            params = { q: _query(user), page: opts.page, rpp: opts.maximum };

            return this.each(function(i, e) {
                jQuery.ajax({
                    url: url,
                    data: params,
                    dataType: 'jsonp',
                    success: function(o) {
                        c.apply(this, [(o.results) ? o.results : o, e, opts]);
                    }
                });
            });
        } catch (e) { }
    };
    /** defaults **/
    jQuery.fn.twitterMentions.defaults = {
        user: null,
        callback: null,
        page: 1,
        maximum: 10,
        avatar: true,
        ulClass: 'twitter-mentions',
        odd: true,
        oddClass: 'odd'
    };

    /** private methods **/
    var _build = function(object, element, opts) {
        var html = '';
        for (var i = 0; i < object.length; i++) {
            current = object[i];
            user = current.from_user;
            text = current.text.replace(/(https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/, function(u) {
                var shortUrl = (u.length > 30) ? u.substr(0, 30) + '...' : u;
                return '<a href="' + u + '" class="tweet-url web" rel="nofollow" target="_blank">' + shortUrl + '</a>';
            }).replace(/@([a-zA-Z0-9_]+)/g, '@<a href="http://twitter.com/$1" class="tweet-url web" rel="nofollow" target="_blank">$1</a>').replace(/(?:^|\s)#([^\s\.\+:!]+)/g, function(a, u) {
            return ' <a href="http://twitter.com/search?q=' + encodeURIComponent(u) + '" class="tweet-url web" rel="nofollow" target="_blank">#' + u + '</a>';
            });
            time = current.created_at;
            function timeago(a) {
                nowdate = new Date();
                twitterdate = new Date(a);
                var diffdate = nowdate - twitterdate;
                var t = 1000,
        		minute = t * 60,
        		hour = minute * 60,
        		day = hour * 24,
        		week = day * 7;

                if (isNaN(diffdate) || diffdate < 0) {
                    return ""
                }
                if (diffdate < t * 7) {
                    return "right now"
                }
                if (diffdate < minute) {
                    return Math.floor(diffdate / t) + " seconds ago"
                }
                if (diffdate < minute * 2) {
                    return "about 1 minute ago"
                }
                if (diffdate < hour) {
                    return Math.floor(diffdate / minute) + " minutes ago"
                }
                if (diffdate < hour * 2) {
                    return "about 1 hour ago"
                }
                if (diffdate < day) {
                    return Math.floor(diffdate / hour) + " hours ago"
                }
                if (diffdate > day && diffdate < day * 2) {
                    return "yesterday"
                }
                if (diffdate < day * 365) {
                    return Math.floor(diffdate / day) + " days ago"
                } else {
                    return "over a year ago"
                }
            };

            html += '<article class="tweet">' + (opts.avatar ? '<a href="http://twitter.com/' + user + '" class="tweet-url web" rel="nofollow" target="_blank"><img src="' + current.profile_image_url + '"></a>' : '') + '<div class="tweettext"><p><strong><a href="http://twitter.com/' + user + '" class="tweet-url web" rel="nofollow" target="_blank">' + user + '</a></strong> ' + text + '</p><p class="pub_date"><a href="#" class="tweet-url web" rel="nofollow" target="_blank"><span></span> ' + timeago(time) + '</a></p></div><div class="clearfix"></div></article>';
        }
        $(element).html(html);
    };

    var _query = function(q) {
        if (typeof q == 'string')
            return '@' + q;
        else if (typeof q == 'object')
            return '@' + q.join(' OR @');
        throw 'data type not supported';
    }
})(jQuery);
