| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480 | 
							- <!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-AbstractComponent'>/**
 
- </span> * An abstract base class which provides shared methods for Components across the Sencha product line.
 
-  *
 
-  * Please refer to sub class's documentation
 
-  * @private
 
-  */
 
- Ext.define('Ext.AbstractComponent', {
 
-     /* Begin Definitions */
 
-     requires: [
 
-         'Ext.ComponentQuery',
 
-         'Ext.ComponentManager',
 
-         'Ext.util.ProtoElement'
 
-     ],
 
-     mixins: {
 
-         observable: 'Ext.util.Observable',
 
-         animate: 'Ext.util.Animate',
 
-         elementCt: 'Ext.util.ElementContainer',
 
-         renderable: 'Ext.util.Renderable',
 
-         state: 'Ext.state.Stateful'
 
-     },
 
-     // The "uses" property specifies class which are used in an instantiated AbstractComponent.
 
-     // They do *not* have to be loaded before this class may be defined - that is what "requires" is for.
 
-     uses: [
 
-         'Ext.PluginManager',
 
-         'Ext.Element',
 
-         'Ext.DomHelper',
 
-         'Ext.XTemplate',
 
-         'Ext.ComponentQuery',
 
-         'Ext.ComponentLoader',
 
-         'Ext.EventManager',
 
-         'Ext.layout.Context',
 
-         'Ext.layout.Layout',
 
-         'Ext.layout.component.Auto',
 
-         'Ext.LoadMask',
 
-         'Ext.ZIndexManager'
 
-     ],
 
-     statics: {
 
-         AUTO_ID: 1000,
 
-         pendingLayouts: null,
 
-         layoutSuspendCount: 0,
 
- <span id='Ext-AbstractComponent-method-cancelLayout'>        /**
 
- </span>         * Cancels layout of a component.
 
-          * @param {Ext.Component} comp
 
-          */
 
-         cancelLayout: function(comp, isDestroying) {
 
-             var context = this.runningLayoutContext || this.pendingLayouts;
 
-             if (context) {
 
-                 context.cancelComponent(comp, false, isDestroying);
 
-             }
 
-         },
 
- <span id='Ext-AbstractComponent-static-method-flushLayouts'>        /**
 
- </span>         * Performs all pending layouts that were sceduled while
 
-          * {@link Ext.AbstractComponent#suspendLayouts suspendLayouts} was in effect.
 
-          * @static
 
-          */
 
-         flushLayouts: function () {
 
-             var me = this,
 
-                 context = me.pendingLayouts;
 
-             if (context && context.invalidQueue.length) {
 
-                 me.pendingLayouts = null;
 
-                 me.runningLayoutContext = context;
 
-                 Ext.override(context, {
 
-                     runComplete: function () {
 
-                         // we need to release the layout queue before running any of the
 
-                         // finishedLayout calls because they call afterComponentLayout
 
-                         // which can re-enter by calling doLayout/doComponentLayout.
 
-                         me.runningLayoutContext = null;
 
-                         return this.callParent(); // not "me" here!
 
-                     }
 
-                 });
 
-                 context.run();
 
-             }
 
-         },
 
- <span id='Ext-AbstractComponent-static-method-resumeLayouts'>        /**
 
- </span>         * Resumes layout activity in the whole framework.
 
-          *
 
-          * {@link Ext#suspendLayouts} is alias of {@link Ext.AbstractComponent#suspendLayouts}.
 
-          *
 
-          * @param {Boolean} [flush=false] True to perform all the pending layouts. This can also be
 
-          * achieved by calling {@link Ext.AbstractComponent#flushLayouts flushLayouts} directly.
 
-          * @static
 
-          */
 
-         resumeLayouts: function (flush) {
 
-             if (this.layoutSuspendCount && ! --this.layoutSuspendCount) {
 
-                 if (flush) {
 
-                     this.flushLayouts();
 
-                 }
 
-             }
 
-         },
 
- <span id='Ext-AbstractComponent-static-method-suspendLayouts'>        /**
 
- </span>         * Stops layouts from happening in the whole framework.
 
-          *
 
-          * It's useful to suspend the layout activity while updating multiple components and
 
-          * containers:
 
-          *
 
-          *     Ext.suspendLayouts();
 
-          *     // batch of updates...
 
-          *     Ext.resumeLayouts(true);
 
-          *
 
-          * {@link Ext#suspendLayouts} is alias of {@link Ext.AbstractComponent#suspendLayouts}.
 
-          *
 
-          * See also {@link Ext#batchLayouts} for more abstract way of doing this.
 
-          *
 
-          * @static
 
-          */
 
-         suspendLayouts: function () {
 
-             ++this.layoutSuspendCount;
 
-         },
 
- <span id='Ext-AbstractComponent-static-method-updateLayout'>        /**
 
- </span>         * Updates layout of a component.
 
-          *
 
-          * @param {Ext.Component} comp The component to update.
 
-          * @param {Boolean} [defer=false] True to just queue the layout if this component.
 
-          * @static
 
-          */
 
-         updateLayout: function (comp, defer) {
 
-             var me = this,
 
-                 running = me.runningLayoutContext,
 
-                 pending;
 
-             if (running) {
 
-                 running.queueInvalidate(comp);
 
-             } else {
 
-                 pending = me.pendingLayouts || (me.pendingLayouts = new Ext.layout.Context());
 
-                 pending.queueInvalidate(comp);
 
-                 if (!defer && !me.layoutSuspendCount && !comp.isLayoutSuspended()) {
 
-                     me.flushLayouts();
 
-                 }
 
-             }
 
-         }
 
-     },
 
-     /* End Definitions */
 
- <span id='Ext-AbstractComponent-property-isComponent'>    /**
 
- </span>     * @property {Boolean} isComponent
 
-      * `true` in this class to identify an object as an instantiated Component, or subclass thereof.
 
-      */
 
-     isComponent: true,
 
- <span id='Ext-AbstractComponent-method-getAutoId'>    /**
 
- </span>     * @private
 
-      */
 
-     getAutoId: function() {
 
-         this.autoGenId = true;
 
-         return ++Ext.AbstractComponent.AUTO_ID;
 
-     },
 
-     deferLayouts: false,
 
- <span id='Ext-AbstractComponent-cfg-id'>    /**
 
- </span>     * @cfg {String} id
 
-      * The **unique id of this component instance.**
 
-      *
 
-      * It should not be necessary to use this configuration except for singleton objects in your application. Components
 
-      * created with an id may be accessed globally using {@link Ext#getCmp Ext.getCmp}.
 
-      *
 
-      * Instead of using assigned ids, use the {@link #itemId} config, and {@link Ext.ComponentQuery ComponentQuery}
 
-      * which provides selector-based searching for Sencha Components analogous to DOM querying. The {@link
 
-      * Ext.container.Container Container} class contains {@link Ext.container.Container#down shortcut methods} to query
 
-      * its descendant Components by selector.
 
-      *
 
-      * Note that this id will also be used as the element id for the containing HTML element that is rendered to the
 
-      * page for this component. This allows you to write id-based CSS rules to style the specific instance of this
 
-      * component uniquely, and also to select sub-elements using this component's id as the parent.
 
-      *
 
-      * **Note**: to avoid complications imposed by a unique id also see `{@link #itemId}`.
 
-      *
 
-      * **Note**: to access the container of a Component see `{@link #ownerCt}`.
 
-      *
 
-      * Defaults to an {@link #getId auto-assigned id}.
 
-      */
 
- <span id='Ext-AbstractComponent-property-autoGenId'>     /**
 
- </span>     * @property {Boolean} autoGenId
 
-      * `true` indicates an id was auto-generated rather than provided by configuration.
 
-      * @private
 
-      */
 
-     autoGenId: false,
 
- <span id='Ext-AbstractComponent-cfg-itemId'>    /**
 
- </span>     * @cfg {String} itemId
 
-      * An itemId can be used as an alternative way to get a reference to a component when no object reference is
 
-      * available. Instead of using an `{@link #id}` with {@link Ext}.{@link Ext#getCmp getCmp}, use `itemId` with
 
-      * {@link Ext.container.Container}.{@link Ext.container.Container#getComponent getComponent} which will retrieve
 
-      * `itemId`'s or {@link #id}'s. Since `itemId`'s are an index to the container's internal MixedCollection, the
 
-      * `itemId` is scoped locally to the container -- avoiding potential conflicts with {@link Ext.ComponentManager}
 
-      * which requires a **unique** `{@link #id}`.
 
-      *
 
-      *     var c = new Ext.panel.Panel({ //
 
-      *         {@link Ext.Component#height height}: 300,
 
-      *         {@link #renderTo}: document.body,
 
-      *         {@link Ext.container.Container#layout layout}: 'auto',
 
-      *         {@link Ext.container.Container#cfg-items items}: [
 
-      *             {
 
-      *                 itemId: 'p1',
 
-      *                 {@link Ext.panel.Panel#title title}: 'Panel 1',
 
-      *                 {@link Ext.Component#height height}: 150
 
-      *             },
 
-      *             {
 
-      *                 itemId: 'p2',
 
-      *                 {@link Ext.panel.Panel#title title}: 'Panel 2',
 
-      *                 {@link Ext.Component#height height}: 150
 
-      *             }
 
-      *         ]
 
-      *     })
 
-      *     p1 = c.{@link Ext.container.Container#getComponent getComponent}('p1'); // not the same as {@link Ext#getCmp Ext.getCmp()}
 
-      *     p2 = p1.{@link #ownerCt}.{@link Ext.container.Container#getComponent getComponent}('p2'); // reference via a sibling
 
-      *
 
-      * Also see {@link #id}, `{@link Ext.container.Container#query}`, `{@link Ext.container.Container#down}` and
 
-      * `{@link Ext.container.Container#child}`.
 
-      *
 
-      * **Note**: to access the container of an item see {@link #ownerCt}.
 
-      */
 
- <span id='Ext-AbstractComponent-property-ownerCt'>    /**
 
- </span>     * @property {Ext.Container} ownerCt
 
-      * This Component's owner {@link Ext.container.Container Container} (is set automatically
 
-      * when this Component is added to a Container).
 
-      *
 
-      * **Note**: to access items within the Container see {@link #itemId}.
 
-      * @readonly
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-autoEl'>    /**
 
- </span>     * @cfg {String/Object} autoEl
 
-      * A tag name or {@link Ext.DomHelper DomHelper} spec used to create the {@link #getEl Element} which will
 
-      * encapsulate this Component.
 
-      *
 
-      * You do not normally need to specify this. For the base classes {@link Ext.Component} and
 
-      * {@link Ext.container.Container}, this defaults to **'div'**. The more complex Sencha classes use a more
 
-      * complex DOM structure specified by their own {@link #renderTpl}s.
 
-      *
 
-      * This is intended to allow the developer to create application-specific utility Components encapsulated by
 
-      * different DOM elements. Example usage:
 
-      *
 
-      *     {
 
-      *         xtype: 'component',
 
-      *         autoEl: {
 
-      *             tag: 'img',
 
-      *             src: 'http://www.example.com/example.jpg'
 
-      *         }
 
-      *     }, {
 
-      *         xtype: 'component',
 
-      *         autoEl: {
 
-      *             tag: 'blockquote',
 
-      *             html: 'autoEl is cool!'
 
-      *         }
 
-      *     }, {
 
-      *         xtype: 'container',
 
-      *         autoEl: 'ul',
 
-      *         cls: 'ux-unordered-list',
 
-      *         items: {
 
-      *             xtype: 'component',
 
-      *             autoEl: 'li',
 
-      *             html: 'First list item'
 
-      *         }
 
-      *     }
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-renderTpl'>    /**
 
- </span>     * @cfg {Ext.XTemplate/String/String[]} renderTpl
 
-      * An {@link Ext.XTemplate XTemplate} used to create the internal structure inside this Component's encapsulating
 
-      * {@link #getEl Element}.
 
-      *
 
-      * You do not normally need to specify this. For the base classes {@link Ext.Component} and
 
-      * {@link Ext.container.Container}, this defaults to **`null`** which means that they will be initially rendered
 
-      * with no internal structure; they render their {@link #getEl Element} empty. The more specialized ExtJS and Touch
 
-      * classes which use a more complex DOM structure, provide their own template definitions.
 
-      *
 
-      * This is intended to allow the developer to create application-specific utility Components with customized
 
-      * internal structure.
 
-      *
 
-      * Upon rendering, any created child elements may be automatically imported into object properties using the
 
-      * {@link #renderSelectors} and {@link #cfg-childEls} options.
 
-      * @protected
 
-      */
 
-     renderTpl: '{%this.renderContent(out,values)%}',
 
- <span id='Ext-AbstractComponent-cfg-renderData'>    /**
 
- </span>     * @cfg {Object} renderData
 
-      *
 
-      * The data used by {@link #renderTpl} in addition to the following property values of the component:
 
-      *
 
-      * - id
 
-      * - ui
 
-      * - uiCls
 
-      * - baseCls
 
-      * - componentCls
 
-      * - frame
 
-      *
 
-      * See {@link #renderSelectors} and {@link #cfg-childEls} for usage examples.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-renderSelectors'>    /**
 
- </span>     * @cfg {Object} renderSelectors
 
-      * An object containing properties specifying {@link Ext.DomQuery DomQuery} selectors which identify child elements
 
-      * created by the render process.
 
-      *
 
-      * After the Component's internal structure is rendered according to the {@link #renderTpl}, this object is iterated through,
 
-      * and the found Elements are added as properties to the Component using the `renderSelector` property name.
 
-      *
 
-      * For example, a Component which renderes a title and description into its element:
 
-      *
 
-      *     Ext.create('Ext.Component', {
 
-      *         renderTo: Ext.getBody(),
 
-      *         renderTpl: [
 
-      *             '<h1 class="title">{title}</h1>',
 
-      *             '<p>{desc}</p>'
 
-      *         ],
 
-      *         renderData: {
 
-      *             title: "Error",
 
-      *             desc: "Something went wrong"
 
-      *         },
 
-      *         renderSelectors: {
 
-      *             titleEl: 'h1.title',
 
-      *             descEl: 'p'
 
-      *         },
 
-      *         listeners: {
 
-      *             afterrender: function(cmp){
 
-      *                 // After rendering the component will have a titleEl and descEl properties
 
-      *                 cmp.titleEl.setStyle({color: "red"});
 
-      *             }
 
-      *         }
 
-      *     });
 
-      *
 
-      * For a faster, but less flexible, alternative that achieves the same end result (properties for child elements on the
 
-      * Component after render), see {@link #cfg-childEls} and {@link #addChildEls}.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-childEls'>    /**
 
- </span>     * @cfg {Object[]} childEls
 
-      * An array describing the child elements of the Component. Each member of the array
 
-      * is an object with these properties:
 
-      *
 
-      * - `name` - The property name on the Component for the child element.
 
-      * - `itemId` - The id to combine with the Component's id that is the id of the child element.
 
-      * - `id` - The id of the child element.
 
-      *
 
-      * If the array member is a string, it is equivalent to `{ name: m, itemId: m }`.
 
-      *
 
-      * For example, a Component which renders a title and body text:
 
-      *
 
-      *     Ext.create('Ext.Component', {
 
-      *         renderTo: Ext.getBody(),
 
-      *         renderTpl: [
 
-      *             '<h1 id="{id}-title">{title}</h1>',
 
-      *             '<p>{msg}</p>',
 
-      *         ],
 
-      *         renderData: {
 
-      *             title: "Error",
 
-      *             msg: "Something went wrong"
 
-      *         },
 
-      *         childEls: ["title"],
 
-      *         listeners: {
 
-      *             afterrender: function(cmp){
 
-      *                 // After rendering the component will have a title property
 
-      *                 cmp.title.setStyle({color: "red"});
 
-      *             }
 
-      *         }
 
-      *     });
 
-      *
 
-      * A more flexible, but somewhat slower, approach is {@link #renderSelectors}.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-renderTo'>    /**
 
- </span>     * @cfg {String/HTMLElement/Ext.Element} renderTo
 
-      * Specify the id of the element, a DOM element or an existing Element that this component will be rendered into.
 
-      *
 
-      * **Notes:**
 
-      *
 
-      * Do *not* use this option if the Component is to be a child item of a {@link Ext.container.Container Container}.
 
-      * It is the responsibility of the {@link Ext.container.Container Container}'s
 
-      * {@link Ext.container.Container#layout layout manager} to render and manage its child items.
 
-      *
 
-      * When using this config, a call to render() is not required.
 
-      *
 
-      * See also: {@link #method-render}.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-frame'>    /**
 
- </span>     * @cfg {Boolean} frame
 
-      * Specify as `true` to have the Component inject framing elements within the Component at render time to provide a
 
-      * graphical rounded frame around the Component content.
 
-      *
 
-      * This is only necessary when running on outdated, or non standard-compliant browsers such as Microsoft's Internet
 
-      * Explorer prior to version 9 which do not support rounded corners natively.
 
-      *
 
-      * The extra space taken up by this framing is available from the read only property {@link #frameSize}.
 
-      */
 
- <span id='Ext-AbstractComponent-property-frameSize'>    /**
 
- </span>     * @property {Object} frameSize
 
-      * @readonly
 
-      * Indicates the width of any framing elements which were added within the encapsulating element
 
-      * to provide graphical, rounded borders. See the {@link #frame} config.
 
-      *
 
-      * This is an object containing the frame width in pixels for all four sides of the Component containing the
 
-      * following properties:
 
-      *
 
-      * @property {Number} [frameSize.top=0] The width of the top framing element in pixels.
 
-      * @property {Number} [frameSize.right=0] The width of the right framing element in pixels.
 
-      * @property {Number} [frameSize.bottom=0] The width of the bottom framing element in pixels.
 
-      * @property {Number} [frameSize.left=0] The width of the left framing element in pixels.
 
-      * @property {Number} [frameSize.width=0] The total width of the left and right framing elements in pixels.
 
-      * @property {Number} [frameSize.height=0] The total height of the top and right bottom elements in pixels.
 
-      */
 
-     frameSize: { left: 0, top: 0, right: 0, bottom: 0, width: 0, height: 0 },
 
- <span id='Ext-AbstractComponent-cfg-componentLayout'>    /**
 
- </span>     * @cfg {String/Object} componentLayout
 
-      * The sizing and positioning of a Component's internal Elements is the responsibility of the Component's layout
 
-      * manager which sizes a Component's internal structure in response to the Component being sized.
 
-      *
 
-      * Generally, developers will not use this configuration as all provided Components which need their internal
 
-      * elements sizing (Such as {@link Ext.form.field.Base input fields}) come with their own componentLayout managers.
 
-      *
 
-      * The {@link Ext.layout.container.Auto default layout manager} will be used on instances of the base Ext.Component
 
-      * class which simply sizes the Component's encapsulating element to the height and width specified in the
 
-      * {@link #setSize} method.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-tpl'>    /**
 
- </span>     * @cfg {Ext.XTemplate/Ext.Template/String/String[]} tpl
 
-      * An {@link Ext.Template}, {@link Ext.XTemplate} or an array of strings to form an Ext.XTemplate. Used in
 
-      * conjunction with the `{@link #data}` and `{@link #tplWriteMode}` configurations.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-data'>    /**
 
- </span>     * @cfg {Object} data
 
-      * The initial set of data to apply to the `{@link #tpl}` to update the content area of the Component.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-xtype'>    /**
 
- </span>     * @cfg {String} xtype
 
-      * This property provides a shorter alternative to creating objects than using a full
 
-      * class name. Using `xtype` is the most common way to define component instances,
 
-      * especially in a container. For example, the items in a form containing text fields
 
-      * could be created explicitly like so:
 
-      *
 
-      *      items: [
 
-      *          Ext.create('Ext.form.field.Text', {
 
-      *              fieldLabel: 'Foo'
 
-      *          }),
 
-      *          Ext.create('Ext.form.field.Text', {
 
-      *              fieldLabel: 'Bar'
 
-      *          }),
 
-      *          Ext.create('Ext.form.field.Number', {
 
-      *              fieldLabel: 'Num'
 
-      *          })
 
-      *      ]
 
-      *
 
-      * But by using `xtype`, the above becomes:
 
-      *
 
-      *      items: [
 
-      *          {
 
-      *              xtype: 'textfield',
 
-      *              fieldLabel: 'Foo'
 
-      *          },
 
-      *          {
 
-      *              xtype: 'textfield',
 
-      *              fieldLabel: 'Bar'
 
-      *          },
 
-      *          {
 
-      *              xtype: 'numberfield',
 
-      *              fieldLabel: 'Num'
 
-      *          }
 
-      *      ]
 
-      *
 
-      * When the `xtype` is common to many items, {@link Ext.container.AbstractContainer#defaultType}
 
-      * is another way to specify the `xtype` for all items that don't have an explicit `xtype`:
 
-      *
 
-      *      defaultType: 'textfield',
 
-      *      items: [
 
-      *          { fieldLabel: 'Foo' },
 
-      *          { fieldLabel: 'Bar' },
 
-      *          { fieldLabel: 'Num', xtype: 'numberfield' }
 
-      *      ]
 
-      *
 
-      * Each member of the `items` array is now just a "configuration object". These objects
 
-      * are used to create and configure component instances. A configuration object can be
 
-      * manually used to instantiate a component using {@link Ext#widget}:
 
-      *
 
-      *      var text1 = Ext.create('Ext.form.field.Text', {
 
-      *          fieldLabel: 'Foo'
 
-      *      });
 
-      *
 
-      *      // or alternatively:
 
-      *
 
-      *      var text1 = Ext.widget({
 
-      *          xtype: 'textfield',
 
-      *          fieldLabel: 'Foo'
 
-      *      });
 
-      *
 
-      * This conversion of configuration objects into instantiated components is done when
 
-      * a container is created as part of its {Ext.container.AbstractContainer#initComponent}
 
-      * process. As part of the same process, the `items` array is converted from its raw
 
-      * array form into a {@link Ext.util.MixedCollection} instance.
 
-      *
 
-      * You can define your own `xtype` on a custom {@link Ext.Component component} by specifying
 
-      * the `xtype` property in {@link Ext#define}. For example:
 
-      *
 
-      *     Ext.define('MyApp.PressMeButton', {
 
-      *         extend: 'Ext.button.Button',
 
-      *         xtype: 'pressmebutton',
 
-      *         text: 'Press Me'
 
-      *     });
 
-      *
 
-      * Care should be taken when naming an `xtype` in a custom component because there is
 
-      * a single, shared scope for all xtypes. Third part components should consider using
 
-      * a prefix to avoid collisions.
 
-      *
 
-      *     Ext.define('Foo.form.CoolButton', {
 
-      *         extend: 'Ext.button.Button',
 
-      *         xtype: 'ux-coolbutton',
 
-      *         text: 'Cool!'
 
-      *     });
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-tplWriteMode'>    /**
 
- </span>     * @cfg {String} tplWriteMode
 
-      * The Ext.(X)Template method to use when updating the content area of the Component.
 
-      * See `{@link Ext.XTemplate#overwrite}` for information on default mode.
 
-      */
 
-     tplWriteMode: 'overwrite',
 
- <span id='Ext-AbstractComponent-cfg-baseCls'>    /**
 
- </span>     * @cfg {String} [baseCls='x-component']
 
-      * The base CSS class to apply to this components's element. This will also be prepended to elements within this
 
-      * component like Panel's body will get a class x-panel-body. This means that if you create a subclass of Panel, and
 
-      * you want it to get all the Panels styling for the element and the body, you leave the baseCls x-panel and use
 
-      * componentCls to add specific styling for this component.
 
-      */
 
-     baseCls: Ext.baseCSSPrefix + 'component',
 
- <span id='Ext-AbstractComponent-cfg-componentCls'>    /**
 
- </span>     * @cfg {String} componentCls
 
-      * CSS Class to be added to a components root level element to give distinction to it via styling.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-cls'>    /**
 
- </span>     * @cfg {String} [cls='']
 
-      * An optional extra CSS class that will be added to this component's Element. This can be useful
 
-      * for adding customized styles to the component or any of its children using standard CSS rules.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-overCls'>    /**
 
- </span>     * @cfg {String} [overCls='']
 
-      * An optional extra CSS class that will be added to this component's Element when the mouse moves over the Element,
 
-      * and removed when the mouse moves out. This can be useful for adding customized 'active' or 'hover' styles to the
 
-      * component or any of its children using standard CSS rules.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-disabledCls'>    /**
 
- </span>     * @cfg {String} [disabledCls='x-item-disabled']
 
-      * CSS class to add when the Component is disabled. Defaults to 'x-item-disabled'.
 
-      */
 
-     disabledCls: Ext.baseCSSPrefix + 'item-disabled',
 
- <span id='Ext-AbstractComponent-cfg-ui'>    /**
 
- </span>     * @cfg {String} ui
 
-      * A UI style for a component.
 
-      */
 
-     ui: 'default',
 
- <span id='Ext-AbstractComponent-cfg-uiCls'>    /**
 
- </span>     * @cfg {String[]} uiCls
 
-      * An array of of classNames which are currently applied to this component
 
-      * @private
 
-      */
 
-     uiCls: [],
 
- <span id='Ext-AbstractComponent-cfg-style'>    /**
 
- </span>     * @cfg {String/Object} style
 
-      * A custom style specification to be applied to this component's Element. Should be a valid argument to
 
-      * {@link Ext.Element#applyStyles}.
 
-      *
 
-      *     new Ext.panel.Panel({
 
-      *         title: 'Some Title',
 
-      *         renderTo: Ext.getBody(),
 
-      *         width: 400, height: 300,
 
-      *         layout: 'form',
 
-      *         items: [{
 
-      *             xtype: 'textarea',
 
-      *             style: {
 
-      *                 width: '95%',
 
-      *                 marginBottom: '10px'
 
-      *             }
 
-      *         },
 
-      *         new Ext.button.Button({
 
-      *             text: 'Send',
 
-      *             minWidth: '100',
 
-      *             style: {
 
-      *                 marginBottom: '10px'
 
-      *             }
 
-      *         })
 
-      *         ]
 
-      *     });
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-width'>    /**
 
- </span>     * @cfg {Number} width
 
-      * The width of this component in pixels.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-height'>    /**
 
- </span>     * @cfg {Number} height
 
-      * The height of this component in pixels.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-border'>    /**
 
- </span>     * @cfg {Number/String/Boolean} border
 
-      * Specifies the border size for this component. The border can be a single numeric value to apply to all sides or it can
 
-      * be a CSS style specification for each style, for example: '10 5 3 10'.
 
-      *
 
-      * For components that have no border by default, setting this won't make the border appear by itself.
 
-      * You also need to specify border color and style:
 
-      *
 
-      *     border: 5,
 
-      *     style: {
 
-      *         borderColor: 'red',
 
-      *         borderStyle: 'solid'
 
-      *     }
 
-      * 
 
-      * To turn off the border, use `border: false`.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-padding'>    /**
 
- </span>     * @cfg {Number/String} padding
 
-      * Specifies the padding for this component. The padding can be a single numeric value to apply to all sides or it
 
-      * can be a CSS style specification for each style, for example: '10 5 3 10'.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-margin'>    /**
 
- </span>     * @cfg {Number/String} margin
 
-      * Specifies the margin for this component. The margin can be a single numeric value to apply to all sides or it can
 
-      * be a CSS style specification for each style, for example: '10 5 3 10'.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-hidden'>    /**
 
- </span>     * @cfg {Boolean} hidden
 
-      * True to hide the component.
 
-      */
 
-     hidden: false,
 
- <span id='Ext-AbstractComponent-cfg-disabled'>    /**
 
- </span>     * @cfg {Boolean} disabled
 
-      * True to disable the component.
 
-      */
 
-     disabled: false,
 
- <span id='Ext-AbstractComponent-cfg-draggable'>    /**
 
- </span>     * @cfg {Boolean} [draggable=false]
 
-      * Allows the component to be dragged.
 
-      */
 
- <span id='Ext-AbstractComponent-property-draggable'>    /**
 
- </span>     * @property {Boolean} draggable
 
-      * Indicates whether or not the component can be dragged.
 
-      * @readonly
 
-      */
 
-     draggable: false,
 
- <span id='Ext-AbstractComponent-cfg-floating'>    /**
 
- </span>     * @cfg {Boolean} floating
 
-      * Create the Component as a floating and use absolute positioning.
 
-      *
 
-      * The z-index of floating Components is handled by a ZIndexManager. If you simply render a floating Component into the DOM, it will be managed
 
-      * by the global {@link Ext.WindowManager WindowManager}.
 
-      *
 
-      * If you include a floating Component as a child item of a Container, then upon render, ExtJS will seek an ancestor floating Component to house a new
 
-      * ZIndexManager instance to manage its descendant floaters. If no floating ancestor can be found, the global WindowManager will be used.
 
-      *
 
-      * When a floating Component which has a ZindexManager managing descendant floaters is destroyed, those descendant floaters will also be destroyed.
 
-      */
 
-     floating: false,
 
- <span id='Ext-AbstractComponent-cfg-hideMode'>    /**
 
- </span>     * @cfg {String} hideMode
 
-      * A String which specifies how this Component's encapsulating DOM element will be hidden. Values may be:
 
-      *
 
-      *   - `'display'` : The Component will be hidden using the `display: none` style.
 
-      *   - `'visibility'` : The Component will be hidden using the `visibility: hidden` style.
 
-      *   - `'offsets'` : The Component will be hidden by absolutely positioning it out of the visible area of the document.
 
-      *     This is useful when a hidden Component must maintain measurable dimensions. Hiding using `display` results in a
 
-      *     Component having zero dimensions.
 
-      */
 
-     hideMode: 'display',
 
- <span id='Ext-AbstractComponent-cfg-contentEl'>    /**
 
- </span>     * @cfg {String} contentEl
 
-      * Specify an existing HTML element, or the `id` of an existing HTML element to use as the content for this component.
 
-      *
 
-      * This config option is used to take an existing HTML element and place it in the layout element of a new component
 
-      * (it simply moves the specified DOM element _after the Component is rendered_ to use as the content.
 
-      *
 
-      * **Notes:**
 
-      *
 
-      * The specified HTML element is appended to the layout element of the component _after any configured
 
-      * {@link #html HTML} has been inserted_, and so the document will not contain this element at the time
 
-      * the {@link #event-render} event is fired.
 
-      *
 
-      * The specified HTML element used will not participate in any **`{@link Ext.container.Container#layout layout}`**
 
-      * scheme that the Component may use. It is just HTML. Layouts operate on child
 
-      * **`{@link Ext.container.Container#cfg-items items}`**.
 
-      *
 
-      * Add either the `x-hidden` or the `x-hide-display` CSS class to prevent a brief flicker of the content before it
 
-      * is rendered to the panel.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-html'>    /**
 
- </span>     * @cfg {String/Object} [html='']
 
-      * An HTML fragment, or a {@link Ext.DomHelper DomHelper} specification to use as the layout element content.
 
-      * The HTML content is added after the component is rendered, so the document will not contain this HTML at the time
 
-      * the {@link #event-render} event is fired. This content is inserted into the body _before_ any configured {@link #contentEl}
 
-      * is appended.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-styleHtmlContent'>    /**
 
- </span>     * @cfg {Boolean} styleHtmlContent
 
-      * True to automatically style the html inside the content target of this component (body for panels).
 
-      */
 
-     styleHtmlContent: false,
 
- <span id='Ext-AbstractComponent-cfg-styleHtmlCls'>    /**
 
- </span>     * @cfg {String} [styleHtmlCls='x-html']
 
-      * The class that is added to the content target when you set styleHtmlContent to true.
 
-      */
 
-     styleHtmlCls: Ext.baseCSSPrefix + 'html',
 
- <span id='Ext-AbstractComponent-cfg-minHeight'>    /**
 
- </span>     * @cfg {Number} minHeight
 
-      * The minimum value in pixels which this Component will set its height to.
 
-      *
 
-      * **Warning:** This will override any size management applied by layout managers.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-minWidth'>    /**
 
- </span>     * @cfg {Number} minWidth
 
-      * The minimum value in pixels which this Component will set its width to.
 
-      *
 
-      * **Warning:** This will override any size management applied by layout managers.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-maxHeight'>    /**
 
- </span>     * @cfg {Number} maxHeight
 
-      * The maximum value in pixels which this Component will set its height to.
 
-      *
 
-      * **Warning:** This will override any size management applied by layout managers.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-maxWidth'>    /**
 
- </span>     * @cfg {Number} maxWidth
 
-      * The maximum value in pixels which this Component will set its width to.
 
-      *
 
-      * **Warning:** This will override any size management applied by layout managers.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-loader'>    /**
 
- </span>     * @cfg {Ext.ComponentLoader/Object} loader
 
-      * A configuration object or an instance of a {@link Ext.ComponentLoader} to load remote content
 
-      * for this Component.
 
-      *
 
-      *     Ext.create('Ext.Component', {
 
-      *         loader: {
 
-      *             url: 'content.html',
 
-      *             autoLoad: true
 
-      *         },
 
-      *         renderTo: Ext.getBody()
 
-      *     });
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-autoLoad'>    /**
 
- </span>     * @cfg {Ext.ComponentLoader/Object/String/Boolean} autoLoad
 
-      * An alias for {@link #loader} config which also allows to specify just a string which will be
 
-      * used as the url that's automatically loaded:
 
-      *
 
-      *     Ext.create('Ext.Component', {
 
-      *         autoLoad: 'content.html',
 
-      *         renderTo: Ext.getBody()
 
-      *     });
 
-      *
 
-      * The above is the same as:
 
-      *
 
-      *     Ext.create('Ext.Component', {
 
-      *         loader: {
 
-      *             url: 'content.html',
 
-      *             autoLoad: true
 
-      *         },
 
-      *         renderTo: Ext.getBody()
 
-      *     });
 
-      *
 
-      * Don't use it together with {@link #loader} config.
 
-      *
 
-      * @deprecated 4.1.1 Use {@link #loader} config instead.
 
-      */
 
- <span id='Ext-AbstractComponent-cfg-autoShow'>    /**
 
- </span>     * @cfg {Boolean} autoShow
 
-      * True to automatically show the component upon creation. This config option may only be used for
 
-      * {@link #floating} components or components that use {@link #autoRender}. Defaults to false.
 
-      */
 
-     autoShow: false,
 
- <span id='Ext-AbstractComponent-cfg-autoRender'>    /**
 
- </span>     * @cfg {Boolean/String/HTMLElement/Ext.Element} autoRender
 
-      * This config is intended mainly for non-{@link #floating} Components which may or may not be shown. Instead of using
 
-      * {@link #renderTo} in the configuration, and rendering upon construction, this allows a Component to render itself
 
-      * upon first _{@link Ext.Component#method-show show}_. If {@link #floating} is true, the value of this config is omited as if it is `true`.
 
-      *
 
-      * Specify as `true` to have this Component render to the document body upon first show.
 
-      *
 
-      * Specify as an element, or the ID of an element to have this Component render to a specific element upon first
 
-      * show.
 
-      */
 
-     autoRender: false,
 
-     // @private
 
-     allowDomMove: true,
 
- <span id='Ext-AbstractComponent-cfg-plugins'>    /**
 
- </span>     * @cfg {Object/Object[]} plugins
 
-      * An object or array of objects that will provide custom functionality for this component. The only requirement for
 
-      * a valid plugin is that it contain an init method that accepts a reference of type Ext.Component. When a component
 
-      * is created, if any plugins are available, the component will call the init method on each plugin, passing a
 
-      * reference to itself. Each plugin can then call methods or respond to events on the component as needed to provide
 
-      * its functionality.
 
-      */
 
- <span id='Ext-AbstractComponent-property-rendered'>    /**
 
- </span>     * @property {Boolean} rendered
 
-      * Indicates whether or not the component has been rendered.
 
-      * @readonly
 
-      */
 
-     rendered: false,
 
- <span id='Ext-AbstractComponent-property-componentLayoutCounter'>    /**
 
- </span>     * @property {Number} componentLayoutCounter
 
-      * @private
 
-      * The number of component layout calls made on this object.
 
-      */
 
-     componentLayoutCounter: 0,
 
- <span id='Ext-AbstractComponent-cfg-shrinkWrap'>    /**
 
- </span>     * @cfg {Boolean/Number} [shrinkWrap=2]
 
-      *
 
-      * If this property is a number, it is interpreted as follows:
 
-      *
 
-      *   - 0: Neither width nor height depend on content. This is equivalent to `false`.
 
-      *   - 1: Width depends on content (shrink wraps), but height does not.
 
-      *   - 2: Height depends on content (shrink wraps), but width does not. The default.
 
-      *   - 3: Both width and height depend on content (shrink wrap). This is equivalent to `true`.
 
-      *
 
-      * In CSS terms, shrink-wrap width is analogous to an inline-block element as opposed
 
-      * to a block-level element. Some container layouts always shrink-wrap their children,
 
-      * effectively ignoring this property (e.g., {@link Ext.layout.container.HBox},
 
-      * {@link Ext.layout.container.VBox}, {@link Ext.layout.component.Dock}).
 
-      */
 
-     shrinkWrap: 2,
 
-     weight: 0,
 
- <span id='Ext-AbstractComponent-property-maskOnDisable'>    /**
 
- </span>     * @property {Boolean} maskOnDisable
 
-      * This is an internal flag that you use when creating custom components. By default this is set to true which means
 
-      * that every component gets a mask when it's disabled. Components like FieldContainer, FieldSet, Field, Button, Tab
 
-      * override this property to false since they want to implement custom disable logic.
 
-      */
 
-     maskOnDisable: true,
 
- <span id='Ext-AbstractComponent-property-_isLayoutRoot'>    /**
 
- </span>     * @property {Boolean} [_isLayoutRoot=false]
 
-      * Setting this property to `true` causes the {@link #isLayoutRoot} method to return
 
-      * `true` and stop the search for the top-most component for a layout.
 
-      * @protected
 
-      */
 
-     _isLayoutRoot: false,
 
- <span id='Ext-AbstractComponent-method-constructor'>    /**
 
- </span>     * Creates new Component.
 
-      * @param {Object} config  (optional) Config object.
 
-      */
 
-     constructor : function(config) {
 
-         var me = this,
 
-             i, len, xhooks;
 
-         if (config) {
 
-             Ext.apply(me, config);
 
-             xhooks = me.xhooks;
 
-             if (xhooks) {
 
-                 delete me.xhooks;
 
-                 Ext.override(me, xhooks);
 
-             }
 
-         } else {
 
-             config = {};
 
-         }
 
-         me.initialConfig = config;
 
-         me.mixins.elementCt.constructor.call(me);
 
-         me.addEvents(
 
- <span id='Ext-AbstractComponent-event-beforeactivate'>            /**
 
- </span>             * @event beforeactivate
 
-              * Fires before a Component has been visually activated. Returning false from an event listener can prevent
 
-              * the activate from occurring.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'beforeactivate',
 
- <span id='Ext-AbstractComponent-event-activate'>            /**
 
- </span>             * @event activate
 
-              * Fires after a Component has been visually activated.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'activate',
 
- <span id='Ext-AbstractComponent-event-beforedeactivate'>            /**
 
- </span>             * @event beforedeactivate
 
-              * Fires before a Component has been visually deactivated. Returning false from an event listener can
 
-              * prevent the deactivate from occurring.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'beforedeactivate',
 
- <span id='Ext-AbstractComponent-event-deactivate'>            /**
 
- </span>             * @event deactivate
 
-              * Fires after a Component has been visually deactivated.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'deactivate',
 
- <span id='Ext-AbstractComponent-event-added'>            /**
 
- </span>             * @event added
 
-              * Fires after a Component had been added to a Container.
 
-              * @param {Ext.Component} this
 
-              * @param {Ext.container.Container} container Parent Container
 
-              * @param {Number} pos position of Component
 
-              */
 
-             'added',
 
- <span id='Ext-AbstractComponent-event-disable'>            /**
 
- </span>             * @event disable
 
-              * Fires after the component is disabled.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'disable',
 
- <span id='Ext-AbstractComponent-event-enable'>            /**
 
- </span>             * @event enable
 
-              * Fires after the component is enabled.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'enable',
 
- <span id='Ext-AbstractComponent-event-beforeshow'>            /**
 
- </span>             * @event beforeshow
 
-              * Fires before the component is shown when calling the {@link Ext.Component#method-show show} method. Return false from an event
 
-              * handler to stop the show.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'beforeshow',
 
- <span id='Ext-AbstractComponent-event-show'>            /**
 
- </span>             * @event show
 
-              * Fires after the component is shown when calling the {@link Ext.Component#method-show show} method.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'show',
 
- <span id='Ext-AbstractComponent-event-beforehide'>            /**
 
- </span>             * @event beforehide
 
-              * Fires before the component is hidden when calling the {@link Ext.Component#method-hide hide} method. Return false from an event
 
-              * handler to stop the hide.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'beforehide',
 
- <span id='Ext-AbstractComponent-event-hide'>            /**
 
- </span>             * @event hide
 
-              * Fires after the component is hidden. Fires after the component is hidden when calling the {@link Ext.Component#method-hide hide}
 
-              * method.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'hide',
 
- <span id='Ext-AbstractComponent-event-removed'>            /**
 
- </span>             * @event removed
 
-              * Fires when a component is removed from an Ext.container.Container
 
-              * @param {Ext.Component} this
 
-              * @param {Ext.container.Container} ownerCt Container which holds the component
 
-              */
 
-             'removed',
 
- <span id='Ext-AbstractComponent-event-beforerender'>            /**
 
- </span>             * @event beforerender
 
-              * Fires before the component is {@link #rendered}. Return false from an event handler to stop the
 
-              * {@link #method-render}.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'beforerender',
 
- <span id='Ext-AbstractComponent-event-render'>            /**
 
- </span>             * @event render
 
-              * Fires after the component markup is {@link #rendered}.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'render',
 
- <span id='Ext-AbstractComponent-event-afterrender'>            /**
 
- </span>             * @event afterrender
 
-              * Fires after the component rendering is finished.
 
-              *
 
-              * The afterrender event is fired after this Component has been {@link #rendered}, been postprocesed by any
 
-              * afterRender method defined for the Component.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'afterrender',
 
- <span id='Ext-AbstractComponent-event-boxready'>            /**
 
- </span>             * @event boxready
 
-              * Fires *one time* - after the component has been layed out for the first time at its initial size.
 
-              * @param {Ext.Component} this
 
-              * @param {Number} width The initial width
 
-              * @param {Number} height The initial height
 
-              */
 
-             'boxready',
 
- <span id='Ext-AbstractComponent-event-beforedestroy'>            /**
 
- </span>             * @event beforedestroy
 
-              * Fires before the component is {@link #method-destroy}ed. Return false from an event handler to stop the
 
-              * {@link #method-destroy}.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'beforedestroy',
 
- <span id='Ext-AbstractComponent-event-destroy'>            /**
 
- </span>             * @event destroy
 
-              * Fires after the component is {@link #method-destroy}ed.
 
-              * @param {Ext.Component} this
 
-              */
 
-             'destroy',
 
- <span id='Ext-AbstractComponent-event-resize'>            /**
 
- </span>             * @event resize
 
-              * Fires after the component is resized. Note that this does *not* fire when the component is first layed out at its initial
 
-              * size. To hook that point in the lifecycle, use the {@link #boxready} event.
 
-              * @param {Ext.Component} this
 
-              * @param {Number} width The new width that was set
 
-              * @param {Number} height The new height that was set
 
-              * @param {Number} oldWidth The previous width
 
-              * @param {Number} oldHeight The previous height
 
-              */
 
-             'resize',
 
- <span id='Ext-AbstractComponent-event-move'>            /**
 
- </span>             * @event move
 
-              * Fires after the component is moved.
 
-              * @param {Ext.Component} this
 
-              * @param {Number} x The new x position
 
-              * @param {Number} y The new y position
 
-              */
 
-              'move',
 
- <span id='Ext-AbstractComponent-event-focus'>            /**
 
- </span>             * @event focus
 
-              * Fires when this Component receives focus.
 
-              * @param {Ext.Component} this
 
-              * @param {Ext.EventObject} The focus event.
 
-              */
 
-             'focus',
 
- <span id='Ext-AbstractComponent-event-blur'>            /**
 
- </span>             * @event blur
 
-              * Fires when this Component loses focus.
 
-              * @param {Ext.Component} this
 
-              * @param {Ext.EventObject} The blur event.
 
-              */
 
-             'blur'
 
-         );
 
-         me.getId();
 
-         me.setupProtoEl();
 
-         // initComponent, beforeRender, or event handlers may have set the style or cls property since the protoEl was set up
 
-         // so we must apply styles and classes here too.
 
-         if (me.cls) {
 
-             me.initialCls = me.cls;
 
-             me.protoEl.addCls(me.cls);
 
-         }
 
-         if (me.style) {
 
-             me.initialStyle = me.style;
 
-             me.protoEl.setStyle(me.style);
 
-         }
 
-         me.mons = [];
 
-         me.renderData = me.renderData || {};
 
-         me.renderSelectors = me.renderSelectors || {};
 
-         if (me.plugins) {
 
-             me.plugins = me.constructPlugins();
 
-         }
 
-         // we need this before we call initComponent
 
-         if (!me.hasListeners) {
 
-             me.hasListeners = new me.HasListeners();
 
-         }
 
-         me.initComponent();
 
-         // ititComponent gets a chance to change the id property before registering
 
-         Ext.ComponentManager.register(me);
 
-         // Dont pass the config so that it is not applied to 'this' again
 
-         me.mixins.observable.constructor.call(me);
 
-         me.mixins.state.constructor.call(me, config);
 
-         // Save state on resize.
 
-         this.addStateEvents('resize');
 
-         // Move this into Observable?
 
-         if (me.plugins) {
 
-             for (i = 0, len = me.plugins.length; i < len; i++) {
 
-                 me.plugins[i] = me.initPlugin(me.plugins[i]);
 
-             }
 
-         }
 
-         me.loader = me.getLoader();
 
-         if (me.renderTo) {
 
-             me.render(me.renderTo);
 
-             // EXTJSIV-1935 - should be a way to do afterShow or something, but that
 
-             // won't work. Likewise, rendering hidden and then showing (w/autoShow) has
 
-             // implications to afterRender so we cannot do that.
 
-         }
 
-         // Auto show only works unilaterally on *uncontained* Components.
 
-         // If contained, then it is the Container's responsibility to do the showing at next layout time.
 
-         if (me.autoShow && !me.isContained) {
 
-             me.show();
 
-         }
 
-         //<debug>
 
-         if (Ext.isDefined(me.disabledClass)) {
 
-             if (Ext.isDefined(Ext.global.console)) {
 
-                 Ext.global.console.warn('Ext.Component: disabledClass has been deprecated. Please use disabledCls.');
 
-             }
 
-             me.disabledCls = me.disabledClass;
 
-             delete me.disabledClass;
 
-         }
 
-         //</debug>
 
-     },
 
-     initComponent: function () {
 
-         // This is called again here to allow derived classes to add plugin configs to the
 
-         // plugins array before calling down to this, the base initComponent.
 
-         this.plugins = this.constructPlugins();
 
-         // this will properly (ignore or) constrain the configured width/height to their
 
-         // min/max values for consistency.
 
-         this.setSize(this.width, this.height);
 
-     },
 
- <span id='Ext-AbstractComponent-method-getState'>    /**
 
- </span>     * The supplied default state gathering method for the AbstractComponent class.
 
-      *
 
-      * This method returns dimension settings such as `flex`, `anchor`, `width` and `height` along with `collapsed`
 
-      * state.
 
-      *
 
-      * Subclasses which implement more complex state should call the superclass's implementation, and apply their state
 
-      * to the result if this basic state is to be saved.
 
-      *
 
-      * Note that Component state will only be saved if the Component has a {@link #stateId} and there as a StateProvider
 
-      * configured for the document.
 
-      *
 
-      * @return {Object}
 
-      */
 
-     getState: function() {
 
-         var me = this,
 
-             state = null,
 
-             sizeModel = me.getSizeModel();
 
-         if (sizeModel.width.configured) {
 
-             state = me.addPropertyToState(state, 'width');
 
-         }
 
-         if (sizeModel.height.configured) {
 
-             state = me.addPropertyToState(state, 'height');
 
-         }
 
-         return state;
 
-     },
 
- <span id='Ext-AbstractComponent-method-addPropertyToState'>    /**
 
- </span>     * Save a property to the given state object if it is not its default or configured
 
-      * value.
 
-      *
 
-      * @param {Object} state The state object
 
-      * @param {String} propName The name of the property on this object to save.
 
-      * @param {String} [value] The value of the state property (defaults to `this[propName]`).
 
-      * @return {Boolean} The state object or a new object if state was null and the property
 
-      * was saved.
 
-      * @protected
 
-      */
 
-     addPropertyToState: function (state, propName, value) {
 
-         var me = this,
 
-             len = arguments.length;
 
-         // If the property is inherited, it is a default and we don't want to save it to
 
-         // the state, however if we explicitly specify a value, always save it
 
-         if (len == 3 || me.hasOwnProperty(propName)) {
 
-             if (len < 3) {
 
-                 value = me[propName];
 
-             }
 
-             // If the property has the same value as was initially configured, again, we
 
-             // don't want to save it.
 
-             if (value !== me.initialConfig[propName]) {
 
-                 (state || (state = {}))[propName] = value;
 
-             }
 
-         }
 
-         return state;
 
-     },
 
-     show: Ext.emptyFn,
 
-     animate: function(animObj) {
 
-         var me = this,
 
-             hasToWidth,
 
-             hasToHeight,
 
-             toHeight,
 
-             toWidth,
 
-             to,
 
-             clearWidth,
 
-             clearHeight,
 
-             curWidth, w, curHeight, h, needsResize;
 
-         animObj = animObj || {};
 
-         to = animObj.to || {};
 
-         if (Ext.fx.Manager.hasFxBlock(me.id)) {
 
-             return me;
 
-         }
 
-         hasToWidth = Ext.isDefined(to.width);
 
-         if (hasToWidth) {
 
-             toWidth = Ext.Number.constrain(to.width, me.minWidth, me.maxWidth);
 
-         }
 
-         hasToHeight = Ext.isDefined(to.height);
 
-         if (hasToHeight) {
 
-             toHeight = Ext.Number.constrain(to.height, me.minHeight, me.maxHeight);
 
-         }
 
-         // Special processing for animating Component dimensions.
 
-         if (!animObj.dynamic && (hasToWidth || hasToHeight)) {
 
-             curWidth = (animObj.from ? animObj.from.width : undefined) || me.getWidth();
 
-             w = curWidth;
 
-             curHeight = (animObj.from ? animObj.from.height : undefined) || me.getHeight();
 
-             h = curHeight;
 
-             needsResize = false;
 
-             if (hasToHeight && toHeight > curHeight) {
 
-                 h = toHeight;
 
-                 needsResize = true;
 
-             }
 
-             if (hasToWidth && toWidth > curWidth) {
 
-                 w = toWidth;
 
-                 needsResize = true;
 
-             }
 
-             // If any dimensions are being increased, we must resize the internal structure
 
-             // of the Component, but then clip it by sizing its encapsulating element back to original dimensions.
 
-             // The animation will then progressively reveal the larger content.
 
-             if (needsResize) {
 
-                 clearWidth = !Ext.isNumber(me.width);
 
-                 clearHeight = !Ext.isNumber(me.height);
 
-                 me.setSize(w, h);
 
-                 me.el.setSize(curWidth, curHeight);
 
-                 if (clearWidth) {
 
-                     delete me.width;
 
-                 }
 
-                 if (clearHeight) {
 
-                     delete me.height;
 
-                 }
 
-             }
 
-             if (hasToWidth) {
 
-                 to.width = toWidth;
 
-             }
 
-             if (hasToHeight) {
 
-                 to.height = toHeight;
 
-             }
 
-         }
 
-         return me.mixins.animate.animate.apply(me, arguments);
 
-     },
 
-     onHide: function() {
 
-         this.updateLayout({ isRoot: false });
 
-     },
 
-     onShow : function() {
 
-         this.updateLayout({ isRoot: false });
 
-     },
 
-     constructPlugin: function(plugin) {
 
-         
 
-         // If a config object with a ptype
 
-         if (plugin.ptype && typeof plugin.init != 'function') {
 
-             plugin.cmp = this;
 
-             plugin = Ext.PluginManager.create(plugin);
 
-         }
 
-         // Just a ptype
 
-         else if (typeof plugin == 'string') {
 
-             plugin = Ext.PluginManager.create({
 
-                 ptype: plugin,
 
-                 cmp: this
 
-             });
 
-         }
 
-         return plugin;
 
-     },
 
- <span id='Ext-AbstractComponent-method-constructPlugins'>    /**
 
- </span>     * @private
 
-      * Returns an array of fully constructed plugin instances. This converts any configs into their
 
-      * appropriate instances.
 
-      *
 
-      * It does not mutate the plugins array. It creates a new array.
 
-      *
 
-      * This is borrowed by {@link Ext.grid.Lockable Lockable} which clones and distributes Plugins
 
-      * to both child grids of a locking grid, so must keep to that contract.
 
-      */
 
-     constructPlugins: function() {
 
-         var me = this,
 
-             plugins,
 
-             result = [],
 
-             i, len;
 
-         if (me.plugins) {
 
-             plugins = Ext.isArray(me.plugins) ? me.plugins : [ me.plugins ];
 
-             for (i = 0, len = plugins.length; i < len; i++) {
 
-                 // this just returns already-constructed plugin instances...
 
-                 result[i] = me.constructPlugin(plugins[i]);
 
-             }
 
-             return result;
 
-         }
 
-     },
 
-     // @private
 
-     initPlugin : function(plugin) {
 
-         plugin.init(this);
 
-         return plugin;
 
-     },
 
- <span id='Ext-AbstractComponent-method-updateAria'>    /**
 
- </span>     * @private
 
-      * Injected as an override by Ext.Aria.initialize
 
-      */
 
-     updateAria: Ext.emptyFn,
 
- <span id='Ext-AbstractComponent-method-registerFloatingItem'>    /**
 
- </span>     * Called by Component#doAutoRender
 
-      *
 
-      * Register a Container configured `floating: true` with this Component's {@link Ext.ZIndexManager ZIndexManager}.
 
-      *
 
-      * Components added in ths way will not participate in any layout, but will be rendered
 
-      * upon first show in the way that {@link Ext.window.Window Window}s are.
 
-      */
 
-     registerFloatingItem: function(cmp) {
 
-         var me = this;
 
-         if (!me.floatingDescendants) {
 
-             me.floatingDescendants = new Ext.ZIndexManager(me);
 
-         }
 
-         me.floatingDescendants.register(cmp);
 
-     },
 
-     unregisterFloatingItem: function(cmp) {
 
-         var me = this;
 
-         if (me.floatingDescendants) {
 
-             me.floatingDescendants.unregister(cmp);
 
-         }
 
-     },
 
-     layoutSuspendCount: 0,
 
-     suspendLayouts: function () {
 
-         var me = this;
 
-         if (!me.rendered) {
 
-             return;
 
-         }
 
-         if (++me.layoutSuspendCount == 1) {
 
-             me.suspendLayout = true;
 
-         }
 
-     },
 
-     resumeLayouts: function (flushOptions) {
 
-         var me = this;
 
-         if (!me.rendered) {
 
-             return;
 
-         }
 
-         if (! --me.layoutSuspendCount) {
 
-             me.suspendLayout = false;
 
-             if (flushOptions && !me.isLayoutSuspended()) {
 
-                 me.updateLayout(flushOptions);
 
-             }
 
-         }
 
-     },
 
-     setupProtoEl: function() {
 
-         var me = this,
 
-             cls = [ me.baseCls, me.getComponentLayout().targetCls ];
 
-         //<deprecated since=0.99>
 
-         if (Ext.isDefined(me.cmpCls)) {
 
-             if (Ext.isDefined(Ext.global.console)) {
 
-                 Ext.global.console.warn('Ext.Component: cmpCls has been deprecated. Please use componentCls.');
 
-             }
 
-             me.componentCls = me.cmpCls;
 
-             delete me.cmpCls;
 
-         }
 
-         //</deprecated>
 
-         if (me.componentCls) {
 
-             cls.push(me.componentCls);
 
-         } else {
 
-             me.componentCls = me.baseCls;
 
-         }
 
-         me.protoEl = new Ext.util.ProtoElement({
 
-             cls: cls.join(' ') // in case any of the parts have multiple classes
 
-         });
 
-     },
 
- <span id='Ext-AbstractComponent-method-setUI'>    /**
 
- </span>     * Sets the UI for the component. This will remove any existing UIs on the component. It will also loop through any
 
-      * uiCls set on the component and rename them so they include the new UI
 
-      * @param {String} ui The new UI for the component
 
-      */
 
-     setUI: function(ui) {
 
-         var me = this,
 
-             oldUICls = Ext.Array.clone(me.uiCls),
 
-             newUICls = [],
 
-             classes = [],
 
-             cls,
 
-             i;
 
-         //loop through all existing uiCls and update the ui in them
 
-         for (i = 0; i < oldUICls.length; i++) {
 
-             cls = oldUICls[i];
 
-             classes = classes.concat(me.removeClsWithUI(cls, true));
 
-             newUICls.push(cls);
 
-         }
 
-         if (classes.length) {
 
-             me.removeCls(classes);
 
-         }
 
-         //remove the UI from the element
 
-         me.removeUIFromElement();
 
-         //set the UI
 
-         me.ui = ui;
 
-         //add the new UI to the element
 
-         me.addUIToElement();
 
-         //loop through all existing uiCls and update the ui in them
 
-         classes = [];
 
-         for (i = 0; i < newUICls.length; i++) {
 
-             cls = newUICls[i];
 
-             classes = classes.concat(me.addClsWithUI(cls, true));
 
-         }
 
-         if (classes.length) {
 
-             me.addCls(classes);
 
-         }
 
-         // Changing the ui can lead to significant changes to a component's appearance, so the layout needs to be
 
-         // updated. Internally most calls to setUI are pre-render. Buttons are a notable exception as setScale changes
 
-         // the ui and often requires the layout to be updated.
 
-         if (me.rendered) {
 
-             me.updateLayout();
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-addClsWithUI'>    /**
 
- </span>     * Adds a cls to the uiCls array, which will also call {@link #addUIClsToElement} and adds to all elements of this
 
-      * component.
 
-      * @param {String/String[]} classes A string or an array of strings to add to the uiCls
 
-      * @param {Object} skip (Boolean) skip True to skip adding it to the class and do it later (via the return)
 
-      */
 
-     addClsWithUI: function(classes, skip) {
 
-         var me = this,
 
-             clsArray = [],
 
-             length,
 
-             i = 0,
 
-             cls;
 
-         if (typeof classes === "string") {
 
-             classes = (classes.indexOf(' ') < 0) ? [classes] : Ext.String.splitWords(classes);
 
-         }
 
-         length = classes.length;
 
-         me.uiCls = Ext.Array.clone(me.uiCls);
 
-         for (; i < length; i++) {
 
-             cls = classes[i];
 
-             if (cls && !me.hasUICls(cls)) {
 
-                 me.uiCls.push(cls);
 
-                 clsArray = clsArray.concat(me.addUIClsToElement(cls));
 
-             }
 
-         }
 
-         if (skip !== true) {
 
-             me.addCls(clsArray);
 
-         }
 
-         return clsArray;
 
-     },
 
- <span id='Ext-AbstractComponent-method-removeClsWithUI'>    /**
 
- </span>     * Removes a cls to the uiCls array, which will also call {@link #removeUIClsFromElement} and removes it from all
 
-      * elements of this component.
 
-      * @param {String/String[]} cls A string or an array of strings to remove to the uiCls
 
-      */
 
-     removeClsWithUI: function(classes, skip) {
 
-         var me = this,
 
-             clsArray = [],
 
-             i = 0,
 
-             length, cls;
 
-         if (typeof classes === "string") {
 
-             classes = (classes.indexOf(' ') < 0) ? [classes] : Ext.String.splitWords(classes);
 
-         }
 
-         length = classes.length;
 
-         for (i = 0; i < length; i++) {
 
-             cls = classes[i];
 
-             if (cls && me.hasUICls(cls)) {
 
-                 me.uiCls = Ext.Array.remove(me.uiCls, cls);
 
-                 clsArray = clsArray.concat(me.removeUIClsFromElement(cls));
 
-             }
 
-         }
 
-         if (skip !== true) {
 
-             me.removeCls(clsArray);
 
-         }
 
-         return clsArray;
 
-     },
 
- <span id='Ext-AbstractComponent-method-hasUICls'>    /**
 
- </span>     * Checks if there is currently a specified uiCls
 
-      * @param {String} cls The cls to check
 
-      */
 
-     hasUICls: function(cls) {
 
-         var me = this,
 
-             uiCls = me.uiCls || [];
 
-         return Ext.Array.contains(uiCls, cls);
 
-     },
 
-     frameElementsArray: ['tl', 'tc', 'tr', 'ml', 'mc', 'mr', 'bl', 'bc', 'br'],
 
- <span id='Ext-AbstractComponent-method-addUIClsToElement'>    /**
 
- </span>     * Method which adds a specified UI + uiCls to the components element. Can be overridden to remove the UI from more
 
-      * than just the components element.
 
-      * @param {String} ui The UI to remove from the element
 
-      */
 
-     addUIClsToElement: function(cls) {
 
-         var me = this,
 
-             baseClsUi = me.baseCls + '-' + me.ui + '-' + cls,
 
-             result = [Ext.baseCSSPrefix + cls, me.baseCls + '-' + cls, baseClsUi],
 
-             frameElementCls = me.frameElementCls,
 
-             frameElementsArray, frameElementsLength, i, el, frameElement, c;
 
-         if (me.frame && !Ext.supports.CSS3BorderRadius) {
 
-             // define each element of the frame
 
-             frameElementsArray = me.frameElementsArray;
 
-             frameElementsLength = frameElementsArray.length;
 
-             i = 0;
 
-             // loop through each of them, and if they are defined add the ui
 
-             for (; i < frameElementsLength; i++) {
 
-                 frameElement = frameElementsArray[i];
 
-                 el = me['frame' + frameElement.toUpperCase()];
 
-                 c = baseClsUi + '-' + frameElement;
 
-                 if (el && el.dom) {
 
-                     el.addCls(c);
 
-                 } else if (Ext.Array.indexOf(frameElementCls[frameElement], c) == -1) {
 
-                     frameElementCls[frameElement].push(c);
 
-                 }
 
-             }
 
-         }
 
-         me.frameElementCls = frameElementCls;
 
-         return result;
 
-     },
 
- <span id='Ext-AbstractComponent-method-removeUIClsFromElement'>    /**
 
- </span>     * Method which removes a specified UI + uiCls from the components element. The cls which is added to the element
 
-      * will be: `this.baseCls + '-' + ui`
 
-      * @param {String} ui The UI to add to the element
 
-      */
 
-     removeUIClsFromElement: function(cls) {
 
-         var me = this,
 
-             baseClsUi = me.baseCls + '-' + me.ui + '-' + cls,
 
-             result = [Ext.baseCSSPrefix + cls, me.baseCls + '-' + cls, baseClsUi],
 
-             frameElementCls = me.frameElementCls,
 
-             frameElementsArray, frameElementsLength, i, el, frameElement, c;
 
-         if (me.frame && !Ext.supports.CSS3BorderRadius) {
 
-             // define each element of the frame
 
-             frameElementsArray = me.frameElementsArray;
 
-             frameElementsLength = frameElementsArray.length;
 
-             i = 0;
 
-             // loop through each of them, and if they are defined add the ui
 
-             for (; i < frameElementsLength; i++) {
 
-                 frameElement = frameElementsArray[i];
 
-                 el = me['frame' + frameElement.toUpperCase()];
 
-                 c = baseClsUi + '-' + frameElement;
 
-                 if (el && el.dom) {
 
-                     el.addCls(c);
 
-                 } else {
 
-                     Ext.Array.remove(frameElementCls[frameElement], c);
 
-                 }
 
-             }
 
-         }
 
-         me.frameElementCls = frameElementCls;
 
-         return result;
 
-     },
 
- <span id='Ext-AbstractComponent-method-addUIToElement'>    /**
 
- </span>     * Method which adds a specified UI to the components element.
 
-      * @private
 
-      */
 
-     addUIToElement: function() {
 
-         var me = this,
 
-             baseClsUI = me.baseCls + '-' + me.ui,
 
-             frameElementCls = me.frameElementCls,
 
-             frameElementsArray, frameElementsLength, i, el, frameElement, c;
 
-         me.addCls(baseClsUI);
 
-         if (me.frame && !Ext.supports.CSS3BorderRadius) {
 
-             // define each element of the frame
 
-             frameElementsArray = me.frameElementsArray;
 
-             frameElementsLength = frameElementsArray.length;
 
-             i = 0;
 
-             // loop through each of them, and if they are defined add the ui
 
-             for (; i < frameElementsLength; i++) {
 
-                 frameElement = frameElementsArray[i];
 
-                 el = me['frame' + frameElement.toUpperCase()];
 
-                 c = baseClsUI + '-' + frameElement;
 
-                 if (el) {
 
-                     el.addCls(c);
 
-                 } else {
 
-                     if (!Ext.Array.contains(frameElementCls[frameElement], c)) {
 
-                         frameElementCls[frameElement].push(c);
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-removeUIFromElement'>    /**
 
- </span>     * Method which removes a specified UI from the components element.
 
-      * @private
 
-      */
 
-     removeUIFromElement: function() {
 
-         var me = this,
 
-             baseClsUI = me.baseCls + '-' + me.ui,
 
-             frameElementCls = me.frameElementCls,
 
-             frameElementsArray, frameElementsLength, i, el, frameElement, c;
 
-         me.removeCls(baseClsUI);
 
-         if (me.frame && !Ext.supports.CSS3BorderRadius) {
 
-             // define each element of the frame
 
-             frameElementsArray = me.frameElementsArray;
 
-             frameElementsLength = frameElementsArray.length;
 
-             i = 0;
 
-             for (; i < frameElementsLength; i++) {
 
-                 frameElement = frameElementsArray[i];
 
-                 el = me['frame' + frameElement.toUpperCase()];
 
-                 c = baseClsUI + '-' + frameElement;
 
-                 if (el) {
 
-                     el.removeCls(c);
 
-                 } else {
 
-                     Ext.Array.remove(frameElementCls[frameElement], c);
 
-                 }
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-getTpl'>    /**
 
- </span>     * @private
 
-      */
 
-     getTpl: function(name) {
 
-         return Ext.XTemplate.getTpl(this, name);
 
-     },
 
- <span id='Ext-AbstractComponent-method-initStyles'>    /**
 
- </span>     * Converts style definitions to String.
 
-      * @return {String} A CSS style string with style, padding, margin and border.
 
-      * @private
 
-      */
 
-     initStyles: function(targetEl) {
 
-         var me = this,
 
-             Element = Ext.Element,
 
-             padding = me.padding,
 
-             margin = me.margin,
 
-             x = me.x,
 
-             y = me.y,
 
-             width, height;
 
-         // Convert the padding, margin and border properties from a space separated string
 
-         // into a proper style string
 
-         if (padding !== undefined) {
 
-             targetEl.setStyle('padding', Element.unitizeBox((padding === true) ? 5 : padding));
 
-         }
 
-         if (margin !== undefined) {
 
-             targetEl.setStyle('margin', Element.unitizeBox((margin === true) ? 5 : margin));
 
-         }
 
-         if (me.border !== undefined) {
 
-             me.setBorder(me.border, targetEl);
 
-         }
 
-         // initComponent, beforeRender, or event handlers may have set the style or cls property since the protoEl was set up
 
-         // so we must apply styles and classes here too.
 
-         if (me.cls && me.cls != me.initialCls) {
 
-             targetEl.addCls(me.cls);
 
-             delete me.cls;
 
-             delete me.initialCls;
 
-         }
 
-         if (me.style && me.style != me.initialStyle) {
 
-             targetEl.setStyle(me.style);
 
-             delete me.style;
 
-             delete me.initialStyle;
 
-         }
 
-         if (x !== undefined) {
 
-             targetEl.setStyle('left', (typeof x == 'number') ? (x + 'px') : x);
 
-         }
 
-         if (y !== undefined) {
 
-             targetEl.setStyle('top', (typeof y == 'number') ? (y + 'px') : y);
 
-         }
 
-         // Framed components need their width/height to apply to the frame, which is
 
-         // best handled in layout at present.
 
-         if (!me.getFrameInfo()) {
 
-             width = me.width;
 
-             height = me.height;
 
-             // If we're using the content box model, we also cannot assign numeric initial sizes since we do not know the border widths to subtract
 
-             if (width !== undefined) {
 
-                 if (typeof width === 'number') {
 
-                     if (Ext.isBorderBox) {
 
-                         targetEl.setStyle('width', width + 'px');
 
-                     }
 
-                 } else {
 
-                     targetEl.setStyle('width', width);
 
-                 }
 
-             }
 
-             if (height !== undefined) {
 
-                 if (typeof height === 'number') {
 
-                     if (Ext.isBorderBox) {
 
-                         targetEl.setStyle('height', height + 'px');
 
-                     }
 
-                 } else {
 
-                     targetEl.setStyle('height', height);
 
-                 }
 
-             }
 
-         }
 
-     },
 
-     // @private
 
-     initEvents : function() {
 
-         var me = this,
 
-             afterRenderEvents = me.afterRenderEvents,
 
-             el,
 
-             property,
 
-             fn = function(listeners){
 
-                 me.mon(el, listeners);
 
-             };
 
-         if (afterRenderEvents) {
 
-             for (property in afterRenderEvents) {
 
-                 if (afterRenderEvents.hasOwnProperty(property)) {
 
-                     el = me[property];
 
-                     if (el && el.on) {
 
-                         Ext.each(afterRenderEvents[property], fn);
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         // This will add focus/blur listeners to the getFocusEl() element if that is naturally focusable.
 
-         // If *not* naturally focusable, then the FocusManager must be enabled to get it to listen for focus so that
 
-         // the FocusManager can track and highlight focus.
 
-         me.addFocusListener();
 
-     },
 
- <span id='Ext-AbstractComponent-method-addFocusListener'>    /**
 
- </span>     * @private
 
-      * <p>Sets up the focus listener on this Component's {@link #getFocusEl focusEl} if it has one.</p>
 
-      * <p>Form Components which must implicitly participate in tabbing order usually have a naturally focusable
 
-      * element as their {@link #getFocusEl focusEl}, and it is the DOM event of that recieving focus which drives
 
-      * the Component's onFocus handling, and the DOM event of it being blurred which drives the onBlur handling.</p>
 
-      * <p>If the {@link #getFocusEl focusEl} is <b>not</b> naturally focusable, then the listeners are only added
 
-      * if the {@link Ext.FocusManager FocusManager} is enabled.</p>
 
-      */
 
-     addFocusListener: function() {
 
-         var me = this,
 
-             focusEl = me.getFocusEl(),
 
-             needsTabIndex;
 
-         // All Containers may be focusable, not only "form" type elements, but also
 
-         // Panels, Toolbars, Windows etc.
 
-         // Usually, the <DIV> element they will return as their focusEl will not be able to recieve focus
 
-         // However, if the FocusManager is invoked, its non-default navigation handlers (invoked when
 
-         // tabbing/arrowing off of certain Components) may explicitly focus a Panel or Container or FieldSet etc.
 
-         // Add listeners to the focus and blur events on the focus element
 
-         // If this Component returns a focusEl, we might need to add a focus listener to it.
 
-         if (focusEl) {
 
-             // getFocusEl might return a Component if a Container wishes to delegate focus to a descendant.
 
-             // Window can do this via its defaultFocus configuration which can reference a Button.
 
-             if (focusEl.isComponent) {
 
-                 return focusEl.addFocusListener();
 
-             }
 
-             // If the focusEl is naturally focusable, then we always need a focus listener to drive the Component's
 
-             // onFocus handling.
 
-             // If *not* naturally focusable, then we only need the focus listener if the FocusManager is enabled.
 
-             needsTabIndex = focusEl.needsTabIndex();
 
-             if (!me.focusListenerAdded && (!needsTabIndex || Ext.FocusManager.enabled)) {
 
-                 if (needsTabIndex) {
 
-                     focusEl.dom.tabIndex = -1;
 
-                 }
 
-                 focusEl.on({
 
-                     focus: me.onFocus,
 
-                     blur: me.onBlur,
 
-                     scope: me
 
-                 });
 
-                 me.focusListenerAdded = true;
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-getFocusEl'>    /**
 
- </span>     * @private
 
-      * <p>Returns the focus holder element associated with this Component. At the Component base class level, this function returns <code>undefined</code>.</p>
 
-      * <p>Subclasses which use embedded focusable elements (such as Window, Field and Button) should override this for use by the {@link #focus} method.</p>
 
-      * <p>Containers which need to participate in the {@link Ext.FocusManager FocusManager}'s navigation and Container focusing scheme also
 
-      * need to return a focusEl, although focus is only listened for in this case if the {@link Ext.FocusManager FocusManager} is {@link Ext.FocusManager#method-enable enable}d.</p>
 
-      * @returns {undefined} <code>undefined</code> because raw Components cannot by default hold focus.
 
-      */
 
-     getFocusEl: Ext.emptyFn,
 
-     isFocusable: function(c) {
 
-         var me = this,
 
-             focusEl;
 
-         if ((me.focusable !== false) && (focusEl = me.getFocusEl()) && me.rendered && !me.destroying && !me.isDestroyed && !me.disabled && me.isVisible(true)) {
 
-             // getFocusEl might return a Component if a Container wishes to delegate focus to a descendant.
 
-             // Window can do this via its defaultFocus configuration which can reference a Button.
 
-             if (focusEl.isComponent) {
 
-                 return focusEl.isFocusable();
 
-             }
 
-             return focusEl && focusEl.dom && focusEl.isVisible();
 
-         }
 
-     },
 
-     // private
 
-     preFocus: Ext.emptyFn,
 
-     // private
 
-     onFocus: function(e) {
 
-         var me = this,
 
-             focusCls = me.focusCls,
 
-             focusEl = me.getFocusEl();
 
-         if (!me.disabled) {
 
-             me.preFocus(e);
 
-             if (focusCls && focusEl) {
 
-                 focusEl.addCls(me.addClsWithUI(focusCls, true));
 
-             }
 
-             if (!me.hasFocus) {
 
-                 me.hasFocus = true;
 
-                 me.fireEvent('focus', me, e);
 
-             }
 
-         }
 
-     },
 
-     // private
 
-     beforeBlur : Ext.emptyFn,
 
-     // private
 
-     onBlur : function(e) {
 
-         var me = this,
 
-             focusCls = me.focusCls,
 
-             focusEl = me.getFocusEl();
 
-         if (me.destroying) {
 
-             return;
 
-         }
 
-         me.beforeBlur(e);
 
-         if (focusCls && focusEl) {
 
-             focusEl.removeCls(me.removeClsWithUI(focusCls, true));
 
-         }
 
-         if (me.validateOnBlur) {
 
-             me.validate();
 
-         }
 
-         me.hasFocus = false;
 
-         me.fireEvent('blur', me, e);
 
-         me.postBlur(e);
 
-     },
 
-     // private
 
-     postBlur : Ext.emptyFn,
 
- <span id='Ext-AbstractComponent-method-is'>    /**
 
- </span>     * Tests whether this Component matches the selector string.
 
-      * @param {String} selector The selector string to test against.
 
-      * @return {Boolean} True if this Component matches the selector.
 
-      */
 
-     is: function(selector) {
 
-         return Ext.ComponentQuery.is(this, selector);
 
-     },
 
- <span id='Ext-AbstractComponent-method-up'>    /**
 
- </span>     * Walks up the `ownerCt` axis looking for an ancestor Container which matches the passed simple selector.
 
-      *
 
-      * Example:
 
-      *
 
-      *     var owningTabPanel = grid.up('tabpanel');
 
-      *
 
-      * @param {String} [selector] The simple selector to test.
 
-      * @return {Ext.container.Container} The matching ancestor Container (or `undefined` if no match was found).
 
-      */
 
-     up: function(selector) {
 
-         // Use bubble target to navigate upwards so that Components can implement their own hierarchy.
 
-         // For example Menus implement getBubbleTarget because they have a parentMenu or ownerButton as an
 
-         // upward link depending upon how they are owned and triggered.
 
-         var result = this.getBubbleTarget();
 
-         if (selector) {
 
-             for (; result; result = result.getBubbleTarget()) {
 
-                 if (Ext.ComponentQuery.is(result, selector)) {
 
-                     return result;
 
-                 }
 
-             }
 
-         }
 
-         return result;
 
-     },
 
- <span id='Ext-AbstractComponent-method-nextSibling'>    /**
 
- </span>     * Returns the next sibling of this Component.
 
-      *
 
-      * Optionally selects the next sibling which matches the passed {@link Ext.ComponentQuery ComponentQuery} selector.
 
-      *
 
-      * May also be refered to as **`next()`**
 
-      *
 
-      * Note that this is limited to siblings, and if no siblings of the item match, `null` is returned. Contrast with
 
-      * {@link #nextNode}
 
-      * @param {String} [selector] A {@link Ext.ComponentQuery ComponentQuery} selector to filter the following items.
 
-      * @return {Ext.Component} The next sibling (or the next sibling which matches the selector).
 
-      * Returns null if there is no matching sibling.
 
-      */
 
-     nextSibling: function(selector) {
 
-         var o = this.ownerCt, it, last, idx, c;
 
-         if (o) {
 
-             it = o.items;
 
-             idx = it.indexOf(this) + 1;
 
-             if (idx) {
 
-                 if (selector) {
 
-                     for (last = it.getCount(); idx < last; idx++) {
 
-                         if ((c = it.getAt(idx)).is(selector)) {
 
-                             return c;
 
-                         }
 
-                     }
 
-                 } else {
 
-                     if (idx < it.getCount()) {
 
-                         return it.getAt(idx);
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         return null;
 
-     },
 
- <span id='Ext-AbstractComponent-method-previousSibling'>    /**
 
- </span>     * Returns the previous sibling of this Component.
 
-      *
 
-      * Optionally selects the previous sibling which matches the passed {@link Ext.ComponentQuery ComponentQuery}
 
-      * selector.
 
-      *
 
-      * May also be refered to as **`prev()`**
 
-      *
 
-      * Note that this is limited to siblings, and if no siblings of the item match, `null` is returned. Contrast with
 
-      * {@link #previousNode}
 
-      * @param {String} [selector] A {@link Ext.ComponentQuery ComponentQuery} selector to filter the preceding items.
 
-      * @return {Ext.Component} The previous sibling (or the previous sibling which matches the selector).
 
-      * Returns null if there is no matching sibling.
 
-      */
 
-     previousSibling: function(selector) {
 
-         var o = this.ownerCt, it, idx, c;
 
-         if (o) {
 
-             it = o.items;
 
-             idx = it.indexOf(this);
 
-             if (idx != -1) {
 
-                 if (selector) {
 
-                     for (--idx; idx >= 0; idx--) {
 
-                         if ((c = it.getAt(idx)).is(selector)) {
 
-                             return c;
 
-                         }
 
-                     }
 
-                 } else {
 
-                     if (idx) {
 
-                         return it.getAt(--idx);
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         return null;
 
-     },
 
- <span id='Ext-AbstractComponent-method-previousNode'>    /**
 
- </span>     * Returns the previous node in the Component tree in tree traversal order.
 
-      *
 
-      * Note that this is not limited to siblings, and if invoked upon a node with no matching siblings, will walk the
 
-      * tree in reverse order to attempt to find a match. Contrast with {@link #previousSibling}.
 
-      * @param {String} [selector] A {@link Ext.ComponentQuery ComponentQuery} selector to filter the preceding nodes.
 
-      * @return {Ext.Component} The previous node (or the previous node which matches the selector).
 
-      * Returns null if there is no matching node.
 
-      */
 
-     previousNode: function(selector, /* private */ includeSelf) {
 
-         var node = this,
 
-             ownerCt = node.ownerCt,
 
-             result,
 
-             it, i, sib;
 
-         // If asked to include self, test me
 
-         if (includeSelf && node.is(selector)) {
 
-             return node;
 
-         }
 
-         if (ownerCt) {
 
-             for (it = ownerCt.items.items, i = Ext.Array.indexOf(it, node) - 1; i > -1; i--) {
 
-                 sib = it[i];
 
-                 if (sib.query) {
 
-                     result = sib.query(selector);
 
-                     result = result[result.length - 1];
 
-                     if (result) {
 
-                         return result;
 
-                     }
 
-                 }
 
-                 if (sib.is(selector)) {
 
-                     return sib;
 
-                 }
 
-             }
 
-             return ownerCt.previousNode(selector, true);
 
-         }
 
-         return null;
 
-     },
 
- <span id='Ext-AbstractComponent-method-nextNode'>    /**
 
- </span>     * Returns the next node in the Component tree in tree traversal order.
 
-      *
 
-      * Note that this is not limited to siblings, and if invoked upon a node with no matching siblings, will walk the
 
-      * tree to attempt to find a match. Contrast with {@link #nextSibling}.
 
-      * @param {String} [selector] A {@link Ext.ComponentQuery ComponentQuery} selector to filter the following nodes.
 
-      * @return {Ext.Component} The next node (or the next node which matches the selector).
 
-      * Returns null if there is no matching node.
 
-      */
 
-     nextNode: function(selector, /* private */ includeSelf) {
 
-         var node = this,
 
-             ownerCt = node.ownerCt,
 
-             result,
 
-             it, len, i, sib;
 
-         // If asked to include self, test me
 
-         if (includeSelf && node.is(selector)) {
 
-             return node;
 
-         }
 
-         if (ownerCt) {
 
-             for (it = ownerCt.items.items, i = Ext.Array.indexOf(it, node) + 1, len = it.length; i < len; i++) {
 
-                 sib = it[i];
 
-                 if (sib.is(selector)) {
 
-                     return sib;
 
-                 }
 
-                 if (sib.down) {
 
-                     result = sib.down(selector);
 
-                     if (result) {
 
-                         return result;
 
-                     }
 
-                 }
 
-             }
 
-             return ownerCt.nextNode(selector);
 
-         }
 
-         return null;
 
-     },
 
- <span id='Ext-AbstractComponent-method-getId'>    /**
 
- </span>     * Retrieves the id of this component. Will autogenerate an id if one has not already been set.
 
-      * @return {String}
 
-      */
 
-     getId : function() {
 
-         return this.id || (this.id = 'ext-comp-' + (this.getAutoId()));
 
-     },
 
- <span id='Ext-AbstractComponent-method-getItemId'>    /**
 
- </span>     * Returns the value of {@link #itemId} assigned to this component, or when that
 
-      * is not set, returns the value of {@link #id}.
 
-      * @return {String}
 
-      */
 
-     getItemId : function() {
 
-         return this.itemId || this.id;
 
-     },
 
- <span id='Ext-AbstractComponent-method-getEl'>    /**
 
- </span>     * Retrieves the top level element representing this component.
 
-      * @return {Ext.dom.Element}
 
-      */
 
-     getEl : function() {
 
-         return this.el;
 
-     },
 
- <span id='Ext-AbstractComponent-method-getTargetEl'>    /**
 
- </span>     * This is used to determine where to insert the 'html', 'contentEl' and 'items' in this component.
 
-      * @private
 
-      */
 
-     getTargetEl: function() {
 
-         return this.frameBody || this.el;
 
-     },
 
- <span id='Ext-AbstractComponent-method-getOverflowStyle'>    /**
 
- </span>     * @private
 
-      * Returns the CSS style object which will set the Component's scroll styles. This must be applied
 
-      * to the {@link #getTargetEl target element}.
 
-      */
 
-     getOverflowStyle: function() {
 
-         var me = this,
 
-             result = null;
 
-         if (typeof me.autoScroll == 'boolean') {
 
-             result = {
 
-                 overflow: me.autoScroll ? 'auto' : ''
 
-             };
 
-         } else if (me.overflowX !== undefined || me.overflowY !== undefined) {
 
-             result = {
 
-                 'overflow-x':  (me.overflowX||''),
 
-                 'overflow-y':  (me.overflowY||'')
 
-             };
 
-         }
 
-         // The scrollable container element must be non-statically positioned or IE6/7 will make
 
-         // positioned children stay in place rather than scrolling with the rest of the content
 
-         if (result && (Ext.isIE6 || Ext.isIE7)) {
 
-             result.position = 'relative';
 
-         }
 
-         return result;
 
-     },
 
- <span id='Ext-AbstractComponent-method-isXType'>    /**
 
- </span>     * Tests whether or not this Component is of a specific xtype. This can test whether this Component is descended
 
-      * from the xtype (default) or whether it is directly of the xtype specified (shallow = true).
 
-      *
 
-      * **If using your own subclasses, be aware that a Component must register its own xtype to participate in
 
-      * determination of inherited xtypes.**
 
-      *
 
-      * For a list of all available xtypes, see the {@link Ext.Component} header.
 
-      *
 
-      * Example usage:
 
-      *
 
-      *     var t = new Ext.form.field.Text();
 
-      *     var isText = t.isXType('textfield');        // true
 
-      *     var isBoxSubclass = t.isXType('field');       // true, descended from Ext.form.field.Base
 
-      *     var isBoxInstance = t.isXType('field', true); // false, not a direct Ext.form.field.Base instance
 
-      *
 
-      * @param {String} xtype The xtype to check for this Component
 
-      * @param {Boolean} [shallow=false] True to check whether this Component is directly of the specified xtype, false to
 
-      * check whether this Component is descended from the xtype.
 
-      * @return {Boolean} True if this component descends from the specified xtype, false otherwise.
 
-      */
 
-     isXType: function(xtype, shallow) {
 
-         if (shallow) {
 
-             return this.xtype === xtype;
 
-         }
 
-         else {
 
-             return this.xtypesMap[xtype];
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-getXTypes'>    /**
 
- </span>     * Returns this Component's xtype hierarchy as a slash-delimited string. For a list of all available xtypes, see the
 
-      * {@link Ext.Component} header.
 
-      *
 
-      * **If using your own subclasses, be aware that a Component must register its own xtype to participate in
 
-      * determination of inherited xtypes.**
 
-      *
 
-      * Example usage:
 
-      *
 
-      *     var t = new Ext.form.field.Text();
 
-      *     alert(t.getXTypes());  // alerts 'component/field/textfield'
 
-      *
 
-      * @return {String} The xtype hierarchy string
 
-      */
 
-     getXTypes: function() {
 
-         var self = this.self,
 
-             xtypes, parentPrototype, parentXtypes;
 
-         if (!self.xtypes) {
 
-             xtypes = [];
 
-             parentPrototype = this;
 
-             while (parentPrototype) {
 
-                 parentXtypes = parentPrototype.xtypes;
 
-                 if (parentXtypes !== undefined) {
 
-                     xtypes.unshift.apply(xtypes, parentXtypes);
 
-                 }
 
-                 parentPrototype = parentPrototype.superclass;
 
-             }
 
-             self.xtypeChain = xtypes;
 
-             self.xtypes = xtypes.join('/');
 
-         }
 
-         return self.xtypes;
 
-     },
 
- <span id='Ext-AbstractComponent-method-update'>    /**
 
- </span>     * Update the content area of a component.
 
-      * @param {String/Object} htmlOrData If this component has been configured with a template via the tpl config then
 
-      * it will use this argument as data to populate the template. If this component was not configured with a template,
 
-      * the components content area will be updated via Ext.Element update
 
-      * @param {Boolean} [loadScripts=false] Only legitimate when using the html configuration.
 
-      * @param {Function} [callback] Only legitimate when using the html configuration. Callback to execute when
 
-      * scripts have finished loading
 
-      */
 
-     update : function(htmlOrData, loadScripts, cb) {
 
-         var me = this;
 
-         if (me.tpl && !Ext.isString(htmlOrData)) {
 
-             me.data = htmlOrData;
 
-             if (me.rendered) {
 
-                 me.tpl[me.tplWriteMode](me.getTargetEl(), htmlOrData || {});
 
-             }
 
-         } else {
 
-             me.html = Ext.isObject(htmlOrData) ? Ext.DomHelper.markup(htmlOrData) : htmlOrData;
 
-             if (me.rendered) {
 
-                 me.getTargetEl().update(me.html, loadScripts, cb);
 
-             }
 
-         }
 
-         if (me.rendered) {
 
-             me.updateLayout();
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-setVisible'>    /**
 
- </span>     * Convenience function to hide or show this component by boolean.
 
-      * @param {Boolean} visible True to show, false to hide
 
-      * @return {Ext.Component} this
 
-      */
 
-     setVisible : function(visible) {
 
-         return this[visible ? 'show': 'hide']();
 
-     },
 
- <span id='Ext-AbstractComponent-method-isVisible'>    /**
 
- </span>     * Returns true if this component is visible.
 
-      *
 
-      * @param {Boolean} [deep=false] Pass `true` to interrogate the visibility status of all parent Containers to
 
-      * determine whether this Component is truly visible to the user.
 
-      *
 
-      * Generally, to determine whether a Component is hidden, the no argument form is needed. For example when creating
 
-      * dynamically laid out UIs in a hidden Container before showing them.
 
-      *
 
-      * @return {Boolean} True if this component is visible, false otherwise.
 
-      */
 
-     isVisible: function(deep) {
 
-         var me = this,
 
-             child = me,
 
-             visible = me.rendered && !me.hidden,
 
-             ancestor = me.ownerCt;
 
-         // Clear hiddenOwnerCt property
 
-         me.hiddenAncestor = false;
 
-         if (me.destroyed) {
 
-             return false;
 
-         }
 
-         if (deep && visible && ancestor) {
 
-             while (ancestor) {
 
-                 // If any ancestor is hidden, then this is hidden.
 
-                 // If an ancestor Panel (only Panels have a collapse method) is collapsed,
 
-                 // then its layoutTarget (body) is hidden, so this is hidden unless its within a
 
-                 // docked item; they are still visible when collapsed (Unless they themseves are hidden)
 
-                 if (ancestor.hidden || (ancestor.collapsed &&
 
-                         !(ancestor.getDockedItems && Ext.Array.contains(ancestor.getDockedItems(), child)))) {
 
-                     // Store hiddenOwnerCt property if needed
 
-                     me.hiddenAncestor = ancestor;
 
-                     visible = false;
 
-                     break;
 
-                 }
 
-                 child = ancestor;
 
-                 ancestor = ancestor.ownerCt;
 
-             }
 
-         }
 
-         return visible;
 
-     },
 
-     onBoxReady: function(){
 
-         var me = this;
 
-         if (me.disableOnBoxReady) {
 
-             me.onDisable();
 
-         } else if (me.enableOnBoxReady) {
 
-             me.onEnable();
 
-         }
 
-         if (me.resizable) {
 
-             me.initResizable(me.resizable);
 
-         }
 
-         // Draggability must be initialized after resizability
 
-         // Because if we have to be wrapped, the resizer wrapper must be dragged as a pseudo-Component
 
-         if (me.draggable) {
 
-             me.initDraggable();
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-enable'>    /**
 
- </span>     * Enable the component
 
-      * @param {Boolean} [silent=false] Passing true will supress the 'enable' event from being fired.
 
-      */
 
-     enable: function(silent) {
 
-         var me = this;
 
-         delete me.disableOnBoxReady;
 
-         me.removeCls(me.disabledCls);
 
-         if (me.rendered) {
 
-             me.onEnable();
 
-         } else {
 
-             me.enableOnBoxReady = true;
 
-         }
 
-         me.disabled = false;
 
-         delete me.resetDisable;
 
-         if (silent !== true) {
 
-             me.fireEvent('enable', me);
 
-         }
 
-         return me;
 
-     },
 
- <span id='Ext-AbstractComponent-method-disable'>    /**
 
- </span>     * Disable the component.
 
-      * @param {Boolean} [silent=false] Passing true will supress the 'disable' event from being fired.
 
-      */
 
-     disable: function(silent) {
 
-         var me = this;
 
-         delete me.enableOnBoxReady;
 
-         me.addCls(me.disabledCls);
 
-         if (me.rendered) {
 
-             me.onDisable();
 
-         } else {
 
-             me.disableOnBoxReady = true;
 
-         }
 
-         me.disabled = true;
 
-         if (silent !== true) {
 
-             delete me.resetDisable;
 
-             me.fireEvent('disable', me);
 
-         }
 
-         return me;
 
-     },
 
- <span id='Ext-AbstractComponent-method-onEnable'>    /**
 
- </span>     * Allows addition of behavior to the enable operation.
 
-      * After calling the superclass’s onEnable, the Component will be enabled.
 
-      *
 
-      * @template
 
-      * @protected
 
-      */
 
-     onEnable: function() {
 
-         if (this.maskOnDisable) {
 
-             this.el.dom.disabled = false;
 
-             this.unmask();
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-onDisable'>    /**
 
- </span>     * Allows addition of behavior to the disable operation.
 
-      * After calling the superclass’s onDisable, the Component will be disabled.
 
-      *
 
-      * @template
 
-      * @protected
 
-      */
 
-     onDisable : function() {
 
-         var me = this,
 
-             focusCls = me.focusCls,
 
-             focusEl = me.getFocusEl();
 
-             
 
-         if (focusCls && focusEl) {
 
-             focusEl.removeCls(me.removeClsWithUI(focusCls, true));
 
-         }
 
-         
 
-         if (me.maskOnDisable) {
 
-             me.el.dom.disabled = true;
 
-             me.mask();
 
-         }
 
-     },
 
-     mask: function() {
 
-         var box = this.lastBox,
 
-             target = this.getMaskTarget(),
 
-             args = [];
 
-         // Pass it the height of our element if we know it.
 
-         if (box) {
 
-             args[2] = box.height;
 
-         }
 
-         target.mask.apply(target, args);
 
-     },
 
-     unmask: function() {
 
-         this.getMaskTarget().unmask();
 
-     },
 
-     getMaskTarget: function(){
 
-         return this.el;
 
-     },
 
- <span id='Ext-AbstractComponent-method-isDisabled'>    /**
 
- </span>     * Method to determine whether this Component is currently disabled.
 
-      * @return {Boolean} the disabled state of this Component.
 
-      */
 
-     isDisabled : function() {
 
-         return this.disabled;
 
-     },
 
- <span id='Ext-AbstractComponent-method-setDisabled'>    /**
 
- </span>     * Enable or disable the component.
 
-      * @param {Boolean} disabled True to disable.
 
-      */
 
-     setDisabled : function(disabled) {
 
-         return this[disabled ? 'disable': 'enable']();
 
-     },
 
- <span id='Ext-AbstractComponent-method-isHidden'>    /**
 
- </span>     * Method to determine whether this Component is currently set to hidden.
 
-      * @return {Boolean} the hidden state of this Component.
 
-      */
 
-     isHidden : function() {
 
-         return this.hidden;
 
-     },
 
- <span id='Ext-AbstractComponent-method-addCls'>    /**
 
- </span>     * Adds a CSS class to the top level element representing this component.
 
-      * @param {String/String[]} cls The CSS class name to add
 
-      * @return {Ext.Component} Returns the Component to allow method chaining.
 
-      */
 
-     addCls : function(cls) {
 
-         var me = this,
 
-             el = me.rendered ? me.el : me.protoEl;
 
-         el.addCls.apply(el, arguments);
 
-         return me;
 
-     },
 
- <span id='Ext-AbstractComponent-method-addClass'>    /**
 
- </span>     * @inheritdoc Ext.AbstractComponent#addCls
 
-      * @deprecated 4.1 Use {@link #addCls} instead.
 
-      */
 
-     addClass : function() {
 
-         return this.addCls.apply(this, arguments);
 
-     },
 
- <span id='Ext-AbstractComponent-method-hasCls'>    /**
 
- </span>     * Checks if the specified CSS class exists on this element's DOM node.
 
-      * @param {String} className The CSS class to check for
 
-      * @return {Boolean} True if the class exists, else false
 
-      * @method
 
-      */
 
-     hasCls: function (cls) {
 
-         var me = this,
 
-             el = me.rendered ? me.el : me.protoEl;
 
-         return el.hasCls.apply(el, arguments);
 
-     },
 
- <span id='Ext-AbstractComponent-method-removeCls'>    /**
 
- </span>     * Removes a CSS class from the top level element representing this component.
 
-      * @param {String/String[]} cls The CSS class name to remove
 
-      * @returns {Ext.Component} Returns the Component to allow method chaining.
 
-      */
 
-     removeCls : function(cls) {
 
-         var me = this,
 
-             el = me.rendered ? me.el : me.protoEl;
 
-         el.removeCls.apply(el, arguments);
 
-         return me;
 
-     },
 
-     //<debug>
 
-     removeClass : function() {
 
-         if (Ext.isDefined(Ext.global.console)) {
 
-             Ext.global.console.warn('Ext.Component: removeClass has been deprecated. Please use removeCls.');
 
-         }
 
-         return this.removeCls.apply(this, arguments);
 
-     },
 
-     //</debug>
 
-     addOverCls: function() {
 
-         var me = this;
 
-         if (!me.disabled) {
 
-             me.el.addCls(me.overCls);
 
-         }
 
-     },
 
-     removeOverCls: function() {
 
-         this.el.removeCls(this.overCls);
 
-     },
 
-     addListener : function(element, listeners, scope, options) {
 
-         var me = this,
 
-             fn,
 
-             option;
 
-         if (Ext.isString(element) && (Ext.isObject(listeners) || options && options.element)) {
 
-             if (options.element) {
 
-                 fn = listeners;
 
-                 listeners = {};
 
-                 listeners[element] = fn;
 
-                 element = options.element;
 
-                 if (scope) {
 
-                     listeners.scope = scope;
 
-                 }
 
-                 for (option in options) {
 
-                     if (options.hasOwnProperty(option)) {
 
-                         if (me.eventOptionsRe.test(option)) {
 
-                             listeners[option] = options[option];
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-             // At this point we have a variable called element,
 
-             // and a listeners object that can be passed to on
 
-             if (me[element] && me[element].on) {
 
-                 me.mon(me[element], listeners);
 
-             } else {
 
-                 me.afterRenderEvents = me.afterRenderEvents || {};
 
-                 if (!me.afterRenderEvents[element]) {
 
-                     me.afterRenderEvents[element] = [];
 
-                 }
 
-                 me.afterRenderEvents[element].push(listeners);
 
-             }
 
-         }
 
-         return me.mixins.observable.addListener.apply(me, arguments);
 
-     },
 
-     // inherit docs
 
-     removeManagedListenerItem: function(isClear, managedListener, item, ename, fn, scope){
 
-         var me = this,
 
-             element = managedListener.options ? managedListener.options.element : null;
 
-         if (element) {
 
-             element = me[element];
 
-             if (element && element.un) {
 
-                 if (isClear || (managedListener.item === item && managedListener.ename === ename && (!fn || managedListener.fn === fn) && (!scope || managedListener.scope === scope))) {
 
-                     element.un(managedListener.ename, managedListener.fn, managedListener.scope);
 
-                     if (!isClear) {
 
-                         Ext.Array.remove(me.managedListeners, managedListener);
 
-                     }
 
-                 }
 
-             }
 
-         } else {
 
-             return me.mixins.observable.removeManagedListenerItem.apply(me, arguments);
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-getBubbleTarget'>    /**
 
- </span>     * Provides the link for Observable's fireEvent method to bubble up the ownership hierarchy.
 
-      * @return {Ext.container.Container} the Container which owns this Component.
 
-      */
 
-     getBubbleTarget : function() {
 
-         return this.ownerCt;
 
-     },
 
- <span id='Ext-AbstractComponent-method-isFloating'>    /**
 
- </span>     * Method to determine whether this Component is floating.
 
-      * @return {Boolean} the floating state of this component.
 
-      */
 
-     isFloating : function() {
 
-         return this.floating;
 
-     },
 
- <span id='Ext-AbstractComponent-method-isDraggable'>    /**
 
- </span>     * Method to determine whether this Component is draggable.
 
-      * @return {Boolean} the draggable state of this component.
 
-      */
 
-     isDraggable : function() {
 
-         return !!this.draggable;
 
-     },
 
- <span id='Ext-AbstractComponent-method-isDroppable'>    /**
 
- </span>     * Method to determine whether this Component is droppable.
 
-      * @return {Boolean} the droppable state of this component.
 
-      */
 
-     isDroppable : function() {
 
-         return !!this.droppable;
 
-     },
 
- <span id='Ext-AbstractComponent-method-onAdded'>    /**
 
- </span>     * Method to manage awareness of when components are added to their
 
-      * respective Container, firing an #added event. References are
 
-      * established at add time rather than at render time.
 
-      *
 
-      * Allows addition of behavior when a Component is added to a
 
-      * Container. At this stage, the Component is in the parent
 
-      * Container's collection of child items. After calling the
 
-      * superclass's onAdded, the ownerCt reference will be present,
 
-      * and if configured with a ref, the refOwner will be set.
 
-      *
 
-      * @param {Ext.container.Container} container Container which holds the component
 
-      * @param {Number} pos Position at which the component was added
 
-      *
 
-      * @template
 
-      * @protected
 
-      */
 
-     onAdded : function(container, pos) {
 
-         var me = this;
 
-         me.ownerCt = container;
 
-         if (me.hasListeners.added) {
 
-             me.fireEvent('added', me, container, pos);
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-onRemoved'>    /**
 
- </span>     * Method to manage awareness of when components are removed from their
 
-      * respective Container, firing a #removed event. References are properly
 
-      * cleaned up after removing a component from its owning container.
 
-      *
 
-      * Allows addition of behavior when a Component is removed from
 
-      * its parent Container. At this stage, the Component has been
 
-      * removed from its parent Container's collection of child items,
 
-      * but has not been destroyed (It will be destroyed if the parent
 
-      * Container's autoDestroy is true, or if the remove call was
 
-      * passed a truthy second parameter). After calling the
 
-      * superclass's onRemoved, the ownerCt and the refOwner will not
 
-      * be present.
 
-      * @param {Boolean} destroying Will be passed as true if the Container performing the remove operation will delete this
 
-      * Component upon remove.
 
-      *
 
-      * @template
 
-      * @protected
 
-      */
 
-     onRemoved : function(destroying) {
 
-         var me = this;
 
-         if (me.hasListeners.removed) {
 
-             me.fireEvent('removed', me, me.ownerCt);
 
-         }
 
-         delete me.ownerCt;
 
-         delete me.ownerLayout;
 
-     },
 
- <span id='Ext-AbstractComponent-method-beforeDestroy'>    /**
 
- </span>     * Invoked before the Component is destroyed.
 
-      *
 
-      * @method
 
-      * @template
 
-      * @protected
 
-      */
 
-     beforeDestroy : Ext.emptyFn,
 
- <span id='Ext-AbstractComponent-method-onResize'>    /**
 
- </span>     * Allows addition of behavior to the resize operation.
 
-      *
 
-      * Called when Ext.resizer.Resizer#drag event is fired.
 
-      *
 
-      * @method
 
-      * @template
 
-      * @protected
 
-      */
 
-     onResize : Ext.emptyFn,
 
- <span id='Ext-AbstractComponent-method-setSize'>    /**
 
- </span>     * Sets the width and height of this Component. This method fires the {@link #resize} event. This method can accept
 
-      * either width and height as separate arguments, or you can pass a size object like `{width:10, height:20}`.
 
-      *
 
-      * @param {Number/String/Object} width The new width to set. This may be one of:
 
-      *
 
-      *   - A Number specifying the new width in the {@link #getEl Element}'s {@link Ext.Element#defaultUnit}s (by default, pixels).
 
-      *   - A String used to set the CSS width style.
 
-      *   - A size object in the format `{width: widthValue, height: heightValue}`.
 
-      *   - `undefined` to leave the width unchanged.
 
-      *
 
-      * @param {Number/String} height The new height to set (not required if a size object is passed as the first arg).
 
-      * This may be one of:
 
-      *
 
-      *   - A Number specifying the new height in the {@link #getEl Element}'s {@link Ext.Element#defaultUnit}s (by default, pixels).
 
-      *   - A String used to set the CSS height style. Animation may **not** be used.
 
-      *   - `undefined` to leave the height unchanged.
 
-      *
 
-      * @return {Ext.Component} this
 
-      */
 
-     setSize : function(width, height) {
 
-         var me = this;
 
-         // support for standard size objects
 
-         if (width && typeof width == 'object') {
 
-             height = width.height;
 
-             width  = width.width;
 
-         }
 
-         // Constrain within configured maxima
 
-         if (typeof width == 'number') {
 
-             me.width = Ext.Number.constrain(width, me.minWidth, me.maxWidth);
 
-         } else if (width === null) {
 
-             delete me.width;
 
-         }
 
-         
 
-         if (typeof height == 'number') {
 
-             me.height = Ext.Number.constrain(height, me.minHeight, me.maxHeight);
 
-         } else if (height === null) {
 
-             delete me.height;
 
-         }
 
-         // If not rendered, all we need to is set the properties.
 
-         // The initial layout will set the size
 
-         if (me.rendered && me.isVisible()) {
 
-             // If we are changing size, then we are not the root.
 
-             me.updateLayout({
 
-                 isRoot: false
 
-             });
 
-         }
 
-         return me;
 
-     },
 
- <span id='Ext-AbstractComponent-method-isLayoutRoot'>    /**
 
- </span>     * Determines whether this Component is the root of a layout. This returns `true` if
 
-      * this component can run its layout without assistance from or impact on its owner.
 
-      * If this component cannot run its layout given these restrictions, `false` is returned
 
-      * and its owner will be considered as the next candidate for the layout root.
 
-      *
 
-      * Setting the {@link #_isLayoutRoot} property to `true` causes this method to always
 
-      * return `true`. This may be useful when updating a layout of a Container which shrink
 
-      * wraps content, and you know that it will not change size, and so can safely be the
 
-      * topmost participant in the layout run.
 
-      * @protected
 
-      */
 
-     isLayoutRoot: function() {
 
-         var me = this,
 
-             ownerLayout = me.ownerLayout;
 
-         // Return true if we have been explicitly flagged as the layout root, or if we are floating.
 
-         // Sometimes floating Components get an ownerCt ref injected into them which is *not* a true ownerCt, merely
 
-         // an upward link for reference purposes. For example a grid column menu is linked to the
 
-         // owning header via an ownerCt reference.
 
-         if (!ownerLayout || me._isLayoutRoot || me.floating) {
 
-             return true;
 
-         }
 
-         return ownerLayout.isItemLayoutRoot(me);
 
-     },
 
- <span id='Ext-AbstractComponent-method-isLayoutSuspended'>    /**
 
- </span>     * Returns true if layout is suspended for this component. This can come from direct
 
-      * suspension of this component's layout activity ({@link Ext.Container#suspendLayout}) or if one
 
-      * of this component's containers is suspended.
 
-      *
 
-      * @return {Boolean} True layout of this component is suspended.
 
-      */
 
-     isLayoutSuspended: function () {
 
-         var comp = this,
 
-             ownerLayout;
 
-         while (comp) {
 
-             if (comp.layoutSuspendCount || comp.suspendLayout) {
 
-                 return true;
 
-             }
 
-             ownerLayout = comp.ownerLayout;
 
-             if (!ownerLayout) {
 
-                 break;
 
-             }
 
-             // TODO - what about suspending a Layout instance?
 
-             // this works better than ownerCt since ownerLayout means "is managed by" in
 
-             // the proper sense... some floating components have ownerCt but won't have an
 
-             // ownerLayout
 
-             comp = ownerLayout.owner;
 
-         }
 
-         return false;
 
-     },
 
- <span id='Ext-AbstractComponent-method-updateLayout'>    /**
 
- </span>     * Updates this component's layout. If this update effects this components {@link #ownerCt},
 
-      * that component's `updateLayout` method will be called to perform the layout instead.
 
-      * Otherwise, just this component (and its child items) will layout.
 
-      *
 
-      * @param {Object} options An object with layout options.
 
-      * @param {Boolean} options.defer True if this layout should be deferred.
 
-      * @param {Boolean} options.isRoot True if this layout should be the root of the layout.
 
-      */
 
-     updateLayout: function (options) {
 
-         var me = this,
 
-             defer,
 
-             isRoot = options && options.isRoot;
 
-         if (!me.rendered || me.layoutSuspendCount || me.suspendLayout) {
 
-             return;
 
-         }
 
-         if (me.hidden) {
 
-             Ext.AbstractComponent.cancelLayout(me);
 
-         } else if (typeof isRoot != 'boolean') {
 
-             isRoot = me.isLayoutRoot();
 
-         }
 
-         // if we aren't the root, see if our ownerLayout will handle it...
 
-         if (isRoot || !me.ownerLayout || !me.ownerLayout.onContentChange(me)) {
 
-             // either we are the root or our ownerLayout doesn't care
 
-             if (!me.isLayoutSuspended()) {
 
-                 // we aren't suspended (knew that), but neither is any of our ownerCt's...
 
-                 defer = (options && options.hasOwnProperty('defer')) ? options.defer : me.deferLayouts;
 
-                 Ext.AbstractComponent.updateLayout(me, defer);
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-getSizeModel'>    /**
 
- </span>     * Returns an object that describes how this component's width and height are managed.
 
-      * All of these objects are shared and should not be modified.
 
-      *
 
-      * @return {Object} The size model for this component.
 
-      * @return {Ext.layout.SizeModel} return.width The {@link Ext.layout.SizeModel size model}
 
-      * for the width.
 
-      * @return {Ext.layout.SizeModel} return.height The {@link Ext.layout.SizeModel size model}
 
-      * for the height.
 
-      */
 
-     getSizeModel: function (ownerCtSizeModel) {
 
-         var me = this,
 
-             models = Ext.layout.SizeModel,
 
-             ownerContext = me.componentLayout.ownerContext,
 
-             width = me.width,
 
-             height = me.height,
 
-             typeofWidth, typeofHeight,
 
-             hasPixelWidth, hasPixelHeight,
 
-             heightModel, ownerLayout, policy, shrinkWrap, topLevel, widthModel;
 
-         if (ownerContext) {
 
-             // If we are in the middle of a running layout, always report the current,
 
-             // dynamic size model rather than recompute it. This is not (only) a time
 
-             // saving thing, but a correctness thing since we cannot get the right answer
 
-             // otherwise.
 
-             widthModel = ownerContext.widthModel;
 
-             heightModel = ownerContext.heightModel;
 
-         }
 
-         if (!widthModel || !heightModel) {
 
-             hasPixelWidth = ((typeofWidth = typeof width) == 'number');
 
-             hasPixelHeight = ((typeofHeight = typeof height) == 'number');
 
-             topLevel = me.floating || !(ownerLayout = me.ownerLayout);
 
-             // Floating or no owner layout, e.g. rendered using renderTo
 
-             if (topLevel) {
 
-                 policy = Ext.layout.Layout.prototype.autoSizePolicy;
 
-                 shrinkWrap = me.floating ? 3 : me.shrinkWrap;
 
-                 if (hasPixelWidth) {
 
-                     widthModel = models.configured;
 
-                 }
 
-                 if (hasPixelHeight) {
 
-                     heightModel = models.configured;
 
-                 }
 
-             } else {
 
-                 policy = ownerLayout.getItemSizePolicy(me, ownerCtSizeModel);
 
-                 shrinkWrap = ownerLayout.isItemShrinkWrap(me);
 
-             }
 
-             shrinkWrap = (shrinkWrap === true) ? 3 : (shrinkWrap || 0); // false->0, true->3
 
-             // Now that we have shrinkWrap as a 0-3 value, we need to turn off shrinkWrap
 
-             // bits for any dimension that has a configured size not in pixels. These must
 
-             // be read from the DOM.
 
-             //
 
-             if (topLevel && shrinkWrap) {
 
-                 if (width && typeofWidth == 'string') {
 
-                     shrinkWrap &= 2; // percentage, "30em" or whatever - not width shrinkWrap
 
-                 }
 
-                 if (height && typeofHeight == 'string') {
 
-                     shrinkWrap &= 1; // percentage, "30em" or whatever - not height shrinkWrap
 
-                 }
 
-             }
 
-             if (shrinkWrap !== 3) {
 
-                 if (!ownerCtSizeModel) {
 
-                     ownerCtSizeModel = me.ownerCt && me.ownerCt.getSizeModel();
 
-                 }
 
-                 if (ownerCtSizeModel) {
 
-                     shrinkWrap |= (ownerCtSizeModel.width.shrinkWrap ? 1 : 0) | (ownerCtSizeModel.height.shrinkWrap ? 2 : 0);
 
-                 }
 
-             }
 
-             if (!widthModel) {
 
-                 if (!policy.setsWidth) {
 
-                     if (hasPixelWidth) {
 
-                         widthModel = models.configured;
 
-                     } else {
 
-                         widthModel = (shrinkWrap & 1) ? models.shrinkWrap : models.natural;
 
-                     }
 
-                 } else if (policy.readsWidth) {
 
-                     if (hasPixelWidth) {
 
-                         widthModel = models.calculatedFromConfigured;
 
-                     } else {
 
-                         widthModel = (shrinkWrap & 1) ? models.calculatedFromShrinkWrap :
 
-                                     models.calculatedFromNatural;
 
-                     }
 
-                 } else {
 
-                     widthModel = models.calculated;
 
-                 }
 
-             }
 
-             if (!heightModel) {
 
-                 if (!policy.setsHeight) {
 
-                     if (hasPixelHeight) {
 
-                         heightModel = models.configured;
 
-                     } else {
 
-                         heightModel = (shrinkWrap & 2) ? models.shrinkWrap : models.natural;
 
-                     }
 
-                 } else if (policy.readsHeight) {
 
-                     if (hasPixelHeight) {
 
-                         heightModel = models.calculatedFromConfigured;
 
-                     } else {
 
-                         heightModel = (shrinkWrap & 2) ? models.calculatedFromShrinkWrap :
 
-                                     models.calculatedFromNatural;
 
-                     }
 
-                 } else {
 
-                     heightModel = models.calculated;
 
-                 }
 
-             }
 
-         }
 
-         // We return one of the cached objects with the proper "width" and "height" as the
 
-         // sizeModels we have determined.
 
-         return widthModel.pairsByHeightOrdinal[heightModel.ordinal];
 
-     },
 
-     isDescendant: function(ancestor) {
 
-         if (ancestor.isContainer) {
 
-             for (var c = this.ownerCt; c; c = c.ownerCt) {
 
-                 if (c === ancestor) {
 
-                     return true;
 
-                 }
 
-             }
 
-         }
 
-         return false;
 
-     },
 
- <span id='Ext-AbstractComponent-method-doComponentLayout'>    /**
 
- </span>     * This method needs to be called whenever you change something on this component that requires the Component's
 
-      * layout to be recalculated.
 
-      * @return {Ext.container.Container} this
 
-      */
 
-     doComponentLayout : function() {
 
-         this.updateLayout();
 
-         return this;
 
-     },
 
- <span id='Ext-AbstractComponent-method-forceComponentLayout'>    /**
 
- </span>     * Forces this component to redo its componentLayout.
 
-      * @deprecated 4.1.0 Use {@link #updateLayout} instead.
 
-      */
 
-     forceComponentLayout: function () {
 
-         this.updateLayout();
 
-     },
 
-     // @private
 
-     setComponentLayout : function(layout) {
 
-         var currentLayout = this.componentLayout;
 
-         if (currentLayout && currentLayout.isLayout && currentLayout != layout) {
 
-             currentLayout.setOwner(null);
 
-         }
 
-         this.componentLayout = layout;
 
-         layout.setOwner(this);
 
-     },
 
-     getComponentLayout : function() {
 
-         var me = this;
 
-         if (!me.componentLayout || !me.componentLayout.isLayout) {
 
-             me.setComponentLayout(Ext.layout.Layout.create(me.componentLayout, 'autocomponent'));
 
-         }
 
-         return me.componentLayout;
 
-     },
 
- <span id='Ext-AbstractComponent-method-afterComponentLayout'>    /**
 
- </span>     * Called by the layout system after the Component has been layed out.
 
-      *
 
-      * @param {Number} width The width that was set
 
-      * @param {Number} height The height that was set
 
-      * @param {Number} oldWidth The old width. <code>undefined</code> if this was the initial layout.
 
-      * @param {Number} oldHeight The old height. <code>undefined</code> if this was the initial layout.
 
-      *
 
-      * @template
 
-      * @protected
 
-      */
 
-     afterComponentLayout: function(width, height, oldWidth, oldHeight) {
 
-         var me = this,
 
-             floaters, len, i, floater;
 
-         if (++me.componentLayoutCounter === 1) {
 
-             me.afterFirstLayout(width, height);
 
-         }
 
-         // Contained autoShow items must be shown upon next layout of the Container
 
-         if (me.floatingItems) {
 
-             floaters = me.floatingItems.items;
 
-             len = floaters.length;
 
-             for (i = 0; i < len; i++) {
 
-                 floater = floaters[i];
 
-                 if (!floater.rendered && floater.autoShow) {
 
-                     floater.show();
 
-                 }
 
-             }
 
-         }
 
-         if (me.hasListeners.resize && (width !== oldWidth || height !== oldHeight)) {
 
-             me.fireEvent('resize', me, width, height, oldWidth, oldHeight);
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-beforeComponentLayout'>    /**
 
- </span>     * Occurs before componentLayout is run. Returning false from this method will prevent the componentLayout from
 
-      * being executed.
 
-      *
 
-      * @param {Number} adjWidth The box-adjusted width that was set
 
-      * @param {Number} adjHeight The box-adjusted height that was set
 
-      *
 
-      * @template
 
-      * @protected
 
-      */
 
-     beforeComponentLayout: function(width, height) {
 
-         return true;
 
-     },
 
- <span id='Ext-AbstractComponent-method-setPosition'>    /**
 
- </span>     * Sets the left and top of the component. To set the page XY position instead, use {@link Ext.Component#setPagePosition setPagePosition}. This
 
-      * method fires the {@link #move} event.
 
-      * @param {Number} left The new left
 
-      * @param {Number} top The new top
 
-      * @param {Boolean/Object} [animate] If true, the Component is _animated_ into its new position. You may also pass an
 
-      * animation configuration.
 
-      * @return {Ext.Component} this
 
-      */
 
-     setPosition : function(x, y, animate) {
 
-         var me = this,
 
-             pos = me.beforeSetPosition.apply(me, arguments);
 
-         if (pos && me.rendered) {
 
-             // Convert position WRT RTL
 
-             pos = me.convertPosition(pos);
 
-             // Proceed only if the new position is different from the current one.
 
-             if (pos.left !== me.el.getLeft() || pos.top !== me.el.getTop()) {
 
-                 if (animate) {
 
-                     me.stopAnimation();
 
-                     me.animate(Ext.apply({
 
-                         duration: 1000,
 
-                         listeners: {
 
-                             afteranimate: Ext.Function.bind(me.afterSetPosition, me, [pos.left, pos.top])
 
-                         },
 
-                         to: pos
 
-                     }, animate));
 
-                 } else {
 
-                     // Must use Element's methods to set element position because, if it is a Layer (floater), it may need to sync a shadow
 
-                     // We must also only set the properties which are defined because Element.setLeftTop autos any undefined coordinates
 
-                     if (pos.left !== undefined && pos.top !== undefined) {
 
-                         me.el.setLeftTop(pos.left, pos.top);
 
-                     } else if (pos.left !== undefined) {
 
-                         me.el.setLeft(pos.left);
 
-                     } else if (pos.top !==undefined) {
 
-                         me.el.setTop(pos.top);
 
-                     }
 
-                     me.afterSetPosition(pos.left, pos.top);
 
-                 }
 
-             }
 
-         }
 
-         return me;
 
-     },
 
- <span id='Ext-AbstractComponent-method-beforeSetPosition'>    /**
 
- </span>     * @private Template method called before a Component is positioned.
 
-      */
 
-     beforeSetPosition: function (x, y, animate) {
 
-         var pos, x0;
 
-         // decode the position arguments:
 
-         if (!x || Ext.isNumber(x)) {
 
-             pos = { x: x, y : y, anim: animate };
 
-         } else if (Ext.isNumber(x0 = x[0])) { // an array of [x, y]
 
-             pos = { x : x0, y : x[1], anim: y };
 
-         } else {
 
-             pos = { x: x.x, y: x.y, anim: y }; // already an object w/ x & y properties
 
-         }
 
-         pos.hasX = Ext.isNumber(pos.x);
 
-         pos.hasY = Ext.isNumber(pos.y);
 
-         // store the position as specified:
 
-         this.x = pos.x;
 
-         this.y = pos.y;
 
-         return (pos.hasX || pos.hasY) ? pos : null;
 
-     },
 
- <span id='Ext-AbstractComponent-method-afterSetPosition'>    /**
 
- </span>     * Template method called after a Component has been positioned.
 
-      *
 
-      * @param {Number} x
 
-      * @param {Number} y
 
-      *
 
-      * @template
 
-      * @protected
 
-      */
 
-     afterSetPosition: function(x, y) {
 
-         var me = this;
 
-         me.onPosition(x, y);
 
-         if (me.hasListeners.move) {
 
-             me.fireEvent('move', me, x, y);
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-convertPosition'>    /**
 
- </span>     * This method converts an "{x: x, y: y}" object to a "{left: x+'px', top: y+'px'}" object.
 
-      * The returned object contains the styles to set to effect the position. This is
 
-      * overridden in RTL mode to be "{right: x, top: y}".
 
-      * @private
 
-      */
 
-     convertPosition: function (pos, withUnits) {
 
-         var ret = {},
 
-             El = Ext.Element;
 
-         if (pos.hasX) {
 
-             ret.left = withUnits ? El.addUnits(pos.x) : pos.x;
 
-         }
 
-         if (pos.hasY) {
 
-             ret.top = withUnits ? El.addUnits(pos.y) : pos.y;
 
-         }
 
-         return ret;
 
-     },
 
- <span id='Ext-AbstractComponent-method-onPosition'>    /**
 
- </span>     * Called after the component is moved, this method is empty by default but can be implemented by any
 
-      * subclass that needs to perform custom logic after a move occurs.
 
-      *
 
-      * @param {Number} x The new x position
 
-      * @param {Number} y The new y position
 
-      *
 
-      * @template
 
-      * @protected
 
-      */
 
-     onPosition: Ext.emptyFn,
 
- <span id='Ext-AbstractComponent-method-setWidth'>    /**
 
- </span>     * Sets the width of the component. This method fires the {@link #resize} event.
 
-      *
 
-      * @param {Number} width The new width to setThis may be one of:
 
-      *
 
-      *   - A Number specifying the new width in the {@link #getEl Element}'s {@link Ext.Element#defaultUnit}s (by default, pixels).
 
-      *   - A String used to set the CSS width style.
 
-      *
 
-      * @return {Ext.Component} this
 
-      */
 
-     setWidth : function(width) {
 
-         return this.setSize(width);
 
-     },
 
- <span id='Ext-AbstractComponent-method-setHeight'>    /**
 
- </span>     * Sets the height of the component. This method fires the {@link #resize} event.
 
-      *
 
-      * @param {Number} height The new height to set. This may be one of:
 
-      *
 
-      *   - A Number specifying the new height in the {@link #getEl Element}'s {@link Ext.Element#defaultUnit}s (by default, pixels).
 
-      *   - A String used to set the CSS height style.
 
-      *   - _undefined_ to leave the height unchanged.
 
-      *
 
-      * @return {Ext.Component} this
 
-      */
 
-     setHeight : function(height) {
 
-         return this.setSize(undefined, height);
 
-     },
 
- <span id='Ext-AbstractComponent-method-getSize'>    /**
 
- </span>     * Gets the current size of the component's underlying element.
 
-      * @return {Object} An object containing the element's size {width: (element width), height: (element height)}
 
-      */
 
-     getSize : function() {
 
-         return this.el.getSize();
 
-     },
 
- <span id='Ext-AbstractComponent-method-getWidth'>    /**
 
- </span>     * Gets the current width of the component's underlying element.
 
-      * @return {Number}
 
-      */
 
-     getWidth : function() {
 
-         return this.el.getWidth();
 
-     },
 
- <span id='Ext-AbstractComponent-method-getHeight'>    /**
 
- </span>     * Gets the current height of the component's underlying element.
 
-      * @return {Number}
 
-      */
 
-     getHeight : function() {
 
-         return this.el.getHeight();
 
-     },
 
- <span id='Ext-AbstractComponent-method-getLoader'>    /**
 
- </span>     * Gets the {@link Ext.ComponentLoader} for this Component.
 
-      * @return {Ext.ComponentLoader} The loader instance, null if it doesn't exist.
 
-      */
 
-     getLoader: function(){
 
-         var me = this,
 
-             autoLoad = me.autoLoad ? (Ext.isObject(me.autoLoad) ? me.autoLoad : {url: me.autoLoad}) : null,
 
-             loader = me.loader || autoLoad;
 
-         if (loader) {
 
-             if (!loader.isLoader) {
 
-                 me.loader = new Ext.ComponentLoader(Ext.apply({
 
-                     target: me,
 
-                     autoLoad: autoLoad
 
-                 }, loader));
 
-             } else {
 
-                 loader.setTarget(me);
 
-             }
 
-             return me.loader;
 
-         }
 
-         return null;
 
-     },
 
- <span id='Ext-AbstractComponent-method-setDocked'>    /**
 
- </span>     * Sets the dock position of this component in its parent panel. Note that this only has effect if this item is part
 
-      * of the dockedItems collection of a parent that has a DockLayout (note that any Panel has a DockLayout by default)
 
-      * @param {Object} dock The dock position.
 
-      * @param {Boolean} [layoutParent=false] True to re-layout parent.
 
-      * @return {Ext.Component} this
 
-      */
 
-     setDocked : function(dock, layoutParent) {
 
-         var me = this;
 
-         me.dock = dock;
 
-         if (layoutParent && me.ownerCt && me.rendered) {
 
-             me.ownerCt.updateLayout();
 
-         }
 
-         return me;
 
-     },
 
- <span id='Ext-AbstractComponent-method-setBorder'>    /**
 
- </span>     *
 
-      * @param {String/Number} border The border, see {@link #border}. If a falsey value is passed
 
-      * the border will be removed.
 
-      */
 
-     setBorder: function(border, /* private */ targetEl) {
 
-         var me = this,
 
-             initial = !!targetEl;
 
-         if (me.rendered || initial) {
 
-             if (!initial) {
 
-                 targetEl = me.el;
 
-             }
 
-             if (!border) {
 
-                 border = 0;
 
-             } else {
 
-                 border = Ext.Element.unitizeBox((border === true) ? 1 : border);
 
-             }
 
-             targetEl.setStyle('border-width', border);
 
-             if (!initial) {
 
-                 me.updateLayout();
 
-             }
 
-         }
 
-         me.border = border;
 
-     },
 
-     onDestroy : function() {
 
-         var me = this;
 
-         if (me.monitorResize && Ext.EventManager.resizeEvent) {
 
-             Ext.EventManager.resizeEvent.removeListener(me.setSize, me);
 
-         }
 
-         // Destroying the floatingItems ZIndexManager will also destroy descendant floating Components
 
-         Ext.destroy(
 
-             me.componentLayout,
 
-             me.loadMask,
 
-             me.floatingDescendants
 
-         );
 
-     },
 
- <span id='Ext-AbstractComponent-method-destroy'>    /**
 
- </span>     * Destroys the Component.
 
-      */
 
-     destroy : function() {
 
-         var me = this,
 
-             selectors = me.renderSelectors,
 
-             selector,
 
-             el;
 
-         if (!me.isDestroyed) {
 
-             if (!me.hasListeners.beforedestroy || me.fireEvent('beforedestroy', me) !== false) {
 
-                 me.destroying = true;
 
-                 me.beforeDestroy();
 
-                 if (me.floating) {
 
-                     delete me.floatParent;
 
-                     // A zIndexManager is stamped into a *floating* Component when it is added to a Container.
 
-                     // If it has no zIndexManager at render time, it is assigned to the global Ext.WindowManager instance.
 
-                     if (me.zIndexManager) {
 
-                         me.zIndexManager.unregister(me);
 
-                     }
 
-                 } else if (me.ownerCt && me.ownerCt.remove) {
 
-                     me.ownerCt.remove(me, false);
 
-                 }
 
-                 me.onDestroy();
 
-                 // Attempt to destroy all plugins
 
-                 Ext.destroy(me.plugins);
 
-                 if (me.hasListeners.destroy) {
 
-                     me.fireEvent('destroy', me);
 
-                 }
 
-                 Ext.ComponentManager.unregister(me);
 
-                 me.mixins.state.destroy.call(me);
 
-                 me.clearListeners();
 
-                 // make sure we clean up the element references after removing all events
 
-                 if (me.rendered) {
 
-                     if (!me.preserveElOnDestroy) {
 
-                         me.el.remove();
 
-                     }
 
-                     me.mixins.elementCt.destroy.call(me); // removes childEls
 
-                     if (selectors) {
 
-                         for (selector in selectors) {
 
-                             if (selectors.hasOwnProperty(selector)) {
 
-                                 el = me[selector];
 
-                                 if (el) { // in case any other code may have already removed it
 
-                                     delete me[selector];
 
-                                     el.remove();
 
-                                 }
 
-                             }
 
-                         }
 
-                     }
 
-                     delete me.el;
 
-                     delete me.frameBody;
 
-                     delete me.rendered;
 
-                 }
 
-                 me.destroying = false;
 
-                 me.isDestroyed = true;
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-getPlugin'>    /**
 
- </span>     * Retrieves a plugin by its pluginId which has been bound to this component.
 
-      * @param {String} pluginId
 
-      * @return {Ext.AbstractPlugin} plugin instance.
 
-      */
 
-     getPlugin: function(pluginId) {
 
-         var i = 0,
 
-             plugins = this.plugins,
 
-             ln = plugins.length;
 
-         for (; i < ln; i++) {
 
-             if (plugins[i].pluginId === pluginId) {
 
-                 return plugins[i];
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-AbstractComponent-method-isDescendantOf'>    /**
 
- </span>     * Determines whether this component is the descendant of a particular container.
 
-      * @param {Ext.Container} container
 
-      * @return {Boolean} True if it is.
 
-      */
 
-     isDescendantOf: function(container) {
 
-         return !!this.findParentBy(function(p){
 
-             return p === container;
 
-         });
 
-     }
 
- }, function() {
 
-     var AbstractComponent = this;
 
-     AbstractComponent.createAlias({
 
-         on: 'addListener',
 
-         prev: 'previousSibling',
 
-         next: 'nextSibling'
 
-     });
 
- <span id='Ext-method-resumeLayouts'>    /**
 
- </span>     * @inheritdoc Ext.AbstractComponent#resumeLayouts
 
-      * @member Ext
 
-      */
 
-     Ext.resumeLayouts = function (flush) {
 
-         AbstractComponent.resumeLayouts(flush);
 
-     };
 
- <span id='Ext-method-suspendLayouts'>    /**
 
- </span>     * @inheritdoc Ext.AbstractComponent#suspendLayouts
 
-      * @member Ext
 
-      */
 
-     Ext.suspendLayouts = function () {
 
-         AbstractComponent.suspendLayouts();
 
-     };
 
- <span id='Ext-method-batchLayouts'>    /**
 
- </span>     * Utility wrapper that suspends layouts of all components for the duration of a given function.
 
-      * @param {Function} fn The function to execute.
 
-      * @param {Object} [scope] The scope (`this` reference) in which the specified function is executed.
 
-      * @member Ext
 
-      */
 
-     Ext.batchLayouts = function(fn, scope) {
 
-         AbstractComponent.suspendLayouts();
 
-         // Invoke the function
 
-         fn.call(scope);
 
-         AbstractComponent.resumeLayouts(true);
 
-     };
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |