text: /*! jQuery UI - v1.11.4 - 2015-03-13
   * http://jqueryui.com
   * Copyright jQuery Foundation and other contributors; Licensed MIT */
  (function (t) {
      "function" == typeof define && define.amd ? define(["jquery", "./core", "./widget", "./position", "./menu"], t) : t(jQuery)
  })(function (t) {
      return t.widget("ui.autocomplete", {
          version: "1.11.4",
          defaultElement: "<input>",
          options: {
              appendTo: null,
              autoFocus: !1,
              delay: 300,
              minLength: 1,
              position: {my: "left top", at: "left bottom", collision: "none"},
              source: null,
              change: null,
              close: null,
              focus: null,
              open: null,
              response: null,
              search: null,
              select: null
          },
          requestIndex: 0,
          pending: 0,
          _create: function () {
              var e, i, s, n = this.element[0].nodeName.toLowerCase(), o = "textarea" === n, r = "input" === n;
              this.isMultiLine = o ? !0 : r ? !1 : this.element.prop("isContentEditable"), this.valueMethod = this.element[o || r ? "val" : "text"], this.isNewMenu = !0, this.element.addClass("ui-autocomplete-input").attr("autocomplete", "off"), this._on(this.element, {
                  keydown: function (n) {
                      if (this.element.prop("readOnly"))return e = !0, s = !0, i = !0, void 0;
                      e = !1, s = !1, i = !1;
                      var o = t.ui.keyCode;
                      switch (n.keyCode) {
                          case o.PAGE_UP:
                              e = !0, this._move("previousPage", n);
                              break;
                          case o.PAGE_DOWN:
                              e = !0, this._move("nextPage", n);
                              break;
                          case o.UP:
                              e = !0, this._keyEvent("previous", n);
                              break;
                          case o.DOWN:
                              e = !0, this._keyEvent("next", n);
                              break;
                          case o.ENTER:
                              this.menu.active && (e = !0, n.preventDefault(), this.menu.select(n));
                              break;
                          case o.TAB:
                              this.menu.active && this.menu.select(n);
                              break;
                          case o.ESCAPE:
                              this.menu.element.is(":visible") && (this.isMultiLine || this._value(this.term), this.close(n), n.preventDefault());
                              break;
                          default:
                              i = !0, this._searchTimeout(n)
                      }
                  }, keypress: function (s) {
                      if (e)return e = !1, (!this.isMultiLine || this.menu.element.is(":visible")) && s.preventDefault(), void 0;
                      if (!i) {
                          var n = t.ui.keyCode;
                          switch (s.keyCode) {
                              case n.PAGE_UP:
                                  this._move("previousPage", s);
                                  break;
                              case n.PAGE_DOWN:
                                  this._move("nextPage", s);
                                  break;
                              case n.UP:
                                  this._keyEvent("previous", s);
                                  break;
                              case n.DOWN:
                                  this._keyEvent("next", s)
                          }
                      }
                  }, input: function (t) {
                      return s ? (s = !1, t.preventDefault(), void 0) : (this._searchTimeout(t), void 0)
                  }, focus: function () {
                      this.selectedItem = null, this.previous = this._value()
                  }, blur: function (t) {
                      return this.cancelBlur ? (delete this.cancelBlur, void 0) : (clearTimeout(this.searching), this.close(t), this._change(t), void 0)
                  }
              }), this._initSource(), this.menu = t("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role: null}).hide().menu("instance"), this._on(this.menu.element, {
                  mousedown: function (e) {
                      e.preventDefault(), this.cancelBlur = !0, this._delay(function () {
                          delete this.cancelBlur
                      });
                      var i = this.menu.element[0];
                      t(e.target).closest(".ui-menu-item").length || this._delay(function () {
                          var e = this;
                          this.document.one("mousedown", function (s) {
                              s.target === e.element[0] || s.target === i || t.contains(i, s.target) || e.close()
                          })
                      })
                  }, menufocus: function (e, i) {
                      var s, n;
                      return this.isNewMenu && (this.isNewMenu = !1, e.originalEvent && /^mouse/.test(e.originalEvent.type)) ? (this.menu.blur(), this.document.one("mousemove", function () {
                          t(e.target).trigger(e.originalEvent)
                      }), void 0) : (n = i.item.data("ui-autocomplete-item"), !1 !== this._trigger("focus", e, {item: n}) && e.originalEvent && /^key/.test(e.originalEvent.type) && this._value(n.value), s = i.item.attr("aria-label") || n.value, s && t.trim(s).length && (this.liveRegion.children().hide(), t("<div>").text(s).appendTo(this.liveRegion)), void 0)
                  }, menuselect: function (t, e) {
                      var i = e.item.data("ui-autocomplete-item"), s = this.previous;
                      this.element[0] !== this.document[0].activeElement && (this.element.focus(), this.previous = s, this._delay(function () {
                          this.previous = s, this.selectedItem = i
                      })), !1 !== this._trigger("select", t, {item: i}) && this._value(i.value), this.term = this._value(), this.close(t), this.selectedItem = i
                  }
              }), this.liveRegion = t("<span>", {
                  role: "status",
                  "aria-live": "assertive",
                  "aria-relevant": "additions"
              }).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body), this._on(this.window, {
                  beforeunload: function () {
                      this.element.removeAttr("autocomplete")
                  }
              })
          },
          _destroy: function () {
              clearTimeout(this.searching), this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"), this.menu.element.remove(), this.liveRegion.remove()
          },
          _setOption: function (t, e) {
              this._super(t, e), "source" === t && this._initSource(), "appendTo" === t && this.menu.element.appendTo(this._appendTo()), "disabled" === t && e && this.xhr && this.xhr.abort()
          },
          _appendTo: function () {
              var e = this.options.appendTo;
              return e && (e = e.jquery || e.nodeType ? t(e) : this.document.find(e).eq(0)), e && e[0] || (e = this.element.closest(".ui-front")), e.length || (e = this.document[0].body), e
          },
          _initSource: function () {
              var e, i, s = this;
              t.isArray(this.options.source) ? (e = this.options.source, this.source = function (i, s) {
                  s(t.ui.autocomplete.filter(e, i.term))
              }) : "string" == typeof this.options.source ? (i = this.options.source, this.source = function (e, n) {
                  s.xhr && s.xhr.abort(), s.xhr = t.ajax({
                      url: i, data: e, dataType: "json", success: function (t) {
                          n(t)
                      }, error: function () {
                          n([])
                      }
                  })
              }) : this.source = this.options.source
          },
          _searchTimeout: function (t) {
              clearTimeout(this.searching), this.searching = this._delay(function () {
                  var e = this.term === this._value(), i = this.menu.element.is(":visible"), s = t.altKey || t.ctrlKey || t.metaKey || t.shiftKey;
                  (!e || e && !i && !s) && (this.selectedItem = null, this.search(null, t))
              }, this.options.delay)
          },
          search: function (t, e) {
              return t = null != t ? t : this._value(), this.term = this._value(), t.length < this.options.minLength ? this.close(e) : this._trigger("search", e) !== !1 ? this._search(t) : void 0
          },
          _search: function (t) {
              this.pending++, this.element.addClass("ui-autocomplete-loading"), this.cancelSearch = !1, this.source({term: t}, this._response())
          },
          _response: function () {
              var e = ++this.requestIndex;
              return t.proxy(function (t) {
                  e === this.requestIndex && this.__response(t), this.pending--, this.pending || this.element.removeClass("ui-autocomplete-loading")
              }, this)
          },
          __response: function (t) {
              t && (t = this._normalize(t)), this._trigger("response", null, {content: t}), !this.options.disabled && t && t.length && !this.cancelSearch ? (this._suggest(t), this._trigger("open")) : this._close()
          },
          close: function (t) {
              this.cancelSearch = !0, this._close(t)
          },
          _close: function (t) {
              this.menu.element.is(":visible") && (this.menu.element.hide(), this.menu.blur(), this.isNewMenu = !0, this._trigger("close", t))
          },
          _change: function (t) {
              this.previous !== this._value() && this._trigger("change", t, {item: this.selectedItem})
          },
          _normalize: function (e) {
              return e.length && e[0].label && e[0].value ? e : t.map(e, function (e) {
                  return "string" == typeof e ? {label: e, value: e} : t.extend({}, e, {
                      label: e.label || e.value,
                      value: e.value || e.label
                  })
              })
          },
          _suggest: function (e) {
              var i = this.menu.element.empty();
              this._renderMenu(i, e), this.isNewMenu = !0, this.menu.refresh(), i.show(), this._resizeMenu(), i.position(t.extend({of: this.element}, this.options.position)), this.options.autoFocus && this.menu.next()
          },
          _resizeMenu: function () {
              var t = this.menu.element;
              t.outerWidth(Math.max(t.width("").outerWidth() + 1, this.element.outerWidth()))
          },
          _renderMenu: function (e, i) {
              var s = this;
              t.each(i, function (t, i) {
                  s._renderItemData(e, i)
              })
          },
          _renderItemData: function (t, e) {
              return this._renderItem(t, e).data("ui-autocomplete-item", e)
          },
          _renderItem: function (e, i) {
              return t("<li>").text(i.label).appendTo(e)
          },
          _move: function (t, e) {
              return this.menu.element.is(":visible") ? this.menu.isFirstItem() && /^previous/.test(t) || this.menu.isLastItem() && /^next/.test(t) ? (this.isMultiLine || this._value(this.term), this.menu.blur(), void 0) : (this.menu[t](e), void 0) : (this.search(null, e), void 0)
          },
          widget: function () {
              return this.menu.element
          },
          _value: function () {
              return this.valueMethod.apply(this.element, arguments)
          },
          _keyEvent: function (t, e) {
              (!this.isMultiLine || this.menu.element.is(":visible")) && (this._move(t, e), e.preventDefault())
          }
      }), t.extend(t.ui.autocomplete, {
          escapeRegex: function (t) {
              return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
          }, filter: function (e, i) {
              var s = RegExp(t.ui.autocomplete.escapeRegex(i), "i");
              return t.grep(e, function (t) {
                  return s.test(t.label || t.value || t)
              })
          }
      }), t.widget("ui.autocomplete", t.ui.autocomplete, {
          options: {
              messages: {
                  noResults: "No search results.",
                  results: function (t) {
                      return t + (t > 1 ? " results are" : " result is") + " available, use up and down arrow keys to navigate."
                  }
              }
          }, __response: function (e) {
              var i;
              this._superApply(arguments), this.options.disabled || this.cancelSearch || (i = e && e.length ? this.options.messages.results(e.length) : this.options.messages.noResults, this.liveRegion.children().hide(), t("<div>").text(i).appendTo(this.liveRegion))
          }
      }), t.ui.autocomplete
  });