text: /* ***** BEGIN LICENSE BLOCK *****
   * Distributed under the BSD license:
   *
   * Copyright (c) 2010, Ajax.org B.V.
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions are met:
   *     * Redistributions of source code must retain the above copyright
   *       notice, this list of conditions and the following disclaimer.
   *     * Redistributions in binary form must reproduce the above copyright
   *       notice, this list of conditions and the following disclaimer in the
   *       documentation and/or other materials provided with the distribution.
   *     * Neither the name of Ajax.org B.V. nor the
   *       names of its contributors may be used to endorse or promote products
   *       derived from this software without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
   * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * ***** END LICENSE BLOCK ***** */
  
  /**
   * The main class required to set up an Ace instance in the browser.
   *
   * @class Ace
   **/
  
  define(function(require, exports, module) {
  "use strict";
  
  require("./lib/fixoldbrowsers");
  
  var dom = require("./lib/dom");
  var event = require("./lib/event");
  
  var Range = require("./range").Range;
  var Editor = require("./editor").Editor;
  var EditSession = require("./edit_session").EditSession;
  var UndoManager = require("./undomanager").UndoManager;
  var Renderer = require("./virtual_renderer").VirtualRenderer;
  
  // The following require()s are for inclusion in the built ace file
  require("./worker/worker_client");
  require("./keyboard/hash_handler");
  require("./placeholder");
  require("./multi_select");
  require("./mode/folding/fold_mode");
  require("./theme/textmate");
  require("./ext/error_marker");
  
  exports.config = require("./config");
  
  /**
   * Provides access to require in packed noconflict mode
   * @param {String} moduleName
   * @returns {Object}
   **/
  exports.require = require;
  
  if (typeof define === "function")
      exports.define = define;
  
  /**
   * Embeds the Ace editor into the DOM, at the element provided by `el`.
   * @param {String | DOMElement} el Either the id of an element, or the element itself
   * @param {Object } options Options for the editor
   *
   **/
  exports.edit = function(el, options) {
      if (typeof el == "string") {
          var _id = el;
          el = document.getElementById(_id);
          if (!el)
              throw new Error("ace.edit can't find div #" + _id);
      }
  
      if (el && el.env && el.env.editor instanceof Editor)
          return el.env.editor;
  
      var value = "";
      if (el && /input|textarea/i.test(el.tagName)) {
          var oldNode = el;
          value = oldNode.value;
          el = dom.createElement("pre");
          oldNode.parentNode.replaceChild(el, oldNode);
      } else if (el) {
          value = el.textContent;
          el.innerHTML = "";
      }
  
      var doc = exports.createEditSession(value);
  
      var editor = new Editor(new Renderer(el), doc, options);
  
      var env = {
          document: doc,
          editor: editor,
          onResize: editor.resize.bind(editor, null)
      };
      if (oldNode) env.textarea = oldNode;
      event.addListener(window, "resize", env.onResize);
      editor.on("destroy", function() {
          event.removeListener(window, "resize", env.onResize);
          env.editor.container.env = null; // prevent memory leak on old ie
      });
      editor.container.env = editor.env = env;
      return editor;
  };
  
  /**
   * Creates a new [[EditSession]], and returns the associated [[Document]].
   * @param {Document | String} text {:textParam}
   * @param {TextMode} mode {:modeParam}
   *
   **/
  exports.createEditSession = function(text, mode) {
      var doc = new EditSession(text, mode);
      doc.setUndoManager(new UndoManager());
      return doc;
  };
  exports.Range = Range;
  exports.Editor = Editor;
  exports.EditSession = EditSession;
  exports.UndoManager = UndoManager;
  exports.VirtualRenderer = Renderer;
  exports.version = "1.4.4";
  });
  