| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
 
-   <style type="text/css">
 
-     .highlight { display: block; background-color: #ddd; }
 
-   </style>
 
-   <script type="text/javascript">
 
-     function highlight() {
 
-       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
 
-     }
 
-   </script>
 
- </head>
 
- <body onload="prettyPrint(); highlight();">
 
-   <pre class="prettyprint lang-js"><span id='Ext-dom-Element-method-constructor'><span id='Ext-dom-Element'>/**
 
- </span></span> * @class Ext.dom.Element
 
-  * @alternateClassName Ext.Element
 
-  * @alternateClassName Ext.core.Element
 
-  * @extend Ext.dom.AbstractElement
 
-  *
 
-  * Encapsulates a DOM element, adding simple DOM manipulation facilities, normalizing for browser differences.
 
-  *
 
-  * All instances of this class inherit the methods of {@link Ext.fx.Anim} making visual effects easily available to all
 
-  * DOM elements.
 
-  *
 
-  * Note that the events documented in this class are not Ext events, they encapsulate browser events. Some older browsers
 
-  * may not support the full range of events. Which events are supported is beyond the control of Ext JS.
 
-  *
 
-  * Usage:
 
-  *
 
-  *     // by id
 
-  *     var el = Ext.get("my-div");
 
-  *
 
-  *     // by DOM element reference
 
-  *     var el = Ext.get(myDivElement);
 
-  *
 
-  * # Animations
 
-  *
 
-  * When an element is manipulated, by default there is no animation.
 
-  *
 
-  *     var el = Ext.get("my-div");
 
-  *
 
-  *     // no animation
 
-  *     el.setWidth(100);
 
-  *
 
-  * Many of the functions for manipulating an element have an optional "animate" parameter. This parameter can be
 
-  * specified as boolean (true) for default animation effects.
 
-  *
 
-  *     // default animation
 
-  *     el.setWidth(100, true);
 
-  *
 
-  * To configure the effects, an object literal with animation options to use as the Element animation configuration
 
-  * object can also be specified. Note that the supported Element animation configuration options are a subset of the
 
-  * {@link Ext.fx.Anim} animation options specific to Fx effects. The supported Element animation configuration options
 
-  * are:
 
-  *
 
-  *     Option    Default   Description
 
-  *     --------- --------  ---------------------------------------------
 
-  *     {@link Ext.fx.Anim#duration duration}  350       The duration of the animation in milliseconds
 
-  *     {@link Ext.fx.Anim#easing easing}    easeOut   The easing method
 
-  *     {@link Ext.fx.Anim#callback callback}  none      A function to execute when the anim completes
 
-  *     {@link Ext.fx.Anim#scope scope}     this      The scope (this) of the callback function
 
-  *
 
-  * Usage:
 
-  *
 
-  *     // Element animation options object
 
-  *     var opt = {
 
-  *         {@link Ext.fx.Anim#duration duration}: 1000,
 
-  *         {@link Ext.fx.Anim#easing easing}: 'elasticIn',
 
-  *         {@link Ext.fx.Anim#callback callback}: this.foo,
 
-  *         {@link Ext.fx.Anim#scope scope}: this
 
-  *     };
 
-  *     // animation with some options set
 
-  *     el.setWidth(100, opt);
 
-  *
 
-  * The Element animation object being used for the animation will be set on the options object as "anim", which allows
 
-  * you to stop or manipulate the animation. Here is an example:
 
-  *
 
-  *     // using the "anim" property to get the Anim object
 
-  *     if(opt.anim.isAnimated()){
 
-  *         opt.anim.stop();
 
-  *     }
 
-  *
 
-  * # Composite (Collections of) Elements
 
-  *
 
-  * For working with collections of Elements, see {@link Ext.CompositeElement}
 
-  *
 
-  * @constructor
 
-  * Creates new Element directly.
 
-  * @param {String/HTMLElement} element
 
-  * @param {Boolean} [forceNew] By default the constructor checks to see if there is already an instance of this
 
-  * element in the cache and if there is it returns the same instance. This will skip that check (useful for extending
 
-  * this class).
 
-  * @return {Object}
 
-  */
 
- (function() {
 
- var HIDDEN = 'hidden',
 
-     DOC             = document,
 
-     VISIBILITY      = "visibility",
 
-     DISPLAY         = "display",
 
-     NONE            = "none",
 
-     XMASKED         = Ext.baseCSSPrefix + "masked",
 
-     XMASKEDRELATIVE = Ext.baseCSSPrefix + "masked-relative",
 
-     EXTELMASKMSG    = Ext.baseCSSPrefix + "mask-msg",
 
-     bodyRe          = /^body/i,
 
-     visFly,
 
-     // speedy lookup for elements never to box adjust
 
-     noBoxAdjust = Ext.isStrict ? {
 
-         select: 1
 
-     }: {
 
-         input: 1,
 
-         select: 1,
 
-         textarea: 1
 
-     },
 
-     // Pseudo for use by cacheScrollValues
 
-     isScrolled = function(c) {
 
-         var r = [], ri = -1,
 
-             i, ci;
 
-         for (i = 0; ci = c[i]; i++) {
 
-             if (ci.scrollTop > 0 || ci.scrollLeft > 0) {
 
-                 r[++ri] = ci;
 
-             }
 
-         }
 
-         return r;
 
-     },
 
-     Element = Ext.define('Ext.dom.Element', {
 
-     extend: 'Ext.dom.AbstractElement',
 
-     alternateClassName: ['Ext.Element', 'Ext.core.Element'],
 
-     addUnits: function() {
 
-         return this.self.addUnits.apply(this.self, arguments);
 
-     },
 
- <span id='Ext-dom-Element-method-focus'>    /**
 
- </span>     * Tries to focus the element. Any exceptions are caught and ignored.
 
-      * @param {Number} [defer] Milliseconds to defer the focus
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     focus: function(defer, /* private */ dom) {
 
-         var me = this,
 
-             scrollTop,
 
-             body;
 
-         dom = dom || me.dom;
 
-         body = (dom.ownerDocument || DOC).body || DOC.body;
 
-         try {
 
-             if (Number(defer)) {
 
-                 Ext.defer(me.focus, defer, me, [null, dom]);
 
-             } else {
 
-                 // Focusing a large element, the browser attempts to scroll as much of it into view
 
-                 // as possible. We need to override this behaviour.
 
-                 if (dom.offsetHeight > Element.getViewHeight()) {
 
-                     scrollTop = body.scrollTop;
 
-                 }
 
-                 dom.focus();
 
-                 if (scrollTop !== undefined) {
 
-                     body.scrollTop = scrollTop;
 
-                 }
 
-             }
 
-         } catch(e) {
 
-         }
 
-         return me;
 
-     },
 
- <span id='Ext-dom-Element-method-blur'>    /**
 
- </span>     * Tries to blur the element. Any exceptions are caught and ignored.
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     blur: function() {
 
-         try {
 
-             this.dom.blur();
 
-         } catch(e) {
 
-         }
 
-         return this;
 
-     },
 
- <span id='Ext-dom-Element-method-isBorderBox'>    /**
 
- </span>     * Tests various css rules/browsers to determine if this element uses a border box
 
-      * @return {Boolean}
 
-      */
 
-     isBorderBox: function() {
 
-         var box = Ext.isBorderBox;
 
-         if (box) {
 
-             box = !((this.dom.tagName || "").toLowerCase() in noBoxAdjust);
 
-         }
 
-         return box;
 
-     },
 
- <span id='Ext-dom-Element-method-hover'>    /**
 
- </span>     * Sets up event handlers to call the passed functions when the mouse is moved into and out of the Element.
 
-      * @param {Function} overFn The function to call when the mouse enters the Element.
 
-      * @param {Function} outFn The function to call when the mouse leaves the Element.
 
-      * @param {Object} [scope] The scope (`this` reference) in which the functions are executed. Defaults
 
-      * to the Element's DOM element.
 
-      * @param {Object} [options] Options for the listener. See {@link Ext.util.Observable#addListener the
 
-      * options parameter}.
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     hover: function(overFn, outFn, scope, options) {
 
-         var me = this;
 
-         me.on('mouseenter', overFn, scope || me.dom, options);
 
-         me.on('mouseleave', outFn, scope || me.dom, options);
 
-         return me;
 
-     },
 
- <span id='Ext-dom-Element-method-getAttributeNS'>    /**
 
- </span>     * Returns the value of a namespaced attribute from the element's underlying DOM node.
 
-      * @param {String} namespace The namespace in which to look for the attribute
 
-      * @param {String} name The attribute name
 
-      * @return {String} The attribute value
 
-      */
 
-     getAttributeNS: function(ns, name) {
 
-         return this.getAttribute(name, ns);
 
-     },
 
-     getAttribute: (Ext.isIE && !(Ext.isIE9 && DOC.documentMode === 9)) ?
 
-         function(name, ns) {
 
-             var d = this.dom,
 
-                     type;
 
-             if (ns) {
 
-                 type = typeof d[ns + ":" + name];
 
-                 if (type != 'undefined' && type != 'unknown') {
 
-                     return d[ns + ":" + name] || null;
 
-                 }
 
-                 return null;
 
-             }
 
-             if (name === "for") {
 
-                 name = "htmlFor";
 
-             }
 
-             return d[name] || null;
 
-         } : function(name, ns) {
 
-             var d = this.dom;
 
-             if (ns) {
 
-                 return d.getAttributeNS(ns, name) || d.getAttribute(ns + ":" + name);
 
-             }
 
-             return  d.getAttribute(name) || d[name] || null;
 
-         },
 
- <span id='Ext-dom-Element-method-cacheScrollValues'>    /**
 
- </span>     * When an element is moved around in the DOM, or is hidden using `display:none`, it loses layout, and therefore
 
-      * all scroll positions of all descendant elements are lost.
 
-      * 
 
-      * This function caches them, and returns a function, which when run will restore the cached positions.
 
-      * In the following example, the Panel is moved from one Container to another which will cause it to lose all scroll positions:
 
-      * 
 
-      *     var restoreScroll = myPanel.el.cacheScrollValues();
 
-      *     myOtherContainer.add(myPanel);
 
-      *     restoreScroll();
 
-      * 
 
-      * @return {Function} A function which will restore all descentant elements of this Element to their scroll
 
-      * positions recorded when this function was executed. Be aware that the returned function is a closure which has
 
-      * captured the scope of `cacheScrollValues`, so take care to derefence it as soon as not needed - if is it is a `var`
 
-      * it will drop out of scope, and the reference will be freed.
 
-      */
 
-     cacheScrollValues: function() {
 
-         var me = this,
 
-             scrolledDescendants,
 
-             el, i,
 
-             scrollValues = [],
 
-             result = function() {
 
-                 for (i = 0; i < scrolledDescendants.length; i++) {
 
-                     el = scrolledDescendants[i];
 
-                     el.scrollLeft = scrollValues[i][0];
 
-                     el.scrollTop  = scrollValues[i][1];
 
-                 }
 
-             };
 
-         if (!Ext.DomQuery.pseudos.isScrolled) {
 
-             Ext.DomQuery.pseudos.isScrolled = isScrolled;
 
-         }
 
-         scrolledDescendants = me.query(':isScrolled');
 
-         for (i = 0; i < scrolledDescendants.length; i++) {
 
-             el = scrolledDescendants[i];
 
-             scrollValues[i] = [el.scrollLeft, el.scrollTop];
 
-         }
 
-         return result;
 
-     },
 
- <span id='Ext-dom-Element-property-autoBoxAdjust'>    /**
 
- </span>     * @property {Boolean} autoBoxAdjust
 
-      * True to automatically adjust width and height settings for box-model issues.
 
-      */
 
-     autoBoxAdjust: true,
 
- <span id='Ext-dom-Element-method-isVisible'>    /**
 
- </span>     * Checks whether the element is currently visible using both visibility and display properties.
 
-      * @param {Boolean} [deep=false] True to walk the dom and see if parent elements are hidden.
 
-      * If false, the function only checks the visibility of the element itself and it may return
 
-      * `true` even though a parent is not visible.
 
-      * @return {Boolean} `true` if the element is currently visible, else `false`
 
-      */
 
-     isVisible : function(deep) {
 
-         var me = this,
 
-             dom = me.dom,
 
-             stopNode = dom.ownerDocument.documentElement;
 
-         if (!visFly) {
 
-             visFly = new Element.Fly();
 
-         }
 
-         while (dom !== stopNode) {
 
-             // We're invisible if we hit a nonexistent parentNode or a document
 
-             // fragment or computed style visibility:hidden or display:none
 
-             if (!dom || dom.nodeType === 11 || (visFly.attach(dom)).isStyle(VISIBILITY, HIDDEN) || visFly.isStyle(DISPLAY, NONE)) {
 
-                 return false;
 
-             }
 
-             // Quit now unless we are being asked to check parent nodes.
 
-             if (!deep) {
 
-                 break;
 
-             }
 
-             dom = dom.parentNode;
 
-         }
 
-         return true;
 
-     },
 
- <span id='Ext-dom-Element-method-isDisplayed'>    /**
 
- </span>     * Returns true if display is not "none"
 
-      * @return {Boolean}
 
-      */
 
-     isDisplayed : function() {
 
-         return !this.isStyle(DISPLAY, NONE);
 
-     },
 
- <span id='Ext-dom-Element-method-enableDisplayMode'>    /**
 
- </span>     * Convenience method for setVisibilityMode(Element.DISPLAY)
 
-      * @param {String} [display] What to set display to when visible
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     enableDisplayMode : function(display) {
 
-         var me = this;
 
-         
 
-         me.setVisibilityMode(Element.DISPLAY);
 
-         if (!Ext.isEmpty(display)) {
 
-             (me.$cache || me.getCache()).data.originalDisplay = display;
 
-         }
 
-         return me;
 
-     },
 
- <span id='Ext-dom-Element-method-mask'>    /**
 
- </span>     * Puts a mask over this element to disable user interaction. Requires core.css.
 
-      * This method can only be applied to elements which accept child nodes.
 
-      * @param {String} [msg] A message to display in the mask
 
-      * @param {String} [msgCls] A css class to apply to the msg element
 
-      * @return {Ext.dom.Element} The mask element
 
-      */
 
-     mask : function(msg, msgCls /* private - passed by AbstractComponent.mask to avoid the need to interrogate the DOM to get the height*/, elHeight) {
 
-         var me            = this,
 
-             dom           = me.dom,
 
-             // In some cases, setExpression will exist but not be of a function type,
 
-             // so we check it explicitly here to stop IE throwing errors
 
-             setExpression = dom.style.setExpression,
 
-             data          = (me.$cache || me.getCache()).data,
 
-             maskEl        = data.maskEl,
 
-             maskMsg       = data.maskMsg;
 
-         if (!(bodyRe.test(dom.tagName) && me.getStyle('position') == 'static')) {
 
-             me.addCls(XMASKEDRELATIVE);
 
-         }
 
-         
 
-         // We always needs to recreate the mask since the DOM element may have been re-created
 
-         if (maskEl) {
 
-             maskEl.remove();
 
-         }
 
-         
 
-         if (maskMsg) {
 
-             maskMsg.remove();
 
-         }
 
-         Ext.DomHelper.append(dom, [{
 
-             cls : Ext.baseCSSPrefix + "mask"
 
-         }, {
 
-             cls : msgCls ? EXTELMASKMSG + " " + msgCls : EXTELMASKMSG,
 
-             cn  : {
 
-                 tag: 'div',
 
-                 html: msg || ''
 
-             }
 
-         }]);
 
-             
 
-         maskMsg = Ext.get(dom.lastChild);
 
-         maskEl = Ext.get(maskMsg.dom.previousSibling);
 
-         data.maskMsg = maskMsg;
 
-         data.maskEl = maskEl;
 
-         me.addCls(XMASKED);
 
-         maskEl.setDisplayed(true);
 
-         if (typeof msg == 'string') {
 
-             maskMsg.setDisplayed(true);
 
-             maskMsg.center(me);
 
-         } else {
 
-             maskMsg.setDisplayed(false);
 
-         }
 
-         // NOTE: CSS expressions are resource intensive and to be used only as a last resort
 
-         // These expressions are removed as soon as they are no longer necessary - in the unmask method.
 
-         // In normal use cases an element will be masked for a limited period of time.
 
-         // Fix for https://sencha.jira.com/browse/EXTJSIV-19.
 
-         // IE6 strict mode and IE6-9 quirks mode takes off left+right padding when calculating width!
 
-         if (!Ext.supports.IncludePaddingInWidthCalculation && setExpression) {
 
-             // In an occasional case setExpression will throw an exception
 
-             try {
 
-                 maskEl.dom.style.setExpression('width', 'this.parentNode.clientWidth + "px"');
 
-             } catch (e) {}
 
-         }
 
-         // Some versions and modes of IE subtract top+bottom padding when calculating height.
 
-         // Different versions from those which make the same error for width!
 
-         if (!Ext.supports.IncludePaddingInHeightCalculation && setExpression) {
 
-             // In an occasional case setExpression will throw an exception
 
-             try {
 
-                 maskEl.dom.style.setExpression('height', 'this.parentNode.' + (dom == DOC.body ? 'scrollHeight' : 'offsetHeight') + ' + "px"');
 
-             } catch (e) {}
 
-         }
 
-         // ie will not expand full height automatically
 
-         else if (Ext.isIE && !(Ext.isIE7 && Ext.isStrict) && me.getStyle('height') == 'auto') {
 
-             maskEl.setSize(undefined, elHeight || me.getHeight());
 
-         }
 
-         return maskEl;
 
-     },
 
- <span id='Ext-dom-Element-method-unmask'>    /**
 
- </span>     * Hides a previously applied mask.
 
-      */
 
-     unmask : function() {
 
-         var me      = this,
 
-             data    = (me.$cache || me.getCache()).data,
 
-             maskEl  = data.maskEl,
 
-             maskMsg = data.maskMsg,
 
-             style;
 
-         if (maskEl) {
 
-             style = maskEl.dom.style;
 
-             // Remove resource-intensive CSS expressions as soon as they are not required.
 
-             if (style.clearExpression) {
 
-                 style.clearExpression('width');
 
-                 style.clearExpression('height');
 
-             }
 
-             
 
-             if (maskEl) {
 
-                 maskEl.remove();
 
-                 delete data.maskEl;
 
-             }
 
-             
 
-             if (maskMsg) {
 
-                 maskMsg.remove();
 
-                 delete data.maskMsg;
 
-             }
 
-             
 
-             me.removeCls([XMASKED, XMASKEDRELATIVE]);
 
-         }
 
-     },
 
- <span id='Ext-dom-Element-method-isMasked'>    /**
 
- </span>     * Returns true if this element is masked. Also re-centers any displayed message within the mask.
 
-      * @return {Boolean}
 
-      */
 
-     isMasked : function() {
 
-         var me      = this,
 
-             data    = (me.$cache || me.getCache()).data,
 
-             maskEl  = data.maskEl,
 
-             maskMsg = data.maskMsg,
 
-             hasMask = false; 
 
-         if (maskEl && maskEl.isVisible()) {
 
-             if (maskMsg) {
 
-                 maskMsg.center(me);
 
-             }
 
-             hasMask = true;
 
-         }
 
-         return hasMask;
 
-     },
 
- <span id='Ext-dom-Element-method-createShim'>    /**
 
- </span>     * Creates an iframe shim for this element to keep selects and other windowed objects from
 
-      * showing through.
 
-      * @return {Ext.dom.Element} The new shim element
 
-      */
 
-     createShim : function() {
 
-         var el = DOC.createElement('iframe'),
 
-             shim;
 
-         el.frameBorder = '0';
 
-         el.className = Ext.baseCSSPrefix + 'shim';
 
-         el.src = Ext.SSL_SECURE_URL;
 
-         shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom));
 
-         shim.autoBoxAdjust = false;
 
-         return shim;
 
-     },
 
- <span id='Ext-dom-Element-method-addKeyListener'>    /**
 
- </span>     * Convenience method for constructing a KeyMap
 
-      * @param {String/Number/Number[]/Object} key Either a string with the keys to listen for, the numeric key code,
 
-      * array of key codes or an object with the following options:
 
-      * @param {Number/Array} key.key
 
-      * @param {Boolean} key.shift
 
-      * @param {Boolean} key.ctrl
 
-      * @param {Boolean} key.alt
 
-      * @param {Function} fn The function to call
 
-      * @param {Object} [scope] The scope (`this` reference) in which the specified function is executed. Defaults to this Element.
 
-      * @return {Ext.util.KeyMap} The KeyMap created
 
-      */
 
-     addKeyListener : function(key, fn, scope){
 
-         var config;
 
-         if(typeof key != 'object' || Ext.isArray(key)){
 
-             config = {
 
-                 target: this,
 
-                 key: key,
 
-                 fn: fn,
 
-                 scope: scope
 
-             };
 
-         }else{
 
-             config = {
 
-                 target: this,
 
-                 key : key.key,
 
-                 shift : key.shift,
 
-                 ctrl : key.ctrl,
 
-                 alt : key.alt,
 
-                 fn: fn,
 
-                 scope: scope
 
-             };
 
-         }
 
-         return new Ext.util.KeyMap(config);
 
-     },
 
- <span id='Ext-dom-Element-method-addKeyMap'>    /**
 
- </span>     * Creates a KeyMap for this element
 
-      * @param {Object} config The KeyMap config. See {@link Ext.util.KeyMap} for more details
 
-      * @return {Ext.util.KeyMap} The KeyMap created
 
-      */
 
-     addKeyMap : function(config) {
 
-         return new Ext.util.KeyMap(Ext.apply({
 
-             target: this
 
-         }, config));
 
-     },
 
-     //  Mouse events
 
- <span id='Ext-dom-Element-event-click'>    /**
 
- </span>     * @event click
 
-      * Fires when a mouse click is detected within the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-contextmenu'>    /**
 
- </span>     * @event contextmenu
 
-      * Fires when a right click is detected within the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-dblclick'>    /**
 
- </span>     * @event dblclick
 
-      * Fires when a mouse double click is detected within the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-mousedown'>    /**
 
- </span>     * @event mousedown
 
-      * Fires when a mousedown is detected within the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-mouseup'>    /**
 
- </span>     * @event mouseup
 
-      * Fires when a mouseup is detected within the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-mouseover'>    /**
 
- </span>     * @event mouseover
 
-      * Fires when a mouseover is detected within the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-mousemove'>    /**
 
- </span>     * @event mousemove
 
-      * Fires when a mousemove is detected with the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-mouseout'>    /**
 
- </span>     * @event mouseout
 
-      * Fires when a mouseout is detected with the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-mouseenter'>    /**
 
- </span>     * @event mouseenter
 
-      * Fires when the mouse enters the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-mouseleave'>    /**
 
- </span>     * @event mouseleave
 
-      * Fires when the mouse leaves the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
-     //  Keyboard events
 
- <span id='Ext-dom-Element-event-keypress'>    /**
 
- </span>     * @event keypress
 
-      * Fires when a keypress is detected within the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-keydown'>    /**
 
- </span>     * @event keydown
 
-      * Fires when a keydown is detected within the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-keyup'>    /**
 
- </span>     * @event keyup
 
-      * Fires when a keyup is detected within the element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
-     //  HTML frame/object events
 
- <span id='Ext-dom-Element-event-load'>    /**
 
- </span>     * @event load
 
-      * Fires when the user agent finishes loading all content within the element. Only supported by window, frames,
 
-      * objects and images.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-unload'>    /**
 
- </span>     * @event unload
 
-      * Fires when the user agent removes all content from a window or frame. For elements, it fires when the target
 
-      * element or any of its content has been removed.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-abort'>    /**
 
- </span>     * @event abort
 
-      * Fires when an object/image is stopped from loading before completely loaded.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-error'>    /**
 
- </span>     * @event error
 
-      * Fires when an object/image/frame cannot be loaded properly.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-resize'>    /**
 
- </span>     * @event resize
 
-      * Fires when a document view is resized.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-scroll'>    /**
 
- </span>     * @event scroll
 
-      * Fires when a document view is scrolled.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
-     //  Form events
 
- <span id='Ext-dom-Element-event-select'>    /**
 
- </span>     * @event select
 
-      * Fires when a user selects some text in a text field, including input and textarea.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-change'>    /**
 
- </span>     * @event change
 
-      * Fires when a control loses the input focus and its value has been modified since gaining focus.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-submit'>    /**
 
- </span>     * @event submit
 
-      * Fires when a form is submitted.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-reset'>    /**
 
- </span>     * @event reset
 
-      * Fires when a form is reset.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-focus'>    /**
 
- </span>     * @event focus
 
-      * Fires when an element receives focus either via the pointing device or by tab navigation.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-blur'>    /**
 
- </span>     * @event blur
 
-      * Fires when an element loses focus either via the pointing device or by tabbing navigation.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
-     //  User Interface events
 
- <span id='Ext-dom-Element-event-DOMFocusIn'>    /**
 
- </span>     * @event DOMFocusIn
 
-      * Where supported. Similar to HTML focus event, but can be applied to any focusable element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-DOMFocusOut'>    /**
 
- </span>     * @event DOMFocusOut
 
-      * Where supported. Similar to HTML blur event, but can be applied to any focusable element.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-DOMActivate'>    /**
 
- </span>     * @event DOMActivate
 
-      * Where supported. Fires when an element is activated, for instance, through a mouse click or a keypress.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
-     //  DOM Mutation events
 
- <span id='Ext-dom-Element-event-DOMSubtreeModified'>    /**
 
- </span>     * @event DOMSubtreeModified
 
-      * Where supported. Fires when the subtree is modified.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-DOMNodeInserted'>    /**
 
- </span>     * @event DOMNodeInserted
 
-      * Where supported. Fires when a node has been added as a child of another node.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-DOMNodeRemoved'>    /**
 
- </span>     * @event DOMNodeRemoved
 
-      * Where supported. Fires when a descendant node of the element is removed.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-DOMNodeRemovedFromDocument'>    /**
 
- </span>     * @event DOMNodeRemovedFromDocument
 
-      * Where supported. Fires when a node is being removed from a document.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-DOMNodeInsertedIntoDocument'>    /**
 
- </span>     * @event DOMNodeInsertedIntoDocument
 
-      * Where supported. Fires when a node is being inserted into a document.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-DOMAttrModified'>    /**
 
- </span>     * @event DOMAttrModified
 
-      * Where supported. Fires when an attribute has been modified.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-event-DOMCharacterDataModified'>    /**
 
- </span>     * @event DOMCharacterDataModified
 
-      * Where supported. Fires when the character data has been modified.
 
-      * @param {Ext.EventObject} e The {@link Ext.EventObject} encapsulating the DOM event.
 
-      * @param {HTMLElement} t The target of the event.
 
-      */
 
- <span id='Ext-dom-Element-method-on'>    /**
 
- </span>     * Appends an event handler to this element.
 
-      *
 
-      * @param {String} eventName The name of event to handle.
 
-      *
 
-      * @param {Function} fn The handler function the event invokes. This function is passed the following parameters:
 
-      *
 
-      * - **evt** : EventObject
 
-      *
 
-      *   The {@link Ext.EventObject EventObject} describing the event.
 
-      *
 
-      * - **el** : HtmlElement
 
-      *
 
-      *   The DOM element which was the target of the event. Note that this may be filtered by using the delegate option.
 
-      *
 
-      * - **o** : Object
 
-      *
 
-      *   The options object from the call that setup the listener.
 
-      *
 
-      * @param {Object} scope (optional) The scope (**this** reference) in which the handler function is executed. **If
 
-      * omitted, defaults to this Element.**
 
-      *
 
-      * @param {Object} options (optional) An object containing handler configuration properties. This may contain any of
 
-      * the following properties:
 
-      *
 
-      * - **scope** Object :
 
-      *
 
-      *   The scope (**this** reference) in which the handler function is executed. **If omitted, defaults to this
 
-      *   Element.**
 
-      *
 
-      * - **delegate** String:
 
-      *
 
-      *   A simple selector to filter the target or look for a descendant of the target. See below for additional details.
 
-      *
 
-      * - **stopEvent** Boolean:
 
-      *
 
-      *   True to stop the event. That is stop propagation, and prevent the default action.
 
-      *
 
-      * - **preventDefault** Boolean:
 
-      *
 
-      *   True to prevent the default action
 
-      *
 
-      * - **stopPropagation** Boolean:
 
-      *
 
-      *   True to prevent event propagation
 
-      *
 
-      * - **normalized** Boolean:
 
-      *
 
-      *   False to pass a browser event to the handler function instead of an Ext.EventObject
 
-      *
 
-      * - **target** Ext.dom.Element:
 
-      *
 
-      *   Only call the handler if the event was fired on the target Element, _not_ if the event was bubbled up from a
 
-      *   child node.
 
-      *
 
-      * - **delay** Number:
 
-      *
 
-      *   The number of milliseconds to delay the invocation of the handler after the event fires.
 
-      *
 
-      * - **single** Boolean:
 
-      *
 
-      *   True to add a handler to handle just the next firing of the event, and then remove itself.
 
-      *
 
-      * - **buffer** Number:
 
-      *
 
-      *   Causes the handler to be scheduled to run in an {@link Ext.util.DelayedTask} delayed by the specified number of
 
-      *   milliseconds. If the event fires again within that time, the original handler is _not_ invoked, but the new
 
-      *   handler is scheduled in its place.
 
-      *
 
-      * **Combining Options**
 
-      *
 
-      * Using the options argument, it is possible to combine different types of listeners:
 
-      *
 
-      * A delayed, one-time listener that auto stops the event and adds a custom argument (forumId) to the options
 
-      * object. The options object is available as the third parameter in the handler function.
 
-      *
 
-      * Code:
 
-      *
 
-      *     el.on('click', this.onClick, this, {
 
-      *         single: true,
 
-      *         delay: 100,
 
-      *         stopEvent : true,
 
-      *         forumId: 4
 
-      *     });
 
-      *
 
-      * **Attaching multiple handlers in 1 call**
 
-      *
 
-      * The method also allows for a single argument to be passed which is a config object containing properties which
 
-      * specify multiple handlers.
 
-      *
 
-      * Code:
 
-      *
 
-      *     el.on({
 
-      *         'click' : {
 
-      *             fn: this.onClick,
 
-      *             scope: this,
 
-      *             delay: 100
 
-      *         },
 
-      *         'mouseover' : {
 
-      *             fn: this.onMouseOver,
 
-      *             scope: this
 
-      *         },
 
-      *         'mouseout' : {
 
-      *             fn: this.onMouseOut,
 
-      *             scope: this
 
-      *         }
 
-      *     });
 
-      *
 
-      * Or a shorthand syntax:
 
-      *
 
-      * Code:
 
-      *
 
-      *     el.on({
 
-      *         'click' : this.onClick,
 
-      *         'mouseover' : this.onMouseOver,
 
-      *         'mouseout' : this.onMouseOut,
 
-      *         scope: this
 
-      *     });
 
-      *
 
-      * **delegate**
 
-      *
 
-      * This is a configuration option that you can pass along when registering a handler for an event to assist with
 
-      * event delegation. Event delegation is a technique that is used to reduce memory consumption and prevent exposure
 
-      * to memory-leaks. By registering an event for a container element as opposed to each element within a container.
 
-      * By setting this configuration option to a simple selector, the target element will be filtered to look for a
 
-      * descendant of the target. For example:
 
-      *
 
-      *     // using this markup:
 
-      *     <div id='elId'>
 
-      *         <p id='p1'>paragraph one</p>
 
-      *         <p id='p2' class='clickable'>paragraph two</p>
 
-      *         <p id='p3'>paragraph three</p>
 
-      *     </div>
 
-      *
 
-      *     // utilize event delegation to registering just one handler on the container element:
 
-      *     el = Ext.get('elId');
 
-      *     el.on(
 
-      *         'click',
 
-      *         function(e,t) {
 
-      *             // handle click
 
-      *             console.info(t.id); // 'p2'
 
-      *         },
 
-      *         this,
 
-      *         {
 
-      *             // filter the target element to be a descendant with the class 'clickable'
 
-      *             delegate: '.clickable'
 
-      *         }
 
-      *     );
 
-      *
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     on: function(eventName, fn, scope, options) {
 
-         Ext.EventManager.on(this, eventName, fn, scope || this, options);
 
-         return this;
 
-     },
 
- <span id='Ext-dom-Element-method-un'>    /**
 
- </span>     * Removes an event handler from this element.
 
-      *
 
-      * **Note**: if a *scope* was explicitly specified when {@link #on adding} the listener,
 
-      * the same scope must be specified here.
 
-      *
 
-      * Example:
 
-      *
 
-      *     el.un('click', this.handlerFn);
 
-      *     // or
 
-      *     el.removeListener('click', this.handlerFn);
 
-      *
 
-      * @param {String} eventName The name of the event from which to remove the handler.
 
-      * @param {Function} fn The handler function to remove. **This must be a reference to the function passed into the
 
-      * {@link #on} call.**
 
-      * @param {Object} scope If a scope (**this** reference) was specified when the listener was added, then this must
 
-      * refer to the same object.
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     un: function(eventName, fn, scope) {
 
-         Ext.EventManager.un(this, eventName, fn, scope || this);
 
-         return this;
 
-     },
 
- <span id='Ext-dom-Element-method-removeAllListeners'>    /**
 
- </span>     * Removes all previous added listeners from this element
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     removeAllListeners: function() {
 
-         Ext.EventManager.removeAll(this);
 
-         return this;
 
-     },
 
- <span id='Ext-dom-Element-method-purgeAllListeners'>    /**
 
- </span>     * Recursively removes all previous added listeners from this element and its children
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     purgeAllListeners: function() {
 
-         Ext.EventManager.purgeElement(this);
 
-         return this;
 
-     }
 
- }, function() {
 
-     var EC              = Ext.cache,
 
-         El              = this,
 
-         AbstractElement = Ext.dom.AbstractElement,
 
-         focusRe         = /a|button|embed|iframe|img|input|object|select|textarea/i,
 
-         nonSpaceRe      = /\S/,
 
-         scriptTagRe     = /(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig,
 
-         replaceScriptTagRe = /(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,
 
-         srcRe           = /\ssrc=([\'\"])(.*?)\1/i,
 
-         typeRe          = /\stype=([\'\"])(.*?)\1/i,
 
-         useDocForId = !(Ext.isIE6 || Ext.isIE7 || Ext.isIE8);
 
-     El.boxMarkup = '<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';
 
-     //</!if>
 
-     // private
 
-     // Garbage collection - uncache elements/purge listeners on orphaned elements
 
-     // so we don't hold a reference and cause the browser to retain them
 
-     function garbageCollect() {
 
-         if (!Ext.enableGarbageCollector) {
 
-             clearInterval(El.collectorThreadId);
 
-         } else {
 
-             var eid,
 
-                 d,
 
-                 o,
 
-                 t;
 
-             for (eid in EC) {
 
-                 if (!EC.hasOwnProperty(eid)) {
 
-                     continue;
 
-                 }
 
-                 o = EC[eid];
 
-                 // Skip document and window elements
 
-                 if (o.skipGarbageCollection) {
 
-                     continue;
 
-                 }
 
-                 d = o.dom;
 
-                 //<debug>
 
-                 // Should always have a DOM node
 
-                 if (!d) {
 
-                     Ext.Error.raise('Missing DOM node in element garbage collection: ' + eid);
 
-                 }
 
-                 // Check that document and window elements haven't got through
 
-                 if (d && (d.getElementById || d.navigator)) {
 
-                     Ext.Error.raise('Unexpected document or window element in element garbage collection');
 
-                 }
 
-                 //</debug>
 
-                 // -------------------------------------------------------
 
-                 // Determining what is garbage:
 
-                 // -------------------------------------------------------
 
-                 // !d.parentNode
 
-                 // no parentNode == direct orphan, definitely garbage
 
-                 // -------------------------------------------------------
 
-                 // !d.offsetParent && !document.getElementById(eid)
 
-                 // display none elements have no offsetParent so we will
 
-                 // also try to look it up by it's id. However, check
 
-                 // offsetParent first so we don't do unneeded lookups.
 
-                 // This enables collection of elements that are not orphans
 
-                 // directly, but somewhere up the line they have an orphan
 
-                 // parent.
 
-                 // -------------------------------------------------------
 
-                 if (!d.parentNode || (!d.offsetParent && !Ext.getElementById(eid))) {
 
-                     if (d && Ext.enableListenerCollection) {
 
-                         Ext.EventManager.removeAll(d);
 
-                     }
 
-                     delete EC[eid];
 
-                 }
 
-             }
 
-             // Cleanup IE Object leaks
 
-             if (Ext.isIE) {
 
-                 t = {};
 
-                 for (eid in EC) {
 
-                     if (!EC.hasOwnProperty(eid)) {
 
-                         continue;
 
-                     }
 
-                     t[eid] = EC[eid];
 
-                 }
 
-                 EC = Ext.cache = t;
 
-             }
 
-         }
 
-     }
 
-     El.collectorThreadId = setInterval(garbageCollect, 30000);
 
-     //Stuff from Element-more.js
 
-     El.addMethods({
 
- <span id='Ext-dom-Element-method-monitorMouseLeave'>        /**
 
- </span>         * Monitors this Element for the mouse leaving. Calls the function after the specified delay only if
 
-          * the mouse was not moved back into the Element within the delay. If the mouse *was* moved
 
-          * back in, the function is not called.
 
-          * @param {Number} delay The delay **in milliseconds** to wait for possible mouse re-entry before calling the handler function.
 
-          * @param {Function} handler The function to call if the mouse remains outside of this Element for the specified time.
 
-          * @param {Object} [scope] The scope (`this` reference) in which the handler function executes. Defaults to this Element.
 
-          * @return {Object} The listeners object which was added to this element so that monitoring can be stopped. Example usage:
 
-          *
 
-          *     // Hide the menu if the mouse moves out for 250ms or more
 
-          *     this.mouseLeaveMonitor = this.menuEl.monitorMouseLeave(250, this.hideMenu, this);
 
-          *
 
-          *     ...
 
-          *     // Remove mouseleave monitor on menu destroy
 
-          *     this.menuEl.un(this.mouseLeaveMonitor);
 
-          *
 
-          */
 
-         monitorMouseLeave: function(delay, handler, scope) {
 
-             var me = this,
 
-                 timer,
 
-                 listeners = {
 
-                     mouseleave: function(e) {
 
-                         timer = setTimeout(Ext.Function.bind(handler, scope||me, [e]), delay);
 
-                     },
 
-                     mouseenter: function() {
 
-                         clearTimeout(timer);
 
-                     },
 
-                     freezeEvent: true
 
-                 };
 
-             me.on(listeners);
 
-             return listeners;
 
-         },
 
- <span id='Ext-dom-Element-method-swallowEvent'>        /**
 
- </span>         * Stops the specified event(s) from bubbling and optionally prevents the default action
 
-          * @param {String/String[]} eventName an event / array of events to stop from bubbling
 
-          * @param {Boolean} [preventDefault] true to prevent the default action too
 
-          * @return {Ext.dom.Element} this
 
-          */
 
-         swallowEvent : function(eventName, preventDefault) {
 
-             var me = this,
 
-                 e, eLen;
 
-             function fn(e) {
 
-                 e.stopPropagation();
 
-                 if (preventDefault) {
 
-                     e.preventDefault();
 
-                 }
 
-             }
 
-             if (Ext.isArray(eventName)) {
 
-                 eLen = eventName.length;
 
-                 for (e = 0; e < eLen; e++) {
 
-                     me.on(eventName[e], fn);
 
-                 }
 
-                 return me;
 
-             }
 
-             me.on(eventName, fn);
 
-             return me;
 
-         },
 
- <span id='Ext-dom-Element-method-relayEvent'>        /**
 
- </span>         * Create an event handler on this element such that when the event fires and is handled by this element,
 
-          * it will be relayed to another object (i.e., fired again as if it originated from that object instead).
 
-          * @param {String} eventName The type of event to relay
 
-          * @param {Object} observable Any object that extends {@link Ext.util.Observable} that will provide the context
 
-          * for firing the relayed event
 
-          */
 
-         relayEvent : function(eventName, observable) {
 
-             this.on(eventName, function(e) {
 
-                 observable.fireEvent(eventName, e);
 
-             });
 
-         },
 
- <span id='Ext-dom-Element-method-clean'>        /**
 
- </span>         * Removes Empty, or whitespace filled text nodes. Combines adjacent text nodes.
 
-          * @param {Boolean} [forceReclean=false] By default the element keeps track if it has been cleaned already
 
-          * so you can call this over and over. However, if you update the element and need to force a reclean, you
 
-          * can pass true.
 
-          */
 
-         clean : function(forceReclean) {
 
-             var me   = this,
 
-                 dom  = me.dom,
 
-                 data = (me.$cache || me.getCache()).data,
 
-                 n    = dom.firstChild,
 
-                 ni   = -1,
 
-                 nx;
 
-             if (data.isCleaned && forceReclean !== true) {
 
-                 return me;
 
-             }
 
-             while (n) {
 
-                 nx = n.nextSibling;
 
-                 if (n.nodeType == 3) {
 
-                     // Remove empty/whitespace text nodes
 
-                     if (!(nonSpaceRe.test(n.nodeValue))) {
 
-                         dom.removeChild(n);
 
-                     // Combine adjacent text nodes
 
-                     } else if (nx && nx.nodeType == 3) {
 
-                         n.appendData(Ext.String.trim(nx.data));
 
-                         dom.removeChild(nx);
 
-                         nx = n.nextSibling;
 
-                         n.nodeIndex = ++ni;
 
-                     }
 
-                 } else {
 
-                     // Recursively clean
 
-                     Ext.fly(n).clean();
 
-                     n.nodeIndex = ++ni;
 
-                 }
 
-                 n = nx;
 
-             }
 
-             data.isCleaned = true;
 
-             return me;
 
-         },
 
- <span id='Ext-dom-Element-method-load'>        /**
 
- </span>         * Direct access to the Ext.ElementLoader {@link Ext.ElementLoader#method-load} method. The method takes the same object
 
-          * parameter as {@link Ext.ElementLoader#method-load}
 
-          * @return {Ext.dom.Element} this
 
-          */
 
-         load : function(options) {
 
-             this.getLoader().load(options);
 
-             return this;
 
-         },
 
- <span id='Ext-dom-Element-method-getLoader'>        /**
 
- </span>         * Gets this element's {@link Ext.ElementLoader ElementLoader}
 
-          * @return {Ext.ElementLoader} The loader
 
-          */
 
-         getLoader : function() {
 
-             var me = this,
 
-                 data = (me.$cache || me.getCache()).data,
 
-                 loader = data.loader;
 
-             if (!loader) {
 
-                 data.loader = loader = new Ext.ElementLoader({
 
-                     target: me
 
-                 });
 
-             }
 
-             return loader;
 
-         },
 
- <span id='Ext-dom-Element-method-syncContent'>        /**
 
- </span>         * @private.
 
-          * Currently used for updating grid cells without modifying DOM structure
 
-          *
 
-          * Synchronizes content of this Element with the content of the passed element.
 
-          * 
 
-          * Style and CSS class are copied from source into this Element, and contents are synched
 
-          * recursively. If a child node is a text node, the textual data is copied.
 
-          */
 
-         syncContent: function(source) {
 
-             source = Ext.getDom(source);
 
-             var me = this,
 
-                 sourceNodes = source.childNodes,
 
-                 sourceLen = sourceNodes.length,
 
-                 dest = me.dom,
 
-                 destNodes = dest.childNodes,
 
-                 destLen = destNodes.length,
 
-                 i,  destNode, sourceNode,
 
-                 nodeType;
 
-             // Copy top node's style and CSS class
 
-             dest.style.cssText = source.style.cssText;
 
-             dest.className = source.className;
 
-             // If the number of child nodes does not match, fall back to replacing innerHTML
 
-             if (sourceLen !== destLen) {
 
-                 source.innerHTML = dest.innerHTML;
 
-                 return;
 
-             }
 
-             // Loop through source nodes.
 
-             // If there are fewer, we must remove excess
 
-             for (i = 0; i < sourceLen; i++) {
 
-                 sourceNode = sourceNodes[i];
 
-                 destNode = destNodes[i];
 
-                 nodeType = sourceNode.nodeType;
 
-                 // If node structure is out of sync, just drop innerHTML in and return
 
-                 if (nodeType !== destNode.nodeType || (nodeType === 1 && sourceNode.tagName !== destNode.tagName)) {
 
-                     dest.innerHTML = source.innerHTML;
 
-                     return;
 
-                 }
 
-                 // Update text node
 
-                 if (nodeType === 3) {
 
-                     destNode.data = sourceNode.data;
 
-                 }
 
-                 // Sync element content
 
-                 else {
 
-                     if (sourceNode.id && destNode.id !== sourceNode.id) {
 
-                         destNode.id = sourceNode.id;
 
-                     }
 
-                     destNode.style.cssText = sourceNode.style.cssText;
 
-                     destNode.className = sourceNode.className;
 
-                     Ext.fly(destNode).syncContent(sourceNode);
 
-                 }
 
-             }
 
-         },
 
- <span id='Ext-dom-Element-method-update'>        /**
 
- </span>         * Updates the innerHTML of this element, optionally searching for and processing scripts.
 
-          * @param {String} html The new HTML
 
-          * @param {Boolean} [loadScripts] True to look for and process scripts (defaults to false)
 
-          * @param {Function} [callback] For async script loading you can be notified when the update completes
 
-          * @return {Ext.dom.Element} this
 
-          */
 
-         update : function(html, loadScripts, callback) {
 
-             var me = this,
 
-                 id,
 
-                 dom,
 
-                 interval;
 
-             if (!me.dom) {
 
-                 return me;
 
-             }
 
-             html = html || '';
 
-             dom = me.dom;
 
-             if (loadScripts !== true) {
 
-                 dom.innerHTML = html;
 
-                 Ext.callback(callback, me);
 
-                 return me;
 
-             }
 
-             id  = Ext.id();
 
-             html += '<span id="' + id + '"></span>';
 
-             interval = setInterval(function() {
 
-                 var hd,
 
-                     match,
 
-                     attrs,
 
-                     srcMatch,
 
-                     typeMatch,
 
-                     el,
 
-                     s;
 
-                 if (!(el = DOC.getElementById(id))) {
 
-                     return false;
 
-                 }
 
-                 clearInterval(interval);
 
-                 Ext.removeNode(el);
 
-                 hd = Ext.getHead().dom;
 
-                 while ((match = scriptTagRe.exec(html))) {
 
-                     attrs = match[1];
 
-                     srcMatch = attrs ? attrs.match(srcRe) : false;
 
-                     if (srcMatch && srcMatch[2]) {
 
-                        s = DOC.createElement("script");
 
-                        s.src = srcMatch[2];
 
-                        typeMatch = attrs.match(typeRe);
 
-                        if (typeMatch && typeMatch[2]) {
 
-                            s.type = typeMatch[2];
 
-                        }
 
-                        hd.appendChild(s);
 
-                     } else if (match[2] && match[2].length > 0) {
 
-                         if (window.execScript) {
 
-                            window.execScript(match[2]);
 
-                         } else {
 
-                            window.eval(match[2]);
 
-                         }
 
-                     }
 
-                 }
 
-                 Ext.callback(callback, me);
 
-             }, 20);
 
-             dom.innerHTML = html.replace(replaceScriptTagRe, '');
 
-             return me;
 
-         },
 
-         // inherit docs, overridden so we can add removeAnchor
 
-         removeAllListeners : function() {
 
-             this.removeAnchor();
 
-             Ext.EventManager.removeAll(this.dom);
 
-             return this;
 
-         },
 
- <span id='Ext-dom-Element-method-createProxy'>        /**
 
- </span>         * Creates a proxy element of this element
 
-          * @param {String/Object} config The class name of the proxy element or a DomHelper config object
 
-          * @param {String/HTMLElement} [renderTo] The element or element id to render the proxy to. Defaults to: document.body.
 
-          * @param {Boolean} [matchBox=false] True to align and size the proxy to this element now.
 
-          * @return {Ext.dom.Element} The new proxy element
 
-          */
 
-         createProxy : function(config, renderTo, matchBox) {
 
-             config = (typeof config == 'object') ? config : {tag : "div", cls: config};
 
-             var me = this,
 
-                 proxy = renderTo ? Ext.DomHelper.append(renderTo, config, true) :
 
-                                    Ext.DomHelper.insertBefore(me.dom, config, true);
 
-             proxy.setVisibilityMode(Element.DISPLAY);
 
-             proxy.hide();
 
-             if (matchBox && me.setBox && me.getBox) { // check to make sure Element.position.js is loaded
 
-                proxy.setBox(me.getBox());
 
-             }
 
-             return proxy;
 
-         },
 
-         
 
- <span id='Ext-dom-Element-method-getScopeParent'>        /**
 
- </span>         * Gets the parent node of the current element taking into account Ext.scopeResetCSS
 
-          * @protected
 
-          * @return {HTMLElement} The parent element
 
-          */
 
-         getScopeParent: function() {
 
-             var parent = this.dom.parentNode;
 
-             if (Ext.scopeResetCSS) {
 
-                 // If it's a normal reset, we will be wrapped in a single x-reset element, so grab the parent
 
-                 parent = parent.parentNode;
 
-                 if (!Ext.supports.CSS3LinearGradient || !Ext.supports.CSS3BorderRadius) {
 
-                     // In the cases where we have nbr or nlg, it will be wrapped in a second element,
 
-                     // so we need to go and get the parent again.
 
-                     parent = parent.parentNode;
 
-                 }
 
-             }
 
-             return parent;
 
-         },
 
- <span id='Ext-dom-Element-method-needsTabIndex'>        /**
 
- </span>         * Returns true if this element needs an explicit tabIndex to make it focusable. Input fields, text areas, buttons
 
-          * anchors elements **with an href** etc do not need a tabIndex, but structural elements do.
 
-          */
 
-         needsTabIndex: function() {
 
-             if (this.dom) {
 
-                 if ((this.dom.nodeName === 'a') && (!this.dom.href)) {
 
-                     return true;
 
-                 }
 
-                 return !focusRe.test(this.dom.nodeName);
 
-             }
 
-         },
 
- <span id='Ext-dom-Element-method-focusable'>        /**
 
- </span>         * Checks whether this element can be focused.
 
-          * @return {Boolean} True if the element is focusable
 
-          */
 
-         focusable: function () {
 
-             var dom = this.dom,
 
-                 nodeName = dom.nodeName,
 
-                 canFocus = false;
 
-             if (!dom.disabled) {
 
-                 if (focusRe.test(nodeName)) {
 
-                     if ((nodeName !== 'a') || dom.href) {
 
-                         canFocus = true;
 
-                     }
 
-                 } else {
 
-                     canFocus = !isNaN(dom.tabIndex);
 
-                 }
 
-             }
 
-             return canFocus && this.isVisible(true);
 
-         }
 
-     });
 
