(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]);
                    },
                    error: function(result) {
                        //result.status + ' ' + result.statusText;
                    }
                });
            });
        } catch (e) { }
    };
    /** defaults **/
    jQuery.fn.twitterMentions.defaults = {
        user: null,
        callback: null,                                             
        maximum: 10,
        avatar: false,
        ulClass: 'list_twiti clearfix',
        odd: true,
        oddClass: 'odd'
    };

    /** private methods **/
    var _build = function(object, element, opts) {
    var html = '<ul class="' + opts.ulClass + '">';
        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 + '">' + shortUrl + '</a>';
            }).replace(/@([a-zA-Z0-9_]+)/g, '@<a href="http://twitter.com/$1">$1</a>').replace(/(?:^|\s)#([^\s\.\+:!]+)/g, function(a, u) {
                return ' <a href="http://twitter.com/search?q=' + encodeURIComponent(u) + '">#' + u + '</a>';
            });
            html += '<li' + ((opts.odd && i % 2) ? ' class="' + opts.oddClass + '"' : '') + '>' + (opts.avatar ? '<div class="bc_img"><a href="http://twitter.com/' + user + '"><img width="48" height="48" src="' + current.profile_image_url + '"></a><span class="seta_right">&nbsp;</span></div>' : '') + '<div class="bc_txt_acao"><div class="bc_txt"><span>@' + user + '</span><p> ' + text + '</p></div></div></li>';
        }
        html += '</ul>';
        $(element).html(html);

    };


    var relative_time = function(time_value) {
        time_value  = time_value.toString().substring(0,time_value.indexOf('+'));
        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 'menos de 1 minuto atr&aacute;s';
        } else if (delta < 120) {
            return '1 minuto atr&aacute;s';
        } else if (delta < (60 * 60)) {
            return (parseInt(delta / 60)).toString() + ' minutos atr&aacute;s';
        } else if (delta < (120 * 60)) {
            return '1 hora atr&aacute;s';
        } else if (delta < (24 * 60 * 60)) {
            return '' + (parseInt(delta / 3600)).toString() + ' horas atr&aacute;s';
        } else if (delta < (48 * 60 * 60)) {
            return '1 dia atr&aacute;s';
        } else {
            return (parseInt(delta / 86400)).toString() + ' dias atr&aacute;s';
        }
    };

    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);


