docs: function open(opts, callback) {
          var that = void 0;
          jQuery(document.body).append(getContent.call(this, opts.id, opts));
  
          this.activeModal = jQuery("#" + opts.id);
          // 파트수집
          this.$ = {
            root: this.activeModal,
            header: this.activeModal.find('[data-modal-els="header"]'),
            body: this.activeModal.find('[data-modal-els="body"]')
          };
  
          if (opts.iframe) {
            this.$["iframe-wrap"] = this.activeModal.find('[data-modal-els="iframe-wrap"]');
            this.$["iframe"] = this.activeModal.find('[data-modal-els="iframe"]');
            this.$["iframe-form"] = this.activeModal.find('[data-modal-els="iframe-form"]');
            this.$["iframe-loading"] = this.activeModal.find('[data-modal-els="iframe-loading"]');
          } else {
            this.$["body-frame"] = this.activeModal.find('[data-modal-els="body-frame"]');
          }
  
          //- position 정렬
          this.align();
  
          that = {
            self: this,
            id: opts.id,
            theme: opts.theme,
            width: opts.width,
            height: opts.height,
            state: "open",
            $: this.$
          };
  
          if (opts.iframe) {
            this.$["iframe-wrap"].css({ height: opts.height });
            this.$["iframe"].css({ height: opts.height });
  
            // iframe content load
            this.$["iframe-form"].attr({ method: opts.iframe.method });
            this.$["iframe-form"].attr({ target: opts.id + "-frame" });
            this.$["iframe-form"].attr({ action: opts.iframe.url });
            this.$["iframe"].on("load", function () {
              that.state = "load";
              if (opts.iframeLoadingMsg) {
                this.$["iframe-loading"].hide();
              }
              onStateChanged.call(this, opts, that);
            }.bind(this));
            if (!opts.iframeLoadingMsg) {
              this.$["iframe"].show();
            }
            this.$["iframe-form"].submit();
          }
  
          if (callback) callback.call(that, that);
  
          if (!this.watingModal) {
            onStateChanged.call(this, opts, that);
          }
  
          // bind key event
          if (opts.closeToEsc) {
            jQuery(window).bind("keydown.ax-modal", function (e) {
              onkeyup.call(this, e || window.event);
            }.bind(this));
          }
  
          jQuery(window).bind("resize.ax-modal", function (e) {
            this.align(null, e || window.event);
          }.bind(this));
  
          this.$.header.off(ENM["mousedown"]).off("dragstart").on(ENM["mousedown"], function (e) {
            /// 이벤트 필터링 추가 : 버튼엘리먼트로 부터 발생된 이벤트이면 moveModal 시작하지 않도록 필터링
            var isButton = U.findParentNode(e.target, function (_target) {
              if (_target.getAttribute("data-modal-header-btn")) {
                return true;
              }
            });
  
            if (!opts.isFullScreen && !isButton && opts.disableDrag != true) {
              self.mousePosition = getMousePosition(e);
              moveModal.on.call(self);
            }
            if (isButton) {
              btnOnClick.call(self, e || window.event, opts);
            }
          }).on("dragstart", function (e) {
            U.stopEvent(e.originalEvent);
            return false;
          });
  
          this.activeModal.off(ENM["mousedown"]).off("dragstart").on(ENM["mousedown"], "[data-ax5modal-resizer]", function (e) {
            if (opts.disableDrag || opts.isFullScreen) return false;
            self.mousePosition = getMousePosition(e);
            resizeModal.on.call(self, this.getAttribute("data-ax5modal-resizer"));
          }).on("dragstart", function (e) {
            U.stopEvent(e.originalEvent);
            return false;
          });
        }