text: /* global ns */
  /**
   * @class
   * @alias H5PEditor.SelectorLegacy
   */
  ns.SelectorLegacy = function (libraries, selectedLibrary, changeLibraryDialog) {
    var self = this;
  
    H5P.EventDispatcher.call(this);
  
    var defaultLibraryParameterized = selectedLibrary ? selectedLibrary.replace('.', '-').toLowerCase() : undefined;
    this.currentLibrary = selectedLibrary;
  
    var options = '<option value="-">-</option>';
    for (var i = 0; i < libraries.length; i++) {
      var library = libraries[i];
      var libraryName = ns.libraryToString(library);
  
      // Never deny editing existing content
      // For new content deny old or restricted libs.
      if (selectedLibrary === libraryName ||
        ((library.restricted === undefined || !library.restricted) &&
        library.isOld !== true
        )
      ) {
        options += '<option value="' + libraryName + '"';
        if (libraryName === selectedLibrary || library.name === defaultLibraryParameterized) {
          options += ' selected="selected"';
        }
        if (library.tutorialUrl !== undefined) {
          options += ' data-tutorial-url="' + library.tutorialUrl + '"';
        }
        if (library.exampleUrl !== undefined) {
          options += ' data-example-url="' + library.exampleUrl + '"';
        }
        options += '>' + library.title + (library.isOld===true ? ' (deprecated)' : '') + '</option>';
      }
    }
  
    this.$selector = ns.$('' +
      '<select name="h5peditor-library" title="' + ns.t('core', 'selectLibrary') + '"' + '>' +
        options +
      '</select>'
    ).change(function () {
      // Use timeout to avoid bug in Chrome >44, when confirm is used inside change event.
      // Ref. https://code.google.com/p/chromium/issues/detail?id=525629
      setTimeout(function () {
        if (!self.currentLibrary) {
          self.currentLibrary = self.$selector.val();
          self.trigger('selected');
          return;
        }
  
        self.currentLibrary = self.$selector.val();
        changeLibraryDialog.show(self.$selector.offset().top);
      }, 0);
    });
  };
  
  /**
   * Reset selector to provided library
   *
   * @param {string} library
   * @param {Object} params
   * @param {Object} metadata
   */
  ns.SelectorLegacy.prototype.resetSelection = function (library, params, metadata) {
    this.$selector.val(library);
    this.currentParams = params;
    this.currentMetadata = metadata;
    this.currentLibrary = library;
  };
  
  /**
   * Get currently selected library.
   *
   * @returns {string}
   */
  ns.SelectorLegacy.prototype.getSelectedLibrary = function (next) {
    var that = this;
    var $option = this.$selector.find(':selected');
    next({
      uberName: that.currentLibrary,
      tutorialUrl: $option.data('tutorial-url'),
      exampleUrl: $option.data('example-url')
    });
  };
  
  /**
   * Load new params into legacy selector
   *
   * @returns {undefined}
   */
  ns.SelectorLegacy.prototype.getParams = function () {
    return this.currentParams;
  };
  
  /**
   * Load new metadata into legacy selector
   *
   * @returns {undefined}
   */
  ns.SelectorLegacy.prototype.getMetadata = function () {
    return this.currentMetadata;
  };
  
  /**
   * Returns the html element for the hub
   *
   * @return {HTMLElement}
   */
  ns.SelectorLegacy.prototype.getElement = function () {
    return this.$selector.get(0);
  };
  