-     if (Ext.isIE) {
 
-         El.prototype.getById = function (id, asDom) {
 
-             var dom = this.dom,
 
-                 cacheItem, el, ret;
 
-             if (dom) {
 
-                 // for normal elements getElementById is the best solution, but if the el is
 
-                 // not part of the document.body, we need to use all[]
 
-                 el = (useDocForId && DOC.getElementById(id)) || dom.all[id];
 
-                 if (el) {
 
-                     if (asDom) {
 
-                         ret = el;
 
-                     } else {
 
-                         // calling El.get here is a real hit (2x slower) because it has to
 
-                         // redetermine that we are giving it a dom el.
 
-                         cacheItem = EC[id];
 
-                         if (cacheItem && cacheItem.el) {
 
-                             ret = Ext.updateCacheEntry(cacheItem, el).el;
 
-                         } else {
 
-                             ret = new Element(el);
 
-                         }
 
-                     }
 
-                     return ret;
 
-                 }
 
-             }
 
-             return asDom ? Ext.getDom(id) : El.get(id);
 
-         };
 
-     }
 
-     El.createAlias({
 
- <span id='Ext-dom-Element-method-addListener'>        /**
 
- </span>         * @method
 
-          * @inheritdoc Ext.dom.Element#on
 
-          * Shorthand for {@link #on}.
 
-          */
 
-         addListener: 'on',
 
- <span id='Ext-dom-Element-method-removeListener'>        /**
 
- </span>         * @method
 
-          * @inheritdoc Ext.dom.Element#un
 
-          * Shorthand for {@link #un}.
 
-          */
 
-         removeListener: 'un',
 
- <span id='Ext-dom-Element-method-clearListeners'>        /**
 
- </span>         * @method
 
-          * @inheritdoc Ext.dom.Element#removeAllListeners
 
-          * Alias for {@link #removeAllListeners}.
 
-          */
 
-         clearListeners: 'removeAllListeners'
 
-     });
 
-     El.Fly = AbstractElement.Fly = new Ext.Class({
 
-         extend: El,
 
-         constructor: function(dom) {
 
-             this.dom = dom;
 
-         },
 
-         
 
-         attach: AbstractElement.Fly.prototype.attach
 
-     });
 
-     if (Ext.isIE) {
 
-         Ext.getElementById = function (id) {
 
-             var el = DOC.getElementById(id),
 
-                 detachedBodyEl;
 
-             if (!el && (detachedBodyEl = AbstractElement.detachedBodyEl)) {
 
-                 el = detachedBodyEl.dom.all[id];
 
-             }
 
-             return el;
 
-         };
 
-     } else if (!DOC.querySelector) {
 
-         Ext.getDetachedBody = Ext.getBody;
 
-         Ext.getElementById = function (id) {
 
-             return DOC.getElementById(id);
 
-         };
 
-     }
 
- });
 
- }());
 
- </pre>
 
- </body>
 
- </html>
 
 
  |