﻿(function ($, undefined) {
    "use strict";

    $.widget("ui.TabBouncer", {
        options: {
            onClickSelector: "",
            effect: "slide",
            effectOptions: { direction: "up", easing: "easeInOutBack" }
        },

        _create: function _create() {
            var self = this;
            var element = self.element;
            var options = self.options;

            element.addClass("tabBouncer");

            element.hide();

            element.prepend("<div class='close'></div>");

            var done = options.doneArea = $("<div class='tabBouncerDoneArea'/>");
            element.after(done);

            $(document).bind("click", { self: self }, self._click);

            $(document).bind("Saving", function () {
                $(options.onClickSelector).show();
                element.hide();
            });

            var offset = $(options.onClickSelector).offset();
            element.css(offset);
            done.css(offset);
        },

        _click: function _click(event) {
            var self = event.data.self;
            var element = self.element;
            var options = self.options;

            var target = $(event.target);

            if (target.is(options.onClickSelector) || target.parents(options.onClickSelector).length) {
                var clickArea = target.is(options.onClickSelector) ? target : target.parents(options.onClickSelector);

                var clickData = clickArea.data("subContentSelector");

                self.open();
            } else if (target.is(".close") || (!(target.is(".tabBouncer") || target.parents(".tabBouncer").length))) {
                //self.close();
            }
        },

        close: function close(callback) {
            var self = this;
            var element = self.element;
            var options = self.options;

            if (!element.is(":hidden")) {
                element.hide(options.effect, options.effectOptions, callback);
            }
        },

        open: function open(callback) {
            var self = this;
            var element = self.element;
            var options = self.options;

            if (element.is(":hidden") && !element.is(":animated")) {
                $(options.onClickSelector).hide(options.effect, options.effectOptions, function () {
                    if (!element.is(":animated")) {
                        element.show(options.effect, options.effectOptions, callback);
                    }
                });
            }
        },

        done: function done(callback) {
            var self = this;
            var element = self.element;
            var options = self.options;

            self.close(function () {
                options.doneArea.show(options.effect, options.effectOptions, callback);
            });
        }
    });
})($);
