ext-all-debug.js
上传用户:dawnssy
上传日期:2022-08-06
资源大小:9345k
文件大小:1167k
源码类别:

JavaScript

开发平台:

JavaScript

  1.             return Ext.util.TextMetrics.Instance(el, fixedWidth);
  2.         }
  3.     };
  4. }();
  5. Ext.util.TextMetrics.Instance = function(bindTo, fixedWidth){
  6.     var ml = new Ext.Element(document.createElement('div'));
  7.     document.body.appendChild(ml.dom);
  8.     ml.position('absolute');
  9.     ml.setLeftTop(-1000, -1000);
  10.     ml.hide();
  11.     if(fixedWidth){
  12.         ml.setWidth(fixedWidth);
  13.     }
  14.     var instance = {
  15.         
  16.         getSize : function(text){
  17.             ml.update(text);
  18.             var s = ml.getSize();
  19.             ml.update('');
  20.             return s;
  21.         },
  22.         
  23.         bind : function(el){
  24.             ml.setStyle(
  25.                 Ext.fly(el).getStyles('font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing')
  26.             );
  27.         },
  28.         
  29.         setFixedWidth : function(width){
  30.             ml.setWidth(width);
  31.         },
  32.         
  33.         getWidth : function(text){
  34.             ml.dom.style.width = 'auto';
  35.             return this.getSize(text).width;
  36.         },
  37.         
  38.         getHeight : function(text){
  39.             return this.getSize(text).height;
  40.         }
  41.     };
  42.     instance.bind(bindTo);
  43.     return instance;
  44. };
  45. Ext.Element.addMethods({
  46.     
  47.     getTextWidth : function(text, min, max){
  48.         return (Ext.util.TextMetrics.measure(this.dom, Ext.value(text, this.dom.innerHTML, true)).width).constrain(min || 0, max || 1000000);
  49.     }
  50. });
  51. Ext.util.Cookies = {
  52.     
  53.     set : function(name, value){
  54.         var argv = arguments;
  55.         var argc = arguments.length;
  56.         var expires = (argc > 2) ? argv[2] : null;
  57.         var path = (argc > 3) ? argv[3] : '/';
  58.         var domain = (argc > 4) ? argv[4] : null;
  59.         var secure = (argc > 5) ? argv[5] : false;
  60.         document.cookie = name + "=" + escape(value) + ((expires === null) ? "" : ("; expires=" + expires.toGMTString())) + ((path === null) ? "" : ("; path=" + path)) + ((domain === null) ? "" : ("; domain=" + domain)) + ((secure === true) ? "; secure" : "");
  61.     },
  62.     
  63.     get : function(name){
  64.         var arg = name + "=";
  65.         var alen = arg.length;
  66.         var clen = document.cookie.length;
  67.         var i = 0;
  68.         var j = 0;
  69.         while(i < clen){
  70.             j = i + alen;
  71.             if(document.cookie.substring(i, j) == arg){
  72.                 return Ext.util.Cookies.getCookieVal(j);
  73.             }
  74.             i = document.cookie.indexOf(" ", i) + 1;
  75.             if(i === 0){
  76.                 break;
  77.             }
  78.         }
  79.         return null;
  80.     },
  81.     
  82.     clear : function(name){
  83.         if(Ext.util.Cookies.get(name)){
  84.             document.cookie = name + "=" + "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  85.         }
  86.     },
  87.     
  88.     getCookieVal : function(offset){
  89.         var endstr = document.cookie.indexOf(";", offset);
  90.         if(endstr == -1){
  91.             endstr = document.cookie.length;
  92.         }
  93.         return unescape(document.cookie.substring(offset, endstr));
  94.     }
  95. };
  96. Ext.handleError = function(e) {
  97.     throw e;
  98. };
  99. Ext.Error = function(message) {
  100.     
  101.     this.message = (this.lang[message]) ? this.lang[message] : message;
  102. }
  103. Ext.Error.prototype = new Error();
  104. Ext.apply(Ext.Error.prototype, {
  105.     
  106.     lang: {},
  107.     name: 'Ext.Error',
  108.     
  109.     getName : function() {
  110.         return this.name;
  111.     },
  112.     
  113.     getMessage : function() {
  114.         return this.message;
  115.     },
  116.     
  117.     toJson : function() {
  118.         return Ext.encode(this);
  119.     }
  120. });
  121. Ext.ComponentMgr = function(){
  122.     var all = new Ext.util.MixedCollection();
  123.     var types = {};
  124.     var ptypes = {};
  125.     return {
  126.         
  127.         register : function(c){
  128.             all.add(c);
  129.         },
  130.         
  131.         unregister : function(c){
  132.             all.remove(c);
  133.         },
  134.         
  135.         get : function(id){
  136.             return all.get(id);
  137.         },
  138.         
  139.         onAvailable : function(id, fn, scope){
  140.             all.on("add", function(index, o){
  141.                 if(o.id == id){
  142.                     fn.call(scope || o, o);
  143.                     all.un("add", fn, scope);
  144.                 }
  145.             });
  146.         },
  147.         
  148.         all : all,
  149.         
  150.         
  151.         isRegistered : function(xtype){
  152.             return types[xtype] !== undefined;    
  153.         },
  154.         
  155.         registerType : function(xtype, cls){
  156.             types[xtype] = cls;
  157.             cls.xtype = xtype;
  158.         },
  159.         
  160.         create : function(config, defaultType){
  161.             return config.render ? config : new types[config.xtype || defaultType](config);
  162.         },
  163.         
  164.         registerPlugin : function(ptype, cls){
  165.             ptypes[ptype] = cls;
  166.             cls.ptype = ptype;
  167.         },
  168.         
  169.         createPlugin : function(config, defaultType){
  170.             var PluginCls = ptypes[config.ptype || defaultType];
  171.             if (PluginCls.init) {
  172.                 return PluginCls;                
  173.             } else {
  174.                 return new PluginCls(config);
  175.             }            
  176.         }
  177.     };
  178. }();
  179. Ext.reg = Ext.ComponentMgr.registerType; 
  180. Ext.preg = Ext.ComponentMgr.registerPlugin;
  181. Ext.create = Ext.ComponentMgr.create;
  182. Ext.Component = function(config){
  183.     config = config || {};
  184.     if(config.initialConfig){
  185.         if(config.isAction){           
  186.             this.baseAction = config;
  187.         }
  188.         config = config.initialConfig; 
  189.     }else if(config.tagName || config.dom || Ext.isString(config)){ 
  190.         config = {applyTo: config, id: config.id || config};
  191.     }
  192.     
  193.     this.initialConfig = config;
  194.     Ext.apply(this, config);
  195.     this.addEvents(
  196.         
  197.         'added',
  198.         
  199.         'disable',
  200.         
  201.         'enable',
  202.         
  203.         'beforeshow',
  204.         
  205.         'show',
  206.         
  207.         'beforehide',
  208.         
  209.         'hide',
  210.         
  211.         'removed',
  212.         
  213.         'beforerender',
  214.         
  215.         'render',
  216.         
  217.         'afterrender',
  218.         
  219.         'beforedestroy',
  220.         
  221.         'destroy',
  222.         
  223.         'beforestaterestore',
  224.         
  225.         'staterestore',
  226.         
  227.         'beforestatesave',
  228.         
  229.         'statesave'
  230.     );
  231.     this.getId();
  232.     Ext.ComponentMgr.register(this);
  233.     Ext.Component.superclass.constructor.call(this);
  234.     if(this.baseAction){
  235.         this.baseAction.addComponent(this);
  236.     }
  237.     this.initComponent();
  238.     if(this.plugins){
  239.         if(Ext.isArray(this.plugins)){
  240.             for(var i = 0, len = this.plugins.length; i < len; i++){
  241.                 this.plugins[i] = this.initPlugin(this.plugins[i]);
  242.             }
  243.         }else{
  244.             this.plugins = this.initPlugin(this.plugins);
  245.         }
  246.     }
  247.     if(this.stateful !== false){
  248.         this.initState();
  249.     }
  250.     if(this.applyTo){
  251.         this.applyToMarkup(this.applyTo);
  252.         delete this.applyTo;
  253.     }else if(this.renderTo){
  254.         this.render(this.renderTo);
  255.         delete this.renderTo;
  256.     }
  257. };
  258. Ext.Component.AUTO_ID = 1000;
  259. Ext.extend(Ext.Component, Ext.util.Observable, {
  260.     
  261.     
  262.     
  263.     
  264.     
  265.     
  266.     
  267.     
  268.     
  269.     
  270.     
  271.     
  272.     
  273.     
  274.     
  275.     
  276.     
  277.     
  278.     disabled : false,
  279.     
  280.     hidden : false,
  281.     
  282.     
  283.     
  284.     
  285.     
  286.     
  287.     
  288.     autoEl : 'div',
  289.     
  290.     disabledClass : 'x-item-disabled',
  291.     
  292.     allowDomMove : true,
  293.     
  294.     autoShow : false,
  295.     
  296.     hideMode : 'display',
  297.     
  298.     hideParent : false,
  299.     
  300.     
  301.     
  302.     
  303.     
  304.     rendered : false,
  305.     
  306.     
  307.     
  308.     
  309.     tplWriteMode : 'overwrite',
  310.     
  311.     
  312.     ctype : 'Ext.Component',
  313.     
  314.     actionMode : 'el',
  315.     
  316.     getActionEl : function(){
  317.         return this[this.actionMode];
  318.     },
  319.     initPlugin : function(p){
  320.         if(p.ptype && !Ext.isFunction(p.init)){
  321.             p = Ext.ComponentMgr.createPlugin(p);
  322.         }else if(Ext.isString(p)){
  323.             p = Ext.ComponentMgr.createPlugin({
  324.                 ptype: p
  325.             });
  326.         }
  327.         p.init(this);
  328.         return p;
  329.     },
  330.     
  331.     initComponent : Ext.emptyFn,
  332.     
  333.     render : function(container, position){
  334.         if(!this.rendered && this.fireEvent('beforerender', this) !== false){
  335.             if(!container && this.el){
  336.                 this.el = Ext.get(this.el);
  337.                 container = this.el.dom.parentNode;
  338.                 this.allowDomMove = false;
  339.             }
  340.             this.container = Ext.get(container);
  341.             if(this.ctCls){
  342.                 this.container.addClass(this.ctCls);
  343.             }
  344.             this.rendered = true;
  345.             if(position !== undefined){
  346.                 if(Ext.isNumber(position)){
  347.                     position = this.container.dom.childNodes[position];
  348.                 }else{
  349.                     position = Ext.getDom(position);
  350.                 }
  351.             }
  352.             this.onRender(this.container, position || null);
  353.             if(this.autoShow){
  354.                 this.el.removeClass(['x-hidden','x-hide-' + this.hideMode]);
  355.             }
  356.             if(this.cls){
  357.                 this.el.addClass(this.cls);
  358.                 delete this.cls;
  359.             }
  360.             if(this.style){
  361.                 this.el.applyStyles(this.style);
  362.                 delete this.style;
  363.             }
  364.             if(this.overCls){
  365.                 this.el.addClassOnOver(this.overCls);
  366.             }
  367.             this.fireEvent('render', this);
  368.             
  369.             
  370.             var contentTarget = this.getContentTarget();
  371.             if (this.html){
  372.                 contentTarget.update(Ext.DomHelper.markup(this.html));
  373.                 delete this.html;
  374.             }
  375.             if (this.contentEl){
  376.                 var ce = Ext.getDom(this.contentEl);
  377.                 Ext.fly(ce).removeClass(['x-hidden', 'x-hide-display']);
  378.                 contentTarget.appendChild(ce);
  379.             }
  380.             if (this.tpl) {
  381.                 if (!this.tpl.compile) {
  382.                     this.tpl = new Ext.XTemplate(this.tpl);
  383.                 }
  384.                 if (this.data) {
  385.                     this.tpl[this.tplWriteMode](contentTarget, this.data);
  386.                     delete this.data;
  387.                 }
  388.             }
  389.             this.afterRender(this.container);
  390.             if(this.hidden){
  391.                 
  392.                 this.doHide();
  393.             }
  394.             if(this.disabled){
  395.                 
  396.                 this.disable(true);
  397.             }
  398.             if(this.stateful !== false){
  399.                 this.initStateEvents();
  400.             }
  401.             this.fireEvent('afterrender', this);
  402.         }
  403.         return this;
  404.     },
  405.     
  406.     update: function(htmlOrData, loadScripts, cb) {
  407.         var contentTarget = this.getContentTarget();
  408.         if (this.tpl && typeof htmlOrData !== "string") {
  409.             this.tpl[this.tplWriteMode](contentTarget, htmlOrData || {});
  410.         } else {
  411.             var html = Ext.isObject(htmlOrData) ? Ext.DomHelper.markup(htmlOrData) : htmlOrData;
  412.             contentTarget.update(html, loadScripts, cb);
  413.         }
  414.     },
  415.     
  416.     onAdded : function(container, pos) {
  417.         this.ownerCt = container;
  418.         this.initRef();
  419.         this.fireEvent('added', this, container, pos);
  420.     },
  421.     
  422.     onRemoved : function() {
  423.         this.removeRef();
  424.         this.fireEvent('removed', this, this.ownerCt);
  425.         delete this.ownerCt;
  426.     },
  427.     
  428.     initRef : function() {
  429.         
  430.         if(this.ref && !this.refOwner){
  431.             var levels = this.ref.split('/'),
  432.                 last = levels.length, 
  433.                 i = 0,
  434.                 t = this;
  435.                 
  436.             while(t && i < last){
  437.                 t = t.ownerCt;
  438.                 ++i;
  439.             }
  440.             if(t){
  441.                 t[this.refName = levels[--i]] = this;
  442.                 
  443.                 this.refOwner = t;
  444.             }
  445.         }
  446.     },
  447.     removeRef : function() {
  448.         if (this.refOwner && this.refName) {
  449.             delete this.refOwner[this.refName];
  450.             delete this.refOwner;
  451.         }
  452.     },
  453.     
  454.     initState : function(){
  455.         if(Ext.state.Manager){
  456.             var id = this.getStateId();
  457.             if(id){
  458.                 var state = Ext.state.Manager.get(id);
  459.                 if(state){
  460.                     if(this.fireEvent('beforestaterestore', this, state) !== false){
  461.                         this.applyState(Ext.apply({}, state));
  462.                         this.fireEvent('staterestore', this, state);
  463.                     }
  464.                 }
  465.             }
  466.         }
  467.     },
  468.     
  469.     getStateId : function(){
  470.         return this.stateId || ((this.id.indexOf('ext-comp-') == 0 || this.id.indexOf('ext-gen') == 0) ? null : this.id);
  471.     },
  472.     
  473.     initStateEvents : function(){
  474.         if(this.stateEvents){
  475.             for(var i = 0, e; e = this.stateEvents[i]; i++){
  476.                 this.on(e, this.saveState, this, {delay:100});
  477.             }
  478.         }
  479.     },
  480.     
  481.     applyState : function(state){
  482.         if(state){
  483.             Ext.apply(this, state);
  484.         }
  485.     },
  486.     
  487.     getState : function(){
  488.         return null;
  489.     },
  490.     
  491.     saveState : function(){
  492.         if(Ext.state.Manager && this.stateful !== false){
  493.             var id = this.getStateId();
  494.             if(id){
  495.                 var state = this.getState();
  496.                 if(this.fireEvent('beforestatesave', this, state) !== false){
  497.                     Ext.state.Manager.set(id, state);
  498.                     this.fireEvent('statesave', this, state);
  499.                 }
  500.             }
  501.         }
  502.     },
  503.     
  504.     applyToMarkup : function(el){
  505.         this.allowDomMove = false;
  506.         this.el = Ext.get(el);
  507.         this.render(this.el.dom.parentNode);
  508.     },
  509.     
  510.     addClass : function(cls){
  511.         if(this.el){
  512.             this.el.addClass(cls);
  513.         }else{
  514.             this.cls = this.cls ? this.cls + ' ' + cls : cls;
  515.         }
  516.         return this;
  517.     },
  518.     
  519.     removeClass : function(cls){
  520.         if(this.el){
  521.             this.el.removeClass(cls);
  522.         }else if(this.cls){
  523.             this.cls = this.cls.split(' ').remove(cls).join(' ');
  524.         }
  525.         return this;
  526.     },
  527.     
  528.     
  529.     onRender : function(ct, position){
  530.         if(!this.el && this.autoEl){
  531.             if(Ext.isString(this.autoEl)){
  532.                 this.el = document.createElement(this.autoEl);
  533.             }else{
  534.                 var div = document.createElement('div');
  535.                 Ext.DomHelper.overwrite(div, this.autoEl);
  536.                 this.el = div.firstChild;
  537.             }
  538.             if (!this.el.id) {
  539.                 this.el.id = this.getId();
  540.             }
  541.         }
  542.         if(this.el){
  543.             this.el = Ext.get(this.el);
  544.             if(this.allowDomMove !== false){
  545.                 ct.dom.insertBefore(this.el.dom, position);
  546.                 if (div) {
  547.                     Ext.removeNode(div);
  548.                     div = null;
  549.                 }
  550.             }
  551.         }
  552.     },
  553.     
  554.     getAutoCreate : function(){
  555.         var cfg = Ext.isObject(this.autoCreate) ?
  556.                       this.autoCreate : Ext.apply({}, this.defaultAutoCreate);
  557.         if(this.id && !cfg.id){
  558.             cfg.id = this.id;
  559.         }
  560.         return cfg;
  561.     },
  562.     
  563.     afterRender : Ext.emptyFn,
  564.     
  565.     destroy : function(){
  566.         if(!this.isDestroyed){
  567.             if(this.fireEvent('beforedestroy', this) !== false){
  568.                 this.destroying = true;
  569.                 this.beforeDestroy();
  570.                 if(this.ownerCt && this.ownerCt.remove){
  571.                     this.ownerCt.remove(this, false);
  572.                 }
  573.                 if(this.rendered){
  574.                     this.el.remove();
  575.                     if(this.actionMode == 'container' || this.removeMode == 'container'){
  576.                         this.container.remove();
  577.                     }
  578.                 }
  579.                 this.onDestroy();
  580.                 Ext.ComponentMgr.unregister(this);
  581.                 this.fireEvent('destroy', this);
  582.                 this.purgeListeners();
  583.                 this.destroying = false;
  584.                 this.isDestroyed = true;
  585.             }
  586.         }
  587.     },
  588.     deleteMembers : function(){
  589.         var args = arguments;
  590.         for(var i = 0, len = args.length; i < len; ++i){
  591.             delete this[args[i]];
  592.         }
  593.     },
  594.     
  595.     beforeDestroy : Ext.emptyFn,
  596.     
  597.     onDestroy  : Ext.emptyFn,
  598.     
  599.     getEl : function(){
  600.         return this.el;
  601.     },
  602.     
  603.     getContentTarget : function(){
  604.         return this.el;
  605.     },
  606.     
  607.     getId : function(){
  608.         return this.id || (this.id = 'ext-comp-' + (++Ext.Component.AUTO_ID));
  609.     },
  610.     
  611.     getItemId : function(){
  612.         return this.itemId || this.getId();
  613.     },
  614.     
  615.     focus : function(selectText, delay){
  616.         if(delay){
  617.             this.focus.defer(Ext.isNumber(delay) ? delay : 10, this, [selectText, false]);
  618.             return;
  619.         }
  620.         if(this.rendered){
  621.             this.el.focus();
  622.             if(selectText === true){
  623.                 this.el.dom.select();
  624.             }
  625.         }
  626.         return this;
  627.     },
  628.     
  629.     blur : function(){
  630.         if(this.rendered){
  631.             this.el.blur();
  632.         }
  633.         return this;
  634.     },
  635.     
  636.     disable : function( silent){
  637.         if(this.rendered){
  638.             this.onDisable();
  639.         }
  640.         this.disabled = true;
  641.         if(silent !== true){
  642.             this.fireEvent('disable', this);
  643.         }
  644.         return this;
  645.     },
  646.     
  647.     onDisable : function(){
  648.         this.getActionEl().addClass(this.disabledClass);
  649.         this.el.dom.disabled = true;
  650.     },
  651.     
  652.     enable : function(){
  653.         if(this.rendered){
  654.             this.onEnable();
  655.         }
  656.         this.disabled = false;
  657.         this.fireEvent('enable', this);
  658.         return this;
  659.     },
  660.     
  661.     onEnable : function(){
  662.         this.getActionEl().removeClass(this.disabledClass);
  663.         this.el.dom.disabled = false;
  664.     },
  665.     
  666.     setDisabled : function(disabled){
  667.         return this[disabled ? 'disable' : 'enable']();
  668.     },
  669.     
  670.     show : function(){
  671.         if(this.fireEvent('beforeshow', this) !== false){
  672.             this.hidden = false;
  673.             if(this.autoRender){
  674.                 this.render(Ext.isBoolean(this.autoRender) ? Ext.getBody() : this.autoRender);
  675.             }
  676.             if(this.rendered){
  677.                 this.onShow();
  678.             }
  679.             this.fireEvent('show', this);
  680.         }
  681.         return this;
  682.     },
  683.     
  684.     onShow : function(){
  685.         this.getVisibilityEl().removeClass('x-hide-' + this.hideMode);
  686.     },
  687.     
  688.     hide : function(){
  689.         if(this.fireEvent('beforehide', this) !== false){
  690.             this.doHide();
  691.             this.fireEvent('hide', this);
  692.         }
  693.         return this;
  694.     },
  695.     
  696.     doHide: function(){
  697.         this.hidden = true;
  698.         if(this.rendered){
  699.             this.onHide();
  700.         }
  701.     },
  702.     
  703.     onHide : function(){
  704.         this.getVisibilityEl().addClass('x-hide-' + this.hideMode);
  705.     },
  706.     
  707.     getVisibilityEl : function(){
  708.         return this.hideParent ? this.container : this.getActionEl();
  709.     },
  710.     
  711.     setVisible : function(visible){
  712.         return this[visible ? 'show' : 'hide']();
  713.     },
  714.     
  715.     isVisible : function(){
  716.         return this.rendered && this.getVisibilityEl().isVisible();
  717.     },
  718.     
  719.     cloneConfig : function(overrides){
  720.         overrides = overrides || {};
  721.         var id = overrides.id || Ext.id();
  722.         var cfg = Ext.applyIf(overrides, this.initialConfig);
  723.         cfg.id = id; 
  724.         return new this.constructor(cfg);
  725.     },
  726.     
  727.     getXType : function(){
  728.         return this.constructor.xtype;
  729.     },
  730.     
  731.     isXType : function(xtype, shallow){
  732.         
  733.         if (Ext.isFunction(xtype)){
  734.             xtype = xtype.xtype; 
  735.         }else if (Ext.isObject(xtype)){
  736.             xtype = xtype.constructor.xtype; 
  737.         }
  738.         return !shallow ? ('/' + this.getXTypes() + '/').indexOf('/' + xtype + '/') != -1 : this.constructor.xtype == xtype;
  739.     },
  740.     
  741.     getXTypes : function(){
  742.         var tc = this.constructor;
  743.         if(!tc.xtypes){
  744.             var c = [], sc = this;
  745.             while(sc && sc.constructor.xtype){
  746.                 c.unshift(sc.constructor.xtype);
  747.                 sc = sc.constructor.superclass;
  748.             }
  749.             tc.xtypeChain = c;
  750.             tc.xtypes = c.join('/');
  751.         }
  752.         return tc.xtypes;
  753.     },
  754.     
  755.     findParentBy : function(fn) {
  756.         for (var p = this.ownerCt; (p != null) && !fn(p, this); p = p.ownerCt);
  757.         return p || null;
  758.     },
  759.     
  760.     findParentByType : function(xtype) {
  761.         return Ext.isFunction(xtype) ?
  762.             this.findParentBy(function(p){
  763.                 return p.constructor === xtype;
  764.             }) :
  765.             this.findParentBy(function(p){
  766.                 return p.constructor.xtype === xtype;
  767.             });
  768.     },
  769.     
  770.     getPositionEl : function(){
  771.         return this.positionEl || this.el;
  772.     },
  773.     
  774.     purgeListeners : function(){
  775.         Ext.Component.superclass.purgeListeners.call(this);
  776.         if(this.mons){
  777.             this.on('beforedestroy', this.clearMons, this, {single: true});
  778.         }
  779.     },
  780.     
  781.     clearMons : function(){
  782.         Ext.each(this.mons, function(m){
  783.             m.item.un(m.ename, m.fn, m.scope);
  784.         }, this);
  785.         this.mons = [];
  786.     },
  787.     
  788.     createMons: function(){
  789.         if(!this.mons){
  790.             this.mons = [];
  791.             this.on('beforedestroy', this.clearMons, this, {single: true});
  792.         }
  793.     },
  794.     
  795.     mon : function(item, ename, fn, scope, opt){
  796.         this.createMons();
  797.         if(Ext.isObject(ename)){
  798.             var propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;
  799.             var o = ename;
  800.             for(var e in o){
  801.                 if(propRe.test(e)){
  802.                     continue;
  803.                 }
  804.                 if(Ext.isFunction(o[e])){
  805.                     
  806.                     this.mons.push({
  807.                         item: item, ename: e, fn: o[e], scope: o.scope
  808.                     });
  809.                     item.on(e, o[e], o.scope, o);
  810.                 }else{
  811.                     
  812.                     this.mons.push({
  813.                         item: item, ename: e, fn: o[e], scope: o.scope
  814.                     });
  815.                     item.on(e, o[e]);
  816.                 }
  817.             }
  818.             return;
  819.         }
  820.         this.mons.push({
  821.             item: item, ename: ename, fn: fn, scope: scope
  822.         });
  823.         item.on(ename, fn, scope, opt);
  824.     },
  825.     
  826.     mun : function(item, ename, fn, scope){
  827.         var found, mon;
  828.         this.createMons();
  829.         for(var i = 0, len = this.mons.length; i < len; ++i){
  830.             mon = this.mons[i];
  831.             if(item === mon.item && ename == mon.ename && fn === mon.fn && scope === mon.scope){
  832.                 this.mons.splice(i, 1);
  833.                 item.un(ename, fn, scope);
  834.                 found = true;
  835.                 break;
  836.             }
  837.         }
  838.         return found;
  839.     },
  840.     
  841.     nextSibling : function(){
  842.         if(this.ownerCt){
  843.             var index = this.ownerCt.items.indexOf(this);
  844.             if(index != -1 && index+1 < this.ownerCt.items.getCount()){
  845.                 return this.ownerCt.items.itemAt(index+1);
  846.             }
  847.         }
  848.         return null;
  849.     },
  850.     
  851.     previousSibling : function(){
  852.         if(this.ownerCt){
  853.             var index = this.ownerCt.items.indexOf(this);
  854.             if(index > 0){
  855.                 return this.ownerCt.items.itemAt(index-1);
  856.             }
  857.         }
  858.         return null;
  859.     },
  860.     
  861.     getBubbleTarget : function(){
  862.         return this.ownerCt;
  863.     }
  864. });
  865. Ext.reg('component', Ext.Component);
  866. Ext.Action = Ext.extend(Object, {
  867.     
  868.     
  869.     
  870.     
  871.     
  872.     
  873.     
  874.     constructor : function(config){
  875.         this.initialConfig = config;
  876.         this.itemId = config.itemId = (config.itemId || config.id || Ext.id());
  877.         this.items = [];
  878.     },
  879.     
  880.     
  881.     isAction : true,
  882.     
  883.     setText : function(text){
  884.         this.initialConfig.text = text;
  885.         this.callEach('setText', [text]);
  886.     },
  887.     
  888.     getText : function(){
  889.         return this.initialConfig.text;
  890.     },
  891.     
  892.     setIconClass : function(cls){
  893.         this.initialConfig.iconCls = cls;
  894.         this.callEach('setIconClass', [cls]);
  895.     },
  896.     
  897.     getIconClass : function(){
  898.         return this.initialConfig.iconCls;
  899.     },
  900.     
  901.     setDisabled : function(v){
  902.         this.initialConfig.disabled = v;
  903.         this.callEach('setDisabled', [v]);
  904.     },
  905.     
  906.     enable : function(){
  907.         this.setDisabled(false);
  908.     },
  909.     
  910.     disable : function(){
  911.         this.setDisabled(true);
  912.     },
  913.     
  914.     isDisabled : function(){
  915.         return this.initialConfig.disabled;
  916.     },
  917.     
  918.     setHidden : function(v){
  919.         this.initialConfig.hidden = v;
  920.         this.callEach('setVisible', [!v]);
  921.     },
  922.     
  923.     show : function(){
  924.         this.setHidden(false);
  925.     },
  926.     
  927.     hide : function(){
  928.         this.setHidden(true);
  929.     },
  930.     
  931.     isHidden : function(){
  932.         return this.initialConfig.hidden;
  933.     },
  934.     
  935.     setHandler : function(fn, scope){
  936.         this.initialConfig.handler = fn;
  937.         this.initialConfig.scope = scope;
  938.         this.callEach('setHandler', [fn, scope]);
  939.     },
  940.     
  941.     each : function(fn, scope){
  942.         Ext.each(this.items, fn, scope);
  943.     },
  944.     
  945.     callEach : function(fnName, args){
  946.         var cs = this.items;
  947.         for(var i = 0, len = cs.length; i < len; i++){
  948.             cs[i][fnName].apply(cs[i], args);
  949.         }
  950.     },
  951.     
  952.     addComponent : function(comp){
  953.         this.items.push(comp);
  954.         comp.on('destroy', this.removeComponent, this);
  955.     },
  956.     
  957.     removeComponent : function(comp){
  958.         this.items.remove(comp);
  959.     },
  960.     
  961.     execute : function(){
  962.         this.initialConfig.handler.apply(this.initialConfig.scope || window, arguments);
  963.     }
  964. });
  965. (function(){
  966. Ext.Layer = function(config, existingEl){
  967.     config = config || {};
  968.     var dh = Ext.DomHelper;
  969.     var cp = config.parentEl, pel = cp ? Ext.getDom(cp) : document.body;
  970.     if(existingEl){
  971.         this.dom = Ext.getDom(existingEl);
  972.     }
  973.     if(!this.dom){
  974.         var o = config.dh || {tag: 'div', cls: 'x-layer'};
  975.         this.dom = dh.append(pel, o);
  976.     }
  977.     if(config.cls){
  978.         this.addClass(config.cls);
  979.     }
  980.     this.constrain = config.constrain !== false;
  981.     this.setVisibilityMode(Ext.Element.VISIBILITY);
  982.     if(config.id){
  983.         this.id = this.dom.id = config.id;
  984.     }else{
  985.         this.id = Ext.id(this.dom);
  986.     }
  987.     this.zindex = config.zindex || this.getZIndex();
  988.     this.position('absolute', this.zindex);
  989.     if(config.shadow){
  990.         this.shadowOffset = config.shadowOffset || 4;
  991.         this.shadow = new Ext.Shadow({
  992.             offset : this.shadowOffset,
  993.             mode : config.shadow
  994.         });
  995.     }else{
  996.         this.shadowOffset = 0;
  997.     }
  998.     this.useShim = config.shim !== false && Ext.useShims;
  999.     this.useDisplay = config.useDisplay;
  1000.     this.hide();
  1001. };
  1002. var supr = Ext.Element.prototype;
  1003. var shims = [];
  1004. Ext.extend(Ext.Layer, Ext.Element, {
  1005.     getZIndex : function(){
  1006.         return this.zindex || parseInt((this.getShim() || this).getStyle('z-index'), 10) || 11000;
  1007.     },
  1008.     getShim : function(){
  1009.         if(!this.useShim){
  1010.             return null;
  1011.         }
  1012.         if(this.shim){
  1013.             return this.shim;
  1014.         }
  1015.         var shim = shims.shift();
  1016.         if(!shim){
  1017.             shim = this.createShim();
  1018.             shim.enableDisplayMode('block');
  1019.             shim.dom.style.display = 'none';
  1020.             shim.dom.style.visibility = 'visible';
  1021.         }
  1022.         var pn = this.dom.parentNode;
  1023.         if(shim.dom.parentNode != pn){
  1024.             pn.insertBefore(shim.dom, this.dom);
  1025.         }
  1026.         shim.setStyle('z-index', this.getZIndex()-2);
  1027.         this.shim = shim;
  1028.         return shim;
  1029.     },
  1030.     hideShim : function(){
  1031.         if(this.shim){
  1032.             this.shim.setDisplayed(false);
  1033.             shims.push(this.shim);
  1034.             delete this.shim;
  1035.         }
  1036.     },
  1037.     disableShadow : function(){
  1038.         if(this.shadow){
  1039.             this.shadowDisabled = true;
  1040.             this.shadow.hide();
  1041.             this.lastShadowOffset = this.shadowOffset;
  1042.             this.shadowOffset = 0;
  1043.         }
  1044.     },
  1045.     enableShadow : function(show){
  1046.         if(this.shadow){
  1047.             this.shadowDisabled = false;
  1048.             this.shadowOffset = this.lastShadowOffset;
  1049.             delete this.lastShadowOffset;
  1050.             if(show){
  1051.                 this.sync(true);
  1052.             }
  1053.         }
  1054.     },
  1055.     
  1056.     
  1057.     
  1058.     sync : function(doShow){
  1059.         var sw = this.shadow;
  1060.         if(!this.updating && this.isVisible() && (sw || this.useShim)){
  1061.             var sh = this.getShim();
  1062.             var w = this.getWidth(),
  1063.                 h = this.getHeight();
  1064.             var l = this.getLeft(true),
  1065.                 t = this.getTop(true);
  1066.             if(sw && !this.shadowDisabled){
  1067.                 if(doShow && !sw.isVisible()){
  1068.                     sw.show(this);
  1069.                 }else{
  1070.                     sw.realign(l, t, w, h);
  1071.                 }
  1072.                 if(sh){
  1073.                     if(doShow){
  1074.                        sh.show();
  1075.                     }
  1076.                     
  1077.                     var a = sw.adjusts, s = sh.dom.style;
  1078.                     s.left = (Math.min(l, l+a.l))+'px';
  1079.                     s.top = (Math.min(t, t+a.t))+'px';
  1080.                     s.width = (w+a.w)+'px';
  1081.                     s.height = (h+a.h)+'px';
  1082.                 }
  1083.             }else if(sh){
  1084.                 if(doShow){
  1085.                    sh.show();
  1086.                 }
  1087.                 sh.setSize(w, h);
  1088.                 sh.setLeftTop(l, t);
  1089.             }
  1090.         }
  1091.     },
  1092.     
  1093.     destroy : function(){
  1094.         this.hideShim();
  1095.         if(this.shadow){
  1096.             this.shadow.hide();
  1097.         }
  1098.         this.removeAllListeners();
  1099.         Ext.removeNode(this.dom);
  1100.         delete this.dom;
  1101.     },
  1102.     remove : function(){
  1103.         this.destroy();
  1104.     },
  1105.     
  1106.     beginUpdate : function(){
  1107.         this.updating = true;
  1108.     },
  1109.     
  1110.     endUpdate : function(){
  1111.         this.updating = false;
  1112.         this.sync(true);
  1113.     },
  1114.     
  1115.     hideUnders : function(negOffset){
  1116.         if(this.shadow){
  1117.             this.shadow.hide();
  1118.         }
  1119.         this.hideShim();
  1120.     },
  1121.     
  1122.     constrainXY : function(){
  1123.         if(this.constrain){
  1124.             var vw = Ext.lib.Dom.getViewWidth(),
  1125.                 vh = Ext.lib.Dom.getViewHeight();
  1126.             var s = Ext.getDoc().getScroll();
  1127.             var xy = this.getXY();
  1128.             var x = xy[0], y = xy[1];
  1129.             var so = this.shadowOffset;
  1130.             var w = this.dom.offsetWidth+so, h = this.dom.offsetHeight+so;
  1131.             
  1132.             var moved = false;
  1133.             
  1134.             if((x + w) > vw+s.left){
  1135.                 x = vw - w - so;
  1136.                 moved = true;
  1137.             }
  1138.             if((y + h) > vh+s.top){
  1139.                 y = vh - h - so;
  1140.                 moved = true;
  1141.             }
  1142.             
  1143.             if(x < s.left){
  1144.                 x = s.left;
  1145.                 moved = true;
  1146.             }
  1147.             if(y < s.top){
  1148.                 y = s.top;
  1149.                 moved = true;
  1150.             }
  1151.             if(moved){
  1152.                 if(this.avoidY){
  1153.                     var ay = this.avoidY;
  1154.                     if(y <= ay && (y+h) >= ay){
  1155.                         y = ay-h-5;
  1156.                     }
  1157.                 }
  1158.                 xy = [x, y];
  1159.                 this.storeXY(xy);
  1160.                 supr.setXY.call(this, xy);
  1161.                 this.sync();
  1162.             }
  1163.         }
  1164.         return this;
  1165.     },
  1166.     isVisible : function(){
  1167.         return this.visible;
  1168.     },
  1169.     
  1170.     showAction : function(){
  1171.         this.visible = true; 
  1172.         if(this.useDisplay === true){
  1173.             this.setDisplayed('');
  1174.         }else if(this.lastXY){
  1175.             supr.setXY.call(this, this.lastXY);
  1176.         }else if(this.lastLT){
  1177.             supr.setLeftTop.call(this, this.lastLT[0], this.lastLT[1]);
  1178.         }
  1179.     },
  1180.     
  1181.     hideAction : function(){
  1182.         this.visible = false;
  1183.         if(this.useDisplay === true){
  1184.             this.setDisplayed(false);
  1185.         }else{
  1186.             this.setLeftTop(-10000,-10000);
  1187.         }
  1188.     },
  1189.     
  1190.     setVisible : function(v, a, d, c, e){
  1191.         if(v){
  1192.             this.showAction();
  1193.         }
  1194.         if(a && v){
  1195.             var cb = function(){
  1196.                 this.sync(true);
  1197.                 if(c){
  1198.                     c();
  1199.                 }
  1200.             }.createDelegate(this);
  1201.             supr.setVisible.call(this, true, true, d, cb, e);
  1202.         }else{
  1203.             if(!v){
  1204.                 this.hideUnders(true);
  1205.             }
  1206.             var cb = c;
  1207.             if(a){
  1208.                 cb = function(){
  1209.                     this.hideAction();
  1210.                     if(c){
  1211.                         c();
  1212.                     }
  1213.                 }.createDelegate(this);
  1214.             }
  1215.             supr.setVisible.call(this, v, a, d, cb, e);
  1216.             if(v){
  1217.                 this.sync(true);
  1218.             }else if(!a){
  1219.                 this.hideAction();
  1220.             }
  1221.         }
  1222.         return this;
  1223.     },
  1224.     storeXY : function(xy){
  1225.         delete this.lastLT;
  1226.         this.lastXY = xy;
  1227.     },
  1228.     storeLeftTop : function(left, top){
  1229.         delete this.lastXY;
  1230.         this.lastLT = [left, top];
  1231.     },
  1232.     
  1233.     beforeFx : function(){
  1234.         this.beforeAction();
  1235.         return Ext.Layer.superclass.beforeFx.apply(this, arguments);
  1236.     },
  1237.     
  1238.     afterFx : function(){
  1239.         Ext.Layer.superclass.afterFx.apply(this, arguments);
  1240.         this.sync(this.isVisible());
  1241.     },
  1242.     
  1243.     beforeAction : function(){
  1244.         if(!this.updating && this.shadow){
  1245.             this.shadow.hide();
  1246.         }
  1247.     },
  1248.     
  1249.     setLeft : function(left){
  1250.         this.storeLeftTop(left, this.getTop(true));
  1251.         supr.setLeft.apply(this, arguments);
  1252.         this.sync();
  1253.         return this;
  1254.     },
  1255.     setTop : function(top){
  1256.         this.storeLeftTop(this.getLeft(true), top);
  1257.         supr.setTop.apply(this, arguments);
  1258.         this.sync();
  1259.         return this;
  1260.     },
  1261.     setLeftTop : function(left, top){
  1262.         this.storeLeftTop(left, top);
  1263.         supr.setLeftTop.apply(this, arguments);
  1264.         this.sync();
  1265.         return this;
  1266.     },
  1267.     setXY : function(xy, a, d, c, e){
  1268.         this.fixDisplay();
  1269.         this.beforeAction();
  1270.         this.storeXY(xy);
  1271.         var cb = this.createCB(c);
  1272.         supr.setXY.call(this, xy, a, d, cb, e);
  1273.         if(!a){
  1274.             cb();
  1275.         }
  1276.         return this;
  1277.     },
  1278.     
  1279.     createCB : function(c){
  1280.         var el = this;
  1281.         return function(){
  1282.             el.constrainXY();
  1283.             el.sync(true);
  1284.             if(c){
  1285.                 c();
  1286.             }
  1287.         };
  1288.     },
  1289.     
  1290.     setX : function(x, a, d, c, e){
  1291.         this.setXY([x, this.getY()], a, d, c, e);
  1292.         return this;
  1293.     },
  1294.     
  1295.     setY : function(y, a, d, c, e){
  1296.         this.setXY([this.getX(), y], a, d, c, e);
  1297.         return this;
  1298.     },
  1299.     
  1300.     setSize : function(w, h, a, d, c, e){
  1301.         this.beforeAction();
  1302.         var cb = this.createCB(c);
  1303.         supr.setSize.call(this, w, h, a, d, cb, e);
  1304.         if(!a){
  1305.             cb();
  1306.         }
  1307.         return this;
  1308.     },
  1309.     
  1310.     setWidth : function(w, a, d, c, e){
  1311.         this.beforeAction();
  1312.         var cb = this.createCB(c);
  1313.         supr.setWidth.call(this, w, a, d, cb, e);
  1314.         if(!a){
  1315.             cb();
  1316.         }
  1317.         return this;
  1318.     },
  1319.     
  1320.     setHeight : function(h, a, d, c, e){
  1321.         this.beforeAction();
  1322.         var cb = this.createCB(c);
  1323.         supr.setHeight.call(this, h, a, d, cb, e);
  1324.         if(!a){
  1325.             cb();
  1326.         }
  1327.         return this;
  1328.     },
  1329.     
  1330.     setBounds : function(x, y, w, h, a, d, c, e){
  1331.         this.beforeAction();
  1332.         var cb = this.createCB(c);
  1333.         if(!a){
  1334.             this.storeXY([x, y]);
  1335.             supr.setXY.call(this, [x, y]);
  1336.             supr.setSize.call(this, w, h, a, d, cb, e);
  1337.             cb();
  1338.         }else{
  1339.             supr.setBounds.call(this, x, y, w, h, a, d, cb, e);
  1340.         }
  1341.         return this;
  1342.     },
  1343.     
  1344.     setZIndex : function(zindex){
  1345.         this.zindex = zindex;
  1346.         this.setStyle('z-index', zindex + 2);
  1347.         if(this.shadow){
  1348.             this.shadow.setZIndex(zindex + 1);
  1349.         }
  1350.         if(this.shim){
  1351.             this.shim.setStyle('z-index', zindex);
  1352.         }
  1353.         return this;
  1354.     }
  1355. });
  1356. })();
  1357. Ext.Shadow = function(config){
  1358.     Ext.apply(this, config);
  1359.     if(typeof this.mode != "string"){
  1360.         this.mode = this.defaultMode;
  1361.     }
  1362.     var o = this.offset, a = {h: 0};
  1363.     var rad = Math.floor(this.offset/2);
  1364.     switch(this.mode.toLowerCase()){ 
  1365.         case "drop":
  1366.             a.w = 0;
  1367.             a.l = a.t = o;
  1368.             a.t -= 1;
  1369.             if(Ext.isIE){
  1370.                 a.l -= this.offset + rad;
  1371.                 a.t -= this.offset + rad;
  1372.                 a.w -= rad;
  1373.                 a.h -= rad;
  1374.                 a.t += 1;
  1375.             }
  1376.         break;
  1377.         case "sides":
  1378.             a.w = (o*2);
  1379.             a.l = -o;
  1380.             a.t = o-1;
  1381.             if(Ext.isIE){
  1382.                 a.l -= (this.offset - rad);
  1383.                 a.t -= this.offset + rad;
  1384.                 a.l += 1;
  1385.                 a.w -= (this.offset - rad)*2;
  1386.                 a.w -= rad + 1;
  1387.                 a.h -= 1;
  1388.             }
  1389.         break;
  1390.         case "frame":
  1391.             a.w = a.h = (o*2);
  1392.             a.l = a.t = -o;
  1393.             a.t += 1;
  1394.             a.h -= 2;
  1395.             if(Ext.isIE){
  1396.                 a.l -= (this.offset - rad);
  1397.                 a.t -= (this.offset - rad);
  1398.                 a.l += 1;
  1399.                 a.w -= (this.offset + rad + 1);
  1400.                 a.h -= (this.offset + rad);
  1401.                 a.h += 1;
  1402.             }
  1403.         break;
  1404.     };
  1405.     this.adjusts = a;
  1406. };
  1407. Ext.Shadow.prototype = {
  1408.     
  1409.     
  1410.     offset: 4,
  1411.     
  1412.     defaultMode: "drop",
  1413.     
  1414.     show : function(target){
  1415.         target = Ext.get(target);
  1416.         if(!this.el){
  1417.             this.el = Ext.Shadow.Pool.pull();
  1418.             if(this.el.dom.nextSibling != target.dom){
  1419.                 this.el.insertBefore(target);
  1420.             }
  1421.         }
  1422.         this.el.setStyle("z-index", this.zIndex || parseInt(target.getStyle("z-index"), 10)-1);
  1423.         if(Ext.isIE){
  1424.             this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")";
  1425.         }
  1426.         this.realign(
  1427.             target.getLeft(true),
  1428.             target.getTop(true),
  1429.             target.getWidth(),
  1430.             target.getHeight()
  1431.         );
  1432.         this.el.dom.style.display = "block";
  1433.     },
  1434.     
  1435.     isVisible : function(){
  1436.         return this.el ? true : false;  
  1437.     },
  1438.     
  1439.     realign : function(l, t, w, h){
  1440.         if(!this.el){
  1441.             return;
  1442.         }
  1443.         var a = this.adjusts, d = this.el.dom, s = d.style;
  1444.         var iea = 0;
  1445.         s.left = (l+a.l)+"px";
  1446.         s.top = (t+a.t)+"px";
  1447.         var sw = (w+a.w), sh = (h+a.h), sws = sw +"px", shs = sh + "px";
  1448.         if(s.width != sws || s.height != shs){
  1449.             s.width = sws;
  1450.             s.height = shs;
  1451.             if(!Ext.isIE){
  1452.                 var cn = d.childNodes;
  1453.                 var sww = Math.max(0, (sw-12))+"px";
  1454.                 cn[0].childNodes[1].style.width = sww;
  1455.                 cn[1].childNodes[1].style.width = sww;
  1456.                 cn[2].childNodes[1].style.width = sww;
  1457.                 cn[1].style.height = Math.max(0, (sh-12))+"px";
  1458.             }
  1459.         }
  1460.     },
  1461.     
  1462.     hide : function(){
  1463.         if(this.el){
  1464.             this.el.dom.style.display = "none";
  1465.             Ext.Shadow.Pool.push(this.el);
  1466.             delete this.el;
  1467.         }
  1468.     },
  1469.     
  1470.     setZIndex : function(z){
  1471.         this.zIndex = z;
  1472.         if(this.el){
  1473.             this.el.setStyle("z-index", z);
  1474.         }
  1475.     }
  1476. };
  1477. Ext.Shadow.Pool = function(){
  1478.     var p = [];
  1479.     var markup = Ext.isIE ?
  1480.                  '<div class="x-ie-shadow"></div>' :
  1481.                  '<div class="x-shadow"><div class="xst"><div class="xstl"></div><div class="xstc"></div><div class="xstr"></div></div><div class="xsc"><div class="xsml"></div><div class="xsmc"></div><div class="xsmr"></div></div><div class="xsb"><div class="xsbl"></div><div class="xsbc"></div><div class="xsbr"></div></div></div>';
  1482.     return {
  1483.         pull : function(){
  1484.             var sh = p.shift();
  1485.             if(!sh){
  1486.                 sh = Ext.get(Ext.DomHelper.insertHtml("beforeBegin", document.body.firstChild, markup));
  1487.                 sh.autoBoxAdjust = false;
  1488.             }
  1489.             return sh;
  1490.         },
  1491.         push : function(sh){
  1492.             p.push(sh);
  1493.         }
  1494.     };
  1495. }();
  1496. Ext.BoxComponent = Ext.extend(Ext.Component, {
  1497.     
  1498.     
  1499.     
  1500.     
  1501.     
  1502.     
  1503.     
  1504.     
  1505.     
  1506.     
  1507.     
  1508.     
  1509.     
  1510.     
  1511.     
  1512.     
  1513.     
  1514.     
  1515.     
  1516.     
  1517.     
  1518.     initComponent : function(){
  1519.         Ext.BoxComponent.superclass.initComponent.call(this);
  1520.         this.addEvents(
  1521.             
  1522.             'resize',
  1523.             
  1524.             'move'
  1525.         );
  1526.     },
  1527.     
  1528.     boxReady : false,
  1529.     
  1530.     deferHeight: false,
  1531.     
  1532.     setSize : function(w, h){
  1533.         
  1534.         if(typeof w == 'object'){
  1535.             h = w.height, w = w.width;
  1536.         }
  1537.         if (Ext.isDefined(w) && Ext.isDefined(this.boxMinWidth) && (w < this.boxMinWidth)) {
  1538.             w = this.boxMinWidth;
  1539.         }
  1540.         if (Ext.isDefined(h) && Ext.isDefined(this.boxMinHeight) && (h < this.boxMinHeight)) {
  1541.             h = this.boxMinHeight;
  1542.         }
  1543.         if (Ext.isDefined(w) && Ext.isDefined(this.boxMaxWidth) && (w > this.boxMaxWidth)) {
  1544.             w = this.boxMaxWidth;
  1545.         }
  1546.         if (Ext.isDefined(h) && Ext.isDefined(this.boxMaxHeight) && (h > this.boxMaxHeight)) {
  1547.             h = this.boxMaxHeight;
  1548.         }
  1549.         
  1550.         if(!this.boxReady){
  1551.             this.width = w, this.height = h;
  1552.             return this;
  1553.         }
  1554.         
  1555.         if(this.cacheSizes !== false && this.lastSize && this.lastSize.width == w && this.lastSize.height == h){
  1556.             return this;
  1557.         }
  1558.         this.lastSize = {width: w, height: h};
  1559.         var adj = this.adjustSize(w, h),
  1560.             aw = adj.width,
  1561.             ah = adj.height,
  1562.             rz;
  1563.         if(aw !== undefined || ah !== undefined){ 
  1564.             rz = this.getResizeEl();
  1565.             if(!this.deferHeight && aw !== undefined && ah !== undefined){
  1566.                 rz.setSize(aw, ah);
  1567.             }else if(!this.deferHeight && ah !== undefined){
  1568.                 rz.setHeight(ah);
  1569.             }else if(aw !== undefined){
  1570.                 rz.setWidth(aw);
  1571.             }
  1572.             this.onResize(aw, ah, w, h);
  1573.         }
  1574.         return this;
  1575.     },
  1576.     
  1577.     setWidth : function(width){
  1578.         return this.setSize(width);
  1579.     },
  1580.     
  1581.     setHeight : function(height){
  1582.         return this.setSize(undefined, height);
  1583.     },
  1584.     
  1585.     getSize : function(){
  1586.         return this.getResizeEl().getSize();
  1587.     },
  1588.     
  1589.     getWidth : function(){
  1590.         return this.getResizeEl().getWidth();
  1591.     },
  1592.     
  1593.     getHeight : function(){
  1594.         return this.getResizeEl().getHeight();
  1595.     },
  1596.     
  1597.     getOuterSize : function(){
  1598.         var el = this.getResizeEl();
  1599.         return {width: el.getWidth() + el.getMargins('lr'),
  1600.                 height: el.getHeight() + el.getMargins('tb')};
  1601.     },
  1602.     
  1603.     getPosition : function(local){
  1604.         var el = this.getPositionEl();
  1605.         if(local === true){
  1606.             return [el.getLeft(true), el.getTop(true)];
  1607.         }
  1608.         return this.xy || el.getXY();
  1609.     },
  1610.     
  1611.     getBox : function(local){
  1612.         var pos = this.getPosition(local);
  1613.         var s = this.getSize();
  1614.         s.x = pos[0];
  1615.         s.y = pos[1];
  1616.         return s;
  1617.     },
  1618.     
  1619.     updateBox : function(box){
  1620.         this.setSize(box.width, box.height);
  1621.         this.setPagePosition(box.x, box.y);
  1622.         return this;
  1623.     },
  1624.     
  1625.     getResizeEl : function(){
  1626.         return this.resizeEl || this.el;
  1627.     },
  1628.     
  1629.     setAutoScroll : function(scroll){
  1630.         if(this.rendered){
  1631.             this.getContentTarget().setOverflow(scroll ? 'auto' : '');
  1632.         }
  1633.         this.autoScroll = scroll;
  1634.         return this;
  1635.     },
  1636.     
  1637.     setPosition : function(x, y){
  1638.         if(x && typeof x[1] == 'number'){
  1639.             y = x[1];
  1640.             x = x[0];
  1641.         }
  1642.         this.x = x;
  1643.         this.y = y;
  1644.         if(!this.boxReady){
  1645.             return this;
  1646.         }
  1647.         var adj = this.adjustPosition(x, y);
  1648.         var ax = adj.x, ay = adj.y;
  1649.         var el = this.getPositionEl();
  1650.         if(ax !== undefined || ay !== undefined){
  1651.             if(ax !== undefined && ay !== undefined){
  1652.                 el.setLeftTop(ax, ay);
  1653.             }else if(ax !== undefined){
  1654.                 el.setLeft(ax);
  1655.             }else if(ay !== undefined){
  1656.                 el.setTop(ay);
  1657.             }
  1658.             this.onPosition(ax, ay);
  1659.             this.fireEvent('move', this, ax, ay);
  1660.         }
  1661.         return this;
  1662.     },
  1663.     
  1664.     setPagePosition : function(x, y){
  1665.         if(x && typeof x[1] == 'number'){
  1666.             y = x[1];
  1667.             x = x[0];
  1668.         }
  1669.         this.pageX = x;
  1670.         this.pageY = y;
  1671.         if(!this.boxReady){
  1672.             return;
  1673.         }
  1674.         if(x === undefined || y === undefined){ 
  1675.             return;
  1676.         }
  1677.         var p = this.getPositionEl().translatePoints(x, y);
  1678.         this.setPosition(p.left, p.top);
  1679.         return this;
  1680.     },
  1681.     
  1682.     afterRender : function(){
  1683.         Ext.BoxComponent.superclass.afterRender.call(this);
  1684.         if(this.resizeEl){
  1685.             this.resizeEl = Ext.get(this.resizeEl);
  1686.         }
  1687.         if(this.positionEl){
  1688.             this.positionEl = Ext.get(this.positionEl);
  1689.         }
  1690.         this.boxReady = true;
  1691.         this.setAutoScroll(this.autoScroll);
  1692.         this.setSize(this.width, this.height);
  1693.         if(this.x || this.y){
  1694.             this.setPosition(this.x, this.y);
  1695.         }else if(this.pageX || this.pageY){
  1696.             this.setPagePosition(this.pageX, this.pageY);
  1697.         }
  1698.     },
  1699.     
  1700.     syncSize : function(){
  1701.         delete this.lastSize;
  1702.         this.setSize(this.autoWidth ? undefined : this.getResizeEl().getWidth(), this.autoHeight ? undefined : this.getResizeEl().getHeight());
  1703.         return this;
  1704.     },
  1705.     
  1706.     onResize : function(adjWidth, adjHeight, rawWidth, rawHeight){
  1707.         this.fireEvent('resize', this, adjWidth, adjHeight, rawWidth, rawHeight);
  1708.     },
  1709.     
  1710.     onPosition : function(x, y){
  1711.     },
  1712.     
  1713.     adjustSize : function(w, h){
  1714.         if(this.autoWidth){
  1715.             w = 'auto';
  1716.         }
  1717.         if(this.autoHeight){
  1718.             h = 'auto';
  1719.         }
  1720.         return {width : w, height: h};
  1721.     },
  1722.     
  1723.     adjustPosition : function(x, y){
  1724.         return {x : x, y: y};
  1725.     }
  1726. });
  1727. Ext.reg('box', Ext.BoxComponent);
  1728. Ext.Spacer = Ext.extend(Ext.BoxComponent, {
  1729.     autoEl:'div'
  1730. });
  1731. Ext.reg('spacer', Ext.Spacer);
  1732. Ext.SplitBar = function(dragElement, resizingElement, orientation, placement, existingProxy){
  1733.     
  1734.     this.el = Ext.get(dragElement, true);
  1735.     this.el.dom.unselectable = "on";
  1736.     
  1737.     this.resizingEl = Ext.get(resizingElement, true);
  1738.     
  1739.     this.orientation = orientation || Ext.SplitBar.HORIZONTAL;
  1740.     
  1741.     
  1742.     this.minSize = 0;
  1743.     
  1744.     this.maxSize = 2000;
  1745.     
  1746.     this.animate = false;
  1747.     
  1748.     this.useShim = false;
  1749.     
  1750.     this.shim = null;
  1751.     if(!existingProxy){
  1752.         
  1753.         this.proxy = Ext.SplitBar.createProxy(this.orientation);
  1754.     }else{
  1755.         this.proxy = Ext.get(existingProxy).dom;
  1756.     }
  1757.     
  1758.     this.dd = new Ext.dd.DDProxy(this.el.dom.id, "XSplitBars", {dragElId : this.proxy.id});
  1759.     
  1760.     this.dd.b4StartDrag = this.onStartProxyDrag.createDelegate(this);
  1761.     
  1762.     this.dd.endDrag = this.onEndProxyDrag.createDelegate(this);
  1763.     
  1764.     this.dragSpecs = {};
  1765.     
  1766.     this.adapter = new Ext.SplitBar.BasicLayoutAdapter();
  1767.     this.adapter.init(this);
  1768.     if(this.orientation == Ext.SplitBar.HORIZONTAL){
  1769.         
  1770.         this.placement = placement || (this.el.getX() > this.resizingEl.getX() ? Ext.SplitBar.LEFT : Ext.SplitBar.RIGHT);
  1771.         this.el.addClass("x-splitbar-h");
  1772.     }else{
  1773.         
  1774.         this.placement = placement || (this.el.getY() > this.resizingEl.getY() ? Ext.SplitBar.TOP : Ext.SplitBar.BOTTOM);
  1775.         this.el.addClass("x-splitbar-v");
  1776.     }
  1777.     this.addEvents(
  1778.         
  1779.         "resize",
  1780.         
  1781.         "moved",
  1782.         
  1783.         "beforeresize",
  1784.         "beforeapply"
  1785.     );
  1786.     Ext.SplitBar.superclass.constructor.call(this);
  1787. };
  1788. Ext.extend(Ext.SplitBar, Ext.util.Observable, {
  1789.     onStartProxyDrag : function(x, y){
  1790.         this.fireEvent("beforeresize", this);
  1791.         this.overlay =  Ext.DomHelper.append(document.body,  {cls: "x-drag-overlay", html: "&#160;"}, true);
  1792.         this.overlay.unselectable();
  1793.         this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
  1794.         this.overlay.show();
  1795.         Ext.get(this.proxy).setDisplayed("block");
  1796.         var size = this.adapter.getElementSize(this);
  1797.         this.activeMinSize = this.getMinimumSize();
  1798.         this.activeMaxSize = this.getMaximumSize();
  1799.         var c1 = size - this.activeMinSize;
  1800.         var c2 = Math.max(this.activeMaxSize - size, 0);
  1801.         if(this.orientation == Ext.SplitBar.HORIZONTAL){
  1802.             this.dd.resetConstraints();
  1803.             this.dd.setXConstraint(
  1804.                 this.placement == Ext.SplitBar.LEFT ? c1 : c2,
  1805.                 this.placement == Ext.SplitBar.LEFT ? c2 : c1,
  1806.                 this.tickSize
  1807.             );
  1808.             this.dd.setYConstraint(0, 0);
  1809.         }else{
  1810.             this.dd.resetConstraints();
  1811.             this.dd.setXConstraint(0, 0);
  1812.             this.dd.setYConstraint(
  1813.                 this.placement == Ext.SplitBar.TOP ? c1 : c2,
  1814.                 this.placement == Ext.SplitBar.TOP ? c2 : c1,
  1815.                 this.tickSize
  1816.             );
  1817.          }
  1818.         this.dragSpecs.startSize = size;
  1819.         this.dragSpecs.startPoint = [x, y];
  1820.         Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd, x, y);
  1821.     },
  1822.     
  1823.     onEndProxyDrag : function(e){
  1824.         Ext.get(this.proxy).setDisplayed(false);
  1825.         var endPoint = Ext.lib.Event.getXY(e);
  1826.         if(this.overlay){
  1827.             Ext.destroy(this.overlay);
  1828.             delete this.overlay;
  1829.         }
  1830.         var newSize;
  1831.         if(this.orientation == Ext.SplitBar.HORIZONTAL){
  1832.             newSize = this.dragSpecs.startSize +
  1833.                 (this.placement == Ext.SplitBar.LEFT ?
  1834.                     endPoint[0] - this.dragSpecs.startPoint[0] :
  1835.                     this.dragSpecs.startPoint[0] - endPoint[0]
  1836.                 );
  1837.         }else{
  1838.             newSize = this.dragSpecs.startSize +
  1839.                 (this.placement == Ext.SplitBar.TOP ?
  1840.                     endPoint[1] - this.dragSpecs.startPoint[1] :
  1841.                     this.dragSpecs.startPoint[1] - endPoint[1]
  1842.                 );
  1843.         }
  1844.         newSize = Math.min(Math.max(newSize, this.activeMinSize), this.activeMaxSize);
  1845.         if(newSize != this.dragSpecs.startSize){
  1846.             if(this.fireEvent('beforeapply', this, newSize) !== false){
  1847.                 this.adapter.setElementSize(this, newSize);
  1848.                 this.fireEvent("moved", this, newSize);
  1849.                 this.fireEvent("resize", this, newSize);
  1850.             }
  1851.         }
  1852.     },
  1853.     
  1854.     getAdapter : function(){
  1855.         return this.adapter;
  1856.     },
  1857.     
  1858.     setAdapter : function(adapter){
  1859.         this.adapter = adapter;
  1860.         this.adapter.init(this);
  1861.     },
  1862.     
  1863.     getMinimumSize : function(){
  1864.         return this.minSize;
  1865.     },
  1866.     
  1867.     setMinimumSize : function(minSize){
  1868.         this.minSize = minSize;
  1869.     },
  1870.     
  1871.     getMaximumSize : function(){
  1872.         return this.maxSize;
  1873.     },
  1874.     
  1875.     setMaximumSize : function(maxSize){
  1876.         this.maxSize = maxSize;
  1877.     },
  1878.     
  1879.     setCurrentSize : function(size){
  1880.         var oldAnimate = this.animate;
  1881.         this.animate = false;
  1882.         this.adapter.setElementSize(this, size);
  1883.         this.animate = oldAnimate;
  1884.     },
  1885.     
  1886.     destroy : function(removeEl){
  1887.         Ext.destroy(this.shim, Ext.get(this.proxy));
  1888.         this.dd.unreg();
  1889.         if(removeEl){
  1890.             this.el.remove();
  1891.         }
  1892.         this.purgeListeners();
  1893.     }
  1894. });
  1895. Ext.SplitBar.createProxy = function(dir){
  1896.     var proxy = new Ext.Element(document.createElement("div"));
  1897.     document.body.appendChild(proxy.dom);
  1898.     proxy.unselectable();
  1899.     var cls = 'x-splitbar-proxy';
  1900.     proxy.addClass(cls + ' ' + (dir == Ext.SplitBar.HORIZONTAL ? cls +'-h' : cls + '-v'));
  1901.     return proxy.dom;
  1902. };
  1903. Ext.SplitBar.BasicLayoutAdapter = function(){
  1904. };
  1905. Ext.SplitBar.BasicLayoutAdapter.prototype = {
  1906.     
  1907.     init : function(s){
  1908.     },
  1909.     
  1910.      getElementSize : function(s){
  1911.         if(s.orientation == Ext.SplitBar.HORIZONTAL){
  1912.             return s.resizingEl.getWidth();
  1913.         }else{
  1914.             return s.resizingEl.getHeight();
  1915.         }
  1916.     },
  1917.     
  1918.     setElementSize : function(s, newSize, onComplete){
  1919.         if(s.orientation == Ext.SplitBar.HORIZONTAL){
  1920.             if(!s.animate){
  1921.                 s.resizingEl.setWidth(newSize);
  1922.                 if(onComplete){
  1923.                     onComplete(s, newSize);
  1924.                 }
  1925.             }else{
  1926.                 s.resizingEl.setWidth(newSize, true, .1, onComplete, 'easeOut');
  1927.             }
  1928.         }else{
  1929.             if(!s.animate){
  1930.                 s.resizingEl.setHeight(newSize);
  1931.                 if(onComplete){
  1932.                     onComplete(s, newSize);
  1933.                 }
  1934.             }else{
  1935.                 s.resizingEl.setHeight(newSize, true, .1, onComplete, 'easeOut');
  1936.             }
  1937.         }
  1938.     }
  1939. };
  1940. Ext.SplitBar.AbsoluteLayoutAdapter = function(container){
  1941.     this.basic = new Ext.SplitBar.BasicLayoutAdapter();
  1942.     this.container = Ext.get(container);
  1943. };
  1944. Ext.SplitBar.AbsoluteLayoutAdapter.prototype = {
  1945.     init : function(s){
  1946.         this.basic.init(s);
  1947.     },
  1948.     getElementSize : function(s){
  1949.         return this.basic.getElementSize(s);
  1950.     },
  1951.     setElementSize : function(s, newSize, onComplete){
  1952.         this.basic.setElementSize(s, newSize, this.moveSplitter.createDelegate(this, [s]));
  1953.     },
  1954.     moveSplitter : function(s){
  1955.         var yes = Ext.SplitBar;
  1956.         switch(s.placement){
  1957.             case yes.LEFT:
  1958.                 s.el.setX(s.resizingEl.getRight());
  1959.                 break;
  1960.             case yes.RIGHT:
  1961.                 s.el.setStyle("right", (this.container.getWidth() - s.resizingEl.getLeft()) + "px");
  1962.                 break;
  1963.             case yes.TOP:
  1964.                 s.el.setY(s.resizingEl.getBottom());
  1965.                 break;
  1966.             case yes.BOTTOM:
  1967.                 s.el.setY(s.resizingEl.getTop() - s.el.getHeight());
  1968.                 break;
  1969.         }
  1970.     }
  1971. };
  1972. Ext.SplitBar.VERTICAL = 1;
  1973. Ext.SplitBar.HORIZONTAL = 2;
  1974. Ext.SplitBar.LEFT = 1;
  1975. Ext.SplitBar.RIGHT = 2;
  1976. Ext.SplitBar.TOP = 3;
  1977. Ext.SplitBar.BOTTOM = 4;
  1978. Ext.Container = Ext.extend(Ext.BoxComponent, {
  1979.     
  1980.     
  1981.     
  1982.     
  1983.     bufferResize: 50,
  1984.     
  1985.     
  1986.     
  1987.     
  1988.     autoDestroy : true,
  1989.     
  1990.     forceLayout: false,
  1991.     
  1992.     
  1993.     defaultType : 'panel',
  1994.     
  1995.     resizeEvent: 'resize',
  1996.     
  1997.     bubbleEvents: ['add', 'remove'],
  1998.     
  1999.     initComponent : function(){
  2000.         Ext.Container.superclass.initComponent.call(this);
  2001.         this.addEvents(
  2002.             
  2003.             'afterlayout',
  2004.             
  2005.             'beforeadd',
  2006.             
  2007.             'beforeremove',
  2008.             
  2009.             'add',
  2010.             
  2011.             'remove'
  2012.         );
  2013.         this.enableBubble(this.bubbleEvents);
  2014.         
  2015.         var items = this.items;
  2016.         if(items){
  2017.             delete this.items;
  2018.             this.add(items);
  2019.         }
  2020.     },
  2021.     
  2022.     initItems : function(){
  2023.         if(!this.items){
  2024.             this.items = new Ext.util.MixedCollection(false, this.getComponentId);
  2025.             this.getLayout(); 
  2026.         }
  2027.     },
  2028.     
  2029.     setLayout : function(layout){
  2030.         if(this.layout && this.layout != layout){
  2031.             this.layout.setContainer(null);
  2032.         }
  2033.         this.initItems();
  2034.         this.layout = layout;
  2035.         layout.setContainer(this);
  2036.     },
  2037.     afterRender: function(){
  2038.         this.layoutDone = false;
  2039.         if(!this.layout){
  2040.             this.layout = 'auto';
  2041.         }
  2042.         if(Ext.isObject(this.layout) && !this.layout.layout){
  2043.             this.layoutConfig = this.layout;
  2044.             this.layout = this.layoutConfig.type;
  2045.         }
  2046.         if(Ext.isString(this.layout)){
  2047.             this.layout = new Ext.Container.LAYOUTS[this.layout.toLowerCase()](this.layoutConfig);
  2048.         }
  2049.         this.setLayout(this.layout);
  2050.         
  2051.         
  2052.         Ext.Container.superclass.afterRender.call(this);
  2053.         if(Ext.isDefined(this.activeItem)){
  2054.             var item = this.activeItem;
  2055.             delete this.activeItem;
  2056.             this.layout.setActiveItem(item);
  2057.         }
  2058.         
  2059.         if(!this.ownerCt && !this.layoutDone){
  2060.             this.doLayout(false, true);
  2061.         }
  2062.         if(this.monitorResize === true){
  2063.             Ext.EventManager.onWindowResize(this.doLayout, this, [false]);
  2064.         }
  2065.     },
  2066.     
  2067.     getLayoutTarget : function(){
  2068.         return this.el;
  2069.     },
  2070.     
  2071.     getComponentId : function(comp){
  2072.         return comp.getItemId();
  2073.     },
  2074.     
  2075.     add : function(comp){
  2076.         this.initItems();
  2077.         var args = arguments.length > 1;
  2078.         if(args || Ext.isArray(comp)){
  2079.             var result = [];
  2080.             Ext.each(args ? arguments : comp, function(c){
  2081.                 result.push(this.add(c));
  2082.             }, this);
  2083.             return result;
  2084.         }
  2085.         var c = this.lookupComponent(this.applyDefaults(comp));
  2086.         var index = this.items.length;
  2087.         if(this.fireEvent('beforeadd', this, c, index) !== false && this.onBeforeAdd(c) !== false){
  2088.             this.items.add(c);
  2089.             
  2090.             c.onAdded(this, index);
  2091.             this.onAdd(c);
  2092.             this.fireEvent('add', this, c, index);
  2093.         }
  2094.         return c;
  2095.     },
  2096.     onAdd : function(c){
  2097.         
  2098.     },
  2099.     
  2100.     
  2101.     onAdded : function(container, pos) {
  2102.         
  2103.         this.ownerCt = container;
  2104.         this.initRef();
  2105.         
  2106.         this.cascade(function(c){
  2107.             c.initRef();
  2108.         });
  2109.         this.fireEvent('added', this, container, pos);
  2110.     },
  2111.     
  2112.     insert : function(index, comp){
  2113.         this.initItems();
  2114.         var a = arguments, len = a.length;
  2115.         if(len > 2){
  2116.             var result = [];
  2117.             for(var i = len-1; i >= 1; --i) {
  2118.                 result.push(this.insert(index, a[i]));
  2119.             }
  2120.             return result;
  2121.         }
  2122.         var c = this.lookupComponent(this.applyDefaults(comp));
  2123.         index = Math.min(index, this.items.length);
  2124.         if(this.fireEvent('beforeadd', this, c, index) !== false && this.onBeforeAdd(c) !== false){
  2125.             if(c.ownerCt == this){
  2126.                 this.items.remove(c);
  2127.             }
  2128.             this.items.insert(index, c);
  2129.             c.onAdded(this, index);
  2130.             this.onAdd(c);
  2131.             this.fireEvent('add', this, c, index);
  2132.         }
  2133.         return c;
  2134.     },
  2135.     
  2136.     applyDefaults : function(c){
  2137.         var d = this.defaults;
  2138.         if(d){
  2139.             if(Ext.isFunction(d)){
  2140.                 d = d.call(this, c);
  2141.             }
  2142.             if(Ext.isString(c)){
  2143.                 c = Ext.ComponentMgr.get(c);
  2144.                 Ext.apply(c, d);
  2145.             }else if(!c.events){
  2146.                 Ext.applyIf(c, d);
  2147.             }else{
  2148.                 Ext.apply(c, d);
  2149.             }
  2150.         }
  2151.         return c;
  2152.     },
  2153.     
  2154.     onBeforeAdd : function(item){
  2155.         if(item.ownerCt){
  2156.             item.ownerCt.remove(item, false);
  2157.         }
  2158.         if(this.hideBorders === true){
  2159.             item.border = (item.border === true);
  2160.         }
  2161.     },
  2162.     
  2163.     remove : function(comp, autoDestroy){
  2164.         this.initItems();
  2165.         var c = this.getComponent(comp);
  2166.         if(c && this.fireEvent('beforeremove', this, c) !== false){
  2167.             this.doRemove(c, autoDestroy);
  2168.             this.fireEvent('remove', this, c);
  2169.         }
  2170.         return c;
  2171.     },
  2172.     onRemove: function(c){
  2173.         
  2174.     },
  2175.     
  2176.     doRemove: function(c, autoDestroy){
  2177.         if(this.layout && this.rendered){
  2178.             this.layout.onRemove(c);
  2179.         }
  2180.         this.items.remove(c);
  2181.         c.onRemoved();
  2182.         this.onRemove(c);
  2183.         if(autoDestroy === true || (autoDestroy !== false && this.autoDestroy)){
  2184.             c.destroy();
  2185.         }
  2186.     },
  2187.     
  2188.     removeAll: function(autoDestroy){
  2189.         this.initItems();
  2190.         var item, rem = [], items = [];
  2191.         this.items.each(function(i){
  2192.             rem.push(i);
  2193.         });
  2194.         for (var i = 0, len = rem.length; i < len; ++i){
  2195.             item = rem[i];
  2196.             this.remove(item, autoDestroy);
  2197.             if(item.ownerCt !== this){
  2198.                 items.push(item);
  2199.             }
  2200.         }
  2201.         return items;
  2202.     },
  2203.     
  2204.     getComponent : function(comp){
  2205.         if(Ext.isObject(comp)){
  2206.             comp = comp.getItemId();
  2207.         }
  2208.         return this.items.get(comp);
  2209.     },
  2210.     
  2211.     lookupComponent : function(comp){
  2212.         if(Ext.isString(comp)){
  2213.             return Ext.ComponentMgr.get(comp);
  2214.         }else if(!comp.events){
  2215.             return this.createComponent(comp);
  2216.         }
  2217.         return comp;
  2218.     },
  2219.     
  2220.     createComponent : function(config, defaultType){
  2221.         
  2222.         
  2223.         var c = config.render ? config : Ext.create(Ext.apply({
  2224.             ownerCt: this
  2225.         }, config), defaultType || this.defaultType);
  2226.         delete c.ownerCt;
  2227.         return c;
  2228.     },
  2229.     
  2230.     canLayout: function() {
  2231.         var el = this.getLayoutTarget(), vs;
  2232.         return !!(el && (vs = el.dom.offsetWidth || el.dom.offsetHeight));
  2233.     },
  2234.     
  2235.     doLayout: function(shallow, force){
  2236.         var rendered = this.rendered,
  2237.             forceLayout = force || this.forceLayout,
  2238.             cs, i, len, c;
  2239.         this.layoutDone = true;
  2240.         if(!this.canLayout() || this.collapsed){
  2241.             this.deferLayout = this.deferLayout || !shallow;
  2242.             if(!forceLayout){
  2243.                 return;
  2244.             }
  2245.             shallow = shallow && !this.deferLayout;
  2246.         } else {
  2247.             delete this.deferLayout;
  2248.         }
  2249.         cs = (shallow !== true && this.items) ? this.items.items : [];
  2250.         for(i = 0, len = cs.length; i < len; i++){
  2251.             if ((c = cs[i]).layout) {
  2252.                 c.suspendLayoutResize = true;
  2253.             }
  2254.         }
  2255.         if(rendered && this.layout){
  2256.             this.layout.layout();
  2257.         }
  2258.         for(i = 0; i < len; i++){
  2259.             if((c = cs[i]).doLayout){
  2260.                 c.doLayout(false, forceLayout);
  2261.             }
  2262.         }
  2263.         if(rendered){
  2264.             this.onLayout(shallow, forceLayout);
  2265.         }
  2266.         
  2267.         this.hasLayout = true;
  2268.         delete this.forceLayout;
  2269.         for(i = 0; i < len; i++){
  2270.             if ((c = cs[i]).layout) {
  2271.                 delete c.suspendLayoutResize;
  2272.             }
  2273.         }
  2274.     },
  2275.     
  2276.     onLayout : Ext.emptyFn,
  2277.     onResize: function(adjWidth, adjHeight, rawWidth, rawHeight){
  2278.         Ext.Container.superclass.onResize.apply(this, arguments);
  2279.         if ((this.rendered && this.layout && this.layout.monitorResize) && !this.suspendLayoutResize) {
  2280.             this.layout.onResize();
  2281.         }
  2282.     },
  2283.     
  2284.     hasLayoutPending: function(){
  2285.         
  2286.         var pending = this.layoutPending;
  2287.         this.ownerCt.bubble(function(c){
  2288.             return !(pending = c.layoutPending);
  2289.         });
  2290.         return pending;
  2291.     },
  2292.     onShow : function(){
  2293.         Ext.Container.superclass.onShow.call(this);
  2294.         if(Ext.isDefined(this.deferLayout)){
  2295.             this.doLayout(true);
  2296.         }
  2297.     },
  2298.     
  2299.     getLayout : function(){
  2300.         if(!this.layout){
  2301.             var layout = new Ext.layout.ContainerLayout(this.layoutConfig);
  2302.             this.setLayout(layout);
  2303.         }
  2304.         return this.layout;
  2305.     },
  2306.     
  2307.     beforeDestroy : function(){
  2308.         var c;
  2309.         if(this.items){
  2310.             while(c = this.items.first()){
  2311.                 this.doRemove(c, true);
  2312.             }
  2313.         }
  2314.         if(this.monitorResize){
  2315.             Ext.EventManager.removeResizeListener(this.doLayout, this);
  2316.         }
  2317.         Ext.destroy(this.layout);
  2318.         Ext.Container.superclass.beforeDestroy.call(this);
  2319.     },
  2320.     
  2321.     bubble : function(fn, scope, args){
  2322.         var p = this;
  2323.         while(p){
  2324.             if(fn.apply(scope || p, args || [p]) === false){
  2325.                 break;
  2326.             }
  2327.             p = p.ownerCt;
  2328.         }
  2329.         return this;
  2330.     },
  2331.     
  2332.     cascade : function(fn, scope, args){
  2333.         if(fn.apply(scope || this, args || [this]) !== false){
  2334.             if(this.items){
  2335.                 var cs = this.items.items;
  2336.                 for(var i = 0, len = cs.length; i < len; i++){
  2337.                     if(cs[i].cascade){
  2338.                         cs[i].cascade(fn, scope, args);
  2339.                     }else{
  2340.                         fn.apply(scope || cs[i], args || [cs[i]]);
  2341.                     }
  2342.                 }
  2343.             }
  2344.         }
  2345.         return this;
  2346.     },
  2347.     
  2348.     findById : function(id){
  2349.         var m, ct = this;
  2350.         this.cascade(function(c){
  2351.             if(ct != c && c.id === id){
  2352.                 m = c;
  2353.                 return false;
  2354.             }
  2355.         });
  2356.         return m || null;
  2357.     },
  2358.     
  2359.     findByType : function(xtype, shallow){
  2360.         return this.findBy(function(c){
  2361.             return c.isXType(xtype, shallow);
  2362.         });
  2363.     },
  2364.     
  2365.     find : function(prop, value){
  2366.         return this.findBy(function(c){
  2367.             return c[prop] === value;
  2368.         });
  2369.     },
  2370.     
  2371.     findBy : function(fn, scope){
  2372.         var m = [], ct = this;
  2373.         this.cascade(function(c){
  2374.             if(ct != c && fn.call(scope || c, c, ct) === true){
  2375.                 m.push(c);
  2376.             }
  2377.         });
  2378.         return m;
  2379.     },
  2380.     
  2381.     get : function(key){
  2382.         return this.items.get(key);
  2383.     }
  2384. });
  2385. Ext.Container.LAYOUTS = {};
  2386. Ext.reg('container', Ext.Container);
  2387. Ext.layout.ContainerLayout = Ext.extend(Object, {
  2388.     
  2389.     
  2390.     
  2391.     
  2392.     monitorResize:false,
  2393.     
  2394.     activeItem : null,
  2395.     constructor : function(config){
  2396.         Ext.apply(this, config);
  2397.     },
  2398.     
  2399.     layout : function(){
  2400.         var target = this.container.getLayoutTarget();
  2401.         if(!(this.hasLayout || Ext.isEmpty(this.targetCls))){
  2402.             target.addClass(this.targetCls)
  2403.         }
  2404.         this.onLayout(this.container, target);
  2405.         this.container.fireEvent('afterlayout', this.container, this);
  2406.         this.hasLayout = true;
  2407.     },
  2408.     
  2409.     onLayout : function(ct, target){
  2410.         this.renderAll(ct, target);
  2411.     },
  2412.     
  2413.     isValidParent : function(c, target){
  2414.         return target && c.getPositionEl().dom.parentNode == (target.dom || target);
  2415.     },
  2416.     
  2417.     renderAll : function(ct, target){
  2418.         var items = ct.items.items;
  2419.         for(var i = 0, len = items.length; i < len; i++) {
  2420.             var c = items[i];
  2421.             if(c && (!c.rendered || !this.isValidParent(c, target))){
  2422.                 this.renderItem(c, i, target);
  2423.             }
  2424.         }
  2425.     },
  2426.     
  2427.     renderItem : function(c, position, target){
  2428.         if(c && !c.rendered){
  2429.             c.render(target, position);
  2430.             this.configureItem(c, position);
  2431.         }else if(c && !this.isValidParent(c, target)){
  2432.             if(Ext.isNumber(position)){
  2433.                 position = target.dom.childNodes[position];
  2434.             }
  2435.             target.dom.insertBefore(c.getPositionEl().dom, position || null);
  2436.             c.container = target;
  2437.             this.configureItem(c, position);
  2438.         }
  2439.     },
  2440.     
  2441.     configureItem: function(c, position){
  2442.         if(this.extraCls){
  2443.             var t = c.getPositionEl ? c.getPositionEl() : c;
  2444.             t.addClass(this.extraCls);
  2445.         }
  2446.         
  2447.         if(c.doLayout && this.forceLayout){
  2448.             c.doLayout(false, true);
  2449.         }
  2450.         if (this.renderHidden && c != this.activeItem) {
  2451.             c.hide();
  2452.         }
  2453.     },
  2454.     onRemove: function(c){
  2455.          if(this.activeItem == c){
  2456.             delete this.activeItem;
  2457.          }
  2458.          if(c.rendered && this.extraCls){
  2459.             var t = c.getPositionEl ? c.getPositionEl() : c;
  2460.             t.removeClass(this.extraCls);
  2461.         }
  2462.     },
  2463.     
  2464.     onResize: function(){
  2465.         var ct = this.container,
  2466.             b = ct.bufferResize;
  2467.         if (ct.collapsed){
  2468.             return;
  2469.         }
  2470.         
  2471.         
  2472.         if (b && ct.ownerCt) {
  2473.             
  2474.             
  2475.             
  2476.             if (!ct.hasLayoutPending()){
  2477.                 if(!this.resizeTask){
  2478.                     this.resizeTask = new Ext.util.DelayedTask(this.runLayout, this);
  2479.                     this.resizeBuffer = Ext.isNumber(b) ? b : 50;
  2480.                 }
  2481.                 ct.layoutPending = true;
  2482.                 this.resizeTask.delay(this.resizeBuffer);
  2483.             }
  2484.         }else{
  2485.             ct.doLayout(false, this.forceLayout);
  2486.         }
  2487.     },
  2488.     
  2489.     runLayout: function(){
  2490.         var ct = this.container;
  2491.         ct.doLayout();
  2492.         delete ct.layoutPending;
  2493.     },
  2494.     
  2495.     setContainer : function(ct){
  2496.         
  2497.         
  2498.         this.container = ct;
  2499.     },
  2500.     
  2501.     parseMargins : function(v){
  2502.         if(Ext.isNumber(v)){
  2503.             v = v.toString();
  2504.         }
  2505.         var ms = v.split(' ');
  2506.         var len = ms.length;
  2507.         if(len == 1){
  2508.             ms[1] = ms[0];
  2509.             ms[2] = ms[0];
  2510.             ms[3] = ms[0];
  2511.         }
  2512.         if(len == 2){
  2513.             ms[2] = ms[0];
  2514.             ms[3] = ms[1];
  2515.         }
  2516.         if(len == 3){
  2517.             ms[3] = ms[1];
  2518.         }
  2519.         return {
  2520.             top:parseInt(ms[0], 10) || 0,
  2521.             right:parseInt(ms[1], 10) || 0,
  2522.             bottom:parseInt(ms[2], 10) || 0,
  2523.             left:parseInt(ms[3], 10) || 0
  2524.         };
  2525.     },
  2526.     
  2527.     fieldTpl: (function() {
  2528.         var t = new Ext.Template(
  2529.             '<div class="x-form-item {itemCls}" tabIndex="-1">',
  2530.                 '<label for="{id}" style="{labelStyle}" class="x-form-item-label">{label}{labelSeparator}</label>',
  2531.                 '<div class="x-form-element" id="x-form-el-{id}" style="{elementStyle}">',
  2532.                 '</div><div class="{clearCls}"></div>',
  2533.             '</div>'
  2534.         );
  2535.         t.disableFormats = true;
  2536.         return t.compile();
  2537.     })(),
  2538.     
  2539.     destroy : function(){
  2540.         if(!Ext.isEmpty(this.targetCls)){
  2541.             var target = this.container.getLayoutTarget();
  2542.             if(target){
  2543.                 target.removeClass(this.targetCls);
  2544.             }
  2545.         }
  2546.     }
  2547. });
  2548. Ext.Container.LAYOUTS['auto'] = Ext.layout.ContainerLayout;
  2549. Ext.layout.FitLayout = Ext.extend(Ext.layout.ContainerLayout, {
  2550.     
  2551.     monitorResize:true,
  2552.     
  2553.     onLayout : function(ct, target){
  2554.         Ext.layout.FitLayout.superclass.onLayout.call(this, ct, target);
  2555.         if(!this.container.collapsed){
  2556.             this.setItemSize(this.activeItem || ct.items.itemAt(0), target.getViewSize(true));
  2557.         }
  2558.     },
  2559.     
  2560.     setItemSize : function(item, size){
  2561.         if(item && size.height > 0){ 
  2562.             item.setSize(size);
  2563.         }
  2564.     }
  2565. });
  2566. Ext.Container.LAYOUTS['fit'] = Ext.layout.FitLayout;
  2567. Ext.layout.CardLayout = Ext.extend(Ext.layout.FitLayout, {
  2568.     
  2569.     deferredRender : false,
  2570.     
  2571.     
  2572.     layoutOnCardChange : false,
  2573.     
  2574.     
  2575.     renderHidden : true,
  2576.     
  2577.     constructor: function(config){
  2578.         Ext.layout.CardLayout.superclass.constructor.call(this, config);
  2579.       
  2580.     },
  2581.     
  2582.     setActiveItem : function(item){
  2583.         var ai = this.activeItem;
  2584.         item = this.container.getComponent(item);
  2585.         if(ai != item){
  2586.             if(ai){
  2587.                 ai.hide();
  2588.                 ai.fireEvent('deactivate', ai);
  2589.             }
  2590.             var layout = item.doLayout && (this.layoutOnCardChange || !item.rendered);
  2591.             this.activeItem = item;
  2592.             if(item){
  2593.                 item.show();
  2594.             }
  2595.             this.layout();
  2596.             if(item && layout){
  2597.                 item.doLayout();
  2598.             }
  2599.             item.fireEvent('activate', item);
  2600.         }
  2601.     },
  2602.     
  2603.     renderAll : function(ct, target){
  2604.         if(this.deferredRender){
  2605.             this.renderItem(this.activeItem, undefined, target);
  2606.         }else{
  2607.             Ext.layout.CardLayout.superclass.renderAll.call(this, ct, target);
  2608.         }
  2609.     }
  2610. });
  2611. Ext.Container.LAYOUTS['card'] = Ext.layout.CardLayout;
  2612. Ext.layout.AnchorLayout = Ext.extend(Ext.layout.ContainerLayout, {
  2613.     
  2614.     
  2615.     monitorResize:true,
  2616.     
  2617.     
  2618.     getAnchorViewSize : function(ct, target){
  2619.         return target.dom == document.body ?
  2620.                    target.getViewSize(true) : target.getStyleSize();
  2621.     },
  2622.     
  2623.     onLayout : function(ct, target){
  2624.         Ext.layout.AnchorLayout.superclass.onLayout.call(this, ct, target);
  2625.         var size = target.getViewSize(true);
  2626.         var w = size.width, h = size.height;
  2627.         if(w < 20 && h < 20){
  2628.             return;
  2629.         }
  2630.         
  2631.         var aw, ah;
  2632.         if(ct.anchorSize){
  2633.             if(typeof ct.anchorSize == 'number'){
  2634.                 aw = ct.anchorSize;
  2635.             }else{
  2636.                 aw = ct.anchorSize.width;
  2637.                 ah = ct.anchorSize.height;
  2638.             }
  2639.         }else{
  2640.             aw = ct.initialConfig.width;
  2641.             ah = ct.initialConfig.height;
  2642.         }
  2643.         var cs = ct.items.items, len = cs.length, i, c, a, cw, ch, el, vs;
  2644.         for(i = 0; i < len; i++){
  2645.             c = cs[i];
  2646.             el = c.getPositionEl();
  2647.             if(c.anchor){
  2648.                 a = c.anchorSpec;
  2649.                 if(!a){ 
  2650.                     vs = c.anchor.split(' ');
  2651.                     c.anchorSpec = a = {
  2652.                         right: this.parseAnchor(vs[0], c.initialConfig.width, aw),
  2653.                         bottom: this.parseAnchor(vs[1], c.initialConfig.height, ah)
  2654.                     };
  2655.                 }
  2656.                 cw = a.right ? this.adjustWidthAnchor(a.right(w) - el.getMargins('lr'), c) : undefined;
  2657.                 ch = a.bottom ? this.adjustHeightAnchor(a.bottom(h) - el.getMargins('tb'), c) : undefined;
  2658.                 if(cw || ch){
  2659.                     c.setSize(cw || undefined, ch || undefined);
  2660.                 }
  2661.             }
  2662.         }
  2663.     },
  2664.     
  2665.     parseAnchor : function(a, start, cstart){
  2666.         if(a && a != 'none'){
  2667.             var last;
  2668.             if(/^(r|right|b|bottom)$/i.test(a)){   
  2669.                 var diff = cstart - start;
  2670.                 return function(v){
  2671.                     if(v !== last){
  2672.                         last = v;
  2673.                         return v - diff;
  2674.                     }
  2675.                 }
  2676.             }else if(a.indexOf('%') != -1){
  2677.                 var ratio = parseFloat(a.replace('%', ''))*.01;   
  2678.                 return function(v){
  2679.                     if(v !== last){
  2680.                         last = v;
  2681.                         return Math.floor(v*ratio);
  2682.                     }
  2683.                 }
  2684.             }else{
  2685.                 a = parseInt(a, 10);
  2686.                 if(!isNaN(a)){                            
  2687.                     return function(v){
  2688.                         if(v !== last){
  2689.                             last = v;
  2690.                             return v + a;
  2691.                         }
  2692.                     }
  2693.                 }
  2694.             }
  2695.         }
  2696.         return false;
  2697.     },
  2698.     
  2699.     adjustWidthAnchor : function(value, comp){
  2700.         return value;
  2701.     },
  2702.     
  2703.     adjustHeightAnchor : function(value, comp){
  2704.         return value;
  2705.     }
  2706.     
  2707. });
  2708. Ext.Container.LAYOUTS['anchor'] = Ext.layout.AnchorLayout;
  2709. Ext.layout.ColumnLayout = Ext.extend(Ext.layout.ContainerLayout, {
  2710.     
  2711.     monitorResize:true,
  2712.     extraCls: 'x-column',
  2713.     scrollOffset : 0,
  2714.     
  2715.     targetCls: 'x-column-layout-ct',
  2716.     isValidParent : function(c, target){
  2717.         return c.getPositionEl().dom.parentNode == this.innerCt.dom;
  2718.     },
  2719.     
  2720.     onLayout : function(ct, target){
  2721.         var cs = ct.items.items, len = cs.length, c, i;
  2722.         if(!this.innerCt){
  2723.             
  2724.             
  2725.             this.innerCt = target.createChild({cls:'x-column-inner'});
  2726.             this.innerCt.createChild({cls:'x-clear'});
  2727.         }
  2728.         this.renderAll(ct, this.innerCt);
  2729.         var size = target.getViewSize(true);
  2730.         if(size.width < 1 && size.height < 1){ 
  2731.             return;
  2732.         }
  2733.         var w = size.width - this.scrollOffset,
  2734.             h = size.height,
  2735.             pw = w;
  2736.         this.innerCt.setWidth(w);
  2737.         
  2738.         
  2739.         for(i = 0; i < len; i++){
  2740.             c = cs[i];
  2741.             if(!c.columnWidth){
  2742.                 pw -= (c.getSize().width + c.getPositionEl().getMargins('lr'));
  2743.             }
  2744.         }
  2745.         pw = pw < 0 ? 0 : pw;
  2746.         for(i = 0; i < len; i++){
  2747.             c = cs[i];
  2748.             if(c.columnWidth){
  2749.                 c.setSize(Math.floor(c.columnWidth * pw) - c.getPositionEl().getMargins('lr'));
  2750.             }
  2751.         }
  2752.     }
  2753.     
  2754. });
  2755. Ext.Container.LAYOUTS['column'] = Ext.layout.ColumnLayout;
  2756. Ext.layout.BorderLayout = Ext.extend(Ext.layout.ContainerLayout, {
  2757.     
  2758.     monitorResize:true,
  2759.     
  2760.     rendered : false,
  2761.     targetCls: 'x-border-layout-ct',
  2762.     
  2763.     onLayout : function(ct, target){
  2764.         var collapsed;
  2765.         if(!this.rendered){
  2766.             var items = ct.items.items;
  2767.             collapsed = [];
  2768.             for(var i = 0, len = items.length; i < len; i++) {
  2769.                 var c = items[i];
  2770.                 var pos = c.region;
  2771.                 if(c.collapsed){
  2772.                     collapsed.push(c);
  2773.                 }
  2774.                 c.collapsed = false;
  2775.                 if(!c.rendered){
  2776.                     c.render(target, i);
  2777.                     c.getPositionEl().addClass('x-border-panel');
  2778.                 }
  2779.                 this[pos] = pos != 'center' && c.split ?
  2780.                     new Ext.layout.BorderLayout.SplitRegion(this, c.initialConfig, pos) :
  2781.                     new Ext.layout.BorderLayout.Region(this, c.initialConfig, pos);
  2782.                 this[pos].render(target, c);
  2783.             }
  2784.             this.rendered = true;
  2785.         }
  2786.         var size = target.getViewSize(false);
  2787.         if(size.width < 20 || size.height < 20){ 
  2788.             if(collapsed){
  2789.                 this.restoreCollapsed = collapsed;
  2790.             }
  2791.             return;
  2792.         }else if(this.restoreCollapsed){
  2793.             collapsed = this.restoreCollapsed;
  2794.             delete this.restoreCollapsed;
  2795.         }
  2796.         var w = size.width, h = size.height;
  2797.         var centerW = w, centerH = h, centerY = 0, centerX = 0;
  2798.         var n = this.north, s = this.south, west = this.west, e = this.east, c = this.center;
  2799.         if(!c && Ext.layout.BorderLayout.WARN !== false){
  2800.             throw 'No center region defined in BorderLayout ' + ct.id;
  2801.         }
  2802.         if(n && n.isVisible()){
  2803.             var b = n.getSize();
  2804.             var m = n.getMargins();
  2805.             b.width = w - (m.left+m.right);
  2806.             b.x = m.left;
  2807.             b.y = m.top;
  2808.             centerY = b.height + b.y + m.bottom;
  2809.             centerH -= centerY;
  2810.             n.applyLayout(b);
  2811.         }
  2812.         if(s && s.isVisible()){
  2813.             var b = s.getSize();
  2814.             var m = s.getMargins();
  2815.             b.width = w - (m.left+m.right);
  2816.             b.x = m.left;
  2817.             var totalHeight = (b.height + m.top + m.bottom);
  2818.             b.y = h - totalHeight + m.top;
  2819.             centerH -= totalHeight;
  2820.             s.applyLayout(b);
  2821.         }
  2822.         if(west && west.isVisible()){
  2823.             var b = west.getSize();
  2824.             var m = west.getMargins();
  2825.             b.height = centerH - (m.top+m.bottom);
  2826.             b.x = m.left;
  2827.             b.y = centerY + m.top;
  2828.             var totalWidth = (b.width + m.left + m.right);
  2829.             centerX += totalWidth;
  2830.             centerW -= totalWidth;
  2831.             west.applyLayout(b);
  2832.         }
  2833.         if(e && e.isVisible()){
  2834.             var b = e.getSize();
  2835.             var m = e.getMargins();
  2836.             b.height = centerH - (m.top+m.bottom);
  2837.             var totalWidth = (b.width + m.left + m.right);
  2838.             b.x = w - totalWidth + m.left;
  2839.             b.y = centerY + m.top;
  2840.             centerW -= totalWidth;
  2841.             e.applyLayout(b);
  2842.         }
  2843.         if(c){
  2844.             var m = c.getMargins();
  2845.             var centerBox = {
  2846.                 x: centerX + m.left,
  2847.                 y: centerY + m.top,
  2848.                 width: centerW - (m.left+m.right),
  2849.                 height: centerH - (m.top+m.bottom)
  2850.             };
  2851.             c.applyLayout(centerBox);
  2852.         }
  2853.         if(collapsed){
  2854.             for(var i = 0, len = collapsed.length; i < len; i++){
  2855.                 collapsed[i].collapse(false);
  2856.             }
  2857.         }
  2858.         if(Ext.isIE && Ext.isStrict){ 
  2859.             target.repaint();
  2860.         }
  2861.     },
  2862.     destroy: function() {
  2863.         var r = ['north', 'south', 'east', 'west'];
  2864.         for (var i = 0; i < r.length; i++) {
  2865.             var region = this[r[i]];
  2866.             if(region){
  2867.                 if(region.destroy){
  2868.                     region.destroy();
  2869.                 }else if (region.split){
  2870.                     region.split.destroy(true);
  2871.                 }
  2872.             }
  2873.         }
  2874.         Ext.layout.BorderLayout.superclass.destroy.call(this);
  2875.     }
  2876.     
  2877. });
  2878. Ext.layout.BorderLayout.Region = function(layout, config, pos){
  2879.     Ext.apply(this, config);
  2880.     this.layout = layout;
  2881.     this.position = pos;
  2882.     this.state = {};
  2883.     if(typeof this.margins == 'string'){
  2884.         this.margins = this.layout.parseMargins(this.margins);
  2885.     }
  2886.     this.margins = Ext.applyIf(this.margins || {}, this.defaultMargins);
  2887.     if(this.collapsible){
  2888.         if(typeof this.cmargins == 'string'){
  2889.             this.cmargins = this.layout.parseMargins(this.cmargins);
  2890.         }
  2891.         if(this.collapseMode == 'mini' && !this.cmargins){
  2892.             this.cmargins = {left:0,top:0,right:0,bottom:0};
  2893.         }else{
  2894.             this.cmargins = Ext.applyIf(this.cmargins || {},
  2895.                 pos == 'north' || pos == 'south' ? this.defaultNSCMargins : this.defaultEWCMargins);
  2896.         }
  2897.     }
  2898. };
  2899. Ext.layout.BorderLayout.Region.prototype = {
  2900.     
  2901.     
  2902.     
  2903.     
  2904.     
  2905.     
  2906.     collapsible : false,
  2907.     
  2908.     split:false,
  2909.     
  2910.     floatable: true,
  2911.     
  2912.     minWidth:50,
  2913.     
  2914.     minHeight:50,
  2915.     
  2916.     defaultMargins : {left:0,top:0,right:0,bottom:0},
  2917.     
  2918.     defaultNSCMargins : {left:5,top:5,right:5,bottom:5},
  2919.     
  2920.     defaultEWCMargins : {left:5,top:0,right:5,bottom:0},
  2921.     floatingZIndex: 100,
  2922.     
  2923.     isCollapsed : false,
  2924.     
  2925.     
  2926.     
  2927.     
  2928.     render : function(ct, p){
  2929.         this.panel = p;
  2930.         p.el.enableDisplayMode();
  2931.         this.targetEl = ct;
  2932.         this.el = p.el;
  2933.         var gs = p.getState, ps = this.position;
  2934.         p.getState = function(){
  2935.             return Ext.apply(gs.call(p) || {}, this.state);
  2936.         }.createDelegate(this);
  2937.         if(ps != 'center'){
  2938.             p.allowQueuedExpand = false;
  2939.             p.on({
  2940.                 beforecollapse: this.beforeCollapse,
  2941.                 collapse: this.onCollapse,
  2942.                 beforeexpand: this.beforeExpand,
  2943.                 expand: this.onExpand,
  2944.                 hide: this.onHide,
  2945.                 show: this.onShow,
  2946.                 scope: this
  2947.             });
  2948.             if(this.collapsible || this.floatable){
  2949.                 p.collapseEl = 'el';
  2950.                 p.slideAnchor = this.getSlideAnchor();
  2951.             }
  2952.             if(p.tools && p.tools.toggle){
  2953.                 p.tools.toggle.addClass('x-tool-collapse-'+ps);
  2954.                 p.tools.toggle.addClassOnOver('x-tool-collapse-'+ps+'-over');
  2955.             }
  2956.         }
  2957.     },
  2958.     
  2959.     getCollapsedEl : function(){
  2960.         if(!this.collapsedEl){
  2961.             if(!this.toolTemplate){
  2962.                 var tt = new Ext.Template(
  2963.                      '<div class="x-tool x-tool-{id}">&#160;</div>'
  2964.                 );
  2965.                 tt.disableFormats = true;
  2966.                 tt.compile();
  2967.                 Ext.layout.BorderLayout.Region.prototype.toolTemplate = tt;
  2968.             }
  2969.             this.collapsedEl = this.targetEl.createChild({
  2970.                 cls: "x-layout-collapsed x-layout-collapsed-"+this.position,
  2971.                 id: this.panel.id + '-xcollapsed'
  2972.             });
  2973.             this.collapsedEl.enableDisplayMode('block');
  2974.             if(this.collapseMode == 'mini'){
  2975.                 this.collapsedEl.addClass('x-layout-cmini-'+this.position);
  2976.                 this.miniCollapsedEl = this.collapsedEl.createChild({
  2977.                     cls: "x-layout-mini x-layout-mini-"+this.position, html: "&#160;"
  2978.                 });
  2979.                 this.miniCollapsedEl.addClassOnOver('x-layout-mini-over');
  2980.                 this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
  2981.                 this.collapsedEl.on('click', this.onExpandClick, this, {stopEvent:true});
  2982.             }else {
  2983.                 if(this.collapsible !== false && !this.hideCollapseTool) {
  2984.                     var t = this.toolTemplate.append(
  2985.                             this.collapsedEl.dom,
  2986.                             {id:'expand-'+this.position}, true);
  2987.                     t.addClassOnOver('x-tool-expand-'+this.position+'-over');
  2988.                     t.on('click', this.onExpandClick, this, {stopEvent:true});
  2989.                 }
  2990.                 if(this.floatable !== false || this.titleCollapse){
  2991.                    this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
  2992.                    this.collapsedEl.on("click", this[this.floatable ? 'collapseClick' : 'onExpandClick'], this);
  2993.                 }
  2994.             }
  2995.         }
  2996.         return this.collapsedEl;
  2997.     },
  2998.     
  2999.     onExpandClick : function(e){
  3000.         if(this.isSlid){
  3001.             this.panel.expand(false);
  3002.         }else{
  3003.             this.panel.expand();
  3004.         }
  3005.     },
  3006.     
  3007.     onCollapseClick : function(e){
  3008.         this.panel.collapse();
  3009.     },
  3010.     
  3011.     beforeCollapse : function(p, animate){
  3012.         this.lastAnim = animate;
  3013.         if(this.splitEl){
  3014.             this.splitEl.hide();
  3015.         }
  3016.         this.getCollapsedEl().show();
  3017.         var el = this.panel.getEl();
  3018.         this.originalZIndex = el.getStyle('z-index');
  3019.         el.setStyle('z-index', 100);
  3020.         this.isCollapsed = true;
  3021.         this.layout.layout();
  3022.     },
  3023.     
  3024.     onCollapse : function(animate){
  3025.         this.panel.el.setStyle('z-index', 1);
  3026.         if(this.lastAnim === false || this.panel.animCollapse === false){
  3027.             this.getCollapsedEl().dom.style.visibility = 'visible';
  3028.         }else{
  3029.             this.getCollapsedEl().slideIn(this.panel.slideAnchor, {duration:.2});
  3030.         }
  3031.         this.state.collapsed = true;
  3032.         this.panel.saveState();
  3033.     },
  3034.     
  3035.     beforeExpand : function(animate){
  3036.         if(this.isSlid){
  3037.             this.afterSlideIn();
  3038.         }
  3039.         var c = this.getCollapsedEl();
  3040.         this.el.show();
  3041.         if(this.position == 'east' || this.position == 'west'){
  3042.             this.panel.setSize(undefined, c.getHeight());
  3043.         }else{
  3044.             this.panel.setSize(c.getWidth(), undefined);
  3045.         }
  3046.         c.hide();
  3047.         c.dom.style.visibility = 'hidden';
  3048.         this.panel.el.setStyle('z-index', this.floatingZIndex);
  3049.     },
  3050.     
  3051.     onExpand : function(){
  3052.         this.isCollapsed = false;
  3053.         if(this.splitEl){
  3054.             this.splitEl.show();
  3055.         }
  3056.         this.layout.layout();
  3057.         this.panel.el.setStyle('z-index', this.originalZIndex);
  3058.         this.state.collapsed = false;
  3059.         this.panel.saveState();
  3060.     },
  3061.     
  3062.     collapseClick : function(e){
  3063.         if(this.isSlid){
  3064.            e.stopPropagation();
  3065.            this.slideIn();
  3066.         }else{
  3067.            e.stopPropagation();
  3068.            this.slideOut();
  3069.         }
  3070.     },
  3071.     
  3072.     onHide : function(){
  3073.         if(this.isCollapsed){
  3074.             this.getCollapsedEl().hide();
  3075.         }else if(this.splitEl){
  3076.             this.splitEl.hide();
  3077.         }
  3078.     },
  3079.     
  3080.     onShow : function(){
  3081.         if(this.isCollapsed){
  3082.             this.getCollapsedEl().show();
  3083.         }else if(this.splitEl){
  3084.             this.splitEl.show();
  3085.         }
  3086.     },
  3087.     
  3088.     isVisible : function(){
  3089.         return !this.panel.hidden;
  3090.     },
  3091.     
  3092.     getMargins : function(){
  3093.         return this.isCollapsed && this.cmargins ? this.cmargins : this.margins;
  3094.     },
  3095.     
  3096.     getSize : function(){
  3097.         return this.isCollapsed ? this.getCollapsedEl().getSize() : this.panel.getSize();
  3098.     },
  3099.     
  3100.     setPanel : function(panel){
  3101.         this.panel = panel;
  3102.     },
  3103.     
  3104.     getMinWidth: function(){
  3105.         return this.minWidth;
  3106.     },
  3107.     
  3108.     getMinHeight: function(){
  3109.         return this.minHeight;
  3110.     },
  3111.     
  3112.     applyLayoutCollapsed : function(box){
  3113.         var ce = this.getCollapsedEl();
  3114.         ce.setLeftTop(box.x, box.y);
  3115.         ce.setSize(box.width, box.height);
  3116.     },
  3117.     
  3118.     applyLayout : function(box){
  3119.         if(this.isCollapsed){
  3120.             this.applyLayoutCollapsed(box);
  3121.         }else{
  3122.             this.panel.setPosition(box.x, box.y);
  3123.             this.panel.setSize(box.width, box.height);
  3124.         }
  3125.     },
  3126.     
  3127.     beforeSlide: function(){
  3128.         this.panel.beforeEffect();
  3129.     },
  3130.     
  3131.     afterSlide : function(){
  3132.         this.panel.afterEffect();
  3133.     },
  3134.     
  3135.     initAutoHide : function(){
  3136.         if(this.autoHide !== false){
  3137.             if(!this.autoHideHd){
  3138.                 var st = new Ext.util.DelayedTask(this.slideIn, this);
  3139.                 this.autoHideHd = {
  3140.                     "mouseout": function(e){
  3141.                         if(!e.within(this.el, true)){
  3142.                             st.delay(500);
  3143.                         }
  3144.                     },
  3145.                     "mouseover" : function(e){
  3146.                         st.cancel();
  3147.                     },
  3148.                     scope : this
  3149.                 };
  3150.             }
  3151.             this.el.on(this.autoHideHd);
  3152.             this.collapsedEl.on(this.autoHideHd);
  3153.         }
  3154.     },
  3155.     
  3156.     clearAutoHide : function(){
  3157.         if(this.autoHide !== false){
  3158.             this.el.un("mouseout", this.autoHideHd.mouseout);
  3159.             this.el.un("mouseover", this.autoHideHd.mouseover);
  3160.             this.collapsedEl.un("mouseout", this.autoHideHd.mouseout);
  3161.             this.collapsedEl.un("mouseover", this.autoHideHd.mouseover);
  3162.         }
  3163.     },
  3164.     
  3165.     clearMonitor : function(){
  3166.         Ext.getDoc().un("click", this.slideInIf, this);
  3167.     },
  3168.     
  3169.     slideOut : function(){
  3170.         if(this.isSlid || this.el.hasActiveFx()){
  3171.             return;
  3172.         }
  3173.         this.isSlid = true;
  3174.         var ts = this.panel.tools;
  3175.         if(ts && ts.toggle){
  3176.             ts.toggle.hide();
  3177.         }
  3178.         this.el.show();
  3179.         if(this.position == 'east' || this.position == 'west'){
  3180.             this.panel.setSize(undefined, this.collapsedEl.getHeight());
  3181.         }else{
  3182.             this.panel.setSize(this.collapsedEl.getWidth(), undefined);
  3183.         }
  3184.         this.restoreLT = [this.el.dom.style.left, this.el.dom.style.top];
  3185.         this.el.alignTo(this.collapsedEl, this.getCollapseAnchor());
  3186.         this.el.setStyle("z-index", this.floatingZIndex+2);
  3187.         this.panel.el.replaceClass('x-panel-collapsed', 'x-panel-floating');
  3188.         if(this.animFloat !== false){
  3189.             this.beforeSlide();
  3190.             this.el.slideIn(this.getSlideAnchor(), {
  3191.                 callback: function(){
  3192.                     this.afterSlide();
  3193.                     this.initAutoHide();
  3194.                     Ext.getDoc().on("click", this.slideInIf, this);
  3195.                 },
  3196.                 scope: this,
  3197.                 block: true
  3198.             });
  3199.         }else{
  3200.             this.initAutoHide();
  3201.              Ext.getDoc().on("click", this.slideInIf, this);
  3202.         }
  3203.     },
  3204.     
  3205.     afterSlideIn : function(){
  3206.         this.clearAutoHide();
  3207.         this.isSlid = false;
  3208.         this.clearMonitor();
  3209.         this.el.setStyle("z-index", "");
  3210.         this.panel.el.replaceClass('x-panel-floating', 'x-panel-collapsed');
  3211.         this.el.dom.style.left = this.restoreLT[0];
  3212.         this.el.dom.style.top = this.restoreLT[1];
  3213.         var ts = this.panel.tools;
  3214.         if(ts && ts.toggle){
  3215.             ts.toggle.show();
  3216.         }
  3217.     },
  3218.     
  3219.     slideIn : function(cb){
  3220.         if(!this.isSlid || this.el.hasActiveFx()){
  3221.             Ext.callback(cb);
  3222.             return;
  3223.         }
  3224.         this.isSlid = false;
  3225.         if(this.animFloat !== false){
  3226.             this.beforeSlide();
  3227.             this.el.slideOut(this.getSlideAnchor(), {
  3228.                 callback: function(){
  3229.                     this.el.hide();
  3230.                     this.afterSlide();
  3231.                     this.afterSlideIn();
  3232.                     Ext.callback(cb);
  3233.                 },
  3234.                 scope: this,
  3235.                 block: true
  3236.             });
  3237.         }else{
  3238.             this.el.hide();
  3239.             this.afterSlideIn();
  3240.         }
  3241.     },
  3242.     
  3243.     slideInIf : function(e){
  3244.         if(!e.within(this.el)){
  3245.             this.slideIn();
  3246.         }
  3247.     },
  3248.     
  3249.     anchors : {
  3250.         "west" : "left",
  3251.         "east" : "right",
  3252.         "north" : "top",
  3253.         "south" : "bottom"
  3254.     },
  3255.     
  3256.     sanchors : {
  3257.         "west" : "l",
  3258.         "east" : "r",
  3259.         "north" : "t",
  3260.         "south" : "b"
  3261.     },
  3262.     
  3263.     canchors : {
  3264.         "west" : "tl-tr",
  3265.         "east" : "tr-tl",
  3266.         "north" : "tl-bl",
  3267.         "south" : "bl-tl"
  3268.     },
  3269.     
  3270.     getAnchor : function(){
  3271.         return this.anchors[this.position];
  3272.     },
  3273.     
  3274.     getCollapseAnchor : function(){
  3275.         return this.canchors[this.position];
  3276.     },
  3277.     
  3278.     getSlideAnchor : function(){
  3279.         return this.sanchors[this.position];
  3280.     },
  3281.     
  3282.     getAlignAdj : function(){
  3283.         var cm = this.cmargins;
  3284.         switch(this.position){
  3285.             case "west":
  3286.                 return [0, 0];
  3287.             break;
  3288.             case "east":
  3289.                 return [0, 0];
  3290.             break;
  3291.             case "north":
  3292.                 return [0, 0];
  3293.             break;
  3294.             case "south":
  3295.                 return [0, 0];
  3296.             break;
  3297.         }
  3298.     },
  3299.     
  3300.     getExpandAdj : function(){
  3301.         var c = this.collapsedEl, cm = this.cmargins;
  3302.         switch(this.position){
  3303.             case "west":
  3304.                 return [-(cm.right+c.getWidth()+cm.left), 0];
  3305.             break;
  3306.             case "east":
  3307.                 return [cm.right+c.getWidth()+cm.left, 0];
  3308.             break;
  3309.             case "north":
  3310.                 return [0, -(cm.top+cm.bottom+c.getHeight())];
  3311.             break;
  3312.             case "south":
  3313.                 return [0, cm.top+cm.bottom+c.getHeight()];
  3314.             break;
  3315.         }
  3316.     },
  3317.     destroy : function(){
  3318.         Ext.destroy(this.miniCollapsedEl, this.collapsedEl);
  3319.     }
  3320. };
  3321. Ext.layout.BorderLayout.SplitRegion = function(layout, config, pos){
  3322.     Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this, layout, config, pos);
  3323.     
  3324.     this.applyLayout = this.applyFns[pos];
  3325. };
  3326. Ext.extend(Ext.layout.BorderLayout.SplitRegion, Ext.layout.BorderLayout.Region, {
  3327.     
  3328.     
  3329.     splitTip : "Drag to resize.",
  3330.     
  3331.     collapsibleSplitTip : "Drag to resize. Double click to hide.",
  3332.     
  3333.     useSplitTips : false,
  3334.     
  3335.     splitSettings : {
  3336.         north : {
  3337.             orientation: Ext.SplitBar.VERTICAL,
  3338.             placement: Ext.SplitBar.TOP,
  3339.             maxFn : 'getVMaxSize',
  3340.             minProp: 'minHeight',
  3341.             maxProp: 'maxHeight'
  3342.         },
  3343.         south : {
  3344.             orientation: Ext.SplitBar.VERTICAL,
  3345.             placement: Ext.SplitBar.BOTTOM,
  3346.             maxFn : 'getVMaxSize',
  3347.             minProp: 'minHeight',
  3348.             maxProp: 'maxHeight'
  3349.         },
  3350.         east : {
  3351.             orientation: Ext.SplitBar.HORIZONTAL,
  3352.             placement: Ext.SplitBar.RIGHT,
  3353.             maxFn : 'getHMaxSize',
  3354.             minProp: 'minWidth',
  3355.             maxProp: 'maxWidth'
  3356.         },
  3357.         west : {
  3358.             orientation: Ext.SplitBar.HORIZONTAL,
  3359.             placement: Ext.SplitBar.LEFT,
  3360.             maxFn : 'getHMaxSize',
  3361.             minProp: 'minWidth',
  3362.             maxProp: 'maxWidth'
  3363.         }
  3364.     },
  3365.     
  3366.     applyFns : {
  3367.         west : function(box){
  3368.             if(this.isCollapsed){
  3369.                 return this.applyLayoutCollapsed(box);
  3370.             }
  3371.             var sd = this.splitEl.dom, s = sd.style;
  3372.             this.panel.setPosition(box.x, box.y);
  3373.             var sw = sd.offsetWidth;
  3374.             s.left = (box.x+box.width-sw)+'px';
  3375.             s.top = (box.y)+'px';
  3376.             s.height = Math.max(0, box.height)+'px';
  3377.             this.panel.setSize(box.width-sw, box.height);
  3378.         },
  3379.         east : function(box){
  3380.             if(this.isCollapsed){
  3381.                 return this.applyLayoutCollapsed(box);
  3382.             }
  3383.             var sd = this.splitEl.dom, s = sd.style;
  3384.             var sw = sd.offsetWidth;
  3385.             this.panel.setPosition(box.x+sw, box.y);
  3386.             s.left = (box.x)+'px';
  3387.             s.top = (box.y)+'px';
  3388.             s.height = Math.max(0, box.height)+'px';
  3389.             this.panel.setSize(box.width-sw, box.height);
  3390.         },
  3391.         north : function(box){
  3392.             if(this.isCollapsed){
  3393.                 return this.applyLayoutCollapsed(box);
  3394.             }
  3395.             var sd = this.splitEl.dom, s = sd.style;
  3396.             var sh = sd.offsetHeight;
  3397.             this.panel.setPosition(box.x, box.y);
  3398.             s.left = (box.x)+'px';
  3399.             s.top = (box.y+box.height-sh)+'px';
  3400.             s.width = Math.max(0, box.width)+'px';
  3401.             this.panel.setSize(box.width, box.height-sh);
  3402.         },
  3403.         south : function(box){
  3404.             if(this.isCollapsed){
  3405.                 return this.applyLayoutCollapsed(box);
  3406.             }
  3407.             var sd = this.splitEl.dom, s = sd.style;
  3408.             var sh = sd.offsetHeight;
  3409.             this.panel.setPosition(box.x, box.y+sh);
  3410.             s.left = (box.x)+'px';
  3411.             s.top = (box.y)+'px';
  3412.             s.width = Math.max(0, box.width)+'px';
  3413.             this.panel.setSize(box.width, box.height-sh);
  3414.         }
  3415.     },
  3416.     
  3417.     render : function(ct, p){
  3418.         Ext.layout.BorderLayout.SplitRegion.superclass.render.call(this, ct, p);
  3419.         var ps = this.position;
  3420.         this.splitEl = ct.createChild({
  3421.             cls: "x-layout-split x-layout-split-"+ps, html: "&#160;",
  3422.             id: this.panel.id + '-xsplit'
  3423.         });
  3424.         if(this.collapseMode == 'mini'){
  3425.             this.miniSplitEl = this.splitEl.createChild({
  3426.                 cls: "x-layout-mini x-layout-mini-"+ps, html: "&#160;"
  3427.             });
  3428.             this.miniSplitEl.addClassOnOver('x-layout-mini-over');
  3429.             this.miniSplitEl.on('click', this.onCollapseClick, this, {stopEvent:true});
  3430.         }
  3431.         var s = this.splitSettings[ps];
  3432.         this.split = new Ext.SplitBar(this.splitEl.dom, p.el, s.orientation);
  3433.         this.split.tickSize = this.tickSize;
  3434.         this.split.placement = s.placement;
  3435.         this.split.getMaximumSize = this[s.maxFn].createDelegate(this);
  3436.         this.split.minSize = this.minSize || this[s.minProp];
  3437.         this.split.on("beforeapply", this.onSplitMove, this);
  3438.         this.split.useShim = this.useShim === true;
  3439.         this.maxSize = this.maxSize || this[s.maxProp];
  3440.         if(p.hidden){
  3441.             this.splitEl.hide();
  3442.         }
  3443.         if(this.useSplitTips){
  3444.             this.splitEl.dom.title = this.collapsible ? this.collapsibleSplitTip : this.splitTip;
  3445.         }
  3446.         if(this.collapsible){
  3447.             this.splitEl.on("dblclick", this.onCollapseClick,  this);
  3448.         }
  3449.     },
  3450.     
  3451.     getSize : function(){
  3452.         if(this.isCollapsed){
  3453.             return this.collapsedEl.getSize();
  3454.         }
  3455.         var s = this.panel.getSize();
  3456.         if(this.position == 'north' || this.position == 'south'){
  3457.             s.height += this.splitEl.dom.offsetHeight;
  3458.         }else{
  3459.             s.width += this.splitEl.dom.offsetWidth;
  3460.         }
  3461.         return s;
  3462.     },
  3463.     
  3464.     getHMaxSize : function(){
  3465.          var cmax = this.maxSize || 10000;
  3466.          var center = this.layout.center;
  3467.          return Math.min(cmax, (this.el.getWidth()+center.el.getWidth())-center.getMinWidth());
  3468.     },
  3469.     
  3470.     getVMaxSize : function(){
  3471.         var cmax = this.maxSize || 10000;
  3472.         var center = this.layout.center;
  3473.         return Math.min(cmax, (this.el.getHeight()+center.el.getHeight())-center.getMinHeight());
  3474.     },
  3475.     
  3476.     onSplitMove : function(split, newSize){
  3477.         var s = this.panel.getSize();
  3478.         this.lastSplitSize = newSize;
  3479.         if(this.position == 'north' || this.position == 'south'){
  3480.             this.panel.setSize(s.width, newSize);
  3481.             this.state.height = newSize;
  3482.         }else{
  3483.             this.panel.setSize(newSize, s.height);
  3484.             this.state.width = newSize;
  3485.         }
  3486.         this.layout.layout();
  3487.         this.panel.saveState();
  3488.         return false;
  3489.     },
  3490.     
  3491.     getSplitBar : function(){
  3492.         return this.split;
  3493.     },
  3494.     
  3495.     destroy : function() {
  3496.         Ext.destroy(this.miniSplitEl, this.split, this.splitEl);
  3497.         Ext.layout.BorderLayout.SplitRegion.superclass.destroy.call(this);
  3498.     }
  3499. });
  3500. Ext.Container.LAYOUTS['border'] = Ext.layout.BorderLayout;
  3501. Ext.layout.FormLayout = Ext.extend(Ext.layout.AnchorLayout, {
  3502.     
  3503.     labelSeparator : ':',
  3504.     
  3505.     
  3506.     trackLabels: false,
  3507.     onRemove: function(c){
  3508.         Ext.layout.FormLayout.superclass.onRemove.call(this, c);
  3509.         if(this.trackLabels){
  3510.             c.un('show', this.onFieldShow, this);
  3511.             c.un('hide', this.onFieldHide, this);
  3512.         }
  3513.         
  3514.         var el = c.getPositionEl(),
  3515.                 ct = c.getItemCt && c.getItemCt();
  3516.         if(c.rendered && ct){
  3517.             if (el && el.dom) {
  3518.                 el.insertAfter(ct);
  3519.             }
  3520.             Ext.destroy(ct);
  3521.             Ext.destroyMembers(c, 'label', 'itemCt');
  3522.             if(c.customItemCt){
  3523.                 Ext.destroyMembers(c, 'getItemCt', 'customItemCt');
  3524.             }
  3525.         }
  3526.     },
  3527.     
  3528.     setContainer : function(ct){
  3529.         Ext.layout.FormLayout.superclass.setContainer.call(this, ct);
  3530.         if(ct.labelAlign){
  3531.             ct.addClass('x-form-label-'+ct.labelAlign);
  3532.         }
  3533.         if(ct.hideLabels){
  3534.             Ext.apply(this, {
  3535.                 labelStyle: 'display:none',
  3536.                 elementStyle: 'padding-left:0;',
  3537.                 labelAdjust: 0
  3538.             });
  3539.         }else{
  3540.             this.labelSeparator = ct.labelSeparator || this.labelSeparator;
  3541.             ct.labelWidth = ct.labelWidth || 100;
  3542.             if(Ext.isNumber(ct.labelWidth)){
  3543.                 var pad = Ext.isNumber(ct.labelPad) ? ct.labelPad : 5;
  3544.                 Ext.apply(this, {
  3545.                     labelAdjust: ct.labelWidth + pad,
  3546.                     labelStyle: 'width:' + ct.labelWidth + 'px;',
  3547.                     elementStyle: 'padding-left:' + (ct.labelWidth + pad) + 'px'
  3548.                 });
  3549.             }
  3550.             if(ct.labelAlign == 'top'){
  3551.                 Ext.apply(this, {
  3552.                     labelStyle: 'width:auto;',
  3553.                     labelAdjust: 0,
  3554.                     elementStyle: 'padding-left:0;'
  3555.                 });
  3556.             }
  3557.         }
  3558.     },
  3559.     
  3560.     isHide: function(c){
  3561.         return c.hideLabel || this.container.hideLabels;
  3562.     },
  3563.     onFieldShow: function(c){
  3564.         c.getItemCt().removeClass('x-hide-' + c.hideMode);
  3565.     },
  3566.     onFieldHide: function(c){
  3567.         c.getItemCt().addClass('x-hide-' + c.hideMode);
  3568.     },
  3569.     
  3570.     getLabelStyle: function(s){
  3571.         var ls = '', items = [this.labelStyle, s];
  3572.         for (var i = 0, len = items.length; i < len; ++i){
  3573.             if (items[i]){
  3574.                 ls += items[i];
  3575.                 if (ls.substr(-1, 1) != ';'){
  3576.                     ls += ';'
  3577.                 }
  3578.             }
  3579.         }
  3580.         return ls;
  3581.     },
  3582.     
  3583.     
  3584.     renderItem : function(c, position, target){
  3585.         if(c && (c.isFormField || c.fieldLabel) && c.inputType != 'hidden'){
  3586.             var args = this.getTemplateArgs(c);
  3587.             if(Ext.isNumber(position)){
  3588.                 position = target.dom.childNodes[position] || null;
  3589.             }
  3590.             if(position){
  3591.                 c.itemCt = this.fieldTpl.insertBefore(position, args, true);
  3592.             }else{
  3593.                 c.itemCt = this.fieldTpl.append(target, args, true);
  3594.             }
  3595.             if(!c.getItemCt){
  3596.                 
  3597.                 
  3598.                 Ext.apply(c, {
  3599.                     getItemCt: function(){
  3600.                         return c.itemCt;
  3601.                     },
  3602.                     customItemCt: true
  3603.                 });
  3604.             }
  3605.             c.label = c.getItemCt().child('label.x-form-item-label');
  3606.             if(!c.rendered){
  3607.                 c.render('x-form-el-' + c.id);
  3608.             }else if(!this.isValidParent(c, target)){
  3609.                 Ext.fly('x-form-el-' + c.id).appendChild(c.getPositionEl());
  3610.             }
  3611.             if(this.trackLabels){
  3612.                 if(c.hidden){
  3613.                     this.onFieldHide(c);
  3614.                 }
  3615.                 c.on({
  3616.                     scope: this,
  3617.                     show: this.onFieldShow,
  3618.                     hide: this.onFieldHide
  3619.                 });
  3620.             }
  3621.             this.configureItem(c);
  3622.         }else {
  3623.             Ext.layout.FormLayout.superclass.renderItem.apply(this, arguments);
  3624.         }
  3625.     },
  3626.     
  3627.     getTemplateArgs: function(field) {
  3628.         var noLabelSep = !field.fieldLabel || field.hideLabel;
  3629.         return {
  3630.             id: field.id,
  3631.             label: field.fieldLabel,
  3632.             labelStyle: this.getLabelStyle(field.labelStyle),
  3633.             elementStyle: this.elementStyle||'',
  3634.             labelSeparator: noLabelSep ? '' : (Ext.isDefined(field.labelSeparator) ? field.labelSeparator : this.labelSeparator),
  3635.             itemCls: (field.itemCls||this.container.itemCls||'') + (field.hideLabel ? ' x-hide-label' : ''),
  3636.             clearCls: field.clearCls || 'x-form-clear-left'
  3637.         };
  3638.     },
  3639.     
  3640.     adjustWidthAnchor: function(value, c){
  3641.         if(c.label && !this.isHide(c) && (this.container.labelAlign != 'top')){
  3642.             var adjust = Ext.isIE6 || (Ext.isIE && !Ext.isStrict);
  3643.             return value - this.labelAdjust + (adjust ? -3 : 0);
  3644.         }
  3645.         return value;
  3646.     },
  3647.     adjustHeightAnchor : function(value, c){
  3648.         if(c.label && !this.isHide(c) && (this.container.labelAlign == 'top')){
  3649.             return value - c.label.getHeight();
  3650.         }
  3651.         return value;
  3652.     },
  3653.     
  3654.     isValidParent : function(c, target){
  3655.         return target && this.container.getEl().contains(c.getPositionEl());
  3656.     }
  3657.     
  3658. });
  3659. Ext.Container.LAYOUTS['form'] = Ext.layout.FormLayout;
  3660. Ext.layout.AccordionLayout = Ext.extend(Ext.layout.FitLayout, {
  3661.     
  3662.     fill : true,
  3663.     
  3664.     autoWidth : true,
  3665.     
  3666.     titleCollapse : true,
  3667.     
  3668.     hideCollapseTool : false,
  3669.     
  3670.     collapseFirst : false,
  3671.     
  3672.     animate : false,
  3673.     
  3674.     sequence : false,
  3675.     
  3676.     activeOnTop : false,
  3677.     renderItem : function(c){
  3678.         if(this.animate === false){
  3679.             c.animCollapse = false;
  3680.         }
  3681.         c.collapsible = true;
  3682.         if(this.autoWidth){
  3683.             c.autoWidth = true;
  3684.         }
  3685.         if(this.titleCollapse){
  3686.             c.titleCollapse = true;
  3687.         }
  3688.         if(this.hideCollapseTool){
  3689.             c.hideCollapseTool = true;
  3690.         }
  3691.         if(this.collapseFirst !== undefined){
  3692.             c.collapseFirst = this.collapseFirst;
  3693.         }
  3694.         if(!this.activeItem && !c.collapsed){
  3695.             this.setActiveItem(c, true);
  3696.         }else if(this.activeItem && this.activeItem != c){
  3697.             c.collapsed = true;
  3698.         }
  3699.         Ext.layout.AccordionLayout.superclass.renderItem.apply(this, arguments);
  3700.         c.header.addClass('x-accordion-hd');
  3701.         c.on('beforeexpand', this.beforeExpand, this);
  3702.     },
  3703.     
  3704.     onRemove: function(c){
  3705.         Ext.layout.AccordionLayout.superclass.onRemove.call(this, c);
  3706.         if(c.rendered){
  3707.             c.header.removeClass('x-accordion-hd');
  3708.         }
  3709.         c.un('beforeexpand', this.beforeExpand, this);
  3710.     },
  3711.     
  3712.     beforeExpand : function(p, anim){
  3713.         var ai = this.activeItem;
  3714.         if(ai){
  3715.             if(this.sequence){
  3716.                 delete this.activeItem;
  3717.                 if (!ai.collapsed){
  3718.                     ai.collapse({callback:function(){
  3719.                         p.expand(anim || true);
  3720.                     }, scope: this});
  3721.                     return false;
  3722.                 }
  3723.             }else{
  3724.                 ai.collapse(this.animate);
  3725.             }
  3726.         }
  3727.         this.setActive(p);
  3728.         if(this.activeOnTop){
  3729.             p.el.dom.parentNode.insertBefore(p.el.dom, p.el.dom.parentNode.firstChild);
  3730.         }
  3731.         this.layout();
  3732.     },
  3733.     
  3734.     setItemSize : function(item, size){
  3735.         if(this.fill && item){
  3736.             var hh = 0;
  3737.             this.container.items.each(function(p){
  3738.                 if(p != item){
  3739.                     hh += p.header.getHeight();
  3740.                 }    
  3741.             });
  3742.             size.height -= hh;
  3743.             item.setSize(size);
  3744.         }
  3745.     },
  3746.     
  3747.     setActiveItem : function(item){
  3748.         this.setActive(item, true);
  3749.     },
  3750.     
  3751.     
  3752.     setActive : function(item, expand){
  3753.         var ai = this.activeItem;
  3754.         item = this.container.getComponent(item);
  3755.         if(ai != item){
  3756.             if(item.rendered && item.collapsed && expand){
  3757.                 item.expand();
  3758.             }else{
  3759.                 if(ai){
  3760.                    ai.fireEvent('deactivate', ai);
  3761.                 }
  3762.                 this.activeItem = item;
  3763.                 item.fireEvent('activate', item);
  3764.             }
  3765.         }
  3766.     }
  3767. });
  3768. Ext.Container.LAYOUTS.accordion = Ext.layout.AccordionLayout;
  3769. Ext.layout.Accordion = Ext.layout.AccordionLayout;
  3770. Ext.layout.TableLayout = Ext.extend(Ext.layout.ContainerLayout, {
  3771.     
  3772.     
  3773.     monitorResize:false,
  3774.     
  3775.     targetCls: 'x-table-layout-ct',
  3776.     
  3777.     tableAttrs:null,
  3778.     
  3779.     
  3780.     setContainer : function(ct){
  3781.         Ext.layout.TableLayout.superclass.setContainer.call(this, ct);
  3782.         this.currentRow = 0;
  3783.         this.currentColumn = 0;
  3784.         this.cells = [];
  3785.     },
  3786.     
  3787.     onLayout : function(ct, target){
  3788.         var cs = ct.items.items, len = cs.length, c, i;
  3789.         if(!this.table){
  3790.             this.table = target.createChild(
  3791.                 Ext.apply({tag:'table', cls:'x-table-layout', cellspacing: 0, cn: {tag: 'tbody'}}, this.tableAttrs), null, true);
  3792.         }
  3793.         this.renderAll(ct, target);
  3794.     },
  3795.     
  3796.     getRow : function(index){
  3797.         var row = this.table.tBodies[0].childNodes[index];
  3798.         if(!row){
  3799.             row = document.createElement('tr');
  3800.             this.table.tBodies[0].appendChild(row);
  3801.         }
  3802.         return row;
  3803.     },
  3804.     
  3805.     getNextCell : function(c){
  3806.         var cell = this.getNextNonSpan(this.currentColumn, this.currentRow);
  3807.         var curCol = this.currentColumn = cell[0], curRow = this.currentRow = cell[1];
  3808.         for(var rowIndex = curRow; rowIndex < curRow + (c.rowspan || 1); rowIndex++){
  3809.             if(!this.cells[rowIndex]){
  3810.                 this.cells[rowIndex] = [];
  3811.             }
  3812.             for(var colIndex = curCol; colIndex < curCol + (c.colspan || 1); colIndex++){
  3813.                 this.cells[rowIndex][colIndex] = true;
  3814.             }
  3815.         }
  3816.         var td = document.createElement('td');
  3817.         if(c.cellId){
  3818.             td.id = c.cellId;
  3819.         }
  3820.         var cls = 'x-table-layout-cell';
  3821.         if(c.cellCls){
  3822.             cls += ' ' + c.cellCls;
  3823.         }
  3824.         td.className = cls;
  3825.         if(c.colspan){
  3826.             td.colSpan = c.colspan;
  3827.         }
  3828.         if(c.rowspan){
  3829.             td.rowSpan = c.rowspan;
  3830.         }
  3831.         this.getRow(curRow).appendChild(td);
  3832.         return td;
  3833.     },
  3834.     
  3835.     
  3836.     getNextNonSpan: function(colIndex, rowIndex){
  3837.         var cols = this.columns;
  3838.         while((cols && colIndex >= cols) || (this.cells[rowIndex] && this.cells[rowIndex][colIndex])) {
  3839.             if(cols && colIndex >= cols){
  3840.                 rowIndex++;
  3841.                 colIndex = 0;
  3842.             }else{
  3843.                 colIndex++;
  3844.             }
  3845.         }
  3846.         return [colIndex, rowIndex];
  3847.     },
  3848.     
  3849.     renderItem : function(c, position, target){
  3850.         if(c && !c.rendered){
  3851.             c.render(this.getNextCell(c));
  3852.             this.configureItem(c, position);
  3853.         }else if(c && !this.isValidParent(c, target)){
  3854.             var container = this.getNextCell(c);
  3855.             container.insertBefore(c.getPositionEl().dom, null);
  3856.             c.container = Ext.get(container);
  3857.             this.configureItem(c, position);
  3858.         }
  3859.     },
  3860.     
  3861.     isValidParent : function(c, target){
  3862.         return c.getPositionEl().up('table', 5).dom.parentNode === (target.dom || target);
  3863.     }
  3864.     
  3865. });
  3866. Ext.Container.LAYOUTS['table'] = Ext.layout.TableLayout;
  3867. Ext.layout.AbsoluteLayout = Ext.extend(Ext.layout.AnchorLayout, {
  3868.     extraCls: 'x-abs-layout-item',
  3869.     onLayout : function(ct, target){
  3870.         target.position();
  3871.         this.paddingLeft = target.getPadding('l');
  3872.         this.paddingTop = target.getPadding('t');
  3873.         Ext.layout.AbsoluteLayout.superclass.onLayout.call(this, ct, target);
  3874.     },
  3875.     
  3876.     adjustWidthAnchor : function(value, comp){
  3877.         return value ? value - comp.getPosition(true)[0] + this.paddingLeft : value;
  3878.     },
  3879.     
  3880.     adjustHeightAnchor : function(value, comp){
  3881.         return  value ? value - comp.getPosition(true)[1] + this.paddingTop : value;
  3882.     }
  3883.     
  3884. });
  3885. Ext.Container.LAYOUTS['absolute'] = Ext.layout.AbsoluteLayout;
  3886. Ext.layout.BoxLayout = Ext.extend(Ext.layout.ContainerLayout, {
  3887.     
  3888.     defaultMargins : {left:0,top:0,right:0,bottom:0},
  3889.     
  3890.     padding : '0',
  3891.     
  3892.     pack : 'start',
  3893.     
  3894.     monitorResize : true,
  3895.     scrollOffset : 0,
  3896.     extraCls : 'x-box-item',
  3897.     targetCls : 'x-box-layout-ct',
  3898.     innerCls : 'x-box-inner',
  3899.     constructor : function(config){
  3900.         Ext.layout.BoxLayout.superclass.constructor.call(this, config);
  3901.         if(Ext.isString(this.defaultMargins)){
  3902.             this.defaultMargins = this.parseMargins(this.defaultMargins);
  3903.         }
  3904.     },
  3905.     
  3906.     isValidParent : function(c, target){
  3907.         return c.getPositionEl().dom.parentNode == this.innerCt.dom;
  3908.     },
  3909.     
  3910.     onLayout : function(ct, target){
  3911.         var cs = ct.items.items, len = cs.length, c, i, last = len-1, cm;
  3912.         if(!this.innerCt){
  3913.             
  3914.             
  3915.             this.innerCt = target.createChild({cls:this.innerCls});
  3916.             this.padding = this.parseMargins(this.padding);
  3917.         }
  3918.         this.renderAll(ct, this.innerCt);
  3919.     },
  3920.     
  3921.     renderItem : function(c){
  3922.         if(Ext.isString(c.margins)){
  3923.             c.margins = this.parseMargins(c.margins);
  3924.         }else if(!c.margins){
  3925.             c.margins = this.defaultMargins;
  3926.         }
  3927.         Ext.layout.BoxLayout.superclass.renderItem.apply(this, arguments);
  3928.     },
  3929.     
  3930.     getTargetSize : function(target){
  3931.         return (Ext.isIE6 && Ext.isStrict && target.dom == document.body) ? target.getStyleSize() : target.getViewSize(true);
  3932.     },
  3933.     getItems: function(ct){
  3934.         var items = [];
  3935.         ct.items.each(function(c){
  3936.             if(c.isVisible()){
  3937.                 items.push(c);
  3938.             }
  3939.         });
  3940.         return items;
  3941.     }
  3942. });
  3943. Ext.layout.VBoxLayout = Ext.extend(Ext.layout.BoxLayout, {
  3944.     
  3945.     align : 'left', 
  3946.     
  3947.     
  3948.     
  3949.     onLayout : function(ct, target){
  3950.         Ext.layout.VBoxLayout.superclass.onLayout.call(this, ct, target);
  3951.         var cs = this.getItems(ct), cm, ch, margin, cl, diff, aw,
  3952.             size = target.getViewSize(true),
  3953.             w = size.width,
  3954.             h = size.height - this.scrollOffset,
  3955.             l = this.padding.left, t = this.padding.top,
  3956.             isStart = this.pack == 'start',
  3957.             stretchWidth = w - (this.padding.left + this.padding.right),
  3958.             extraHeight = 0,
  3959.             maxWidth = 0,
  3960.             totalFlex = 0,
  3961.             flexHeight = 0,
  3962.             usedHeight = 0,
  3963.             idx = 0,
  3964.             heights = [],
  3965.             restore = [],
  3966.             c,