  /**
   * editable_selects.js
   *
   * Copyright 2009, Moxiecode Systems AB
   * Released under LGPL License.
   *
   * License: http://tinymce.moxiecode.com/license
   * Contributing: http://tinymce.moxiecode.com/contributing
   */

  var TinyMCE_EditableSelects = {
      editSelectElm: null,

      init: function () {
          var nl = document.getElementsByTagName("select"), i, d = document, o;

          for (i = 0; i < nl.length; i++) {
              if (nl[i].className.indexOf('mceEditableSelect') != -1) {
                  o = new Option('(value)', '__mce_add_custom__');

                  o.className = 'mceAddSelectValue';

                  nl[i].options[nl[i].options.length] = o;
                  nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;
              }
          }
      },

      onChangeEditableSelect: function (e) {
          var d = document, ne, se = window.event ? window.event.srcElement : e.target;

          if (se.options[se.selectedIndex].value == '__mce_add_custom__') {
              ne = d.createElement("input");
              ne.id = se.id + "_custom";
              ne.name = se.name + "_custom";
              ne.type = "text";

              ne.style.width = se.offsetWidth + 'px';
              se.parentNode.insertBefore(ne, se);
              se.style.display = 'none';
              ne.focus();
              ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;
              ne.onkeydown = TinyMCE_EditableSelects.onKeyDown;
              TinyMCE_EditableSelects.editSelectElm = se;
          }
      },

      onBlurEditableSelectInput: function () {
          var se = TinyMCE_EditableSelects.editSelectElm;

          if (se) {
              if (se.previousSibling.value != '') {
                  addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);
                  selectByValue(document.forms[0], se.id, se.previousSibling.value);
              } else
                  selectByValue(document.forms[0], se.id, '');

              se.style.display = 'inline';
              se.parentNode.removeChild(se.previousSibling);
              TinyMCE_EditableSelects.editSelectElm = null;
          }
      },

      onKeyDown: function (e) {
          e = e || window.event;

          if (e.keyCode == 13)
              TinyMCE_EditableSelects.onBlurEditableSelectInput();
      }
  };
