(function() {
  var ScrivitoAnchor, activate, customOptions, defaultOptions, editorOptions;

  ScrivitoAnchor = MediumEditor.extensions.anchor.extend({
    name: 'scrivito_anchor',
    contentDefault: '<i class="scrivito_customer_icon sci_link"></i>',
    handleClick: function(event) {
      var firstTextElement, linkElement, linkValue, selectedParent, selectionRange;
      if (!this.isDisplayed()) {
        selectionRange = MediumEditor.selection.getSelectionRange(this.document);
        selectedParent = MediumEditor.selection.getSelectedParentElement(selectionRange);
        firstTextElement = MediumEditor.util.getFirstTextNode(selectedParent);
        linkElement = MediumEditor.util.getClosestTag(firstTextElement, 'a');
        linkValue = $(linkElement).attr('href');
        this.showForm(linkValue);
      }
      return false;
    },
    getTemplate: function() {
      return "<i class='medium-editor-toolbar-browse scrivito_customer_icon sci_collection'></i>" + ("<input type='text' class='medium-editor-toolbar-input' placeholder='" + this.placeholderText + "'>") + "<i class='medium-editor-toolbar-save scrivito_customer_icon sci_check'></i>" + "<i class='medium-editor-toolbar-close scrivito_customer_icon sci_cross'></i>";
    },
    attachFormEvents: function(form) {
      var input;
      MediumEditor.extensions.anchor.prototype.attachFormEvents.call(this, form);
      form = $(form);
      input = form.find('.medium-editor-toolbar-input');
      return form.find('.medium-editor-toolbar-browse').on('click', (function(_this) {
        return function() {
          var cmsField, id, selection;
          selection = (id = scrivito.id_from_path(input.val())) ? [id] : [];
          cmsField = $(_this.base.origElements);
          scrivito.content_browser.open({
            filter: cmsField.data('scrivitoEditorsFilter'),
            filter_context: cmsField.data('scrivitoEditorsFilterContext'),
            selection: selection,
            selection_mode: 'single'
          }).always(function() {
            return input.focus();
          }).done(function(selection) {
            if (selection.length) {
              return input.val(scrivito.path_for_id(selection[0]));
            } else {
              return input.val('');
            }
          });
          return false;
        };
      })(this));
    },
    completeFormSave: function(opts) {
      this.base.restoreSelection();
      if (opts.url) {
        this.execAction(this.action, opts);
      } else {
        this.execAction('unlink');
      }
      return this.base.checkSelection();
    }
  });

  editorOptions = function() {
    return $.extend({}, defaultOptions(), customOptions());
  };

  defaultOptions = function() {
    return {
      anchorPreview: false,
      extensions: {
        scrivito_anchor: new ScrivitoAnchor
      },
      placeholder: false,
      toolbar: {
        buttons: ['bold', 'italic', 'scrivito_anchor', 'h2', 'h3', 'unorderedlist', 'orderedlist'],
        standardizeSelectionStart: true
      }
    };
  };

  customOptions = function() {
    if (typeof scrivito.editors.medium_editor.options === 'function') {
      return scrivito.editors.medium_editor.options();
    } else {
      return scrivito.editors.medium_editor.options;
    }
  };

  activate = function(element) {
    var cmsField;
    cmsField = $(element);
    return new MediumEditor(cmsField, editorOptions()).subscribe('editableInput', function() {
      return cmsField.scrivito('save', cmsField.html());
    });
  };

  scrivito.editors.medium_editor = {
    can_edit: function(element) {
      return $(element).is('[data-scrivito-field-type=html]');
    },
    activate: function(element) {
      return activate(element);
    },
    options: function() {
      return {};
    }
  };

  scrivito.on('load', function() {
    return scrivito.define_editor('medium', scrivito.editors.medium_editor);
  });

}).call(this);