text: /*!
   * Ext JS Library 3.1.1
   * Copyright(c) 2006-2010 Ext JS, LLC
   * licensing@extjs.com
   * http://www.extjs.com/license
   */
  /**
   * @class Ext.dd.Registry
   * Provides easy access to all drag drop components that are registered on a page.  Items can be retrieved either
   * directly by DOM node id, or by passing in the drag drop event that occurred and looking up the event target.
   * @singleton
   */
  Ext.dd.Registry = function(){
      var elements = {}; 
      var handles = {}; 
      var autoIdSeed = 0;
  
      var getId = function(el, autogen){
          if(typeof el == "string"){
              return el;
          }
          var id = el.id;
          if(!id && autogen !== false){
              id = "extdd-" + (++autoIdSeed);
              el.id = id;
          }
          return id;
      };
      
      return {
      /**
       * Resgister a drag drop element
       * @param {String/HTMLElement) element The id or DOM node to register
       * @param {Object} data (optional) An custom data object that will be passed between the elements that are involved
       * in drag drop operations.  You can populate this object with any arbitrary properties that your own code
       * knows how to interpret, plus there are some specific properties known to the Registry that should be
       * populated in the data object (if applicable):
       * <pre>
  Value      Description<br />
  ---------  ------------------------------------------<br />
  handles    Array of DOM nodes that trigger dragging<br />
             for the element being registered<br />
  isHandle   True if the element passed in triggers<br />
             dragging itself, else false
  </pre>
       */
          register : function(el, data){
              data = data || {};
              if(typeof el == "string"){
                  el = document.getElementById(el);
              }
              data.ddel = el;
              elements[getId(el)] = data;
              if(data.isHandle !== false){
                  handles[data.ddel.id] = data;
              }
              if(data.handles){
                  var hs = data.handles;
                  for(var i = 0, len = hs.length; i < len; i++){
                  	handles[getId(hs[i])] = data;
                  }
              }
          },
  
      /**
       * Unregister a drag drop element
       * @param {String/HTMLElement) element The id or DOM node to unregister
       */
          unregister : function(el){
              var id = getId(el, false);
              var data = elements[id];
              if(data){
                  delete elements[id];
                  if(data.handles){
                      var hs = data.handles;
                      for(var i = 0, len = hs.length; i < len; i++){
                      	delete handles[getId(hs[i], false)];
                      }
                  }
              }
          },
  
      /**
       * Returns the handle registered for a DOM Node by id
       * @param {String/HTMLElement} id The DOM node or id to look up
       * @return {Object} handle The custom handle data
       */
          getHandle : function(id){
              if(typeof id != "string"){ // must be element?
                  id = id.id;
              }
              return handles[id];
          },
  
      /**
       * Returns the handle that is registered for the DOM node that is the target of the event
       * @param {Event} e The event
       * @return {Object} handle The custom handle data
       */
          getHandleFromEvent : function(e){
              var t = Ext.lib.Event.getTarget(e);
              return t ? handles[t.id] : null;
          },
  
      /**
       * Returns a custom data object that is registered for a DOM node by id
       * @param {String/HTMLElement} id The DOM node or id to look up
       * @return {Object} data The custom data
       */
          getTarget : function(id){
              if(typeof id != "string"){ // must be element?
                  id = id.id;
              }
              return elements[id];
          },
  
      /**
       * Returns a custom data object that is registered for the DOM node that is the target of the event
       * @param {Event} e The event
       * @return {Object} data The custom data
       */
          getTargetFromEvent : function(e){
              var t = Ext.lib.Event.getTarget(e);
              return t ? elements[t.id] || handles[t.id] : null;
          }
      };
  }();