﻿(function (jQuery) {

    jQuery.fn.darkbox = function (options) {
        var command;
        if (typeof options == "string") {
            command = options;

            switch (command) {
                case 'close':
                    close();
                    return;
                    break;
            }
        }
        else {
            var defaultSettings = {
                width: 300,
                height: 300,
                modal: true,
                closeText: null,
                closeOnClick: true,
                boxClass: null
            };
            settings = jQuery.extend(jQuery.darkboxSettings != undefined ? jQuery.darkboxSettings : defaultSettings, options);
        }
        function getHeight() {
            if (jQuery.browser.msie && jQuery.browser.version < 7) {
                var scrollHeight = Math.max(
					document.documentElement.scrollHeight,
					document.body.scrollHeight
				);
                var offsetHeight = Math.max(
					document.documentElement.offsetHeight,
					document.body.offsetHeight
				);

                if (scrollHeight < offsetHeight) {
                    return jQuery(window).height() + 'px';
                } else {
                    return scrollHeight + 'px';
                }
            } else {
                return jQuery(document).height() + 'px';
            }
        }

        function close() {
            var jQuerypopup = jQuery(".darkbox-container");
            var jQueryol = jQuery(".darkbox-overlay");
            if (jQuery.browser.msie) {
                jQuerypopup.remove();
                jQueryol.remove();
            } else {
                jQuerypopup.fadeOut("fast", function () {
                    jQueryol.fadeOut("fast", function () {
                        jQueryol.remove();
                        jQuerypopup.remove();
                    });
                });
            }

            if (settings.onClose != undefined)
                settings.onClose.call(window);
        }

        var jQueryol = jQuery("<div></div>");

        jQueryol.css("position", "fixed")
        .css("width", jQuery(document).width())
        .css("height", getHeight())
        .css("opacity", .5)
        .css("z-index", 100)
        .addClass("darkbox-overlay");
        var jQuerypopup = jQuery("<div></div>").addClass("darkbox-container");
        jQuerypopup.append(this);
        if (settings.closeText != null) {
            jQuerypopup.append("<p class='close-text'><a href='#'>" + settings.closeText + "</a></p>");
            jQuery(".close-text a", jQuerypopup).click(function () {
                close();
                return false;
            });
        }
        jQuerypopup.css("top", (jQuery(document).height() / 2 - 150) + "px")
            .css("display", "none");
        jQuerypopup.css({
            width: settings.width + "px",
            height: settings.height + "px",
            left: "50%",
            marginLeft: "-" + (settings.width / 2) + "px",
            position: "absolute",
            zIndex: 999
        });
        if (settings.boxClass != undefined)
            jQuerypopup.addClass(settings.boxClass);

        var jQueryclose = jQuery("<a></a>");
        jQueryclose.addClass("darkbox-close")
          .attr("href", "#")
          .click(function () {
              if (jQuery.browser.msie) {
                  jQuerypopup.remove();
                  jQueryol.remove();
              } else {
                  jQuerypopup.fadeOut(100, function () {
                      jQuerypopup.remove();
                      jQueryol.fadeOut(100, function () {
                          jQueryol.remove();
                      });
                  });
              }
              return false;
          });
        jQuerypopup.append(jQueryclose);
        if (settings.closeOnClick) {
            jQuery("a", jQueryol).click(close);
            jQueryol.click(close);
        }
        jQuery("body").prepend(jQuerypopup);
        jQuery("body").prepend(jQueryol);
        if (jQuery.browser.msie) {
            jQuerypopup.show();
        } else {
            jQuerypopup.fadeIn();
        }
        return this;
    }
})(jQuery);
