(function($) {
    $.fn.addFriendButton = function (params) {
        params = $.extend({
            idprefix: "addfriend_",
            onloadhandler: function (message) {},
            onerrormessage: function (message) {}
        }, params);

        return this.each(function() {
            var $_this = $(this);
            var $_container = $_this.parents().filter("div.item");

            $_this.click(function () {
                $_container.addClass("comment_loader");

                var elems = $("*", $_container).css({ visibility: "hidden" });
                var person = $_this.attr("id").split(params.idprefix)[1];

                $.ajax({
                    url: "/services/rest/",
                    type: "POST",
                    dataType: "json",
                    data: {
                        method: "people.addFriend",
                        rtype: "json",
                        csrfmiddlewaretoken: CSRF_TOKEN,
                        friend_id: person
                    },
                    error: function () {
                        $_container.removeClass("comment_loader");
                        elems.css({ visibility: "visible" });
                        params.onerrormessage(gettext("Something went wrong. Please try again later."));
                    },
                    success: function (rsp) {
                        $_container.removeClass("comment_loader");
                        elems.css({ visibility: "visible" });
                        if (rsp && rsp.success) {
                            $_this.remove();
                            params.onloadhandler(rsp.success);
                        } else if (rsp && rsp.error){
                            params.onerrormessage(rsp.error);
                        } else {
                            params.onerrormessage(gettext("Something went wrong. Please try again later."));
                        }
                    }
                });

                return false;
            });

        });
    };
})(jQuery);
