(function ($) {
    var shareDialog,
        dialogOptions = {
            hideCallback: hideCallback,
            width: 280,
            offsetY: 17,
            offsetX: -40,
            hideDelay: 36e5
        }

    var hideCallback = function () {
        $(".dashboard-actions .explanation").hide();
    };

    var generatePopup = function($contents, trigger, doShowPopup) {
        // reset content
        $contents.empty();

        // load template
        $contents.append(AJS.template.load("share-content-popup").fill());

        // hide popup hooks
        var doHidePopup = function() {
            shareDialog.hide();
            return false;
        }

        $(document).keyup(function (e) {
            if (e.keyCode == 27) {
                doHidePopup();
                $(document).unbind("keyup", arguments.callee);
                return false;
            }
            return true;
        });

        $contents.find(".close-dialog").click(doHidePopup);

        $contents.find("form").submit(function() {

            var users = [];
            $contents.find(".users-to-share-with li").each(function(index, item) {
                users.push($(item).attr("data-username"))
            });

            if (users.length <= 0)
                return false;

            $("button,input,textarea", this).attr("disabled", "disabled");

            $contents.find(".progress-messages").text("Sending");
            var progressSpinner = Raphael.spinner($contents.find(".progress-messages-icon")[0], 7, "#666");
            $contents.find(".progress-messages-icon").css("left", "10px").css("position", "absolute");
            $contents.find(".progress-messages").css("padding-left", $contents.find(".progress-messages-icon").innerWidth() + 5);

            var users = [];
            $contents.find(".users-to-share-with li").each(function(index, item) {
                users.push($(item).attr("data-username"))
            });

            var request = {
                users: users,
                note: $contents.find("#note").val(),
                entityId: AJS.params.pageId
            };

            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: AJS.Confluence.getContextPath() + "/rest/share-page/latest/share",
                data: JSON.stringify(request),
                dataType: "text",
                success: function() {
                    // remove spinner
                    setTimeout(function() {
                        progressSpinner();

                        $contents.find(".progress-messages-icon").css("width", "17px");
                        $contents.find(".progress-messages-icon").css("height", "17px");
                        $contents.find(".progress-messages-icon").addClass("done");
                        $contents.find(".progress-messages").text("Sent");
                        setTimeout(function() {
                            doHidePopup();
                        }, 1000);
                    }, 500);
                }
            });

            return false;
        });

        var $input = $contents.find("#users");

        $input.bind("selected.autocomplete-user", function (e, data) {
            var item = AJS.template.load("share-content-popup-users").fill(data.content);

            $contents.find(".users-to-share-with").append(item);
            shareDialog.refresh();

            $contents.find(".button-panel input").removeAttr("disabled");

            $input.val("");
            e.preventDefault();
            return false;
        });

        $(document).bind("showLayer", function (e, type, dialog) {
            if (type=="inlineDialog" && dialog.popup == shareDialog) {
                dialog.popup.find("#users").focus();
            }
        });

        doShowPopup();
    }

    AJS.toInit(function ($) {
        shareDialog = AJS.InlineDialog($("#shareContentLink"), "shareContentPopup", generatePopup, dialogOptions);
    });
})(AJS.$);



