[qo-modules-dev] [31] Updates to Ext 3 core files and examples and css

[ Thread Index | Date Index | More lists.tuxfamily.org/qo-modules-dev Archives ]


Revision: 31
Author:   mjlecomte
Date:     2008-11-21 15:33:19 +0100 (Fri, 21 Nov 2008)

Log Message:
-----------
Updates to Ext 3 core files and examples and css

Modified Paths:
--------------
    mickael/trunk/ext/v3.0.0-a1/adapter/ext/ext-base.js
    mickael/trunk/ext/v3.0.0-a1/adapter/jquery/ext-jquery-adapter.js
    mickael/trunk/ext/v3.0.0-a1/adapter/prototype/ext-prototype-adapter.js
    mickael/trunk/ext/v3.0.0-a1/adapter/yui/ext-yui-adapter.js
    mickael/trunk/ext/v3.0.0-a1/build/core/Ext-min.js
    mickael/trunk/ext/v3.0.0-a1/build/data/Direct-min.js
    mickael/trunk/ext/v3.0.0-a1/build/data/DirectProxy-min.js
    mickael/trunk/ext/v3.0.0-a1/build/util/Date-min.js
    mickael/trunk/ext/v3.0.0-a1/build/util/History-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Editor-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Panel-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Window-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/form/DateField-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Field-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Form-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/Column-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/ColumnModel-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/GridView-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/BorderLayout-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/FormLayout-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/menu/BaseItem-min.js
    mickael/trunk/ext/v3.0.0-a1/examples/button/buttons.html
    mickael/trunk/ext/v3.0.0-a1/examples/chart/charts.html
    mickael/trunk/ext/v3.0.0-a1/examples/core/spotlight.html
    mickael/trunk/ext/v3.0.0-a1/examples/core/templates.html
    mickael/trunk/ext/v3.0.0-a1/examples/debug/debug-console.html
    mickael/trunk/ext/v3.0.0-a1/examples/desktop/desktop.html
    mickael/trunk/ext/v3.0.0-a1/examples/form/absform.html
    mickael/trunk/ext/v3.0.0-a1/examples/form/anchoring.html
    mickael/trunk/ext/v3.0.0-a1/examples/form/combos.html
    mickael/trunk/ext/v3.0.0-a1/examples/form/custom.html
    mickael/trunk/ext/v3.0.0-a1/examples/form/dynamic.html
    mickael/trunk/ext/v3.0.0-a1/examples/form/form-grid.html
    mickael/trunk/ext/v3.0.0-a1/examples/form/forum-search.html
    mickael/trunk/ext/v3.0.0-a1/examples/form/xml-form.html
    mickael/trunk/ext/v3.0.0-a1/examples/grid/array-grid.html
    mickael/trunk/ext/v3.0.0-a1/examples/grid/array-grid.js
    mickael/trunk/ext/v3.0.0-a1/examples/grid/custom-grid.html
    mickael/trunk/ext/v3.0.0-a1/examples/grid/edit-grid.html
    mickael/trunk/ext/v3.0.0-a1/examples/grid/from-markup.html
    mickael/trunk/ext/v3.0.0-a1/examples/grid/grid3.html
    mickael/trunk/ext/v3.0.0-a1/examples/grid/grouping.html
    mickael/trunk/ext/v3.0.0-a1/examples/grid/paging.html
    mickael/trunk/ext/v3.0.0-a1/examples/grid/totals.html
    mickael/trunk/ext/v3.0.0-a1/examples/grid/xml-grid.html
    mickael/trunk/ext/v3.0.0-a1/examples/layout/accordion.html
    mickael/trunk/ext/v3.0.0-a1/examples/layout/anchor.html
    mickael/trunk/ext/v3.0.0-a1/examples/layout/column.html
    mickael/trunk/ext/v3.0.0-a1/examples/layout/complex.html
    mickael/trunk/ext/v3.0.0-a1/examples/layout/table.html
    mickael/trunk/ext/v3.0.0-a1/examples/locale/dutch-form.html
    mickael/trunk/ext/v3.0.0-a1/examples/locale/multi-lang.html
    mickael/trunk/ext/v3.0.0-a1/examples/menu/actions.html
    mickael/trunk/ext/v3.0.0-a1/examples/menu/menus.html
    mickael/trunk/ext/v3.0.0-a1/examples/message-box/msg-box.html
    mickael/trunk/ext/v3.0.0-a1/examples/organizer/organizer.html
    mickael/trunk/ext/v3.0.0-a1/examples/panel/panels.html
    mickael/trunk/ext/v3.0.0-a1/examples/portal/portal.html
    mickael/trunk/ext/v3.0.0-a1/examples/resizable/basic.html
    mickael/trunk/ext/v3.0.0-a1/examples/samples.js
    mickael/trunk/ext/v3.0.0-a1/examples/simple-widgets/progress-bar.html
    mickael/trunk/ext/v3.0.0-a1/examples/simple-widgets/qtips.html
    mickael/trunk/ext/v3.0.0-a1/examples/slider/slider.html
    mickael/trunk/ext/v3.0.0-a1/examples/tabs/tabs-adv.html
    mickael/trunk/ext/v3.0.0-a1/examples/tabs/tabs.html
    mickael/trunk/ext/v3.0.0-a1/examples/toolbar/overflow.html
    mickael/trunk/ext/v3.0.0-a1/examples/toolbar/toolbars.html
    mickael/trunk/ext/v3.0.0-a1/examples/tree/column-tree.html
    mickael/trunk/ext/v3.0.0-a1/examples/tree/reorder.html
    mickael/trunk/ext/v3.0.0-a1/examples/tree/two-trees.html
    mickael/trunk/ext/v3.0.0-a1/examples/tree/xml-tree-loader.html
    mickael/trunk/ext/v3.0.0-a1/examples/view/chooser.html
    mickael/trunk/ext/v3.0.0-a1/examples/view/data-view.html
    mickael/trunk/ext/v3.0.0-a1/examples/view/list-view.html
    mickael/trunk/ext/v3.0.0-a1/examples/window/hello.html
    mickael/trunk/ext/v3.0.0-a1/examples/window/layout.html
    mickael/trunk/ext/v3.0.0-a1/ext-all-debug.js
    mickael/trunk/ext/v3.0.0-a1/ext-all.js
    mickael/trunk/ext/v3.0.0-a1/package/date.js
    mickael/trunk/ext/v3.0.0-a1/package/form/form-debug.js
    mickael/trunk/ext/v3.0.0-a1/package/form/form.js
    mickael/trunk/ext/v3.0.0-a1/package/grid/edit-grid-debug.js
    mickael/trunk/ext/v3.0.0-a1/package/grid/grid.js
    mickael/trunk/ext/v3.0.0-a1/package/menu/menus.js
    mickael/trunk/ext/v3.0.0-a1/resources/css/ext-all.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/form.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/menu.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/panel.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/window.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/xtheme-gray.css
    mickael/trunk/ext/v3.0.0-a1/resources/images/default/button/btn.gif
    mickael/trunk/ext/v3.0.0-a1/resources/images/default/panel/tool-sprites.gif
    mickael/trunk/ext/v3.0.0-a1/resources/images/default/panel/tools-sprites-trans.gif
    mickael/trunk/ext/v3.0.0-a1/resources/images/default/window/left-corners.png
    mickael/trunk/ext/v3.0.0-a1/resources/images/default/window/left-right.png
    mickael/trunk/ext/v3.0.0-a1/resources/images/default/window/right-corners.png
    mickael/trunk/ext/v3.0.0-a1/resources/images/default/window/top-bottom.png
    mickael/trunk/ext/v3.0.0-a1/resources/images/gray/button/group-cs.gif
    mickael/trunk/ext/v3.0.0-a1/resources/images/gray/panel/corners-sprite.gif
    mickael/trunk/ext/v3.0.0-a1/resources/images/gray/panel/left-right.gif
    mickael/trunk/ext/v3.0.0-a1/resources/images/gray/panel/top-bottom.gif
    mickael/trunk/ext/v3.0.0-a1/resources/images/gray/toolbar/gray-bg.gif
    mickael/trunk/ext/v3.0.0-a1/source/core/Ext.js
    mickael/trunk/ext/v3.0.0-a1/source/data/Direct.js
    mickael/trunk/ext/v3.0.0-a1/source/data/DirectProxy.js
    mickael/trunk/ext/v3.0.0-a1/source/ext.jsb
    mickael/trunk/ext/v3.0.0-a1/source/util/Date.js
    mickael/trunk/ext/v3.0.0-a1/source/util/History.js
    mickael/trunk/ext/v3.0.0-a1/source/util/MixedCollection.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/ComponentMgr.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Editor.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Layer.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Panel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Window.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/DateField.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Field.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Form.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/Column.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnModel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/EditorGrid.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridPanel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridView.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/BorderLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/FormLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/BaseItem.js

Property Changed:
----------------
    mickael/trunk/ext/v3.0.0-a1/learn/


Modified: mickael/trunk/ext/v3.0.0-a1/adapter/ext/ext-base.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/adapter/ext/ext-base.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/adapter/ext/ext-base.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -2,2162 +2,231 @@
  * Ext JS Library 3.0 Pre-alpha
  * Copyright(c) 2006-2008, Ext JS, LLC.
  * licensing@xxxxxxxxx
- *
+ * 
  * http://extjs.com/license
  */
-Ext = {
-    version: '3.0'
-};
-window["undefined"] = window["undefined"];
-Ext.apply = function(o, c, defaults){
-    if (defaults) {
-        Ext.apply(o, defaults);
-    }
-    if (o && c && typeof c == 'object') {
-        for (var p in c) {
-            o[p] = c[p];
-        }
-    }
-    return o;
-};
-(function(){
-    var idSeed = 0;
-    var ua = navigator.userAgent.toLowerCase();
-    var isStrict = document.compatMode == "CSS1Compat", isOpera = ua.indexOf("opera") > -1, isChrome = ua.indexOf("chrome") > -1, isSafari = !isChrome && (/webkit|khtml/).test(ua), isSafari3 = isSafari && ua.indexOf('webkit/5') != -1, isIE = !isOpera && ua.indexOf("msie") > -1, isIE7 = !isOpera && ua.indexOf("msie 7") > -1, isIE8 = !isOpera && ua.indexOf("msie 8") > -1, isGecko = !isSafari && !isChrome && ua.indexOf("gecko") > -1, isGecko3 = isGecko && ua.indexOf("rv:1.9") > -1, isBorderBox = isIE && !isStrict, isWindows = (ua.indexOf("windows") != -1 || ua.indexOf("win32") != -1), isMac = (ua.indexOf("macintosh") != -1 || ua.indexOf("mac os x") != -1), isAir = (ua.indexOf("adobeair") != -1), isLinux = (ua.indexOf("linux") != -1), isSecure = window.location.href.toLowerCase().indexOf("https") === 0;
-    if (isIE && !isIE7) {
-        try {
-            document.execCommand("BackgroundImageCache", false, true);
-        } 
-        catch (e) {
-        }
-    }
-    Ext.apply(Ext, {
-        isStrict: isStrict,
-        isSecure: isSecure,
-        isReady: false,
-        enableGarbageCollector: true,
-        enableListenerCollection: false,
-        SSL_SECURE_URL: "javascript:false",
-        BLANK_IMAGE_URL: "http:/" + "/extjs.com/s.gif",
-        emptyFn: function(){
-        },
-        applyIf: function(o, c){
-            if (o && c) {
-                for (var p in c) {
-                    if (typeof o[p] == "undefined") {
-                        o[p] = c[p];
-                    }
-                }
-            }
-            return o;
-        },
-        addBehaviors: function(o){
-            if (!Ext.isReady) {
-                Ext.onReady(function(){
-                    Ext.addBehaviors(o);
-                });
-                return;
-            }
-            var cache = {};
-            for (var b in o) {
-                var parts = b.split('@');
-                if (parts[1]) {
-                    var s = parts[0];
-                    if (!cache[s]) {
-                        cache[s] = Ext.select(s);
-                    }
-                    cache[s].on(parts[1], o[b]);
-                }
-            }
-            cache = null;
-        },
-        id: function(el, prefix){
-            prefix = prefix || "ext-gen";
-            el = Ext.getDom(el);
-            var id = prefix + (++idSeed);
-            return el ? (el.id ? el.id : (el.id = id)) : id;
-        },
-        extend: function(){
-            var io = function(o){
-                for (var m in o) {
-                    this[m] = o[m];
-                }
-            };
-            var oc = Object.prototype.constructor;
-            return function(sb, sp, overrides){
-                if (typeof sp == 'object') {
-                    overrides = sp;
-                    sp = sb;
-                    sb = overrides.constructor != oc ? overrides.constructor : function(){
-                        sp.apply(this, arguments);
-                    };
-                }
-                var F = function(){
-                }, sbp, spp = sp.prototype;
-                F.prototype = spp;
-                sbp = sb.prototype = new F();
-                sbp.constructor = sb;
-                sb.superclass = spp;
-                if (spp.constructor == oc) {
-                    spp.constructor = sp;
-                }
-                sb.override = function(o){
-                    Ext.override(sb, o);
-                };
-                sbp.superclass = sbp.supr = (function(){
-                    return spp;
-                });
-                sbp.override = io;
-                Ext.override(sb, overrides);
-                sb.extend = function(o){
-                    Ext.extend(sb, o);
-                };
-                return sb;
-            };
-        }(),
-        extendX: function(supr, fn){
-            return Ext.extend(supr, fn(supr.prototype));
-        },
-        override: function(origclass, overrides){
-            if (overrides) {
-                var p = origclass.prototype;
-                for (var method in overrides) {
-                    p[method] = overrides[method];
-                }
-            }
-        },
-        namespace: function(){
-            var a = arguments, o = null, i, j, d, rt;
-            for (i = 0; i < a.length; ++i) {
-                d = a[i].split(".");
-                rt = d[0];
-                eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
-                for (j = 1; j < d.length; ++j) {
-                    o[d[j]] = o[d[j]] ||
-                    {};
-                    o = o[d[j]];
-                }
-            }
-        },
-        urlEncode: function(o){
-            if (!o) {
-                return "";
-            }
-            var buf = [];
-            for (var key in o) {
-                var ov = o[key], k = encodeURIComponent(key);
-                var type = typeof ov;
-                if (type == 'undefined') {
-                    buf.push(k, "=&");
-                }
-                else 
-                    if (type != "function" && type != "object") {
-                        buf.push(k, "=", encodeURIComponent(ov), "&");
-                    }
-                    else 
-                        if (Ext.isArray(ov)) {
-                            if (ov.length) {
-                                for (var i = 0, len = ov.length; i < len; i++) {
-                                    buf.push(k, "=", encodeURIComponent(ov[i] === undefined ? '' : ov[i]), "&");
-                                }
-                            }
-                            else {
-                                buf.push(k, "=&");
-                            }
-                        }
-            }
-            buf.pop();
-            return buf.join("");
-        },
-        urlDecode: function(string, overwrite){
-            if (!string || !string.length) {
-                return {};
-            }
-            var obj = {};
-            var pairs = string.split('&');
-            var pair, name, value;
-            for (var i = 0, len = pairs.length; i < len; i++) {
-                pair = pairs[i].split('=');
-                name = decodeURIComponent(pair[0]);
-                value = decodeURIComponent(pair[1]);
-                if (overwrite !== true) {
-                    if (typeof obj[name] == "undefined") {
-                        obj[name] = value;
-                    }
-                    else 
-                        if (typeof obj[name] == "string") {
-                            obj[name] = [obj[name]];
-                            obj[name].push(value);
-                        }
-                        else {
-                            obj[name].push(value);
-                        }
-                }
-                else {
-                    obj[name] = value;
-                }
-            }
-            return obj;
-        },
-        each: function(array, fn, scope){
-            if (typeof array.length == "undefined" || typeof array == "string") {
-                array = [array];
-            }
-            for (var i = 0, len = array.length; i < len; i++) {
-                if (fn.call(scope || array[i], array[i], i, array) === false) {
-                    return i;
-                };
-                            }
-        },
-        combine: function(){
-            var as = arguments, l = as.length, r = [];
-            for (var i = 0; i < l; i++) {
-                var a = as[i];
-                if (Ext.isArray(a)) {
-                    r = r.concat(a);
-                }
-                else 
-                    if (a.length !== undefined && !a.substr) {
-                        r = r.concat(Array.prototype.slice.call(a, 0));
-                    }
-                    else {
-                        r.push(a);
-                    }
-            }
-            return r;
-        },
-        escapeRe: function(s){
-            return s.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1");
-        },
-        callback: function(cb, scope, args, delay){
-            if (typeof cb == "function") {
-                if (delay) {
-                    cb.defer(delay, scope, args || []);
-                }
-                else {
-                    cb.apply(scope, args || []);
-                }
-            }
-        },
-        getDom: function(el){
-            if (!el || !document) {
-                return null;
-            }
-            return el.dom ? el.dom : (typeof el == 'string' ? document.getElementById(el) : el);
-        },
-        getDoc: function(){
-            return Ext.get(document);
-        },
-        getBody: function(){
-            return Ext.get(document.body || document.documentElement);
-        },
-        getCmp: function(id){
-            return Ext.ComponentMgr.get(id);
-        },
-        num: function(v, defaultValue){
-            if (typeof v != 'number') {
-                return defaultValue;
-            }
-            return v;
-        },
-        destroy: function(){
-            for (var i = 0, a = arguments, len = a.length; i < len; i++) {
-                var as = a[i];
-                if (as) {
-                    if (typeof as.destroy == 'function') {
-                        as.destroy();
-                    }
-                    else 
-                        if (as.dom) {
-                            as.removeAllListeners();
-                            as.remove();
-                        }
-                }
-            }
-        },
-        destroyMembers: function(o, arg1, arg2, etc){
-            for (var i = 1, a = arguments, len = a.length; i < len; i++) {
-                Ext.destroy(o[a[i]]);
-                delete o[a[i]];
-            }
-        },
-        removeNode: isIE ? function(){
-            var d;
-            return function(n){
-                if (n && n.tagName != 'BODY') {
-                    d = d || document.createElement('div');
-                    d.appendChild(n);
-                    d.innerHTML = '';
-                }
-            }
-        }() : function(n){
-            if (n && n.parentNode && n.tagName != 'BODY') {
-                n.parentNode.removeChild(n);
-            }
-        },
-        type: function(o){
-            if (o === undefined || o === null) {
-                return false;
-            }
-            if (o.htmlElement) {
-                return 'element';
-            }
-            var t = typeof o;
-            if (t == 'object' && o.nodeName) {
-                switch (o.nodeType) {
-                    case 1:
-                        return 'element';
-                    case 3:
-                        return (/\S/).test(o.nodeValue) ? 'textnode' : 'whitespace';
-                }
-            }
-            if (t == 'object' || t == 'function') {
-                switch (o.constructor) {
-                    case Array:
-                        return 'array';
-                    case RegExp:
-                        return 'regexp';
-                }
-                if (typeof o.length == 'number' && typeof o.item == 'function') {
-                    return 'nodelist';
-                }
-            }
-            return t;
-        },
-        isEmpty: function(v, allowBlank){
-            return v === null || v === undefined || (!allowBlank ? v === '' : false);
-        },
-        value: function(v, defaultValue, allowBlank){
-            return Ext.isEmpty(v, allowBlank) ? defaultValue : v;
-        },
-        isArray: function(v){
-            return v && typeof v.length == 'number' && typeof v.splice == 'function';
-        },
-        isDate: function(v){
-            return v && typeof v.getFullYear == 'function';
-        },
-        copyTo: function(dest, source, names){
-            if (typeof names == 'string') {
-                names = names.split(/[,;\s]/);
-            }
-            for (var i = 0, len = names.length; i < len; i++) {
-                var n = names[i];
-                if (source.hasOwnProperty(n)) {
-                    dest[n] = source[n];
-                }
-            }
-            return dest;
-        },
-        intercept: function(o, name, fn, scope){
-            o[name] = o[name].createInterceptor(fn, scope);
-        },
-        sequence: function(o, name, fn, scope){
-            o[name] = o[name].createSequence(fn, scope);
-        },
-        isOpera: isOpera,
-        isChrome: isChrome,
-        isSafari: isSafari,
-        isSafari3: isSafari3,
-        isSafari2: isSafari && !isSafari3,
-        isIE: isIE,
-        isIE6: isIE && !isIE7 && !isIE8,
-        isIE7: isIE7,
-        isIE8: isIE8,
-        isGecko: isGecko,
-        isGecko2: isGecko && !isGecko3,
-        isGecko3: isGecko3,
-        isBorderBox: isBorderBox,
-        isLinux: isLinux,
-        isWindows: isWindows,
-        isMac: isMac,
-        isAir: isAir,
-        useShims: ((isIE && !isIE7) || (isMac && isGecko && !isGecko3))
-    });
-    Ext.ns = Ext.namespace;
-})();
-Ext.ns("Ext", "Ext.util", "Ext.grid", "Ext.dd", "Ext.tree", "Ext.data", "Ext.form", "Ext.menu", "Ext.state", "Ext.lib", "Ext.layout", "Ext.app", "Ext.ux", "Ext.chart");
-Ext.apply(Function.prototype, {
-    createCallback: function(){
-        var args = arguments;
-        var method = this;
-        return function(){
-            return method.apply(window, args);
-        };
-    },
-    createDelegate: function(obj, args, appendArgs){
-        var method = this;
-        return function(){
-            var callArgs = args || arguments;
-            if (appendArgs === true) {
-                callArgs = Array.prototype.slice.call(arguments, 0);
-                callArgs = callArgs.concat(args);
-            }
-            else 
-                if (typeof appendArgs == "number") {
-                    callArgs = Array.prototype.slice.call(arguments, 0);
-                    var applyArgs = [appendArgs, 0].concat(args);
-                    Array.prototype.splice.apply(callArgs, applyArgs);
-                }
-            return method.apply(obj || window, callArgs);
-        };
-    },
-    defer: function(millis, obj, args, appendArgs){
-        var fn = this.createDelegate(obj, args, appendArgs);
-        if (millis) {
-            return setTimeout(fn, millis);
-        }
-        fn();
-        return 0;
-    },
-    createSequence: function(fcn, scope){
-        if (typeof fcn != "function") {
-            return this;
-        }
-        var method = this;
-        return function(){
-            var retval = method.apply(this || window, arguments);
-            fcn.apply(scope || this || window, arguments);
-            return retval;
-        };
-    },
-    createInterceptor: function(fcn, scope){
-        if (typeof fcn != "function") {
-            return this;
-        }
-        var method = this;
-        return function(){
-            fcn.target = this;
-            fcn.method = method;
-            if (fcn.apply(scope || this || window, arguments) === false) {
-                return;
-            }
-            return method.apply(this || window, arguments);
-        };
-    }
-});
-Ext.applyIf(String, {
-    escape: function(string){
-        return string.replace(/('|\\)/g, "\\$1");
-    },
-    leftPad: function(val, size, ch){
-        var result = new String(val);
-        if (!ch) {
-            ch = " ";
-        }
-        while (result.length < size) {
-            result = ch + result;
-        }
-        return result.toString();
-    },
-    format: function(format){
-        var args = Array.prototype.slice.call(arguments, 1);
-        return format.replace(/\{(\d+)\}/g, function(m, i){
-            return args[i];
-        });
-    }
-});
-String.prototype.toggle = function(value, other){
-    return this == value ? other : value;
-};
-String.prototype.trim = function(){
-    var re = /^\s+|\s+$/g;
-    return function(){
-        return this.replace(re, "");
-    };
-}();
-Ext.applyIf(Number.prototype, {
-    constrain: function(min, max){
-        return Math.min(Math.max(this, min), max);
-    }
-});
-Ext.applyIf(Array.prototype, {
-    indexOf: function(o){
-        for (var i = 0, len = this.length; i < len; i++) {
-            if (this[i] == o) 
-                return i;
-        }
-        return -1;
-    },
-    remove: function(o){
-        var index = this.indexOf(o);
-        if (index != -1) {
-            this.splice(index, 1);
-        }
-        return this;
-    }
-});
-Date.prototype.getElapsed = function(date){
-    return Math.abs((date || new Date()).getTime() - this.getTime());
-};
 
-(function(){
-    var libFlyweight;
-    Ext.lib.Dom = {
-        getViewWidth: function(full){
-            return full ? this.getDocumentWidth() : this.getViewportWidth();
-        },
-        getViewHeight: function(full){
-            return full ? this.getDocumentHeight() : this.getViewportHeight();
-        },
-        getDocumentHeight: function(){
-            var scrollHeight = (document.compatMode != "CSS1Compat") ? document.body.scrollHeight : document.documentElement.scrollHeight;
-            return Math.max(scrollHeight, this.getViewportHeight());
-        },
-        getDocumentWidth: function(){
-            var scrollWidth = (document.compatMode != "CSS1Compat") ? document.body.scrollWidth : document.documentElement.scrollWidth;
-            return Math.max(scrollWidth, this.getViewportWidth());
-        },
-        getViewportHeight: function(){
-            if (Ext.isIE) {
-                return Ext.isStrict ? document.documentElement.clientHeight : document.body.clientHeight;
-            }
-            else {
-                return self.innerHeight;
-            }
-        },
-        getViewportWidth: function(){
-            if (!Ext.isStrict && !Ext.isOpera) {
-                return document.body.clientWidth;
-            }
-            else 
-                if (Ext.isIE) {
-                    return document.documentElement.clientWidth;
-                }
-                else {
-                    return self.innerWidth;
-                }
-        },
-        isAncestor: function(p, c){
-            p = Ext.getDom(p);
-            c = Ext.getDom(c);
-            if (!p || !c) {
-                return false;
-            }
-            if (p.contains && !Ext.isSafari) {
-                return p.contains(c);
-            }
-            else 
-                if (p.compareDocumentPosition) {
-                    return !!(p.compareDocumentPosition(c) & 16);
-                }
-                else {
-                    var parent = c.parentNode;
-                    while (parent) {
-                        if (parent == p) {
-                            return true;
-                        }
-                        else 
-                            if (!parent.tagName || parent.tagName.toUpperCase() == "HTML") {
-                                return false;
-                            }
-                        parent = parent.parentNode;
-                    }
-                    return false;
-                }
-        },
-        getRegion: function(el){
-            return Ext.lib.Region.getRegion(el);
-        },
-        getY: function(el){
-            return this.getXY(el)[1];
-        },
-        getX: function(el){
-            return this.getXY(el)[0];
-        },
-        getXY: function(el){
-            var p, pe, b, scroll, bd = (document.body || document.documentElement);
-            el = Ext.getDom(el);
-            if (el == bd) {
-                return [0, 0];
-            }
-            if (el.getBoundingClientRect) {
-                b = el.getBoundingClientRect();
-                scroll = fly(document).getScroll();
-                return [b.left + scroll.left, b.top + scroll.top];
-            }
-            var x = 0, y = 0;
-            p = el;
-            var hasAbsolute = fly(el).getStyle("position") == "absolute";
-            while (p) {
-                x += p.offsetLeft;
-                y += p.offsetTop;
-                if (!hasAbsolute && fly(p).getStyle("position") == "absolute") {
-                    hasAbsolute = true;
-                }
-                if (Ext.isGecko) {
-                    pe = fly(p);
-                    var bt = parseInt(pe.getStyle("borderTopWidth"), 10) || 0;
-                    var bl = parseInt(pe.getStyle("borderLeftWidth"), 10) || 0;
-                    x += bl;
-                    y += bt;
-                    if (p != el && pe.getStyle('overflow') != 'visible') {
-                        x += bl;
-                        y += bt;
-                    }
-                }
-                p = p.offsetParent;
-            }
-            if (Ext.isSafari && hasAbsolute) {
-                x -= bd.offsetLeft;
-                y -= bd.offsetTop;
-            }
-            if (Ext.isGecko && !hasAbsolute) {
-                var dbd = fly(bd);
-                x += parseInt(dbd.getStyle("borderLeftWidth"), 10) || 0;
-                y += parseInt(dbd.getStyle("borderTopWidth"), 10) || 0;
-            }
-            p = el.parentNode;
-            while (p && p != bd) {
-                if (!Ext.isOpera || (p.tagName != 'TR' && fly(p).getStyle("display") != "inline")) {
-                    x -= p.scrollLeft;
-                    y -= p.scrollTop;
-                }
-                p = p.parentNode;
-            }
-            return [x, y];
-        },
-        setXY: function(el, xy){
-            el = Ext.fly(el, '_setXY');
-            el.position();
-            var pts = el.translatePoints(xy);
-            if (xy[0] !== false) {
-                el.dom.style.left = pts.left + "px";
-            }
-            if (xy[1] !== false) {
-                el.dom.style.top = pts.top + "px";
-            }
-        },
-        setX: function(el, x){
-            this.setXY(el, [x, false]);
-        },
-        setY: function(el, y){
-            this.setXY(el, [false, y]);
-        }
-    };
-    Ext.lib.Event = function(){
-        var loadComplete = false;
-        var listeners = [];
-        var unloadListeners = [];
-        var retryCount = 0;
-        var onAvailStack = [];
-        return {
-            POLL_RETRYS: 200,
-            POLL_INTERVAL: 20,
-            EL: 0,
-            TYPE: 1,
-            FN: 2,
-            WFN: 3,
-            OBJ: 3,
-            ADJ_SCOPE: 4,
-            _interval: null,
-            startInterval: function(){
-                if (!this._interval) {
-                    var self = this;
-                    var callback = function(){
-                        self._tryPreloadAttach();
-                    };
-                    this._interval = setInterval(callback, this.POLL_INTERVAL);
-                }
-            },
-            onAvailable: function(p_id, p_fn, p_obj, p_override){
-                onAvailStack.push({
-                    id: p_id,
-                    fn: p_fn,
-                    obj: p_obj,
-                    override: p_override,
-                    checkReady: false
-                });
-                retryCount = this.POLL_RETRYS;
-                this.startInterval();
-            },
-            addListener: function(el, eventName, fn){
-                el = Ext.getDom(el);
-                if (!el || !fn) {
-                    return false;
-                }
-                if ("unload" == eventName) {
-                    unloadListeners[unloadListeners.length] = [el, eventName, fn];
-                    return true;
-                }
-                var li = [el, eventName, fn, fn];
-                var index = listeners.length;
-                listeners[index] = li;
-                this.doAdd(el, eventName, fn, false);
-                return true;
-            },
-            removeListener: function(el, eventName, fn){
-                var i, len;
-                el = Ext.getDom(el);
-                if (!fn) {
-                    return this.purgeElement(el, false, eventName);
-                }
-                if ("unload" == eventName) {
-                    for (i = 0, len = unloadListeners.length; i < len; i++) {
-                        var li = unloadListeners[i];
-                        if (li && li[0] == el && li[1] == eventName && li[2] == fn) {
-                            unloadListeners.splice(i, 1);
-                            return true;
-                        }
-                    }
-                    return false;
-                }
-                var cacheItem = null;
-                var index = arguments[3];
-                if ("undefined" == typeof index) {
-                    index = this._getCacheIndex(el, eventName, fn);
-                }
-                if (index >= 0) {
-                    cacheItem = listeners[index];
-                }
-                if (!el || !cacheItem) {
-                    return false;
-                }
-                this.doRemove(el, eventName, cacheItem[this.WFN], false);
-                delete listeners[index][this.WFN];
-                delete listeners[index][this.FN];
-                listeners.splice(index, 1);
-                return true;
-            },
-            getTarget: function(ev){
-                ev = ev.browserEvent || ev;
-                var t = ev.target || ev.srcElement;
-                return this.resolveTextNode(t);
-            },
-            resolveTextNode: function(node){
-                if (Ext.isSafari && node && 3 == node.nodeType) {
-                    return node.parentNode;
-                }
-                else {
-                    return node;
-                }
-            },
-            getPageX: function(ev){
-                ev = ev.browserEvent || ev;
-                var x = ev.pageX;
-                if (!x && 0 !== x) {
-                    x = ev.clientX || 0;
-                    if (Ext.isIE) {
-                        x += this.getScroll()[1];
-                    }
-                }
-                return x;
-            },
-            getPageY: function(ev){
-                ev = ev.browserEvent || ev;
-                var y = ev.pageY;
-                if (!y && 0 !== y) {
-                    y = ev.clientY || 0;
-                    if (Ext.isIE) {
-                        y += this.getScroll()[0];
-                    }
-                }
-                return y;
-            },
-            getXY: function(ev){
-                ev = ev.browserEvent || ev;
-                return [this.getPageX(ev), this.getPageY(ev)];
-            },
-            getRelatedTarget: function(ev){
-                ev = ev.browserEvent || ev;
-                var t = ev.relatedTarget;
-                if (!t) {
-                    if (ev.type == "mouseout") {
-                        t = ev.toElement;
-                    }
-                    else 
-                        if (ev.type == "mouseover") {
-                            t = ev.fromElement;
-                        }
-                }
-                return this.resolveTextNode(t);
-            },
-            getTime: function(ev){
-                ev = ev.browserEvent || ev;
-                if (!ev.time) {
-                    var t = new Date().getTime();
-                    try {
-                        ev.time = t;
-                    } 
-                    catch (ex) {
-                        return t;
-                    }
-                }
-                return ev.time;
-            },
-            stopEvent: function(ev){
-                this.stopPropagation(ev);
-                this.preventDefault(ev);
-            },
-            stopPropagation: function(ev){
-                ev = ev.browserEvent || ev;
-                if (ev.stopPropagation) {
-                    ev.stopPropagation();
-                }
-                else {
-                    ev.cancelBubble = true;
-                }
-            },
-            preventDefault: function(ev){
-                ev = ev.browserEvent || ev;
-                if (ev.preventDefault) {
-                    ev.preventDefault();
-                }
-                else {
-                    ev.returnValue = false;
-                }
-            },
-            getEvent: function(e){
-                var ev = e || window.event;
-                if (!ev) {
-                    var c = this.getEvent.caller;
-                    while (c) {
-                        ev = c.arguments[0];
-                        if (ev && Event == ev.constructor) {
-                            break;
-                        }
-                        c = c.caller;
-                    }
-                }
-                return ev;
-            },
-            getCharCode: function(ev){
-                ev = ev.browserEvent || ev;
-                return ev.charCode || ev.keyCode || 0;
-            },
-            _getCacheIndex: function(el, eventName, fn){
-                for (var i = 0, len = listeners.length; i < len; ++i) {
-                    var li = listeners[i];
-                    if (li && li[this.FN] == fn && li[this.EL] == el && li[this.TYPE] == eventName) {
-                        return i;
-                    }
-                }
-                return -1;
-            },
-            elCache: {},
-            getEl: function(id){
-                return document.getElementById(id);
-            },
-            clearCache: function(){
-            },
-            _load: function(e){
-                loadComplete = true;
-                var EU = Ext.lib.Event;
-                if (Ext.isIE) {
-                    EU.doRemove(window, "load", EU._load);
-                }
-            },
-            _tryPreloadAttach: function(){
-                if (this.locked) {
-                    return false;
-                }
-                this.locked = true;
-                var tryAgain = !loadComplete;
-                if (!tryAgain) {
-                    tryAgain = (retryCount > 0);
-                }
-                var notAvail = [];
-                for (var i = 0, len = onAvailStack.length; i < len; ++i) {
-                    var item = onAvailStack[i];
-                    if (item) {
-                        var el = this.getEl(item.id);
-                        if (el) {
-                            if (!item.checkReady || loadComplete || el.nextSibling || (document && document.body)) {
-                                var scope = el;
-                                if (item.override) {
-                                    if (item.override === true) {
-                                        scope = item.obj;
-                                    }
-                                    else {
-                                        scope = item.override;
-                                    }
-                                }
-                                item.fn.call(scope, item.obj);
-                                onAvailStack[i] = null;
-                            }
-                        }
-                        else {
-                            notAvail.push(item);
-                        }
-                    }
-                }
-                retryCount = (notAvail.length === 0) ? 0 : retryCount - 1;
-                if (tryAgain) {
-                    this.startInterval();
-                }
-                else {
-                    clearInterval(this._interval);
-                    this._interval = null;
-                }
-                this.locked = false;
-                return true;
-            },
-            purgeElement: function(el, recurse, eventName){
-                var elListeners = this.getListeners(el, eventName);
-                if (elListeners) {
-                    for (var i = 0, len = elListeners.length; i < len; ++i) {
-                        var l = elListeners[i];
-                        this.removeListener(el, l.type, l.fn);
-                    }
-                }
-                if (recurse && el && el.childNodes) {
-                    for (i = 0, len = el.childNodes.length; i < len; ++i) {
-                        this.purgeElement(el.childNodes[i], recurse, eventName);
-                    }
-                }
-            },
-            getListeners: function(el, eventName){
-                var results = [], searchLists;
-                if (!eventName) {
-                    searchLists = [listeners, unloadListeners];
-                }
-                else 
-                    if (eventName == "unload") {
-                        searchLists = [unloadListeners];
-                    }
-                    else {
-                        searchLists = [listeners];
-                    }
-                for (var j = 0; j < searchLists.length; ++j) {
-                    var searchList = searchLists[j];
-                    if (searchList && searchList.length > 0) {
-                        for (var i = 0, len = searchList.length; i < len; ++i) {
-                            var l = searchList[i];
-                            if (l && l[this.EL] === el && (!eventName || eventName === l[this.TYPE])) {
-                                results.push({
-                                    type: l[this.TYPE],
-                                    fn: l[this.FN],
-                                    obj: l[this.OBJ],
-                                    adjust: l[this.ADJ_SCOPE],
-                                    index: i
-                                });
-                            }
-                        }
-                    }
-                }
-                return (results.length) ? results : null;
-            },
-            _unload: function(e){
-                var EU = Ext.lib.Event, i, j, l, len, index;
-                for (i = 0, len = unloadListeners.length; i < len; ++i) {
-                    l = unloadListeners[i];
-                    if (l) {
-                        var scope = window;
-                        if (l[EU.ADJ_SCOPE]) {
-                            if (l[EU.ADJ_SCOPE] === true) {
-                                scope = l[EU.OBJ];
-                            }
-                            else {
-                                scope = l[EU.ADJ_SCOPE];
-                            }
-                        }
-                        l[EU.FN].call(scope, EU.getEvent(e), l[EU.OBJ]);
-                        unloadListeners[i] = null;
-                        l = null;
-                        scope = null;
-                    }
-                }
-                unloadListeners = null;
-                if (listeners && listeners.length > 0) {
-                    j = listeners.length;
-                    while (j) {
-                        index = j - 1;
-                        l = listeners[index];
-                        if (l) {
-                            EU.removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], index);
-                        }
-                        j = j - 1;
-                    }
-                    l = null;
-                    EU.clearCache();
-                }
-                EU.doRemove(window, "unload", EU._unload);
-            },
-            getScroll: function(){
-                var dd = document.documentElement, db = document.body;
-                if (dd && (dd.scrollTop || dd.scrollLeft)) {
-                    return [dd.scrollTop, dd.scrollLeft];
-                }
-                else 
-                    if (db) {
-                        return [db.scrollTop, db.scrollLeft];
-                    }
-                    else {
-                        return [0, 0];
-                    }
-            },
-            doAdd: function(){
-                if (window.addEventListener) {
-                    return function(el, eventName, fn, capture){
-                        el.addEventListener(eventName, fn, (capture));
-                    };
-                }
-                else 
-                    if (window.attachEvent) {
-                        return function(el, eventName, fn, capture){
-                            el.attachEvent("on" + eventName, fn);
-                        };
-                    }
-                    else {
-                        return function(){
-                        };
-                    }
-            }(),
-            doRemove: function(){
-                if (window.removeEventListener) {
-                    return function(el, eventName, fn, capture){
-                        el.removeEventListener(eventName, fn, (capture));
-                    };
-                }
-                else 
-                    if (window.detachEvent) {
-                        return function(el, eventName, fn){
-                            el.detachEvent("on" + eventName, fn);
-                        };
-                    }
-                    else {
-                        return function(){
-                        };
-                    }
-            }()
-        };
-    }();
-    var E = Ext.lib.Event;
-    E.on = E.addListener;
-    E.un = E.removeListener;
-    if (document && document.body) {
-        E._load();
-    }
-    else {
-        E.doAdd(window, "load", E._load);
-    }
-    E.doAdd(window, "unload", E._unload);
-    E._tryPreloadAttach();
-    Ext.lib.Ajax = {
-        request: function(method, uri, cb, data, options){
-            if (options) {
-                var hs = options.headers;
-                if (hs) {
-                    for (var h in hs) {
-                        if (hs.hasOwnProperty(h)) {
-                            this.initHeader(h, hs[h], false);
-                        }
-                    }
-                }
-                if (options.xmlData) {
-                    if (!hs || !hs['Content-Type']) {
-                        this.initHeader('Content-Type', 'text/xml', false);
-                    }
-                    method = (method ? method : (options.method ? options.method : 'POST'));
-                    data = options.xmlData;
-                }
-                else 
-                    if (options.jsonData) {
-                        if (!hs || !hs['Content-Type']) {
-                            this.initHeader('Content-Type', 'application/json', false);
-                        }
-                        method = (method ? method : (options.method ? options.method : 'POST'));
-                        data = typeof options.jsonData == 'object' ? Ext.encode(options.jsonData) : options.jsonData;
-                    }
-            }
-            return this.asyncRequest(method, uri, cb, data);
-        },
-        serializeForm: function(form){
-            if (typeof form == 'string') {
-                form = (document.getElementById(form) || document.forms[form]);
-            }
-            var el, name, val, disabled, data = '', hasSubmit = false;
-            for (var i = 0; i < form.elements.length; i++) {
-                el = form.elements[i];
-                disabled = form.elements[i].disabled;
-                name = form.elements[i].name;
-                val = form.elements[i].value;
-                if (!disabled && name) {
-                    switch (el.type) {
-                        case 'select-one':
-                        case 'select-multiple':
-                            for (var j = 0; j < el.options.length; j++) {
-                                if (el.options[j].selected) {
-                                    if (Ext.isIE) {
-                                        data += encodeURIComponent(name) + '=' + encodeURIComponent(el.options[j].attributes['value'].specified ? el.options[j].value : el.options[j].text) + '&';
-                                    }
-                                    else {
-                                        data += encodeURIComponent(name) + '=' + encodeURIComponent(el.options[j].hasAttribute('value') ? el.options[j].value : el.options[j].text) + '&';
-                                    }
-                                }
-                            }
-                            break;
-                        case 'radio':
-                        case 'checkbox':
-                            if (el.checked) {
-                                data += encodeURIComponent(name) + '=' + encodeURIComponent(val) + '&';
-                            }
-                            break;
-                        case 'file':
-                        case undefined:
-                        case 'reset':
-                        case 'button':
-                            break;
-                        case 'submit':
-                            if (!hasSubmit) {
-                                data += encodeURIComponent(name) + '=' + encodeURIComponent(val) + '&';
-                                hasSubmit = true;
-                            }
-                            break;
-                        default:
-                            data += encodeURIComponent(name) + '=' + encodeURIComponent(val) + '&';
-                            break;
-                    }
-                }
-            }
-            data = data.substr(0, data.length - 1);
-            return data;
-        },
-        headers: {},
-        hasHeaders: false,
-        useDefaultHeader: true,
-        defaultPostHeader: 'application/x-www-form-urlencoded; charset=UTF-8',
-        useDefaultXhrHeader: true,
-        defaultXhrHeader: 'XMLHttpRequest',
-        hasDefaultHeaders: true,
-        defaultHeaders: {},
-        poll: {},
-        timeout: {},
-        pollInterval: 50,
-        transactionId: 0,
-        setProgId: function(id){
-            this.activeX.unshift(id);
-        },
-        setDefaultPostHeader: function(b){
-            this.useDefaultHeader = b;
-        },
-        setDefaultXhrHeader: function(b){
-            this.useDefaultXhrHeader = b;
-        },
-        setPollingInterval: function(i){
-            if (typeof i == 'number' && isFinite(i)) {
-                this.pollInterval = i;
-            }
-        },
-        createXhrObject: function(transactionId){
-            var obj, http;
-            try {
-                http = new XMLHttpRequest();
-                obj = {
-                    conn: http,
-                    tId: transactionId
-                };
-            } 
-            catch (e) {
-                for (var i = 0; i < this.activeX.length; ++i) {
-                    try {
-                        http = new ActiveXObject(this.activeX[i]);
-                        obj = {
-                            conn: http,
-                            tId: transactionId
-                        };
-                        break;
-                    } 
-                    catch (e) {
-                    }
-                }
-            }
-            finally {
-                return obj;
-            }
-        },
-        getConnectionObject: function(){
-            var o;
-            var tId = this.transactionId;
-            try {
-                o = this.createXhrObject(tId);
-                if (o) {
-                    this.transactionId++;
-                }
-            } 
-            catch (e) {
-            }
-            finally {
-                return o;
-            }
-        },
-        asyncRequest: function(method, uri, callback, postData){
-            var o = this.getConnectionObject();
-            if (!o) {
-                return null;
-            }
-            else {
-                o.conn.open(method, uri, true);
-                if (this.useDefaultXhrHeader) {
-                    if (!this.defaultHeaders['X-Requested-With']) {
-                        this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
-                    }
-                }
-                if (postData && this.useDefaultHeader && (!this.hasHeaders || !this.headers['Content-Type'])) {
-                    this.initHeader('Content-Type', this.defaultPostHeader);
-                }
-                if (this.hasDefaultHeaders || this.hasHeaders) {
-                    this.setHeader(o);
-                }
-                this.handleReadyState(o, callback);
-                o.conn.send(postData || null);
-                return o;
-            }
-        },
-        handleReadyState: function(o, callback){
-            var oConn = this;
-            if (callback && callback.timeout) {
-                this.timeout[o.tId] = window.setTimeout(function(){
-                    oConn.abort(o, callback, true);
-                }, callback.timeout);
-            }
-            this.poll[o.tId] = window.setInterval(function(){
-                if (o.conn && o.conn.readyState == 4) {
-                    window.clearInterval(oConn.poll[o.tId]);
-                    delete oConn.poll[o.tId];
-                    if (callback && callback.timeout) {
-                        window.clearTimeout(oConn.timeout[o.tId]);
-                        delete oConn.timeout[o.tId];
-                    }
-                    oConn.handleTransactionResponse(o, callback);
-                }
-            }, this.pollInterval);
-        },
-        handleTransactionResponse: function(o, callback, isAbort){
-            if (!callback) {
-                this.releaseObject(o);
-                return;
-            }
-            var httpStatus, responseObject;
-            try {
-                if (o.conn.status !== undefined && o.conn.status != 0) {
-                    httpStatus = o.conn.status;
-                }
-                else {
-                    httpStatus = 13030;
-                }
-            } 
-            catch (e) {
-                httpStatus = 13030;
-            }
-            if (httpStatus >= 200 && httpStatus < 300) {
-                responseObject = this.createResponseObject(o, callback.argument);
-                if (callback.success) {
-                    if (!callback.scope) {
-                        callback.success(responseObject);
-                    }
-                    else {
-                        callback.success.apply(callback.scope, [responseObject]);
-                    }
-                }
-            }
-            else {
-                switch (httpStatus) {
-                    case 12002:
-                    case 12029:
-                    case 12030:
-                    case 12031:
-                    case 12152:
-                    case 13030:
-                        responseObject = this.createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false));
-                        if (callback.failure) {
-                            if (!callback.scope) {
-                                callback.failure(responseObject);
-                            }
-                            else {
-                                callback.failure.apply(callback.scope, [responseObject]);
-                            }
-                        }
-                        break;
-                    default:
-                        responseObject = this.createResponseObject(o, callback.argument);
-                        if (callback.failure) {
-                            if (!callback.scope) {
-                                callback.failure(responseObject);
-                            }
-                            else {
-                                callback.failure.apply(callback.scope, [responseObject]);
-                            }
-                        }
-                }
-            }
-            this.releaseObject(o);
-            responseObject = null;
-        },
-        createResponseObject: function(o, callbackArg){
-            var obj = {};
-            var headerObj = {};
-            try {
-                var headerStr = o.conn.getAllResponseHeaders();
-                var header = headerStr.split('\n');
-                for (var i = 0; i < header.length; i++) {
-                    var delimitPos = header[i].indexOf(':');
-                    if (delimitPos != -1) {
-                        headerObj[header[i].substring(0, delimitPos)] = header[i].substring(delimitPos + 2);
-                    }
-                }
-            } 
-            catch (e) {
-            }
-            obj.tId = o.tId;
-            obj.status = o.conn.status;
-            obj.statusText = o.conn.statusText;
-            obj.getResponseHeader = headerObj;
-            obj.getAllResponseHeaders = headerStr;
-            obj.responseText = o.conn.responseText;
-            obj.responseXML = o.conn.responseXML;
-            if (typeof callbackArg !== undefined) {
-                obj.argument = callbackArg;
-            }
-            return obj;
-        },
-        createExceptionObject: function(tId, callbackArg, isAbort){
-            var COMM_CODE = 0;
-            var COMM_ERROR = 'communication failure';
-            var ABORT_CODE = -1;
-            var ABORT_ERROR = 'transaction aborted';
-            var obj = {};
-            obj.tId = tId;
-            if (isAbort) {
-                obj.status = ABORT_CODE;
-                obj.statusText = ABORT_ERROR;
-            }
-            else {
-                obj.status = COMM_CODE;
-                obj.statusText = COMM_ERROR;
-            }
-            if (callbackArg) {
-                obj.argument = callbackArg;
-            }
-            return obj;
-        },
-        initHeader: function(label, value, isDefault){
-            var headerObj = (isDefault) ? this.defaultHeaders : this.headers;
-            if (headerObj[label] === undefined) {
-                headerObj[label] = value;
-            }
-            else {
-                headerObj[label] = value + "," + headerObj[label];
-            }
-            if (isDefault) {
-                this.hasDefaultHeaders = true;
-            }
-            else {
-                this.hasHeaders = true;
-            }
-        },
-        setHeader: function(o){
-            if (this.hasDefaultHeaders) {
-                for (var prop in this.defaultHeaders) {
-                    if (this.defaultHeaders.hasOwnProperty(prop)) {
-                        o.conn.setRequestHeader(prop, this.defaultHeaders[prop]);
-                    }
-                }
-            }
-            if (this.hasHeaders) {
-                for (var prop in this.headers) {
-                    if (this.headers.hasOwnProperty(prop)) {
-                        o.conn.setRequestHeader(prop, this.headers[prop]);
-                    }
-                }
-                this.headers = {};
-                this.hasHeaders = false;
-            }
-        },
-        resetDefaultHeaders: function(){
-            delete this.defaultHeaders;
-            this.defaultHeaders = {};
-            this.hasDefaultHeaders = false;
-        },
-        abort: function(o, callback, isTimeout){
-            if (this.isCallInProgress(o)) {
-                o.conn.abort();
-                window.clearInterval(this.poll[o.tId]);
-                delete this.poll[o.tId];
-                if (isTimeout) {
-                    delete this.timeout[o.tId];
-                }
-                this.handleTransactionResponse(o, callback, true);
-                return true;
-            }
-            else {
-                return false;
-            }
-        },
-        isCallInProgress: function(o){
-            if (o.conn) {
-                return o.conn.readyState != 4 && o.conn.readyState != 0;
-            }
-            else {
-                return false;
-            }
-        },
-        releaseObject: function(o){
-            o.conn = null;
-            o = null;
-        },
-        activeX: ['MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP']
-    };
-    Ext.lib.Region = function(t, r, b, l){
-        this.top = t;
-        this[1] = t;
-        this.right = r;
-        this.bottom = b;
-        this.left = l;
-        this[0] = l;
-    };
-    Ext.lib.Region.prototype = {
-        contains: function(region){
-            return (region.left >= this.left && region.right <= this.right && region.top >= this.top && region.bottom <= this.bottom);
-        },
-        getArea: function(){
-            return ((this.bottom - this.top) * (this.right - this.left));
-        },
-        intersect: function(region){
-            var t = Math.max(this.top, region.top);
-            var r = Math.min(this.right, region.right);
-            var b = Math.min(this.bottom, region.bottom);
-            var l = Math.max(this.left, region.left);
-            if (b >= t && r >= l) {
-                return new Ext.lib.Region(t, r, b, l);
-            }
-            else {
-                return null;
-            }
-        },
-        union: function(region){
-            var t = Math.min(this.top, region.top);
-            var r = Math.max(this.right, region.right);
-            var b = Math.max(this.bottom, region.bottom);
-            var l = Math.min(this.left, region.left);
-            return new Ext.lib.Region(t, r, b, l);
-        },
-        constrainTo: function(r){
-            this.top = this.top.constrain(r.top, r.bottom);
-            this.bottom = this.bottom.constrain(r.top, r.bottom);
-            this.left = this.left.constrain(r.left, r.right);
-            this.right = this.right.constrain(r.left, r.right);
-            return this;
-        },
-        adjust: function(t, l, b, r){
-            this.top += t;
-            this.left += l;
-            this.right += r;
-            this.bottom += b;
-            return this;
-        }
-    };
-    Ext.lib.Region.getRegion = function(el){
-        var p = Ext.lib.Dom.getXY(el);
-        var t = p[1];
-        var r = p[0] + el.offsetWidth;
-        var b = p[1] + el.offsetHeight;
-        var l = p[0];
-        return new Ext.lib.Region(t, r, b, l);
-    };
-    Ext.lib.Point = function(x, y){
-        if (Ext.isArray(x)) {
-            y = x[1];
-            x = x[0];
-        }
-        this.x = this.right = this.left = this[0] = x;
-        this.y = this.top = this.bottom = this[1] = y;
-    };
-    Ext.lib.Point.prototype = new Ext.lib.Region();
-    Ext.lib.Anim = {
-        scroll: function(el, args, duration, easing, cb, scope){
-            return this.run(el, args, duration, easing, cb, scope, Ext.lib.Scroll);
-        },
-        motion: function(el, args, duration, easing, cb, scope){
-            return this.run(el, args, duration, easing, cb, scope, Ext.lib.Motion);
-        },
-        color: function(el, args, duration, easing, cb, scope){
-            return this.run(el, args, duration, easing, cb, scope, Ext.lib.ColorAnim);
-        },
-        run: function(el, args, duration, easing, cb, scope, type){
-            type = type || Ext.lib.AnimBase;
-            if (typeof easing == "string") {
-                easing = Ext.lib.Easing[easing];
-            }
-            var anim = new type(el, args, duration, easing);
-            anim.animateX(function(){
-                Ext.callback(cb, scope);
-            });
-            return anim;
-        }
-    };
-    function fly(el){
-        if (!libFlyweight) {
-            libFlyweight = new Ext.Element.Flyweight();
-        }
-        libFlyweight.dom = el;
-        return libFlyweight;
-    }
-    if (Ext.isIE) {
-        function fnCleanUp(){
-            var p = Function.prototype;
-            delete p.createSequence;
-            delete p.defer;
-            delete p.createDelegate;
-            delete p.createCallback;
-            delete p.createInterceptor;
-            window.detachEvent("onunload", fnCleanUp);
-        }
-        window.attachEvent("onunload", fnCleanUp);
-    }
-    Ext.lib.AnimBase = function(el, attributes, duration, method){
-        if (el) {
-            this.init(el, attributes, duration, method);
-        }
-    };
-    Ext.lib.AnimBase.prototype = {
-        toString: function(){
-            var el = this.getEl();
-            var id = el.id || el.tagName;
-            return ("Anim " + id);
-        },
-        patterns: {
-            noNegatives: /width|height|opacity|padding/i,
-            offsetAttribute: /^((width|height)|(top|left))$/,
-            defaultUnit: /width|height|top$|bottom$|left$|right$/i,
-            offsetUnit: /\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i
-        },
-        doMethod: function(attr, start, end){
-            return this.method(this.currentFrame, start, end - start, this.totalFrames);
-        },
-        setAttribute: function(attr, val, unit){
-            if (this.patterns.noNegatives.test(attr)) {
-                val = (val > 0) ? val : 0;
-            }
-            Ext.fly(this.getEl(), '_anim').setStyle(attr, val + unit);
-        },
-        getAttribute: function(attr){
-            var el = this.getEl();
-            var val = fly(el).getStyle(attr);
-            if (val !== 'auto' && !this.patterns.offsetUnit.test(val)) {
-                return parseFloat(val);
-            }
-            var a = this.patterns.offsetAttribute.exec(attr) || [];
-            var pos = !!(a[3]);
-            var box = !!(a[2]);
-            if (box || (fly(el).getStyle('position') == 'absolute' && pos)) {
-                val = el['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)];
-            }
-            else {
-                val = 0;
-            }
-            return val;
-        },
-        getDefaultUnit: function(attr){
-            if (this.patterns.defaultUnit.test(attr)) {
-                return 'px';
-            }
-            return '';
-        },
-        animateX: function(callback, scope){
-            var f = function(){
-                this.onComplete.removeListener(f);
-                if (typeof callback == "function") {
-                    callback.call(scope || this, this);
-                }
-            };
-            this.onComplete.addListener(f, this);
-            this.animate();
-        },
-        setRuntimeAttribute: function(attr){
-            var start;
-            var end;
-            var attributes = this.attributes;
-            this.runtimeAttributes[attr] = {};
-            var isset = function(prop){
-                return (typeof prop !== 'undefined');
-            };
-            if (!isset(attributes[attr]['to']) && !isset(attributes[attr]['by'])) {
-                return false;
-            }
-            start = (isset(attributes[attr]['from'])) ? attributes[attr]['from'] : this.getAttribute(attr);
-            if (isset(attributes[attr]['to'])) {
-                end = attributes[attr]['to'];
-            }
-            else 
-                if (isset(attributes[attr]['by'])) {
-                    if (start.constructor == Array) {
-                        end = [];
-                        for (var i = 0, len = start.length; i < len; ++i) {
-                            end[i] = start[i] + attributes[attr]['by'][i];
-                        }
-                    }
-                    else {
-                        end = start + attributes[attr]['by'];
-                    }
-                }
-            this.runtimeAttributes[attr].start = start;
-            this.runtimeAttributes[attr].end = end;
-            this.runtimeAttributes[attr].unit = (isset(attributes[attr].unit)) ? attributes[attr]['unit'] : this.getDefaultUnit(attr);
-        },
-        init: function(el, attributes, duration, method){
-            var isAnimated = false;
-            var startTime = null;
-            var actualFrames = 0;
-            el = Ext.getDom(el);
-            this.attributes = attributes ||
-            {};
-            this.duration = duration || 1;
-            this.method = method || Ext.lib.Easing.easeNone;
-            this.useSeconds = true;
-            this.currentFrame = 0;
-            this.totalFrames = Ext.lib.AnimMgr.fps;
-            this.getEl = function(){
-                return el;
-            };
-            this.isAnimated = function(){
-                return isAnimated;
-            };
-            this.getStartTime = function(){
-                return startTime;
-            };
-            this.runtimeAttributes = {};
-            this.animate = function(){
-                if (this.isAnimated()) {
-                    return false;
-                }
-                this.currentFrame = 0;
-                this.totalFrames = (this.useSeconds) ? Math.ceil(Ext.lib.AnimMgr.fps * this.duration) : this.duration;
-                Ext.lib.AnimMgr.registerElement(this);
-            };
-            this.stop = function(finish){
-                if (finish) {
-                    this.currentFrame = this.totalFrames;
-                    this._onTween.fire();
-                }
-                Ext.lib.AnimMgr.stop(this);
-            };
-            var onStart = function(){
-                this.onStart.fire();
-                this.runtimeAttributes = {};
-                for (var attr in this.attributes) {
-                    this.setRuntimeAttribute(attr);
-                }
-                isAnimated = true;
-                actualFrames = 0;
-                startTime = new Date();
-            };
-            var onTween = function(){
-                var data = {
-                    duration: new Date() - this.getStartTime(),
-                    currentFrame: this.currentFrame
-                };
-                data.toString = function(){
-                    return ('duration: ' + data.duration + ', currentFrame: ' + data.currentFrame);
-                };
-                this.onTween.fire(data);
-                var runtimeAttributes = this.runtimeAttributes;
-                for (var attr in runtimeAttributes) {
-                    this.setAttribute(attr, this.doMethod(attr, runtimeAttributes[attr].start, runtimeAttributes[attr].end), runtimeAttributes[attr].unit);
-                }
-                actualFrames += 1;
-            };
-            var onComplete = function(){
-                var actual_duration = (new Date() - startTime) / 1000;
-                var data = {
-                    duration: actual_duration,
-                    frames: actualFrames,
-                    fps: actualFrames / actual_duration
-                };
-                data.toString = function(){
-                    return ('duration: ' + data.duration + ', frames: ' + data.frames + ', fps: ' + data.fps);
-                };
-                isAnimated = false;
-                actualFrames = 0;
-                this.onComplete.fire(data);
-            };
-            this._onStart = new Ext.util.Event(this);
-            this.onStart = new Ext.util.Event(this);
-            this.onTween = new Ext.util.Event(this);
-            this._onTween = new Ext.util.Event(this);
-            this.onComplete = new Ext.util.Event(this);
-            this._onComplete = new Ext.util.Event(this);
-            this._onStart.addListener(onStart);
-            this._onTween.addListener(onTween);
-            this._onComplete.addListener(onComplete);
-        }
-    };
-    Ext.lib.AnimMgr = new function(){
-        var thread = null;
-        var queue = [];
-        var tweenCount = 0;
-        this.fps = 1000;
-        this.delay = 1;
-        this.registerElement = function(tween){
-            queue[queue.length] = tween;
-            tweenCount += 1;
-            tween._onStart.fire();
-            this.start();
-        };
-        this.unRegister = function(tween, index){
-            tween._onComplete.fire();
-            index = index || getIndex(tween);
-            if (index != -1) {
-                queue.splice(index, 1);
-            }
-            tweenCount -= 1;
-            if (tweenCount <= 0) {
-                this.stop();
-            }
-        };
-        this.start = function(){
-            if (thread === null) {
-                thread = setInterval(this.run, this.delay);
-            }
-        };
-        this.stop = function(tween){
-            if (!tween) {
-                clearInterval(thread);
-                for (var i = 0, len = queue.length; i < len; ++i) {
-                    if (queue[0].isAnimated()) {
-                        this.unRegister(queue[0], 0);
-                    }
-                }
-                queue = [];
-                thread = null;
-                tweenCount = 0;
-            }
-            else {
-                this.unRegister(tween);
-            }
-        };
-        this.run = function(){
-            for (var i = 0, len = queue.length; i < len; ++i) {
-                var tween = queue[i];
-                if (!tween || !tween.isAnimated()) {
-                    continue;
-                }
-                if (tween.currentFrame < tween.totalFrames || tween.totalFrames === null) {
-                    tween.currentFrame += 1;
-                    if (tween.useSeconds) {
-                        correctFrame(tween);
-                    }
-                    tween._onTween.fire();
-                }
-                else {
-                    Ext.lib.AnimMgr.stop(tween, i);
-                }
-            }
-        };
-        var getIndex = function(anim){
-            for (var i = 0, len = queue.length; i < len; ++i) {
-                if (queue[i] == anim) {
-                    return i;
-                }
-            }
-            return -1;
-        };
-        var correctFrame = function(tween){
-            var frames = tween.totalFrames;
-            var frame = tween.currentFrame;
-            var expected = (tween.currentFrame * tween.duration * 1000 / tween.totalFrames);
-            var elapsed = (new Date() - tween.getStartTime());
-            var tweak = 0;
-            if (elapsed < tween.duration * 1000) {
-                tweak = Math.round((elapsed / expected - 1) * tween.currentFrame);
-            }
-            else {
-                tweak = frames - (frame + 1);
-            }
-            if (tweak > 0 && isFinite(tweak)) {
-                if (tween.currentFrame + tweak >= frames) {
-                    tweak = frames - (frame + 1);
-                }
-                tween.currentFrame += tweak;
-            }
-        };
-    };
-    Ext.lib.Bezier = new function(){
-        this.getPosition = function(points, t){
-            var n = points.length;
-            var tmp = [];
-            for (var i = 0; i < n; ++i) {
-                tmp[i] = [points[i][0], points[i][1]];
-            }
-            for (var j = 1; j < n; ++j) {
-                for (i = 0; i < n - j; ++i) {
-                    tmp[i][0] = (1 - t) * tmp[i][0] + t * tmp[parseInt(i + 1, 10)][0];
-                    tmp[i][1] = (1 - t) * tmp[i][1] + t * tmp[parseInt(i + 1, 10)][1];
-                }
-            }
-            return [tmp[0][0], tmp[0][1]];
-        };
-    };
-    (function(){
-        Ext.lib.ColorAnim = function(el, attributes, duration, method){
-            Ext.lib.ColorAnim.superclass.constructor.call(this, el, attributes, duration, method);
-        };
-        Ext.extend(Ext.lib.ColorAnim, Ext.lib.AnimBase);
-        var Y = Ext.lib;
-        var superclass = Y.ColorAnim.superclass;
-        var proto = Y.ColorAnim.prototype;
-        proto.toString = function(){
-            var el = this.getEl();
-            var id = el.id || el.tagName;
-            return ("ColorAnim " + id);
-        };
-        proto.patterns.color = /color$/i;
-        proto.patterns.rgb = /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;
-        proto.patterns.hex = /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;
-        proto.patterns.hex3 = /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;
-        proto.patterns.transparent = /^transparent|rgba\(0, 0, 0, 0\)$/;
-        proto.parseColor = function(s){
-            if (s.length == 3) {
-                return s;
-            }
-            var c = this.patterns.hex.exec(s);
-            if (c && c.length == 4) {
-                return [parseInt(c[1], 16), parseInt(c[2], 16), parseInt(c[3], 16)];
-            }
-            c = this.patterns.rgb.exec(s);
-            if (c && c.length == 4) {
-                return [parseInt(c[1], 10), parseInt(c[2], 10), parseInt(c[3], 10)];
-            }
-            c = this.patterns.hex3.exec(s);
-            if (c && c.length == 4) {
-                return [parseInt(c[1] + c[1], 16), parseInt(c[2] + c[2], 16), parseInt(c[3] + c[3], 16)];
-            }
-            return null;
-        };
-        proto.getAttribute = function(attr){
-            var el = this.getEl();
-            if (this.patterns.color.test(attr)) {
-                var val = fly(el).getStyle(attr);
-                if (this.patterns.transparent.test(val)) {
-                    var parent = el.parentNode;
-                    val = fly(parent).getStyle(attr);
-                    while (parent && this.patterns.transparent.test(val)) {
-                        parent = parent.parentNode;
-                        val = fly(parent).getStyle(attr);
-                        if (parent.tagName.toUpperCase() == 'HTML') {
-                            val = '#fff';
-                        }
-                    }
-                }
-            }
-            else {
-                val = superclass.getAttribute.call(this, attr);
-            }
-            return val;
-        };
-        proto.doMethod = function(attr, start, end){
-            var val;
-            if (this.patterns.color.test(attr)) {
-                val = [];
-                for (var i = 0, len = start.length; i < len; ++i) {
-                    val[i] = superclass.doMethod.call(this, attr, start[i], end[i]);
-                }
-                val = 'rgb(' + Math.floor(val[0]) + ',' + Math.floor(val[1]) + ',' + Math.floor(val[2]) + ')';
-            }
-            else {
-                val = superclass.doMethod.call(this, attr, start, end);
-            }
-            return val;
-        };
-        proto.setRuntimeAttribute = function(attr){
-            superclass.setRuntimeAttribute.call(this, attr);
-            if (this.patterns.color.test(attr)) {
-                var attributes = this.attributes;
-                var start = this.parseColor(this.runtimeAttributes[attr].start);
-                var end = this.parseColor(this.runtimeAttributes[attr].end);
-                if (typeof attributes[attr]['to'] === 'undefined' && typeof attributes[attr]['by'] !== 'undefined') {
-                    end = this.parseColor(attributes[attr].by);
-                    for (var i = 0, len = start.length; i < len; ++i) {
-                        end[i] = start[i] + end[i];
-                    }
-                }
-                this.runtimeAttributes[attr].start = start;
-                this.runtimeAttributes[attr].end = end;
-            }
-        };
-    })();
-    Ext.lib.Easing = {
-        easeNone: function(t, b, c, d){
-            return c * t / d + b;
-        },
-        easeIn: function(t, b, c, d){
-            return c * (t /= d) * t + b;
-        },
-        easeOut: function(t, b, c, d){
-            return -c * (t /= d) * (t - 2) + b;
-        },
-        easeBoth: function(t, b, c, d){
-            if ((t /= d / 2) < 1) {
-                return c / 2 * t * t + b;
-            }
-            return -c / 2 * ((--t) * (t - 2) - 1) + b;
-        },
-        easeInStrong: function(t, b, c, d){
-            return c * (t /= d) * t * t * t + b;
-        },
-        easeOutStrong: function(t, b, c, d){
-            return -c * ((t = t / d - 1) * t * t * t - 1) + b;
-        },
-        easeBothStrong: function(t, b, c, d){
-            if ((t /= d / 2) < 1) {
-                return c / 2 * t * t * t * t + b;
-            }
-            return -c / 2 * ((t -= 2) * t * t * t - 2) + b;
-        },
-        elasticIn: function(t, b, c, d, a, p){
-            if (t == 0) {
-                return b;
-            }
-            if ((t /= d) == 1) {
-                return b + c;
-            }
-            if (!p) {
-                p = d * .3;
-            }
-            if (!a || a < Math.abs(c)) {
-                a = c;
-                var s = p / 4;
-            }
-            else {
-                var s = p / (2 * Math.PI) * Math.asin(c / a);
-            }
-            return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
-        },
-        elasticOut: function(t, b, c, d, a, p){
-            if (t == 0) {
-                return b;
-            }
-            if ((t /= d) == 1) {
-                return b + c;
-            }
-            if (!p) {
-                p = d * .3;
-            }
-            if (!a || a < Math.abs(c)) {
-                a = c;
-                var s = p / 4;
-            }
-            else {
-                var s = p / (2 * Math.PI) * Math.asin(c / a);
-            }
-            return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;
-        },
-        elasticBoth: function(t, b, c, d, a, p){
-            if (t == 0) {
-                return b;
-            }
-            if ((t /= d / 2) == 2) {
-                return b + c;
-            }
-            if (!p) {
-                p = d * (.3 * 1.5);
-            }
-            if (!a || a < Math.abs(c)) {
-                a = c;
-                var s = p / 4;
-            }
-            else {
-                var s = p / (2 * Math.PI) * Math.asin(c / a);
-            }
-            if (t < 1) {
-                return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
-            }
-            return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;
-        },
-        backIn: function(t, b, c, d, s){
-            if (typeof s == 'undefined') {
-                s = 1.70158;
-            }
-            return c * (t /= d) * t * ((s + 1) * t - s) + b;
-        },
-        backOut: function(t, b, c, d, s){
-            if (typeof s == 'undefined') {
-                s = 1.70158;
-            }
-            return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
-        },
-        backBoth: function(t, b, c, d, s){
-            if (typeof s == 'undefined') {
-                s = 1.70158;
-            }
-            if ((t /= d / 2) < 1) {
-                return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
-            }
-            return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
-        },
-        bounceIn: function(t, b, c, d){
-            return c - Ext.lib.Easing.bounceOut(d - t, 0, c, d) + b;
-        },
-        bounceOut: function(t, b, c, d){
-            if ((t /= d) < (1 / 2.75)) {
-                return c * (7.5625 * t * t) + b;
-            }
-            else 
-                if (t < (2 / 2.75)) {
-                    return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
-                }
-                else 
-                    if (t < (2.5 / 2.75)) {
-                        return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
-                    }
-            return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
-        },
-        bounceBoth: function(t, b, c, d){
-            if (t < d / 2) {
-                return Ext.lib.Easing.bounceIn(t * 2, 0, c, d) * .5 + b;
-            }
-            return Ext.lib.Easing.bounceOut(t * 2 - d, 0, c, d) * .5 + c * .5 + b;
-        }
-    };
-    (function(){
-        Ext.lib.Motion = function(el, attributes, duration, method){
-            if (el) {
-                Ext.lib.Motion.superclass.constructor.call(this, el, attributes, duration, method);
-            }
-        };
-        Ext.extend(Ext.lib.Motion, Ext.lib.ColorAnim);
-        var Y = Ext.lib;
-        var superclass = Y.Motion.superclass;
-        var proto = Y.Motion.prototype;
-        proto.toString = function(){
-            var el = this.getEl();
-            var id = el.id || el.tagName;
-            return ("Motion " + id);
-        };
-        proto.patterns.points = /^points$/i;
-        proto.setAttribute = function(attr, val, unit){
-            if (this.patterns.points.test(attr)) {
-                unit = unit || 'px';
-                superclass.setAttribute.call(this, 'left', val[0], unit);
-                superclass.setAttribute.call(this, 'top', val[1], unit);
-            }
-            else {
-                superclass.setAttribute.call(this, attr, val, unit);
-            }
-        };
-        proto.getAttribute = function(attr){
-            if (this.patterns.points.test(attr)) {
-                var val = [superclass.getAttribute.call(this, 'left'), superclass.getAttribute.call(this, 'top')];
-            }
-            else {
-                val = superclass.getAttribute.call(this, attr);
-            }
-            return val;
-        };
-        proto.doMethod = function(attr, start, end){
-            var val = null;
-            if (this.patterns.points.test(attr)) {
-                var t = this.method(this.currentFrame, 0, 100, this.totalFrames) / 100;
-                val = Y.Bezier.getPosition(this.runtimeAttributes[attr], t);
-            }
-            else {
-                val = superclass.doMethod.call(this, attr, start, end);
-            }
-            return val;
-        };
-        proto.setRuntimeAttribute = function(attr){
-            if (this.patterns.points.test(attr)) {
-                var el = this.getEl();
-                var attributes = this.attributes;
-                var start;
-                var control = attributes['points']['control'] || [];
-                var end;
-                var i, len;
-                if (control.length > 0 && !Ext.isArray(control[0])) {
-                    control = [control];
-                }
-                else {
-                    var tmp = [];
-                    for (i = 0, len = control.length; i < len; ++i) {
-                        tmp[i] = control[i];
-                    }
-                    control = tmp;
-                }
-                Ext.fly(el, '_anim').position();
-                if (isset(attributes['points']['from'])) {
-                    Ext.lib.Dom.setXY(el, attributes['points']['from']);
-                }
-                else {
-                    Ext.lib.Dom.setXY(el, Ext.lib.Dom.getXY(el));
-                }
-                start = this.getAttribute('points');
-                if (isset(attributes['points']['to'])) {
-                    end = translateValues.call(this, attributes['points']['to'], start);
-                    var pageXY = Ext.lib.Dom.getXY(this.getEl());
-                    for (i = 0, len = control.length; i < len; ++i) {
-                        control[i] = translateValues.call(this, control[i], start);
-                    }
-                }
-                else 
-                    if (isset(attributes['points']['by'])) {
-                        end = [start[0] + attributes['points']['by'][0], start[1] + attributes['points']['by'][1]];
-                        for (i = 0, len = control.length; i < len; ++i) {
-                            control[i] = [start[0] + control[i][0], start[1] + control[i][1]];
-                        }
-                    }
-                this.runtimeAttributes[attr] = [start];
-                if (control.length > 0) {
-                    this.runtimeAttributes[attr] = this.runtimeAttributes[attr].concat(control);
-                }
-                this.runtimeAttributes[attr][this.runtimeAttributes[attr].length] = end;
-            }
-            else {
-                superclass.setRuntimeAttribute.call(this, attr);
-            }
-        };
-        var translateValues = function(val, start){
-            var pageXY = Ext.lib.Dom.getXY(this.getEl());
-            val = [val[0] - pageXY[0] + start[0], val[1] - pageXY[1] + start[1]];
-            return val;
-        };
-        var isset = function(prop){
-            return (typeof prop !== 'undefined');
-        };
-    })();
-    (function(){
-        Ext.lib.Scroll = function(el, attributes, duration, method){
-            if (el) {
-                Ext.lib.Scroll.superclass.constructor.call(this, el, attributes, duration, method);
-            }
-        };
-        Ext.extend(Ext.lib.Scroll, Ext.lib.ColorAnim);
-        var Y = Ext.lib;
-        var superclass = Y.Scroll.superclass;
-        var proto = Y.Scroll.prototype;
-        proto.toString = function(){
-            var el = this.getEl();
-            var id = el.id || el.tagName;
-            return ("Scroll " + id);
-        };
-        proto.doMethod = function(attr, start, end){
-            var val = null;
-            if (attr == 'scroll') {
-                val = [this.method(this.currentFrame, start[0], end[0] - start[0], this.totalFrames), this.method(this.currentFrame, start[1], end[1] - start[1], this.totalFrames)];
-            }
-            else {
-                val = superclass.doMethod.call(this, attr, start, end);
-            }
-            return val;
-        };
-        proto.getAttribute = function(attr){
-            var val = null;
-            var el = this.getEl();
-            if (attr == 'scroll') {
-                val = [el.scrollLeft, el.scrollTop];
-            }
-            else {
-                val = superclass.getAttribute.call(this, attr);
-            }
-            return val;
-        };
-        proto.setAttribute = function(attr, val, unit){
-            var el = this.getEl();
-            if (attr == 'scroll') {
-                el.scrollLeft = val[0];
-                el.scrollTop = val[1];
-            }
-            else {
-                superclass.setAttribute.call(this, attr, val, unit);
-            }
-        };
-    })();
-})();
+
+Ext={version:'3.0'};window["undefined"]=window["undefined"];Ext.apply=function(o,c,defaults){if(defaults){Ext.apply(o,defaults);}
+if(o&&c&&typeof c=='object'){for(var p in c){o[p]=c[p];}}
+return o;};(function(){var idSeed=0;var ua=navigator.userAgent.toLowerCase();var isStrict=document.compatMode=="CSS1Compat",isOpera=ua.indexOf("opera")>-1,isChrome=ua.indexOf("chrome")>-1,isSafari=!isChrome&&(/webkit|khtml/).test(ua),isSafari3=isSafari&&ua.indexOf('webkit/5')!=-1,isIE=!isOpera&&ua.indexOf("msie")>-1,isIE7=!isOpera&&ua.indexOf("msie 7")>-1,isIE8=!isOpera&&ua.indexOf("msie 8")>-1,isGecko=!isSafari&&!isChrome&&ua.indexOf("gecko")>-1,isGecko3=isGecko&&ua.indexOf("rv:1.9")>-1,isBorderBox=isIE&&!isStrict,isWindows=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),isMac=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),isAir=(ua.indexOf("adobeair")!=-1),isLinux=(ua.indexOf("linux")!=-1),isSecure=window.location.href.toLowerCase().indexOf("https")===0;if(isIE&&!isIE7){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}
+Ext.apply(Ext,{isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/extjs.com/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p];}}}
+return o;},addBehaviors:function(o){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(o);});return;}
+var cache={};for(var b in o){var parts=b.split('@');if(parts[1]){var s=parts[0];if(!cache[s]){cache[s]=Ext.select(s);}
+cache[s].on(parts[1],o[b]);}}
+cache=null;},id:function(el,prefix){prefix=prefix||"ext-gen";el=Ext.getDom(el);var id=prefix+(++idSeed);return el?(el.id?el.id:(el.id=id)):id;},extend:function(){var io=function(o){for(var m in o){this[m]=o[m];}};var oc=Object.prototype.constructor;return function(sb,sp,overrides){if(typeof sp=='object'){overrides=sp;sp=sb;sb=overrides.constructor!=oc?overrides.constructor:function(){sp.apply(this,arguments);};}
+var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==oc){spp.constructor=sp;}
+sb.override=function(o){Ext.override(sb,o);};sbp.superclass=sbp.supr=(function(){return spp;});sbp.override=io;Ext.override(sb,overrides);sb.extend=function(o){Ext.extend(sb,o);};return sb;};}(),extendX:function(supr,fn){return Ext.extend(supr,fn(supr.prototype));},override:function(origclass,overrides){if(overrides){var p=origclass.prototype;for(var method in overrides){p[method]=overrides[method];}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval('if (typeof '+rt+' == "undefined"){'+rt+' = {};} o = '+rt+';');for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]];}}},urlEncode:function(o){if(!o){return"";}
+var buf=[];for(var key in o){var ov=o[key],k=encodeURIComponent(key);var type=typeof ov;if(type=='undefined'){buf.push(k,"=&");}else if(type!="function"&&type!="object"){buf.push(k,"=",encodeURIComponent(ov),"&");}else if(Ext.isArray(ov)){if(ov.length){for(var i=0,len=ov.length;i<len;i++){buf.push(k,"=",encodeURIComponent(ov[i]===undefined?'':ov[i]),"&");}}else{buf.push(k,"=&");}}}
+buf.pop();return buf.join("");},urlDecode:function(string,overwrite){if(!string||!string.length){return{};}
+var obj={};var pairs=string.split('&');var pair,name,value;for(var i=0,len=pairs.length;i<len;i++){pair=pairs[i].split('=');name=decodeURIComponent(pair[0]);value=decodeURIComponent(pair[1]);if(overwrite!==true){if(typeof obj[name]=="undefined"){obj[name]=value;}else if(typeof obj[name]=="string"){obj[name]=[obj[name]];obj[name].push(value);}else{obj[name].push(value);}}else{obj[name]=value;}}
+return obj;},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array];}
+for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i;};}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(Ext.isArray(a)){r=r.concat(a);}else if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0));}else{r.push(a);}}
+return r;},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[]);}else{cb.apply(scope,args||[]);}}},getDom:function(el){if(!el||!document){return null;}
+return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getDoc:function(){return Ext.get(document);},getBody:function(){return Ext.get(document.body||document.documentElement);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'||isNaN(v)){return defaultValue;}
+return v;},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(typeof as.destroy=='function'){as.destroy();}
+else if(as.dom){as.removeAllListeners();as.remove();}}}},destroyMembers:function(o,arg1,arg2,etc){for(var i=1,a=arguments,len=a.length;i<len;i++){Ext.destroy(o[a[i]]);delete o[a[i]];}},removeNode:isIE?function(){var d;return function(n){if(n&&n.tagName!='BODY'){d=d||document.createElement('div');d.appendChild(n);d.innerHTML='';}}}():function(n){if(n&&n.parentNode&&n.tagName!='BODY'){n.parentNode.removeChild(n);}},type:function(o){if(o===undefined||o===null){return false;}
+if(o.htmlElement){return'element';}
+var t=typeof o;if(t=='object'&&o.nodeName){switch(o.nodeType){case 1:return'element';case 3:return(/\S/).test(o.nodeValue)?'textnode':'whitespace';}}
+if(t=='object'||t=='function'){switch(o.constructor){case Array:return'array';case RegExp:return'regexp';}
+if(typeof o.length=='number'&&typeof o.item=='function'){return'nodelist';}}
+return t;},isEmpty:function(v,allowBlank){return v===null||v===undefined||(!allowBlank?v==='':false);},value:function(v,defaultValue,allowBlank){return Ext.isEmpty(v,allowBlank)?defaultValue:v;},isArray:function(v){return v&&typeof v.length=='number'&&typeof v.splice=='function';},isDate:function(v){return v&&typeof v.getFullYear=='function';},copyTo:function(dest,source,names){if(typeof names=='string'){names=names.split(/[,;\s]/);}
+for(var i=0,len=names.length;i<len;i++){var n=names[i];if(source.hasOwnProperty(n)){dest[n]=source[n];}}
+return dest;},intercept:function(o,name,fn,scope){o[name]=o[name].createInterceptor(fn,scope);},sequence:function(o,name,fn,scope){o[name]=o[name].createSequence(fn,scope);},isOpera:isOpera,isChrome:isChrome,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7&&!isIE8,isIE7:isIE7,isIE8:isIE8,isGecko:isGecko,isGecko2:isGecko&&!isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isMac&&isGecko&&!isGecko3))});Ext.ns=Ext.namespace;})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux","Ext.chart","Ext.direct");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
+return method.apply(obj||window,callArgs);};},defer:function(millis,obj,args,appendArgs){var fn=this.createDelegate(obj,args,appendArgs);if(millis){return setTimeout(fn,millis);}
+fn();return 0;},createSequence:function(fcn,scope){if(typeof fcn!="function"){return this;}
+var method=this;return function(){var retval=method.apply(this||window,arguments);fcn.apply(scope||this||window,arguments);return retval;};},createInterceptor:function(fcn,scope){if(typeof fcn!="function"){return this;}
+var method=this;return function(){fcn.target=this;fcn.method=method;if(fcn.apply(scope||this||window,arguments)===false){return;}
+return method.apply(this||window,arguments);};}});Ext.applyIf(String,{escape:function(string){return string.replace(/('|\\)/g,"\\$1");},leftPad:function(val,size,ch){var result=new String(val);if(!ch){ch=" ";}
+while(result.length<size){result=ch+result;}
+return result.toString();},format:function(format){var args=Array.prototype.slice.call(arguments,1);return format.replace(/\{(\d+)\}/g,function(m,i){return args[i];});}});String.prototype.toggle=function(value,other){return this==value?other:value;};String.prototype.trim=function(){var re=/^\s+|\s+$/g;return function(){return this.replace(re,"");};}();Ext.applyIf(Number.prototype,{constrain:function(min,max){return Math.min(Math.max(this,min),max);}});Ext.applyIf(Array.prototype,{indexOf:function(o){for(var i=0,len=this.length;i<len;i++){if(this[i]==o)return i;}
+return-1;},remove:function(o){var index=this.indexOf(o);if(index!=-1){this.splice(index,1);}
+return this;}});Date.prototype.getElapsed=function(date){return Math.abs((date||new Date()).getTime()-this.getTime());};
+
+(function(){var libFlyweight;Ext.lib.Dom={getViewWidth:function(full){return full?this.getDocumentWidth():this.getViewportWidth();},getViewHeight:function(full){return full?this.getDocumentHeight():this.getViewportHeight();},getDocumentHeight:function(){var scrollHeight=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;return Math.max(scrollHeight,this.getViewportHeight());},getDocumentWidth:function(){var scrollWidth=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;return Math.max(scrollWidth,this.getViewportWidth());},getViewportHeight:function(){if(Ext.isIE){return Ext.isStrict?document.documentElement.clientHeight:document.body.clientHeight;}else{return self.innerHeight;}},getViewportWidth:function(){if(!Ext.isStrict&&!Ext.isOpera){return document.body.clientWidth;}
+else if(Ext.isIE){return document.documentElement.clientWidth;}else{return self.innerWidth;}},isAncestor:function(p,c){p=Ext.getDom(p);c=Ext.getDom(c);if(!p||!c){return false;}
+if(p.contains&&!Ext.isSafari){return p.contains(c);}else if(p.compareDocumentPosition){return!!(p.compareDocumentPosition(c)&16);}else{var parent=c.parentNode;while(parent){if(parent==p){return true;}
+else if(!parent.tagName||parent.tagName.toUpperCase()=="HTML"){return false;}
+parent=parent.parentNode;}
+return false;}},getRegion:function(el){return Ext.lib.Region.getRegion(el);},getY:function(el){return this.getXY(el)[1];},getX:function(el){return this.getXY(el)[0];},getXY:function(el){var p,pe,b,scroll,bd=(document.body||document.documentElement);el=Ext.getDom(el);if(el==bd){return[0,0];}
+if(el.getBoundingClientRect){b=el.getBoundingClientRect();scroll=fly(document).getScroll();return[b.left+scroll.left,b.top+scroll.top];}
+var x=0,y=0;p=el;var hasAbsolute=fly(el).getStyle("position")=="absolute";while(p){x+=p.offsetLeft;y+=p.offsetTop;if(!hasAbsolute&&fly(p).getStyle("position")=="absolute"){hasAbsolute=true;}
+if(Ext.isGecko){pe=fly(p);var bt=parseInt(pe.getStyle("borderTopWidth"),10)||0;var bl=parseInt(pe.getStyle("borderLeftWidth"),10)||0;x+=bl;y+=bt;if(p!=el&&pe.getStyle('overflow')!='visible'){x+=bl;y+=bt;}}
+p=p.offsetParent;}
+if(Ext.isSafari&&hasAbsolute){x-=bd.offsetLeft;y-=bd.offsetTop;}
+if(Ext.isGecko&&!hasAbsolute){var dbd=fly(bd);x+=parseInt(dbd.getStyle("borderLeftWidth"),10)||0;y+=parseInt(dbd.getStyle("borderTopWidth"),10)||0;}
+p=el.parentNode;while(p&&p!=bd){if(!Ext.isOpera||(p.tagName!='TR'&&fly(p).getStyle("display")!="inline")){x-=p.scrollLeft;y-=p.scrollTop;}
+p=p.parentNode;}
+return[x,y];},setXY:function(el,xy){el=Ext.fly(el,'_setXY');el.position();var pts=el.translatePoints(xy);if(xy[0]!==false){el.dom.style.left=pts.left+"px";}
+if(xy[1]!==false){el.dom.style.top=pts.top+"px";}},setX:function(el,x){this.setXY(el,[x,false]);},setY:function(el,y){this.setXY(el,[false,y]);}};Ext.lib.Event=function(){var loadComplete=false;var listeners=[];var unloadListeners=[];var retryCount=0;var onAvailStack=[];return{POLL_RETRYS:200,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,OBJ:3,ADJ_SCOPE:4,_interval:null,startInterval:function(){if(!this._interval){var self=this;var callback=function(){self._tryPreloadAttach();};this._interval=setInterval(callback,this.POLL_INTERVAL);}},onAvailable:function(p_id,p_fn,p_obj,p_override){onAvailStack.push({id:p_id,fn:p_fn,obj:p_obj,override:p_override,checkReady:false});retryCount=this.POLL_RETRYS;this.startInterval();},addListener:function(el,eventName,fn){el=Ext.getDom(el);if(!el||!fn){return false;}
+if("unload"==eventName){unloadListeners[unloadListeners.length]=[el,eventName,fn];return true;}
+var li=[el,eventName,fn,fn];var index=listeners.length;listeners[index]=li;this.doAdd(el,eventName,fn,false);return true;},removeListener:function(el,eventName,fn){var i,len;el=Ext.getDom(el);if(!fn){return this.purgeElement(el,false,eventName);}
+if("unload"==eventName){for(i=0,len=unloadListeners.length;i<len;i++){var li=unloadListeners[i];if(li&&li[0]==el&&li[1]==eventName&&li[2]==fn){unloadListeners.splice(i,1);return true;}}
+return false;}
+var cacheItem=null;var index=arguments[3];if("undefined"==typeof index){index=this._getCacheIndex(el,eventName,fn);}
+if(index>=0){cacheItem=listeners[index];}
+if(!el||!cacheItem){return false;}
+this.doRemove(el,eventName,cacheItem[this.WFN],false);delete listeners[index][this.WFN];delete listeners[index][this.FN];listeners.splice(index,1);return true;},getTarget:function(ev){ev=ev.browserEvent||ev;var t=ev.target||ev.srcElement;return this.resolveTextNode(t);},resolveTextNode:function(node){if(Ext.isSafari&&node&&3==node.nodeType){return node.parentNode;}else{return node;}},getPageX:function(ev){ev=ev.browserEvent||ev;var x=ev.pageX;if(!x&&0!==x){x=ev.clientX||0;if(Ext.isIE){x+=this.getScroll()[1];}}
+return x;},getPageY:function(ev){ev=ev.browserEvent||ev;var y=ev.pageY;if(!y&&0!==y){y=ev.clientY||0;if(Ext.isIE){y+=this.getScroll()[0];}}
+return y;},getXY:function(ev){ev=ev.browserEvent||ev;return[this.getPageX(ev),this.getPageY(ev)];},getRelatedTarget:function(ev){ev=ev.browserEvent||ev;var t=ev.relatedTarget;if(!t){if(ev.type=="mouseout"){t=ev.toElement;}else if(ev.type=="mouseover"){t=ev.fromElement;}}
+return this.resolveTextNode(t);},getTime:function(ev){ev=ev.browserEvent||ev;if(!ev.time){var t=new Date().getTime();try{ev.time=t;}catch(ex){return t;}}
+return ev.time;},stopEvent:function(ev){this.stopPropagation(ev);this.preventDefault(ev);},stopPropagation:function(ev){ev=ev.browserEvent||ev;if(ev.stopPropagation){ev.stopPropagation();}else{ev.cancelBubble=true;}},preventDefault:function(ev){ev=ev.browserEvent||ev;if(ev.preventDefault){ev.preventDefault();}else{ev.returnValue=false;}},getEvent:function(e){var ev=e||window.event;if(!ev){var c=this.getEvent.caller;while(c){ev=c.arguments[0];if(ev&&Event==ev.constructor){break;}
+c=c.caller;}}
+return ev;},getCharCode:function(ev){ev=ev.browserEvent||ev;return ev.charCode||ev.keyCode||0;},_getCacheIndex:function(el,eventName,fn){for(var i=0,len=listeners.length;i<len;++i){var li=listeners[i];if(li&&li[this.FN]==fn&&li[this.EL]==el&&li[this.TYPE]==eventName){return i;}}
+return-1;},elCache:{},getEl:function(id){return document.getElementById(id);},clearCache:function(){},_load:function(e){loadComplete=true;var EU=Ext.lib.Event;if(Ext.isIE){EU.doRemove(window,"load",EU._load);}},_tryPreloadAttach:function(){if(this.locked){return false;}
+this.locked=true;var tryAgain=!loadComplete;if(!tryAgain){tryAgain=(retryCount>0);}
+var notAvail=[];for(var i=0,len=onAvailStack.length;i<len;++i){var item=onAvailStack[i];if(item){var el=this.getEl(item.id);if(el){if(!item.checkReady||loadComplete||el.nextSibling||(document&&document.body)){var scope=el;if(item.override){if(item.override===true){scope=item.obj;}else{scope=item.override;}}
+item.fn.call(scope,item.obj);onAvailStack[i]=null;}}else{notAvail.push(item);}}}
+retryCount=(notAvail.length===0)?0:retryCount-1;if(tryAgain){this.startInterval();}else{clearInterval(this._interval);this._interval=null;}
+this.locked=false;return true;},purgeElement:function(el,recurse,eventName){var elListeners=this.getListeners(el,eventName);if(elListeners){for(var i=0,len=elListeners.length;i<len;++i){var l=elListeners[i];this.removeListener(el,l.type,l.fn);}}
+if(recurse&&el&&el.childNodes){for(i=0,len=el.childNodes.length;i<len;++i){this.purgeElement(el.childNodes[i],recurse,eventName);}}},getListeners:function(el,eventName){var results=[],searchLists;if(!eventName){searchLists=[listeners,unloadListeners];}else if(eventName=="unload"){searchLists=[unloadListeners];}else{searchLists=[listeners];}
+for(var j=0;j<searchLists.length;++j){var searchList=searchLists[j];if(searchList&&searchList.length>0){for(var i=0,len=searchList.length;i<len;++i){var l=searchList[i];if(l&&l[this.EL]===el&&(!eventName||eventName===l[this.TYPE])){results.push({type:l[this.TYPE],fn:l[this.FN],obj:l[this.OBJ],adjust:l[this.ADJ_SCOPE],index:i});}}}}
+return(results.length)?results:null;},_unload:function(e){var EU=Ext.lib.Event,i,j,l,len,index;for(i=0,len=unloadListeners.length;i<len;++i){l=unloadListeners[i];if(l){var scope=window;if(l[EU.ADJ_SCOPE]){if(l[EU.ADJ_SCOPE]===true){scope=l[EU.OBJ];}else{scope=l[EU.ADJ_SCOPE];}}
+l[EU.FN].call(scope,EU.getEvent(e),l[EU.OBJ]);unloadListeners[i]=null;l=null;scope=null;}}
+unloadListeners=null;if(listeners&&listeners.length>0){j=listeners.length;while(j){index=j-1;l=listeners[index];if(l){EU.removeListener(l[EU.EL],l[EU.TYPE],l[EU.FN],index);}
+j=j-1;}
+l=null;EU.clearCache();}
+EU.doRemove(window,"unload",EU._unload);},getScroll:function(){var dd=document.documentElement,db=document.body;if(dd&&(dd.scrollTop||dd.scrollLeft)){return[dd.scrollTop,dd.scrollLeft];}else if(db){return[db.scrollTop,db.scrollLeft];}else{return[0,0];}},doAdd:function(){if(window.addEventListener){return function(el,eventName,fn,capture){el.addEventListener(eventName,fn,(capture));};}else if(window.attachEvent){return function(el,eventName,fn,capture){el.attachEvent("on"+eventName,fn);};}else{return function(){};}}(),doRemove:function(){if(window.removeEventListener){return function(el,eventName,fn,capture){el.removeEventListener(eventName,fn,(capture));};}else if(window.detachEvent){return function(el,eventName,fn){el.detachEvent("on"+eventName,fn);};}else{return function(){};}}()};}();var E=Ext.lib.Event;E.on=E.addListener;E.un=E.removeListener;if(document&&document.body){E._load();}else{E.doAdd(window,"load",E._load);}
+E.doAdd(window,"unload",E._unload);E._tryPreloadAttach();Ext.lib.Ajax={request:function(method,uri,cb,data,options){if(options){var hs=options.headers;if(hs){for(var h in hs){if(hs.hasOwnProperty(h)){this.initHeader(h,hs[h],false);}}}
+if(options.xmlData){if(!hs||!hs['Content-Type']){this.initHeader('Content-Type','text/xml',false);}
+method=(method?method:(options.method?options.method:'POST'));data=options.xmlData;}else if(options.jsonData){if(!hs||!hs['Content-Type']){this.initHeader('Content-Type','application/json',false);}
+method=(method?method:(options.method?options.method:'POST'));data=typeof options.jsonData=='object'?Ext.encode(options.jsonData):options.jsonData;}}
+return this.asyncRequest(method,uri,cb,data);},serializeForm:function(form){if(typeof form=='string'){form=(document.getElementById(form)||document.forms[form]);}
+var el,name,val,disabled,data='',hasSubmit=false;for(var i=0;i<form.elements.length;i++){el=form.elements[i];disabled=form.elements[i].disabled;name=form.elements[i].name;val=form.elements[i].value;if(!disabled&&name){switch(el.type)
+{case'select-one':case'select-multiple':for(var j=0;j<el.options.length;j++){if(el.options[j].selected){if(Ext.isIE){data+=encodeURIComponent(name)+'='+encodeURIComponent(el.options[j].attributes['value'].specified?el.options[j].value:el.options[j].text)+'&';}
+else{data+=encodeURIComponent(name)+'='+encodeURIComponent(el.options[j].hasAttribute('value')?el.options[j].value:el.options[j].text)+'&';}}}
+break;case'radio':case'checkbox':if(el.checked){data+=encodeURIComponent(name)+'='+encodeURIComponent(val)+'&';}
+break;case'file':case undefined:case'reset':case'button':break;case'submit':if(!hasSubmit){data+=encodeURIComponent(name)+'='+encodeURIComponent(val)+'&';hasSubmit=true;}
+break;default:data+=encodeURIComponent(name)+'='+encodeURIComponent(val)+'&';break;}}}
+data=data.substr(0,data.length-1);return data;},headers:{},hasHeaders:false,useDefaultHeader:true,defaultPostHeader:'application/x-www-form-urlencoded; charset=UTF-8',useDefaultXhrHeader:true,defaultXhrHeader:'XMLHttpRequest',hasDefaultHeaders:true,defaultHeaders:{},poll:{},timeout:{},pollInterval:50,transactionId:0,setProgId:function(id)
+{this.activeX.unshift(id);},setDefaultPostHeader:function(b)
+{this.useDefaultHeader=b;},setDefaultXhrHeader:function(b)
+{this.useDefaultXhrHeader=b;},setPollingInterval:function(i)
+{if(typeof i=='number'&&isFinite(i)){this.pollInterval=i;}},createXhrObject:function(transactionId)
+{var obj,http;try
+{http=new XMLHttpRequest();obj={conn:http,tId:transactionId};}
+catch(e)
+{for(var i=0;i<this.activeX.length;++i){try
+{http=new ActiveXObject(this.activeX[i]);obj={conn:http,tId:transactionId};break;}
+catch(e){}}}
+finally
+{return obj;}},getConnectionObject:function()
+{var o;var tId=this.transactionId;try
+{o=this.createXhrObject(tId);if(o){this.transactionId++;}}
+catch(e){}
+finally
+{return o;}},asyncRequest:function(method,uri,callback,postData)
+{var o=this.getConnectionObject();if(!o){return null;}
+else{o.conn.open(method,uri,true);if(this.useDefaultXhrHeader){if(!this.defaultHeaders['X-Requested-With']){this.initHeader('X-Requested-With',this.defaultXhrHeader,true);}}
+if(postData&&this.useDefaultHeader&&(!this.hasHeaders||!this.headers['Content-Type'])){this.initHeader('Content-Type',this.defaultPostHeader);}
+if(this.hasDefaultHeaders||this.hasHeaders){this.setHeader(o);}
+this.handleReadyState(o,callback);o.conn.send(postData||null);return o;}},handleReadyState:function(o,callback)
+{var oConn=this;if(callback&&callback.timeout){this.timeout[o.tId]=window.setTimeout(function(){oConn.abort(o,callback,true);},callback.timeout);}
+this.poll[o.tId]=window.setInterval(function(){if(o.conn&&o.conn.readyState==4){window.clearInterval(oConn.poll[o.tId]);delete oConn.poll[o.tId];if(callback&&callback.timeout){window.clearTimeout(oConn.timeout[o.tId]);delete oConn.timeout[o.tId];}
+oConn.handleTransactionResponse(o,callback);}},this.pollInterval);},handleTransactionResponse:function(o,callback,isAbort)
+{if(!callback){this.releaseObject(o);return;}
+var httpStatus,responseObject;try
+{if(o.conn.status!==undefined&&o.conn.status!=0){httpStatus=o.conn.status;}
+else{httpStatus=13030;}}
+catch(e){httpStatus=13030;}
+if(httpStatus>=200&&httpStatus<300){responseObject=this.createResponseObject(o,callback.argument);if(callback.success){if(!callback.scope){callback.success(responseObject);}
+else{callback.success.apply(callback.scope,[responseObject]);}}}
+else{switch(httpStatus){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:responseObject=this.createExceptionObject(o.tId,callback.argument,(isAbort?isAbort:false));if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
+else{callback.failure.apply(callback.scope,[responseObject]);}}
+break;default:responseObject=this.createResponseObject(o,callback.argument);if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
+else{callback.failure.apply(callback.scope,[responseObject]);}}}}
+this.releaseObject(o);responseObject=null;},createResponseObject:function(o,callbackArg)
+{var obj={};var headerObj={};try
+{var headerStr=o.conn.getAllResponseHeaders();var header=headerStr.split('\n');for(var i=0;i<header.length;i++){var delimitPos=header[i].indexOf(':');if(delimitPos!=-1){headerObj[header[i].substring(0,delimitPos)]=header[i].substring(delimitPos+2);}}}
+catch(e){}
+obj.tId=o.tId;obj.status=o.conn.status;obj.statusText=o.conn.statusText;obj.getResponseHeader=headerObj;obj.getAllResponseHeaders=headerStr;obj.responseText=o.conn.responseText;obj.responseXML=o.conn.responseXML;if(typeof callbackArg!==undefined){obj.argument=callbackArg;}
+return obj;},createExceptionObject:function(tId,callbackArg,isAbort)
+{var COMM_CODE=0;var COMM_ERROR='communication failure';var ABORT_CODE=-1;var ABORT_ERROR='transaction aborted';var obj={};obj.tId=tId;if(isAbort){obj.status=ABORT_CODE;obj.statusText=ABORT_ERROR;}
+else{obj.status=COMM_CODE;obj.statusText=COMM_ERROR;}
+if(callbackArg){obj.argument=callbackArg;}
+return obj;},initHeader:function(label,value,isDefault)
+{var headerObj=(isDefault)?this.defaultHeaders:this.headers;if(headerObj[label]===undefined){headerObj[label]=value;}
+else{headerObj[label]=value+","+headerObj[label];}
+if(isDefault){this.hasDefaultHeaders=true;}
+else{this.hasHeaders=true;}},setHeader:function(o)
+{if(this.hasDefaultHeaders){for(var prop in this.defaultHeaders){if(this.defaultHeaders.hasOwnProperty(prop)){o.conn.setRequestHeader(prop,this.defaultHeaders[prop]);}}}
+if(this.hasHeaders){for(var prop in this.headers){if(this.headers.hasOwnProperty(prop)){o.conn.setRequestHeader(prop,this.headers[prop]);}}
+this.headers={};this.hasHeaders=false;}},resetDefaultHeaders:function(){delete this.defaultHeaders;this.defaultHeaders={};this.hasDefaultHeaders=false;},abort:function(o,callback,isTimeout)
+{if(this.isCallInProgress(o)){o.conn.abort();window.clearInterval(this.poll[o.tId]);delete this.poll[o.tId];if(isTimeout){delete this.timeout[o.tId];}
+this.handleTransactionResponse(o,callback,true);return true;}
+else{return false;}},isCallInProgress:function(o)
+{if(o.conn){return o.conn.readyState!=4&&o.conn.readyState!=0;}
+else{return false;}},releaseObject:function(o)
+{o.conn=null;o=null;},activeX:['MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP']};Ext.lib.Region=function(t,r,b,l){this.top=t;this[1]=t;this.right=r;this.bottom=b;this.left=l;this[0]=l;};Ext.lib.Region.prototype={contains:function(region){return(region.left>=this.left&&region.right<=this.right&&region.top>=this.top&&region.bottom<=this.bottom);},getArea:function(){return((this.bottom-this.top)*(this.right-this.left));},intersect:function(region){var t=Math.max(this.top,region.top);var r=Math.min(this.right,region.right);var b=Math.min(this.bottom,region.bottom);var l=Math.max(this.left,region.left);if(b>=t&&r>=l){return new Ext.lib.Region(t,r,b,l);}else{return null;}},union:function(region){var t=Math.min(this.top,region.top);var r=Math.max(this.right,region.right);var b=Math.max(this.bottom,region.bottom);var l=Math.min(this.left,region.left);return new Ext.lib.Region(t,r,b,l);},constrainTo:function(r){this.top=this.top.constrain(r.top,r.bottom);this.bottom=this.bottom.constrain(r.top,r.bottom);this.left=this.left.constrain(r.left,r.right);this.right=this.right.constrain(r.left,r.right);return this;},adjust:function(t,l,b,r){this.top+=t;this.left+=l;this.right+=r;this.bottom+=b;return this;}};Ext.lib.Region.getRegion=function(el){var p=Ext.lib.Dom.getXY(el);var t=p[1];var r=p[0]+el.offsetWidth;var b=p[1]+el.offsetHeight;var l=p[0];return new Ext.lib.Region(t,r,b,l);};Ext.lib.Point=function(x,y){if(Ext.isArray(x)){y=x[1];x=x[0];}
+this.x=this.right=this.left=this[0]=x;this.y=this.top=this.bottom=this[1]=y;};Ext.lib.Point.prototype=new Ext.lib.Region();Ext.lib.Anim={scroll:function(el,args,duration,easing,cb,scope){return this.run(el,args,duration,easing,cb,scope,Ext.lib.Scroll);},motion:function(el,args,duration,easing,cb,scope){return this.run(el,args,duration,easing,cb,scope,Ext.lib.Motion);},color:function(el,args,duration,easing,cb,scope){return this.run(el,args,duration,easing,cb,scope,Ext.lib.ColorAnim);},run:function(el,args,duration,easing,cb,scope,type){type=type||Ext.lib.AnimBase;if(typeof easing=="string"){easing=Ext.lib.Easing[easing];}
+var anim=new type(el,args,duration,easing);anim.animateX(function(){Ext.callback(cb,scope);});return anim;}};function fly(el){if(!libFlyweight){libFlyweight=new Ext.Element.Flyweight();}
+libFlyweight.dom=el;return libFlyweight;}
+if(Ext.isIE){function fnCleanUp(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;window.detachEvent("onunload",fnCleanUp);}
+window.attachEvent("onunload",fnCleanUp);}
+Ext.lib.AnimBase=function(el,attributes,duration,method){if(el){this.init(el,attributes,duration,method);}};Ext.lib.AnimBase.prototype={toString:function(){var el=this.getEl();var id=el.id||el.tagName;return("Anim "+id);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(attr,start,end){return this.method(this.currentFrame,start,end-start,this.totalFrames);},setAttribute:function(attr,val,unit){if(this.patterns.noNegatives.test(attr)){val=(val>0)?val:0;}
+Ext.fly(this.getEl(),'_anim').setStyle(attr,val+unit);},getAttribute:function(attr){var el=this.getEl();var val=fly(el).getStyle(attr);if(val!=='auto'&&!this.patterns.offsetUnit.test(val)){return parseFloat(val);}
+var a=this.patterns.offsetAttribute.exec(attr)||[];var pos=!!(a[3]);var box=!!(a[2]);if(box||(fly(el).getStyle('position')=='absolute'&&pos)){val=el['offset'+a[0].charAt(0).toUpperCase()+a[0].substr(1)];}else{val=0;}
+return val;},getDefaultUnit:function(attr){if(this.patterns.defaultUnit.test(attr)){return'px';}
+return'';},animateX:function(callback,scope){var f=function(){this.onComplete.removeListener(f);if(typeof callback=="function"){callback.call(scope||this,this);}};this.onComplete.addListener(f,this);this.animate();},setRuntimeAttribute:function(attr){var start;var end;var attributes=this.attributes;this.runtimeAttributes[attr]={};var isset=function(prop){return(typeof prop!=='undefined');};if(!isset(attributes[attr]['to'])&&!isset(attributes[attr]['by'])){return false;}
+start=(isset(attributes[attr]['from']))?attributes[attr]['from']:this.getAttribute(attr);if(isset(attributes[attr]['to'])){end=attributes[attr]['to'];}else if(isset(attributes[attr]['by'])){if(start.constructor==Array){end=[];for(var i=0,len=start.length;i<len;++i){end[i]=start[i]+attributes[attr]['by'][i];}}else{end=start+attributes[attr]['by'];}}
+this.runtimeAttributes[attr].start=start;this.runtimeAttributes[attr].end=end;this.runtimeAttributes[attr].unit=(isset(attributes[attr].unit))?attributes[attr]['unit']:this.getDefaultUnit(attr);},init:function(el,attributes,duration,method){var isAnimated=false;var startTime=null;var actualFrames=0;el=Ext.getDom(el);this.attributes=attributes||{};this.duration=duration||1;this.method=method||Ext.lib.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=Ext.lib.AnimMgr.fps;this.getEl=function(){return el;};this.isAnimated=function(){return isAnimated;};this.getStartTime=function(){return startTime;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}
+this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(Ext.lib.AnimMgr.fps*this.duration):this.duration;Ext.lib.AnimMgr.registerElement(this);};this.stop=function(finish){if(finish){this.currentFrame=this.totalFrames;this._onTween.fire();}
+Ext.lib.AnimMgr.stop(this);};var onStart=function(){this.onStart.fire();this.runtimeAttributes={};for(var attr in this.attributes){this.setRuntimeAttribute(attr);}
+isAnimated=true;actualFrames=0;startTime=new Date();};var onTween=function(){var data={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};data.toString=function(){return('duration: '+data.duration+', currentFrame: '+data.currentFrame);};this.onTween.fire(data);var runtimeAttributes=this.runtimeAttributes;for(var attr in runtimeAttributes){this.setAttribute(attr,this.doMethod(attr,runtimeAttributes[attr].start,runtimeAttributes[attr].end),runtimeAttributes[attr].unit);}
+actualFrames+=1;};var onComplete=function(){var actual_duration=(new Date()-startTime)/1000;var data={duration:actual_duration,frames:actualFrames,fps:actualFrames/actual_duration};data.toString=function(){return('duration: '+data.duration+', frames: '+data.frames+', fps: '+data.fps);};isAnimated=false;actualFrames=0;this.onComplete.fire(data);};this._onStart=new Ext.util.Event(this);this.onStart=new Ext.util.Event(this);this.onTween=new Ext.util.Event(this);this._onTween=new Ext.util.Event(this);this.onComplete=new Ext.util.Event(this);this._onComplete=new Ext.util.Event(this);this._onStart.addListener(onStart);this._onTween.addListener(onTween);this._onComplete.addListener(onComplete);}};Ext.lib.AnimMgr=new function(){var thread=null;var queue=[];var tweenCount=0;this.fps=1000;this.delay=1;this.registerElement=function(tween){queue[queue.length]=tween;tweenCount+=1;tween._onStart.fire();this.start();};this.unRegister=function(tween,index){tween._onComplete.fire();index=index||getIndex(tween);if(index!=-1){queue.splice(index,1);}
+tweenCount-=1;if(tweenCount<=0){this.stop();}};this.start=function(){if(thread===null){thread=setInterval(this.run,this.delay);}};this.stop=function(tween){if(!tween){clearInterval(thread);for(var i=0,len=queue.length;i<len;++i){if(queue[0].isAnimated()){this.unRegister(queue[0],0);}}
+queue=[];thread=null;tweenCount=0;}
+else{this.unRegister(tween);}};this.run=function(){for(var i=0,len=queue.length;i<len;++i){var tween=queue[i];if(!tween||!tween.isAnimated()){continue;}
+if(tween.currentFrame<tween.totalFrames||tween.totalFrames===null)
+{tween.currentFrame+=1;if(tween.useSeconds){correctFrame(tween);}
+tween._onTween.fire();}
+else{Ext.lib.AnimMgr.stop(tween,i);}}};var getIndex=function(anim){for(var i=0,len=queue.length;i<len;++i){if(queue[i]==anim){return i;}}
+return-1;};var correctFrame=function(tween){var frames=tween.totalFrames;var frame=tween.currentFrame;var expected=(tween.currentFrame*tween.duration*1000/tween.totalFrames);var elapsed=(new Date()-tween.getStartTime());var tweak=0;if(elapsed<tween.duration*1000){tweak=Math.round((elapsed/expected-1)*tween.currentFrame);}else{tweak=frames-(frame+1);}
+if(tweak>0&&isFinite(tweak)){if(tween.currentFrame+tweak>=frames){tweak=frames-(frame+1);}
+tween.currentFrame+=tweak;}};};Ext.lib.Bezier=new function(){this.getPosition=function(points,t){var n=points.length;var tmp=[];for(var i=0;i<n;++i){tmp[i]=[points[i][0],points[i][1]];}
+for(var j=1;j<n;++j){for(i=0;i<n-j;++i){tmp[i][0]=(1-t)*tmp[i][0]+t*tmp[parseInt(i+1,10)][0];tmp[i][1]=(1-t)*tmp[i][1]+t*tmp[parseInt(i+1,10)][1];}}
+return[tmp[0][0],tmp[0][1]];};};(function(){Ext.lib.ColorAnim=function(el,attributes,duration,method){Ext.lib.ColorAnim.superclass.constructor.call(this,el,attributes,duration,method);};Ext.extend(Ext.lib.ColorAnim,Ext.lib.AnimBase);var Y=Ext.lib;var superclass=Y.ColorAnim.superclass;var proto=Y.ColorAnim.prototype;proto.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return("ColorAnim "+id);};proto.patterns.color=/color$/i;proto.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;proto.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;proto.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;proto.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;proto.parseColor=function(s){if(s.length==3){return s;}
+var c=this.patterns.hex.exec(s);if(c&&c.length==4){return[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)];}
+c=this.patterns.rgb.exec(s);if(c&&c.length==4){return[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)];}
+c=this.patterns.hex3.exec(s);if(c&&c.length==4){return[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)];}
+return null;};proto.getAttribute=function(attr){var el=this.getEl();if(this.patterns.color.test(attr)){var val=fly(el).getStyle(attr);if(this.patterns.transparent.test(val)){var parent=el.parentNode;val=fly(parent).getStyle(attr);while(parent&&this.patterns.transparent.test(val)){parent=parent.parentNode;val=fly(parent).getStyle(attr);if(parent.tagName.toUpperCase()=='HTML'){val='#fff';}}}}else{val=superclass.getAttribute.call(this,attr);}
+return val;};proto.doMethod=function(attr,start,end){var val;if(this.patterns.color.test(attr)){val=[];for(var i=0,len=start.length;i<len;++i){val[i]=superclass.doMethod.call(this,attr,start[i],end[i]);}
+val='rgb('+Math.floor(val[0])+','+Math.floor(val[1])+','+Math.floor(val[2])+')';}
+else{val=superclass.doMethod.call(this,attr,start,end);}
+return val;};proto.setRuntimeAttribute=function(attr){superclass.setRuntimeAttribute.call(this,attr);if(this.patterns.color.test(attr)){var attributes=this.attributes;var start=this.parseColor(this.runtimeAttributes[attr].start);var end=this.parseColor(this.runtimeAttributes[attr].end);if(typeof attributes[attr]['to']==='undefined'&&typeof attributes[attr]['by']!=='undefined'){end=this.parseColor(attributes[attr].by);for(var i=0,len=start.length;i<len;++i){end[i]=start[i]+end[i];}}
+this.runtimeAttributes[attr].start=start;this.runtimeAttributes[attr].end=end;}};})();Ext.lib.Easing={easeNone:function(t,b,c,d){return c*t/d+b;},easeIn:function(t,b,c,d){return c*(t/=d)*t+b;},easeOut:function(t,b,c,d){return-c*(t/=d)*(t-2)+b;},easeBoth:function(t,b,c,d){if((t/=d/2)<1){return c/2*t*t+b;}
+return-c/2*((--t)*(t-2)-1)+b;},easeInStrong:function(t,b,c,d){return c*(t/=d)*t*t*t+b;},easeOutStrong:function(t,b,c,d){return-c*((t=t/d-1)*t*t*t-1)+b;},easeBothStrong:function(t,b,c,d){if((t/=d/2)<1){return c/2*t*t*t*t+b;}
+return-c/2*((t-=2)*t*t*t-2)+b;},elasticIn:function(t,b,c,d,a,p){if(t==0){return b;}
+if((t/=d)==1){return b+c;}
+if(!p){p=d*.3;}
+if(!a||a<Math.abs(c)){a=c;var s=p/4;}
+else{var s=p/(2*Math.PI)*Math.asin(c/a);}
+return-(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;},elasticOut:function(t,b,c,d,a,p){if(t==0){return b;}
+if((t/=d)==1){return b+c;}
+if(!p){p=d*.3;}
+if(!a||a<Math.abs(c)){a=c;var s=p/4;}
+else{var s=p/(2*Math.PI)*Math.asin(c/a);}
+return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b;},elasticBoth:function(t,b,c,d,a,p){if(t==0){return b;}
+if((t/=d/2)==2){return b+c;}
+if(!p){p=d*(.3*1.5);}
+if(!a||a<Math.abs(c)){a=c;var s=p/4;}
+else{var s=p/(2*Math.PI)*Math.asin(c/a);}
+if(t<1){return-.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;}
+return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b;},backIn:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}
+return c*(t/=d)*t*((s+1)*t-s)+b;},backOut:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}
+return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;},backBoth:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}
+if((t/=d/2)<1){return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;}
+return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b;},bounceIn:function(t,b,c,d){return c-Ext.lib.Easing.bounceOut(d-t,0,c,d)+b;},bounceOut:function(t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b;}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b;}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b;}
+return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b;},bounceBoth:function(t,b,c,d){if(t<d/2){return Ext.lib.Easing.bounceIn(t*2,0,c,d)*.5+b;}
+return Ext.lib.Easing.bounceOut(t*2-d,0,c,d)*.5+c*.5+b;}};(function(){Ext.lib.Motion=function(el,attributes,duration,method){if(el){Ext.lib.Motion.superclass.constructor.call(this,el,attributes,duration,method);}};Ext.extend(Ext.lib.Motion,Ext.lib.ColorAnim);var Y=Ext.lib;var superclass=Y.Motion.superclass;var proto=Y.Motion.prototype;proto.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return("Motion "+id);};proto.patterns.points=/^points$/i;proto.setAttribute=function(attr,val,unit){if(this.patterns.points.test(attr)){unit=unit||'px';superclass.setAttribute.call(this,'left',val[0],unit);superclass.setAttribute.call(this,'top',val[1],unit);}else{superclass.setAttribute.call(this,attr,val,unit);}};proto.getAttribute=function(attr){if(this.patterns.points.test(attr)){var val=[superclass.getAttribute.call(this,'left'),superclass.getAttribute.call(this,'top')];}else{val=superclass.getAttribute.call(this,attr);}
+return val;};proto.doMethod=function(attr,start,end){var val=null;if(this.patterns.points.test(attr)){var t=this.method(this.currentFrame,0,100,this.totalFrames)/100;val=Y.Bezier.getPosition(this.runtimeAttributes[attr],t);}else{val=superclass.doMethod.call(this,attr,start,end);}
+return val;};proto.setRuntimeAttribute=function(attr){if(this.patterns.points.test(attr)){var el=this.getEl();var attributes=this.attributes;var start;var control=attributes['points']['control']||[];var end;var i,len;if(control.length>0&&!Ext.isArray(control[0])){control=[control];}else{var tmp=[];for(i=0,len=control.length;i<len;++i){tmp[i]=control[i];}
+control=tmp;}
+Ext.fly(el,'_anim').position();if(isset(attributes['points']['from'])){Ext.lib.Dom.setXY(el,attributes['points']['from']);}
+else{Ext.lib.Dom.setXY(el,Ext.lib.Dom.getXY(el));}
+start=this.getAttribute('points');if(isset(attributes['points']['to'])){end=translateValues.call(this,attributes['points']['to'],start);var pageXY=Ext.lib.Dom.getXY(this.getEl());for(i=0,len=control.length;i<len;++i){control[i]=translateValues.call(this,control[i],start);}}else if(isset(attributes['points']['by'])){end=[start[0]+attributes['points']['by'][0],start[1]+attributes['points']['by'][1]];for(i=0,len=control.length;i<len;++i){control[i]=[start[0]+control[i][0],start[1]+control[i][1]];}}
+this.runtimeAttributes[attr]=[start];if(control.length>0){this.runtimeAttributes[attr]=this.runtimeAttributes[attr].concat(control);}
+this.runtimeAttributes[attr][this.runtimeAttributes[attr].length]=end;}
+else{superclass.setRuntimeAttribute.call(this,attr);}};var translateValues=function(val,start){var pageXY=Ext.lib.Dom.getXY(this.getEl());val=[val[0]-pageXY[0]+start[0],val[1]-pageXY[1]+start[1]];return val;};var isset=function(prop){return(typeof prop!=='undefined');};})();(function(){Ext.lib.Scroll=function(el,attributes,duration,method){if(el){Ext.lib.Scroll.superclass.constructor.call(this,el,attributes,duration,method);}};Ext.extend(Ext.lib.Scroll,Ext.lib.ColorAnim);var Y=Ext.lib;var superclass=Y.Scroll.superclass;var proto=Y.Scroll.prototype;proto.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return("Scroll "+id);};proto.doMethod=function(attr,start,end){var val=null;if(attr=='scroll'){val=[this.method(this.currentFrame,start[0],end[0]-start[0],this.totalFrames),this.method(this.currentFrame,start[1],end[1]-start[1],this.totalFrames)];}else{val=superclass.doMethod.call(this,attr,start,end);}
+return val;};proto.getAttribute=function(attr){var val=null;var el=this.getEl();if(attr=='scroll'){val=[el.scrollLeft,el.scrollTop];}else{val=superclass.getAttribute.call(this,attr);}
+return val;};proto.setAttribute=function(attr,val,unit){var el=this.getEl();if(attr=='scroll'){el.scrollLeft=val[0];el.scrollTop=val[1];}else{superclass.setAttribute.call(this,attr,val,unit);}};})();})();

Modified: mickael/trunk/ext/v3.0.0-a1/adapter/jquery/ext-jquery-adapter.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/adapter/jquery/ext-jquery-adapter.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/adapter/jquery/ext-jquery-adapter.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -23,7 +23,7 @@
 return obj;},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array];}
 for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i;};}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(Ext.isArray(a)){r=r.concat(a);}else if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0));}else{r.push(a);}}
 return r;},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[]);}else{cb.apply(scope,args||[]);}}},getDom:function(el){if(!el||!document){return null;}
-return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getDoc:function(){return Ext.get(document);},getBody:function(){return Ext.get(document.body||document.documentElement);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'){return defaultValue;}
+return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getDoc:function(){return Ext.get(document);},getBody:function(){return Ext.get(document.body||document.documentElement);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'||isNaN(v)){return defaultValue;}
 return v;},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(typeof as.destroy=='function'){as.destroy();}
 else if(as.dom){as.removeAllListeners();as.remove();}}}},destroyMembers:function(o,arg1,arg2,etc){for(var i=1,a=arguments,len=a.length;i<len;i++){Ext.destroy(o[a[i]]);delete o[a[i]];}},removeNode:isIE?function(){var d;return function(n){if(n&&n.tagName!='BODY'){d=d||document.createElement('div');d.appendChild(n);d.innerHTML='';}}}():function(n){if(n&&n.parentNode&&n.tagName!='BODY'){n.parentNode.removeChild(n);}},type:function(o){if(o===undefined||o===null){return false;}
 if(o.htmlElement){return'element';}
@@ -32,7 +32,7 @@
 if(typeof o.length=='number'&&typeof o.item=='function'){return'nodelist';}}
 return t;},isEmpty:function(v,allowBlank){return v===null||v===undefined||(!allowBlank?v==='':false);},value:function(v,defaultValue,allowBlank){return Ext.isEmpty(v,allowBlank)?defaultValue:v;},isArray:function(v){return v&&typeof v.length=='number'&&typeof v.splice=='function';},isDate:function(v){return v&&typeof v.getFullYear=='function';},copyTo:function(dest,source,names){if(typeof names=='string'){names=names.split(/[,;\s]/);}
 for(var i=0,len=names.length;i<len;i++){var n=names[i];if(source.hasOwnProperty(n)){dest[n]=source[n];}}
-return dest;},intercept:function(o,name,fn,scope){o[name]=o[name].createInterceptor(fn,scope);},sequence:function(o,name,fn,scope){o[name]=o[name].createSequence(fn,scope);},isOpera:isOpera,isChrome:isChrome,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7&&!isIE8,isIE7:isIE7,isIE8:isIE8,isGecko:isGecko,isGecko2:isGecko&&!isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isMac&&isGecko&&!isGecko3))});Ext.ns=Ext.namespace;})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux","Ext.chart");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
+return dest;},intercept:function(o,name,fn,scope){o[name]=o[name].createInterceptor(fn,scope);},sequence:function(o,name,fn,scope){o[name]=o[name].createSequence(fn,scope);},isOpera:isOpera,isChrome:isChrome,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7&&!isIE8,isIE7:isIE7,isIE8:isIE8,isGecko:isGecko,isGecko2:isGecko&&!isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isMac&&isGecko&&!isGecko3))});Ext.ns=Ext.namespace;})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux","Ext.chart","Ext.direct");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
 return method.apply(obj||window,callArgs);};},defer:function(millis,obj,args,appendArgs){var fn=this.createDelegate(obj,args,appendArgs);if(millis){return setTimeout(fn,millis);}
 fn();return 0;},createSequence:function(fcn,scope){if(typeof fcn!="function"){return this;}
 var method=this;return function(){var retval=method.apply(this||window,arguments);fcn.apply(scope||this||window,arguments);return retval;};},createInterceptor:function(fcn,scope){if(typeof fcn!="function"){return this;}

Modified: mickael/trunk/ext/v3.0.0-a1/adapter/prototype/ext-prototype-adapter.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/adapter/prototype/ext-prototype-adapter.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/adapter/prototype/ext-prototype-adapter.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -23,7 +23,7 @@
 return obj;},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array];}
 for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i;};}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(Ext.isArray(a)){r=r.concat(a);}else if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0));}else{r.push(a);}}
 return r;},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[]);}else{cb.apply(scope,args||[]);}}},getDom:function(el){if(!el||!document){return null;}
-return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getDoc:function(){return Ext.get(document);},getBody:function(){return Ext.get(document.body||document.documentElement);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'){return defaultValue;}
+return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getDoc:function(){return Ext.get(document);},getBody:function(){return Ext.get(document.body||document.documentElement);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'||isNaN(v)){return defaultValue;}
 return v;},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(typeof as.destroy=='function'){as.destroy();}
 else if(as.dom){as.removeAllListeners();as.remove();}}}},destroyMembers:function(o,arg1,arg2,etc){for(var i=1,a=arguments,len=a.length;i<len;i++){Ext.destroy(o[a[i]]);delete o[a[i]];}},removeNode:isIE?function(){var d;return function(n){if(n&&n.tagName!='BODY'){d=d||document.createElement('div');d.appendChild(n);d.innerHTML='';}}}():function(n){if(n&&n.parentNode&&n.tagName!='BODY'){n.parentNode.removeChild(n);}},type:function(o){if(o===undefined||o===null){return false;}
 if(o.htmlElement){return'element';}
@@ -32,7 +32,7 @@
 if(typeof o.length=='number'&&typeof o.item=='function'){return'nodelist';}}
 return t;},isEmpty:function(v,allowBlank){return v===null||v===undefined||(!allowBlank?v==='':false);},value:function(v,defaultValue,allowBlank){return Ext.isEmpty(v,allowBlank)?defaultValue:v;},isArray:function(v){return v&&typeof v.length=='number'&&typeof v.splice=='function';},isDate:function(v){return v&&typeof v.getFullYear=='function';},copyTo:function(dest,source,names){if(typeof names=='string'){names=names.split(/[,;\s]/);}
 for(var i=0,len=names.length;i<len;i++){var n=names[i];if(source.hasOwnProperty(n)){dest[n]=source[n];}}
-return dest;},intercept:function(o,name,fn,scope){o[name]=o[name].createInterceptor(fn,scope);},sequence:function(o,name,fn,scope){o[name]=o[name].createSequence(fn,scope);},isOpera:isOpera,isChrome:isChrome,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7&&!isIE8,isIE7:isIE7,isIE8:isIE8,isGecko:isGecko,isGecko2:isGecko&&!isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isMac&&isGecko&&!isGecko3))});Ext.ns=Ext.namespace;})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux","Ext.chart");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
+return dest;},intercept:function(o,name,fn,scope){o[name]=o[name].createInterceptor(fn,scope);},sequence:function(o,name,fn,scope){o[name]=o[name].createSequence(fn,scope);},isOpera:isOpera,isChrome:isChrome,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7&&!isIE8,isIE7:isIE7,isIE8:isIE8,isGecko:isGecko,isGecko2:isGecko&&!isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isMac&&isGecko&&!isGecko3))});Ext.ns=Ext.namespace;})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux","Ext.chart","Ext.direct");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
 return method.apply(obj||window,callArgs);};},defer:function(millis,obj,args,appendArgs){var fn=this.createDelegate(obj,args,appendArgs);if(millis){return setTimeout(fn,millis);}
 fn();return 0;},createSequence:function(fcn,scope){if(typeof fcn!="function"){return this;}
 var method=this;return function(){var retval=method.apply(this||window,arguments);fcn.apply(scope||this||window,arguments);return retval;};},createInterceptor:function(fcn,scope){if(typeof fcn!="function"){return this;}

Modified: mickael/trunk/ext/v3.0.0-a1/adapter/yui/ext-yui-adapter.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/adapter/yui/ext-yui-adapter.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/adapter/yui/ext-yui-adapter.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -23,7 +23,7 @@
 return obj;},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array];}
 for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i;};}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(Ext.isArray(a)){r=r.concat(a);}else if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0));}else{r.push(a);}}
 return r;},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[]);}else{cb.apply(scope,args||[]);}}},getDom:function(el){if(!el||!document){return null;}
-return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getDoc:function(){return Ext.get(document);},getBody:function(){return Ext.get(document.body||document.documentElement);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'){return defaultValue;}
+return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getDoc:function(){return Ext.get(document);},getBody:function(){return Ext.get(document.body||document.documentElement);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'||isNaN(v)){return defaultValue;}
 return v;},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(typeof as.destroy=='function'){as.destroy();}
 else if(as.dom){as.removeAllListeners();as.remove();}}}},destroyMembers:function(o,arg1,arg2,etc){for(var i=1,a=arguments,len=a.length;i<len;i++){Ext.destroy(o[a[i]]);delete o[a[i]];}},removeNode:isIE?function(){var d;return function(n){if(n&&n.tagName!='BODY'){d=d||document.createElement('div');d.appendChild(n);d.innerHTML='';}}}():function(n){if(n&&n.parentNode&&n.tagName!='BODY'){n.parentNode.removeChild(n);}},type:function(o){if(o===undefined||o===null){return false;}
 if(o.htmlElement){return'element';}
@@ -32,7 +32,7 @@
 if(typeof o.length=='number'&&typeof o.item=='function'){return'nodelist';}}
 return t;},isEmpty:function(v,allowBlank){return v===null||v===undefined||(!allowBlank?v==='':false);},value:function(v,defaultValue,allowBlank){return Ext.isEmpty(v,allowBlank)?defaultValue:v;},isArray:function(v){return v&&typeof v.length=='number'&&typeof v.splice=='function';},isDate:function(v){return v&&typeof v.getFullYear=='function';},copyTo:function(dest,source,names){if(typeof names=='string'){names=names.split(/[,;\s]/);}
 for(var i=0,len=names.length;i<len;i++){var n=names[i];if(source.hasOwnProperty(n)){dest[n]=source[n];}}
-return dest;},intercept:function(o,name,fn,scope){o[name]=o[name].createInterceptor(fn,scope);},sequence:function(o,name,fn,scope){o[name]=o[name].createSequence(fn,scope);},isOpera:isOpera,isChrome:isChrome,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7&&!isIE8,isIE7:isIE7,isIE8:isIE8,isGecko:isGecko,isGecko2:isGecko&&!isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isMac&&isGecko&&!isGecko3))});Ext.ns=Ext.namespace;})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux","Ext.chart");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
+return dest;},intercept:function(o,name,fn,scope){o[name]=o[name].createInterceptor(fn,scope);},sequence:function(o,name,fn,scope){o[name]=o[name].createSequence(fn,scope);},isOpera:isOpera,isChrome:isChrome,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7&&!isIE8,isIE7:isIE7,isIE8:isIE8,isGecko:isGecko,isGecko2:isGecko&&!isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isMac&&isGecko&&!isGecko3))});Ext.ns=Ext.namespace;})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux","Ext.chart","Ext.direct");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
 return method.apply(obj||window,callArgs);};},defer:function(millis,obj,args,appendArgs){var fn=this.createDelegate(obj,args,appendArgs);if(millis){return setTimeout(fn,millis);}
 fn();return 0;},createSequence:function(fcn,scope){if(typeof fcn!="function"){return this;}
 var method=this;return function(){var retval=method.apply(this||window,arguments);fcn.apply(scope||this||window,arguments);return retval;};},createInterceptor:function(fcn,scope){if(typeof fcn!="function"){return this;}

Modified: mickael/trunk/ext/v3.0.0-a1/build/core/Ext-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/core/Ext-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/core/Ext-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -23,7 +23,7 @@
 return obj;},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array];}
 for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i;};}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(Ext.isArray(a)){r=r.concat(a);}else if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0));}else{r.push(a);}}
 return r;},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[]);}else{cb.apply(scope,args||[]);}}},getDom:function(el){if(!el||!document){return null;}
-return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getDoc:function(){return Ext.get(document);},getBody:function(){return Ext.get(document.body||document.documentElement);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'){return defaultValue;}
+return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getDoc:function(){return Ext.get(document);},getBody:function(){return Ext.get(document.body||document.documentElement);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'||isNaN(v)){return defaultValue;}
 return v;},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(typeof as.destroy=='function'){as.destroy();}
 else if(as.dom){as.removeAllListeners();as.remove();}}}},destroyMembers:function(o,arg1,arg2,etc){for(var i=1,a=arguments,len=a.length;i<len;i++){Ext.destroy(o[a[i]]);delete o[a[i]];}},removeNode:isIE?function(){var d;return function(n){if(n&&n.tagName!='BODY'){d=d||document.createElement('div');d.appendChild(n);d.innerHTML='';}}}():function(n){if(n&&n.parentNode&&n.tagName!='BODY'){n.parentNode.removeChild(n);}},type:function(o){if(o===undefined||o===null){return false;}
 if(o.htmlElement){return'element';}
@@ -32,7 +32,7 @@
 if(typeof o.length=='number'&&typeof o.item=='function'){return'nodelist';}}
 return t;},isEmpty:function(v,allowBlank){return v===null||v===undefined||(!allowBlank?v==='':false);},value:function(v,defaultValue,allowBlank){return Ext.isEmpty(v,allowBlank)?defaultValue:v;},isArray:function(v){return v&&typeof v.length=='number'&&typeof v.splice=='function';},isDate:function(v){return v&&typeof v.getFullYear=='function';},copyTo:function(dest,source,names){if(typeof names=='string'){names=names.split(/[,;\s]/);}
 for(var i=0,len=names.length;i<len;i++){var n=names[i];if(source.hasOwnProperty(n)){dest[n]=source[n];}}
-return dest;},intercept:function(o,name,fn,scope){o[name]=o[name].createInterceptor(fn,scope);},sequence:function(o,name,fn,scope){o[name]=o[name].createSequence(fn,scope);},isOpera:isOpera,isChrome:isChrome,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7&&!isIE8,isIE7:isIE7,isIE8:isIE8,isGecko:isGecko,isGecko2:isGecko&&!isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isMac&&isGecko&&!isGecko3))});Ext.ns=Ext.namespace;})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux","Ext.chart");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
+return dest;},intercept:function(o,name,fn,scope){o[name]=o[name].createInterceptor(fn,scope);},sequence:function(o,name,fn,scope){o[name]=o[name].createSequence(fn,scope);},isOpera:isOpera,isChrome:isChrome,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7&&!isIE8,isIE7:isIE7,isIE8:isIE8,isGecko:isGecko,isGecko2:isGecko&&!isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isMac&&isGecko&&!isGecko3))});Ext.ns=Ext.namespace;})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux","Ext.chart","Ext.direct");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
 return method.apply(obj||window,callArgs);};},defer:function(millis,obj,args,appendArgs){var fn=this.createDelegate(obj,args,appendArgs);if(millis){return setTimeout(fn,millis);}
 fn();return 0;},createSequence:function(fcn,scope){if(typeof fcn!="function"){return this;}
 var method=this;return function(){var retval=method.apply(this||window,arguments);fcn.apply(scope||this||window,arguments);return retval;};},createInterceptor:function(fcn,scope){if(typeof fcn!="function"){return this;}

Modified: mickael/trunk/ext/v3.0.0-a1/build/data/Direct-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/data/Direct-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/data/Direct-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -7,7 +7,7 @@
  */
 
 
-(function(){var transactions={},TID=0,impl,d,pollStartTimer=0,callBuffer=[],callTask,providers={};var get=function(id){return transactions[id]||{};}
+(function(){var transactions={},TID=0,impl,d,pollStartTimer=0,callBuffer=[],callTask;var get=function(id){return transactions[id]||{};}
 var createEvent=function(t,data,xhr,success,hs){return Ext.apply(t||{},{xhr:xhr,success:success,data:data,arg:hs});}
 var doCallback=function(data,t,success,xhr){var fn=success?'success':'failure';if(t&&t.cb){var hs=t.cb;var e=createEvent(t,data,xhr,success,hs);if(typeof hs=='function'){delete e.arg;hs(data,e);}else{Ext.callback(hs[fn],hs.scope,[data,e]);Ext.callback(hs.callback,hs.scope,[data,e]);}}}
 var handleEvent=function(data,xhr){if(!data){return;}
@@ -16,7 +16,8 @@
 if(data.where&&d.enableDebug){Ext.Msg.maxWidth=800;Ext.Msg.show({title:'Exception occurred while making a remote call to the server',msg:'Stack trace from the server:',buttons:Ext.MessageBox.OK,multiline:400,width:800,value:data.message+'\n'+data.where});}
 break;}}
 var handleException=function(opt,xhr,type){var t=get(opt.tid);if(t){t.xhr=xhr;t.type=type||d.exceptions.TRANSPORT;doCallback(null,t,false,xhr);d.fireEvent('exception',t);delete transactions[opt.tid];}else{d.fireEvent('exception',{tid:opt.tid,xhr:xhr,code:type||d.exceptions.TRANSPORT});}}
-var cb=function(opt,success,xhr){if(success){var data=null;if(!Ext.isEmpty(xhr.responseText)){if(typeof xhr.responseText=='object'){data=xhr.responseText;}else{try{data=Ext.decode(xhr.responseText);}catch(e){return handleException(opt,xhr,d.exceptions.PARSE);}}
+var cb=function(opt,success,xhr){if(opt&&opt.poll){Ext.Direct.fireEvent('poll',xhr,success);}
+if(success){var data=null;if(!Ext.isEmpty(xhr.responseText)){try{data=Ext.decode(xhr.responseText);}catch(e){return handleException(opt,xhr,d.exceptions.PARSE);}
 if(Ext.isArray(data)){for(var i=0,len=data.length;i<len;i++){handleEvent(data[i],xhr);}}else{handleEvent(data,xhr);}}else if(opt.ts){for(var j=0,len=opt.ts.length;j<len;j++){doCallback(null,transactions[opt.ts[j].tid],true,xhr);}}}else{handleException(opt,xhr);}}
 var doSend=function(data){if(d.enableUrlEncode){var params={};params[typeof d.enableUrlEncode=='string'?d.enableUrlEncode:'data']=Ext.encode(data);Ext.Ajax.request({url:d.remoteUrl,params:params,callback:cb,ts:data});}else{Ext.Ajax.request({url:d.remoteUrl,jsonData:data,callback:cb,ts:data});}}
 var combineAndSend=function(){var len=callBuffer.length;if(len>0){doSend(len==1?callBuffer[0]:callBuffer);callBuffer=[];}}
@@ -28,9 +29,5 @@
 Ext.Ajax.request({url:d.remoteUrl,params:params,callback:cb,form:form,isUpload:isUpload,ts:{action:c,method:m.name,tid:t.tid,data:null}});}
 var createMethod=function(c,m){var f;if(!m.formHandler){f=function(){doCall(c,m,Array.prototype.slice.call(arguments,0));};}else{f=function(form,callback,scope){doForm(c,m,form,callback,scope);};}
 f.directCfg={action:c,method:m};return f;}
-var onProviderData=function(p,e){switch(e.format){case'string':cb({},true,{responseText:e.data});break;default:cb({},true,e.data);}}
-var onProviderException=function(p,e){handleException({},e.data,e.type);}
-impl=Ext.extend(Ext.util.Observable,{exceptions:{TRANSPORT:'xhr',PARSE:'parse',LOGIN:'login',SERVER:'exception'},constructor:function(){impl.superclass.constructor.call(this);this.addEvents('beforecall','call','beforeevent','event','exception');},defineAPI:function(data){d.remoteUrl=data.url;var o=data.actions||data.cls;for(var c in o){var cls=window[c]||(window[c]={});var ms=o[c];for(var i=0,len=ms.length;i<len;i++){var m=ms[i];cls[m.name]=createMethod(c,m);}}},inject:function(stringData,opt){cb(opt||{},true,{responseText:stringData});},injectRaw:function(opt,success,xhr){cb(opt,success,xhr);},injectTransaction:function(callback){var t={tid:++TID,action:c,method:m,cb:callback};transactions[t.tid]=t;return t;},addProvider:function(provider){if(!provider.events){provider=new d.PROVIDERS[provider.type](provider);}
-if(!provider.isConnected()){provider.connect();}
-provider.id=provider.id||Ext.id;providers[provider.id]=provider;provider.on('data',onProviderData);provider.on('exception',onProviderException);return provider;},getProvider:function(id){return providers[id];},removeProvider:function(id){var provider=id.id?id:providers[id.id];provider.un('data',onProviderData);provider.un('exception',onProviderException);delete providers[provider.id];return provider;},enableBuffer:10});Ext.Direct=d=new impl();d.PROVIDERS={};var reconnId=0;var retryId=0;var clear=function(){clearTimeout(reconnId);clearTimeout(retryId);}
+impl=Ext.extend(Ext.util.Observable,{exceptions:{TRANSPORT:'xhr',PARSE:'parse',LOGIN:'login',SERVER:'exception'},constructor:function(){impl.superclass.constructor.call(this);this.addEvents('beforecall','call','beforeevent','event','exception','connect','disconnect','pollstart','pollstop');},defineAPI:function(data){d.remoteUrl=data.url;var o=data.actions||data.cls;for(var c in o){var cls=window[c]||(window[c]={});var ms=o[c];for(var i=0,len=ms.length;i<len;i++){var m=ms[i];cls[m.name]=createMethod(c,m);}}},startPoll:function(){clearTimeout(pollStartTimer);if(!this.poller){this.poller=Ext.TaskMgr.start({run:function(){if(Ext.Direct.fireEvent('beforepoll')!==false){Ext.Ajax.request({url:d.remoteUrl+d.pollUrlFragment,callback:cb,poll:true});}},interval:this.pollInterval,scope:this});Ext.Direct.fireEvent('startpolling');}},stopPoll:function(){clearTimeout(pollStartTimer);if(this.poller){Ext.TaskMgr.stop(this.poller);delete this.poller;Ext.Direct.fireEvent('stoppolling');}},inject:function(stringData,opt){cb(opt||{},true,{responseText:stringData});},injectTransaction:function(callback){var t={tid:++TID,action:c,method:m,cb:callback};transactions[t.tid]=t;return t;},startStreaming:function(startKeepAlive){pollStartTimer=this.startPoll.defer(10000,this);if(startKeepAlive===true){this.startKeepAlive();}},startKeepAlive:function(){(function(){this.keepAlive=Ext.TaskMgr.start({run:function(){Ext.Ajax.request({url:d.remoteUrl+d.pingUrlFragment,callback:cb});var flash;if(d.Flash&&(flash=d.Flash.getFlash())){try{flash.send('ping');}catch(e){try{flash.reconnect();}catch(e){}}}},interval:this.keepAliveInterval,scope:this});}).defer(100,this);},autoReconnect:true,pollInterval:3000,keepAliveInterval:60000,pollUrlFragment:'/poll',pingUrlFragment:'/ping',enableBuffer:10});Ext.Direct=d=new impl();var reconnId=0;var retryId=0;var clear=function(){clearTimeout(reconnId);clearTimeout(retryId);}
 d.Flash={onData:function(strData){setTimeout(function(){d.inject(strData);},10);},onConnect:function(success){if(success){clear();d.stopPoll();d.fireEvent('connect');}else{d.startPoll();if(d.autoReconnect){d.Flash.reconnect();}}},getFlash:function(){return Ext.isIE?window.xflashDirect:document.xflashDirect;},reconnect:function(){clear();var flash=d.Flash.getFlash();if(flash){reconnId=setTimeout(function(){flash.reconnect();},1000);retryId=setInterval(function(){flash.reconnect();},30000);}},onClose:function(){d.fireEvent('disconnect');d.startPoll();if(d.autoReconnect){d.Flash.reconnect();}}};})();
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/data/DirectProxy-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/data/DirectProxy-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/data/DirectProxy-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -9,6 +9,6 @@
 
 Ext.data.DirectProxy=function(config){Ext.apply(this,config);if(typeof this.paramOrder=='string'){this.paramOrder=this.paramOrder.split(/[\s,|]/);}
 Ext.data.DirectProxy.superclass.constructor.call(this);};Ext.extend(Ext.data.DirectProxy,Ext.data.DataProxy,{paramOrder:undefined,paramsAsHash:true,directFn:undefined,load:function(params,reader,cb,scope,arg){if(this.fireEvent("beforeload",this,params)!==false){var args=[];if(this.paramOrder){for(var i=0,len=this.paramOrder.length;i<len;i++){args.push(params[this.paramOrder[i]]);}}else if(this.paramsAsHash){args.push(params);}
-args.push({callback:function(result,e){if(!e.success){this.fireEvent("loadexception",this,e,result);cb.call(scope,null,arg,false);return;}
+args.push({callback:function(result,e){if(!e.status){this.fireEvent("loadexception",this,e,result);cb.call(scope,null,arg,false);return;}
 var rs;try{rs=reader.readRecords(result);}catch(ex){this.fireEvent("loadexception",this,e,result,ex);cb.call(scope,null,arg,false);return;}
 this.fireEvent("load",this,e,arg);cb.call(scope,rs,arg,true);},scope:this});this.directFn.apply(window,args);}else{cb.call(scope||this,null,arg,false);}}});
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/util/Date-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/util/Date-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/util/Date-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -7,20 +7,21 @@
  */
 
 
-(function(){Date.formatCodeToRegex=function(character,currentGroup){var p=Date.parseCodes[character];if(p){p=Ext.type(p)=='function'?p():p;Date.parseCodes[character]=p;}
-return p?Ext.applyIf({c:p.c?String.format(p.c,currentGroup||"{0}"):p.c},p):{g:0,c:null,s:Ext.escapeRe(character)}}
+(function(){function xf(format){var args=Array.prototype.slice.call(arguments,1);return format.replace(/\{(\d+)\}/g,function(m,i){return args[i];});}
+Date.formatCodeToRegex=function(character,currentGroup){var p=Date.parseCodes[character];if(p){p=Ext.type(p)=='function'?p():p;Date.parseCodes[character]=p;}
+return p?Ext.applyIf({c:p.c?xf(p.c,currentGroup||"{0}"):p.c},p):{g:0,c:null,s:Ext.escapeRe(character)}}
 var $f=Date.formatCodeToRegex;Ext.apply(Date,{parseFunctions:{count:0},parseRegexes:[],formatFunctions:{count:0},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],y2kYear:50,MILLI:"ms",SECOND:"s",MINUTE:"mi",HOUR:"h",DAY:"d",MONTH:"mo",YEAR:"y",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNumbers:{Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11},getShortMonthName:function(month){return Date.monthNames[month].substring(0,3);},getShortDayName:function(day){return Date.dayNames[day].substring(0,3);},getMonthNumber:function(name){return Date.monthNumbers[name.substring(0,1).toUpperCase()+name.substring(1,3).toLowerCase()];},formatCodes:{d:"String.leftPad(this.getDate(), 2, '0')",D:"Date.getShortDayName(this.getDay())",j:"this.getDate()",l:"Date.dayNames[this.getDay()]",N:"(this.getDay() ? this.getDay() : 7)",S:"this.getSuffix()",w:"this.getDay()",z:"this.getDayOfYear()",W:"String.leftPad(this.getWeekOfYear(), 2, '0')",F:"Date.monthNames[this.getMonth()]",m:"String.leftPad(this.getMonth() + 1, 2, '0')",M:"Date.getShortMonthName(this.getMonth())",n:"(this.getMonth() + 1)",t:"this.getDaysInMonth()",L:"(this.isLeapYear() ? 1 : 0)",o:"(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"this.getFullYear()",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"String.leftPad(this.getHours(), 2, '0')",i:"String.leftPad(this.getMinutes(), 2, '0')",s:"String.leftPad(this.getSeconds(), 2, '0')",u:"String.leftPad(this.getMilliseconds(), 3, '0')",O:"this.getGMTOffset()",P:"this.getGMTOffset(true)",T:"this.getTimezone()",Z:"(this.getTimezoneOffset() * -60)",c:function(){for(var c="Y-m-dTH:i:sP",code=[],i=0,l=c.length;i<l;++i){var e=c.charAt(i);code.push(e=="T"?"'T'":Date.getFormatCode(e));}
 return code.join(" + ");},U:"Math.round(this.getTime() / 1000)"},parseDate:function(input,format){var p=Date.parseFunctions;if(p[format]==null){Date.createParser(format);}
 var func=p[format];return Date[func](input);},getFormatCode:function(character){var f=Date.formatCodes[character];if(f){f=Ext.type(f)=='function'?f():f;Date.formatCodes[character]=f;}
 return f||("'"+String.escape(character)+"'");},createNewFormat:function(format){var funcName="format"+Date.formatFunctions.count++,code="Date.prototype."+funcName+" = function(){return ",special=false,ch='';Date.formatFunctions[format]=funcName;for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
 else if(special){special=false;code+="'"+String.escape(ch)+"' + ";}
 else{code+=Date.getFormatCode(ch)+" + ";}}
-eval(code.substring(0,code.length-3)+";}");},createParser:function(format){var funcName="parse"+Date.parseFunctions.count++,regexNum=Date.parseRegexes.length,currentGroup=1,code=["Date."+funcName+" = function(input){","var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;","input = String(input);","d = new Date();","y = d.getFullYear();","m = d.getMonth();","d = d.getDate();","var results = input.match(Date.parseRegexes["+regexNum+"]);","if (results && results.length > 0) {\n"].join('\n'),regex="",special=false,ch='';Date.parseFunctions[format]=funcName;for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
+eval(code.substring(0,code.length-3)+";}");},createParser:function(){var code=["Date.{0} = function(input){","var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;","input = String(input);","d = new Date();","y = d.getFullYear();","m = d.getMonth();","d = d.getDate();","var results = input.match(Date.parseRegexes[{1}]);","if(results && results.length > 0){","{2}","if(u){","v = new Date(u * 1000);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){","v = new Date(y, m, d, h, i, s, ms);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){","v = new Date(y, m, d, h, i, s);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){","v = new Date(y, m, d, h, i);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){","v = new Date(y, m, d, h);","}else if (y >= 0 && m >= 0 && d > 0){","v = new Date(y, m, d);","}else if (y >= 0 && m >= 0){","v = new Date(y, m);","}else if (y >= 0){","v = new Date(y);","}","}","return (v && (z != null || o != null))?"
++" (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :"
++" v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;","}"].join('\n');return function(format){var funcName="parse"+Date.parseFunctions.count++,regexNum=Date.parseRegexes.length,currentGroup=1,calc="",regex="",special=false,ch="";Date.parseFunctions[format]=funcName;for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
 else if(special){special=false;regex+=String.escape(ch);}
-else{var obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}
-code+=["if (u){","v = new Date(u * 1000);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){","v = new Date(y, m, d, h, i, s, ms);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){","v = new Date(y, m, d, h, i, s);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){","v = new Date(y, m, d, h, i);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){","v = new Date(y, m, d, h);","}else if (y >= 0 && m >= 0 && d > 0){","v = new Date(y, m, d);","}else if (y >= 0 && m >= 0){","v = new Date(y, m);","}else if (y >= 0){","v = new Date(y);","}","}","return (v && (z != null || o != null))?"
-+" (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :"
-+" v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;","}"].join('\n');Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$","i");eval(code);},parseCodes:{d:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},j:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},D:function(){for(var a=[],i=0;i<7;a.push(Date.getShortDayName(i)),++i);return{g:0,c:null,s:"(?:"+a.join("|")+")"}},l:function(){return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"}},N:{g:0,c:null,s:"[1-7]"},S:{g:0,c:null,s:"(?:st|nd|rd|th)"},w:{g:0,c:null,s:"[0-6]"},z:{g:0,c:null,s:"(?:\\d{1,3}"},W:{g:0,c:null,s:"(?:\\d{2})"},F:function(){return{g:1,c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n",s:"("+Date.monthNames.join("|")+")"}},M:function(){for(var a=[],i=0;i<12;a.push(Date.getShortMonthName(i)),++i);return Ext.applyIf({s:"("+a.join("|")+")"},$f("F"));},m:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{2})"},n:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{1,2})"},t:{g:0,c:null,s:"(?:\\d{2})"},L:{g:0,c:null,s:"(?:1|0)"},o:function(){return $f("Y");},Y:{g:1,c:"y = parseInt(results[{0}], 10);\n",s:"(\\d{4})"},y:{g:1,c:"var ty = parseInt(results[{0}], 10);\n"
+else{var obj=$f(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){calc+=obj.c;}}}
+Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$","i");eval(xf(code,funcName,regexNum,calc));}}(),parseCodes:{d:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},j:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},D:function(){for(var a=[],i=0;i<7;a.push(Date.getShortDayName(i)),++i);return{g:0,c:null,s:"(?:"+a.join("|")+")"}},l:function(){return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"}},N:{g:0,c:null,s:"[1-7]"},S:{g:0,c:null,s:"(?:st|nd|rd|th)"},w:{g:0,c:null,s:"[0-6]"},z:{g:0,c:null,s:"(?:\\d{1,3})"},W:{g:0,c:null,s:"(?:\\d{2})"},F:function(){return{g:1,c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n",s:"("+Date.monthNames.join("|")+")"}},M:function(){for(var a=[],i=0;i<12;a.push(Date.getShortMonthName(i)),++i);return Ext.applyIf({s:"("+a.join("|")+")"},$f("F"));},m:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{2})"},n:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{1,2})"},t:{g:0,c:null,s:"(?:\\d{2})"},L:{g:0,c:null,s:"(?:1|0)"},o:function(){return $f("Y");},Y:{g:1,c:"y = parseInt(results[{0}], 10);\n",s:"(\\d{4})"},y:{g:1,c:"var ty = parseInt(results[{0}], 10);\n"
 +"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:{g:1,c:"if (results[{0}] == 'am') {\n"
 +"if (h == 12) { h = 0; }\n"
 +"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"},A:{g:1,c:"if (results[{0}] == 'AM') {\n"

Modified: mickael/trunk/ext/v3.0.0-a1/build/util/History-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/util/History-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/util/History-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -13,7 +13,7 @@
 function updateIFrame(token){var html=['<html><body><div id="state">',token,'</div></body></html>'].join('');try{var doc=iframe.contentWindow.document;doc.open();doc.write(html);doc.close();return true;}catch(e){return false;}}
 function checkIFrame(){if(!iframe.contentWindow||!iframe.contentWindow.document){setTimeout(checkIFrame,10);return;}
 var doc=iframe.contentWindow.document;var elem=doc.getElementById("state");var token=elem?elem.innerText:null;var hash=getHash();setInterval(function(){doc=iframe.contentWindow.document;elem=doc.getElementById("state");var newtoken=elem?elem.innerText:null;var newHash=getHash();if(newtoken!==token){token=newtoken;handleStateChange(token);top.location.hash=token;hash=token;doSave();}else if(newHash!==hash){hash=newHash;updateIFrame(newHash);}},50);ready=true;Ext.History.fireEvent('ready',Ext.History);}
-function startUp(){currentToken=hiddenField.value;if(Ext.isIE){checkIFrame();}else{var hash=getHash();setInterval(function(){var newHash=getHash();if(newHash!==hash){hash=newHash;handleStateChange(hash);doSave();}},50);ready=true;Ext.History.fireEvent('ready',Ext.History);}}
+function startUp(){currentToken=hiddenField.value?hiddenField.value:getHash();if(Ext.isIE){checkIFrame();}else{var hash=getHash();setInterval(function(){var newHash=getHash();if(newHash!==hash){hash=newHash;handleStateChange(hash);doSave();}},50);ready=true;Ext.History.fireEvent('ready',Ext.History);}}
 return{fieldId:'x-history-field',iframeId:'x-history-frame',events:{},init:function(onReady,scope){if(ready){Ext.callback(onReady,scope,[this]);return;}
 if(!Ext.isReady){Ext.onReady(function(){Ext.History.init(onReady,scope);});return;}
 hiddenField=Ext.getDom(Ext.History.fieldId);if(Ext.isIE){iframe=Ext.getDom(Ext.History.iframeId);}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/Editor-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/Editor-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Editor-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -7,7 +7,9 @@
  */
 
 
-Ext.Editor=function(field,config){this.field=field;Ext.Editor.superclass.constructor.call(this,config);};Ext.extend(Ext.Editor,Ext.Component,{value:"",alignment:"c-c?",shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:false,cancelOnEsc:false,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey");},onRender:function(ct,position){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:ct,shim:this.shim,shadowOffset:4,id:this.id,constrain:this.constrain});this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!='title'){this.field.msgTarget='qtip';}
+Ext.Editor=function(field,config){if(field.field){this.field=Ext.create(field.field,'textfield');config=Ext.apply({},field);delete config.field;}else{this.field=field;}
+Ext.Editor.superclass.constructor.call(this,config);};Ext.extend(Ext.Editor,Ext.Component,{value:"",alignment:"c-c?",shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:false,cancelOnEsc:false,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey");},onRender:function(ct,position){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:ct,shim:this.shim,shadowOffset:this.shadowOffset||4,id:this.id,constrain:this.constrain});if(this.zIndex){this.el.setZIndex(this.zIndex);}
+this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!='title'){this.field.msgTarget='qtip';}
 this.field.inEditor=true;this.field.render(this.el);if(Ext.isGecko){this.field.el.dom.setAttribute('autocomplete','off');}
 this.field.on("specialkey",this.onSpecialKey,this);if(this.swallowKeys){this.field.el.swallowEvent(['keydown','keypress']);}
 this.field.show();this.field.on("blur",this.onBlur,this);if(this.field.grow){this.field.on("autosize",this.el.sync,this.el,{delay:1});}},onSpecialKey:function(field,e){var key=e.getKey();if(this.completeOnEnter&&key==e.ENTER){e.stopEvent();this.completeEdit();}else if(this.cancelOnEsc&&key==e.ESC){this.cancelEdit();}else{this.fireEvent('specialkey',field,e);}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/Panel-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/Panel-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Panel-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -36,7 +36,7 @@
 if(this.tools){var ts=this.tools;this.tools={};this.addTool.apply(this,ts);}else{this.tools={};}
 if(this.buttons&&this.buttons.length>0){this.fbar=new Ext.Toolbar({items:this.buttons,toolbarCls:'x-panel-fbar'});}
 if(this.fbar){this.fbar=Ext.create(this.fbar,'toolbar');if(this.fbar.items){this.fbar.items.each(function(c){c.minWidth=this.minButtonWidth;},this);}
-this.fbar.toolbarCls='x-panel-fbar';var bct=this.footer.createChild({cls:'x-panel-btns x-panel-btns-'+this.buttonAlign});this.fbar.render(bct);bct.createChild({cls:'x-clear'});}
+this.fbar.toolbarCls='x-panel-fbar';var bct=this.footer.createChild({cls:'x-panel-btns x-panel-btns-'+this.buttonAlign});this.fbar.ownerCt=this;this.fbar.render(bct);bct.createChild({cls:'x-clear'});}
 if(this.tbar&&this.topToolbar){if(Ext.isArray(this.topToolbar)){this.topToolbar=new Ext.Toolbar(this.topToolbar);}else if(!this.topToolbar.events){this.topToolbar=Ext.create(this.topToolbar,'toolbar');}
 this.topToolbar.ownerCt=this;this.topToolbar.render(this.tbar);}
 if(this.bbar&&this.bottomToolbar){if(Ext.isArray(this.bottomToolbar)){this.bottomToolbar=new Ext.Toolbar(this.bottomToolbar);}else if(!this.bottomToolbar.events){this.bottomToolbar=Ext.create(this.bottomToolbar,'toolbar');}
@@ -47,7 +47,9 @@
 for(var i=0,a=arguments,len=a.length;i<len;i++){var tc=a[i];if(!this.tools[tc.id]){var overCls='x-tool-'+tc.id+'-over';var t=this.toolTemplate.insertFirst((tc.align!=='left')?this[this.toolTarget]:this[this.toolTarget].child('span'),tc,true);this.tools[tc.id]=t;t.enableDisplayMode('block');t.on('click',this.createToolHandler(t,tc,overCls,this));if(tc.on){t.on(tc.on);}
 if(tc.hidden){t.hide();}
 if(tc.qtip){if(typeof tc.qtip=='object'){Ext.QuickTips.register(Ext.apply({target:t.id},tc.qtip));}else{t.dom.qtip=tc.qtip;}}
-t.addClassOnOver(overCls);}}},onShow:function(){if(this.floating){return this.el.show();}
+t.addClassOnOver(overCls);}}},doLayout:function(shallow){Ext.Panel.superclass.doLayout.call(this,shallow);if(this.topToolbar){this.topToolbar.doLayout();}
+if(this.bottomToolbar){this.bottomToolbar.doLayout();}
+if(this.fbar){this.fbar.doLayout();}},onShow:function(){if(this.floating){return this.el.show();}
 Ext.Panel.superclass.onShow.call(this);},onHide:function(){if(this.floating){return this.el.hide();}
 Ext.Panel.superclass.onHide.call(this);},createToolHandler:function(t,tc,overCls,panel){return function(e){t.removeClass(overCls);e.stopEvent();if(tc.handler){tc.handler.call(tc.scope||t,e,t,panel);}};},afterRender:function(){if(this.floating&&!this.hidden&&!this.initHidden){this.el.show();}
 if(this.title){this.setTitle(this.title);}
@@ -62,10 +64,11 @@
 var doAnim=animate===true||(animate!==false&&this.animCollapse);this.beforeEffect();this.onCollapse(doAnim,animate);return this;},onCollapse:function(doAnim,animArg){if(doAnim){this[this.collapseEl].slideOut(this.slideAnchor,Ext.apply(this.createEffect(animArg||true,this.afterCollapse,this),this.collapseDefaults));}else{this[this.collapseEl].hide();this.afterCollapse();}},afterCollapse:function(){this.collapsed=true;this.el.addClass(this.collapsedCls);this.afterEffect();this.fireEvent('collapse',this);},expand:function(animate){if(!this.collapsed||this.el.hasFxBlock()||this.fireEvent('beforeexpand',this,animate)===false){return;}
 var doAnim=animate===true||(animate!==false&&this.animCollapse);this.el.removeClass(this.collapsedCls);this.beforeEffect();this.onExpand(doAnim,animate);return this;},onExpand:function(doAnim,animArg){if(doAnim){this[this.collapseEl].slideIn(this.slideAnchor,Ext.apply(this.createEffect(animArg||true,this.afterExpand,this),this.expandDefaults));}else{this[this.collapseEl].show();this.afterExpand();}},afterExpand:function(){this.collapsed=false;this.afterEffect();this.fireEvent('expand',this);},toggleCollapse:function(animate){this[this.collapsed?'expand':'collapse'](animate);return this;},onDisable:function(){if(this.rendered&&this.maskDisabled){this.el.mask();}
 Ext.Panel.superclass.onDisable.call(this);},onEnable:function(){if(this.rendered&&this.maskDisabled){this.el.unmask();}
-Ext.Panel.superclass.onEnable.call(this);},onResize:function(w,h){if(w!==undefined||h!==undefined){if(!this.collapsed){if(typeof w=='number'){w=this.adjustBodyWidth(w-this.getFrameWidth());this.body.setWidth(w);}else if(w=='auto'){this.body.setWidth(w);}
+Ext.Panel.superclass.onEnable.call(this);},onResize:function(w,h){if(w!==undefined||h!==undefined){if(!this.collapsed){if(typeof w=='number'){w=this.adjustBodyWidth(w-this.getFrameWidth());if(this.tbar){this.tbar.setWidth(w);if(this.topToolbar){this.topToolbar.setSize(w);}}
+if(this.bbar){this.bbar.setWidth(w);if(this.bottomToolbar){this.bottomToolbar.setSize(w);}}
+if(this.fbar){this.fbar.setSize(w-this.fbar.container.getFrameWidth('lr'));}
+this.body.setWidth(w);}else if(w=='auto'){this.body.setWidth(w);}
 if(typeof h=='number'){h=this.adjustBodyHeight(h-this.getFrameHeight());this.body.setHeight(h);}else if(h=='auto'){this.body.setHeight(h);}
-if(this.tbar){this.tbar.setWidth(w);if(this.topToolbar){this.topToolbar.setSize(w);}}
-if(this.bbar){this.bbar.setWidth(w);if(this.bottomToolbar){this.bottomToolbar.setSize(w);}}
 if(this.disabled&&this.el._mask){this.el._mask.setSize(this.el.dom.clientWidth,this.el.getHeight());}}else{this.queuedBodySize={width:w,height:h};if(!this.queuedExpand&&this.allowQueuedExpand!==false){this.queuedExpand=true;this.on('expand',function(){delete this.queuedExpand;this.onResize(this.queuedBodySize.width,this.queuedBodySize.height);this.doLayout();},this,{single:true});}}
 this.fireEvent('bodyresize',this,w,h);}
 this.syncShadow();},adjustBodyHeight:function(h){return h;},adjustBodyWidth:function(w){return w;},onPosition:function(){this.syncShadow();},getFrameWidth:function(){var w=this.el.getFrameWidth('lr');if(this.frame){var l=this.bwrap.dom.firstChild;w+=(Ext.fly(l).getFrameWidth('l')+Ext.fly(l.firstChild).getFrameWidth('r'));var mc=this.bwrap.dom.firstChild.firstChild.firstChild;w+=Ext.fly(mc).getFrameWidth('lr');}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/Window-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/Window-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Window-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -8,7 +8,7 @@
 
 
 Ext.Window=Ext.extend(Ext.Panel,{baseCls:'x-window',resizable:true,draggable:true,closable:true,constrain:false,constrainHeader:false,plain:false,minimizable:false,maximizable:false,minHeight:100,minWidth:200,expandOnShow:true,closeAction:'close',collapsible:false,initHidden:true,monitorResize:true,elements:'header,body',frame:true,floating:true,initComponent:function(){Ext.Window.superclass.initComponent.call(this);this.addEvents('resize','maximize','minimize','restore');},getState:function(){return Ext.apply(Ext.Window.superclass.getState.call(this)||{},this.getBox());},onRender:function(ct,position){Ext.Window.superclass.onRender.call(this,ct,position);if(this.plain){this.el.addClass('x-window-plain');}
-this.focusEl=this.el.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1",html:"&#160;"});this.focusEl.swallowEvent('click',true);this.proxy=this.el.createProxy("x-window-proxy");this.proxy.enableDisplayMode('block');if(this.modal){this.mask=this.container.createChild({cls:"ext-el-mask"},this.el.dom);this.mask.enableDisplayMode("block");this.mask.hide();}},initEvents:function(){Ext.Window.superclass.initEvents.call(this);if(this.animateTarget){this.setAnimateTarget(this.animateTarget);}
+this.focusEl=this.el.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1",html:"&#160;"});this.focusEl.swallowEvent('click',true);this.proxy=this.el.createProxy("x-window-proxy");this.proxy.enableDisplayMode('block');if(this.modal){this.mask=this.container.createChild({cls:"ext-el-mask"},this.el.dom);this.mask.enableDisplayMode("block");this.mask.hide();this.mask.on('click',this.focus,this);}},initEvents:function(){Ext.Window.superclass.initEvents.call(this);if(this.animateTarget){this.setAnimateTarget(this.animateTarget);}
 if(this.resizable){this.resizer=new Ext.Resizable(this.el,{minWidth:this.minWidth,minHeight:this.minHeight,handles:this.resizeHandles||"all",pinned:true,resizeElement:this.resizerAction});this.resizer.window=this;this.resizer.on("beforeresize",this.beforeResize,this);}
 if(this.draggable){this.header.addClass("x-window-draggable");}
 this.initTools();this.el.on("mousedown",this.toFront,this);this.manager=this.manager||Ext.WindowMgr;this.manager.register(this);this.hidden=true;if(this.maximized){this.maximized=false;this.maximize();}
@@ -18,8 +18,8 @@
 if(this.maximizable){this.addTool({id:'maximize',handler:this.maximize.createDelegate(this,[])});this.addTool({id:'restore',handler:this.restore.createDelegate(this,[]),hidden:true});this.header.on('dblclick',this.toggleMaximize,this);}
 if(this.closable){this.addTool({id:'close',handler:this[this.closeAction].createDelegate(this,[])});}},resizerAction:function(){var box=this.proxy.getBox();this.proxy.hide();this.window.handleResize(box);return box;},beforeResize:function(){this.resizer.minHeight=Math.max(this.minHeight,this.getFrameHeight()+40);this.resizer.minWidth=Math.max(this.minWidth,this.getFrameWidth()+40);this.resizeBox=this.el.getBox();},updateHandles:function(){if(Ext.isIE&&this.resizer){this.resizer.syncHandleHeight();this.el.repaint();}},handleResize:function(box){var rz=this.resizeBox;if(rz.x!=box.x||rz.y!=box.y){this.updateBox(box);}else{this.setSize(box);}
 this.focus();this.updateHandles();this.saveState();if(this.layout){this.doLayout();}
-this.fireEvent("resize",this,box.width,box.height);},focus:function(){var f=this.focusEl,db=this.defaultButton,t=typeof db;if(t!='undefined'){if(t=='number'){f=this.buttons[db];}else if(t=='string'){f=Ext.getCmp(db);}else{f=db;}}
-f.focus.defer(10,f);},setAnimateTarget:function(el){el=Ext.get(el);this.animateTarget=el;},beforeShow:function(){delete this.el.lastXY;delete this.el.lastLT;if(this.x===undefined||this.y===undefined){var xy=this.el.getAlignToXY(this.container,'c-c');var pos=this.el.translatePoints(xy[0],xy[1]);this.x=this.x===undefined?pos.left:this.x;this.y=this.y===undefined?pos.top:this.y;}
+this.fireEvent("resize",this,box.width,box.height);},focus:function(){var f=this.focusEl,db=this.defaultButton,t=typeof db;if(t!='undefined'){if(t=='number'&&this.fbar){f=this.fbar.items.get(db);}else if(t=='string'){f=Ext.getCmp(db);}else{f=db;}}
+f=f||this.focusEl;f.focus.defer(10,f);},setAnimateTarget:function(el){el=Ext.get(el);this.animateTarget=el;},beforeShow:function(){delete this.el.lastXY;delete this.el.lastLT;if(this.x===undefined||this.y===undefined){var xy=this.el.getAlignToXY(this.container,'c-c');var pos=this.el.translatePoints(xy[0],xy[1]);this.x=this.x===undefined?pos.left:this.x;this.y=this.y===undefined?pos.top:this.y;}
 this.el.setLeftTop(this.x,this.y);if(this.expandOnShow){this.expand(false);}
 if(this.modal){Ext.getBody().addClass("x-body-masked");this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.mask.show();}},show:function(animateTarget,cb,scope){if(!this.rendered){this.render(Ext.getBody());}
 if(this.hidden===false){this.toFront();return;}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/form/DateField-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/form/DateField-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/DateField-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -9,14 +9,14 @@
 
 Ext.form.DateField=Ext.extend(Ext.form.TriggerField,{format:"m/d/Y",altFormats:"m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d",disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:'x-form-date-trigger',showToday:true,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"},initComponent:function(){Ext.form.DateField.superclass.initComponent.call(this);if(typeof this.minValue=="string"){this.minValue=this.parseDate(this.minValue);}
 if(typeof this.maxValue=="string"){this.maxValue=this.parseDate(this.maxValue);}
-this.ddMatch=null;this.initDisabledDays();},initDisabledDays:function(){if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1)re+="|";}
+this.disabledDatesRE=null;this.initDisabledDays();},initDisabledDays:function(){if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1)re+="|";}
 this.disabledDatesRE=new RegExp(re+")");}},setDisabledDates:function(dd){this.disabledDates=dd;this.initDisabledDays();if(this.menu){this.menu.picker.setDisabledDates(this.disabledDatesRE);}},setDisabledDays:function(dd){this.disabledDays=dd;if(this.menu){this.menu.picker.setDisabledDays(dd);}},setMinValue:function(dt){this.minValue=(typeof dt=="string"?this.parseDate(dt):dt);if(this.menu){this.menu.picker.setMinDate(this.minValue);}},setMaxValue:function(dt){this.maxValue=(typeof dt=="string"?this.parseDate(dt):dt);if(this.menu){this.menu.picker.setMaxDate(this.maxValue);}},validateValue:function(value){value=this.formatDate(value);if(!Ext.form.DateField.superclass.validateValue.call(this,value)){return false;}
 if(value.length<1){return true;}
 var svalue=value;value=this.parseDate(value);if(!value){this.markInvalid(String.format(this.invalidText,svalue,this.format));return false;}
 var time=value.getTime();if(this.minValue&&time<this.minValue.getTime()){this.markInvalid(String.format(this.minText,this.formatDate(this.minValue)));return false;}
 if(this.maxValue&&time>this.maxValue.getTime()){this.markInvalid(String.format(this.maxText,this.formatDate(this.maxValue)));return false;}
 if(this.disabledDays){var day=value.getDay();for(var i=0;i<this.disabledDays.length;i++){if(day===this.disabledDays[i]){this.markInvalid(this.disabledDaysText);return false;}}}
-var fvalue=this.formatDate(value);if(this.ddMatch&&this.ddMatch.test(fvalue)){this.markInvalid(String.format(this.disabledDatesText,fvalue));return false;}
+var fvalue=this.formatDate(value);if(this.disabledDatesRE&&this.disabledDatesRE.test(fvalue)){this.markInvalid(String.format(this.disabledDatesText,fvalue));return false;}
 return true;},validateBlur:function(){return!this.menu||!this.menu.isVisible();},getValue:function(){return this.parseDate(Ext.form.DateField.superclass.getValue.call(this))||"";},setValue:function(date){Ext.form.DateField.superclass.setValue.call(this,this.formatDate(this.parseDate(date)));},parseDate:function(value){if(!value||Ext.isDate(value)){return value;}
 var v=Date.parseDate(value,this.format);if(!v&&this.altFormats){if(!this.altFormatsArray){this.altFormatsArray=this.altFormats.split("|");}
 for(var i=0,len=this.altFormatsArray.length;i<len&&!v;i++){v=Date.parseDate(value,this.altFormatsArray[i]);}}
@@ -24,4 +24,4 @@
 if(this.wrap){this.wrap.remove();}
 Ext.form.DateField.superclass.onDestroy.call(this);},formatDate:function(date){return Ext.isDate(date)?date.dateFormat(this.format):date;},menuListeners:{select:function(m,d){this.setValue(d);},show:function(){this.onFocus();},hide:function(){this.focus.defer(10,this);var ml=this.menuListeners;this.menu.un("select",ml.select,this);this.menu.un("show",ml.show,this);this.menu.un("hide",ml.hide,this);}},onTriggerClick:function(){if(this.disabled){return;}
 if(this.menu==null){this.menu=new Ext.menu.DateMenu();}
-Ext.apply(this.menu.picker,{minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.ddMatch,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.format,showToday:this.showToday,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))});this.menu.on(Ext.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}}});Ext.reg('datefield',Ext.form.DateField);
\ No newline at end of file
+Ext.apply(this.menu.picker,{minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.disabledDatesRE,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.format,showToday:this.showToday,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))});this.menu.on(Ext.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}}});Ext.reg('datefield',Ext.form.DateField);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Field-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Field-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Field-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -14,7 +14,7 @@
 this.el.addClass('x-form-'+type);}
 if(this.readOnly){this.el.dom.readOnly=true;}
 if(this.tabIndex!==undefined){this.el.dom.setAttribute('tabIndex',this.tabIndex);}
-this.el.addClass([this.fieldClass,this.cls]);},getItemCt:function(){return this.el.up('.x-form-item',4);},initValue:function(){if(this.value!==undefined){this.setValue(this.value);}else if(this.el.dom.value.length>0&&this.el.dom.value!=this.emptyText){this.setValue(this.el.dom.value);}
+this.el.addClass([this.fieldClass,this.cls]);},getItemCt:function(){return this.el.up('.x-form-item',4);},initValue:function(){if(this.value!==undefined){this.setValue(this.value);}else if(!Ext.isEmpty(this.el.dom.value)&&this.el.dom.value!=this.emptyText){this.setValue(this.el.dom.value);}
 this.originalValue=this.getValue();},isDirty:function(){if(this.disabled){return false;}
 return String(this.getValue())!==String(this.originalValue);},afterRender:function(){Ext.form.Field.superclass.afterRender.call(this);this.initEvents();this.initValue();},fireKey:function(e){if(e.isSpecialKey()){this.fireEvent("specialkey",this,e);}},reset:function(){this.setValue(this.originalValue);this.clearInvalid();},initEvents:function(){this.el.on(Ext.isIE||Ext.isSafari3?"keydown":"keypress",this.fireKey,this);this.el.on("focus",this.onFocus,this);var o=this.inEditor&&Ext.isWindows&&Ext.isGecko?{buffer:10}:null;this.el.on("blur",this.onBlur,this,o);},onFocus:function(){if(!Ext.isOpera&&this.focusClass){this.el.addClass(this.focusClass);}
 if(!this.hasFocus){this.hasFocus=true;this.startValue=this.getValue();this.fireEvent("focus",this);}},beforeBlur:Ext.emptyFn,onBlur:function(){this.beforeBlur();if(!Ext.isOpera&&this.focusClass){this.el.removeClass(this.focusClass);}
@@ -29,7 +29,7 @@
 this.fireEvent('valid',this);},getMessageHandler:function(){return Ext.form.MessageTargets[this.msgTarget];},getErrorCt:function(){return this.el.findParent('.x-form-element',5,true)||this.el.findParent('.x-form-field-wrap',5,true);},alignErrorIcon:function(){this.errorIcon.alignTo(this.el,'tl-tr',[2,0]);},getRawValue:function(){var v=this.rendered?this.el.getValue():Ext.value(this.value,'');if(v===this.emptyText){v='';}
 return v;},getValue:function(){if(!this.rendered){return this.value;}
 var v=this.el.getValue();if(v===this.emptyText||v===undefined){v='';}
-return v;},setRawValue:function(v){return this.el.dom.value=(v===null||v===undefined?'':v);},setValue:function(v){this.value=v;if(this.rendered){this.el.dom.value=(v===null||v===undefined?'':v);this.validate();}},adjustSize:function(w,h){var s=Ext.form.Field.superclass.adjustSize.call(this,w,h);s.width=this.adjustWidth(this.el.dom.tagName,s.width);if(this.offsetCt){var ct=this.getItemCt();s.width-=ct.getFrameWidth('lr');s.height-=ct.getFrameWidth('tb');}
+return v;},setRawValue:function(v){return this.el.dom.value=(v===null||v===undefined?'':v);},setValue:function(v){this.value=v;if(this.rendered){this.el.dom.value=(v===null||v===undefined?'':v);this.validate();}},append:function(v){this.setValue([this.getValue(),v].join(''));},adjustSize:function(w,h){var s=Ext.form.Field.superclass.adjustSize.call(this,w,h);s.width=this.adjustWidth(this.el.dom.tagName,s.width);if(this.offsetCt){var ct=this.getItemCt();s.width-=ct.getFrameWidth('lr');s.height-=ct.getFrameWidth('tb');}
 return s;},adjustWidth:function(tag,w){tag=tag.toLowerCase();if(typeof w=='number'&&!Ext.isSafari){if(Ext.isIE&&(tag=='input'||tag=='textarea')){if(tag=='input'&&!Ext.isStrict){return this.inEditor?w:w-3;}
 if(tag=='input'&&Ext.isStrict){return w-(Ext.isIE6?4:1);}
 if(tag=='textarea'&&Ext.isStrict){return w-2;}}else if(Ext.isOpera&&Ext.isStrict){if(tag=='input'){return w+2;}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Form-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Form-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Form-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -7,8 +7,8 @@
  */
 
 
-Ext.FormPanel=Ext.extend(Ext.Panel,{buttonAlign:'center',minButtonWidth:75,labelAlign:'left',monitorValid:false,monitorPoll:200,layout:'form',initComponent:function(){this.form=this.createForm();if(this.fileUpload){this.bodyCfg.enctype='multipart/form-data';}
-Ext.FormPanel.superclass.initComponent.call(this);this.bodyCfg={tag:'form',cls:this.baseCls+'-body',method:this.method||'POST',id:this.formId||Ext.id()};this.initItems();this.addEvents('clientvalidation');this.relayEvents(this.form,['beforeaction','actionfailed','actioncomplete']);},createForm:function(){delete this.initialConfig.listeners;return new Ext.form.BasicForm(null,this.initialConfig);},initFields:function(){var f=this.form;var formPanel=this;var fn=function(c){if(c.isFormField){f.add(c);}if(c.isFieldWrap){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});f.add(c.field);}else if(c.doLayout&&c!=formPanel){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});if(c.items){c.items.each(fn);}}}
+Ext.FormPanel=Ext.extend(Ext.Panel,{buttonAlign:'center',minButtonWidth:75,labelAlign:'left',monitorValid:false,monitorPoll:200,layout:'form',initComponent:function(){this.form=this.createForm();Ext.FormPanel.superclass.initComponent.call(this);this.bodyCfg={tag:'form',cls:this.baseCls+'-body',method:this.method||'POST',id:this.formId||Ext.id()};if(this.fileUpload){this.bodyCfg.enctype='multipart/form-data';}
+this.initItems();this.addEvents('clientvalidation');this.relayEvents(this.form,['beforeaction','actionfailed','actioncomplete']);},createForm:function(){delete this.initialConfig.listeners;return new Ext.form.BasicForm(null,this.initialConfig);},initFields:function(){var f=this.form;var formPanel=this;var fn=function(c){if(c.isFormField){f.add(c);}if(c.isFieldWrap){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});f.add(c.field);}else if(c.doLayout&&c!=formPanel){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});if(c.items){c.items.each(fn);}}}
 this.items.each(fn);},getLayoutTarget:function(){return this.form.el;},getForm:function(){return this.form;},onRender:function(ct,position){this.initFields();Ext.FormPanel.superclass.onRender.call(this,ct,position);this.form.initEl(this.body);},beforeDestroy:function(){Ext.FormPanel.superclass.beforeDestroy.call(this);this.stopMonitoring();Ext.destroy(this.form);},initEvents:function(){Ext.FormPanel.superclass.initEvents.call(this);this.items.on('remove',this.onRemove,this);this.items.on('add',this.onAdd,this);if(this.monitorValid){this.startMonitoring();}},onAdd:function(ct,c){if(c.isFormField){this.form.add(c);}},onRemove:function(c){if(c.isFormField){Ext.destroy(c.container.up('.x-form-item'));this.form.remove(c);}},startMonitoring:function(){if(!this.bound){this.bound=true;Ext.TaskMgr.start({run:this.bindHandler,interval:this.monitorPoll||200,scope:this});}},stopMonitoring:function(){this.bound=false;},load:function(){this.form.load.apply(this.form,arguments);},onDisable:function(){Ext.FormPanel.superclass.onDisable.call(this);if(this.form){this.form.items.each(function(){this.disable();});}},onEnable:function(){Ext.FormPanel.superclass.onEnable.call(this);if(this.form){this.form.items.each(function(){this.enable();});}},bindHandler:function(){if(!this.bound){return false;}
 var valid=true;this.form.items.each(function(f){if(!f.isValid(true)){valid=false;return false;}});if(this.buttons){for(var i=0,len=this.buttons.length;i<len;i++){var btn=this.buttons[i];if(btn.formBind===true&&btn.disabled===valid){btn.setDisabled(!valid);}}}
 this.fireEvent('clientvalidation',this,valid);}});Ext.reg('form',Ext.FormPanel);Ext.form.FormPanel=Ext.FormPanel;
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/Column-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/Column-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/Column-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -7,11 +7,13 @@
  */
 
 
-Ext.grid.Column=function(config){Ext.apply(this,config);if(typeof this.renderer=="string"){this.renderer=Ext.util.Format[c.renderer];}
+Ext.grid.Column=function(config){Ext.apply(this,config);if(typeof this.renderer=="string"){this.renderer=Ext.util.Format[this.renderer];}
 if(typeof this.id=="undefined"){this.id=++Ext.grid.Column.AUTO_ID;}
-if(this.editor){if(this.editor.isFormField){this.editor=new Ext.grid.GridEditor(this.editor);}else if(this.editor.xtype&&!this.editor.events){this.editor=new Ext.grid.GridEditor(Ext.create(this.editor,'textfield'));}}}
+if(this.editor){if(this.editor.xtype&&!this.editor.events){this.editor=Ext.create(this.editor,'textfield');}}}
 Ext.grid.Column.AUTO_ID=0;Ext.grid.Column.prototype={isColumn:true,renderer:function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
-return value;}};Ext.grid.BooleanColumn=Ext.extend(Ext.grid.Column,{renderer:function(value){if(value===undefined){return"&#160;";}
+return value;},getEditor:function(rowIndex){return this.editable!==false?this.editor:null;},getCellEditor:function(rowIndex){var editor=this.getEditor(rowIndex);if(editor){if(!editor.startEdit){if(!editor.gridEditor){editor.gridEditor=new Ext.grid.GridEditor(editor);}
+return editor.gridEditor;}else if(editor.startEdit){return editor;}}
+return null;}};Ext.grid.BooleanColumn=Ext.extend(Ext.grid.Column,{renderer:function(value){if(value===undefined){return"&#160;";}
 if(!value||value==='false'){return"false";}
 return'true';}});Ext.grid.NumberColumn=Ext.extend(Ext.grid.Column,{format:'0,000.00',constructor:function(cfg){this.supr().constructor.apply(this,arguments);this.renderer=Ext.util.Format.numberRenderer(this.format);}});Ext.grid.DateColumn=Ext.extend(Ext.grid.Column,{format:'m/d/Y',constructor:function(cfg){this.supr().constructor.apply(this,arguments);this.renderer=Ext.util.Format.dateRenderer(this.format);}});Ext.grid.TemplateColumn=Ext.extend(Ext.grid.Column,{constructor:function(cfg){this.supr().constructor.apply(this,arguments);var tpl=typeof this.tpl=='object'?this.tpl:new Ext.XTemplate(this.tpl);this.renderer=function(value,p,r){return tpl.apply(r.data);}
 this.tpl=tpl;}});Ext.grid.Column.types={gridcolumn:Ext.grid.Column,booleancolumn:Ext.grid.BooleanColumn,numbercolumn:Ext.grid.NumberColumn,datecolumn:Ext.grid.DateColumn,templatecolumn:Ext.grid.TemplateColumn};
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/ColumnModel-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/ColumnModel-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/ColumnModel-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -8,7 +8,7 @@
 
 
 Ext.grid.ColumnModel=function(config){if(config.columns){Ext.apply(this,config);this.setConfig(config.columns,true);}else{this.setConfig(config,true);}
-this.addEvents("widthchange","headerchange","hiddenchange","columnmoved","columnlockchange","configchange");Ext.grid.ColumnModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.ColumnModel,Ext.util.Observable,{defaultWidth:100,defaultSortable:false,getColumnId:function(index){return this.config[index].id;},setConfig:function(config,initial){if(!initial){delete this.totalWidth;for(var i=0,len=this.config.length;i<len;i++){var c=this.config[i];if(c.editor){c.editor.destroy();}}}
+this.addEvents("widthchange","headerchange","hiddenchange","columnmoved","columnlockchange","configchange");Ext.grid.ColumnModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.ColumnModel,Ext.util.Observable,{defaultWidth:100,defaultSortable:false,getColumnId:function(index){return this.config[index].id;},getColumnAt:function(index){return this.config[index];},setConfig:function(config,initial){if(!initial){delete this.totalWidth;for(var i=0,len=this.config.length;i<len;i++){var c=this.config[i];if(c.editor){c.editor.destroy();}}}
 this.config=config;this.lookup={};for(var i=0,len=config.length;i<len;i++){var c=config[i];if(!c.isColumn){var cls=Ext.grid.Column.types[c.xtype||'gridcolumn'];c=new cls(c);config[i]=c;}
 this.lookup[c.id]=c;}
 if(!initial){this.fireEvent('configchange',this);}},getColumnById:function(id){return this.lookup[id];},getIndexById:function(id){for(var i=0,len=this.config.length;i<len;i++){if(this.config[i].id==id){return i;}}
@@ -21,5 +21,5 @@
 return this.config[col].sortable;},isMenuDisabled:function(col){return!!this.config[col].menuDisabled;},getRenderer:function(col){if(!this.config[col].renderer){return Ext.grid.ColumnModel.defaultRenderer;}
 return this.config[col].renderer;},setRenderer:function(col,fn){this.config[col].renderer=fn;},getColumnWidth:function(col){return this.config[col].width||this.defaultWidth;},setColumnWidth:function(col,width,suppressEvent){this.config[col].width=width;this.totalWidth=null;if(!suppressEvent){this.fireEvent("widthchange",this,col,width);}},getTotalWidth:function(includeHidden){if(!this.totalWidth){this.totalWidth=0;for(var i=0,len=this.config.length;i<len;i++){if(includeHidden||!this.isHidden(i)){this.totalWidth+=this.getColumnWidth(i);}}}
 return this.totalWidth;},getColumnHeader:function(col){return this.config[col].header;},setColumnHeader:function(col,header){this.config[col].header=header;this.fireEvent("headerchange",this,col,header);},getColumnTooltip:function(col){return this.config[col].tooltip;},setColumnTooltip:function(col,tooltip){this.config[col].tooltip=tooltip;},getDataIndex:function(col){return this.config[col].dataIndex;},setDataIndex:function(col,dataIndex){this.config[col].dataIndex=dataIndex;},findColumnIndex:function(dataIndex){var c=this.config;for(var i=0,len=c.length;i<len;i++){if(c[i].dataIndex==dataIndex){return i;}}
-return-1;},isCellEditable:function(colIndex,rowIndex){return(this.config[colIndex].editable||(typeof this.config[colIndex].editable=="undefined"&&this.config[colIndex].editor))?true:false;},getCellEditor:function(colIndex,rowIndex){return this.config[colIndex].editor;},setEditable:function(col,editable){this.config[col].editable=editable;},isHidden:function(colIndex){return this.config[colIndex].hidden;},isFixed:function(colIndex){return this.config[colIndex].fixed;},isResizable:function(colIndex){return colIndex>=0&&this.config[colIndex].resizable!==false&&this.config[colIndex].fixed!==true;},setHidden:function(colIndex,hidden){var c=this.config[colIndex];if(c.hidden!==hidden){c.hidden=hidden;this.totalWidth=null;this.fireEvent("hiddenchange",this,colIndex,hidden);}},setEditor:function(col,editor){this.config[col].editor=editor;}});Ext.grid.ColumnModel.defaultRenderer=function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
+return-1;},isCellEditable:function(colIndex,rowIndex){return(this.config[colIndex].editable||(typeof this.config[colIndex].editable=="undefined"&&this.config[colIndex].editor))?true:false;},getCellEditor:function(colIndex,rowIndex){return this.config[colIndex].getCellEditor(rowIndex);},setEditable:function(col,editable){this.config[col].editable=editable;},isHidden:function(colIndex){return this.config[colIndex].hidden;},isFixed:function(colIndex){return this.config[colIndex].fixed;},isResizable:function(colIndex){return colIndex>=0&&this.config[colIndex].resizable!==false&&this.config[colIndex].fixed!==true;},setHidden:function(colIndex,hidden){var c=this.config[colIndex];if(c.hidden!==hidden){c.hidden=hidden;this.totalWidth=null;this.fireEvent("hiddenchange",this,colIndex,hidden);}},setEditor:function(col,editor){this.config[col].editor=editor;}});Ext.grid.ColumnModel.defaultRenderer=function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
 return value;};
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/GridView-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/GridView-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/GridView-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -24,9 +24,9 @@
 return this.fly(el).findParent(this.rowSelector,this.rowSelectorDepth);},findRowIndex:function(el){var r=this.findRow(el);return r?r.rowIndex:false;},getRow:function(row){return this.getRows()[row];},getCell:function(row,col){return this.getRow(row).getElementsByTagName('td')[col];},getHeaderCell:function(index){return this.mainHd.dom.getElementsByTagName('td')[index];},addRowClass:function(row,cls){var r=this.getRow(row);if(r){this.fly(r).addClass(cls);}},removeRowClass:function(row,cls){var r=this.getRow(row);if(r){this.fly(r).removeClass(cls);}},removeRow:function(row){Ext.removeNode(this.getRow(row));this.syncFocusEl(row);},removeRows:function(firstRow,lastRow){var bd=this.mainBody.dom;for(var rowIndex=firstRow;rowIndex<=lastRow;rowIndex++){Ext.removeNode(bd.childNodes[firstRow]);}
 this.syncFocusEl(firstRow);},getScrollState:function(){var sb=this.scroller.dom;return{left:sb.scrollLeft,top:sb.scrollTop};},restoreScroll:function(state){var sb=this.scroller.dom;sb.scrollLeft=state.left;sb.scrollTop=state.top;},scrollToTop:function(){this.scroller.dom.scrollTop=0;this.scroller.dom.scrollLeft=0;},syncScroll:function(){this.syncHeaderScroll();var mb=this.scroller.dom;this.grid.fireEvent("bodyscroll",mb.scrollLeft,mb.scrollTop);},syncHeaderScroll:function(){var mb=this.scroller.dom;this.innerHd.scrollLeft=mb.scrollLeft;this.innerHd.scrollLeft=mb.scrollLeft;},updateSortIcon:function(col,dir){var sc=this.sortClasses;var hds=this.mainHd.select('td').removeClass(sc);hds.item(col).addClass(sc[dir=="DESC"?1:0]);},updateAllColumnWidths:function(){var tw=this.getTotalWidth();var clen=this.cm.getColumnCount();var ws=[];for(var i=0;i<clen;i++){ws[i]=this.getColumnWidth(i);}
 this.innerHd.firstChild.firstChild.style.width=tw;for(var i=0;i<clen;i++){var hd=this.getHeaderCell(i);hd.style.width=ws[i];}
-var ns=this.getRows();for(var i=0,len=ns.length;i<len;i++){ns[i].style.width=tw;ns[i].firstChild.style.width=tw;var row=ns[i].firstChild.rows[0];for(var j=0;j<clen;j++){row.childNodes[j].style.width=ws[j];}}
-this.onAllColumnWidthsUpdated(ws,tw);},updateColumnWidth:function(col,width){var w=this.getColumnWidth(col);var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var hd=this.getHeaderCell(col);hd.style.width=w;var ns=this.getRows();for(var i=0,len=ns.length;i<len;i++){ns[i].style.width=tw;ns[i].firstChild.style.width=tw;ns[i].firstChild.rows[0].childNodes[col].style.width=w;}
-this.onColumnWidthUpdated(col,w,tw);},updateColumnHidden:function(col,hidden){var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var display=hidden?'none':'';var hd=this.getHeaderCell(col);hd.style.display=display;var ns=this.getRows();for(var i=0,len=ns.length;i<len;i++){ns[i].style.width=tw;ns[i].firstChild.style.width=tw;ns[i].firstChild.rows[0].childNodes[col].style.display=display;}
+var ns=this.getRows(),row,trow;for(var i=0,len=ns.length;i<len;i++){row=ns[i];row.style.width=tw;if(row.firstChild){row.firstChild.style.width=tw;trow=row.firstChild.rows[0];for(var j=0;j<clen;j++){trow.childNodes[j].style.width=ws[j];}}}
+this.onAllColumnWidthsUpdated(ws,tw);},updateColumnWidth:function(col,width){var w=this.getColumnWidth(col);var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var hd=this.getHeaderCell(col);hd.style.width=w;var ns=this.getRows(),row;for(var i=0,len=ns.length;i<len;i++){row=ns[i];row.style.width=tw;if(row.firstChild){row.firstChild.style.width=tw;row.firstChild.rows[0].childNodes[col].style.width=w;}}
+this.onColumnWidthUpdated(col,w,tw);},updateColumnHidden:function(col,hidden){var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var display=hidden?'none':'';var hd=this.getHeaderCell(col);hd.style.display=display;var ns=this.getRows(),row;for(var i=0,len=ns.length;i<len;i++){row=ns[i];row.style.width=tw;if(row.firstChild){row.firstChild.style.width=tw;row.firstChild.rows[0].childNodes[col].style.display=display;}}
 this.onColumnHiddenUpdated(col,hidden,tw);delete this.lastViewWidth;this.layout();},doRender:function(cs,rs,ds,startRow,colCount,stripe){var ts=this.templates,ct=ts.cell,rt=ts.row,last=colCount-1;var tstyle='width:'+this.getTotalWidth()+';';var buf=[],cb,c,p={},rp={tstyle:tstyle},r;for(var j=0,len=rs.length;j<len;j++){r=rs[j];cb=[];var rowIndex=(j+startRow);for(var i=0;i<colCount;i++){c=cs[i];p.id=c.id;p.css=i==0?'x-grid3-cell-first ':(i==last?'x-grid3-cell-last ':'');p.attr=p.cellAttr="";p.value=c.renderer(r.data[c.name],p,r,rowIndex,i,ds);p.style=c.style;if(p.value==undefined||p.value==="")p.value="&#160;";if(r.dirty&&typeof r.modified[c.name]!=='undefined'){p.css+=' x-grid3-dirty-cell';}
 cb[cb.length]=ct.apply(p);}
 var alt=[];if(stripe&&((rowIndex+1)%2==0)){alt[0]="x-grid3-row-alt";}
@@ -41,12 +41,13 @@
 if(g.enableHdMenu!==false){if(g.enableColumnHide!==false){this.colMenu=new Ext.menu.Menu({id:g.id+"-hcols-menu"});this.colMenu.on("beforeshow",this.beforeColMenuShow,this);this.colMenu.on("itemclick",this.handleHdMenuClick,this);}
 this.hmenu=new Ext.menu.Menu({id:g.id+"-hctx"});this.hmenu.add({id:"asc",text:this.sortAscText,cls:"xg-hmenu-sort-asc"},{id:"desc",text:this.sortDescText,cls:"xg-hmenu-sort-desc"});if(g.enableColumnHide!==false){this.hmenu.add('-',{id:"columns",text:this.columnsText,menu:this.colMenu,iconCls:'x-cols-icon'});}
 this.hmenu.on("itemclick",this.handleHdMenuClick,this);}
+if(g.trackMouseOver){this.mainBody.on("mouseover",this.onRowOver,this);this.mainBody.on("mouseout",this.onRowOut,this);}
 if(g.enableDragDrop||g.enableDrag){this.dragZone=new Ext.grid.GridDragZone(g,{ddGroup:g.ddGroup||'GridDD'});}
 this.updateHeaderSortState();},layout:function(){if(!this.mainBody){return;}
 var g=this.grid;var c=g.getGridEl();var csize=c.getSize(true);var vw=csize.width;if(vw<20||csize.height<20){return;}
 if(g.autoHeight){this.scroller.dom.style.overflow='visible';}else{this.el.setSize(csize.width,csize.height);var hdHeight=this.mainHd.getHeight();var vh=csize.height-(hdHeight);this.scroller.setSize(vw,vh);if(this.innerHd){this.innerHd.style.width=(vw)+'px';}}
 if(this.forceFit){if(this.lastViewWidth!=vw){this.fitColumns(false,false);this.lastViewWidth=vw;}}else{this.autoExpand();this.syncHeaderScroll();}
-this.onLayout(vw,vh);},onLayout:function(vw,vh){},onColumnWidthUpdated:function(col,w,tw){},onAllColumnWidthsUpdated:function(ws,tw){},onColumnHiddenUpdated:function(col,hidden,tw){},updateColumnText:function(col,text){},afterMove:function(colIndex){},init:function(grid){this.grid=grid;this.initTemplates();this.initData(grid.store,grid.colModel);this.initUI(grid);},getColumnId:function(index){return this.cm.getColumnId(index);},renderHeaders:function(){var cm=this.cm,ts=this.templates;var ct=ts.hcell;var cb=[],sb=[],p={};for(var i=0,len=cm.getColumnCount();i<len;i++){p.id=cm.getColumnId(i);p.value=cm.getColumnHeader(i)||"";p.style=this.getColumnStyle(i,true);p.tooltip=this.getColumnTooltip(i);if(cm.config[i].align=='right'){p.istyle='padding-right:16px';}else{delete p.istyle;}
+this.onLayout(vw,vh);},onLayout:function(vw,vh){},onColumnWidthUpdated:function(col,w,tw){},onAllColumnWidthsUpdated:function(ws,tw){},onColumnHiddenUpdated:function(col,hidden,tw){},updateColumnText:function(col,text){},afterMove:function(colIndex){},init:function(grid){this.grid=grid;this.initTemplates();this.initData(grid.store,grid.colModel);this.initUI(grid);},getColumnId:function(index){return this.cm.getColumnId(index);},renderHeaders:function(){var cm=this.cm,ts=this.templates;var ct=ts.hcell;var cb=[],p={};for(var i=0,len=cm.getColumnCount();i<len;i++){p.id=cm.getColumnId(i);p.value=cm.getColumnHeader(i)||"";p.style=this.getColumnStyle(i,true);p.tooltip=this.getColumnTooltip(i);if(cm.config[i].align=='right'){p.istyle='padding-right:16px';}else{delete p.istyle;}
 cb[cb.length]=ct.apply(p);}
 return ts.header.apply({cells:cb.join(""),tstyle:'width:'+this.getTotalWidth()+';'});},getColumnTooltip:function(i){var tt=this.cm.getColumnTooltip(i);if(tt){if(Ext.QuickTips.isEnabled()){return'ext:qtip="'+tt+'"';}else{return'title="'+tt+'"';}}
 return"";},beforeUpdate:function(){this.grid.stopEditing(true);},updateHeaders:function(){this.innerHd.firstChild.innerHTML=this.renderHeaders();},focusRow:function(row){this.focusCell(row,0,false);},focusCell:function(row,col,hscroll){this.syncFocusEl(this.ensureVisible(row,col,hscroll));if(Ext.isGecko){this.focusEl.focus();}else{this.focusEl.focus.defer(1,this.focusEl);}},resolveCell:function(row,col,hscroll){if(typeof row!="number"){row=row.rowIndex;}
@@ -66,7 +67,7 @@
 this.syncFocusEl(firstRow);},deleteRows:function(dm,firstRow,lastRow){if(dm.getRowCount()<1){this.refresh();}else{this.fireEvent("beforerowsdeleted",this,firstRow,lastRow);this.removeRows(firstRow,lastRow);this.processRows(firstRow);this.fireEvent("rowsdeleted",this,firstRow,lastRow);}},getColumnStyle:function(col,isHeader){var style=!isHeader?(this.cm.config[col].css||''):'';style+='width:'+this.getColumnWidth(col)+';';if(this.cm.isHidden(col)){style+='display:none;';}
 var align=this.cm.config[col].align;if(align){style+='text-align:'+align+';';}
 return style;},getColumnWidth:function(col){var w=this.cm.getColumnWidth(col);if(typeof w=='number'){return(Ext.isBorderBox?w:(w-this.borderWidth>0?w-this.borderWidth:0))+'px';}
-return w;},getTotalWidth:function(){return this.cm.getTotalWidth()+'px';},fitColumns:function(preventRefresh,onlyExpand,omitColumn){var cm=this.cm,leftOver,dist,i;var tw=cm.getTotalWidth(false);var aw=this.grid.getGridEl().getWidth(true)-this.scrollOffset;if(aw<20){return;}
+return w;},getTotalWidth:function(){return this.cm.getTotalWidth()+'px';},fitColumns:function(preventRefresh,onlyExpand,omitColumn){var cm=this.cm,i;var tw=cm.getTotalWidth(false);var aw=this.grid.getGridEl().getWidth(true)-this.scrollOffset;if(aw<20){return;}
 var extra=aw-tw;if(extra===0){return false;}
 var vc=cm.getColumnCount(true);var ac=vc-(typeof omitColumn=='number'?1:0);if(ac===0){ac=1;omitColumn=undefined;}
 var colCount=cm.getColumnCount();var cols=[];var extraCol=0;var width=0;var w;for(i=0;i<colCount;i++){if(!cm.isHidden(i)&&!cm.isFixed(i)&&i!==omitColumn){w=cm.getColumnWidth(i);cols.push(i);extraCol=i;cols.push(w);width+=w;}}
@@ -76,7 +77,7 @@
 return true;},autoExpand:function(preventUpdate){var g=this.grid,cm=this.cm;if(!this.userResized&&g.autoExpandColumn){var tw=cm.getTotalWidth(false);var aw=this.grid.getGridEl().getWidth(true)-this.scrollOffset;if(tw!=aw){var ci=cm.getIndexById(g.autoExpandColumn);var currentWidth=cm.getColumnWidth(ci);var cw=Math.min(Math.max(((aw-tw)+currentWidth),g.autoExpandMin),g.autoExpandMax);if(cw!=currentWidth){cm.setColumnWidth(ci,cw,true);if(preventUpdate!==true){this.updateColumnWidth(ci,cw);}}}}},getColumnData:function(){var cs=[],cm=this.cm,colCount=cm.getColumnCount();for(var i=0;i<colCount;i++){var name=cm.getDataIndex(i);cs[i]={name:(typeof name=='undefined'?this.ds.fields.get(i).name:name),renderer:cm.getRenderer(i),id:cm.getColumnId(i),style:this.getColumnStyle(i)};}
 return cs;},renderRows:function(startRow,endRow){var g=this.grid,cm=g.colModel,ds=g.store,stripe=g.stripeRows;var colCount=cm.getColumnCount();if(ds.getCount()<1){return"";}
 var cs=this.getColumnData();startRow=startRow||0;endRow=typeof endRow=="undefined"?ds.getCount()-1:endRow;var rs=ds.getRange(startRow,endRow);return this.doRender(cs,rs,ds,startRow,colCount,stripe);},renderBody:function(){var markup=this.renderRows();return this.templates.body.apply({rows:markup});},refreshRow:function(record){var ds=this.ds,index;if(typeof record=='number'){index=record;record=ds.getAt(index);}else{index=ds.indexOf(record);}
-var cls=[];this.insertRows(ds,index,index,true);this.getRow(index).rowIndex=index;this.onRemove(ds,record,index+1,true);this.fireEvent("rowupdated",this,index,record);},refresh:function(headersToo){this.fireEvent("beforerefresh",this);this.grid.stopEditing(true);var result=this.renderBody();this.mainBody.update(result);if(headersToo===true){this.updateHeaders();this.updateHeaderSortState();}
+this.insertRows(ds,index,index,true);this.getRow(index).rowIndex=index;this.onRemove(ds,record,index+1,true);this.fireEvent("rowupdated",this,index,record);},refresh:function(headersToo){this.fireEvent("beforerefresh",this);this.grid.stopEditing(true);var result=this.renderBody();this.mainBody.update(result);if(headersToo===true){this.updateHeaders();this.updateHeaderSortState();}
 this.processRows(0,true);this.layout();this.applyEmptyText();this.fireEvent("refresh",this);},applyEmptyText:function(){if(this.emptyText&&!this.hasRows()){this.mainBody.update('<div class="x-grid-empty">'+this.emptyText+'</div>');}},updateHeaderSortState:function(){var state=this.ds.getSortState();if(!state){return;}
 if(!this.sortState||(this.sortState.field!=state.field||this.sortState.direction!=state.direction)){this.grid.fireEvent('sortchange',this.grid,state);}
 this.sortState=state;var sortColumn=this.cm.findColumnIndex(state.field);if(sortColumn!=-1){var sortDir=state.direction;this.updateSortIcon(sortColumn,sortDir);}},destroy:function(){if(this.colMenu){Ext.menu.MenuMgr.unregister(this.colMenu);this.colMenu.destroy();delete this.colMenu;}
@@ -91,11 +92,11 @@
 this.ds=ds;if(this.cm){this.cm.un("configchange",this.onColConfigChange,this);this.cm.un("widthchange",this.onColWidthChange,this);this.cm.un("headerchange",this.onHeaderChange,this);this.cm.un("hiddenchange",this.onHiddenChange,this);this.cm.un("columnmoved",this.onColumnMove,this);this.cm.un("columnlockchange",this.onColumnLock,this);}
 if(cm){delete this.lastViewWidth;cm.on("configchange",this.onColConfigChange,this);cm.on("widthchange",this.onColWidthChange,this);cm.on("headerchange",this.onHeaderChange,this);cm.on("hiddenchange",this.onHiddenChange,this);cm.on("columnmoved",this.onColumnMove,this);cm.on("columnlockchange",this.onColumnLock,this);}
 this.cm=cm;},onDataChange:function(){this.refresh();this.updateHeaderSortState();this.syncFocusEl(0);},onClear:function(){this.refresh();this.syncFocusEl(0);},onUpdate:function(ds,record){this.refreshRow(record);},onAdd:function(ds,records,index){this.insertRows(ds,index,index+(records.length-1));},onRemove:function(ds,record,index,isUpdate){if(isUpdate!==true){this.fireEvent("beforerowremoved",this,index,record);}
-this.removeRow(index);if(isUpdate!==true){this.processRows(index);this.applyEmptyText();this.fireEvent("rowremoved",this,index,record);}},onLoad:function(){this.scrollToTop();},onColWidthChange:function(cm,col,width){this.updateColumnWidth(col,width);},onHeaderChange:function(cm,col,text){this.updateHeaders();},onHiddenChange:function(cm,col,hidden){this.updateColumnHidden(col,hidden);},onColumnMove:function(cm,oldIndex,newIndex){this.indexMap=null;var s=this.getScrollState();this.refresh(true);this.restoreScroll(s);this.afterMove(newIndex);},onColConfigChange:function(){delete this.lastViewWidth;this.indexMap=null;this.refresh(true);},initUI:function(grid){grid.on("headerclick",this.onHeaderClick,this);if(grid.trackMouseOver){grid.on("mouseover",this.onRowOver,this);grid.on("mouseout",this.onRowOut,this);}},initEvents:function(){},onHeaderClick:function(g,index){if(this.headersDisabled||!this.cm.isSortable(index)){return;}
-g.stopEditing(true);g.store.sort(this.cm.getDataIndex(index));},onRowOver:function(e,t){var row;if((row=this.findRowIndex(t))!==false){this.addRowClass(row,"x-grid3-row-over");}},onRowOut:function(e,t){var row;if((row=this.findRowIndex(t))!==false&&row!==this.findRowIndex(e.getRelatedTarget())){this.removeRowClass(row,"x-grid3-row-over");}},handleWheel:function(e){e.stopPropagation();},onRowSelect:function(row){this.addRowClass(row,this.selectedRowClass);},onRowDeselect:function(row){this.removeRowClass(row,this.selectedRowClass);},onCellSelect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).addClass("x-grid3-cell-selected");}},onCellDeselect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).removeClass("x-grid3-cell-selected");}},onColumnSplitterMoved:function(i,w){this.userResized=true;var cm=this.grid.colModel;cm.setColumnWidth(i,w,true);if(this.forceFit){this.fitColumns(true,false,i);this.updateAllColumnWidths();}else{this.updateColumnWidth(i,w);this.syncHeaderScroll();}
+this.removeRow(index);if(isUpdate!==true){this.processRows(index);this.applyEmptyText();this.fireEvent("rowremoved",this,index,record);}},onLoad:function(){this.scrollToTop();},onColWidthChange:function(cm,col,width){this.updateColumnWidth(col,width);},onHeaderChange:function(cm,col,text){this.updateHeaders();},onHiddenChange:function(cm,col,hidden){this.updateColumnHidden(col,hidden);},onColumnMove:function(cm,oldIndex,newIndex){this.indexMap=null;var s=this.getScrollState();this.refresh(true);this.restoreScroll(s);this.afterMove(newIndex);},onColConfigChange:function(){delete this.lastViewWidth;this.indexMap=null;this.refresh(true);},initUI:function(grid){grid.on("headerclick",this.onHeaderClick,this);},initEvents:function(){},onHeaderClick:function(g,index){if(this.headersDisabled||!this.cm.isSortable(index)){return;}
+g.stopEditing(true);g.store.sort(this.cm.getDataIndex(index));},onRowOver:function(e,t){var row;if((row=this.findRowIndex(t))!==false){this.addRowClass(row,"x-grid3-row-over");}},onRowOut:function(e,t){var row;if((row=this.findRowIndex(t))!==false&&!e.within(this.getRow(row),true)){this.removeRowClass(row,"x-grid3-row-over");}},handleWheel:function(e){e.stopPropagation();},onRowSelect:function(row){this.addRowClass(row,this.selectedRowClass);},onRowDeselect:function(row){this.removeRowClass(row,this.selectedRowClass);},onCellSelect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).addClass("x-grid3-cell-selected");}},onCellDeselect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).removeClass("x-grid3-cell-selected");}},onColumnSplitterMoved:function(i,w){this.userResized=true;var cm=this.grid.colModel;cm.setColumnWidth(i,w,true);if(this.forceFit){this.fitColumns(true,false,i);this.updateAllColumnWidths();}else{this.updateColumnWidth(i,w);this.syncHeaderScroll();}
 this.grid.fireEvent("columnresize",i,w);},handleHdMenuClick:function(item){var index=this.hdCtxIndex;var cm=this.cm,ds=this.ds;switch(item.id){case"asc":ds.sort(cm.getDataIndex(index),"ASC");break;case"desc":ds.sort(cm.getDataIndex(index),"DESC");break;default:index=cm.getIndexById(item.id.substr(4));if(index!=-1){if(item.checked&&cm.getColumnsBy(this.isHideableColumn,this).length<=1){this.onDenyColumnHide();return false;}
 cm.setHidden(index,item.checked);}}
-return true;},isHideableColumn:function(c){return!c.hidden&&!c.fixed;},beforeColMenuShow:function(){var cm=this.cm,colCount=cm.getColumnCount();this.colMenu.removeAll();for(var i=0;i<colCount;i++){if(cm.config[i].fixed!==true&&cm.config[i].hideable!==false){this.colMenu.add(new Ext.menu.CheckItem({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false,disabled:cm.config[i].hideable===false}));}}},handleHdDown:function(e,t){if(Ext.fly(t).hasClass('x-grid3-hd-btn')){e.stopEvent();var hd=this.findHeaderCell(t);Ext.fly(hd).addClass('x-grid3-hd-menu-open');var index=this.getCellIndex(hd);this.hdCtxIndex=index;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(index));ms.get("desc").setDisabled(!cm.isSortable(index));this.hmenu.on("hide",function(){Ext.fly(hd).removeClass('x-grid3-hd-menu-open');},this,{single:true});this.hmenu.show(t,"tl-bl?");}},handleHdOver:function(e,t){var hd=this.findHeaderCell(t);if(hd&&!this.headersDisabled){this.activeHd=hd;this.activeHdIndex=this.getCellIndex(hd);var fly=this.fly(hd);this.activeHdRegion=fly.getRegion();if(!this.cm.isMenuDisabled(this.activeHdIndex)){fly.addClass("x-grid3-hd-over");this.activeHdBtn=fly.child('.x-grid3-hd-btn');if(this.activeHdBtn){this.activeHdBtn.dom.style.height=(hd.firstChild.offsetHeight-1)+'px';}}}},handleHdMove:function(e,t){if(this.activeHd&&!this.headersDisabled){var hw=this.splitHandleWidth||5;var r=this.activeHdRegion;var x=e.getPageX();var ss=this.activeHd.style;if(x-r.left<=hw&&this.cm.isResizable(this.activeHdIndex-1)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'e-resize':'col-resize';}else if(r.right-x<=(!this.activeHdBtn?hw:2)&&this.cm.isResizable(this.activeHdIndex)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'w-resize':'col-resize';}else{ss.cursor='';}}},handleHdOut:function(e,t){var hd=this.findHeaderCell(t);if(hd&&(!Ext.isIE||!e.within(hd,true))){this.activeHd=null;this.fly(hd).removeClass("x-grid3-hd-over");hd.style.cursor='';}},hasRows:function(){var fc=this.mainBody.dom.firstChild;return fc&&fc.className!='x-grid-empty';},bind:function(d,c){this.initData(d,c);}});Ext.grid.GridView.SplitDragZone=function(grid,hd){this.grid=grid;this.view=grid.getView();this.marker=this.view.resizeMarker;this.proxy=this.view.resizeProxy;Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this,hd,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.scroll=false;this.hw=this.view.splitHandleWidth||5;};Ext.extend(Ext.grid.GridView.SplitDragZone,Ext.dd.DDProxy,{b4StartDrag:function(x,y){this.view.headersDisabled=true;var h=this.view.mainWrap.getHeight();this.marker.setHeight(h);this.marker.show();this.marker.alignTo(this.view.getHeaderCell(this.cellIndex),'tl-tl',[-2,0]);this.proxy.setHeight(h);var w=this.cm.getColumnWidth(this.cellIndex);var minw=Math.max(w-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(minw,1000);this.setYConstraint(0,0);this.minX=x-minw;this.maxX=x+1000;this.startPos=x;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,x,y);},handleMouseDown:function(e){var t=this.view.findHeaderCell(e.getTarget());if(t){var xy=this.view.fly(t).getXY(),x=xy[0],y=xy[1];var exy=e.getXY(),ex=exy[0],ey=exy[1];var w=t.offsetWidth,adjust=false;if((ex-x)<=this.hw){adjust=-1;}else if((x+w)-ex<=this.hw){adjust=0;}
+return true;},isHideableColumn:function(c){return!c.hidden&&!c.fixed;},beforeColMenuShow:function(){var cm=this.cm,colCount=cm.getColumnCount();this.colMenu.removeAll();for(var i=0;i<colCount;i++){if(cm.config[i].fixed!==true&&cm.config[i].hideable!==false){this.colMenu.add(new Ext.menu.CheckItem({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false,disabled:cm.config[i].hideable===false}));}}},handleHdDown:function(e,t){if(Ext.fly(t).hasClass('x-grid3-hd-btn')){e.stopEvent();var hd=this.findHeaderCell(t);Ext.fly(hd).addClass('x-grid3-hd-menu-open');var index=this.getCellIndex(hd);this.hdCtxIndex=index;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(index));ms.get("desc").setDisabled(!cm.isSortable(index));this.hmenu.on("hide",function(){Ext.fly(hd).removeClass('x-grid3-hd-menu-open');},this,{single:true});this.hmenu.show(t,"tl-bl?");}},handleHdOver:function(e,t){var hd=this.findHeaderCell(t);if(hd&&!this.headersDisabled){this.activeHd=hd;this.activeHdIndex=this.getCellIndex(hd);var fly=this.fly(hd);this.activeHdRegion=fly.getRegion();if(!this.cm.isMenuDisabled(this.activeHdIndex)){fly.addClass("x-grid3-hd-over");this.activeHdBtn=fly.child('.x-grid3-hd-btn');if(this.activeHdBtn){this.activeHdBtn.dom.style.height=(hd.firstChild.offsetHeight-1)+'px';}}}},handleHdMove:function(e,t){if(this.activeHd&&!this.headersDisabled){var hw=this.splitHandleWidth||5;var r=this.activeHdRegion;var x=e.getPageX();var ss=this.activeHd.style;if(x-r.left<=hw&&this.cm.isResizable(this.activeHdIndex-1)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'e-resize':'col-resize';}else if(r.right-x<=(!this.activeHdBtn?hw:2)&&this.cm.isResizable(this.activeHdIndex)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'w-resize':'col-resize';}else{ss.cursor='';}}},handleHdOut:function(e,t){var hd=this.findHeaderCell(t);if(hd&&(!Ext.isIE||!e.within(hd,true))){this.activeHd=null;this.fly(hd).removeClass("x-grid3-hd-over");hd.style.cursor='';}},hasRows:function(){var fc=this.mainBody.dom.firstChild;return fc&&fc.className!='x-grid-empty';},bind:function(d,c){this.initData(d,c);}});Ext.grid.GridView.SplitDragZone=function(grid,hd){this.grid=grid;this.view=grid.getView();this.marker=this.view.resizeMarker;this.proxy=this.view.resizeProxy;Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this,hd,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.scroll=false;this.hw=this.view.splitHandleWidth||5;};Ext.extend(Ext.grid.GridView.SplitDragZone,Ext.dd.DDProxy,{b4StartDrag:function(x,y){this.view.headersDisabled=true;var h=this.view.mainWrap.getHeight();this.marker.setHeight(h);this.marker.show();this.marker.alignTo(this.view.getHeaderCell(this.cellIndex),'tl-tl',[-2,0]);this.proxy.setHeight(h);var w=this.cm.getColumnWidth(this.cellIndex);var minw=Math.max(w-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(minw,1000);this.setYConstraint(0,0);this.minX=x-minw;this.maxX=x+1000;this.startPos=x;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,x,y);},handleMouseDown:function(e){var t=this.view.findHeaderCell(e.getTarget());if(t){var xy=this.view.fly(t).getXY(),x=xy[0],y=xy[1];var exy=e.getXY(),ex=exy[0];var w=t.offsetWidth,adjust=false;if((ex-x)<=this.hw){adjust=-1;}else if((x+w)-ex<=this.hw){adjust=0;}
 if(adjust!==false){this.cm=this.grid.colModel;var ci=this.view.getCellIndex(t);if(adjust==-1){if(ci+adjust<0){return;}
 while(this.cm.isHidden(ci+adjust)){--adjust;if(ci+adjust<0){return;}}}
 this.cellIndex=ci+adjust;this.split=t.dom;if(this.cm.isResizable(this.cellIndex)&&!this.cm.isFixed(this.cellIndex)){Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this,arguments);}}else if(this.view.columnDrag){this.view.columnDrag.callHandleMouseDown(e);}}},endDrag:function(e){this.marker.hide();var v=this.view;var endX=Math.max(this.minX,e.getPageX());var diff=endX-this.startPos;v.onColumnSplitterMoved(this.cellIndex,this.cm.getColumnWidth(this.cellIndex)+diff);setTimeout(function(){v.headersDisabled=false;},50);},autoOffset:function(){this.setDelta(0,0);}});
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/BorderLayout-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/BorderLayout-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/BorderLayout-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -23,18 +23,18 @@
 if(Ext.isIE&&Ext.isStrict){target.repaint();}},destroy:function(){var r=['north','south','east','west'];for(var i=0;i<r.length;i++){var region=this[r[i]];if(region){if(region.destroy){region.destroy();}else if(region.split){region.split.destroy(true);}}}
 Ext.layout.BorderLayout.superclass.destroy.call(this);}});Ext.layout.BorderLayout.Region=function(layout,config,pos){Ext.apply(this,config);this.layout=layout;this.position=pos;this.state={};if(typeof this.margins=='string'){this.margins=this.layout.parseMargins(this.margins);}
 this.margins=Ext.applyIf(this.margins||{},this.defaultMargins);if(this.collapsible){if(typeof this.cmargins=='string'){this.cmargins=this.layout.parseMargins(this.cmargins);}
-if(this.collapseMode=='mini'&&!this.cmargins){this.cmargins={left:0,top:0,right:0,bottom:0};}else{this.cmargins=Ext.applyIf(this.cmargins||{},pos=='north'||pos=='south'?this.defaultNSCMargins:this.defaultEWCMargins);}}};Ext.layout.BorderLayout.Region.prototype={collapsible:false,split:false,floatable:true,minWidth:50,minHeight:50,defaultMargins:{left:0,top:0,right:0,bottom:0},defaultNSCMargins:{left:5,top:5,right:5,bottom:5},defaultEWCMargins:{left:5,top:0,right:5,bottom:0},isCollapsed:false,render:function(ct,p){this.panel=p;p.el.enableDisplayMode();this.targetEl=ct;this.el=p.el;var gs=p.getState,ps=this.position;p.getState=function(){return Ext.apply(gs.call(p)||{},this.state);}.createDelegate(this);if(ps!='center'){p.allowQueuedExpand=false;p.on({beforecollapse:this.beforeCollapse,collapse:this.onCollapse,beforeexpand:this.beforeExpand,expand:this.onExpand,hide:this.onHide,show:this.onShow,scope:this});if(this.collapsible){p.collapseEl='el';p.slideAnchor=this.getSlideAnchor();}
+if(this.collapseMode=='mini'&&!this.cmargins){this.cmargins={left:0,top:0,right:0,bottom:0};}else{this.cmargins=Ext.applyIf(this.cmargins||{},pos=='north'||pos=='south'?this.defaultNSCMargins:this.defaultEWCMargins);}}};Ext.layout.BorderLayout.Region.prototype={collapsible:false,split:false,floatable:true,minWidth:50,minHeight:50,defaultMargins:{left:0,top:0,right:0,bottom:0},defaultNSCMargins:{left:5,top:5,right:5,bottom:5},defaultEWCMargins:{left:5,top:0,right:5,bottom:0},floatingZIndex:100,isCollapsed:false,render:function(ct,p){this.panel=p;p.el.enableDisplayMode();this.targetEl=ct;this.el=p.el;var gs=p.getState,ps=this.position;p.getState=function(){return Ext.apply(gs.call(p)||{},this.state);}.createDelegate(this);if(ps!='center'){p.allowQueuedExpand=false;p.on({beforecollapse:this.beforeCollapse,collapse:this.onCollapse,beforeexpand:this.beforeExpand,expand:this.onExpand,hide:this.onHide,show:this.onShow,scope:this});if(this.collapsible){p.collapseEl='el';p.slideAnchor=this.getSlideAnchor();}
 if(p.tools&&p.tools.toggle){p.tools.toggle.addClass('x-tool-collapse-'+ps);p.tools.toggle.addClassOnOver('x-tool-collapse-'+ps+'-over');}}},getCollapsedEl:function(){if(!this.collapsedEl){if(!this.toolTemplate){var tt=new Ext.Template('<div class="x-tool x-tool-{id}">&#160;</div>');tt.disableFormats=true;tt.compile();Ext.layout.BorderLayout.Region.prototype.toolTemplate=tt;}
 this.collapsedEl=this.targetEl.createChild({cls:"x-layout-collapsed x-layout-collapsed-"+this.position,id:this.panel.id+'-xcollapsed'});this.collapsedEl.enableDisplayMode('block');if(this.collapseMode=='mini'){this.collapsedEl.addClass('x-layout-cmini-'+this.position);this.miniCollapsedEl=this.collapsedEl.createChild({cls:"x-layout-mini x-layout-mini-"+this.position,html:"&#160;"});this.miniCollapsedEl.addClassOnOver('x-layout-mini-over');this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on('click',this.onExpandClick,this,{stopEvent:true});}else{var t=this.toolTemplate.append(this.collapsedEl.dom,{id:'expand-'+this.position},true);t.addClassOnOver('x-tool-expand-'+this.position+'-over');t.on('click',this.onExpandClick,this,{stopEvent:true});if(this.floatable!==false){this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this.collapseClick,this);}}}
 return this.collapsedEl;},onExpandClick:function(e){if(this.isSlid){this.afterSlideIn();this.panel.expand(false);}else{this.panel.expand();}},onCollapseClick:function(e){this.panel.collapse();},beforeCollapse:function(p,animate){this.lastAnim=animate;if(this.splitEl){this.splitEl.hide();}
 this.getCollapsedEl().show();this.panel.el.setStyle('z-index',100);this.isCollapsed=true;this.layout.layout();},onCollapse:function(animate){this.panel.el.setStyle('z-index',1);if(this.lastAnim===false||this.panel.animCollapse===false){this.getCollapsedEl().dom.style.visibility='visible';}else{this.getCollapsedEl().slideIn(this.panel.slideAnchor,{duration:.2});}
 this.state.collapsed=true;this.panel.saveState();},beforeExpand:function(animate){var c=this.getCollapsedEl();this.el.show();if(this.position=='east'||this.position=='west'){this.panel.setSize(undefined,c.getHeight());}else{this.panel.setSize(c.getWidth(),undefined);}
-c.hide();c.dom.style.visibility='hidden';this.panel.el.setStyle('z-index',100);},onExpand:function(){this.isCollapsed=false;if(this.splitEl){this.splitEl.show();}
+c.hide();c.dom.style.visibility='hidden';this.panel.el.setStyle('z-index',this.floatingZIndex);},onExpand:function(){this.isCollapsed=false;if(this.splitEl){this.splitEl.show();}
 this.layout.layout();this.panel.el.setStyle('z-index',1);this.state.collapsed=false;this.panel.saveState();},collapseClick:function(e){if(this.isSlid){e.stopPropagation();this.slideIn();}else{e.stopPropagation();this.slideOut();}},onHide:function(){if(this.isCollapsed){this.getCollapsedEl().hide();}else if(this.splitEl){this.splitEl.hide();}},onShow:function(){if(this.isCollapsed){this.getCollapsedEl().show();}else if(this.splitEl){this.splitEl.show();}},isVisible:function(){return!this.panel.hidden;},getMargins:function(){return this.isCollapsed&&this.cmargins?this.cmargins:this.margins;},getSize:function(){return this.isCollapsed?this.getCollapsedEl().getSize():this.panel.getSize();},setPanel:function(panel){this.panel=panel;},getMinWidth:function(){return this.minWidth;},getMinHeight:function(){return this.minHeight;},applyLayoutCollapsed:function(box){var ce=this.getCollapsedEl();ce.setLeftTop(box.x,box.y);ce.setSize(box.width,box.height);},applyLayout:function(box){if(this.isCollapsed){this.applyLayoutCollapsed(box);}else{this.panel.setPosition(box.x,box.y);this.panel.setSize(box.width,box.height);}},beforeSlide:function(){this.panel.beforeEffect();},afterSlide:function(){this.panel.afterEffect();},initAutoHide:function(){if(this.autoHide!==false){if(!this.autoHideHd){var st=new Ext.util.DelayedTask(this.slideIn,this);this.autoHideHd={"mouseout":function(e){if(!e.within(this.el,true)){st.delay(500);}},"mouseover":function(e){st.cancel();},scope:this};}
 this.el.on(this.autoHideHd);}},clearAutoHide:function(){if(this.autoHide!==false){this.el.un("mouseout",this.autoHideHd.mouseout);this.el.un("mouseover",this.autoHideHd.mouseover);}},clearMonitor:function(){Ext.getDoc().un("click",this.slideInIf,this);},slideOut:function(){if(this.isSlid||this.el.hasActiveFx()){return;}
 this.isSlid=true;var ts=this.panel.tools;if(ts&&ts.toggle){ts.toggle.hide();}
 this.el.show();if(this.position=='east'||this.position=='west'){this.panel.setSize(undefined,this.collapsedEl.getHeight());}else{this.panel.setSize(this.collapsedEl.getWidth(),undefined);}
-this.restoreLT=[this.el.dom.style.left,this.el.dom.style.top];this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.el.setStyle("z-index",102);if(this.animFloat!==false){this.beforeSlide();this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this);},scope:this,block:true});}else{this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this);}},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");this.el.dom.style.left=this.restoreLT[0];this.el.dom.style.top=this.restoreLT[1];var ts=this.panel.tools;if(ts&&ts.toggle){ts.toggle.show();}},slideIn:function(cb){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(cb);return;}
+this.restoreLT=[this.el.dom.style.left,this.el.dom.style.top];this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.el.setStyle("z-index",this.floatingZIndex+2);if(this.animFloat!==false){this.beforeSlide();this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this);},scope:this,block:true});}else{this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this);}},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");this.el.dom.style.left=this.restoreLT[0];this.el.dom.style.top=this.restoreLT[1];var ts=this.panel.tools;if(ts&&ts.toggle){ts.toggle.show();}},slideIn:function(cb){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(cb);return;}
 this.isSlid=false;if(this.animFloat!==false){this.beforeSlide();this.el.slideOut(this.getSlideAnchor(),{callback:function(){this.el.hide();this.afterSlide();this.afterSlideIn();Ext.callback(cb);},scope:this,block:true});}else{this.el.hide();this.afterSlideIn();}},slideInIf:function(e){if(!e.within(this.el)){this.slideIn();}},anchors:{"west":"left","east":"right","north":"top","south":"bottom"},sanchors:{"west":"l","east":"r","north":"t","south":"b"},canchors:{"west":"tl-tr","east":"tr-tl","north":"tl-bl","south":"bl-tl"},getAnchor:function(){return this.anchors[this.position];},getCollapseAnchor:function(){return this.canchors[this.position];},getSlideAnchor:function(){return this.sanchors[this.position];},getAlignAdj:function(){var cm=this.cmargins;switch(this.position){case"west":return[0,0];break;case"east":return[0,0];break;case"north":return[0,0];break;case"south":return[0,0];break;}},getExpandAdj:function(){var c=this.collapsedEl,cm=this.cmargins;switch(this.position){case"west":return[-(cm.right+c.getWidth()+cm.left),0];break;case"east":return[cm.right+c.getWidth()+cm.left,0];break;case"north":return[0,-(cm.top+cm.bottom+c.getHeight())];break;case"south":return[0,cm.top+cm.bottom+c.getHeight()];break;}}};Ext.layout.BorderLayout.SplitRegion=function(layout,config,pos){Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this,layout,config,pos);this.applyLayout=this.applyFns[pos];};Ext.extend(Ext.layout.BorderLayout.SplitRegion,Ext.layout.BorderLayout.Region,{splitTip:"Drag to resize.",collapsibleSplitTip:"Drag to resize. Double click to hide.",useSplitTips:false,splitSettings:{north:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.TOP,maxFn:'getVMaxSize',minProp:'minHeight',maxProp:'maxHeight'},south:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.BOTTOM,maxFn:'getVMaxSize',minProp:'minHeight',maxProp:'maxHeight'},east:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.RIGHT,maxFn:'getHMaxSize',minProp:'minWidth',maxProp:'maxWidth'},west:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.LEFT,maxFn:'getHMaxSize',minProp:'minWidth',maxProp:'maxWidth'}},applyFns:{west:function(box){if(this.isCollapsed){return this.applyLayoutCollapsed(box);}
 var sd=this.splitEl.dom,s=sd.style;this.panel.setPosition(box.x,box.y);var sw=sd.offsetWidth;s.left=(box.x+box.width-sw)+'px';s.top=(box.y)+'px';s.height=Math.max(0,box.height)+'px';this.panel.setSize(box.width-sw,box.height);},east:function(box){if(this.isCollapsed){return this.applyLayoutCollapsed(box);}
 var sd=this.splitEl.dom,s=sd.style;var sw=sd.offsetWidth;this.panel.setPosition(box.x+sw,box.y);s.left=(box.x)+'px';s.top=(box.y)+'px';s.height=Math.max(0,box.height)+'px';this.panel.setSize(box.width-sw,box.height);},north:function(box){if(this.isCollapsed){return this.applyLayoutCollapsed(box);}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/FormLayout-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/FormLayout-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/FormLayout-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -12,4 +12,4 @@
 if(ct.labelAlign=='top'){this.labelStyle="width:auto;";this.labelAdjust=0;this.elementStyle="padding-left:0;";}}
 if(!this.fieldTpl){var t=new Ext.Template('<div class="x-form-item {5}" tabIndex="-1">','<label for="{0}" style="{2}" class="x-form-item-label">{1}{4}</label>','<div class="x-form-element" id="x-form-el-{0}" style="{3}">','</div><div class="{6}"></div>','</div>');t.disableFormats=true;t.compile();Ext.layout.FormLayout.prototype.fieldTpl=t;}},renderItem:function(c,position,target){if(c&&!c.rendered&&(c.isFormField||c.fieldLabel)&&c.inputType!='hidden'){var args=[c.id,c.fieldLabel,c.labelStyle||this.labelStyle||'',this.elementStyle||'',typeof c.labelSeparator=='undefined'?this.labelSeparator:c.labelSeparator,(c.itemCls||this.container.itemCls||'')+(c.hideLabel?' x-hide-label':''),c.clearCls||'x-form-clear-left'];if(typeof position=='number'){position=target.dom.childNodes[position]||null;}
 if(position){this.fieldTpl.insertBefore(position,args);}else{this.fieldTpl.append(target,args);}
-c.render('x-form-el-'+c.id);}else{Ext.layout.FormLayout.superclass.renderItem.apply(this,arguments);}},adjustWidthAnchor:function(value,comp){return value-(comp.isFormField?(comp.hideLabel?0:this.labelAdjust):0);},isValidParent:function(c,target){return true;}});Ext.Container.LAYOUTS['form']=Ext.layout.FormLayout;
\ No newline at end of file
+c.render('x-form-el-'+c.id);}else{Ext.layout.FormLayout.superclass.renderItem.apply(this,arguments);}},adjustWidthAnchor:function(value,comp){return value-(comp.isFormField||comp.fieldLabel?(comp.hideLabel?0:this.labelAdjust):0);},isValidParent:function(c,target){return true;}});Ext.Container.LAYOUTS['form']=Ext.layout.FormLayout;
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/menu/BaseItem-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/menu/BaseItem-min.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/menu/BaseItem-min.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -7,6 +7,6 @@
  */
 
 
-Ext.menu.BaseItem=function(config){Ext.menu.BaseItem.superclass.constructor.call(this,config);this.addEvents('click','activate','deactivate');if(this.handler){this.on("click",this.handler,this.scope);}};Ext.extend(Ext.menu.BaseItem,Ext.Component,{canActivate:false,activeClass:"x-menu-item-active",hideOnClick:true,hideDelay:100,ctype:"Ext.menu.BaseItem",actionMode:"container",render:function(container,parentMenu){this.parentMenu=parentMenu;Ext.menu.BaseItem.superclass.render.call(this,container);this.container.menuItemId=this.itemId||this.id;},onRender:function(container,position){this.el=Ext.get(this.el);container.dom.appendChild(this.el.dom);},setHandler:function(handler,scope){if(this.handler){this.un("click",this.handler,this.scope);}
+Ext.menu.BaseItem=function(config){Ext.menu.BaseItem.superclass.constructor.call(this,config);this.addEvents('click','activate','deactivate');if(this.handler){this.on("click",this.handler,this.scope);}};Ext.extend(Ext.menu.BaseItem,Ext.Component,{canActivate:false,activeClass:"x-menu-item-active",hideOnClick:true,clickHideDelay:1,ctype:"Ext.menu.BaseItem",actionMode:"container",render:function(container,parentMenu){this.parentMenu=parentMenu;Ext.menu.BaseItem.superclass.render.call(this,container);this.container.menuItemId=this.itemId||this.id;},onRender:function(container,position){this.el=Ext.get(this.el);container.dom.appendChild(this.el.dom);},setHandler:function(handler,scope){if(this.handler){this.un("click",this.handler,this.scope);}
 this.on("click",this.handler=handler,this.scope=scope);},onClick:function(e){if(!this.disabled&&this.fireEvent("click",this,e)!==false&&this.parentMenu.fireEvent("itemclick",this,e)!==false){this.handleClick(e);}else{e.stopEvent();}},activate:function(){if(this.disabled){return false;}
-var li=this.container;li.addClass(this.activeClass);this.region=li.getRegion().adjust(2,2,-2,-2);this.fireEvent("activate",this);return true;},deactivate:function(){this.container.removeClass(this.activeClass);this.fireEvent("deactivate",this);},shouldDeactivate:function(e){return!this.region||!this.region.contains(e.getPoint());},handleClick:function(e){if(this.hideOnClick){this.parentMenu.hide.defer(this.hideDelay,this.parentMenu,[true]);}},expandMenu:function(autoActivate){},hideMenu:function(){}});
\ No newline at end of file
+var li=this.container;li.addClass(this.activeClass);this.region=li.getRegion().adjust(2,2,-2,-2);this.fireEvent("activate",this);return true;},deactivate:function(){this.container.removeClass(this.activeClass);this.fireEvent("deactivate",this);},shouldDeactivate:function(e){return!this.region||!this.region.contains(e.getPoint());},handleClick:function(e){if(this.hideOnClick){this.parentMenu.hide.defer(this.clickHideDelay,this.parentMenu,[true]);}},expandMenu:function(autoActivate){},hideMenu:function(){}});
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/examples/button/buttons.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/button/buttons.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/button/buttons.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -19,7 +19,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css"/>
 </head>
 <body id="docbody">
-<script type="text/javascript" src="../examples.js"></script>
+<script type="text/javascript" src="../shared/examples.js"></script>
 <!-- EXAMPLES -->
 <h1>Ext Buttons</h1>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/chart/charts.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/chart/charts.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/chart/charts.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -59,7 +59,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Charts</h1>
 <p>The js is not minified so it is readable. See <a href="charts.js">charts.js</a>.</p>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/core/spotlight.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/core/spotlight.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/core/spotlight.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -24,7 +24,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 
 <h1>Spotlight</h1>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/core/templates.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/core/templates.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/core/templates.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -28,7 +28,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 
 <h1>Templates</h1>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/debug/debug-console.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/debug/debug-console.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/debug/debug-console.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -17,7 +17,7 @@
 
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
     <h1>Ext Debug Console</h1>
     <div style="width:700px">
     <p>Included in ext-all-debug.js is the Ext Debug Console. It offers a limited amount of <a href="http://getfirebug.com";>FireBug</a>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/desktop/desktop.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/desktop/desktop.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/desktop/desktop.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -9,7 +9,7 @@
  	<script type="text/javascript" src="../../adapter/ext/ext-base.js"></script>
  	<!-- ENDLIBS -->
 
-    <script type="text/javascript" src="../../ext-all-detail.js"></script>
+    <script type="text/javascript" src="../../ext-all-debug.js"></script>
 
     <!-- DESKTOP -->
     <script type="text/javascript" src="js/StartMenu.js"></script>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/form/absform.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/form/absform.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/form/absform.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -17,7 +17,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css"/>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script>
+<script type="text/javascript" src="../shared/examples.js"></script>
 <!-- EXAMPLES -->
 <h1>Absolute Layout with Forms</h1>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/form/anchoring.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/form/anchoring.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/form/anchoring.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -17,7 +17,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css"/>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script>
+<script type="text/javascript" src="../shared/examples.js"></script>
 <!-- EXAMPLES -->
 <h1>Anchor Layout with Forms</h1>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/form/combos.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/form/combos.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/form/combos.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -3,8 +3,8 @@
 <head>
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <title>Combo Boxes</title>
-    <link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
-    <link rel="stylesheet" type="text/css" href="../../resources/css/xtheme-gray.css" />
+    <link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
+    <link rel="stylesheet" type="text/css" href="../../resources/css/xtheme-gray.css" />
 
     <!-- GC -->
  	<!-- LIBS -->
@@ -24,7 +24,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Combo Boxes</h1>
 <p>The js is not minified so it is readable. See <a href="combos.js">combos.js</a>.</p>
 
@@ -32,55 +32,55 @@
 <b>Data Sources</b><br />
 The combo box can use any type of Ext.data.Store as its data source.
     This means your data can be XML, JSON, arrays or any other supported format. It can be loaded using 
-    Ajax, via script tags or locally. This combo uses local data from a JS array:</p>
-<div>
-    <input type="text" id="local-states" size="20"/>
-</div>
-<div id="state-combo-code-panel" style="margin-top:10px">
-<pre id="state-combo-code" class="code"><code>// simple array store
-var store = new Ext.data.SimpleStore({
-    fields: ['abbr', 'state'],
-    data : exampleData
-});
-var combo = new Ext.form.ComboBox({
-    store: store,
-    displayField:'state',
-    typeAhead: true,
-    mode: 'local',
-    triggerAction: 'all',
-    emptyText:'Select a state...',
-    selectOnFocus:true,
-    applyTo: 'local-states'
-});
-</code></pre></div>
-<br />
+    Ajax, via script tags or locally. This combo uses local data from a JS array:</p>
+<div>
+    <input type="text" id="local-states" size="20"/>
+</div>
+<div id="state-combo-code-panel" style="margin-top:10px">
+<pre id="state-combo-code" class="code"><code>// simple array store
+var store = new Ext.data.SimpleStore({
+    fields: ['abbr', 'state'],
+    data : exampleData
+});
+var combo = new Ext.form.ComboBox({
+    store: store,
+    displayField:'state',
+    typeAhead: true,
+    mode: 'local',
+    triggerAction: 'all',
+    emptyText:'Select a state...',
+    selectOnFocus:true,
+    applyTo: 'local-states'
+});
+</code></pre></div>
+<br />
 
-<p>
-	The combo below uses the same data, but also illustrates how to use an optional
-	custom template to create custom UI renditions for list items. In this case,
-	each item has a popup QuickTip which displays the state's nickname when hovered over.
-</p>
-<div>
-    <input type="text" id="local-states-with-qtip" size="20"/>
-</div>
-<div id="state-combo-qtip-code-panel" style="margin-top:10px">
-<pre id="state-combo-qtip-code" class="code"><code>// simple array store
-var store = new Ext.data.SimpleStore({
-    fields: ['abbr', 'state', 'nick'],
-    data : exampleData
-});
-var comboWithTooltip = new Ext.form.ComboBox({
-    tpl: '&lt;tpl for=".">&lt;div ext:qtip="{state}. {nick}" class="x-combo-list-item">{state}&lt;/div>&lt;/tpl>',
-    store: store,
-    displayField:'state',
-    typeAhead: true,
-    mode: 'local',
-    triggerAction: 'all',
-    emptyText:'Select a state...',
-    selectOnFocus:true,
-    applyTo: 'local-states-with-qtip'
-});
-</code></pre></div>
+<p>
+	The combo below uses the same data, but also illustrates how to use an optional
+	custom template to create custom UI renditions for list items. In this case,
+	each item has a popup QuickTip which displays the state's nickname when hovered over.
+</p>
+<div>
+    <input type="text" id="local-states-with-qtip" size="20"/>
+</div>
+<div id="state-combo-qtip-code-panel" style="margin-top:10px">
+<pre id="state-combo-qtip-code" class="code"><code>// simple array store
+var store = new Ext.data.SimpleStore({
+    fields: ['abbr', 'state', 'nick'],
+    data : exampleData
+});
+var comboWithTooltip = new Ext.form.ComboBox({
+    tpl: '&lt;tpl for=".">&lt;div ext:qtip="{state}. {nick}" class="x-combo-list-item">{state}&lt;/div>&lt;/tpl>',
+    store: store,
+    displayField:'state',
+    typeAhead: true,
+    mode: 'local',
+    triggerAction: 'all',
+    emptyText:'Select a state...',
+    selectOnFocus:true,
+    applyTo: 'local-states-with-qtip'
+});
+</code></pre></div>
 <br />
 
 <p>
@@ -100,7 +100,7 @@
 });
 </code></pre></div>
 <br />
-
+
 <p>
 <b>Unobtrusive</b><br />
 The combo box can very easily be used to convert existing select elements into auto-completing, filtering combos.
@@ -213,7 +213,7 @@
 <option value="WY">Wyoming</option>
 </select>
 </p>
-<div id="transformed-combo-code-panel" style="margin-top:10px">
+<div id="transformed-combo-code-panel" style="margin-top:10px">
 <pre id="transformed-combo-code" class="code"><code>var converted = new Ext.form.ComboBox({
     typeAhead: true,
     triggerAction: 'all',

Modified: mickael/trunk/ext/v3.0.0-a1/examples/form/custom.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/form/custom.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/form/custom.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -45,7 +45,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <p>
     <b>Custom Form Fields</b><br />
     Ext provides many types of form fields to build interactive and rich forms. However, it also

Modified: mickael/trunk/ext/v3.0.0-a1/examples/form/dynamic.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/form/dynamic.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/form/dynamic.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -20,7 +20,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css"/>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script>
+<script type="text/javascript" src="../shared/examples.js"></script>
 <!-- EXAMPLES -->
 <h1>Dynamic Forms built with JavaScript</h1>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/form/form-grid.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/form/form-grid.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/form/form-grid.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -12,41 +12,41 @@
 
     <script type="text/javascript" src="../../ext-all-debug.js"></script>
 
-    <script type="text/javascript" src="../code-display.js"></script>
-    <script type="text/javascript" src="form-grid.js"></script>
+    <script type="text/javascript" src="../code-display.js"></script>
+    <script type="text/javascript" src="form-grid.js"></script>
     <link rel="stylesheet" type="text/css" href="forms.css"/>
 
     <!-- Common Styles for the examples -->
     <link rel="stylesheet" type="text/css" href="../examples.css"/>
-    <style type="text/css">
-        p {
-            width: 750px;
-        }
-        .ext-ie .x-form-check-wrap, .ext-gecko .x-form-check-wrap {
-            padding-top: 3px;
-        }
-        fieldset legend {
-            white-space: nowrap;
-        }
-    </style>
+    <style type="text/css">
+        p {
+            width: 750px;
+        }
+        .ext-ie .x-form-check-wrap, .ext-gecko .x-form-check-wrap {
+            padding-top: 3px;
+        }
+        fieldset legend {
+            white-space: nowrap;
+        }
+    </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script>
+<script type="text/javascript" src="../shared/examples.js"></script>
 <!-- EXAMPLES -->
 <h1>Dynamic Form interacting with an embedded Grid</h1>
 
 <p>
-    This Form demonstrates the fact that by virtue of inheriting from the Ext <b><tt>Container</tt></b>
-    class, an Ext.form.FormPanel can contain any Ext <b><tt>Component</tt></b>. This includes all the
+    This Form demonstrates the fact that by virtue of inheriting from the Ext <b><tt>Container</tt></b>
+    class, an Ext.form.FormPanel can contain any Ext <b><tt>Component</tt></b>. This includes all the
     subclasses of Ext.Panel, including the GridPanel.
-</p>
-<p>
-    The Grid demonstrates the use of creation of derived fields in a Record created using a custom
-    <b><tt>convert</tt></b> function, and the use of column renderers.
-</p>
-<p>
-    The Form demonstrates the use of radio buttons grouped by name being set by the value of the derived
-    'rating' field.
-</p>
+</p>
+<p>
+    The Grid demonstrates the use of creation of derived fields in a Record created using a custom
+    <b><tt>convert</tt></b> function, and the use of column renderers.
+</p>
+<p>
+    The Form demonstrates the use of radio buttons grouped by name being set by the value of the derived
+    'rating' field.
+</p>
 </body>
 </html>
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/examples/form/forum-search.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/form/forum-search.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/form/forum-search.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -22,7 +22,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <p>
     <b>Combo with Templates and Ajax</b><br />
     This is a more advanced example that shows how you can combine paging, Ext.Template and a remote data store

Modified: mickael/trunk/ext/v3.0.0-a1/examples/form/xml-form.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/form/xml-form.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/form/xml-form.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -19,7 +19,7 @@
 <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Loading/Saving a Dynamic Form using XML</h1>
 <p>
     This is a very simple example of using XML for load and submit of data with an Ext dynamic form.

Modified: mickael/trunk/ext/v3.0.0-a1/examples/grid/array-grid.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/grid/array-grid.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/grid/array-grid.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -19,7 +19,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Array Grid Example</h1>
 <p>This example shows how to create a grid from Array data.</p>
 <p>Note that the js is not minified so it is readable. See <a href="array-grid.js">array-grid.js</a>.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/grid/array-grid.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/grid/array-grid.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/grid/array-grid.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -87,6 +87,4 @@
         title:'Array Grid'
     });
     grid.render('grid-example');
-    
-    grid.getSelectionModel().selectFirstRow();
 });
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/examples/grid/custom-grid.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/grid/custom-grid.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/grid/custom-grid.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -18,7 +18,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Property Grid</h1>
 
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/grid/edit-grid.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/grid/edit-grid.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/grid/edit-grid.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -20,7 +20,7 @@
 <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Editor Grid Example</h1>
 <p>This example shows how to create a grid with inline editing.</p>
 <p>Note that the js is not minified so it is readable. See <a href="edit-grid.js">edit-grid.js</a>.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/grid/from-markup.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/grid/from-markup.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/grid/from-markup.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -20,7 +20,7 @@
 </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>From Markup Grid Example</h1>
 <p>This example shows how to create a grid with from an existing, unformatted HTML table.</p>
 <p>Note that the js is not minified so it is readable. See <a href="from-markup.js">from-markup.js</a>.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/grid/grid3.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/grid/grid3.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/grid/grid3.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -46,7 +46,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>GridView3 Example</h1>
 <p>Note that the js is not minified so it is readable. See <a href="grid3.js">grid3.js</a>.</p>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/grid/grouping.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/grid/grouping.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/grid/grouping.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -45,7 +45,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>GridView3 Grouping</h1>
 <p>Note that the js is not minified so it is readable. See <a href="grouping.js">grouping.js</a>.</p>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/grid/paging.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/grid/paging.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/grid/paging.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -20,7 +20,7 @@
 <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Paging Grid Example</h1>
 <p>This example shows how to create a grid with paging. This grid uses a ScriptTagProxy to fetch cross-domain
     remote data (from the Ext forums).</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/grid/totals.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/grid/totals.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/grid/totals.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -54,7 +54,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Group Summary Plugin</h1>
 <p>Note that the js is not minified so it is readable. See <a href="totals.js">totals.js</a>.</p>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/grid/xml-grid.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/grid/xml-grid.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/grid/xml-grid.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -18,7 +18,7 @@
 <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>XML Grid Example</h1>
 <p>This example shows how to load a grid with XML data.</p>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/layout/accordion.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/layout/accordion.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/layout/accordion.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -84,6 +84,6 @@
     </script>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 </body>
 </html>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/layout/anchor.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/layout/anchor.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/layout/anchor.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -46,6 +46,6 @@
     </script>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 </body>
 </html>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/layout/column.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/layout/column.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/layout/column.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -115,6 +115,6 @@
 	</script>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
   </body>
 </html>
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/examples/layout/complex.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/layout/complex.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/layout/complex.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -142,7 +142,7 @@
 	</script>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
   <div id="west">
     <p>Hi. I'm the west panel.</p>
   </div>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/layout/table.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/layout/table.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/layout/table.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -54,6 +54,6 @@
     </script>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 </body>
 </html>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/locale/dutch-form.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/locale/dutch-form.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/locale/dutch-form.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -22,7 +22,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Localization with Ext</h1>
 <p>
     This demonstrates a dutch location of Ext using the form component. It includes the localization

Modified: mickael/trunk/ext/v3.0.0-a1/examples/locale/multi-lang.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/locale/multi-lang.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/locale/multi-lang.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -14,7 +14,7 @@
 <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body class="x-gray">
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <script type="text/javascript">
 var params = Ext.urlDecode(window.location.search.substring(1));
 if (params.lang) {

Modified: mickael/trunk/ext/v3.0.0-a1/examples/menu/actions.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/menu/actions.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/menu/actions.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -19,7 +19,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Using Ext.Action</h1>
 <p>Actions let you share handlers, configuration and updates across Toolbar, Button and Menu components.</p>
 <p>The js is not minified so it is readable. See <a href="actions.js">actions.js</a>.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/menu/menus.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/menu/menus.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/menu/menus.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -20,7 +20,7 @@
 <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Toolbar with Menus</h1>
 <p>The js is not minified so it is readable. See <a href="menus.js">menus.js</a>.</p>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/message-box/msg-box.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/message-box/msg-box.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/message-box/msg-box.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -23,7 +23,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>MessageBox Dialogs</h1>
 <p>The example shows how to use the MessageBox class. Some of the buttons have animations, some are normal.</p>
 <p>The js is not minified so it is readable. See <a href="msg-box.js">msg-box.js</a>.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/organizer/organizer.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/organizer/organizer.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/organizer/organizer.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -20,7 +20,7 @@
 <link rel="stylesheet" type="text/css" href="organizer.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Organizing Images into Albums</h1>
 <p>This example shows demonstrates how you can drop anything into the tree.</p>
 <p>This example also shows how a customized DragZone can be 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/panel/panels.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/panel/panels.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/panel/panels.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -27,7 +27,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Ext.Panel</h1>
 <p>The js is not minified so it is readable. See <a href="panels.js">panels.js</a>.</p>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/portal/portal.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/portal/portal.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/portal/portal.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -20,6 +20,6 @@
 	<script type="text/javascript" src="sample-grid.js"></script>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 </body>
 </html>
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/examples/resizable/basic.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/resizable/basic.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/resizable/basic.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -48,7 +48,7 @@
 </head>
 
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Resizable Examples</h1>
 <p>These examples show how to apply a floating (default) and pinned Resizable component to a standard element.</p>
 <p>Note that the js is not minified so it is readable. See <a href="basic.js">basic.js</a> for the full source code.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/samples.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/samples.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/samples.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -1,213 +1,409 @@
-SamplePanel = Ext.extend(Ext.Panel, {
-    autoHeight: true,
-    frame:true,
-    collapsible: true,
-    cls:'demos',
-
-    afterRender : function(){
-        SamplePanel.superclass.afterRender.call(this);
-        this.tpl.overwrite(this.body, this);
-    },
-
-    tpl : new Ext.XTemplate(
-        '<dl>',
-            '<tpl for="samples">',
-            '<dt><a href="{url}" target="_blank"><img src="shared/screens/{icon}"/></a><br/>',
-                '<span>{text}</span>',
-            '</dt>',
-            '</tpl>',
-        '</dl><div style="clear:both"></div>'
-    )
-});
-
-Ext.EventManager.on(window, 'load', function(){
-
-    var catalog = [{
-        title: 'Combination Samples',
-        samples: [{
-            text: 'Feed Viewer',
-            url: 'feed-viewer/view.html',
-            icon: 'feeds.gif'
-        },{
-            text: 'Simple Tasks (<a href="http://gears.google.com"; target="_blank">Google Gears</a>)',
-            url: 'tasks/tasks.html',
-            icon: 'tasks.gif'
-        },{
-            text: 'Simple Tasks (<a href="http://labs.adobe.com/technologies/air/"; target="_blank">Adobe AIR</a>)',
-            url: 'http://extjs.com/blog/2007/06/29/building-a-desktop-application-with-ext-air-aptana-and-red-bull/',
-            icon: 'air.gif'
-        },{
-            text: 'Image Organizer',
-            url: 'organizer/organizer.html',
-            icon: 'organizer.gif'
-        },{
-            text: 'Web Desktop',
-            url: 'desktop/desktop.html',
-            icon: 'desktop.gif'
-        }]
-    },{
-        title: 'Grids',
-        samples: [{
-            text: 'Basic Array Grid',
-            url: 'grid/array-grid.html',
-            icon: 'grid-array.gif'
-        },{
-            text: 'Editable Grid',
-            url: 'grid/edit-grid.html',
-            icon: 'grid-edit.gif'
-        },{
-            text: 'XML Grid',
-            url: 'grid/xml-grid.html',
-            icon: 'grid-xml.gif'
-        },{
-            text: 'Paging',
-            url: 'grid/paging.html',
-            icon: 'grid-paging.gif'
-        },{
-            text: 'Grouping',
-            url: 'grid/grouping.html',
-            icon: 'grid-grouping.gif'
-        },{
-            text: 'Live Group Summary',
-            url: 'grid/totals.html',
-            icon: 'grid-summary.gif'
-        },{
-            text: 'Customizing: Grid Plugins',
-            url: 'grid/grid3.html',
-            icon: 'grid-plugins.gif'
-        }]
-    },{
-        title: 'Tabs',
-        samples: [{
-            text: 'Basic Tabs',
-            url: 'tabs/tabs.html',
-            icon: 'tabs.gif'
-        },{
-            text: 'Advanced Tabs',
-            url: 'tabs/tabs-adv.html',
-            icon: 'tabs-adv.gif'
-        }]
-    },{
-        title: 'Windows',
-        samples: [{
-            text: 'Hello World',
-            url: 'window/hello.html',
-            icon: 'window.gif'
-        },{
-            text: 'MessageBox',
-            url: 'message-box/msg-box.html',
-            icon: 'msg-box.gif'
-        },{
-            text: 'Layout Window',
-            url: 'window/layout.html',
-            icon: 'window-layout.gif'
-        }]
-    },{
-        title: 'Trees',
-        samples: [{
-            text: 'Drag and Drop Reordering',
-            url: 'tree/reorder.html',
-            icon: 'tree-reorder.gif'
-        },{
-            text: 'Multiple trees',
-            url: 'tree/two-trees.html',
-            icon: 'tree-two.gif'
-        },{
-            text: 'Customizing: Column Tree',
-            url: 'tree/column-tree.html',
-            icon: 'tree-columns.gif'
-        }]
-    },{
-        title: 'Layout Managers',
-        samples: [{
-            text: 'Border Layout',
-            url: 'layout/complex.html',
-            icon: 'border-layout.gif'
-        },{
-            text: 'Anchor Layout',
-            url: 'form/anchoring.html',
-            icon: 'anchor.gif'
-        },{
-            text: 'Customizing: Portals',
-            url: 'portal/portal.html',
-            icon: 'portal.gif'
-        }]
-    },{
-        title: 'ComboBox',
-        samples: [{
-            text: 'Basic ComboBox',
-            url: 'form/combos.html',
-            icon: 'combo.gif'
-        },{
-            text: 'Customizing: ComboBox Templates',
-            url: 'form/forum-search.html',
-            icon: 'combo-custom.gif'
-        }]
-    },{
-        title: 'Forms',
-        samples: [{
-            text: 'Dynamic Forms',
-            url: 'form/dynamic.html',
-            icon: 'form-dynamic.gif'
-        },{
-            text: 'Ajax with XML Forms',
-            url: 'form/xml-form.html',
-            icon: 'form-xml.gif'
-        },{
-            text: 'Customizing: Search Field',
-            url: 'form/custom.html',
-            icon: 'form-custom.gif'
-        }]
-    },{
-        title: 'Toolbars and Menus',
-        samples: [{
-            text: 'Basic Toolbar',
-            url: 'menu/menus.html',
-            icon: 'toolbar.gif'
-        },{
-            text: 'Ext Actions',
-            url: 'menu/actions.html',
-            icon: 'toolbar-actions.gif'
-        }]
-    },{
-        title: 'Miscellaneous',
-        samples: [{
-            text: 'DataView',
-            url: 'view/data-view.html',
-            icon: 'data-view.gif'
-        },{
-            text: 'DataView (advanced)',
-            url: 'view/chooser.html',
-            icon: 'chooser.gif'
-        },{
-            text: 'Progress Bar',
-            url: 'simple-widgets/progress-bar.html',
-            icon: 'progress.gif'
-        },{
-            text: 'Templates',
-            url: 'core/templates.html',
-            icon: 'templates.gif'
-        },{
-            text: 'Panels',
-            url: 'panel/panels.html',
-            icon: 'panel.gif'
-        },{
-            text: 'Resizable',
-            url: 'resizable/basic.html',
-            icon: 'resizable.gif'
-        }]
-    }];
-
-    for(var i = 0, c; c = catalog[i]; i++){
-        c.id = 'sample-' + i;
-        new SamplePanel(c).render('all-demos');
-    }
-
-    var tpl = new Ext.XTemplate(
-        '<dl><tpl for="."><dt><a href="#{id}">{title:stripTags}</a></dt></tpl></dl>'
-    );
-    tpl.overwrite('demo-menu', catalog);
-
-    Ext.select('#sample-spacer').remove();
-    Ext.get('loading').fadeOut({remove: true});
+SamplePanel = Ext.extend(Ext.DataView, {
+    autoHeight: true,
+    frame:true,
+    cls:'demos',
+    itemSelector: 'dd',
+    overClass: 'over',
+    
+    tpl : new Ext.XTemplate(
+        '<div id="sample-ct">',
+            '<tpl for=".">',
+            '<div><a name="{id}"></a><h2><div>{title}</div></h2>',
+            '<dl>',
+                '<tpl for="samples">',
+                    '<dd ext:url="{url}"><img src="shared/screens/{icon}"/>',
+                        '<div><h4>{text}</h4><p>{desc}</p></div>',
+                    '</dd>',
+                '</tpl>',
+            '<div style="clear:left"></div></dl></div>',
+            '</tpl>',
+        '</div>'
+    ),
+
+    onClick : function(e){
+        var group = e.getTarget('h2', 3, true);
+        if(group){
+            group.up('div').toggleClass('collapsed');
+        }else {
+            var t = e.getTarget('dd', 5, true);
+            if(t && !e.getTarget('a', 2)){
+                var url = t.getAttributeNS('ext', 'url');
+                window.open(url);
+            }
+        }
+        return SamplePanel.superclass.onClick.apply(this, arguments);
+    }
+});
+
+
+Ext.EventManager.on(window, 'load', function(){
+
+    var catalog = [{
+        title: 'Combination Samples',
+        samples: [{
+            text: 'Feed Viewer 2.0',
+            url: 'feed-viewer/view.html',
+            icon: 'feeds.gif',
+            desc: 'RSS 2.0 feed reader sample application that features a swappable reader panel layout.'
+        },{
+            text: 'Simple Tasks 2.0',
+            url: 'http://extjs.com/blog/2008/02/24/tasks2/',
+            icon: 'air.gif',
+            desc: 'Complete personal task management application sample that runs on <a href="http://labs.adobe.com/technologies/air/"; target="_blank">Adobe AIR</a>.'
+        },{
+            text: 'Simple Tasks',
+            url: 'tasks/tasks.html',
+            icon: 'tasks.gif',
+            desc: 'Personal task management application sample that uses <a href="http://gears.google.com"; target="_blank">Google Gears</a> for data storage.'
+        },{
+            text: 'Image Organizer',
+            url: 'organizer/organizer.html',
+            icon: 'organizer.gif',
+            desc: 'DataView and TreePanel sample that demonstrates dragging data items from a DataView into a TreePanel.'
+        },{
+            text: 'Web Desktop',
+            url: 'desktop/desktop.html',
+            icon: 'desktop.gif',
+            desc: 'Demonstrates how one could build a desktop in the browser using Ext components including a module plugin system.'
+        }]
+    },{
+        title: 'Grids',
+        samples: [{
+            text: 'Basic Array Grid',
+            url: 'grid/array-grid.html',
+            icon: 'grid-array.gif',
+            desc: 'A basic read-only grid loaded from local array data that demonstrates the use of custom column renderer functions.'
+        },{
+            text: 'Editable Grid',
+            url: 'grid/edit-grid.html',
+            icon: 'grid-edit.gif',
+            desc: 'An editable grid loaded from XML that shows multiple types of grid editors as well as defining custom data records.'
+        },{
+            text: 'XML Grid',
+            url: 'grid/xml-grid.html',
+            icon: 'grid-xml.gif',
+            desc: 'A simple read-only grid loaded from XML data.'
+        },{
+            text: 'Paging',
+            url: 'grid/paging.html',
+            icon: 'grid-paging.gif',
+            desc: 'A grid with paging, cross-domain data loading and custom- rendered expandable row bodies.'
+        },{
+            text: 'Grouping',
+            url: 'grid/grouping.html',
+            icon: 'grid-grouping.gif',
+            desc: 'A basic grouping grid showing collapsible data groups that can be customized via the "Group By" header menu option.'
+        },{
+            text: 'Live Group Summary',
+            url: 'grid/totals.html',
+            icon: 'grid-summary.gif',
+            desc: 'Advanced grouping grid that allows cell editing and includes custom dynamic summary calculations.'
+        },{
+            text: 'Grid Plugins',
+            url: 'grid/grid3.html',
+            icon: 'grid-plugins.gif',
+            desc: 'Multiple grids customized via plugins: expander rows, checkbox selection and row numbering.'
+        },{
+            text: 'Grid Filtering',
+            url: 'grid-filtering/grid-filter.html',
+            icon: 'grid-filter.gif',
+            desc: 'Grid plugins providing custom data filtering menus that support various data types.'
+        },{
+            text: 'Grid From Markup',
+            url: 'grid/from-markup.html',
+            icon: 'grid-from-markup.gif',
+            desc: 'Custom GridPanel extension that can convert a plain HTML table into a dynamic grid at runtime.'
+        },{
+            text: 'Grid Data Binding (basic)',
+            url: 'grid/binding.html',
+            icon: 'grid-data-binding.gif',
+            desc: 'Data binding a grid to a detail preview panel via the grid\'s RowSelectionModel.'
+        },{
+            text: 'Grid Data Binding (advanced)',
+            url: 'grid/binding-with-classes.html',
+            icon: 'grid-data-binding.gif',
+            desc: 'Refactoring the basic data binding example to use a class-based application design model.'
+        }]
+    },{
+        title: 'Tabs',
+        samples: [{
+            text: 'Basic Tabs',
+            url: 'tabs/tabs.html',
+            icon: 'tabs.gif',
+            desc: 'Basic tab functionality including autoHeight, tabs from markup, Ajax loading and tab events.'
+        },{
+            text: 'Advanced Tabs',
+            url: 'tabs/tabs-adv.html',
+            icon: 'tabs-adv.gif',
+            desc: 'Advanced tab features including tab scrolling, adding tabs programmatically and a context menu plugin.'
+        }]
+    },{
+        title: 'Windows',
+        samples: [{
+            text: 'Hello World',
+            url: 'window/hello.html',
+            icon: 'window.gif',
+            desc: 'Simple "Hello World" window that contains a basic TabPanel.'
+        },{
+            text: 'MessageBox',
+            url: 'message-box/msg-box.html',
+            icon: 'msg-box.gif',
+            desc: 'Different styles include confirm, alert, prompt, progress and wait and also support custom icons.'
+        },{
+            text: 'Layout Window',
+            url: 'window/layout.html',
+            icon: 'window-layout.gif',
+            desc: 'A window containing a basic BorderLayout with nested TabPanel.'
+        }]
+    },{
+        title: 'Trees',
+        samples: [{
+            text: 'Drag and Drop Reordering',
+            url: 'tree/reorder.html',
+            icon: 'tree-reorder.gif',
+            desc: 'A TreePanel loaded asynchronously via a JSON TreeLoader that shows drag and drop with container scroll.'
+        },{
+            text: 'Multiple trees',
+            url: 'tree/two-trees.html',
+            icon: 'tree-two.gif',
+            desc: 'Drag and drop between two different sorted TreePanels.'
+        },{
+            text: 'Column Tree',
+            url: 'tree/column-tree.html',
+            icon: 'tree-columns.gif',
+            desc: 'A custom TreePanel implementation that demonstrates extending an existing component.'
+        },{
+            text: 'XML Tree Loader',
+            url: 'tree/xml-tree-loader.html',
+            icon: 'tree-xml-loader.gif',
+            desc: 'A custom TreeLoader implementation that demonstrates loading a tree from an XML document.'
+        }]
+    },{
+        title: 'Layout Managers',
+        samples: [{
+            text: 'Layout Browser',
+            url: 'layout-browser/layout-browser.html',
+            icon: 'layout-browser.gif',
+            desc: 'Includes examples for each standard Ext layout, several custom layouts and combination examples.'
+        },{
+            text: 'Border Layout',
+            url: 'layout/complex.html',
+            icon: 'border-layout.gif',
+            desc: 'A complex BorderLayout implementation that shows nesting multiple components and sub-layouts.'
+        },{
+            text: 'Anchor Layout',
+            url: 'form/anchoring.html',
+            icon: 'anchor.gif',
+            desc: 'A simple example of anchoring form fields to a window for flexible form resizing.'
+        },{
+            text: 'Portal Demo',
+            url: 'portal/portal.html',
+            icon: 'portal.gif',
+            desc: 'A page layout using several custom extensions to provide a web portal interface.'
+        }]
+    },{
+        title: 'ComboBox',
+        samples: [{
+            text: 'Basic ComboBox',
+            url: 'form/combos.html',
+            icon: 'combo.gif',
+            desc: 'Basic combos, combos rendered from markup and customized list layout to provide item tooltips.'
+        },{
+            text: 'ComboBox Templates',
+            url: 'form/forum-search.html',
+            icon: 'combo-custom.gif',
+            desc: 'Customized combo with template-based list rendering, remote loading and paging.'
+        }]
+    },{
+        title: 'Forms',
+        samples: [{
+            text: 'Dynamic Forms',
+            url: 'form/dynamic.html',
+            icon: 'form-dynamic.gif',
+            desc: 'Various example forms showing collapsible fieldsets, column layout, nested TabPanels and more.'
+        },{
+            text: 'Ajax with XML Forms',
+            url: 'form/xml-form.html',
+            icon: 'form-xml.gif',
+            desc: 'Ajax-loaded form fields from remote XML data and remote field validation on submit.'
+        },{
+            text: 'Custom Search Field',
+            url: 'form/custom.html',
+            icon: 'form-custom.gif',
+            desc: 'A TriggerField search extension combined with an XTemplate for custom results rendering.'
+        },{
+            text: 'Binding a Grid to a Form',
+            url: 'form/form-grid.html',
+            icon: 'form-grid-binding.gif',
+            desc: 'A grid embedded within a FormPanel that automatically loads records into the form on row selection.'
+        },{
+            text: 'Advanced Validation',
+            url: 'form/adv-vtypes.html',
+            icon: 'form-adv-vtypes.gif',
+            desc: 'Relational form field validation using custom vtypes.'
+        },{
+            text: 'Checkbox/Radio Groups',
+            url: 'form/check-radio.html',
+            icon: 'form-check-radio.gif',
+            desc: 'Many examples showing different checkbox and radio group configurations.'
+        },{
+            text: 'File Upload Field',
+            url: 'form/file-upload.html',
+            icon: 'form-file-upload.gif',
+            desc: 'A demo of how to give standard file upload fields a bit of Ext style using a custom class.'
+        },{
+            text: 'MultiSelect and ItemSelector',
+            url: 'multiselect/multiselect-demo.html',
+            icon: 'form-multiselect.gif',
+            desc: 'Example controls for selecting a list of items in forms.'
+        }]
+    },{
+        title: 'Toolbars and Menus',
+        samples: [{
+            text: 'Basic Toolbar',
+            url: 'menu/menus.html',
+            icon: 'toolbar.gif',
+            desc: 'Toolbar and menus that contain various components like date pickers, color pickers, sub-menus and more.'
+        },{
+            text: 'Ext Actions',
+            url: 'menu/actions.html',
+            icon: 'toolbar-actions.gif',
+            desc: 'Bind the same behavior to multiple buttons, toolbar and menu items using the Ext.Action class.'
+        }]
+    },{
+        title: 'Templates and DataView',
+        samples: [{
+            text: 'Templates',
+            url: 'core/templates.html',
+            icon: 'templates.gif',
+            desc: 'A simple example of rendering views from templates bound to data objects.'
+        },{
+            text: 'DataView',
+            url: 'view/data-view.html',
+            icon: 'data-view.gif',
+            desc: 'A basic DataView with custom plugins for editable labels and drag selection of items.'
+        },{
+            text: 'DataView (advanced)',
+            url: 'view/chooser.html',
+            icon: 'chooser.gif',
+            desc: 'A more customized DataView supporting sorting and filtering with multiple templates.'
+        }]
+    },{
+		title   : 'Drag and Drop',
+		samples :  [{
+			text : 'Grid to Grid Drag and Drop',
+			url  : 'dd/dnd_grid_to_grid.html',
+			icon : 'dd-gridtogrid.gif',
+			desc : 'A simple drag and drop from grid to grid implementation.'
+    	},{
+			text : 'Grid to FormPanel Drag and Drop',
+			url  : 'dd/dnd_grid_to_formpanel.html',
+			icon : 'dd-gridtoformpanel.gif',
+			desc : 'A basic drag and drop from grid to formpanel.'
+    	},{
+			text : 'Custom Drag and Drop',
+			url  : 'dd/dragdropzones.html',
+			icon : 'dd-zones.gif',
+			desc : 'Enabling drag and drop between a DataView and a grid using DragZone and DropZone extensions.'
+        }]
+	},{
+        title: 'Miscellaneous',
+        samples: [{
+            text: 'History',
+            url: 'history/history.html',
+            icon: 'history.gif',
+            desc: 'A History manager that allows the user to navigate an Ext UI via browser back/forward.'
+        },{
+            text: 'Google Maps',
+            url: 'window/gmap.html',
+            icon: 'gmap-panel.gif',
+            desc: 'A Google Maps wrapper class that enables easy display of dynamic maps in Ext panels and windows.'
+        },{
+            text: 'StatusBar',
+            url: 'statusbar/statusbar-demo.html',
+            icon: 'statusbar.gif',
+            desc: 'A simple StatusBar that can be dropped into the bottom of any panel to display status text and icons.'
+        },{
+            text: 'StatusBar (advanced)',
+            url: 'statusbar/statusbar-advanced.html',
+            icon: 'statusbar-plugin.gif',
+            desc: 'Customizing the StatusBar via a plugin to provide automatic form validation monitoring and error linking.'
+       },{
+            text: 'Slider',
+            url: 'slider/slider.html',
+            icon: 'slider.gif',
+            desc: 'A slider component that supports vertical mode, snapping, tooltips, customized styles and more.'
+        },{
+            text: 'QuickTips',
+            url: 'simple-widgets/qtips.html',
+            icon: 'qtips.gif',
+            desc: 'Various tooltip and quick tip configuration options including Ajax loading and mouse tracking.'
+        },{
+            text: 'Progress Bar',
+            url: 'simple-widgets/progress-bar.html',
+            icon: 'progress.gif',
+            desc: 'A basic progress bar component shown in various configurations and with custom styles.'
+        },{
+            text: 'Panels',
+            url: 'panel/panels.html',
+            icon: 'panel.gif',
+            desc: 'A basic collapsible panel example.'
+        },{
+            text: 'Resizable',
+            url: 'resizable/basic.html',
+            icon: 'resizable.gif',
+            desc: 'Examples of making any element resizable with various configuration options.'
+        },{
+            text: 'Spotlight',
+            url: 'core/spotlight.html',
+            icon: 'spotlight.gif',
+            desc: 'A utility for masking everything except a single element on the page to visually highlight it.'
+        },{
+            text: 'Localization (static)',
+            url: 'locale/dutch-form.html',
+            icon: 'locale-dutch.gif',
+            desc: 'Demonstrates fully localizing a form by including a custom locale script.'
+        },{
+            text: 'Localization (dynamic)',
+            url: 'locale/multi-lang.html',
+            icon: 'locale-switch.gif',
+            desc: 'Dynamically render various Ext components in different locales by selecting from a locale list.'
+        }]
+    }];
+
+    for(var i = 0, c; c = catalog[i]; i++){
+        c.id = 'sample-' + i;
+    }
+
+    var store = new Ext.data.JsonStore({
+        idProperty: 'id',
+        fields: ['id', 'title', 'samples'],
+        data: catalog
+    });
+
+    new Ext.Panel({
+        autoHeight: true,
+        collapsible: true,
+        frame: true,
+        title: 'View Samples',
+        items: new SamplePanel({
+            store: store
+        })
+    }).render('all-demos');
+
+    var tpl = new Ext.XTemplate(
+        '<tpl for="."><li><a href="#{id}">{title:stripTags}</a></li></tpl>'
+    );
+    tpl.overwrite('sample-menu', catalog);
+
+    Ext.select('#sample-spacer').remove();
+
+    setTimeout(function(){
+        Ext.get('loading').remove();
+        Ext.get('loading-mask').fadeOut({remove:true});
+    }, 250);
+
+    if(window.console && window.console.firebug){
+        Ext.Msg.alert('Warning', 'Firebug is known to cause performance issues with Ext JS.');
+    }
 });
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/examples/simple-widgets/progress-bar.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/simple-widgets/progress-bar.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/simple-widgets/progress-bar.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -17,7 +17,7 @@
 <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Progress Bar</h1>
 <p>The example shows how to use the ProgressBar class. The js is not minified so it is readable.
 See <a href="progress-bar.js">progress-bar.js</a>.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/simple-widgets/qtips.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/simple-widgets/qtips.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/simple-widgets/qtips.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -35,7 +35,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 
     <h1>Tips examples</h1>
     <p>Note that the js and css is not minified so it is readable. See <a href="qtips.js">qtips.js</a> for the tip creation code

Modified: mickael/trunk/ext/v3.0.0-a1/examples/slider/slider.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/slider/slider.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/slider/slider.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -18,7 +18,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css">
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script>
+<script type="text/javascript" src="../shared/examples.js"></script>
 <!-- EXAMPLES -->
 <h1>Ext Slider Example</h1>
 <p>Sliders support keyboard adjustments, configurable snapping, axis clicking and animation.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/tabs/tabs-adv.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/tabs/tabs-adv.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/tabs/tabs-adv.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -19,7 +19,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-    <script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+    <script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
     <h1>Advanced Tabs</h1>
     <p>Note that the js and css is not minified so it is readable. See <a href="tabs-adv.js">tabs-adv.js</a> for the tab creation code.</p>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/tabs/tabs.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/tabs/tabs.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/tabs/tabs.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -21,7 +21,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 
 <h1>Tab Panel Examples</h1>
 <p>Note that the js and css is not minified so it is readable. See <a href="tabs-example.js">tabs-example.js</a> for the tab creation code

Modified: mickael/trunk/ext/v3.0.0-a1/examples/toolbar/overflow.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/toolbar/overflow.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/toolbar/overflow.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -18,7 +18,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css"/>
 </head>
 <body id="docbody">
-<script type="text/javascript" src="../examples.js"></script>
+<script type="text/javascript" src="../shared/examples.js"></script>
 <!-- EXAMPLES -->
 <h1>Toolbars</h1>
 <div id="content" class="x-hidden">

Modified: mickael/trunk/ext/v3.0.0-a1/examples/toolbar/toolbars.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/toolbar/toolbars.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/toolbar/toolbars.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -18,7 +18,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css"/>
 </head>
 <body id="docbody">
-<script type="text/javascript" src="../examples.js"></script>
+<script type="text/javascript" src="../shared/examples.js"></script>
 <!-- EXAMPLES -->
 <h1>Toolbars</h1>
 <p>The js is not minified so it is readable. See <a href="toolbars.js">toolbars.js</a>.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/tree/column-tree.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/tree/column-tree.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/tree/column-tree.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -21,7 +21,7 @@
     <link rel="stylesheet" type="text/css" href="column-tree.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Customizing TreePanel</h1>
 <p>This example demonstrates how you can customize a TreePanel to display basic columns.</p>
 </body>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/tree/reorder.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/tree/reorder.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/tree/reorder.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -16,7 +16,7 @@
 <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Drag and Drop ordering in a TreePanel</h1>
 <p>This example shows basic drag and drop node moving in a tree. In this implementation there are no restrictions and 
 anything can be dropped anywhere except appending to nodes marked "leaf" (the files).</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/tree/two-trees.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/tree/two-trees.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/tree/two-trees.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -31,7 +31,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 <h1>Drag and Drop betweens two TreePanels</h1>
 <p>The TreePanels have a TreeSorter applied in "folderSort" mode.</p>
 <p>Both TreePanels are in "appendOnly" drop mode since they are sorted.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/tree/xml-tree-loader.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/tree/xml-tree-loader.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/tree/xml-tree-loader.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -11,7 +11,7 @@
     <script type="text/javascript" src="xml-tree-loader.js"></script>
     
     <link rel="stylesheet" type="text/css" href="../examples.css" />
-    <script type="text/javascript" src="../examples.js"></script>
+    <script type="text/javascript" src="../shared/examples.js"></script>
 </head>
 <body>
     

Modified: mickael/trunk/ext/v3.0.0-a1/examples/view/chooser.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/view/chooser.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/view/chooser.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -20,7 +20,7 @@
 	<link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body class="xtheme-gray">
-	<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+	<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 	<h1>Advanced DataView Example</h1>
 	<p>This example shows loading a DataView in a Window.  Each item has a linked details view, and the DataView
     supports custom sorting and filtering.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/view/data-view.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/view/data-view.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/view/data-view.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -18,7 +18,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 
 <h1>DataView Example</h1>
 <p>This example shows how to use an Ext.DataView.  It demonstrates editable labels (click<br />

Modified: mickael/trunk/ext/v3.0.0-a1/examples/view/list-view.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/view/list-view.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/view/list-view.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -18,7 +18,7 @@
     <link rel="stylesheet" type="text/css" href="../examples.css" />
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 
 <h1>ListView Example</h1>
 

Modified: mickael/trunk/ext/v3.0.0-a1/examples/window/hello.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/window/hello.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/window/hello.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -25,7 +25,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
+<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
 
 <h1>Hello World Window</h1>
 <p>This example shows how to create a very simple modal Window with "autoTabs" from existing markup.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/examples/window/layout.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/examples/window/layout.html	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/examples/window/layout.html	2008-11-21 14:33:19 UTC (rev 31)
@@ -28,7 +28,7 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" src="../examples.js"></script>
+<script type="text/javascript" src="../shared/examples.js"></script>
 <!-- EXAMPLES -->
 <h1>Windows with Layouts</h1>
 <p>This example shows how Ext containers can be nested in windows to create advanced layouts.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/ext-all-debug.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/ext-all-debug.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/ext-all-debug.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -5648,493 +5648,7 @@
         return Ext.lib.Ajax.serializeForm(form);
     }
 });
-(function(){
-    var transactions = {}, TID = 0, impl, d, pollStartTimer = 0,
-            callBuffer = [], callTask, providers = {};
-
-    var get = function(id){
-        return transactions[id] || {};
-    }
-
-    var createEvent = function(t, data, xhr, success, hs){
-        return Ext.apply(t || {}, {
-            xhr: xhr,
-            success: success,
-            data: data,
-            arg: hs
-        });
-    }
-
-    var doCallback = function(data, t, success, xhr){
-        var fn = success ? 'success' : 'failure';
-        if(t && t.cb){
-            var hs = t.cb;
-            var e = createEvent(t, data, xhr, success, hs);
-            if(typeof hs == 'function'){
-                delete e.arg;
-                hs(data, e);
-            } else{
-                Ext.callback(hs[fn], hs.scope, [data, e]);
-                Ext.callback(hs.callback, hs.scope, [data, e]);
-            }
-        }
-    }
-
-    var handleEvent = function(data, xhr){
-        if(!data){
-            return;
-        }
-        var t = get(data.tid);
-        switch(data.type){
-            case 'rpc':
-                if(t){
-                    doCallback(data.result, t, true, xhr);
-                    data.xhr = xhr;
-                    d.fireEvent('event', data);
-                    delete transactions[data.tid];
-                } else{
-                    data.xhr = xhr;
-                    d.fireEvent('event', data);
-                }
-                break;
-            case 'event':
-                data.xhr = xhr;
-                d.fireEvent(data.name, data);
-                d.fireEvent('event', data);
-                break;
-            case 'exception':
-                if(t){
-                    t.code = data.code;
-                    t.message = data.message;
-                    t.trace = data.where;
-                    doCallback(data.result, t, false, xhr);
-                    data.xhr = xhr;
-                    d.fireEvent('exception', data);
-                    delete transactions[data.tid];
-                } else{
-                    data.xhr = xhr;
-                    d.fireEvent('exception', data);
-                }
-                if(data.where && d.enableDebug){ // testing
-                    Ext.Msg.maxWidth = 800;
-                    Ext.Msg.show({
-                        title: 'Exception occurred while making a remote call to the server',
-                        msg: 'Stack trace from the server:',
-                        buttons: Ext.MessageBox.OK,
-                        multiline: 400,
-                        width:800,
-                        value: data.message + '\n'  + data.where
-                    });
-                }
-                break;
-        }
-    }
-
-    var handleException = function(opt, xhr, type){
-        var t = get(opt.tid);
-        if(t){
-            t.xhr = xhr;
-            t.type = type || d.exceptions.TRANSPORT;
-            doCallback(null, t, false, xhr);
-            d.fireEvent('exception', t);
-            delete transactions[opt.tid];
-        } else{
-            d.fireEvent('exception', {
-                tid: opt.tid,
-                xhr: xhr,
-                code: type || d.exceptions.TRANSPORT
-            });
-        }
-    }
-
-    var cb = function(opt, success, xhr){
-        if(success){
-            var data = null;
-            if(!Ext.isEmpty(xhr.responseText)){
-                if(typeof xhr.responseText == 'object'){
-                    data = xhr.responseText;
-                }else{
-                    try{
-                        data = Ext.decode(xhr.responseText);
-                    } catch(e){
-                        return handleException(opt, xhr, d.exceptions.PARSE);
-                    }
-                }
-                if(Ext.isArray(data)){
-                    for(var i = 0, len = data.length; i < len; i++){
-                        handleEvent(data[i], xhr);
-                    }
-                } else{
-                    handleEvent(data, xhr);
-                }
-            } else if(opt.ts){
-                for(var j = 0, len = opt.ts.length; j < len; j++){
-                    doCallback(null, transactions[opt.ts[j].tid], true, xhr);
-                }
-            }
-        } else{
-            handleException(opt, xhr);
-        }
-    }
-
-    var doSend = function(data){
-        if(d.enableUrlEncode){
-            var params = {};
-            params[typeof d.enableUrlEncode == 'string' ? d.enableUrlEncode : 'data'] = Ext.encode(data);
-            Ext.Ajax.request({
-                url: d.remoteUrl,
-                params: params,
-                callback: cb,
-                ts: data
-            });
-        }else{
-            Ext.Ajax.request({
-                url: d.remoteUrl,
-                jsonData: data,
-                callback: cb,
-                ts: data
-            });
-        }
-    }
-
-    var combineAndSend = function(){
-        var len = callBuffer.length;
-        if(len > 0){
-            doSend(len == 1 ? callBuffer[0] : callBuffer);
-            callBuffer = [];
-        }
-    }
-
-    var doCall = function(c, m, args){
-        var data = null, hs = args[m.len], scope = args[m.len+1];
-        var t = {
-            tid: ++TID,
-            args: args,
-            action: c,
-            method: m,
-            cb: scope && typeof hs == 'function' ? hs.createDelegate(scope) : hs
-        };
-        if(d.fireEvent('beforecall', t) !== false){
-            transactions[t.tid] = t;
-
-            if(m.len !== 0){
-                data = args.slice(0, m.len);
-            }
-
-            callBuffer.push({
-                action: c,
-                method: m.name,
-                tid: t.tid,
-                data: data
-            });
-
-            if(d.enableBuffer){
-                if(!callTask){
-                    callTask = new Ext.util.DelayedTask(combineAndSend);
-                }
-                callTask.delay(typeof d.enableBuffer == 'number' ? d.enableBuffer : 10);
-            }else{
-                combineAndSend();
-            }
-            d.fireEvent('call', t);
-        }
-    }
-
-    var doForm = function(c, m, form, callback, scope){
-        var t = {
-            tid: ++TID,
-            action: c,
-            method: m,
-            args:[form, callback, scope],
-            cb: scope && typeof callback == 'function' ? callback.createDelegate(scope) : callback
-        };
-        transactions[t.tid] = t;
-
-        form = Ext.getDom(form);
-        var isUpload = String(form.getAttribute("enctype")).toLowerCase() == 'multipart/form-data';
-
-        var params = {
-            extTID: t.tid,
-            extAction: c,
-            extMethod: m.name,
-            extUpload: String(isUpload)
-        };
-        if(callback && typeof callback == 'object'){
-            Ext.apply(params, callback.params);
-        }
-        Ext.Ajax.request({
-            url: d.remoteUrl,
-            params: params,
-            callback: cb,
-            form: form,
-            isUpload: isUpload,
-            ts: {
-                action: c,
-                method: m.name,
-                tid: t.tid,
-                data: null
-            }
-        });
-    }
-
-    var createMethod = function(c, m){
-        var f;
-        if(!m.formHandler){
-            f = function(){
-                doCall(c, m, Array.prototype.slice.call(arguments, 0));
-            };
-        }else{
-            f = function(form, callback, scope){
-                doForm(c, m, form, callback, scope);
-            };
-        }
-        f.directCfg = {
-            action: c,
-            method: m
-        };
-        return f;        
-    }
-
-    var onProviderData = function(p, e){
-        switch(e.format){
-            case 'string':
-                cb({}, true, {responseText: e.data});
-                break;
-            default:
-                cb({}, true, e.data);
-        }
-    }
-
-    var onProviderException = function(p, e){
-        handleException({}, e.data, e.type);
-    }
-
-    impl = Ext.extend(Ext.util.Observable, {
-        exceptions: {
-            TRANSPORT: 'xhr',
-            PARSE: 'parse',
-            LOGIN: 'login',
-            SERVER: 'exception'
-        },
-
-        constructor: function(){
-            impl.superclass.constructor.call(this);
-            this.addEvents('beforecall', 'call', 'beforeevent', 'event', 'exception');
-        },
-
-        defineAPI : function(data){
-            d.remoteUrl = data.url;
-            var o = data.actions || data.cls;
-            for(var c in o){
-                var cls = window[c] || (window[c] = {});
-                var ms = o[c];
-                for(var i = 0, len = ms.length; i < len; i++){
-                    var m = ms[i];
-                    cls[m.name] = createMethod(c, m);
-                }
-            }
-        },
-
-        
-
-        inject : function(stringData, opt){
-            cb(opt || {}, true, {responseText: stringData});
-        },
-
-        injectRaw : function(opt, success, xhr){
-            cb(opt, success, xhr);
-        },
-
-        injectTransaction : function(callback){
-            var t = {
-                tid: ++TID,
-                action: c,
-                method: m,
-                cb: callback
-            };
-            transactions[t.tid] = t;
-            return t;
-        },
-
-        
-
-        //autoReconnect: true,
-        //pollInterval: 3000,
-        //keepAliveInterval: 60000,
-        //pollUrlFragment: '/poll',
-        //pingUrlFragment: '/ping',
-
-        addProvider : function(provider){
-            if(!provider.events){
-                provider = new d.PROVIDERS[provider.type](provider);
-            }
-            if(!provider.isConnected()){
-                provider.connect();
-            }
-            provider.id = provider.id || Ext.id;
-            providers[provider.id] = provider;
-
-            provider.on('data', onProviderData);
-            provider.on('exception', onProviderException);
-
-            return provider;
-        },
-
-        getProvider : function(id){
-            return providers[id];
-        },
-
-        removeProvider : function(id){
-            var provider = id.id ? id : providers[id.id];
-            provider.un('data', onProviderData);
-            provider.un('exception', onProviderException);
-            delete providers[provider.id];
-            return provider;
-        },
-
-        enableBuffer: 10
-    });
-    Ext.Direct = d = new impl();
-
-    d.PROVIDERS = {};
-
-    var reconnId = 0;
-    var retryId = 0;
-
-    var clear = function(){
-        clearTimeout(reconnId);
-        clearTimeout(retryId);
-    }
-
-    d.Flash = {
-        onData : function(strData){
-            // setTimeout to avoid flash crash bug
-            setTimeout(function(){
-                d.inject(strData);
-            }, 10);
-        },
-
-        onConnect : function(success){
-            if(success){
-                clear();
-                d.stopPoll();
-                d.fireEvent('connect');
-            }else{
-                d.startPoll();
-                if(d.autoReconnect){
-                    d.Flash.reconnect();
-                }
-            }
-        },
-
-        getFlash : function(){
-            return Ext.isIE ? window.xflashDirect : document.xflashDirect;
-        },
-
-        reconnect : function(){
-            clear();
-            var flash = d.Flash.getFlash();
-            if(flash){
-                reconnId = setTimeout(function(){
-                    flash.reconnect();
-                }, 1000);
-                retryId = setInterval(function(){
-                    flash.reconnect();
-                }, 30000);
-            }
-        },
-
-        onClose : function(){
-            d.fireEvent('disconnect');
-            d.startPoll();
-            if(d.autoReconnect){
-                d.Flash.reconnect();
-            }
-        }
-    };
-})();
-
 
-Ext.data.DirectProvider = Ext.extend(Ext.util.Observable, {
-    priority: 1, // lower is higher priority, 0 mens "duplex", aka always on
-    constructor : function(config){
-        Ext.apply(this, config);
-        this.addEvents('connect', 'disconnect', 'data', 'exception');
-        Ext.data.DirectProvider.superclass.constructor.apply(this, arguments);
-    },
-
-    isConnected: function(){
-        return false;
-    },
-
-    connect: Ext.emptyFn,
-    disconnect: Ext.emptyFn
-});
-
-Ext.data.PollingProvider = Ext.extend(Ext.data.DirectProvider, {
-    priority: 3,
-    interval: 3000,
-
-    constructor : function(config){
-        Ext.data.PollingProvider.superclass.constructor.apply(this, arguments);
-        this.addEvents('beforepoll', 'poll');
-    },
-
-    isConnected: function(){
-        return !!this.pollTask;
-    },
-
-    connect: function(){
-        if(this.url && !this.pollTask){
-            this.pollTask = Ext.TaskMgr.start({
-                run: function(){
-                    if(this.fireEvent('beforepoll') !== false){
-                        Ext.Ajax.request({
-                            url: this.url,
-                            callback: this.onData,
-                            scope: this,
-                            params: this.baseParams
-                        });
-                    }
-                },
-                interval: this.interval,
-                scope: this
-            });
-            this.fireEvent('connect', this);
-        }else if(!this.url){
-            throw 'Error initializing PollingProvider, no url configured.';
-        }
-    },
-
-    disconnect: function(){
-        if(this.pollTask){
-            Ext.TaskMgr.stop(this.pollTask);
-            delete this.pollTask;
-            this.fireEvent('disconnect', this);
-        }
-    },
-
-    onData: function(opt, success, xhr){
-        if(success){
-            this.fireEvent('data', this, {
-                format: 'xhr',
-                data: xhr
-            });
-        }else{
-            this.fireEvent('exception', this, {
-                format: 'xhr',
-                data: xhr,
-                type: Ext.Direct.exceptions.TRANSPORT
-            });
-        }
-    }
-});
-
-Ext.Direct.PROVIDERS['poll'] = Ext.data.PollingProvider;
-
-
-
-
 Ext.Updater = Ext.extend(Ext.util.Observable, {
     constructor: function(el, forceNew){
         el = Ext.get(el);
@@ -6403,6 +5917,18 @@
 
 
 (function() {
+
+// create private copy of Ext's String.format() method
+// - to remove unnecessary dependency
+// - to resolve namespace conflict with M$-Ajax's implementation
+function xf(format) {
+    var args = Array.prototype.slice.call(arguments, 1);
+    return format.replace(/\{(\d+)\}/g, function(m, i) {
+        return args[i];
+    });
+}
+
+
 // private
 Date.formatCodeToRegex = function(character, currentGroup) {
     // Note: currentGroup - position in regex result array (see notes for Date.parseCodes below)
@@ -6414,7 +5940,7 @@
     }
 
     return p? Ext.applyIf({
-      c: p.c? String.format(p.c, currentGroup || "{0}") : p.c
+      c: p.c? xf(p.c, currentGroup || "{0}") : p.c
     }, p) : {
         g:0,
         c:null,
@@ -6606,48 +6132,19 @@
     },
 
     // private
-    createParser : function(format) {
-        var funcName = "parse" + Date.parseFunctions.count++,
-            regexNum = Date.parseRegexes.length,
-            currentGroup = 1,
-            code = [
-                "Date." + funcName + " = function(input){",
-                    "var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;",
-                    "input = String(input);",
-                    "d = new Date();",
-                    "y = d.getFullYear();",
-                    "m = d.getMonth();",
-                    "d = d.getDate();",
-                    "var results = input.match(Date.parseRegexes[" + regexNum + "]);",
-                    "if (results && results.length > 0) {\n"
-            ].join('\n'),
-            regex = "",
-            special = false,
-            ch = '';
-
-        Date.parseFunctions[format] = funcName;
-
-        for (var i = 0; i < format.length; ++i) {
-            ch = format.charAt(i);
-            if (!special && ch == "\\") {
-                special = true;
-            }
-            else if (special) {
-                special = false;
-                regex += String.escape(ch);
-            }
-            else {
-                var obj = Date.formatCodeToRegex(ch, currentGroup);
-                currentGroup += obj.g;
-                regex += obj.s;
-                if (obj.g && obj.c) {
-                    code += obj.c;
-                }
-            }
-        }
-
-        code += [
-                    "if (u){",
+    createParser : function() {
+        var code = [
+            "Date.{0} = function(input){",
+                "var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;",
+                "input = String(input);",
+                "d = new Date();",
+                "y = d.getFullYear();",
+                "m = d.getMonth();",
+                "d = d.getDate();",
+                "var results = input.match(Date.parseRegexes[{1}]);",
+                "if(results && results.length > 0){",
+                    "{2}",
+                    "if(u){",
                         "v = new Date(u * 1000);", // give top priority to UNIX time
                     "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){",
                         "v = new Date(y, m, d, h, i, s, ms);",
@@ -6671,10 +6168,41 @@
             "}"
         ].join('\n');
 
-        Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$", "i");
-        eval(code);
-    },
+        return function(format) {
+            var funcName = "parse" + Date.parseFunctions.count++,
+                regexNum = Date.parseRegexes.length,
+                currentGroup = 1,
+                calc = "",
+                regex = "",
+                special = false,
+                ch = "";
 
+            Date.parseFunctions[format] = funcName;
+
+            for (var i = 0; i < format.length; ++i) {
+                ch = format.charAt(i);
+                if (!special && ch == "\\") {
+                    special = true;
+                }
+                else if (special) {
+                    special = false;
+                    regex += String.escape(ch);
+                }
+                else {
+                    var obj = $f(ch, currentGroup);
+                    currentGroup += obj.g;
+                    regex += obj.s;
+                    if (obj.g && obj.c) {
+                        calc += obj.c;
+                    }
+                }
+            }
+
+            Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$", "i");
+            eval(xf(code, funcName, regexNum, calc));
+        }
+    }(),
+
     // private
     parseCodes : {
         
@@ -6721,7 +6249,7 @@
         z: {
             g:0,
             c:null,
-            s:"(?:\\d{1,3}" // day of the year (0 - 364 (365 in leap years))
+            s:"(?:\\d{1,3})" // day of the year (0 - 364 (365 in leap years))
         },
         W: {
             g:0,
@@ -6944,7 +6472,7 @@
         // adapted from http://www.merlyn.demon.co.uk/weekcalc.htm
         var ms1d = 864e5, // milliseconds in a day
             ms7d = 7 * ms1d; // milliseconds in a week
-            
+
         return function() { // return a closure so constants get calculated only once
             var DC3 = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate() + 3) / ms1d, // an Absolute Day Number
                 AWN = Math.floor(DC3 / 7), // an Absolute Week Number
@@ -12163,14 +11691,6 @@
 Ext.extend(Ext.data.XmlStore, Ext.data.Store);
 
 Ext.reg('xmlstore', Ext.data.XmlStore);
-Ext.data.DirectStore = function(c){
-	var pcfg = Ext.copyTo({}, c, 'paramOrder,paramsAsHash,directFn');
-	Ext.data.DirectStore.superclass.constructor.call(this, Ext.apply(c, {
-        proxy: new Ext.data.DirectProxy(pcfg),
-        reader: new Ext.data.JsonReader(c, c.fields)
-    }));
-};
-Ext.extend(Ext.data.DirectStore, Ext.data.Store);
 // private
 // Field objects are not intended to be created directly, but are created
 // behind the scenes when defined for Record objects.  See Record.js for details.
@@ -12520,58 +12040,6 @@
         trans.callback.call(trans.scope||window, null, trans.arg, false);
     }
 });
-Ext.data.DirectProxy = function(config){
-	Ext.apply(this, config);
-    if(typeof this.paramOrder == 'string'){
-        this.paramOrder = this.paramOrder.split(/[\s,|]/);
-    }
-    Ext.data.DirectProxy.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.data.DirectProxy, Ext.data.DataProxy, {
-
-	paramOrder: undefined,
-	paramsAsHash: true,
-	directFn: undefined,
-    
-    load: function(params, reader, cb, scope, arg){
-		if(this.fireEvent("beforeload", this, params) !== false) {
-			var args = [];
-			if(this.paramOrder){
-				for(var i = 0, len = this.paramOrder.length; i < len; i++){
-					args.push(params[this.paramOrder[i]]);
-				}
-			}else if(this.paramsAsHash){
-				args.push(params);
-			}
-			args.push({
-				callback: function(result, e){
-					if(!e.success){
-						this.fireEvent("loadexception", this, e, result);
-            			cb.call(scope, null, arg, false);
-            			return;
-					}
-					var rs;
-			        try {
-			            rs = reader.readRecords(result);
-			        }catch(ex){
-			            this.fireEvent("loadexception", this, e, result, ex);
-			            cb.call(scope, null, arg, false);
-			            return;
-			        }
-			        this.fireEvent("load", this, e, arg);
-			        cb.call(scope, rs, arg, true);
-				},
-
-				scope: this
-			});
-
-			this.directFn.apply(window, args);
-		} else {
-			cb.call(scope || this, null, arg, false);
-		}
-	}
-});
 
 Ext.data.JsonReader = function(meta, recordType){
     meta = meta || {};
@@ -12793,7 +12261,557 @@
 	    };
     }
 });
+Ext.Direct = Ext.extend(Ext.util.Observable, {
+    exceptions: {
+        TRANSPORT: 'xhr',
+        PARSE: 'parse',
+        LOGIN: 'login',
+        SERVER: 'exception'
+    },
 
+    constructor: function(){
+        this.addEvents('event', 'exception');
+        this.transactions = {};
+        this.providers = {};
+    },
+
+    addProvider : function(provider){
+        var a = arguments;
+        if(a.length > 1){
+            for(var i = 0, len = a.length; i < len; i++){
+                this.addProvider(a[i]);
+            }
+            return;
+        }
+        if(!provider.events){
+            provider = new Ext.Direct.PROVIDERS[provider.type](provider);
+            //provider = new Ext.Direct.PROVIDERS[provider.type](provider);
+        }
+        provider.id = provider.id || Ext.id;
+        this.providers[provider.id] = provider;
+
+        provider.on('data', this.onProviderData, this);
+        provider.on('exception', this.onProviderException, this);
+
+        if(!provider.isConnected()){
+            provider.connect();
+        }
+
+        return provider;
+    },
+
+    getProvider : function(id){
+        return this.providers[id];
+    },
+
+    removeProvider : function(id){
+        var provider = id.id ? id : providers[id.id];
+        provider.un('data', this.onProviderData, this);
+        provider.un('exception', this.onProviderException, this);
+        delete this.providers[provider.id];
+        return provider;
+    },
+
+    addTransaction: function(t){
+        this.transactions[t.tid] = t;
+        return t;
+    },
+
+    removeTransaction: function(t){
+        delete this.transactions[t.tid || t];
+        return t;
+    },
+
+    getTransaction: function(tid){
+        return this.transactions[tid.tid || tid];
+    },
+
+    onProviderData : function(provider, e){
+        if(Ext.isArray(e)){
+            for(var i = 0, len = e.length; i < len; i++){
+                this.onProviderData(provider, e[i]);
+            }
+            return;
+        }
+        if(e.name && e.name != 'event' && e.name != 'exception'){
+            this.fireEvent(e.name, e);
+        }else if(e.type == 'exception'){
+            this.fireEvent('exception', e);
+        }
+        this.fireEvent('event', e, provider);
+    },
+
+    createEvent : function(response, extraProps){
+        return new Ext.Direct.eventTypes[response.type](Ext.apply(response, extraProps));
+    }
+});
+Ext.Direct = new Ext.Direct();
+
+Ext.Direct.TID = 1;
+Ext.Direct.PROVIDERS = {};
+Ext.Direct.Transaction = function(config){
+    Ext.apply(this, config);
+    this.tid = ++Ext.Direct.TID;
+    this.retryCount = 0;
+}
+Ext.Direct.Transaction.prototype = {
+    send: function(){
+        this.provider.queueTransaction(this);
+    },
+
+    retry: function(){
+        this.retryCount++;
+        this.send();
+    },
+
+    getProvider: function(){
+        return this.provider;
+    }
+};
+Ext.Direct.Event = function(config){
+    Ext.apply(this, config);
+}
+Ext.Direct.Event.prototype = {
+    status: true,
+    getData: function(){
+        return this.data;
+    }
+};
+
+Ext.Direct.RemotingEvent = Ext.extend(Ext.Direct.Event, {
+    type: 'rpc',
+    getTransaction: function(){
+        return this.transaction || Ext.Direct.getTransaction(this.tid);
+    }
+});
+
+Ext.Direct.ExceptionEvent = Ext.extend(Ext.Direct.RemotingEvent, {
+    status: false,
+    type: 'exception'
+});
+
+Ext.Direct.eventTypes = {
+    'rpc':  Ext.Direct.RemotingEvent,
+    'event':  Ext.Direct.Event,
+    'exception':  Ext.Direct.ExceptionEvent
+};
+
+
+Ext.direct.Provider = Ext.extend(Ext.util.Observable, {
+    priority: 1, // lower is higher priority, 0 mens "duplex", aka always on
+    constructor : function(config){
+        Ext.apply(this, config);
+        this.addEvents('connect', 'disconnect', 'data', 'exception');
+        Ext.direct.Provider.superclass.constructor.call(this, config);
+    },
+
+    isConnected: function(){
+        return false;
+    },
+
+    connect: Ext.emptyFn,
+    disconnect: Ext.emptyFn
+});
+
+Ext.direct.JsonProvider = Ext.extend(Ext.direct.Provider, {
+    parseResponse: function(xhr){
+        if(!Ext.isEmpty(xhr.responseText)){
+            if(typeof xhr.responseText == 'object'){
+                return xhr.responseText;
+            }
+            return Ext.decode(xhr.responseText);
+        }
+        return null;
+    },
+
+    getEvents: function(xhr){
+        var data = null;
+        try{
+            data = this.parseResponse(xhr);
+        }catch(e){
+            var event = new Ext.Direct.ExceptionEvent({
+                data: e,
+                xhr: xhr,
+                code: Ext.Direct.exceptions.PARSE,
+                message: 'Error parsing json response: \n\n ' + data
+            })
+            return [event];
+        }
+        var events = [];
+        if(Ext.isArray(data)){
+            for(var i = 0, len = data.length; i < len; i++){
+                events.push(Ext.Direct.createEvent(data[i]));
+            }
+        }else{
+            events.push(Ext.Direct.createEvent(data));
+        }
+        return events;
+    }
+});
+Ext.direct.PollingProvider = Ext.extend(Ext.direct.JsonProvider, {
+    priority: 3,
+    interval: 3000,
+
+    constructor : function(config){
+        Ext.direct.PollingProvider.superclass.constructor.call(this, config);
+        this.addEvents('beforepoll', 'poll');
+    },
+
+    isConnected: function(){
+        return !!this.pollTask;
+    },
+
+    connect: function(){
+        if(this.url && !this.pollTask){
+            this.pollTask = Ext.TaskMgr.start({
+                run: function(){
+                    if(this.fireEvent('beforepoll', this) !== false){
+                        if(typeof this.url == 'function'){
+                            this.url(this.baseParams);
+                        }else{
+                            Ext.Ajax.request({
+                                url: this.url,
+                                callback: this.onData,
+                                scope: this,
+                                params: this.baseParams
+                            });
+                        }
+                    }
+                },
+                interval: this.interval,
+                scope: this
+            });
+            this.fireEvent('connect', this);
+        }else if(!this.url){
+            throw 'Error initializing PollingProvider, no url configured.';
+        }
+    },
+
+    disconnect: function(){
+        if(this.pollTask){
+            Ext.TaskMgr.stop(this.pollTask);
+            delete this.pollTask;
+            this.fireEvent('disconnect', this);
+        }
+    },
+
+    onData: function(opt, success, xhr){
+        if(success){
+            var events = this.getEvents(xhr);
+            for(var i = 0, len = events.length; i < len; i++){
+                var e = events[i];
+                this.fireEvent('data', this, e);
+            }
+        }else{
+            var e = new Ext.Direct.ExceptionEvent({
+                data: e,
+                code: Ext.Direct.exceptions.TRANSPORT,
+                message: 'Unable to connect to the server.',
+                xhr: xhr
+            });
+            this.fireEvent('data', this, e);
+        }
+    }
+});
+
+Ext.Direct.PROVIDERS['polling'] = Ext.direct.PollingProvider;
+Ext.direct.RemotingProvider = Ext.extend(Ext.direct.JsonProvider, {
+    priority: 1,
+    enableBuffer: 10,
+    maxRetries: 1,
+
+    constructor : function(config){
+        Ext.direct.RemotingProvider.superclass.constructor.call(this, config);
+        this.addEvents('beforecall', 'call');
+        this.namespace = this.namespace || window;
+        this.transactions = {};
+        this.callBuffer = [];
+    },
+
+    initAPI : function(){
+        var o = this.actions;
+        for(var c in o){
+            var cls = this.namespace[c] || (this.namespace[c] = {});
+            var ms = o[c];
+            for(var i = 0, len = ms.length; i < len; i++){
+                var m = ms[i];
+                cls[m.name] = this.createMethod(c, m);
+            }
+        }
+    },
+
+    isConnected: function(){
+        return !!this.connected;
+    },
+
+    connect: function(){
+        if(this.url){
+            this.initAPI();
+            this.connected = true;
+            this.fireEvent('connect', this);
+        }else if(!this.url){
+            throw 'Error initializing RemotingProvider, no url configured.';
+        }
+    },
+
+    disconnect: function(){
+        if(this.connected){
+            this.connected = false;
+            this.fireEvent('disconnect', this);
+        }
+    },
+
+    onData: function(opt, success, xhr){
+        if(success){
+            var events = this.getEvents(xhr);
+            for(var i = 0, len = events.length; i < len; i++){
+                var e = events[i];
+                var t = e.getTransaction();
+                this.fireEvent('data', this, e);
+                if(t){
+                    this.doCallback(t, e, true);
+                    Ext.Direct.removeTransaction(t);
+                }
+            }
+        }else{
+            var ts = [].concat(opt.ts);
+            for(var i = 0, len = ts.length; i < len; i++){
+                var t = this.getTransaction(opt.ts[i]);
+                if(t && t.retryCount < this.maxRetries){
+                    t.retry();
+                }else{
+                    var e = new Ext.Direct.ExceptionEvent({
+                        data: e,
+                        transaction: t,
+                        code: Ext.Direct.exceptions.TRANSPORT,
+                        message: 'Unable to connect to the server.',
+                        xhr: xhr
+                    });
+                    this.fireEvent('data', this, e);
+                    if(t){
+                        this.doCallback(t, e, false);
+                        Ext.Direct.removeTransaction(t);
+                    }
+                }
+            }
+        }
+    },
+
+    getCallData: function(t){
+        return {
+            action: t.action,
+            method: t.method,
+            data: t.data,
+            type: 'rpc',
+            tid: t.tid
+        };
+    },
+
+    doSend : function(data){
+        var o = {
+            url: this.url,
+            callback: this.onData,
+            scope: this
+        };
+
+        // send only needed data
+        var callData;
+        if(Ext.isArray(data)){
+            callData = [];
+            for(var i = 0, len = data.length; i < len; i++){
+                callData.push(this.getCallData(data[i]));
+            }
+        }else{
+            callData = this.getCallData(data);
+        }
+
+        if(this.enableUrlEncode){
+            var params = {};
+            params[typeof this.enableUrlEncode == 'string' ? this.enableUrlEncode : 'data'] = Ext.encode(callData);
+            o.params = params;
+        }else{
+            o.jsonData = callData;
+        }
+        Ext.Ajax.request(o);
+    },
+
+    combineAndSend : function(){
+        var len = this.callBuffer.length;
+        if(len > 0){
+            this.doSend(len == 1 ? this.callBuffer[0] : this.callBuffer);
+            this.callBuffer = [];
+        }
+    },
+
+    queueTransaction: function(t){
+        this.callBuffer.push(t);
+        if(this.enableBuffer){
+            if(!this.callTask){
+                this.callTask = new Ext.util.DelayedTask(this.combineAndSend, this);
+            }
+            this.callTask.delay(typeof this.enableBuffer == 'number' ? this.enableBuffer : 10);
+        }else{
+            this.combineAndSend();
+        }
+    },
+
+    doCall : function(c, m, args){
+        var data = null, hs = args[m.len], scope = args[m.len+1];
+
+        if(m.len !== 0){
+            data = args.slice(0, m.len);
+        }
+
+        var t = new Ext.Direct.Transaction({
+            provider: this,
+            args: args,
+            action: c,
+            method: m.name,
+            data: data,
+            cb: scope && typeof hs == 'function' ? hs.createDelegate(scope) : hs
+        });
+
+        if(this.fireEvent('beforecall', this, t) !== false){
+            Ext.Direct.addTransaction(t);
+            this.queueTransaction(t);
+            this.fireEvent('call', this, t);
+        }
+    },
+
+    doForm : function(c, m, form, callback, scope){
+        var t = new Ext.Direct.Transaction({
+            provider: this,
+            action: c,
+            method: m.name,
+            args:[form, callback, scope],
+            cb: scope && typeof callback == 'function' ? callback.createDelegate(scope) : callback
+        });
+
+        if(this.fireEvent('beforecall', this, t) !== false){
+            Ext.Direct.addTransaction(t);
+
+            form = Ext.getDom(form);
+            var isUpload = String(form.getAttribute("enctype")).toLowerCase() == 'multipart/form-data';
+
+            var params = {
+                extTID: t.tid,
+                extAction: c,
+                extMethod: m.name,
+                extUpload: String(isUpload)
+            };
+            if(callback && typeof callback == 'object'){
+                Ext.apply(params, callback.params);
+            }
+            Ext.Ajax.request({
+                url: this.url,
+                params: params,
+                callback: this.onData,
+                scope: this,
+                form: form,
+                isUpload: isUpload,
+                ts: t
+            });
+        }
+    },
+
+    createMethod : function(c, m){
+        var f;
+        if(!m.formHandler){
+            f = function(){
+                this.doCall(c, m, Array.prototype.slice.call(arguments, 0));
+            }.createDelegate(this);
+        }else{
+            f = function(form, callback, scope){
+                this.doForm(c, m, form, callback, scope);
+            }.createDelegate(this);
+        }
+        f.directCfg = {
+            action: c,
+            method: m
+        };
+        return f;
+    },
+
+    getTransaction: function(opt){
+        return opt && opt.tid ? Ext.Direct.getTransaction(opt.tid) : null;
+    },
+
+    doCallback: function(t, e){
+        var fn = e.status ? 'success' : 'failure';
+        if(t && t.cb){
+            var hs = t.cb;
+            var result = e.result || e.data;
+            if(typeof hs == 'function'){
+                hs(result, e);
+            } else{
+                Ext.callback(hs[fn], hs.scope, [result, e]);
+                Ext.callback(hs.callback, hs.scope, [result, e]);
+            }
+        }
+    }
+});
+Ext.Direct.PROVIDERS['remoting'] = Ext.direct.RemotingProvider;
+Ext.data.DirectProxy = function(config){
+	Ext.apply(this, config);
+    if(typeof this.paramOrder == 'string'){
+        this.paramOrder = this.paramOrder.split(/[\s,|]/);
+    }
+    Ext.data.DirectProxy.superclass.constructor.call(this);
+};
+
+Ext.extend(Ext.data.DirectProxy, Ext.data.DataProxy, {
+
+	paramOrder: undefined,
+	paramsAsHash: true,
+	directFn: undefined,
+
+    load: function(params, reader, cb, scope, arg){
+		if(this.fireEvent("beforeload", this, params) !== false) {
+			var args = [];
+			if(this.paramOrder){
+				for(var i = 0, len = this.paramOrder.length; i < len; i++){
+					args.push(params[this.paramOrder[i]]);
+				}
+			}else if(this.paramsAsHash){
+				args.push(params);
+			}
+			args.push({
+				callback: function(result, e){
+					if(!e.status){
+						this.fireEvent("loadexception", this, e, result);
+            			cb.call(scope, null, arg, false);
+            			return;
+					}
+					var rs;
+			        try {
+			            rs = reader.readRecords(result);
+			        }catch(ex){
+			            this.fireEvent("loadexception", this, e, result, ex);
+			            cb.call(scope, null, arg, false);
+			            return;
+			        }
+			        this.fireEvent("load", this, e, arg);
+			        cb.call(scope, rs, arg, true);
+				},
+
+				scope: this
+			});
+
+			this.directFn.apply(window, args);
+		} else {
+			cb.call(scope || this, null, arg, false);
+		}
+	}
+});
+Ext.data.DirectStore = function(c){
+	var pcfg = Ext.copyTo({}, c, 'paramOrder,paramsAsHash,directFn');
+	Ext.data.DirectStore.superclass.constructor.call(this, Ext.apply(c, {
+        proxy: new Ext.data.DirectProxy(pcfg),
+        reader: new Ext.data.JsonReader(c, c.fields)
+    }));
+};
+Ext.extend(Ext.data.DirectStore, Ext.data.Store);
+
 Ext.data.Tree = function(root){
    this.nodeHash = {};
    
@@ -14088,428 +14106,428 @@
         this.initialConfig.handler.apply(this.initialConfig.scope || window, arguments);
     }
 };
-
-(function(){ 
-Ext.Layer = function(config, existingEl){
-    config = config || {};
-    var dh = Ext.DomHelper;
-    var cp = config.parentEl, pel = cp ? Ext.getDom(cp) : document.body;
-    if(existingEl){
-        this.dom = Ext.getDom(existingEl);
-    }
-    if(!this.dom){
-        var o = config.dh || {tag: "div", cls: "x-layer"};
-        this.dom = dh.append(pel, o);
-    }
-    if(config.cls){
-        this.addClass(config.cls);
-    }
-    this.constrain = config.constrain !== false;
-    this.visibilityMode = Ext.Element.VISIBILITY;
-    if(config.id){
-        this.id = this.dom.id = config.id;
-    }else{
-        this.id = Ext.id(this.dom);
-    }
-    this.zindex = config.zindex || this.getZIndex();
-    this.position("absolute", this.zindex);
-    if(config.shadow){
-        this.shadowOffset = config.shadowOffset || 4;
-        this.shadow = new Ext.Shadow({
-            offset : this.shadowOffset,
-            mode : config.shadow
-        });
-    }else{
-        this.shadowOffset = 0;
-    }
-    this.useShim = config.shim !== false && Ext.useShims;
-    this.useDisplay = config.useDisplay;
-    this.hide();
-};
-
-var supr = Ext.Element.prototype;
-
-// shims are shared among layer to keep from having 100 iframes
-var shims = [];
-
-Ext.extend(Ext.Layer, Ext.Element, {
-
-    getZIndex : function(){
-        return this.zindex || parseInt(this.getStyle("z-index"), 10) || 11000;
-    },
-
-    getShim : function(){
-        if(!this.useShim){
-            return null;
-        }
-        if(this.shim){
-            return this.shim;
-        }
-        var shim = shims.shift();
-        if(!shim){
-            shim = this.createShim();
-            shim.enableDisplayMode('block');
-            shim.dom.style.display = 'none';
-            shim.dom.style.visibility = 'visible';
-        }
-        var pn = this.dom.parentNode;
-        if(shim.dom.parentNode != pn){
-            pn.insertBefore(shim.dom, this.dom);
-        }
-        shim.setStyle('z-index', this.getZIndex()-2);
-        this.shim = shim;
-        return shim;
-    },
-
-    hideShim : function(){
-        if(this.shim){
-            this.shim.setDisplayed(false);
-            shims.push(this.shim);
-            delete this.shim;
-        }
-    },
-
-    disableShadow : function(){
-        if(this.shadow){
-            this.shadowDisabled = true;
-            this.shadow.hide();
-            this.lastShadowOffset = this.shadowOffset;
-            this.shadowOffset = 0;
-        }
-    },
-
-    enableShadow : function(show){
-        if(this.shadow){
-            this.shadowDisabled = false;
-            this.shadowOffset = this.lastShadowOffset;
-            delete this.lastShadowOffset;
-            if(show){
-                this.sync(true);
-            }
-        }
-    },
-
-    // private
-    // this code can execute repeatedly in milliseconds (i.e. during a drag) so
-    // code size was sacrificed for effeciency (e.g. no getBox/setBox, no XY calls)
-    sync : function(doShow){
-        var sw = this.shadow;
-        if(!this.updating && this.isVisible() && (sw || this.useShim)){
-            var sh = this.getShim();
-
-            var w = this.getWidth(),
-                h = this.getHeight();
-
-            var l = this.getLeft(true),
-                t = this.getTop(true);
-
-            if(sw && !this.shadowDisabled){
-                if(doShow && !sw.isVisible()){
-                    sw.show(this);
-                }else{
-                    sw.realign(l, t, w, h);
-                }
-                if(sh){
-                    if(doShow){
-                       sh.show();
-                    }
-                    // fit the shim behind the shadow, so it is shimmed too
-                    var a = sw.adjusts, s = sh.dom.style;
-                    s.left = (Math.min(l, l+a.l))+"px";
-                    s.top = (Math.min(t, t+a.t))+"px";
-                    s.width = (w+a.w)+"px";
-                    s.height = (h+a.h)+"px";
-                }
-            }else if(sh){
-                if(doShow){
-                   sh.show();
-                }
-                sh.setSize(w, h);
-                sh.setLeftTop(l, t);
-            }
-            
-        }
-    },
-
-    // private
-    destroy : function(){
-        this.hideShim();
-        if(this.shadow){
-            this.shadow.hide();
-        }
-        this.removeAllListeners();
-        Ext.removeNode(this.dom);
-        Ext.Element.uncache(this.id);
-    },
-
-    remove : function(){
-        this.destroy();
-    },
-
-    // private
-    beginUpdate : function(){
-        this.updating = true;
-    },
-
-    // private
-    endUpdate : function(){
-        this.updating = false;
-        this.sync(true);
-    },
-
-    // private
-    hideUnders : function(negOffset){
-        if(this.shadow){
-            this.shadow.hide();
-        }
-        this.hideShim();
-    },
-
-    // private
-    constrainXY : function(){
-        if(this.constrain){
-            var vw = Ext.lib.Dom.getViewWidth(),
-                vh = Ext.lib.Dom.getViewHeight();
-            var s = Ext.getDoc().getScroll();
-
-            var xy = this.getXY();
-            var x = xy[0], y = xy[1];
-            var so = this.shadowOffset;
-            var w = this.dom.offsetWidth+so, h = this.dom.offsetHeight+so;
-            // only move it if it needs it
-            var moved = false;
-            // first validate right/bottom
-            if((x + w) > vw+s.left){
-                x = vw - w - so;
-                moved = true;
-            }
-            if((y + h) > vh+s.top){
-                y = vh - h - so;
-                moved = true;
-            }
-            // then make sure top/left isn't negative
-            if(x < s.left){
-                x = s.left;
-                moved = true;
-            }
-            if(y < s.top){
-                y = s.top;
-                moved = true;
-            }
-            if(moved){
-                if(this.avoidY){
-                    var ay = this.avoidY;
-                    if(y <= ay && (y+h) >= ay){
-                        y = ay-h-5;   
-                    }
-                }
-                xy = [x, y];
-                this.storeXY(xy);
-                supr.setXY.call(this, xy);
-                this.sync();
-            }
-        }
-    },
-
-    isVisible : function(){
-        return this.visible;    
-    },
-
-    // private
-    showAction : function(){
-        this.visible = true; // track visibility to prevent getStyle calls
-        if(this.useDisplay === true){
-            this.setDisplayed("");
-        }else if(this.lastXY){
-            supr.setXY.call(this, this.lastXY);
-        }else if(this.lastLT){
-            supr.setLeftTop.call(this, this.lastLT[0], this.lastLT[1]);
-        }
-    },
-
-    // private
-    hideAction : function(){
-        this.visible = false;
-        if(this.useDisplay === true){
-            this.setDisplayed(false);
-        }else{
-            this.setLeftTop(-10000,-10000);
-        }
-    },
-
-    // overridden Element method
-    setVisible : function(v, a, d, c, e){
-        if(v){
-            this.showAction();
-        }
-        if(a && v){
-            var cb = function(){
-                this.sync(true);
-                if(c){
-                    c();
-                }
-            }.createDelegate(this);
-            supr.setVisible.call(this, true, true, d, cb, e);
-        }else{
-            if(!v){
-                this.hideUnders(true);
-            }
-            var cb = c;
-            if(a){
-                cb = function(){
-                    this.hideAction();
-                    if(c){
-                        c();
-                    }
-                }.createDelegate(this);
-            }
-            supr.setVisible.call(this, v, a, d, cb, e);
-            if(v){
-                this.sync(true);
-            }else if(!a){
-                this.hideAction();
-            }
-        }
-    },
-
-    storeXY : function(xy){
-        delete this.lastLT;
-        this.lastXY = xy;
-    },
-
-    storeLeftTop : function(left, top){
-        delete this.lastXY;
-        this.lastLT = [left, top];
-    },
-
-    // private
-    beforeFx : function(){
-        this.beforeAction();
-        return Ext.Layer.superclass.beforeFx.apply(this, arguments);
-    },
-
-    // private
-    afterFx : function(){
-        Ext.Layer.superclass.afterFx.apply(this, arguments);
-        this.sync(this.isVisible());
-    },
-
-    // private
-    beforeAction : function(){
-        if(!this.updating && this.shadow){
-            this.shadow.hide();
-        }
-    },
-
-    // overridden Element method
-    setLeft : function(left){
-        this.storeLeftTop(left, this.getTop(true));
-        supr.setLeft.apply(this, arguments);
-        this.sync();
-    },
-
-    setTop : function(top){
-        this.storeLeftTop(this.getLeft(true), top);
-        supr.setTop.apply(this, arguments);
-        this.sync();
-    },
-
-    setLeftTop : function(left, top){
-        this.storeLeftTop(left, top);
-        supr.setLeftTop.apply(this, arguments);
-        this.sync();
-    },
-
-    setXY : function(xy, a, d, c, e){
-        this.fixDisplay();
-        this.beforeAction();
-        this.storeXY(xy);
-        var cb = this.createCB(c);
-        supr.setXY.call(this, xy, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // private
-    createCB : function(c){
-        var el = this;
-        return function(){
-            el.constrainXY();
-            el.sync(true);
-            if(c){
-                c();
-            }
-        };
-    },
-
-    // overridden Element method
-    setX : function(x, a, d, c, e){
-        this.setXY([x, this.getY()], a, d, c, e);
-    },
-
-    // overridden Element method
-    setY : function(y, a, d, c, e){
-        this.setXY([this.getX(), y], a, d, c, e);
-    },
-
-    // overridden Element method
-    setSize : function(w, h, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        supr.setSize.call(this, w, h, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // overridden Element method
-    setWidth : function(w, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        supr.setWidth.call(this, w, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // overridden Element method
-    setHeight : function(h, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        supr.setHeight.call(this, h, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // overridden Element method
-    setBounds : function(x, y, w, h, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        if(!a){
-            this.storeXY([x, y]);
-            supr.setXY.call(this, [x, y]);
-            supr.setSize.call(this, w, h, a, d, cb, e);
-            cb();
-        }else{
-            supr.setBounds.call(this, x, y, w, h, a, d, cb, e);
-        }
-        return this;
-    },
-    
-    
-    setZIndex : function(zindex){
-        this.zindex = zindex;
-        this.setStyle("z-index", zindex + 2);
-        if(this.shadow){
-            this.shadow.setZIndex(zindex + 1);
-        }
-        if(this.shim){
-            this.shim.setStyle("z-index", zindex);
-        }
-    }
-});
+
+(function(){
+Ext.Layer = function(config, existingEl){
+    config = config || {};
+    var dh = Ext.DomHelper;
+    var cp = config.parentEl, pel = cp ? Ext.getDom(cp) : document.body;
+    if(existingEl){
+        this.dom = Ext.getDom(existingEl);
+    }
+    if(!this.dom){
+        var o = config.dh || {tag: "div", cls: "x-layer"};
+        this.dom = dh.append(pel, o);
+    }
+    if(config.cls){
+        this.addClass(config.cls);
+    }
+    this.constrain = config.constrain !== false;
+    this.visibilityMode = Ext.Element.VISIBILITY;
+    if(config.id){
+        this.id = this.dom.id = config.id;
+    }else{
+        this.id = Ext.id(this.dom);
+    }
+    this.zindex = config.zindex || this.getZIndex();
+    this.position("absolute", this.zindex);
+    if(config.shadow){
+        this.shadowOffset = config.shadowOffset || 4;
+        this.shadow = new Ext.Shadow({
+            offset : this.shadowOffset,
+            mode : config.shadow
+        });
+    }else{
+        this.shadowOffset = 0;
+    }
+    this.useShim = config.shim !== false && Ext.useShims;
+    this.useDisplay = config.useDisplay;
+    this.hide();
+};
+
+var supr = Ext.Element.prototype;
+
+// shims are shared among layer to keep from having 100 iframes
+var shims = [];
+
+Ext.extend(Ext.Layer, Ext.Element, {
+
+    getZIndex : function(){
+        return this.zindex || parseInt(this.getStyle("z-index"), 10) || 11000;
+    },
+
+    getShim : function(){
+        if(!this.useShim){
+            return null;
+        }
+        if(this.shim){
+            return this.shim;
+        }
+        var shim = shims.shift();
+        if(!shim){
+            shim = this.createShim();
+            shim.enableDisplayMode('block');
+            shim.dom.style.display = 'none';
+            shim.dom.style.visibility = 'visible';
+        }
+        var pn = this.dom.parentNode;
+        if(shim.dom.parentNode != pn){
+            pn.insertBefore(shim.dom, this.dom);
+        }
+        shim.setStyle('z-index', this.getZIndex()-2);
+        this.shim = shim;
+        return shim;
+    },
+
+    hideShim : function(){
+        if(this.shim){
+            this.shim.setDisplayed(false);
+            shims.push(this.shim);
+            delete this.shim;
+        }
+    },
+
+    disableShadow : function(){
+        if(this.shadow){
+            this.shadowDisabled = true;
+            this.shadow.hide();
+            this.lastShadowOffset = this.shadowOffset;
+            this.shadowOffset = 0;
+        }
+    },
+
+    enableShadow : function(show){
+        if(this.shadow){
+            this.shadowDisabled = false;
+            this.shadowOffset = this.lastShadowOffset;
+            delete this.lastShadowOffset;
+            if(show){
+                this.sync(true);
+            }
+        }
+    },
+
+    // private
+    // this code can execute repeatedly in milliseconds (i.e. during a drag) so
+    // code size was sacrificed for effeciency (e.g. no getBox/setBox, no XY calls)
+    sync : function(doShow){
+        var sw = this.shadow;
+        if(!this.updating && this.isVisible() && (sw || this.useShim)){
+            var sh = this.getShim();
+
+            var w = this.getWidth(),
+                h = this.getHeight();
+
+            var l = this.getLeft(true),
+                t = this.getTop(true);
+
+            if(sw && !this.shadowDisabled){
+                if(doShow && !sw.isVisible()){
+                    sw.show(this);
+                }else{
+                    sw.realign(l, t, w, h);
+                }
+                if(sh){
+                    if(doShow){
+                       sh.show();
+                    }
+                    // fit the shim behind the shadow, so it is shimmed too
+                    var a = sw.adjusts, s = sh.dom.style;
+                    s.left = (Math.min(l, l+a.l))+"px";
+                    s.top = (Math.min(t, t+a.t))+"px";
+                    s.width = (w+a.w)+"px";
+                    s.height = (h+a.h)+"px";
+                }
+            }else if(sh){
+                if(doShow){
+                   sh.show();
+                }
+                sh.setSize(w, h);
+                sh.setLeftTop(l, t);
+            }
+
+        }
+    },
+
+    // private
+    destroy : function(){
+        this.hideShim();
+        if(this.shadow){
+            this.shadow.hide();
+        }
+        this.removeAllListeners();
+        Ext.removeNode(this.dom);
+        Ext.Element.uncache(this.id);
+    },
+
+    remove : function(){
+        this.destroy();
+    },
+
+    // private
+    beginUpdate : function(){
+        this.updating = true;
+    },
+
+    // private
+    endUpdate : function(){
+        this.updating = false;
+        this.sync(true);
+    },
+
+    // private
+    hideUnders : function(negOffset){
+        if(this.shadow){
+            this.shadow.hide();
+        }
+        this.hideShim();
+    },
+
+    // private
+    constrainXY : function(){
+        if(this.constrain){
+            var vw = Ext.lib.Dom.getViewWidth(),
+                vh = Ext.lib.Dom.getViewHeight();
+            var s = Ext.getDoc().getScroll();
+
+            var xy = this.getXY();
+            var x = xy[0], y = xy[1];
+            var so = this.shadowOffset;
+            var w = this.dom.offsetWidth+so, h = this.dom.offsetHeight+so;
+            // only move it if it needs it
+            var moved = false;
+            // first validate right/bottom
+            if((x + w) > vw+s.left){
+                x = vw - w - so;
+                moved = true;
+            }
+            if((y + h) > vh+s.top){
+                y = vh - h - so;
+                moved = true;
+            }
+            // then make sure top/left isn't negative
+            if(x < s.left){
+                x = s.left;
+                moved = true;
+            }
+            if(y < s.top){
+                y = s.top;
+                moved = true;
+            }
+            if(moved){
+                if(this.avoidY){
+                    var ay = this.avoidY;
+                    if(y <= ay && (y+h) >= ay){
+                        y = ay-h-5;
+                    }
+                }
+                xy = [x, y];
+                this.storeXY(xy);
+                supr.setXY.call(this, xy);
+                this.sync();
+            }
+        }
+    },
+
+    isVisible : function(){
+        return this.visible;
+    },
+
+    // private
+    showAction : function(){
+        this.visible = true; // track visibility to prevent getStyle calls
+        if(this.useDisplay === true){
+            this.setDisplayed("");
+        }else if(this.lastXY){
+            supr.setXY.call(this, this.lastXY);
+        }else if(this.lastLT){
+            supr.setLeftTop.call(this, this.lastLT[0], this.lastLT[1]);
+        }
+    },
+
+    // private
+    hideAction : function(){
+        this.visible = false;
+        if(this.useDisplay === true){
+            this.setDisplayed(false);
+        }else{
+            this.setLeftTop(-10000,-10000);
+        }
+    },
+
+    // overridden Element method
+    setVisible : function(v, a, d, c, e){
+        if(v){
+            this.showAction();
+        }
+        if(a && v){
+            var cb = function(){
+                this.sync(true);
+                if(c){
+                    c();
+                }
+            }.createDelegate(this);
+            supr.setVisible.call(this, true, true, d, cb, e);
+        }else{
+            if(!v){
+                this.hideUnders(true);
+            }
+            var cb = c;
+            if(a){
+                cb = function(){
+                    this.hideAction();
+                    if(c){
+                        c();
+                    }
+                }.createDelegate(this);
+            }
+            supr.setVisible.call(this, v, a, d, cb, e);
+            if(v){
+                this.sync(true);
+            }else if(!a){
+                this.hideAction();
+            }
+        }
+    },
+
+    storeXY : function(xy){
+        delete this.lastLT;
+        this.lastXY = xy;
+    },
+
+    storeLeftTop : function(left, top){
+        delete this.lastXY;
+        this.lastLT = [left, top];
+    },
+
+    // private
+    beforeFx : function(){
+        this.beforeAction();
+        return Ext.Layer.superclass.beforeFx.apply(this, arguments);
+    },
+
+    // private
+    afterFx : function(){
+        Ext.Layer.superclass.afterFx.apply(this, arguments);
+        this.sync(this.isVisible());
+    },
+
+    // private
+    beforeAction : function(){
+        if(!this.updating && this.shadow){
+            this.shadow.hide();
+        }
+    },
+
+    // overridden Element method
+    setLeft : function(left){
+        this.storeLeftTop(left, this.getTop(true));
+        supr.setLeft.apply(this, arguments);
+        this.sync();
+    },
+
+    setTop : function(top){
+        this.storeLeftTop(this.getLeft(true), top);
+        supr.setTop.apply(this, arguments);
+        this.sync();
+    },
+
+    setLeftTop : function(left, top){
+        this.storeLeftTop(left, top);
+        supr.setLeftTop.apply(this, arguments);
+        this.sync();
+    },
+
+    setXY : function(xy, a, d, c, e){
+        this.fixDisplay();
+        this.beforeAction();
+        this.storeXY(xy);
+        var cb = this.createCB(c);
+        supr.setXY.call(this, xy, a, d, cb, e);
+        if(!a){
+            cb();
+        }
+    },
+
+    // private
+    createCB : function(c){
+        var el = this;
+        return function(){
+            el.constrainXY();
+            el.sync(true);
+            if(c){
+                c();
+            }
+        };
+    },
+
+    // overridden Element method
+    setX : function(x, a, d, c, e){
+        this.setXY([x, this.getY()], a, d, c, e);
+    },
+
+    // overridden Element method
+    setY : function(y, a, d, c, e){
+        this.setXY([this.getX(), y], a, d, c, e);
+    },
+
+    // overridden Element method
+    setSize : function(w, h, a, d, c, e){
+        this.beforeAction();
+        var cb = this.createCB(c);
+        supr.setSize.call(this, w, h, a, d, cb, e);
+        if(!a){
+            cb();
+        }
+    },
+
+    // overridden Element method
+    setWidth : function(w, a, d, c, e){
+        this.beforeAction();
+        var cb = this.createCB(c);
+        supr.setWidth.call(this, w, a, d, cb, e);
+        if(!a){
+            cb();
+        }
+    },
+
+    // overridden Element method
+    setHeight : function(h, a, d, c, e){
+        this.beforeAction();
+        var cb = this.createCB(c);
+        supr.setHeight.call(this, h, a, d, cb, e);
+        if(!a){
+            cb();
+        }
+    },
+
+    // overridden Element method
+    setBounds : function(x, y, w, h, a, d, c, e){
+        this.beforeAction();
+        var cb = this.createCB(c);
+        if(!a){
+            this.storeXY([x, y]);
+            supr.setXY.call(this, [x, y]);
+            supr.setSize.call(this, w, h, a, d, cb, e);
+            cb();
+        }else{
+            supr.setBounds.call(this, x, y, w, h, a, d, cb, e);
+        }
+        return this;
+    },
+
+    
+    setZIndex : function(zindex){
+        this.zindex = zindex;
+        this.setStyle("z-index", zindex + 2);
+        if(this.shadow){
+            this.shadow.setZIndex(zindex + 1);
+        }
+        if(this.shim){
+            this.shim.setStyle("z-index", zindex);
+        }
+    }
+});
 })();
 
 Ext.Shadow = function(config){
@@ -16064,6 +16082,7 @@
     defaultNSCMargins : {left:5,top:5,right:5,bottom:5},
     // private
     defaultEWCMargins : {left:5,top:0,right:5,bottom:0},
+    floatingZIndex: 100,
 
     
     isCollapsed : false,
@@ -16197,7 +16216,7 @@
         }
         c.hide();
         c.dom.style.visibility = 'hidden';
-        this.panel.el.setStyle('z-index', 100);
+        this.panel.el.setStyle('z-index', this.floatingZIndex);
     },
 
     // private
@@ -16351,7 +16370,7 @@
         }
         this.restoreLT = [this.el.dom.style.left, this.el.dom.style.top];
         this.el.alignTo(this.collapsedEl, this.getCollapseAnchor());
-        this.el.setStyle("z-index", 102);
+        this.el.setStyle("z-index", this.floatingZIndex+2);
         if(this.animFloat !== false){
             this.beforeSlide();
             this.el.slideIn(this.getSlideAnchor(), {
@@ -16773,7 +16792,7 @@
 
     // private
     adjustWidthAnchor : function(value, comp){
-        return value - (comp.isFormField  ? (comp.hideLabel ? 0 : this.labelAdjust) : 0);
+        return value - (comp.isFormField || comp.fieldLabel  ? (comp.hideLabel ? 0 : this.labelAdjust) : 0);
     },
 
     // private
@@ -17662,6 +17681,7 @@
             this.fbar.toolbarCls = 'x-panel-fbar';
 
             var bct = this.footer.createChild({cls: 'x-panel-btns x-panel-btns-'+this.buttonAlign});
+            this.fbar.ownerCt = this;
             this.fbar.render(bct);
             bct.createChild({cls:'x-clear'});
         }
@@ -17794,6 +17814,19 @@
         }
     },
 
+    doLayout : function(shallow){
+        Ext.Panel.superclass.doLayout.call(this, shallow);
+        if(this.topToolbar){
+            this.topToolbar.doLayout();
+        }
+        if(this.bottomToolbar){
+            this.bottomToolbar.doLayout();
+        }
+        if(this.fbar){
+            this.fbar.doLayout();
+        }
+    },
+
     // private
     onShow : function(){
         if(this.floating){
@@ -18006,7 +18039,22 @@
         if(w !== undefined || h !== undefined){
             if(!this.collapsed){
                 if(typeof w == 'number'){
-                    w = this.adjustBodyWidth(w - this.getFrameWidth());
+					w = this.adjustBodyWidth(w - this.getFrameWidth());
+                    if(this.tbar){
+	                    this.tbar.setWidth(w);
+	                    if(this.topToolbar){
+	                        this.topToolbar.setSize(w);
+	                    }
+	                }
+					if(this.bbar){
+	                    this.bbar.setWidth(w);
+	                    if(this.bottomToolbar){
+	                        this.bottomToolbar.setSize(w);
+	                    }
+	                }
+					if(this.fbar){
+	                    this.fbar.setSize(w - this.fbar.container.getFrameWidth('lr'));
+	                }
                     this.body.setWidth(w);
                 }else if(w == 'auto'){
                     this.body.setWidth(w);
@@ -18014,24 +18062,11 @@
 
                 if(typeof h == 'number'){
                     h = this.adjustBodyHeight(h - this.getFrameHeight());
-                    this.body.setHeight(h);
+				    this.body.setHeight(h);
                 }else if(h == 'auto'){
                     this.body.setHeight(h);
                 }
 
-                if(this.tbar){
-                    this.tbar.setWidth(w);
-                    if(this.topToolbar){
-                        this.topToolbar.setSize(w);
-                    }
-                }
-                if(this.bbar){
-                    this.bbar.setWidth(w);
-                    if(this.bottomToolbar){
-                        this.bottomToolbar.setSize(w);
-                    }
-                }
-                
                 if(this.disabled && this.el._mask){
                     this.el._mask.setSize(this.el.dom.clientWidth, this.el.getHeight());
                 }
@@ -18325,6 +18360,7 @@
             this.mask = this.container.createChild({cls:"ext-el-mask"}, this.el.dom);
             this.mask.enableDisplayMode("block");
             this.mask.hide();
+            this.mask.on('click', this.focus, this);
         }
     },
 
@@ -18474,14 +18510,15 @@
     focus : function(){
         var f = this.focusEl, db = this.defaultButton, t = typeof db;
         if(t != 'undefined'){
-            if(t == 'number'){
-                f = this.buttons[db];
+            if(t == 'number' && this.fbar){
+                f = this.fbar.items.get(db);
             }else if(t == 'string'){
                 f = Ext.getCmp(db);
             }else{
                 f = db;
             }
         }
+        f = f || this.focusEl;
         f.focus.defer(10, f);
     },
 
@@ -23568,7 +23605,13 @@
 
 
 Ext.Editor = function(field, config){
-    this.field = field;
+    if(field.field){
+        this.field = Ext.create(field.field, 'textfield');
+        config = Ext.apply({}, field); // copy so we don't disturb original config
+        delete config.field;
+    }else{
+        this.field = field;
+    }
     Ext.Editor.superclass.constructor.call(this, config);
 };
 
@@ -23578,6 +23621,7 @@
     
     
     
+    
     value : "",
     
     alignment: "c-c?",
@@ -23619,10 +23663,13 @@
             cls: "x-editor",
             parentEl : ct,
             shim : this.shim,
-            shadowOffset:4,
+            shadowOffset: this.shadowOffset || 4,
             id: this.id,
             constrain: this.constrain
         });
+        if(this.zIndex){
+            this.el.setZIndex(this.zIndex);
+        }
         this.el.setStyle("overflow", Ext.isGecko ? "auto" : "hidden");
         if(this.field.msgTarget != 'title'){
             this.field.msgTarget = 'qtip';
@@ -27887,7 +27934,7 @@
     
     hideOnClick : true,
     
-    hideDelay : 100,
+    clickHideDelay : 1,
 
     // private
     ctype: "Ext.menu.BaseItem",
@@ -27953,7 +28000,7 @@
     // private
     handleClick : function(e){
         if(this.hideOnClick){
-            this.parentMenu.hide.defer(this.hideDelay, this.parentMenu, [true]);
+            this.parentMenu.hide.defer(this.clickHideDelay, this.parentMenu, [true]);
         }
     },
 
@@ -28434,7 +28481,7 @@
     initValue : function(){
         if(this.value !== undefined){
             this.setValue(this.value);
-        }else if(this.el.dom.value.length > 0 && this.el.dom.value != this.emptyText){
+        }else if(!Ext.isEmpty(this.el.dom.value) && this.el.dom.value != this.emptyText){
             this.setValue(this.el.dom.value);
         }
         // reference to original value for reset
@@ -28635,6 +28682,11 @@
         }
     },
 
+    // private, does not work for all fields
+    append :function(v){
+         this.setValue([this.getValue(), v].join(''));
+    },
+
     // private
     adjustSize : function(w, h){
         var s = Ext.form.Field.superclass.adjustSize.call(this, w, h);
@@ -29526,7 +29578,7 @@
         if(typeof this.maxValue == "string"){
             this.maxValue = this.parseDate(this.maxValue);
         }
-        this.ddMatch = null;
+        this.disabledDatesRE = null;
         this.initDisabledDays();
     },
 
@@ -29610,7 +29662,7 @@
             }
         }
         var fvalue = this.formatDate(value);
-        if(this.ddMatch && this.ddMatch.test(fvalue)){
+        if(this.disabledDatesRE && this.disabledDatesRE.test(fvalue)){
             this.markInvalid(String.format(this.disabledDatesText, fvalue));
             return false;
         }
@@ -29696,7 +29748,7 @@
         Ext.apply(this.menu.picker,  {
             minDate : this.minValue,
             maxDate : this.maxValue,
-            disabledDatesRE : this.ddMatch,
+            disabledDatesRE : this.disabledDatesRE,
             disabledDatesText : this.disabledDatesText,
             disabledDays : this.disabledDays,
             disabledDaysText : this.disabledDaysText,
@@ -29726,7 +29778,55 @@
     
 });
 Ext.reg('datefield', Ext.form.DateField);
+
+Ext.form.DisplayField = Ext.extend(Ext.form.Field,  {
+    validationEvent : false,
+    validateOnBlur : false,
+    defaultAutoCreate : {tag: "div"},
+    fieldClass : "x-form-display-field",
+    htmlEncode: false,
+
+    // private
+    initEvents : function(){},
+
+    isValid : function(){
+        return true;
+    },
+
+    validate : function(){
+        return true;
+    },
+
+    getRawValue : function(){
+        var v = this.rendered ? this.el.dom.innerHTML : Ext.value(this.value, '');
+        if(v === this.emptyText){
+            v = '';
+        }
+        if(this.htmlEncode){
+            v = Ext.util.Format.htmlDecode(v);
+        }
+        return v;
+    },
+
+    getValue : function(){
+        return this.getRawValue();
+    },
+
+    setRawValue : function(v){
+        if(this.htmlEncode){
+            v = Ext.util.Format.htmlEncode(v);
+        }
+        return this.rendered ? (this.el.dom.innerHTML = (v === null || v === undefined ? '' : v)) : (this.value = v);
+    },
+
+    setValue : function(v){
+        this.setRawValue(v);
+    }
+});
+
+Ext.reg('displayfield', Ext.form.DisplayField);
 
+
 Ext.form.ComboBox = Ext.extend(Ext.form.TriggerField, {
     
     
@@ -31337,10 +31437,6 @@
     // private
     initComponent :function(){
         this.form = this.createForm();
-        if(this.fileUpload) {
-            this.bodyCfg.enctype = 'multipart/form-data';
-        }
-
         Ext.FormPanel.superclass.initComponent.call(this);
 
         this.bodyCfg = {
@@ -31349,7 +31445,9 @@
             method : this.method || 'POST',
             id : this.formId || Ext.id()
         };
-        
+        if(this.fileUpload) {
+            this.bodyCfg.enctype = 'multipart/form-data';
+        }
         this.initItems();
         
         this.addEvents(
@@ -33709,13 +33807,16 @@
             hd.style.width = ws[i];
         }
 
-        var ns = this.getRows();
+        var ns = this.getRows(), row, trow;
         for(var i = 0, len = ns.length; i < len; i++){
-            ns[i].style.width = tw;
-            ns[i].firstChild.style.width = tw;
-            var row = ns[i].firstChild.rows[0];
-            for(var j = 0; j < clen; j++){
-                row.childNodes[j].style.width = ws[j];
+            row = ns[i];
+            row.style.width = tw;
+            if(row.firstChild){
+                row.firstChild.style.width = tw;
+                trow = row.firstChild.rows[0];
+                for (var j = 0; j < clen; j++) {
+                   trow.childNodes[j].style.width = ws[j];
+                }
             }
         }
 
@@ -33731,11 +33832,14 @@
         var hd = this.getHeaderCell(col);
         hd.style.width = w;
 
-        var ns = this.getRows();
+        var ns = this.getRows(), row;
         for(var i = 0, len = ns.length; i < len; i++){
-            ns[i].style.width = tw;
-            ns[i].firstChild.style.width = tw;
-            ns[i].firstChild.rows[0].childNodes[col].style.width = w;
+            row = ns[i];
+            row.style.width = tw;
+            if(row.firstChild){
+                row.firstChild.style.width = tw;
+                row.firstChild.rows[0].childNodes[col].style.width = w;
+            }
         }
 
         this.onColumnWidthUpdated(col, w, tw);
@@ -33752,11 +33856,14 @@
         var hd = this.getHeaderCell(col);
         hd.style.display = display;
 
-        var ns = this.getRows();
+        var ns = this.getRows(), row;
         for(var i = 0, len = ns.length; i < len; i++){
-            ns[i].style.width = tw;
-            ns[i].firstChild.style.width = tw;
-            ns[i].firstChild.rows[0].childNodes[col].style.display = display;
+            row = ns[i];
+            row.style.width = tw;
+            if(row.firstChild){
+                row.firstChild.style.width = tw;
+                row.firstChild.rows[0].childNodes[col].style.display = display;
+            }
         }
 
         this.onColumnHiddenUpdated(col, hidden, tw);
@@ -33899,6 +34006,11 @@
             //g.on("headercontextmenu", this.handleHdCtx, this);
         }
 
+        if(g.trackMouseOver){
+             this.mainBody.on("mouseover", this.onRowOver, this);
+             this.mainBody.on("mouseout", this.onRowOut, this);
+        }
+
         if(g.enableDragDrop || g.enableDrag){
             this.dragZone = new Ext.grid.GridDragZone(g, {
                 ddGroup : g.ddGroup || 'GridDD'
@@ -33994,7 +34106,7 @@
         var cm = this.cm, ts = this.templates;
         var ct = ts.hcell;
 
-        var cb = [], sb = [], p = {};
+        var cb = [], p = {};
 
         for(var i = 0, len = cm.getColumnCount(); i < len; i++){
             p.id = cm.getColumnId(i);
@@ -34201,7 +34313,7 @@
 
     // private
     fitColumns : function(preventRefresh, onlyExpand, omitColumn){
-        var cm = this.cm, leftOver, dist, i;
+        var cm = this.cm, i;
         var tw = cm.getTotalWidth(false);
         var aw = this.grid.getGridEl().getWidth(true)-this.scrollOffset;
 
@@ -34327,7 +34439,6 @@
         }else{
             index = ds.indexOf(record);
         }
-        var cls = [];
         this.insertRows(ds, index, index, true);
         this.getRow(index).rowIndex = index;
         this.onRemove(ds, record, index+1, true);
@@ -34560,16 +34671,10 @@
     // private
     initUI : function(grid){
         grid.on("headerclick", this.onHeaderClick, this);
-
-        if(grid.trackMouseOver){
-            grid.on("mouseover", this.onRowOver, this);
-          grid.on("mouseout", this.onRowOut, this);
-      }
     },
 
     // private
     initEvents : function(){
-
     },
 
     // private
@@ -34592,7 +34697,7 @@
     // private
     onRowOut : function(e, t){
         var row;
-        if((row = this.findRowIndex(t)) !== false && row !== this.findRowIndex(e.getRelatedTarget())){
+        if((row = this.findRowIndex(t)) !== false && !e.within(this.getRow(row), true)){
             this.removeRowClass(row, "x-grid3-row-over");
         }
     },
@@ -34806,7 +34911,7 @@
         var t = this.view.findHeaderCell(e.getTarget());
         if(t){
             var xy = this.view.fly(t).getXY(), x = xy[0], y = xy[1];
-            var exy = e.getXY(), ex = exy[0], ey = exy[1];
+            var exy = e.getXY(), ex = exy[0];
             var w = t.offsetWidth, adjust = false;
             if((ex - x) <= this.hw){
                 adjust = -1;
@@ -35609,6 +35714,10 @@
         return this.config[index].id;
     },
 
+    getColumnAt : function(index){
+        return this.config[index];
+    },
+
     
     setConfig : function(config, initial){
         if(!initial){ // cleanup
@@ -35824,7 +35933,7 @@
 
     
     getCellEditor : function(colIndex, rowIndex){
-        return this.config[colIndex].editor;
+        return this.config[colIndex].getCellEditor(rowIndex);
     },
 
     
@@ -36597,6 +36706,7 @@
                     ed.record = r;
                     ed.on("complete", this.onEditComplete, this, {single: true});
                     ed.on("specialkey", this.selModel.onEditorKey, this.selModel);
+                    
                     this.activeEditor = ed;
                     var v = this.preEditValue(r, field);
                     ed.startEdit(this.view.getCell(row, col).firstChild, v === undefined ? '' : v);
@@ -36901,16 +37011,14 @@
     Ext.apply(this, config);
 
     if(typeof this.renderer == "string"){
-        this.renderer = Ext.util.Format[c.renderer];
+        this.renderer = Ext.util.Format[this.renderer];
     }
     if(typeof this.id == "undefined"){
         this.id = ++Ext.grid.Column.AUTO_ID;
     }
     if(this.editor){
-        if(this.editor.isFormField){
-            this.editor = new Ext.grid.GridEditor(this.editor);
-        }else if(this.editor.xtype && !this.editor.events){
-            this.editor = new Ext.grid.GridEditor(Ext.create(this.editor, 'textfield'));
+        if(this.editor.xtype && !this.editor.events){
+            this.editor = Ext.create(this.editor, 'textfield');
         }
     }
 }
@@ -36924,6 +37032,25 @@
             return "&#160;";
         }
         return value;
+    },
+
+    getEditor: function(rowIndex){
+        return this.editable !== false ? this.editor : null;
+    },
+
+    getCellEditor: function(rowIndex){
+        var editor = this.getEditor(rowIndex);
+        if(editor){
+            if(!editor.startEdit){
+                if(!editor.gridEditor){
+                    editor.gridEditor = new Ext.grid.GridEditor(editor);
+                }
+                return editor.gridEditor;
+            }else if(editor.startEdit){
+                return editor;
+            }
+        }
+        return null;
     }
 };
 
@@ -38995,7 +39122,7 @@
     }
 
     function startUp() {
-        currentToken = hiddenField.value;
+        currentToken = hiddenField.value ? hiddenField.value : getHash();
 
         if (Ext.isIE) {
             checkIFrame();

Modified: mickael/trunk/ext/v3.0.0-a1/ext-all.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/ext-all.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/ext-all.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -444,36 +444,6 @@
 Ext.EventManager.removeListener(frame,'load',cb,this);this.fireEvent("requestcomplete",this,r,o);Ext.callback(o.success,o.scope,[r,o]);Ext.callback(o.callback,o.scope,[o,true,r]);if(!this.debugUploads){setTimeout(function(){Ext.removeNode(frame);},100);}}
 Ext.EventManager.on(frame,'load',cb,this);form.submit();if(hiddens){for(var i=0,len=hiddens.length;i<len;i++){Ext.removeNode(hiddens[i]);}}}});Ext.Ajax=new Ext.data.Connection({autoAbort:false,serializeForm:function(form){return Ext.lib.Ajax.serializeForm(form);}});
 
-(function(){var transactions={},TID=0,impl,d,pollStartTimer=0,callBuffer=[],callTask,providers={};var get=function(id){return transactions[id]||{};}
-var createEvent=function(t,data,xhr,success,hs){return Ext.apply(t||{},{xhr:xhr,success:success,data:data,arg:hs});}
-var doCallback=function(data,t,success,xhr){var fn=success?'success':'failure';if(t&&t.cb){var hs=t.cb;var e=createEvent(t,data,xhr,success,hs);if(typeof hs=='function'){delete e.arg;hs(data,e);}else{Ext.callback(hs[fn],hs.scope,[data,e]);Ext.callback(hs.callback,hs.scope,[data,e]);}}}
-var handleEvent=function(data,xhr){if(!data){return;}
-var t=get(data.tid);switch(data.type){case'rpc':if(t){doCallback(data.result,t,true,xhr);data.xhr=xhr;d.fireEvent('event',data);delete transactions[data.tid];}else{data.xhr=xhr;d.fireEvent('event',data);}
-break;case'event':data.xhr=xhr;d.fireEvent(data.name,data);d.fireEvent('event',data);break;case'exception':if(t){t.code=data.code;t.message=data.message;t.trace=data.where;doCallback(data.result,t,false,xhr);data.xhr=xhr;d.fireEvent('exception',data);delete transactions[data.tid];}else{data.xhr=xhr;d.fireEvent('exception',data);}
-if(data.where&&d.enableDebug){Ext.Msg.maxWidth=800;Ext.Msg.show({title:'Exception occurred while making a remote call to the server',msg:'Stack trace from the server:',buttons:Ext.MessageBox.OK,multiline:400,width:800,value:data.message+'\n'+data.where});}
-break;}}
-var handleException=function(opt,xhr,type){var t=get(opt.tid);if(t){t.xhr=xhr;t.type=type||d.exceptions.TRANSPORT;doCallback(null,t,false,xhr);d.fireEvent('exception',t);delete transactions[opt.tid];}else{d.fireEvent('exception',{tid:opt.tid,xhr:xhr,code:type||d.exceptions.TRANSPORT});}}
-var cb=function(opt,success,xhr){if(success){var data=null;if(!Ext.isEmpty(xhr.responseText)){if(typeof xhr.responseText=='object'){data=xhr.responseText;}else{try{data=Ext.decode(xhr.responseText);}catch(e){return handleException(opt,xhr,d.exceptions.PARSE);}}
-if(Ext.isArray(data)){for(var i=0,len=data.length;i<len;i++){handleEvent(data[i],xhr);}}else{handleEvent(data,xhr);}}else if(opt.ts){for(var j=0,len=opt.ts.length;j<len;j++){doCallback(null,transactions[opt.ts[j].tid],true,xhr);}}}else{handleException(opt,xhr);}}
-var doSend=function(data){if(d.enableUrlEncode){var params={};params[typeof d.enableUrlEncode=='string'?d.enableUrlEncode:'data']=Ext.encode(data);Ext.Ajax.request({url:d.remoteUrl,params:params,callback:cb,ts:data});}else{Ext.Ajax.request({url:d.remoteUrl,jsonData:data,callback:cb,ts:data});}}
-var combineAndSend=function(){var len=callBuffer.length;if(len>0){doSend(len==1?callBuffer[0]:callBuffer);callBuffer=[];}}
-var doCall=function(c,m,args){var data=null,hs=args[m.len],scope=args[m.len+1];var t={tid:++TID,args:args,action:c,method:m,cb:scope&&typeof hs=='function'?hs.createDelegate(scope):hs};if(d.fireEvent('beforecall',t)!==false){transactions[t.tid]=t;if(m.len!==0){data=args.slice(0,m.len);}
-callBuffer.push({action:c,method:m.name,tid:t.tid,data:data});if(d.enableBuffer){if(!callTask){callTask=new Ext.util.DelayedTask(combineAndSend);}
-callTask.delay(typeof d.enableBuffer=='number'?d.enableBuffer:10);}else{combineAndSend();}
-d.fireEvent('call',t);}}
-var doForm=function(c,m,form,callback,scope){var t={tid:++TID,action:c,method:m,args:[form,callback,scope],cb:scope&&typeof callback=='function'?callback.createDelegate(scope):callback};transactions[t.tid]=t;form=Ext.getDom(form);var isUpload=String(form.getAttribute("enctype")).toLowerCase()=='multipart/form-data';var params={extTID:t.tid,extAction:c,extMethod:m.name,extUpload:String(isUpload)};if(callback&&typeof callback=='object'){Ext.apply(params,callback.params);}
-Ext.Ajax.request({url:d.remoteUrl,params:params,callback:cb,form:form,isUpload:isUpload,ts:{action:c,method:m.name,tid:t.tid,data:null}});}
-var createMethod=function(c,m){var f;if(!m.formHandler){f=function(){doCall(c,m,Array.prototype.slice.call(arguments,0));};}else{f=function(form,callback,scope){doForm(c,m,form,callback,scope);};}
-f.directCfg={action:c,method:m};return f;}
-var onProviderData=function(p,e){switch(e.format){case'string':cb({},true,{responseText:e.data});break;default:cb({},true,e.data);}}
-var onProviderException=function(p,e){handleException({},e.data,e.type);}
-impl=Ext.extend(Ext.util.Observable,{exceptions:{TRANSPORT:'xhr',PARSE:'parse',LOGIN:'login',SERVER:'exception'},constructor:function(){impl.superclass.constructor.call(this);this.addEvents('beforecall','call','beforeevent','event','exception');},defineAPI:function(data){d.remoteUrl=data.url;var o=data.actions||data.cls;for(var c in o){var cls=window[c]||(window[c]={});var ms=o[c];for(var i=0,len=ms.length;i<len;i++){var m=ms[i];cls[m.name]=createMethod(c,m);}}},inject:function(stringData,opt){cb(opt||{},true,{responseText:stringData});},injectRaw:function(opt,success,xhr){cb(opt,success,xhr);},injectTransaction:function(callback){var t={tid:++TID,action:c,method:m,cb:callback};transactions[t.tid]=t;return t;},addProvider:function(provider){if(!provider.events){provider=new d.PROVIDERS[provider.type](provider);}
-if(!provider.isConnected()){provider.connect();}
-provider.id=provider.id||Ext.id;providers[provider.id]=provider;provider.on('data',onProviderData);provider.on('exception',onProviderException);return provider;},getProvider:function(id){return providers[id];},removeProvider:function(id){var provider=id.id?id:providers[id.id];provider.un('data',onProviderData);provider.un('exception',onProviderException);delete providers[provider.id];return provider;},enableBuffer:10});Ext.Direct=d=new impl();d.PROVIDERS={};var reconnId=0;var retryId=0;var clear=function(){clearTimeout(reconnId);clearTimeout(retryId);}
-d.Flash={onData:function(strData){setTimeout(function(){d.inject(strData);},10);},onConnect:function(success){if(success){clear();d.stopPoll();d.fireEvent('connect');}else{d.startPoll();if(d.autoReconnect){d.Flash.reconnect();}}},getFlash:function(){return Ext.isIE?window.xflashDirect:document.xflashDirect;},reconnect:function(){clear();var flash=d.Flash.getFlash();if(flash){reconnId=setTimeout(function(){flash.reconnect();},1000);retryId=setInterval(function(){flash.reconnect();},30000);}},onClose:function(){d.fireEvent('disconnect');d.startPoll();if(d.autoReconnect){d.Flash.reconnect();}}};})();
-
-Ext.data.DirectProvider=Ext.extend(Ext.util.Observable,{priority:1,constructor:function(config){Ext.apply(this,config);this.addEvents('connect','disconnect','data','exception');Ext.data.DirectProvider.superclass.constructor.apply(this,arguments);},isConnected:function(){return false;},connect:Ext.emptyFn,disconnect:Ext.emptyFn});Ext.data.PollingProvider=Ext.extend(Ext.data.DirectProvider,{priority:3,interval:3000,constructor:function(config){Ext.data.PollingProvider.superclass.constructor.apply(this,arguments);this.addEvents('beforepoll','poll');},isConnected:function(){return!!this.pollTask;},connect:function(){if(this.url&&!this.pollTask){this.pollTask=Ext.TaskMgr.start({run:function(){if(this.fireEvent('beforepoll')!==false){Ext.Ajax.request({url:this.url,callback:this.onData,scope:this,params:this.baseParams});}},interval:this.interval,scope:this});this.fireEvent('connect',this);}else if(!this.url){throw'Error initializing PollingProvider, no url configured.';}},disconnect:function(){if(this.pollTask){Ext.TaskMgr.stop(this.pollTask);delete this.pollTask;this.fireEvent('disconnect',this);}},onData:function(opt,success,xhr){if(success){this.fireEvent('data',this,{format:'xhr',data:xhr});}else{this.fireEvent('exception',this,{format:'xhr',data:xhr,type:Ext.Direct.exceptions.TRANSPORT});}}});Ext.Direct.PROVIDERS['poll']=Ext.data.PollingProvider;
-
 Ext.Updater=Ext.extend(Ext.util.Observable,{constructor:function(el,forceNew){el=Ext.get(el);if(!forceNew&&el.updateManager){return el.updateManager;}
 this.el=el;this.defaultUrl=null;this.addEvents("beforeupdate","update","failure");Ext.apply(this,Ext.Updater.defaults);this.transaction=null;this.refreshDelegate=this.refresh.createDelegate(this);this.updateDelegate=this.update.createDelegate(this);this.formUpdateDelegate=this.formUpdate.createDelegate(this);if(!this.renderer){this.renderer=this.getDefaultRenderer();}
 Ext.Updater.superclass.constructor.call(this);},getDefaultRenderer:function(){return new Ext.Updater.BasicRenderer();},getEl:function(){return this.el;},update:function(url,params,callback,discardUrl){if(this.fireEvent("beforeupdate",this.el,url,params)!==false){var cfg,callerScope;if(typeof url=="object"){cfg=url;url=cfg.url;params=params||cfg.params;callback=callback||cfg.callback;discardUrl=discardUrl||cfg.discardUrl;callerScope=cfg.scope;if(typeof cfg.nocache!="undefined"){this.disableCaching=cfg.nocache;};if(typeof cfg.text!="undefined"){this.indicatorText='<div class="loading-indicator">'+cfg.text+"</div>";};if(typeof cfg.scripts!="undefined"){this.loadScripts=cfg.scripts;};if(typeof cfg.timeout!="undefined"){this.timeout=cfg.timeout;};}
@@ -488,20 +458,21 @@
 if(this.loadScripts){this.renderer.render(this.el,response,this,this.updateComplete.createDelegate(this,[response]));}else{this.renderer.render(this.el,response,this);this.updateComplete(response);}},updateComplete:function(response){this.fireEvent("update",this.el,response);if(typeof response.argument.callback=="function"){response.argument.callback.call(response.argument.scope,this.el,true,response,response.argument.options);}},processFailure:function(response){this.transaction=null;this.fireEvent("failure",this.el,response);if(typeof response.argument.callback=="function"){response.argument.callback.call(response.argument.scope,this.el,false,response,response.argument.options);}},setRenderer:function(renderer){this.renderer=renderer;},getRenderer:function(){return this.renderer;},setDefaultUrl:function(defaultUrl){this.defaultUrl=defaultUrl;},abort:function(){if(this.transaction){Ext.Ajax.abort(this.transaction);}},isUpdating:function(){if(this.transaction){return Ext.Ajax.isLoading(this.transaction);}
 return false;}});Ext.Updater.defaults={timeout:30,loadScripts:false,sslBlankUrl:(Ext.SSL_SECURE_URL||"javascript:false"),disableCaching:false,showLoadIndicator:true,indicatorText:'<div class="loading-indicator">Loading...</div>'};Ext.Updater.updateElement=function(el,url,params,options){var um=Ext.get(el).getUpdater();Ext.apply(um,options);um.update(url,params,options?options.callback:null);};Ext.Updater.BasicRenderer=function(){};Ext.Updater.BasicRenderer.prototype={render:function(el,response,updateManager,callback){el.update(response.responseText,updateManager.loadScripts,callback);}};Ext.UpdateManager=Ext.Updater;
 
-(function(){Date.formatCodeToRegex=function(character,currentGroup){var p=Date.parseCodes[character];if(p){p=Ext.type(p)=='function'?p():p;Date.parseCodes[character]=p;}
-return p?Ext.applyIf({c:p.c?String.format(p.c,currentGroup||"{0}"):p.c},p):{g:0,c:null,s:Ext.escapeRe(character)}}
+(function(){function xf(format){var args=Array.prototype.slice.call(arguments,1);return format.replace(/\{(\d+)\}/g,function(m,i){return args[i];});}
+Date.formatCodeToRegex=function(character,currentGroup){var p=Date.parseCodes[character];if(p){p=Ext.type(p)=='function'?p():p;Date.parseCodes[character]=p;}
+return p?Ext.applyIf({c:p.c?xf(p.c,currentGroup||"{0}"):p.c},p):{g:0,c:null,s:Ext.escapeRe(character)}}
 var $f=Date.formatCodeToRegex;Ext.apply(Date,{parseFunctions:{count:0},parseRegexes:[],formatFunctions:{count:0},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],y2kYear:50,MILLI:"ms",SECOND:"s",MINUTE:"mi",HOUR:"h",DAY:"d",MONTH:"mo",YEAR:"y",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNumbers:{Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11},getShortMonthName:function(month){return Date.monthNames[month].substring(0,3);},getShortDayName:function(day){return Date.dayNames[day].substring(0,3);},getMonthNumber:function(name){return Date.monthNumbers[name.substring(0,1).toUpperCase()+name.substring(1,3).toLowerCase()];},formatCodes:{d:"String.leftPad(this.getDate(), 2, '0')",D:"Date.getShortDayName(this.getDay())",j:"this.getDate()",l:"Date.dayNames[this.getDay()]",N:"(this.getDay() ? this.getDay() : 7)",S:"this.getSuffix()",w:"this.getDay()",z:"this.getDayOfYear()",W:"String.leftPad(this.getWeekOfYear(), 2, '0')",F:"Date.monthNames[this.getMonth()]",m:"String.leftPad(this.getMonth() + 1, 2, '0')",M:"Date.getShortMonthName(this.getMonth())",n:"(this.getMonth() + 1)",t:"this.getDaysInMonth()",L:"(this.isLeapYear() ? 1 : 0)",o:"(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"this.getFullYear()",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"String.leftPad(this.getHours(), 2, '0')",i:"String.leftPad(this.getMinutes(), 2, '0')",s:"String.leftPad(this.getSeconds(), 2, '0')",u:"String.leftPad(this.getMilliseconds(), 3, '0')",O:"this.getGMTOffset()",P:"this.getGMTOffset(true)",T:"this.getTimezone()",Z:"(this.getTimezoneOffset() * -60)",c:function(){for(var c="Y-m-dTH:i:sP",code=[],i=0,l=c.length;i<l;++i){var e=c.charAt(i);code.push(e=="T"?"'T'":Date.getFormatCode(e));}
 return code.join(" + ");},U:"Math.round(this.getTime() / 1000)"},parseDate:function(input,format){var p=Date.parseFunctions;if(p[format]==null){Date.createParser(format);}
 var func=p[format];return Date[func](input);},getFormatCode:function(character){var f=Date.formatCodes[character];if(f){f=Ext.type(f)=='function'?f():f;Date.formatCodes[character]=f;}
 return f||("'"+String.escape(character)+"'");},createNewFormat:function(format){var funcName="format"+Date.formatFunctions.count++,code="Date.prototype."+funcName+" = function(){return ",special=false,ch='';Date.formatFunctions[format]=funcName;for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
 else if(special){special=false;code+="'"+String.escape(ch)+"' + ";}
 else{code+=Date.getFormatCode(ch)+" + ";}}
-eval(code.substring(0,code.length-3)+";}");},createParser:function(format){var funcName="parse"+Date.parseFunctions.count++,regexNum=Date.parseRegexes.length,currentGroup=1,code=["Date."+funcName+" = function(input){","var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;","input = String(input);","d = new Date();","y = d.getFullYear();","m = d.getMonth();","d = d.getDate();","var results = input.match(Date.parseRegexes["+regexNum+"]);","if (results && results.length > 0) {\n"].join('\n'),regex="",special=false,ch='';Date.parseFunctions[format]=funcName;for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
+eval(code.substring(0,code.length-3)+";}");},createParser:function(){var code=["Date.{0} = function(input){","var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;","input = String(input);","d = new Date();","y = d.getFullYear();","m = d.getMonth();","d = d.getDate();","var results = input.match(Date.parseRegexes[{1}]);","if(results && results.length > 0){","{2}","if(u){","v = new Date(u * 1000);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){","v = new Date(y, m, d, h, i, s, ms);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){","v = new Date(y, m, d, h, i, s);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){","v = new Date(y, m, d, h, i);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){","v = new Date(y, m, d, h);","}else if (y >= 0 && m >= 0 && d > 0){","v = new Date(y, m, d);","}else if (y >= 0 && m >= 0){","v = new Date(y, m);","}else if (y >= 0){","v = new Date(y);","}","}","return (v && (z != null || o != null))?"
++" (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :"
++" v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;","}"].join('\n');return function(format){var funcName="parse"+Date.parseFunctions.count++,regexNum=Date.parseRegexes.length,currentGroup=1,calc="",regex="",special=false,ch="";Date.parseFunctions[format]=funcName;for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
 else if(special){special=false;regex+=String.escape(ch);}
-else{var obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}
-code+=["if (u){","v = new Date(u * 1000);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){","v = new Date(y, m, d, h, i, s, ms);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){","v = new Date(y, m, d, h, i, s);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){","v = new Date(y, m, d, h, i);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){","v = new Date(y, m, d, h);","}else if (y >= 0 && m >= 0 && d > 0){","v = new Date(y, m, d);","}else if (y >= 0 && m >= 0){","v = new Date(y, m);","}else if (y >= 0){","v = new Date(y);","}","}","return (v && (z != null || o != null))?"
-+" (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :"
-+" v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;","}"].join('\n');Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$","i");eval(code);},parseCodes:{d:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},j:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},D:function(){for(var a=[],i=0;i<7;a.push(Date.getShortDayName(i)),++i);return{g:0,c:null,s:"(?:"+a.join("|")+")"}},l:function(){return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"}},N:{g:0,c:null,s:"[1-7]"},S:{g:0,c:null,s:"(?:st|nd|rd|th)"},w:{g:0,c:null,s:"[0-6]"},z:{g:0,c:null,s:"(?:\\d{1,3}"},W:{g:0,c:null,s:"(?:\\d{2})"},F:function(){return{g:1,c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n",s:"("+Date.monthNames.join("|")+")"}},M:function(){for(var a=[],i=0;i<12;a.push(Date.getShortMonthName(i)),++i);return Ext.applyIf({s:"("+a.join("|")+")"},$f("F"));},m:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{2})"},n:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{1,2})"},t:{g:0,c:null,s:"(?:\\d{2})"},L:{g:0,c:null,s:"(?:1|0)"},o:function(){return $f("Y");},Y:{g:1,c:"y = parseInt(results[{0}], 10);\n",s:"(\\d{4})"},y:{g:1,c:"var ty = parseInt(results[{0}], 10);\n"
+else{var obj=$f(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){calc+=obj.c;}}}
+Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$","i");eval(xf(code,funcName,regexNum,calc));}}(),parseCodes:{d:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},j:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},D:function(){for(var a=[],i=0;i<7;a.push(Date.getShortDayName(i)),++i);return{g:0,c:null,s:"(?:"+a.join("|")+")"}},l:function(){return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"}},N:{g:0,c:null,s:"[1-7]"},S:{g:0,c:null,s:"(?:st|nd|rd|th)"},w:{g:0,c:null,s:"[0-6]"},z:{g:0,c:null,s:"(?:\\d{1,3})"},W:{g:0,c:null,s:"(?:\\d{2})"},F:function(){return{g:1,c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n",s:"("+Date.monthNames.join("|")+")"}},M:function(){for(var a=[],i=0;i<12;a.push(Date.getShortMonthName(i)),++i);return Ext.applyIf({s:"("+a.join("|")+")"},$f("F"));},m:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{2})"},n:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{1,2})"},t:{g:0,c:null,s:"(?:\\d{2})"},L:{g:0,c:null,s:"(?:1|0)"},o:function(){return $f("Y");},Y:{g:1,c:"y = parseInt(results[{0}], 10);\n",s:"(\\d{4})"},y:{g:1,c:"var ty = parseInt(results[{0}], 10);\n"
 +"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:{g:1,c:"if (results[{0}] == 'am') {\n"
 +"if (h == 12) { h = 0; }\n"
 +"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"},A:{g:1,c:"if (results[{0}] == 'AM') {\n"
@@ -846,8 +817,6 @@
 
 Ext.data.XmlStore=function(c){Ext.data.XmlStore.superclass.constructor.call(this,Ext.apply(c,{proxy:c.proxy||(!c.data?new Ext.data.HttpProxy({url:c.url}):undefined),reader:new Ext.data.XmlReader(c,c.fields)}));};Ext.extend(Ext.data.XmlStore,Ext.data.Store);Ext.reg('xmlstore',Ext.data.XmlStore);
 
-Ext.data.DirectStore=function(c){var pcfg=Ext.copyTo({},c,'paramOrder,paramsAsHash,directFn');Ext.data.DirectStore.superclass.constructor.call(this,Ext.apply(c,{proxy:new Ext.data.DirectProxy(pcfg),reader:new Ext.data.JsonReader(c,c.fields)}));};Ext.extend(Ext.data.DirectStore,Ext.data.Store);
-
 Ext.data.Field=function(config){if(typeof config=="string"){config={name:config};}
 Ext.apply(this,config);if(!this.type){this.type="auto";}
 var st=Ext.data.SortTypes;if(typeof this.sortType=="string"){this.sortType=st[this.sortType];}
@@ -877,12 +846,6 @@
 trans.timeoutId=this.handleFailure.defer(this.timeout,this,[trans]);var script=document.createElement("script");script.setAttribute("src",url);script.setAttribute("type","text/javascript");script.setAttribute("id",trans.scriptId);this.head.appendChild(script);this.trans=trans;}else{callback.call(scope||this,null,arg,false);}},isLoading:function(){return this.trans?true:false;},abort:function(){if(this.isLoading()){this.destroyTrans(this.trans);}},destroyTrans:function(trans,isLoaded){this.head.removeChild(document.getElementById(trans.scriptId));clearTimeout(trans.timeoutId);if(isLoaded){window[trans.cb]=undefined;try{delete window[trans.cb];}catch(e){}}else{window[trans.cb]=function(){window[trans.cb]=undefined;try{delete window[trans.cb];}catch(e){}};}},handleResponse:function(o,trans){this.trans=false;this.destroyTrans(trans,true);var result;try{result=trans.reader.readRecords(o);}catch(e){this.fireEvent("loadexception",this,o,trans.arg,e);trans.callback.call(trans.scope||window,null,trans.arg,false);return;}
 this.fireEvent("load",this,o,trans.arg);trans.callback.call(trans.scope||window,result,trans.arg,true);},handleFailure:function(trans){this.trans=false;this.destroyTrans(trans,false);this.fireEvent("loadexception",this,null,trans.arg);trans.callback.call(trans.scope||window,null,trans.arg,false);}});
 
-Ext.data.DirectProxy=function(config){Ext.apply(this,config);if(typeof this.paramOrder=='string'){this.paramOrder=this.paramOrder.split(/[\s,|]/);}
-Ext.data.DirectProxy.superclass.constructor.call(this);};Ext.extend(Ext.data.DirectProxy,Ext.data.DataProxy,{paramOrder:undefined,paramsAsHash:true,directFn:undefined,load:function(params,reader,cb,scope,arg){if(this.fireEvent("beforeload",this,params)!==false){var args=[];if(this.paramOrder){for(var i=0,len=this.paramOrder.length;i<len;i++){args.push(params[this.paramOrder[i]]);}}else if(this.paramsAsHash){args.push(params);}
-args.push({callback:function(result,e){if(!e.success){this.fireEvent("loadexception",this,e,result);cb.call(scope,null,arg,false);return;}
-var rs;try{rs=reader.readRecords(result);}catch(ex){this.fireEvent("loadexception",this,e,result,ex);cb.call(scope,null,arg,false);return;}
-this.fireEvent("load",this,e,arg);cb.call(scope,rs,arg,true);},scope:this});this.directFn.apply(window,args);}else{cb.call(scope||this,null,arg,false);}}});
-
 Ext.data.JsonReader=function(meta,recordType){meta=meta||{};Ext.data.JsonReader.superclass.constructor.call(this,meta,recordType||meta.fields);};Ext.extend(Ext.data.JsonReader,Ext.data.DataReader,{read:function(response){var json=response.responseText;var o=eval("("+json+")");if(!o){throw{message:"JsonReader.read: Json object not found"};}
 return this.readRecords(o);},onMetaChange:function(meta,recordType,o){},simpleAccess:function(obj,subsc){return obj[subsc];},getJsonAccessor:function(){var re=/[\[\.]/;return function(expr){try{return(re.test(expr))?new Function("obj","return obj."+expr):function(obj){return obj[expr];};}catch(e){}
 return Ext.emptyFn;};}(),readRecords:function(o){this.jsonData=o;if(o.metaData){delete this.ef;this.meta=o.metaData;this.recordType=Ext.data.Record.create(o.metaData.fields);this.onMetaChange(this.meta,this.recordType,o);}
@@ -909,6 +872,48 @@
 var totalRecords=records.length;if(s.totalProperty){var v=parseInt(this.getTotal(o),10);if(!isNaN(v)){totalRecords=v;}}
 return{records:records,totalRecords:totalRecords};}});
 
+Ext.Direct=Ext.extend(Ext.util.Observable,{exceptions:{TRANSPORT:'xhr',PARSE:'parse',LOGIN:'login',SERVER:'exception'},constructor:function(){this.addEvents('event','exception');this.transactions={};this.providers={};},addProvider:function(provider){var a=arguments;if(a.length>1){for(var i=0,len=a.length;i<len;i++){this.addProvider(a[i]);}
+return;}
+if(!provider.events){provider=new Ext.Direct.PROVIDERS[provider.type](provider);}
+provider.id=provider.id||Ext.id;this.providers[provider.id]=provider;provider.on('data',this.onProviderData,this);provider.on('exception',this.onProviderException,this);if(!provider.isConnected()){provider.connect();}
+return provider;},getProvider:function(id){return this.providers[id];},removeProvider:function(id){var provider=id.id?id:providers[id.id];provider.un('data',this.onProviderData,this);provider.un('exception',this.onProviderException,this);delete this.providers[provider.id];return provider;},addTransaction:function(t){this.transactions[t.tid]=t;return t;},removeTransaction:function(t){delete this.transactions[t.tid||t];return t;},getTransaction:function(tid){return this.transactions[tid.tid||tid];},onProviderData:function(provider,e){if(Ext.isArray(e)){for(var i=0,len=e.length;i<len;i++){this.onProviderData(provider,e[i]);}
+return;}
+if(e.name&&e.name!='event'&&e.name!='exception'){this.fireEvent(e.name,e);}else if(e.type=='exception'){this.fireEvent('exception',e);}
+this.fireEvent('event',e,provider);},createEvent:function(response,extraProps){return new Ext.Direct.eventTypes[response.type](Ext.apply(response,extraProps));}});Ext.Direct=new Ext.Direct();Ext.Direct.TID=1;Ext.Direct.PROVIDERS={};
+
+Ext.Direct.Transaction=function(config){Ext.apply(this,config);this.tid=++Ext.Direct.TID;this.retryCount=0;}
+Ext.Direct.Transaction.prototype={send:function(){this.provider.queueTransaction(this);},retry:function(){this.retryCount++;this.send();},getProvider:function(){return this.provider;}};
+
+Ext.Direct.Event=function(config){Ext.apply(this,config);}
+Ext.Direct.Event.prototype={status:true,getData:function(){return this.data;}};Ext.Direct.RemotingEvent=Ext.extend(Ext.Direct.Event,{type:'rpc',getTransaction:function(){return this.transaction||Ext.Direct.getTransaction(this.tid);}});Ext.Direct.ExceptionEvent=Ext.extend(Ext.Direct.RemotingEvent,{status:false,type:'exception'});Ext.Direct.eventTypes={'rpc':Ext.Direct.RemotingEvent,'event':Ext.Direct.Event,'exception':Ext.Direct.ExceptionEvent};
+
+Ext.direct.Provider=Ext.extend(Ext.util.Observable,{priority:1,constructor:function(config){Ext.apply(this,config);this.addEvents('connect','disconnect','data','exception');Ext.direct.Provider.superclass.constructor.call(this,config);},isConnected:function(){return false;},connect:Ext.emptyFn,disconnect:Ext.emptyFn});
+
+Ext.direct.JsonProvider=Ext.extend(Ext.direct.Provider,{parseResponse:function(xhr){if(!Ext.isEmpty(xhr.responseText)){if(typeof xhr.responseText=='object'){return xhr.responseText;}
+return Ext.decode(xhr.responseText);}
+return null;},getEvents:function(xhr){var data=null;try{data=this.parseResponse(xhr);}catch(e){var event=new Ext.Direct.ExceptionEvent({data:e,xhr:xhr,code:Ext.Direct.exceptions.PARSE,message:'Error parsing json response: \n\n '+data})
+return[event];}
+var events=[];if(Ext.isArray(data)){for(var i=0,len=data.length;i<len;i++){events.push(Ext.Direct.createEvent(data[i]));}}else{events.push(Ext.Direct.createEvent(data));}
+return events;}});
+
+Ext.direct.PollingProvider=Ext.extend(Ext.direct.JsonProvider,{priority:3,interval:3000,constructor:function(config){Ext.direct.PollingProvider.superclass.constructor.call(this,config);this.addEvents('beforepoll','poll');},isConnected:function(){return!!this.pollTask;},connect:function(){if(this.url&&!this.pollTask){this.pollTask=Ext.TaskMgr.start({run:function(){if(this.fireEvent('beforepoll',this)!==false){if(typeof this.url=='function'){this.url(this.baseParams);}else{Ext.Ajax.request({url:this.url,callback:this.onData,scope:this,params:this.baseParams});}}},interval:this.interval,scope:this});this.fireEvent('connect',this);}else if(!this.url){throw'Error initializing PollingProvider, no url configured.';}},disconnect:function(){if(this.pollTask){Ext.TaskMgr.stop(this.pollTask);delete this.pollTask;this.fireEvent('disconnect',this);}},onData:function(opt,success,xhr){if(success){var events=this.getEvents(xhr);for(var i=0,len=events.length;i<len;i++){var e=events[i];this.fireEvent('data',this,e);}}else{var e=new Ext.Direct.ExceptionEvent({data:e,code:Ext.Direct.exceptions.TRANSPORT,message:'Unable to connect to the server.',xhr:xhr});this.fireEvent('data',this,e);}}});Ext.Direct.PROVIDERS['polling']=Ext.direct.PollingProvider;
+
+Ext.direct.RemotingProvider=Ext.extend(Ext.direct.JsonProvider,{priority:1,enableBuffer:10,maxRetries:1,constructor:function(config){Ext.direct.RemotingProvider.superclass.constructor.call(this,config);this.addEvents('beforecall','call');this.namespace=this.namespace||window;this.transactions={};this.callBuffer=[];},initAPI:function(){var o=this.actions;for(var c in o){var cls=this.namespace[c]||(this.namespace[c]={});var ms=o[c];for(var i=0,len=ms.length;i<len;i++){var m=ms[i];cls[m.name]=this.createMethod(c,m);}}},isConnected:function(){return!!this.connected;},connect:function(){if(this.url){this.initAPI();this.connected=true;this.fireEvent('connect',this);}else if(!this.url){throw'Error initializing RemotingProvider, no url configured.';}},disconnect:function(){if(this.connected){this.connected=false;this.fireEvent('disconnect',this);}},onData:function(opt,success,xhr){if(success){var events=this.getEvents(xhr);for(var i=0,len=events.length;i<len;i++){var e=events[i];var t=e.getTransaction();this.fireEvent('data',this,e);if(t){this.doCallback(t,e,true);Ext.Direct.removeTransaction(t);}}}else{var ts=[].concat(opt.ts);for(var i=0,len=ts.length;i<len;i++){var t=this.getTransaction(opt.ts[i]);if(t&&t.retryCount<this.maxRetries){t.retry();}else{var e=new Ext.Direct.ExceptionEvent({data:e,transaction:t,code:Ext.Direct.exceptions.TRANSPORT,message:'Unable to connect to the server.',xhr:xhr});this.fireEvent('data',this,e);if(t){this.doCallback(t,e,false);Ext.Direct.removeTransaction(t);}}}}},getCallData:function(t){return{action:t.action,method:t.method,data:t.data,type:'rpc',tid:t.tid};},doSend:function(data){var o={url:this.url,callback:this.onData,scope:this};var callData;if(Ext.isArray(data)){callData=[];for(var i=0,len=data.length;i<len;i++){callData.push(this.getCallData(data[i]));}}else{callData=this.getCallData(data);}
+if(this.enableUrlEncode){var params={};params[typeof this.enableUrlEncode=='string'?this.enableUrlEncode:'data']=Ext.encode(callData);o.params=params;}else{o.jsonData=callData;}
+Ext.Ajax.request(o);},combineAndSend:function(){var len=this.callBuffer.length;if(len>0){this.doSend(len==1?this.callBuffer[0]:this.callBuffer);this.callBuffer=[];}},queueTransaction:function(t){this.callBuffer.push(t);if(this.enableBuffer){if(!this.callTask){this.callTask=new Ext.util.DelayedTask(this.combineAndSend,this);}
+this.callTask.delay(typeof this.enableBuffer=='number'?this.enableBuffer:10);}else{this.combineAndSend();}},doCall:function(c,m,args){var data=null,hs=args[m.len],scope=args[m.len+1];if(m.len!==0){data=args.slice(0,m.len);}
+var t=new Ext.Direct.Transaction({provider:this,args:args,action:c,method:m.name,data:data,cb:scope&&typeof hs=='function'?hs.createDelegate(scope):hs});if(this.fireEvent('beforecall',this,t)!==false){Ext.Direct.addTransaction(t);this.queueTransaction(t);this.fireEvent('call',this,t);}},doForm:function(c,m,form,callback,scope){var t=new Ext.Direct.Transaction({provider:this,action:c,method:m.name,args:[form,callback,scope],cb:scope&&typeof callback=='function'?callback.createDelegate(scope):callback});if(this.fireEvent('beforecall',this,t)!==false){Ext.Direct.addTransaction(t);form=Ext.getDom(form);var isUpload=String(form.getAttribute("enctype")).toLowerCase()=='multipart/form-data';var params={extTID:t.tid,extAction:c,extMethod:m.name,extUpload:String(isUpload)};if(callback&&typeof callback=='object'){Ext.apply(params,callback.params);}
+Ext.Ajax.request({url:this.url,params:params,callback:this.onData,scope:this,form:form,isUpload:isUpload,ts:t});}},createMethod:function(c,m){var f;if(!m.formHandler){f=function(){this.doCall(c,m,Array.prototype.slice.call(arguments,0));}.createDelegate(this);}else{f=function(form,callback,scope){this.doForm(c,m,form,callback,scope);}.createDelegate(this);}
+f.directCfg={action:c,method:m};return f;},getTransaction:function(opt){return opt&&opt.tid?Ext.Direct.getTransaction(opt.tid):null;},doCallback:function(t,e){var fn=e.status?'success':'failure';if(t&&t.cb){var hs=t.cb;var result=e.result||e.data;if(typeof hs=='function'){hs(result,e);}else{Ext.callback(hs[fn],hs.scope,[result,e]);Ext.callback(hs.callback,hs.scope,[result,e]);}}}});Ext.Direct.PROVIDERS['remoting']=Ext.direct.RemotingProvider;
+
+Ext.data.DirectProxy=function(config){Ext.apply(this,config);if(typeof this.paramOrder=='string'){this.paramOrder=this.paramOrder.split(/[\s,|]/);}
+Ext.data.DirectProxy.superclass.constructor.call(this);};Ext.extend(Ext.data.DirectProxy,Ext.data.DataProxy,{paramOrder:undefined,paramsAsHash:true,directFn:undefined,load:function(params,reader,cb,scope,arg){if(this.fireEvent("beforeload",this,params)!==false){var args=[];if(this.paramOrder){for(var i=0,len=this.paramOrder.length;i<len;i++){args.push(params[this.paramOrder[i]]);}}else if(this.paramsAsHash){args.push(params);}
+args.push({callback:function(result,e){if(!e.status){this.fireEvent("loadexception",this,e,result);cb.call(scope,null,arg,false);return;}
+var rs;try{rs=reader.readRecords(result);}catch(ex){this.fireEvent("loadexception",this,e,result,ex);cb.call(scope,null,arg,false);return;}
+this.fireEvent("load",this,e,arg);cb.call(scope,rs,arg,true);},scope:this});this.directFn.apply(window,args);}else{cb.call(scope||this,null,arg,false);}}});
+
+Ext.data.DirectStore=function(c){var pcfg=Ext.copyTo({},c,'paramOrder,paramsAsHash,directFn');Ext.data.DirectStore.superclass.constructor.call(this,Ext.apply(c,{proxy:new Ext.data.DirectProxy(pcfg),reader:new Ext.data.JsonReader(c,c.fields)}));};Ext.extend(Ext.data.DirectStore,Ext.data.Store);
+
 Ext.data.Tree=function(root){this.nodeHash={};this.root=null;if(root){this.setRootNode(root);}
 this.addEvents("append","remove","move","insert","beforeappend","beforeremove","beforemove","beforeinsert");Ext.data.Tree.superclass.constructor.call(this);};Ext.extend(Ext.data.Tree,Ext.util.Observable,{pathSeparator:"/",proxyNodeEvent:function(){return this.fireEvent.apply(this,arguments);},getRootNode:function(){return this.root;},setRootNode:function(node){this.root=node;node.ownerTree=this;node.isRoot=true;this.registerNode(node);return node;},getNodeById:function(id){return this.nodeHash[id];},registerNode:function(node){this.nodeHash[node.id]=node;},unregisterNode:function(node){delete this.nodeHash[node.id];},toString:function(){return"[Tree"+(this.id?" "+this.id:"")+"]";}});Ext.data.Node=function(attributes){this.attributes=attributes||{};this.leaf=this.attributes.leaf;this.id=this.attributes.id;if(!this.id){this.id=Ext.id(null,"ynode-");this.attributes.id=this.id;}
 this.childNodes=[];if(!this.childNodes.indexOf){this.childNodes.indexOf=function(o){for(var i=0,len=this.length;i<len;i++){if(this[i]==o)return i;}
@@ -1142,18 +1147,18 @@
 if(Ext.isIE&&Ext.isStrict){target.repaint();}},destroy:function(){var r=['north','south','east','west'];for(var i=0;i<r.length;i++){var region=this[r[i]];if(region){if(region.destroy){region.destroy();}else if(region.split){region.split.destroy(true);}}}
 Ext.layout.BorderLayout.superclass.destroy.call(this);}});Ext.layout.BorderLayout.Region=function(layout,config,pos){Ext.apply(this,config);this.layout=layout;this.position=pos;this.state={};if(typeof this.margins=='string'){this.margins=this.layout.parseMargins(this.margins);}
 this.margins=Ext.applyIf(this.margins||{},this.defaultMargins);if(this.collapsible){if(typeof this.cmargins=='string'){this.cmargins=this.layout.parseMargins(this.cmargins);}
-if(this.collapseMode=='mini'&&!this.cmargins){this.cmargins={left:0,top:0,right:0,bottom:0};}else{this.cmargins=Ext.applyIf(this.cmargins||{},pos=='north'||pos=='south'?this.defaultNSCMargins:this.defaultEWCMargins);}}};Ext.layout.BorderLayout.Region.prototype={collapsible:false,split:false,floatable:true,minWidth:50,minHeight:50,defaultMargins:{left:0,top:0,right:0,bottom:0},defaultNSCMargins:{left:5,top:5,right:5,bottom:5},defaultEWCMargins:{left:5,top:0,right:5,bottom:0},isCollapsed:false,render:function(ct,p){this.panel=p;p.el.enableDisplayMode();this.targetEl=ct;this.el=p.el;var gs=p.getState,ps=this.position;p.getState=function(){return Ext.apply(gs.call(p)||{},this.state);}.createDelegate(this);if(ps!='center'){p.allowQueuedExpand=false;p.on({beforecollapse:this.beforeCollapse,collapse:this.onCollapse,beforeexpand:this.beforeExpand,expand:this.onExpand,hide:this.onHide,show:this.onShow,scope:this});if(this.collapsible){p.collapseEl='el';p.slideAnchor=this.getSlideAnchor();}
+if(this.collapseMode=='mini'&&!this.cmargins){this.cmargins={left:0,top:0,right:0,bottom:0};}else{this.cmargins=Ext.applyIf(this.cmargins||{},pos=='north'||pos=='south'?this.defaultNSCMargins:this.defaultEWCMargins);}}};Ext.layout.BorderLayout.Region.prototype={collapsible:false,split:false,floatable:true,minWidth:50,minHeight:50,defaultMargins:{left:0,top:0,right:0,bottom:0},defaultNSCMargins:{left:5,top:5,right:5,bottom:5},defaultEWCMargins:{left:5,top:0,right:5,bottom:0},floatingZIndex:100,isCollapsed:false,render:function(ct,p){this.panel=p;p.el.enableDisplayMode();this.targetEl=ct;this.el=p.el;var gs=p.getState,ps=this.position;p.getState=function(){return Ext.apply(gs.call(p)||{},this.state);}.createDelegate(this);if(ps!='center'){p.allowQueuedExpand=false;p.on({beforecollapse:this.beforeCollapse,collapse:this.onCollapse,beforeexpand:this.beforeExpand,expand:this.onExpand,hide:this.onHide,show:this.onShow,scope:this});if(this.collapsible){p.collapseEl='el';p.slideAnchor=this.getSlideAnchor();}
 if(p.tools&&p.tools.toggle){p.tools.toggle.addClass('x-tool-collapse-'+ps);p.tools.toggle.addClassOnOver('x-tool-collapse-'+ps+'-over');}}},getCollapsedEl:function(){if(!this.collapsedEl){if(!this.toolTemplate){var tt=new Ext.Template('<div class="x-tool x-tool-{id}">&#160;</div>');tt.disableFormats=true;tt.compile();Ext.layout.BorderLayout.Region.prototype.toolTemplate=tt;}
 this.collapsedEl=this.targetEl.createChild({cls:"x-layout-collapsed x-layout-collapsed-"+this.position,id:this.panel.id+'-xcollapsed'});this.collapsedEl.enableDisplayMode('block');if(this.collapseMode=='mini'){this.collapsedEl.addClass('x-layout-cmini-'+this.position);this.miniCollapsedEl=this.collapsedEl.createChild({cls:"x-layout-mini x-layout-mini-"+this.position,html:"&#160;"});this.miniCollapsedEl.addClassOnOver('x-layout-mini-over');this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on('click',this.onExpandClick,this,{stopEvent:true});}else{var t=this.toolTemplate.append(this.collapsedEl.dom,{id:'expand-'+this.position},true);t.addClassOnOver('x-tool-expand-'+this.position+'-over');t.on('click',this.onExpandClick,this,{stopEvent:true});if(this.floatable!==false){this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this.collapseClick,this);}}}
 return this.collapsedEl;},onExpandClick:function(e){if(this.isSlid){this.afterSlideIn();this.panel.expand(false);}else{this.panel.expand();}},onCollapseClick:function(e){this.panel.collapse();},beforeCollapse:function(p,animate){this.lastAnim=animate;if(this.splitEl){this.splitEl.hide();}
 this.getCollapsedEl().show();this.panel.el.setStyle('z-index',100);this.isCollapsed=true;this.layout.layout();},onCollapse:function(animate){this.panel.el.setStyle('z-index',1);if(this.lastAnim===false||this.panel.animCollapse===false){this.getCollapsedEl().dom.style.visibility='visible';}else{this.getCollapsedEl().slideIn(this.panel.slideAnchor,{duration:.2});}
 this.state.collapsed=true;this.panel.saveState();},beforeExpand:function(animate){var c=this.getCollapsedEl();this.el.show();if(this.position=='east'||this.position=='west'){this.panel.setSize(undefined,c.getHeight());}else{this.panel.setSize(c.getWidth(),undefined);}
-c.hide();c.dom.style.visibility='hidden';this.panel.el.setStyle('z-index',100);},onExpand:function(){this.isCollapsed=false;if(this.splitEl){this.splitEl.show();}
+c.hide();c.dom.style.visibility='hidden';this.panel.el.setStyle('z-index',this.floatingZIndex);},onExpand:function(){this.isCollapsed=false;if(this.splitEl){this.splitEl.show();}
 this.layout.layout();this.panel.el.setStyle('z-index',1);this.state.collapsed=false;this.panel.saveState();},collapseClick:function(e){if(this.isSlid){e.stopPropagation();this.slideIn();}else{e.stopPropagation();this.slideOut();}},onHide:function(){if(this.isCollapsed){this.getCollapsedEl().hide();}else if(this.splitEl){this.splitEl.hide();}},onShow:function(){if(this.isCollapsed){this.getCollapsedEl().show();}else if(this.splitEl){this.splitEl.show();}},isVisible:function(){return!this.panel.hidden;},getMargins:function(){return this.isCollapsed&&this.cmargins?this.cmargins:this.margins;},getSize:function(){return this.isCollapsed?this.getCollapsedEl().getSize():this.panel.getSize();},setPanel:function(panel){this.panel=panel;},getMinWidth:function(){return this.minWidth;},getMinHeight:function(){return this.minHeight;},applyLayoutCollapsed:function(box){var ce=this.getCollapsedEl();ce.setLeftTop(box.x,box.y);ce.setSize(box.width,box.height);},applyLayout:function(box){if(this.isCollapsed){this.applyLayoutCollapsed(box);}else{this.panel.setPosition(box.x,box.y);this.panel.setSize(box.width,box.height);}},beforeSlide:function(){this.panel.beforeEffect();},afterSlide:function(){this.panel.afterEffect();},initAutoHide:function(){if(this.autoHide!==false){if(!this.autoHideHd){var st=new Ext.util.DelayedTask(this.slideIn,this);this.autoHideHd={"mouseout":function(e){if(!e.within(this.el,true)){st.delay(500);}},"mouseover":function(e){st.cancel();},scope:this};}
 this.el.on(this.autoHideHd);}},clearAutoHide:function(){if(this.autoHide!==false){this.el.un("mouseout",this.autoHideHd.mouseout);this.el.un("mouseover",this.autoHideHd.mouseover);}},clearMonitor:function(){Ext.getDoc().un("click",this.slideInIf,this);},slideOut:function(){if(this.isSlid||this.el.hasActiveFx()){return;}
 this.isSlid=true;var ts=this.panel.tools;if(ts&&ts.toggle){ts.toggle.hide();}
 this.el.show();if(this.position=='east'||this.position=='west'){this.panel.setSize(undefined,this.collapsedEl.getHeight());}else{this.panel.setSize(this.collapsedEl.getWidth(),undefined);}
-this.restoreLT=[this.el.dom.style.left,this.el.dom.style.top];this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.el.setStyle("z-index",102);if(this.animFloat!==false){this.beforeSlide();this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this);},scope:this,block:true});}else{this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this);}},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");this.el.dom.style.left=this.restoreLT[0];this.el.dom.style.top=this.restoreLT[1];var ts=this.panel.tools;if(ts&&ts.toggle){ts.toggle.show();}},slideIn:function(cb){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(cb);return;}
+this.restoreLT=[this.el.dom.style.left,this.el.dom.style.top];this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.el.setStyle("z-index",this.floatingZIndex+2);if(this.animFloat!==false){this.beforeSlide();this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this);},scope:this,block:true});}else{this.initAutoHide();Ext.getDoc().on("click",this.slideInIf,this);}},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");this.el.dom.style.left=this.restoreLT[0];this.el.dom.style.top=this.restoreLT[1];var ts=this.panel.tools;if(ts&&ts.toggle){ts.toggle.show();}},slideIn:function(cb){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(cb);return;}
 this.isSlid=false;if(this.animFloat!==false){this.beforeSlide();this.el.slideOut(this.getSlideAnchor(),{callback:function(){this.el.hide();this.afterSlide();this.afterSlideIn();Ext.callback(cb);},scope:this,block:true});}else{this.el.hide();this.afterSlideIn();}},slideInIf:function(e){if(!e.within(this.el)){this.slideIn();}},anchors:{"west":"left","east":"right","north":"top","south":"bottom"},sanchors:{"west":"l","east":"r","north":"t","south":"b"},canchors:{"west":"tl-tr","east":"tr-tl","north":"tl-bl","south":"bl-tl"},getAnchor:function(){return this.anchors[this.position];},getCollapseAnchor:function(){return this.canchors[this.position];},getSlideAnchor:function(){return this.sanchors[this.position];},getAlignAdj:function(){var cm=this.cmargins;switch(this.position){case"west":return[0,0];break;case"east":return[0,0];break;case"north":return[0,0];break;case"south":return[0,0];break;}},getExpandAdj:function(){var c=this.collapsedEl,cm=this.cmargins;switch(this.position){case"west":return[-(cm.right+c.getWidth()+cm.left),0];break;case"east":return[cm.right+c.getWidth()+cm.left,0];break;case"north":return[0,-(cm.top+cm.bottom+c.getHeight())];break;case"south":return[0,cm.top+cm.bottom+c.getHeight()];break;}}};Ext.layout.BorderLayout.SplitRegion=function(layout,config,pos){Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this,layout,config,pos);this.applyLayout=this.applyFns[pos];};Ext.extend(Ext.layout.BorderLayout.SplitRegion,Ext.layout.BorderLayout.Region,{splitTip:"Drag to resize.",collapsibleSplitTip:"Drag to resize. Double click to hide.",useSplitTips:false,splitSettings:{north:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.TOP,maxFn:'getVMaxSize',minProp:'minHeight',maxProp:'maxHeight'},south:{orientation:Ext.SplitBar.VERTICAL,placement:Ext.SplitBar.BOTTOM,maxFn:'getVMaxSize',minProp:'minHeight',maxProp:'maxHeight'},east:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.RIGHT,maxFn:'getHMaxSize',minProp:'minWidth',maxProp:'maxWidth'},west:{orientation:Ext.SplitBar.HORIZONTAL,placement:Ext.SplitBar.LEFT,maxFn:'getHMaxSize',minProp:'minWidth',maxProp:'maxWidth'}},applyFns:{west:function(box){if(this.isCollapsed){return this.applyLayoutCollapsed(box);}
 var sd=this.splitEl.dom,s=sd.style;this.panel.setPosition(box.x,box.y);var sw=sd.offsetWidth;s.left=(box.x+box.width-sw)+'px';s.top=(box.y)+'px';s.height=Math.max(0,box.height)+'px';this.panel.setSize(box.width-sw,box.height);},east:function(box){if(this.isCollapsed){return this.applyLayoutCollapsed(box);}
 var sd=this.splitEl.dom,s=sd.style;var sw=sd.offsetWidth;this.panel.setPosition(box.x+sw,box.y);s.left=(box.x)+'px';s.top=(box.y)+'px';s.height=Math.max(0,box.height)+'px';this.panel.setSize(box.width-sw,box.height);},north:function(box){if(this.isCollapsed){return this.applyLayoutCollapsed(box);}
@@ -1171,7 +1176,7 @@
 if(ct.labelAlign=='top'){this.labelStyle="width:auto;";this.labelAdjust=0;this.elementStyle="padding-left:0;";}}
 if(!this.fieldTpl){var t=new Ext.Template('<div class="x-form-item {5}" tabIndex="-1">','<label for="{0}" style="{2}" class="x-form-item-label">{1}{4}</label>','<div class="x-form-element" id="x-form-el-{0}" style="{3}">','</div><div class="{6}"></div>','</div>');t.disableFormats=true;t.compile();Ext.layout.FormLayout.prototype.fieldTpl=t;}},renderItem:function(c,position,target){if(c&&!c.rendered&&(c.isFormField||c.fieldLabel)&&c.inputType!='hidden'){var args=[c.id,c.fieldLabel,c.labelStyle||this.labelStyle||'',this.elementStyle||'',typeof c.labelSeparator=='undefined'?this.labelSeparator:c.labelSeparator,(c.itemCls||this.container.itemCls||'')+(c.hideLabel?' x-hide-label':''),c.clearCls||'x-form-clear-left'];if(typeof position=='number'){position=target.dom.childNodes[position]||null;}
 if(position){this.fieldTpl.insertBefore(position,args);}else{this.fieldTpl.append(target,args);}
-c.render('x-form-el-'+c.id);}else{Ext.layout.FormLayout.superclass.renderItem.apply(this,arguments);}},adjustWidthAnchor:function(value,comp){return value-(comp.isFormField?(comp.hideLabel?0:this.labelAdjust):0);},isValidParent:function(c,target){return true;}});Ext.Container.LAYOUTS['form']=Ext.layout.FormLayout;
+c.render('x-form-el-'+c.id);}else{Ext.layout.FormLayout.superclass.renderItem.apply(this,arguments);}},adjustWidthAnchor:function(value,comp){return value-(comp.isFormField||comp.fieldLabel?(comp.hideLabel?0:this.labelAdjust):0);},isValidParent:function(c,target){return true;}});Ext.Container.LAYOUTS['form']=Ext.layout.FormLayout;
 
 Ext.layout.Accordion=Ext.extend(Ext.layout.FitLayout,{fill:true,autoWidth:true,titleCollapse:true,hideCollapseTool:false,collapseFirst:false,animate:false,sequence:false,activeOnTop:false,renderItem:function(c){if(this.animate===false){c.animCollapse=false;}
 c.collapsible=true;if(this.autoWidth){c.autoWidth=true;}
@@ -1248,7 +1253,7 @@
 if(this.tools){var ts=this.tools;this.tools={};this.addTool.apply(this,ts);}else{this.tools={};}
 if(this.buttons&&this.buttons.length>0){this.fbar=new Ext.Toolbar({items:this.buttons,toolbarCls:'x-panel-fbar'});}
 if(this.fbar){this.fbar=Ext.create(this.fbar,'toolbar');if(this.fbar.items){this.fbar.items.each(function(c){c.minWidth=this.minButtonWidth;},this);}
-this.fbar.toolbarCls='x-panel-fbar';var bct=this.footer.createChild({cls:'x-panel-btns x-panel-btns-'+this.buttonAlign});this.fbar.render(bct);bct.createChild({cls:'x-clear'});}
+this.fbar.toolbarCls='x-panel-fbar';var bct=this.footer.createChild({cls:'x-panel-btns x-panel-btns-'+this.buttonAlign});this.fbar.ownerCt=this;this.fbar.render(bct);bct.createChild({cls:'x-clear'});}
 if(this.tbar&&this.topToolbar){if(Ext.isArray(this.topToolbar)){this.topToolbar=new Ext.Toolbar(this.topToolbar);}else if(!this.topToolbar.events){this.topToolbar=Ext.create(this.topToolbar,'toolbar');}
 this.topToolbar.ownerCt=this;this.topToolbar.render(this.tbar);}
 if(this.bbar&&this.bottomToolbar){if(Ext.isArray(this.bottomToolbar)){this.bottomToolbar=new Ext.Toolbar(this.bottomToolbar);}else if(!this.bottomToolbar.events){this.bottomToolbar=Ext.create(this.bottomToolbar,'toolbar');}
@@ -1259,7 +1264,9 @@
 for(var i=0,a=arguments,len=a.length;i<len;i++){var tc=a[i];if(!this.tools[tc.id]){var overCls='x-tool-'+tc.id+'-over';var t=this.toolTemplate.insertFirst((tc.align!=='left')?this[this.toolTarget]:this[this.toolTarget].child('span'),tc,true);this.tools[tc.id]=t;t.enableDisplayMode('block');t.on('click',this.createToolHandler(t,tc,overCls,this));if(tc.on){t.on(tc.on);}
 if(tc.hidden){t.hide();}
 if(tc.qtip){if(typeof tc.qtip=='object'){Ext.QuickTips.register(Ext.apply({target:t.id},tc.qtip));}else{t.dom.qtip=tc.qtip;}}
-t.addClassOnOver(overCls);}}},onShow:function(){if(this.floating){return this.el.show();}
+t.addClassOnOver(overCls);}}},doLayout:function(shallow){Ext.Panel.superclass.doLayout.call(this,shallow);if(this.topToolbar){this.topToolbar.doLayout();}
+if(this.bottomToolbar){this.bottomToolbar.doLayout();}
+if(this.fbar){this.fbar.doLayout();}},onShow:function(){if(this.floating){return this.el.show();}
 Ext.Panel.superclass.onShow.call(this);},onHide:function(){if(this.floating){return this.el.hide();}
 Ext.Panel.superclass.onHide.call(this);},createToolHandler:function(t,tc,overCls,panel){return function(e){t.removeClass(overCls);e.stopEvent();if(tc.handler){tc.handler.call(tc.scope||t,e,t,panel);}};},afterRender:function(){if(this.floating&&!this.hidden&&!this.initHidden){this.el.show();}
 if(this.title){this.setTitle(this.title);}
@@ -1274,10 +1281,11 @@
 var doAnim=animate===true||(animate!==false&&this.animCollapse);this.beforeEffect();this.onCollapse(doAnim,animate);return this;},onCollapse:function(doAnim,animArg){if(doAnim){this[this.collapseEl].slideOut(this.slideAnchor,Ext.apply(this.createEffect(animArg||true,this.afterCollapse,this),this.collapseDefaults));}else{this[this.collapseEl].hide();this.afterCollapse();}},afterCollapse:function(){this.collapsed=true;this.el.addClass(this.collapsedCls);this.afterEffect();this.fireEvent('collapse',this);},expand:function(animate){if(!this.collapsed||this.el.hasFxBlock()||this.fireEvent('beforeexpand',this,animate)===false){return;}
 var doAnim=animate===true||(animate!==false&&this.animCollapse);this.el.removeClass(this.collapsedCls);this.beforeEffect();this.onExpand(doAnim,animate);return this;},onExpand:function(doAnim,animArg){if(doAnim){this[this.collapseEl].slideIn(this.slideAnchor,Ext.apply(this.createEffect(animArg||true,this.afterExpand,this),this.expandDefaults));}else{this[this.collapseEl].show();this.afterExpand();}},afterExpand:function(){this.collapsed=false;this.afterEffect();this.fireEvent('expand',this);},toggleCollapse:function(animate){this[this.collapsed?'expand':'collapse'](animate);return this;},onDisable:function(){if(this.rendered&&this.maskDisabled){this.el.mask();}
 Ext.Panel.superclass.onDisable.call(this);},onEnable:function(){if(this.rendered&&this.maskDisabled){this.el.unmask();}
-Ext.Panel.superclass.onEnable.call(this);},onResize:function(w,h){if(w!==undefined||h!==undefined){if(!this.collapsed){if(typeof w=='number'){w=this.adjustBodyWidth(w-this.getFrameWidth());this.body.setWidth(w);}else if(w=='auto'){this.body.setWidth(w);}
+Ext.Panel.superclass.onEnable.call(this);},onResize:function(w,h){if(w!==undefined||h!==undefined){if(!this.collapsed){if(typeof w=='number'){w=this.adjustBodyWidth(w-this.getFrameWidth());if(this.tbar){this.tbar.setWidth(w);if(this.topToolbar){this.topToolbar.setSize(w);}}
+if(this.bbar){this.bbar.setWidth(w);if(this.bottomToolbar){this.bottomToolbar.setSize(w);}}
+if(this.fbar){this.fbar.setSize(w-this.fbar.container.getFrameWidth('lr'));}
+this.body.setWidth(w);}else if(w=='auto'){this.body.setWidth(w);}
 if(typeof h=='number'){h=this.adjustBodyHeight(h-this.getFrameHeight());this.body.setHeight(h);}else if(h=='auto'){this.body.setHeight(h);}
-if(this.tbar){this.tbar.setWidth(w);if(this.topToolbar){this.topToolbar.setSize(w);}}
-if(this.bbar){this.bbar.setWidth(w);if(this.bottomToolbar){this.bottomToolbar.setSize(w);}}
 if(this.disabled&&this.el._mask){this.el._mask.setSize(this.el.dom.clientWidth,this.el.getHeight());}}else{this.queuedBodySize={width:w,height:h};if(!this.queuedExpand&&this.allowQueuedExpand!==false){this.queuedExpand=true;this.on('expand',function(){delete this.queuedExpand;this.onResize(this.queuedBodySize.width,this.queuedBodySize.height);this.doLayout();},this,{single:true});}}
 this.fireEvent('bodyresize',this,w,h);}
 this.syncShadow();},adjustBodyHeight:function(h){return h;},adjustBodyWidth:function(w){return w;},onPosition:function(){this.syncShadow();},getFrameWidth:function(){var w=this.el.getFrameWidth('lr');if(this.frame){var l=this.bwrap.dom.firstChild;w+=(Ext.fly(l).getFrameWidth('l')+Ext.fly(l.firstChild).getFrameWidth('r'));var mc=this.bwrap.dom.firstChild.firstChild.firstChild;w+=Ext.fly(mc).getFrameWidth('lr');}
@@ -1294,7 +1302,7 @@
 if(useShim!==false&&this.el.useShim!==false){var layer=new Ext.Layer({shadow:false,useDisplay:true,constrain:false},el);layer.show();return layer;}else{return new Ext.Element(el);}},doAutoLoad:function(){this.body.load(typeof this.autoLoad=='object'?this.autoLoad:{url:this.autoLoad});}});Ext.reg('panel',Ext.Panel);
 
 Ext.Window=Ext.extend(Ext.Panel,{baseCls:'x-window',resizable:true,draggable:true,closable:true,constrain:false,constrainHeader:false,plain:false,minimizable:false,maximizable:false,minHeight:100,minWidth:200,expandOnShow:true,closeAction:'close',collapsible:false,initHidden:true,monitorResize:true,elements:'header,body',frame:true,floating:true,initComponent:function(){Ext.Window.superclass.initComponent.call(this);this.addEvents('resize','maximize','minimize','restore');},getState:function(){return Ext.apply(Ext.Window.superclass.getState.call(this)||{},this.getBox());},onRender:function(ct,position){Ext.Window.superclass.onRender.call(this,ct,position);if(this.plain){this.el.addClass('x-window-plain');}
-this.focusEl=this.el.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1",html:"&#160;"});this.focusEl.swallowEvent('click',true);this.proxy=this.el.createProxy("x-window-proxy");this.proxy.enableDisplayMode('block');if(this.modal){this.mask=this.container.createChild({cls:"ext-el-mask"},this.el.dom);this.mask.enableDisplayMode("block");this.mask.hide();}},initEvents:function(){Ext.Window.superclass.initEvents.call(this);if(this.animateTarget){this.setAnimateTarget(this.animateTarget);}
+this.focusEl=this.el.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1",html:"&#160;"});this.focusEl.swallowEvent('click',true);this.proxy=this.el.createProxy("x-window-proxy");this.proxy.enableDisplayMode('block');if(this.modal){this.mask=this.container.createChild({cls:"ext-el-mask"},this.el.dom);this.mask.enableDisplayMode("block");this.mask.hide();this.mask.on('click',this.focus,this);}},initEvents:function(){Ext.Window.superclass.initEvents.call(this);if(this.animateTarget){this.setAnimateTarget(this.animateTarget);}
 if(this.resizable){this.resizer=new Ext.Resizable(this.el,{minWidth:this.minWidth,minHeight:this.minHeight,handles:this.resizeHandles||"all",pinned:true,resizeElement:this.resizerAction});this.resizer.window=this;this.resizer.on("beforeresize",this.beforeResize,this);}
 if(this.draggable){this.header.addClass("x-window-draggable");}
 this.initTools();this.el.on("mousedown",this.toFront,this);this.manager=this.manager||Ext.WindowMgr;this.manager.register(this);this.hidden=true;if(this.maximized){this.maximized=false;this.maximize();}
@@ -1304,8 +1312,8 @@
 if(this.maximizable){this.addTool({id:'maximize',handler:this.maximize.createDelegate(this,[])});this.addTool({id:'restore',handler:this.restore.createDelegate(this,[]),hidden:true});this.header.on('dblclick',this.toggleMaximize,this);}
 if(this.closable){this.addTool({id:'close',handler:this[this.closeAction].createDelegate(this,[])});}},resizerAction:function(){var box=this.proxy.getBox();this.proxy.hide();this.window.handleResize(box);return box;},beforeResize:function(){this.resizer.minHeight=Math.max(this.minHeight,this.getFrameHeight()+40);this.resizer.minWidth=Math.max(this.minWidth,this.getFrameWidth()+40);this.resizeBox=this.el.getBox();},updateHandles:function(){if(Ext.isIE&&this.resizer){this.resizer.syncHandleHeight();this.el.repaint();}},handleResize:function(box){var rz=this.resizeBox;if(rz.x!=box.x||rz.y!=box.y){this.updateBox(box);}else{this.setSize(box);}
 this.focus();this.updateHandles();this.saveState();if(this.layout){this.doLayout();}
-this.fireEvent("resize",this,box.width,box.height);},focus:function(){var f=this.focusEl,db=this.defaultButton,t=typeof db;if(t!='undefined'){if(t=='number'){f=this.buttons[db];}else if(t=='string'){f=Ext.getCmp(db);}else{f=db;}}
-f.focus.defer(10,f);},setAnimateTarget:function(el){el=Ext.get(el);this.animateTarget=el;},beforeShow:function(){delete this.el.lastXY;delete this.el.lastLT;if(this.x===undefined||this.y===undefined){var xy=this.el.getAlignToXY(this.container,'c-c');var pos=this.el.translatePoints(xy[0],xy[1]);this.x=this.x===undefined?pos.left:this.x;this.y=this.y===undefined?pos.top:this.y;}
+this.fireEvent("resize",this,box.width,box.height);},focus:function(){var f=this.focusEl,db=this.defaultButton,t=typeof db;if(t!='undefined'){if(t=='number'&&this.fbar){f=this.fbar.items.get(db);}else if(t=='string'){f=Ext.getCmp(db);}else{f=db;}}
+f=f||this.focusEl;f.focus.defer(10,f);},setAnimateTarget:function(el){el=Ext.get(el);this.animateTarget=el;},beforeShow:function(){delete this.el.lastXY;delete this.el.lastLT;if(this.x===undefined||this.y===undefined){var xy=this.el.getAlignToXY(this.container,'c-c');var pos=this.el.translatePoints(xy[0],xy[1]);this.x=this.x===undefined?pos.left:this.x;this.y=this.y===undefined?pos.top:this.y;}
 this.el.setLeftTop(this.x,this.y);if(this.expandOnShow){this.expand(false);}
 if(this.modal){Ext.getBody().addClass("x-body-masked");this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.mask.show();}},show:function(animateTarget,cb,scope){if(!this.rendered){this.render(Ext.getBody());}
 if(this.hidden===false){this.toFront();return;}
@@ -1609,7 +1617,9 @@
 this.position=pos;this.rz=rz;this.el=this.tpl.append(rz.el.dom,[this.position],true);this.el.unselectable();if(transparent){this.el.setOpacity(0);}
 this.el.on("mousedown",this.onMouseDown,this);if(!disableTrackOver){this.el.on("mouseover",this.onMouseOver,this);this.el.on("mouseout",this.onMouseOut,this);}};Ext.Resizable.Handle.prototype={afterResize:function(rz){},onMouseDown:function(e){this.rz.onMouseDown(this,e);},onMouseOver:function(e){this.rz.handleOver(this,e);},onMouseOut:function(e){this.rz.handleOut(this,e);},destroy:function(){Ext.destroy(this.el);this.el=null;}};
 
-Ext.Editor=function(field,config){this.field=field;Ext.Editor.superclass.constructor.call(this,config);};Ext.extend(Ext.Editor,Ext.Component,{value:"",alignment:"c-c?",shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:false,cancelOnEsc:false,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey");},onRender:function(ct,position){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:ct,shim:this.shim,shadowOffset:4,id:this.id,constrain:this.constrain});this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!='title'){this.field.msgTarget='qtip';}
+Ext.Editor=function(field,config){if(field.field){this.field=Ext.create(field.field,'textfield');config=Ext.apply({},field);delete config.field;}else{this.field=field;}
+Ext.Editor.superclass.constructor.call(this,config);};Ext.extend(Ext.Editor,Ext.Component,{value:"",alignment:"c-c?",shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:false,cancelOnEsc:false,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey");},onRender:function(ct,position){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:ct,shim:this.shim,shadowOffset:this.shadowOffset||4,id:this.id,constrain:this.constrain});if(this.zIndex){this.el.setZIndex(this.zIndex);}
+this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!='title'){this.field.msgTarget='qtip';}
 this.field.inEditor=true;this.field.render(this.el);if(Ext.isGecko){this.field.el.dom.setAttribute('autocomplete','off');}
 this.field.on("specialkey",this.onSpecialKey,this);if(this.swallowKeys){this.field.el.swallowEvent(['keydown','keypress']);}
 this.field.show();this.field.on("blur",this.onBlur,this);if(this.field.grow){this.field.on("autosize",this.el.sync,this.el,{delay:1});}},onSpecialKey:function(field,e){var key=e.getKey();if(this.completeOnEnter&&key==e.ENTER){e.stopEvent();this.completeEdit();}else if(this.cancelOnEsc&&key==e.ESC){this.cancelEdit();}else{this.fireEvent('specialkey',field,e);}
@@ -1890,9 +1900,9 @@
 return null;},setCheckedItem:function(groupId,itemId){var g=groups[groupId];if(g){for(var i=0,l=g.length;i<l;i++){if(g[i].id==itemId){g[i].setChecked(true);}}}
 return null;}};}();
 
-Ext.menu.BaseItem=function(config){Ext.menu.BaseItem.superclass.constructor.call(this,config);this.addEvents('click','activate','deactivate');if(this.handler){this.on("click",this.handler,this.scope);}};Ext.extend(Ext.menu.BaseItem,Ext.Component,{canActivate:false,activeClass:"x-menu-item-active",hideOnClick:true,hideDelay:100,ctype:"Ext.menu.BaseItem",actionMode:"container",render:function(container,parentMenu){this.parentMenu=parentMenu;Ext.menu.BaseItem.superclass.render.call(this,container);this.container.menuItemId=this.itemId||this.id;},onRender:function(container,position){this.el=Ext.get(this.el);container.dom.appendChild(this.el.dom);},setHandler:function(handler,scope){if(this.handler){this.un("click",this.handler,this.scope);}
+Ext.menu.BaseItem=function(config){Ext.menu.BaseItem.superclass.constructor.call(this,config);this.addEvents('click','activate','deactivate');if(this.handler){this.on("click",this.handler,this.scope);}};Ext.extend(Ext.menu.BaseItem,Ext.Component,{canActivate:false,activeClass:"x-menu-item-active",hideOnClick:true,clickHideDelay:1,ctype:"Ext.menu.BaseItem",actionMode:"container",render:function(container,parentMenu){this.parentMenu=parentMenu;Ext.menu.BaseItem.superclass.render.call(this,container);this.container.menuItemId=this.itemId||this.id;},onRender:function(container,position){this.el=Ext.get(this.el);container.dom.appendChild(this.el.dom);},setHandler:function(handler,scope){if(this.handler){this.un("click",this.handler,this.scope);}
 this.on("click",this.handler=handler,this.scope=scope);},onClick:function(e){if(!this.disabled&&this.fireEvent("click",this,e)!==false&&this.parentMenu.fireEvent("itemclick",this,e)!==false){this.handleClick(e);}else{e.stopEvent();}},activate:function(){if(this.disabled){return false;}
-var li=this.container;li.addClass(this.activeClass);this.region=li.getRegion().adjust(2,2,-2,-2);this.fireEvent("activate",this);return true;},deactivate:function(){this.container.removeClass(this.activeClass);this.fireEvent("deactivate",this);},shouldDeactivate:function(e){return!this.region||!this.region.contains(e.getPoint());},handleClick:function(e){if(this.hideOnClick){this.parentMenu.hide.defer(this.hideDelay,this.parentMenu,[true]);}},expandMenu:function(autoActivate){},hideMenu:function(){}});
+var li=this.container;li.addClass(this.activeClass);this.region=li.getRegion().adjust(2,2,-2,-2);this.fireEvent("activate",this);return true;},deactivate:function(){this.container.removeClass(this.activeClass);this.fireEvent("deactivate",this);},shouldDeactivate:function(e){return!this.region||!this.region.contains(e.getPoint());},handleClick:function(e){if(this.hideOnClick){this.parentMenu.hide.defer(this.clickHideDelay,this.parentMenu,[true]);}},expandMenu:function(autoActivate){},hideMenu:function(){}});
 
 Ext.menu.TextItem=function(cfg){if(typeof cfg=='string'){cfg={text:cfg}}
 Ext.menu.TextItem.superclass.constructor.call(this,cfg);};Ext.extend(Ext.menu.TextItem,Ext.menu.BaseItem,{hideOnClick:false,itemCls:"x-menu-text",onRender:function(){var s=document.createElement("span");s.className=this.itemCls;s.innerHTML=this.text;this.el=s;Ext.menu.TextItem.superclass.onRender.apply(this,arguments);}});
@@ -1930,7 +1940,7 @@
 this.el.addClass('x-form-'+type);}
 if(this.readOnly){this.el.dom.readOnly=true;}
 if(this.tabIndex!==undefined){this.el.dom.setAttribute('tabIndex',this.tabIndex);}
-this.el.addClass([this.fieldClass,this.cls]);},getItemCt:function(){return this.el.up('.x-form-item',4);},initValue:function(){if(this.value!==undefined){this.setValue(this.value);}else if(this.el.dom.value.length>0&&this.el.dom.value!=this.emptyText){this.setValue(this.el.dom.value);}
+this.el.addClass([this.fieldClass,this.cls]);},getItemCt:function(){return this.el.up('.x-form-item',4);},initValue:function(){if(this.value!==undefined){this.setValue(this.value);}else if(!Ext.isEmpty(this.el.dom.value)&&this.el.dom.value!=this.emptyText){this.setValue(this.el.dom.value);}
 this.originalValue=this.getValue();},isDirty:function(){if(this.disabled){return false;}
 return String(this.getValue())!==String(this.originalValue);},afterRender:function(){Ext.form.Field.superclass.afterRender.call(this);this.initEvents();this.initValue();},fireKey:function(e){if(e.isSpecialKey()){this.fireEvent("specialkey",this,e);}},reset:function(){this.setValue(this.originalValue);this.clearInvalid();},initEvents:function(){this.el.on(Ext.isIE||Ext.isSafari3?"keydown":"keypress",this.fireKey,this);this.el.on("focus",this.onFocus,this);var o=this.inEditor&&Ext.isWindows&&Ext.isGecko?{buffer:10}:null;this.el.on("blur",this.onBlur,this,o);},onFocus:function(){if(!Ext.isOpera&&this.focusClass){this.el.addClass(this.focusClass);}
 if(!this.hasFocus){this.hasFocus=true;this.startValue=this.getValue();this.fireEvent("focus",this);}},beforeBlur:Ext.emptyFn,onBlur:function(){this.beforeBlur();if(!Ext.isOpera&&this.focusClass){this.el.removeClass(this.focusClass);}
@@ -1945,7 +1955,7 @@
 this.fireEvent('valid',this);},getMessageHandler:function(){return Ext.form.MessageTargets[this.msgTarget];},getErrorCt:function(){return this.el.findParent('.x-form-element',5,true)||this.el.findParent('.x-form-field-wrap',5,true);},alignErrorIcon:function(){this.errorIcon.alignTo(this.el,'tl-tr',[2,0]);},getRawValue:function(){var v=this.rendered?this.el.getValue():Ext.value(this.value,'');if(v===this.emptyText){v='';}
 return v;},getValue:function(){if(!this.rendered){return this.value;}
 var v=this.el.getValue();if(v===this.emptyText||v===undefined){v='';}
-return v;},setRawValue:function(v){return this.el.dom.value=(v===null||v===undefined?'':v);},setValue:function(v){this.value=v;if(this.rendered){this.el.dom.value=(v===null||v===undefined?'':v);this.validate();}},adjustSize:function(w,h){var s=Ext.form.Field.superclass.adjustSize.call(this,w,h);s.width=this.adjustWidth(this.el.dom.tagName,s.width);if(this.offsetCt){var ct=this.getItemCt();s.width-=ct.getFrameWidth('lr');s.height-=ct.getFrameWidth('tb');}
+return v;},setRawValue:function(v){return this.el.dom.value=(v===null||v===undefined?'':v);},setValue:function(v){this.value=v;if(this.rendered){this.el.dom.value=(v===null||v===undefined?'':v);this.validate();}},append:function(v){this.setValue([this.getValue(),v].join(''));},adjustSize:function(w,h){var s=Ext.form.Field.superclass.adjustSize.call(this,w,h);s.width=this.adjustWidth(this.el.dom.tagName,s.width);if(this.offsetCt){var ct=this.getItemCt();s.width-=ct.getFrameWidth('lr');s.height-=ct.getFrameWidth('tb');}
 return s;},adjustWidth:function(tag,w){tag=tag.toLowerCase();if(typeof w=='number'&&!Ext.isSafari){if(Ext.isIE&&(tag=='input'||tag=='textarea')){if(tag=='input'&&!Ext.isStrict){return this.inEditor?w:w-3;}
 if(tag=='input'&&Ext.isStrict){return w-(Ext.isIE6?4:1);}
 if(tag=='textarea'&&Ext.isStrict){return w-2;}}else if(Ext.isOpera&&Ext.isStrict){if(tag=='input'){return w+2;}
@@ -2008,14 +2018,14 @@
 
 Ext.form.DateField=Ext.extend(Ext.form.TriggerField,{format:"m/d/Y",altFormats:"m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d",disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:'x-form-date-trigger',showToday:true,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"},initComponent:function(){Ext.form.DateField.superclass.initComponent.call(this);if(typeof this.minValue=="string"){this.minValue=this.parseDate(this.minValue);}
 if(typeof this.maxValue=="string"){this.maxValue=this.parseDate(this.maxValue);}
-this.ddMatch=null;this.initDisabledDays();},initDisabledDays:function(){if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1)re+="|";}
+this.disabledDatesRE=null;this.initDisabledDays();},initDisabledDays:function(){if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1)re+="|";}
 this.disabledDatesRE=new RegExp(re+")");}},setDisabledDates:function(dd){this.disabledDates=dd;this.initDisabledDays();if(this.menu){this.menu.picker.setDisabledDates(this.disabledDatesRE);}},setDisabledDays:function(dd){this.disabledDays=dd;if(this.menu){this.menu.picker.setDisabledDays(dd);}},setMinValue:function(dt){this.minValue=(typeof dt=="string"?this.parseDate(dt):dt);if(this.menu){this.menu.picker.setMinDate(this.minValue);}},setMaxValue:function(dt){this.maxValue=(typeof dt=="string"?this.parseDate(dt):dt);if(this.menu){this.menu.picker.setMaxDate(this.maxValue);}},validateValue:function(value){value=this.formatDate(value);if(!Ext.form.DateField.superclass.validateValue.call(this,value)){return false;}
 if(value.length<1){return true;}
 var svalue=value;value=this.parseDate(value);if(!value){this.markInvalid(String.format(this.invalidText,svalue,this.format));return false;}
 var time=value.getTime();if(this.minValue&&time<this.minValue.getTime()){this.markInvalid(String.format(this.minText,this.formatDate(this.minValue)));return false;}
 if(this.maxValue&&time>this.maxValue.getTime()){this.markInvalid(String.format(this.maxText,this.formatDate(this.maxValue)));return false;}
 if(this.disabledDays){var day=value.getDay();for(var i=0;i<this.disabledDays.length;i++){if(day===this.disabledDays[i]){this.markInvalid(this.disabledDaysText);return false;}}}
-var fvalue=this.formatDate(value);if(this.ddMatch&&this.ddMatch.test(fvalue)){this.markInvalid(String.format(this.disabledDatesText,fvalue));return false;}
+var fvalue=this.formatDate(value);if(this.disabledDatesRE&&this.disabledDatesRE.test(fvalue)){this.markInvalid(String.format(this.disabledDatesText,fvalue));return false;}
 return true;},validateBlur:function(){return!this.menu||!this.menu.isVisible();},getValue:function(){return this.parseDate(Ext.form.DateField.superclass.getValue.call(this))||"";},setValue:function(date){Ext.form.DateField.superclass.setValue.call(this,this.formatDate(this.parseDate(date)));},parseDate:function(value){if(!value||Ext.isDate(value)){return value;}
 var v=Date.parseDate(value,this.format);if(!v&&this.altFormats){if(!this.altFormatsArray){this.altFormatsArray=this.altFormats.split("|");}
 for(var i=0,len=this.altFormatsArray.length;i<len&&!v;i++){v=Date.parseDate(value,this.altFormatsArray[i]);}}
@@ -2023,8 +2033,13 @@
 if(this.wrap){this.wrap.remove();}
 Ext.form.DateField.superclass.onDestroy.call(this);},formatDate:function(date){return Ext.isDate(date)?date.dateFormat(this.format):date;},menuListeners:{select:function(m,d){this.setValue(d);},show:function(){this.onFocus();},hide:function(){this.focus.defer(10,this);var ml=this.menuListeners;this.menu.un("select",ml.select,this);this.menu.un("show",ml.show,this);this.menu.un("hide",ml.hide,this);}},onTriggerClick:function(){if(this.disabled){return;}
 if(this.menu==null){this.menu=new Ext.menu.DateMenu();}
-Ext.apply(this.menu.picker,{minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.ddMatch,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.format,showToday:this.showToday,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))});this.menu.on(Ext.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}}});Ext.reg('datefield',Ext.form.DateField);
+Ext.apply(this.menu.picker,{minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.disabledDatesRE,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.format,showToday:this.showToday,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))});this.menu.on(Ext.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}}});Ext.reg('datefield',Ext.form.DateField);
 
+Ext.form.DisplayField=Ext.extend(Ext.form.Field,{validationEvent:false,validateOnBlur:false,defaultAutoCreate:{tag:"div"},fieldClass:"x-form-display-field",htmlEncode:false,initEvents:function(){},isValid:function(){return true;},validate:function(){return true;},getRawValue:function(){var v=this.rendered?this.el.dom.innerHTML:Ext.value(this.value,'');if(v===this.emptyText){v='';}
+if(this.htmlEncode){v=Ext.util.Format.htmlDecode(v);}
+return v;},getValue:function(){return this.getRawValue();},setRawValue:function(v){if(this.htmlEncode){v=Ext.util.Format.htmlEncode(v);}
+return this.rendered?(this.el.dom.innerHTML=(v===null||v===undefined?'':v)):(this.value=v);},setValue:function(v){this.setRawValue(v);}});Ext.reg('displayfield',Ext.form.DisplayField);
+
 Ext.form.ComboBox=Ext.extend(Ext.form.TriggerField,{defaultAutoCreate:{tag:"input",type:"text",size:"24",autocomplete:"off"},listClass:'',selectedClass:'x-combo-selected',triggerClass:'x-form-arrow-trigger',shadow:'sides',listAlign:'tl-bl?',maxHeight:300,minHeight:90,triggerAction:'query',minChars:4,typeAhead:false,queryDelay:500,pageSize:0,selectOnFocus:false,queryParam:'query',loadingText:'Loading...',resizable:false,handleHeight:8,editable:true,allQuery:'',mode:'remote',minListWidth:70,forceSelection:false,typeAheadDelay:250,lazyInit:true,initComponent:function(){Ext.form.ComboBox.superclass.initComponent.call(this);this.addEvents('expand','collapse','beforeselect','select','beforequery');if(this.transform){this.allowDomMove=false;var s=Ext.getDom(this.transform);if(!this.hiddenName){this.hiddenName=s.name;}
 if(!this.store){this.mode='local';var d=[],opts=s.options;for(var i=0,len=opts.length;i<len;i++){var o=opts[i];var value=(Ext.isIE?o.getAttributeNode('value').specified:o.hasAttribute('value'))?o.value:o.text;if(o.selected){this.value=value;}
 d.push([value,o.text]);}
@@ -2114,8 +2129,8 @@
 return this;},getValues:function(asString){var fs=Ext.lib.Ajax.serializeForm(this.el.dom);if(asString===true){return fs;}
 return Ext.urlDecode(fs);},getFieldValues:function(){var o={};this.items.each(function(f){o[f.getName()]=f.getValue();});return o;},clearInvalid:function(){this.items.each(function(f){f.clearInvalid();});return this;},reset:function(){this.items.each(function(f){f.reset();});return this;},add:function(){this.items.addAll(Array.prototype.slice.call(arguments,0));return this;},remove:function(field){this.items.remove(field);return this;},render:function(){this.items.each(function(f){if(f.isFormField&&!f.rendered&&document.getElementById(f.id)){f.applyToMarkup(f.id);}});return this;},applyToFields:function(o){this.items.each(function(f){Ext.apply(f,o);});return this;},applyIfToFields:function(o){this.items.each(function(f){Ext.applyIf(f,o);});return this;},callFieldMethod:function(fnName,args){args=args||[];this.items.each(function(f){if(typeof f[fnName]=='function'){f[fnName].apply(f,args);}});return this;}});Ext.BasicForm=Ext.form.BasicForm;
 
-Ext.FormPanel=Ext.extend(Ext.Panel,{buttonAlign:'center',minButtonWidth:75,labelAlign:'left',monitorValid:false,monitorPoll:200,layout:'form',initComponent:function(){this.form=this.createForm();if(this.fileUpload){this.bodyCfg.enctype='multipart/form-data';}
-Ext.FormPanel.superclass.initComponent.call(this);this.bodyCfg={tag:'form',cls:this.baseCls+'-body',method:this.method||'POST',id:this.formId||Ext.id()};this.initItems();this.addEvents('clientvalidation');this.relayEvents(this.form,['beforeaction','actionfailed','actioncomplete']);},createForm:function(){delete this.initialConfig.listeners;return new Ext.form.BasicForm(null,this.initialConfig);},initFields:function(){var f=this.form;var formPanel=this;var fn=function(c){if(c.isFormField){f.add(c);}if(c.isFieldWrap){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});f.add(c.field);}else if(c.doLayout&&c!=formPanel){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});if(c.items){c.items.each(fn);}}}
+Ext.FormPanel=Ext.extend(Ext.Panel,{buttonAlign:'center',minButtonWidth:75,labelAlign:'left',monitorValid:false,monitorPoll:200,layout:'form',initComponent:function(){this.form=this.createForm();Ext.FormPanel.superclass.initComponent.call(this);this.bodyCfg={tag:'form',cls:this.baseCls+'-body',method:this.method||'POST',id:this.formId||Ext.id()};if(this.fileUpload){this.bodyCfg.enctype='multipart/form-data';}
+this.initItems();this.addEvents('clientvalidation');this.relayEvents(this.form,['beforeaction','actionfailed','actioncomplete']);},createForm:function(){delete this.initialConfig.listeners;return new Ext.form.BasicForm(null,this.initialConfig);},initFields:function(){var f=this.form;var formPanel=this;var fn=function(c){if(c.isFormField){f.add(c);}if(c.isFieldWrap){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});f.add(c.field);}else if(c.doLayout&&c!=formPanel){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});if(c.items){c.items.each(fn);}}}
 this.items.each(fn);},getLayoutTarget:function(){return this.form.el;},getForm:function(){return this.form;},onRender:function(ct,position){this.initFields();Ext.FormPanel.superclass.onRender.call(this,ct,position);this.form.initEl(this.body);},beforeDestroy:function(){Ext.FormPanel.superclass.beforeDestroy.call(this);this.stopMonitoring();Ext.destroy(this.form);},initEvents:function(){Ext.FormPanel.superclass.initEvents.call(this);this.items.on('remove',this.onRemove,this);this.items.on('add',this.onAdd,this);if(this.monitorValid){this.startMonitoring();}},onAdd:function(ct,c){if(c.isFormField){this.form.add(c);}},onRemove:function(c){if(c.isFormField){Ext.destroy(c.container.up('.x-form-item'));this.form.remove(c);}},startMonitoring:function(){if(!this.bound){this.bound=true;Ext.TaskMgr.start({run:this.bindHandler,interval:this.monitorPoll||200,scope:this});}},stopMonitoring:function(){this.bound=false;},load:function(){this.form.load.apply(this.form,arguments);},onDisable:function(){Ext.FormPanel.superclass.onDisable.call(this);if(this.form){this.form.items.each(function(){this.disable();});}},onEnable:function(){Ext.FormPanel.superclass.onEnable.call(this);if(this.form){this.form.items.each(function(){this.enable();});}},bindHandler:function(){if(!this.bound){return false;}
 var valid=true;this.form.items.each(function(f){if(!f.isValid(true)){valid=false;return false;}});if(this.buttons){for(var i=0,len=this.buttons.length;i<len;i++){var btn=this.buttons[i];if(btn.formBind===true&&btn.disabled===valid){btn.setDisabled(!valid);}}}
 this.fireEvent('clientvalidation',this,valid);}});Ext.reg('form',Ext.FormPanel);Ext.form.FormPanel=Ext.FormPanel;
@@ -2228,9 +2243,9 @@
 return this.fly(el).findParent(this.rowSelector,this.rowSelectorDepth);},findRowIndex:function(el){var r=this.findRow(el);return r?r.rowIndex:false;},getRow:function(row){return this.getRows()[row];},getCell:function(row,col){return this.getRow(row).getElementsByTagName('td')[col];},getHeaderCell:function(index){return this.mainHd.dom.getElementsByTagName('td')[index];},addRowClass:function(row,cls){var r=this.getRow(row);if(r){this.fly(r).addClass(cls);}},removeRowClass:function(row,cls){var r=this.getRow(row);if(r){this.fly(r).removeClass(cls);}},removeRow:function(row){Ext.removeNode(this.getRow(row));this.syncFocusEl(row);},removeRows:function(firstRow,lastRow){var bd=this.mainBody.dom;for(var rowIndex=firstRow;rowIndex<=lastRow;rowIndex++){Ext.removeNode(bd.childNodes[firstRow]);}
 this.syncFocusEl(firstRow);},getScrollState:function(){var sb=this.scroller.dom;return{left:sb.scrollLeft,top:sb.scrollTop};},restoreScroll:function(state){var sb=this.scroller.dom;sb.scrollLeft=state.left;sb.scrollTop=state.top;},scrollToTop:function(){this.scroller.dom.scrollTop=0;this.scroller.dom.scrollLeft=0;},syncScroll:function(){this.syncHeaderScroll();var mb=this.scroller.dom;this.grid.fireEvent("bodyscroll",mb.scrollLeft,mb.scrollTop);},syncHeaderScroll:function(){var mb=this.scroller.dom;this.innerHd.scrollLeft=mb.scrollLeft;this.innerHd.scrollLeft=mb.scrollLeft;},updateSortIcon:function(col,dir){var sc=this.sortClasses;var hds=this.mainHd.select('td').removeClass(sc);hds.item(col).addClass(sc[dir=="DESC"?1:0]);},updateAllColumnWidths:function(){var tw=this.getTotalWidth();var clen=this.cm.getColumnCount();var ws=[];for(var i=0;i<clen;i++){ws[i]=this.getColumnWidth(i);}
 this.innerHd.firstChild.firstChild.style.width=tw;for(var i=0;i<clen;i++){var hd=this.getHeaderCell(i);hd.style.width=ws[i];}
-var ns=this.getRows();for(var i=0,len=ns.length;i<len;i++){ns[i].style.width=tw;ns[i].firstChild.style.width=tw;var row=ns[i].firstChild.rows[0];for(var j=0;j<clen;j++){row.childNodes[j].style.width=ws[j];}}
-this.onAllColumnWidthsUpdated(ws,tw);},updateColumnWidth:function(col,width){var w=this.getColumnWidth(col);var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var hd=this.getHeaderCell(col);hd.style.width=w;var ns=this.getRows();for(var i=0,len=ns.length;i<len;i++){ns[i].style.width=tw;ns[i].firstChild.style.width=tw;ns[i].firstChild.rows[0].childNodes[col].style.width=w;}
-this.onColumnWidthUpdated(col,w,tw);},updateColumnHidden:function(col,hidden){var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var display=hidden?'none':'';var hd=this.getHeaderCell(col);hd.style.display=display;var ns=this.getRows();for(var i=0,len=ns.length;i<len;i++){ns[i].style.width=tw;ns[i].firstChild.style.width=tw;ns[i].firstChild.rows[0].childNodes[col].style.display=display;}
+var ns=this.getRows(),row,trow;for(var i=0,len=ns.length;i<len;i++){row=ns[i];row.style.width=tw;if(row.firstChild){row.firstChild.style.width=tw;trow=row.firstChild.rows[0];for(var j=0;j<clen;j++){trow.childNodes[j].style.width=ws[j];}}}
+this.onAllColumnWidthsUpdated(ws,tw);},updateColumnWidth:function(col,width){var w=this.getColumnWidth(col);var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var hd=this.getHeaderCell(col);hd.style.width=w;var ns=this.getRows(),row;for(var i=0,len=ns.length;i<len;i++){row=ns[i];row.style.width=tw;if(row.firstChild){row.firstChild.style.width=tw;row.firstChild.rows[0].childNodes[col].style.width=w;}}
+this.onColumnWidthUpdated(col,w,tw);},updateColumnHidden:function(col,hidden){var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var display=hidden?'none':'';var hd=this.getHeaderCell(col);hd.style.display=display;var ns=this.getRows(),row;for(var i=0,len=ns.length;i<len;i++){row=ns[i];row.style.width=tw;if(row.firstChild){row.firstChild.style.width=tw;row.firstChild.rows[0].childNodes[col].style.display=display;}}
 this.onColumnHiddenUpdated(col,hidden,tw);delete this.lastViewWidth;this.layout();},doRender:function(cs,rs,ds,startRow,colCount,stripe){var ts=this.templates,ct=ts.cell,rt=ts.row,last=colCount-1;var tstyle='width:'+this.getTotalWidth()+';';var buf=[],cb,c,p={},rp={tstyle:tstyle},r;for(var j=0,len=rs.length;j<len;j++){r=rs[j];cb=[];var rowIndex=(j+startRow);for(var i=0;i<colCount;i++){c=cs[i];p.id=c.id;p.css=i==0?'x-grid3-cell-first ':(i==last?'x-grid3-cell-last ':'');p.attr=p.cellAttr="";p.value=c.renderer(r.data[c.name],p,r,rowIndex,i,ds);p.style=c.style;if(p.value==undefined||p.value==="")p.value="&#160;";if(r.dirty&&typeof r.modified[c.name]!=='undefined'){p.css+=' x-grid3-dirty-cell';}
 cb[cb.length]=ct.apply(p);}
 var alt=[];if(stripe&&((rowIndex+1)%2==0)){alt[0]="x-grid3-row-alt";}
@@ -2245,12 +2260,13 @@
 if(g.enableHdMenu!==false){if(g.enableColumnHide!==false){this.colMenu=new Ext.menu.Menu({id:g.id+"-hcols-menu"});this.colMenu.on("beforeshow",this.beforeColMenuShow,this);this.colMenu.on("itemclick",this.handleHdMenuClick,this);}
 this.hmenu=new Ext.menu.Menu({id:g.id+"-hctx"});this.hmenu.add({id:"asc",text:this.sortAscText,cls:"xg-hmenu-sort-asc"},{id:"desc",text:this.sortDescText,cls:"xg-hmenu-sort-desc"});if(g.enableColumnHide!==false){this.hmenu.add('-',{id:"columns",text:this.columnsText,menu:this.colMenu,iconCls:'x-cols-icon'});}
 this.hmenu.on("itemclick",this.handleHdMenuClick,this);}
+if(g.trackMouseOver){this.mainBody.on("mouseover",this.onRowOver,this);this.mainBody.on("mouseout",this.onRowOut,this);}
 if(g.enableDragDrop||g.enableDrag){this.dragZone=new Ext.grid.GridDragZone(g,{ddGroup:g.ddGroup||'GridDD'});}
 this.updateHeaderSortState();},layout:function(){if(!this.mainBody){return;}
 var g=this.grid;var c=g.getGridEl();var csize=c.getSize(true);var vw=csize.width;if(vw<20||csize.height<20){return;}
 if(g.autoHeight){this.scroller.dom.style.overflow='visible';}else{this.el.setSize(csize.width,csize.height);var hdHeight=this.mainHd.getHeight();var vh=csize.height-(hdHeight);this.scroller.setSize(vw,vh);if(this.innerHd){this.innerHd.style.width=(vw)+'px';}}
 if(this.forceFit){if(this.lastViewWidth!=vw){this.fitColumns(false,false);this.lastViewWidth=vw;}}else{this.autoExpand();this.syncHeaderScroll();}
-this.onLayout(vw,vh);},onLayout:function(vw,vh){},onColumnWidthUpdated:function(col,w,tw){},onAllColumnWidthsUpdated:function(ws,tw){},onColumnHiddenUpdated:function(col,hidden,tw){},updateColumnText:function(col,text){},afterMove:function(colIndex){},init:function(grid){this.grid=grid;this.initTemplates();this.initData(grid.store,grid.colModel);this.initUI(grid);},getColumnId:function(index){return this.cm.getColumnId(index);},renderHeaders:function(){var cm=this.cm,ts=this.templates;var ct=ts.hcell;var cb=[],sb=[],p={};for(var i=0,len=cm.getColumnCount();i<len;i++){p.id=cm.getColumnId(i);p.value=cm.getColumnHeader(i)||"";p.style=this.getColumnStyle(i,true);p.tooltip=this.getColumnTooltip(i);if(cm.config[i].align=='right'){p.istyle='padding-right:16px';}else{delete p.istyle;}
+this.onLayout(vw,vh);},onLayout:function(vw,vh){},onColumnWidthUpdated:function(col,w,tw){},onAllColumnWidthsUpdated:function(ws,tw){},onColumnHiddenUpdated:function(col,hidden,tw){},updateColumnText:function(col,text){},afterMove:function(colIndex){},init:function(grid){this.grid=grid;this.initTemplates();this.initData(grid.store,grid.colModel);this.initUI(grid);},getColumnId:function(index){return this.cm.getColumnId(index);},renderHeaders:function(){var cm=this.cm,ts=this.templates;var ct=ts.hcell;var cb=[],p={};for(var i=0,len=cm.getColumnCount();i<len;i++){p.id=cm.getColumnId(i);p.value=cm.getColumnHeader(i)||"";p.style=this.getColumnStyle(i,true);p.tooltip=this.getColumnTooltip(i);if(cm.config[i].align=='right'){p.istyle='padding-right:16px';}else{delete p.istyle;}
 cb[cb.length]=ct.apply(p);}
 return ts.header.apply({cells:cb.join(""),tstyle:'width:'+this.getTotalWidth()+';'});},getColumnTooltip:function(i){var tt=this.cm.getColumnTooltip(i);if(tt){if(Ext.QuickTips.isEnabled()){return'ext:qtip="'+tt+'"';}else{return'title="'+tt+'"';}}
 return"";},beforeUpdate:function(){this.grid.stopEditing(true);},updateHeaders:function(){this.innerHd.firstChild.innerHTML=this.renderHeaders();},focusRow:function(row){this.focusCell(row,0,false);},focusCell:function(row,col,hscroll){this.syncFocusEl(this.ensureVisible(row,col,hscroll));if(Ext.isGecko){this.focusEl.focus();}else{this.focusEl.focus.defer(1,this.focusEl);}},resolveCell:function(row,col,hscroll){if(typeof row!="number"){row=row.rowIndex;}
@@ -2270,7 +2286,7 @@
 this.syncFocusEl(firstRow);},deleteRows:function(dm,firstRow,lastRow){if(dm.getRowCount()<1){this.refresh();}else{this.fireEvent("beforerowsdeleted",this,firstRow,lastRow);this.removeRows(firstRow,lastRow);this.processRows(firstRow);this.fireEvent("rowsdeleted",this,firstRow,lastRow);}},getColumnStyle:function(col,isHeader){var style=!isHeader?(this.cm.config[col].css||''):'';style+='width:'+this.getColumnWidth(col)+';';if(this.cm.isHidden(col)){style+='display:none;';}
 var align=this.cm.config[col].align;if(align){style+='text-align:'+align+';';}
 return style;},getColumnWidth:function(col){var w=this.cm.getColumnWidth(col);if(typeof w=='number'){return(Ext.isBorderBox?w:(w-this.borderWidth>0?w-this.borderWidth:0))+'px';}
-return w;},getTotalWidth:function(){return this.cm.getTotalWidth()+'px';},fitColumns:function(preventRefresh,onlyExpand,omitColumn){var cm=this.cm,leftOver,dist,i;var tw=cm.getTotalWidth(false);var aw=this.grid.getGridEl().getWidth(true)-this.scrollOffset;if(aw<20){return;}
+return w;},getTotalWidth:function(){return this.cm.getTotalWidth()+'px';},fitColumns:function(preventRefresh,onlyExpand,omitColumn){var cm=this.cm,i;var tw=cm.getTotalWidth(false);var aw=this.grid.getGridEl().getWidth(true)-this.scrollOffset;if(aw<20){return;}
 var extra=aw-tw;if(extra===0){return false;}
 var vc=cm.getColumnCount(true);var ac=vc-(typeof omitColumn=='number'?1:0);if(ac===0){ac=1;omitColumn=undefined;}
 var colCount=cm.getColumnCount();var cols=[];var extraCol=0;var width=0;var w;for(i=0;i<colCount;i++){if(!cm.isHidden(i)&&!cm.isFixed(i)&&i!==omitColumn){w=cm.getColumnWidth(i);cols.push(i);extraCol=i;cols.push(w);width+=w;}}
@@ -2280,7 +2296,7 @@
 return true;},autoExpand:function(preventUpdate){var g=this.grid,cm=this.cm;if(!this.userResized&&g.autoExpandColumn){var tw=cm.getTotalWidth(false);var aw=this.grid.getGridEl().getWidth(true)-this.scrollOffset;if(tw!=aw){var ci=cm.getIndexById(g.autoExpandColumn);var currentWidth=cm.getColumnWidth(ci);var cw=Math.min(Math.max(((aw-tw)+currentWidth),g.autoExpandMin),g.autoExpandMax);if(cw!=currentWidth){cm.setColumnWidth(ci,cw,true);if(preventUpdate!==true){this.updateColumnWidth(ci,cw);}}}}},getColumnData:function(){var cs=[],cm=this.cm,colCount=cm.getColumnCount();for(var i=0;i<colCount;i++){var name=cm.getDataIndex(i);cs[i]={name:(typeof name=='undefined'?this.ds.fields.get(i).name:name),renderer:cm.getRenderer(i),id:cm.getColumnId(i),style:this.getColumnStyle(i)};}
 return cs;},renderRows:function(startRow,endRow){var g=this.grid,cm=g.colModel,ds=g.store,stripe=g.stripeRows;var colCount=cm.getColumnCount();if(ds.getCount()<1){return"";}
 var cs=this.getColumnData();startRow=startRow||0;endRow=typeof endRow=="undefined"?ds.getCount()-1:endRow;var rs=ds.getRange(startRow,endRow);return this.doRender(cs,rs,ds,startRow,colCount,stripe);},renderBody:function(){var markup=this.renderRows();return this.templates.body.apply({rows:markup});},refreshRow:function(record){var ds=this.ds,index;if(typeof record=='number'){index=record;record=ds.getAt(index);}else{index=ds.indexOf(record);}
-var cls=[];this.insertRows(ds,index,index,true);this.getRow(index).rowIndex=index;this.onRemove(ds,record,index+1,true);this.fireEvent("rowupdated",this,index,record);},refresh:function(headersToo){this.fireEvent("beforerefresh",this);this.grid.stopEditing(true);var result=this.renderBody();this.mainBody.update(result);if(headersToo===true){this.updateHeaders();this.updateHeaderSortState();}
+this.insertRows(ds,index,index,true);this.getRow(index).rowIndex=index;this.onRemove(ds,record,index+1,true);this.fireEvent("rowupdated",this,index,record);},refresh:function(headersToo){this.fireEvent("beforerefresh",this);this.grid.stopEditing(true);var result=this.renderBody();this.mainBody.update(result);if(headersToo===true){this.updateHeaders();this.updateHeaderSortState();}
 this.processRows(0,true);this.layout();this.applyEmptyText();this.fireEvent("refresh",this);},applyEmptyText:function(){if(this.emptyText&&!this.hasRows()){this.mainBody.update('<div class="x-grid-empty">'+this.emptyText+'</div>');}},updateHeaderSortState:function(){var state=this.ds.getSortState();if(!state){return;}
 if(!this.sortState||(this.sortState.field!=state.field||this.sortState.direction!=state.direction)){this.grid.fireEvent('sortchange',this.grid,state);}
 this.sortState=state;var sortColumn=this.cm.findColumnIndex(state.field);if(sortColumn!=-1){var sortDir=state.direction;this.updateSortIcon(sortColumn,sortDir);}},destroy:function(){if(this.colMenu){Ext.menu.MenuMgr.unregister(this.colMenu);this.colMenu.destroy();delete this.colMenu;}
@@ -2295,11 +2311,11 @@
 this.ds=ds;if(this.cm){this.cm.un("configchange",this.onColConfigChange,this);this.cm.un("widthchange",this.onColWidthChange,this);this.cm.un("headerchange",this.onHeaderChange,this);this.cm.un("hiddenchange",this.onHiddenChange,this);this.cm.un("columnmoved",this.onColumnMove,this);this.cm.un("columnlockchange",this.onColumnLock,this);}
 if(cm){delete this.lastViewWidth;cm.on("configchange",this.onColConfigChange,this);cm.on("widthchange",this.onColWidthChange,this);cm.on("headerchange",this.onHeaderChange,this);cm.on("hiddenchange",this.onHiddenChange,this);cm.on("columnmoved",this.onColumnMove,this);cm.on("columnlockchange",this.onColumnLock,this);}
 this.cm=cm;},onDataChange:function(){this.refresh();this.updateHeaderSortState();this.syncFocusEl(0);},onClear:function(){this.refresh();this.syncFocusEl(0);},onUpdate:function(ds,record){this.refreshRow(record);},onAdd:function(ds,records,index){this.insertRows(ds,index,index+(records.length-1));},onRemove:function(ds,record,index,isUpdate){if(isUpdate!==true){this.fireEvent("beforerowremoved",this,index,record);}
-this.removeRow(index);if(isUpdate!==true){this.processRows(index);this.applyEmptyText();this.fireEvent("rowremoved",this,index,record);}},onLoad:function(){this.scrollToTop();},onColWidthChange:function(cm,col,width){this.updateColumnWidth(col,width);},onHeaderChange:function(cm,col,text){this.updateHeaders();},onHiddenChange:function(cm,col,hidden){this.updateColumnHidden(col,hidden);},onColumnMove:function(cm,oldIndex,newIndex){this.indexMap=null;var s=this.getScrollState();this.refresh(true);this.restoreScroll(s);this.afterMove(newIndex);},onColConfigChange:function(){delete this.lastViewWidth;this.indexMap=null;this.refresh(true);},initUI:function(grid){grid.on("headerclick",this.onHeaderClick,this);if(grid.trackMouseOver){grid.on("mouseover",this.onRowOver,this);grid.on("mouseout",this.onRowOut,this);}},initEvents:function(){},onHeaderClick:function(g,index){if(this.headersDisabled||!this.cm.isSortable(index)){return;}
-g.stopEditing(true);g.store.sort(this.cm.getDataIndex(index));},onRowOver:function(e,t){var row;if((row=this.findRowIndex(t))!==false){this.addRowClass(row,"x-grid3-row-over");}},onRowOut:function(e,t){var row;if((row=this.findRowIndex(t))!==false&&row!==this.findRowIndex(e.getRelatedTarget())){this.removeRowClass(row,"x-grid3-row-over");}},handleWheel:function(e){e.stopPropagation();},onRowSelect:function(row){this.addRowClass(row,this.selectedRowClass);},onRowDeselect:function(row){this.removeRowClass(row,this.selectedRowClass);},onCellSelect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).addClass("x-grid3-cell-selected");}},onCellDeselect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).removeClass("x-grid3-cell-selected");}},onColumnSplitterMoved:function(i,w){this.userResized=true;var cm=this.grid.colModel;cm.setColumnWidth(i,w,true);if(this.forceFit){this.fitColumns(true,false,i);this.updateAllColumnWidths();}else{this.updateColumnWidth(i,w);this.syncHeaderScroll();}
+this.removeRow(index);if(isUpdate!==true){this.processRows(index);this.applyEmptyText();this.fireEvent("rowremoved",this,index,record);}},onLoad:function(){this.scrollToTop();},onColWidthChange:function(cm,col,width){this.updateColumnWidth(col,width);},onHeaderChange:function(cm,col,text){this.updateHeaders();},onHiddenChange:function(cm,col,hidden){this.updateColumnHidden(col,hidden);},onColumnMove:function(cm,oldIndex,newIndex){this.indexMap=null;var s=this.getScrollState();this.refresh(true);this.restoreScroll(s);this.afterMove(newIndex);},onColConfigChange:function(){delete this.lastViewWidth;this.indexMap=null;this.refresh(true);},initUI:function(grid){grid.on("headerclick",this.onHeaderClick,this);},initEvents:function(){},onHeaderClick:function(g,index){if(this.headersDisabled||!this.cm.isSortable(index)){return;}
+g.stopEditing(true);g.store.sort(this.cm.getDataIndex(index));},onRowOver:function(e,t){var row;if((row=this.findRowIndex(t))!==false){this.addRowClass(row,"x-grid3-row-over");}},onRowOut:function(e,t){var row;if((row=this.findRowIndex(t))!==false&&!e.within(this.getRow(row),true)){this.removeRowClass(row,"x-grid3-row-over");}},handleWheel:function(e){e.stopPropagation();},onRowSelect:function(row){this.addRowClass(row,this.selectedRowClass);},onRowDeselect:function(row){this.removeRowClass(row,this.selectedRowClass);},onCellSelect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).addClass("x-grid3-cell-selected");}},onCellDeselect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).removeClass("x-grid3-cell-selected");}},onColumnSplitterMoved:function(i,w){this.userResized=true;var cm=this.grid.colModel;cm.setColumnWidth(i,w,true);if(this.forceFit){this.fitColumns(true,false,i);this.updateAllColumnWidths();}else{this.updateColumnWidth(i,w);this.syncHeaderScroll();}
 this.grid.fireEvent("columnresize",i,w);},handleHdMenuClick:function(item){var index=this.hdCtxIndex;var cm=this.cm,ds=this.ds;switch(item.id){case"asc":ds.sort(cm.getDataIndex(index),"ASC");break;case"desc":ds.sort(cm.getDataIndex(index),"DESC");break;default:index=cm.getIndexById(item.id.substr(4));if(index!=-1){if(item.checked&&cm.getColumnsBy(this.isHideableColumn,this).length<=1){this.onDenyColumnHide();return false;}
 cm.setHidden(index,item.checked);}}
-return true;},isHideableColumn:function(c){return!c.hidden&&!c.fixed;},beforeColMenuShow:function(){var cm=this.cm,colCount=cm.getColumnCount();this.colMenu.removeAll();for(var i=0;i<colCount;i++){if(cm.config[i].fixed!==true&&cm.config[i].hideable!==false){this.colMenu.add(new Ext.menu.CheckItem({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false,disabled:cm.config[i].hideable===false}));}}},handleHdDown:function(e,t){if(Ext.fly(t).hasClass('x-grid3-hd-btn')){e.stopEvent();var hd=this.findHeaderCell(t);Ext.fly(hd).addClass('x-grid3-hd-menu-open');var index=this.getCellIndex(hd);this.hdCtxIndex=index;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(index));ms.get("desc").setDisabled(!cm.isSortable(index));this.hmenu.on("hide",function(){Ext.fly(hd).removeClass('x-grid3-hd-menu-open');},this,{single:true});this.hmenu.show(t,"tl-bl?");}},handleHdOver:function(e,t){var hd=this.findHeaderCell(t);if(hd&&!this.headersDisabled){this.activeHd=hd;this.activeHdIndex=this.getCellIndex(hd);var fly=this.fly(hd);this.activeHdRegion=fly.getRegion();if(!this.cm.isMenuDisabled(this.activeHdIndex)){fly.addClass("x-grid3-hd-over");this.activeHdBtn=fly.child('.x-grid3-hd-btn');if(this.activeHdBtn){this.activeHdBtn.dom.style.height=(hd.firstChild.offsetHeight-1)+'px';}}}},handleHdMove:function(e,t){if(this.activeHd&&!this.headersDisabled){var hw=this.splitHandleWidth||5;var r=this.activeHdRegion;var x=e.getPageX();var ss=this.activeHd.style;if(x-r.left<=hw&&this.cm.isResizable(this.activeHdIndex-1)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'e-resize':'col-resize';}else if(r.right-x<=(!this.activeHdBtn?hw:2)&&this.cm.isResizable(this.activeHdIndex)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'w-resize':'col-resize';}else{ss.cursor='';}}},handleHdOut:function(e,t){var hd=this.findHeaderCell(t);if(hd&&(!Ext.isIE||!e.within(hd,true))){this.activeHd=null;this.fly(hd).removeClass("x-grid3-hd-over");hd.style.cursor='';}},hasRows:function(){var fc=this.mainBody.dom.firstChild;return fc&&fc.className!='x-grid-empty';},bind:function(d,c){this.initData(d,c);}});Ext.grid.GridView.SplitDragZone=function(grid,hd){this.grid=grid;this.view=grid.getView();this.marker=this.view.resizeMarker;this.proxy=this.view.resizeProxy;Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this,hd,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.scroll=false;this.hw=this.view.splitHandleWidth||5;};Ext.extend(Ext.grid.GridView.SplitDragZone,Ext.dd.DDProxy,{b4StartDrag:function(x,y){this.view.headersDisabled=true;var h=this.view.mainWrap.getHeight();this.marker.setHeight(h);this.marker.show();this.marker.alignTo(this.view.getHeaderCell(this.cellIndex),'tl-tl',[-2,0]);this.proxy.setHeight(h);var w=this.cm.getColumnWidth(this.cellIndex);var minw=Math.max(w-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(minw,1000);this.setYConstraint(0,0);this.minX=x-minw;this.maxX=x+1000;this.startPos=x;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,x,y);},handleMouseDown:function(e){var t=this.view.findHeaderCell(e.getTarget());if(t){var xy=this.view.fly(t).getXY(),x=xy[0],y=xy[1];var exy=e.getXY(),ex=exy[0],ey=exy[1];var w=t.offsetWidth,adjust=false;if((ex-x)<=this.hw){adjust=-1;}else if((x+w)-ex<=this.hw){adjust=0;}
+return true;},isHideableColumn:function(c){return!c.hidden&&!c.fixed;},beforeColMenuShow:function(){var cm=this.cm,colCount=cm.getColumnCount();this.colMenu.removeAll();for(var i=0;i<colCount;i++){if(cm.config[i].fixed!==true&&cm.config[i].hideable!==false){this.colMenu.add(new Ext.menu.CheckItem({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false,disabled:cm.config[i].hideable===false}));}}},handleHdDown:function(e,t){if(Ext.fly(t).hasClass('x-grid3-hd-btn')){e.stopEvent();var hd=this.findHeaderCell(t);Ext.fly(hd).addClass('x-grid3-hd-menu-open');var index=this.getCellIndex(hd);this.hdCtxIndex=index;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(index));ms.get("desc").setDisabled(!cm.isSortable(index));this.hmenu.on("hide",function(){Ext.fly(hd).removeClass('x-grid3-hd-menu-open');},this,{single:true});this.hmenu.show(t,"tl-bl?");}},handleHdOver:function(e,t){var hd=this.findHeaderCell(t);if(hd&&!this.headersDisabled){this.activeHd=hd;this.activeHdIndex=this.getCellIndex(hd);var fly=this.fly(hd);this.activeHdRegion=fly.getRegion();if(!this.cm.isMenuDisabled(this.activeHdIndex)){fly.addClass("x-grid3-hd-over");this.activeHdBtn=fly.child('.x-grid3-hd-btn');if(this.activeHdBtn){this.activeHdBtn.dom.style.height=(hd.firstChild.offsetHeight-1)+'px';}}}},handleHdMove:function(e,t){if(this.activeHd&&!this.headersDisabled){var hw=this.splitHandleWidth||5;var r=this.activeHdRegion;var x=e.getPageX();var ss=this.activeHd.style;if(x-r.left<=hw&&this.cm.isResizable(this.activeHdIndex-1)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'e-resize':'col-resize';}else if(r.right-x<=(!this.activeHdBtn?hw:2)&&this.cm.isResizable(this.activeHdIndex)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'w-resize':'col-resize';}else{ss.cursor='';}}},handleHdOut:function(e,t){var hd=this.findHeaderCell(t);if(hd&&(!Ext.isIE||!e.within(hd,true))){this.activeHd=null;this.fly(hd).removeClass("x-grid3-hd-over");hd.style.cursor='';}},hasRows:function(){var fc=this.mainBody.dom.firstChild;return fc&&fc.className!='x-grid-empty';},bind:function(d,c){this.initData(d,c);}});Ext.grid.GridView.SplitDragZone=function(grid,hd){this.grid=grid;this.view=grid.getView();this.marker=this.view.resizeMarker;this.proxy=this.view.resizeProxy;Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this,hd,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.scroll=false;this.hw=this.view.splitHandleWidth||5;};Ext.extend(Ext.grid.GridView.SplitDragZone,Ext.dd.DDProxy,{b4StartDrag:function(x,y){this.view.headersDisabled=true;var h=this.view.mainWrap.getHeight();this.marker.setHeight(h);this.marker.show();this.marker.alignTo(this.view.getHeaderCell(this.cellIndex),'tl-tl',[-2,0]);this.proxy.setHeight(h);var w=this.cm.getColumnWidth(this.cellIndex);var minw=Math.max(w-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(minw,1000);this.setYConstraint(0,0);this.minX=x-minw;this.maxX=x+1000;this.startPos=x;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,x,y);},handleMouseDown:function(e){var t=this.view.findHeaderCell(e.getTarget());if(t){var xy=this.view.fly(t).getXY(),x=xy[0],y=xy[1];var exy=e.getXY(),ex=exy[0];var w=t.offsetWidth,adjust=false;if((ex-x)<=this.hw){adjust=-1;}else if((x+w)-ex<=this.hw){adjust=0;}
 if(adjust!==false){this.cm=this.grid.colModel;var ci=this.view.getCellIndex(t);if(adjust==-1){if(ci+adjust<0){return;}
 while(this.cm.isHidden(ci+adjust)){--adjust;if(ci+adjust<0){return;}}}
 this.cellIndex=ci+adjust;this.split=t.dom;if(this.cm.isResizable(this.cellIndex)&&!this.cm.isFixed(this.cellIndex)){Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this,arguments);}}else if(this.view.columnDrag){this.view.columnDrag.callHandleMouseDown(e);}}},endDrag:function(e){this.marker.hide();var v=this.view;var endX=Math.max(this.minX,e.getPageX());var diff=endX-this.startPos;v.onColumnSplitterMoved(this.cellIndex,this.cm.getColumnWidth(this.cellIndex)+diff);setTimeout(function(){v.headersDisabled=false;},50);},autoOffset:function(){this.setDelta(0,0);}});
@@ -2349,7 +2365,7 @@
 return false;},onInitDrag:function(e){var data=this.dragData;this.ddel.innerHTML=this.grid.getDragDropText();this.proxy.update(this.ddel);},afterRepair:function(){this.dragging=false;},getRepairXY:function(e,data){return false;},onEndDrag:function(data,e){},onValidDrop:function(dd,e,id){this.hideProxy();},beforeInvalidDrop:function(e,id){}});
 
 Ext.grid.ColumnModel=function(config){if(config.columns){Ext.apply(this,config);this.setConfig(config.columns,true);}else{this.setConfig(config,true);}
-this.addEvents("widthchange","headerchange","hiddenchange","columnmoved","columnlockchange","configchange");Ext.grid.ColumnModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.ColumnModel,Ext.util.Observable,{defaultWidth:100,defaultSortable:false,getColumnId:function(index){return this.config[index].id;},setConfig:function(config,initial){if(!initial){delete this.totalWidth;for(var i=0,len=this.config.length;i<len;i++){var c=this.config[i];if(c.editor){c.editor.destroy();}}}
+this.addEvents("widthchange","headerchange","hiddenchange","columnmoved","columnlockchange","configchange");Ext.grid.ColumnModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.ColumnModel,Ext.util.Observable,{defaultWidth:100,defaultSortable:false,getColumnId:function(index){return this.config[index].id;},getColumnAt:function(index){return this.config[index];},setConfig:function(config,initial){if(!initial){delete this.totalWidth;for(var i=0,len=this.config.length;i<len;i++){var c=this.config[i];if(c.editor){c.editor.destroy();}}}
 this.config=config;this.lookup={};for(var i=0,len=config.length;i<len;i++){var c=config[i];if(!c.isColumn){var cls=Ext.grid.Column.types[c.xtype||'gridcolumn'];c=new cls(c);config[i]=c;}
 this.lookup[c.id]=c;}
 if(!initial){this.fireEvent('configchange',this);}},getColumnById:function(id){return this.lookup[id];},getIndexById:function(id){for(var i=0,len=this.config.length;i<len;i++){if(this.config[i].id==id){return i;}}
@@ -2362,7 +2378,7 @@
 return this.config[col].sortable;},isMenuDisabled:function(col){return!!this.config[col].menuDisabled;},getRenderer:function(col){if(!this.config[col].renderer){return Ext.grid.ColumnModel.defaultRenderer;}
 return this.config[col].renderer;},setRenderer:function(col,fn){this.config[col].renderer=fn;},getColumnWidth:function(col){return this.config[col].width||this.defaultWidth;},setColumnWidth:function(col,width,suppressEvent){this.config[col].width=width;this.totalWidth=null;if(!suppressEvent){this.fireEvent("widthchange",this,col,width);}},getTotalWidth:function(includeHidden){if(!this.totalWidth){this.totalWidth=0;for(var i=0,len=this.config.length;i<len;i++){if(includeHidden||!this.isHidden(i)){this.totalWidth+=this.getColumnWidth(i);}}}
 return this.totalWidth;},getColumnHeader:function(col){return this.config[col].header;},setColumnHeader:function(col,header){this.config[col].header=header;this.fireEvent("headerchange",this,col,header);},getColumnTooltip:function(col){return this.config[col].tooltip;},setColumnTooltip:function(col,tooltip){this.config[col].tooltip=tooltip;},getDataIndex:function(col){return this.config[col].dataIndex;},setDataIndex:function(col,dataIndex){this.config[col].dataIndex=dataIndex;},findColumnIndex:function(dataIndex){var c=this.config;for(var i=0,len=c.length;i<len;i++){if(c[i].dataIndex==dataIndex){return i;}}
-return-1;},isCellEditable:function(colIndex,rowIndex){return(this.config[colIndex].editable||(typeof this.config[colIndex].editable=="undefined"&&this.config[colIndex].editor))?true:false;},getCellEditor:function(colIndex,rowIndex){return this.config[colIndex].editor;},setEditable:function(col,editable){this.config[col].editable=editable;},isHidden:function(colIndex){return this.config[colIndex].hidden;},isFixed:function(colIndex){return this.config[colIndex].fixed;},isResizable:function(colIndex){return colIndex>=0&&this.config[colIndex].resizable!==false&&this.config[colIndex].fixed!==true;},setHidden:function(colIndex,hidden){var c=this.config[colIndex];if(c.hidden!==hidden){c.hidden=hidden;this.totalWidth=null;this.fireEvent("hiddenchange",this,colIndex,hidden);}},setEditor:function(col,editor){this.config[col].editor=editor;}});Ext.grid.ColumnModel.defaultRenderer=function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
+return-1;},isCellEditable:function(colIndex,rowIndex){return(this.config[colIndex].editable||(typeof this.config[colIndex].editable=="undefined"&&this.config[colIndex].editor))?true:false;},getCellEditor:function(colIndex,rowIndex){return this.config[colIndex].getCellEditor(rowIndex);},setEditable:function(col,editable){this.config[col].editable=editable;},isHidden:function(colIndex){return this.config[colIndex].hidden;},isFixed:function(colIndex){return this.config[colIndex].fixed;},isResizable:function(colIndex){return colIndex>=0&&this.config[colIndex].resizable!==false&&this.config[colIndex].fixed!==true;},setHidden:function(colIndex,hidden){var c=this.config[colIndex];if(c.hidden!==hidden){c.hidden=hidden;this.totalWidth=null;this.fireEvent("hiddenchange",this,colIndex,hidden);}},setEditor:function(col,editor){this.config[col].editor=editor;}});Ext.grid.ColumnModel.defaultRenderer=function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
 return value;};
 
 Ext.grid.AbstractSelectionModel=function(){this.locked=false;Ext.grid.AbstractSelectionModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.AbstractSelectionModel,Ext.util.Observable,{init:function(grid){this.grid=grid;this.initEvents();},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;}});
@@ -2415,11 +2431,13 @@
 return Ext.util.Format.htmlEncode(rv);},getPropertyName:function(name){var pn=this.grid.propertyNames;return pn&&pn[name]?pn[name]:name;},getCellEditor:function(colIndex,rowIndex){var p=this.store.getProperty(rowIndex);var n=p.data['name'],val=p.data['value'];if(this.grid.customEditors[n]){return this.grid.customEditors[n];}
 if(Ext.isDate(val)){return this.editors['date'];}else if(typeof val=='number'){return this.editors['number'];}else if(typeof val=='boolean'){return this.editors['boolean'];}else{return this.editors['string'];}}});Ext.grid.PropertyGrid=Ext.extend(Ext.grid.EditorGridPanel,{enableColumnMove:false,stripeRows:false,trackMouseOver:false,clicksToEdit:1,enableHdMenu:false,viewConfig:{forceFit:true},initComponent:function(){this.customEditors=this.customEditors||{};this.lastEditRow=null;var store=new Ext.grid.PropertyStore(this);this.propStore=store;var cm=new Ext.grid.PropertyColumnModel(this,store);store.store.sort('name','ASC');this.addEvents('beforepropertychange','propertychange');this.cm=cm;this.ds=store.store;Ext.grid.PropertyGrid.superclass.initComponent.call(this);this.selModel.on('beforecellselect',function(sm,rowIndex,colIndex){if(colIndex===0){this.startEditing.defer(200,this,[rowIndex,1]);return false;}},this);},onRender:function(){Ext.grid.PropertyGrid.superclass.onRender.apply(this,arguments);this.getGridEl().addClass('x-props-grid');},afterRender:function(){Ext.grid.PropertyGrid.superclass.afterRender.apply(this,arguments);if(this.source){this.setSource(this.source);}},setSource:function(source){this.propStore.setSource(source);},getSource:function(){return this.propStore.getSource();}});Ext.reg("propertygrid",Ext.grid.PropertyGrid);
 
-Ext.grid.Column=function(config){Ext.apply(this,config);if(typeof this.renderer=="string"){this.renderer=Ext.util.Format[c.renderer];}
+Ext.grid.Column=function(config){Ext.apply(this,config);if(typeof this.renderer=="string"){this.renderer=Ext.util.Format[this.renderer];}
 if(typeof this.id=="undefined"){this.id=++Ext.grid.Column.AUTO_ID;}
-if(this.editor){if(this.editor.isFormField){this.editor=new Ext.grid.GridEditor(this.editor);}else if(this.editor.xtype&&!this.editor.events){this.editor=new Ext.grid.GridEditor(Ext.create(this.editor,'textfield'));}}}
+if(this.editor){if(this.editor.xtype&&!this.editor.events){this.editor=Ext.create(this.editor,'textfield');}}}
 Ext.grid.Column.AUTO_ID=0;Ext.grid.Column.prototype={isColumn:true,renderer:function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
-return value;}};Ext.grid.BooleanColumn=Ext.extend(Ext.grid.Column,{renderer:function(value){if(value===undefined){return"&#160;";}
+return value;},getEditor:function(rowIndex){return this.editable!==false?this.editor:null;},getCellEditor:function(rowIndex){var editor=this.getEditor(rowIndex);if(editor){if(!editor.startEdit){if(!editor.gridEditor){editor.gridEditor=new Ext.grid.GridEditor(editor);}
+return editor.gridEditor;}else if(editor.startEdit){return editor;}}
+return null;}};Ext.grid.BooleanColumn=Ext.extend(Ext.grid.Column,{renderer:function(value){if(value===undefined){return"&#160;";}
 if(!value||value==='false'){return"false";}
 return'true';}});Ext.grid.NumberColumn=Ext.extend(Ext.grid.Column,{format:'0,000.00',constructor:function(cfg){this.supr().constructor.apply(this,arguments);this.renderer=Ext.util.Format.numberRenderer(this.format);}});Ext.grid.DateColumn=Ext.extend(Ext.grid.Column,{format:'m/d/Y',constructor:function(cfg){this.supr().constructor.apply(this,arguments);this.renderer=Ext.util.Format.dateRenderer(this.format);}});Ext.grid.TemplateColumn=Ext.extend(Ext.grid.Column,{constructor:function(cfg){this.supr().constructor.apply(this,arguments);var tpl=typeof this.tpl=='object'?this.tpl:new Ext.XTemplate(this.tpl);this.renderer=function(value,p,r){return tpl.apply(r.data);}
 this.tpl=tpl;}});Ext.grid.Column.types={gridcolumn:Ext.grid.Column,booleancolumn:Ext.grid.BooleanColumn,numbercolumn:Ext.grid.NumberColumn,datecolumn:Ext.grid.DateColumn,templatecolumn:Ext.grid.TemplateColumn};
@@ -2557,7 +2575,7 @@
 function updateIFrame(token){var html=['<html><body><div id="state">',token,'</div></body></html>'].join('');try{var doc=iframe.contentWindow.document;doc.open();doc.write(html);doc.close();return true;}catch(e){return false;}}
 function checkIFrame(){if(!iframe.contentWindow||!iframe.contentWindow.document){setTimeout(checkIFrame,10);return;}
 var doc=iframe.contentWindow.document;var elem=doc.getElementById("state");var token=elem?elem.innerText:null;var hash=getHash();setInterval(function(){doc=iframe.contentWindow.document;elem=doc.getElementById("state");var newtoken=elem?elem.innerText:null;var newHash=getHash();if(newtoken!==token){token=newtoken;handleStateChange(token);top.location.hash=token;hash=token;doSave();}else if(newHash!==hash){hash=newHash;updateIFrame(newHash);}},50);ready=true;Ext.History.fireEvent('ready',Ext.History);}
-function startUp(){currentToken=hiddenField.value;if(Ext.isIE){checkIFrame();}else{var hash=getHash();setInterval(function(){var newHash=getHash();if(newHash!==hash){hash=newHash;handleStateChange(hash);doSave();}},50);ready=true;Ext.History.fireEvent('ready',Ext.History);}}
+function startUp(){currentToken=hiddenField.value?hiddenField.value:getHash();if(Ext.isIE){checkIFrame();}else{var hash=getHash();setInterval(function(){var newHash=getHash();if(newHash!==hash){hash=newHash;handleStateChange(hash);doSave();}},50);ready=true;Ext.History.fireEvent('ready',Ext.History);}}
 return{fieldId:'x-history-field',iframeId:'x-history-frame',events:{},init:function(onReady,scope){if(ready){Ext.callback(onReady,scope,[this]);return;}
 if(!Ext.isReady){Ext.onReady(function(){Ext.History.init(onReady,scope);});return;}
 hiddenField=Ext.getDom(Ext.History.fieldId);if(Ext.isIE){iframe=Ext.getDom(Ext.History.iframeId);}


Property changes on: mickael/trunk/ext/v3.0.0-a1/learn
___________________________________________________________________
Name: svn:ignore
   + desktop


Modified: mickael/trunk/ext/v3.0.0-a1/package/date.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/date.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/package/date.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -7,20 +7,21 @@
  */
 
 
-(function(){Date.formatCodeToRegex=function(character,currentGroup){var p=Date.parseCodes[character];if(p){p=Ext.type(p)=='function'?p():p;Date.parseCodes[character]=p;}
-return p?Ext.applyIf({c:p.c?String.format(p.c,currentGroup||"{0}"):p.c},p):{g:0,c:null,s:Ext.escapeRe(character)}}
+(function(){function xf(format){var args=Array.prototype.slice.call(arguments,1);return format.replace(/\{(\d+)\}/g,function(m,i){return args[i];});}
+Date.formatCodeToRegex=function(character,currentGroup){var p=Date.parseCodes[character];if(p){p=Ext.type(p)=='function'?p():p;Date.parseCodes[character]=p;}
+return p?Ext.applyIf({c:p.c?xf(p.c,currentGroup||"{0}"):p.c},p):{g:0,c:null,s:Ext.escapeRe(character)}}
 var $f=Date.formatCodeToRegex;Ext.apply(Date,{parseFunctions:{count:0},parseRegexes:[],formatFunctions:{count:0},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],y2kYear:50,MILLI:"ms",SECOND:"s",MINUTE:"mi",HOUR:"h",DAY:"d",MONTH:"mo",YEAR:"y",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNumbers:{Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11},getShortMonthName:function(month){return Date.monthNames[month].substring(0,3);},getShortDayName:function(day){return Date.dayNames[day].substring(0,3);},getMonthNumber:function(name){return Date.monthNumbers[name.substring(0,1).toUpperCase()+name.substring(1,3).toLowerCase()];},formatCodes:{d:"String.leftPad(this.getDate(), 2, '0')",D:"Date.getShortDayName(this.getDay())",j:"this.getDate()",l:"Date.dayNames[this.getDay()]",N:"(this.getDay() ? this.getDay() : 7)",S:"this.getSuffix()",w:"this.getDay()",z:"this.getDayOfYear()",W:"String.leftPad(this.getWeekOfYear(), 2, '0')",F:"Date.monthNames[this.getMonth()]",m:"String.leftPad(this.getMonth() + 1, 2, '0')",M:"Date.getShortMonthName(this.getMonth())",n:"(this.getMonth() + 1)",t:"this.getDaysInMonth()",L:"(this.isLeapYear() ? 1 : 0)",o:"(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"this.getFullYear()",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"String.leftPad(this.getHours(), 2, '0')",i:"String.leftPad(this.getMinutes(), 2, '0')",s:"String.leftPad(this.getSeconds(), 2, '0')",u:"String.leftPad(this.getMilliseconds(), 3, '0')",O:"this.getGMTOffset()",P:"this.getGMTOffset(true)",T:"this.getTimezone()",Z:"(this.getTimezoneOffset() * -60)",c:function(){for(var c="Y-m-dTH:i:sP",code=[],i=0,l=c.length;i<l;++i){var e=c.charAt(i);code.push(e=="T"?"'T'":Date.getFormatCode(e));}
 return code.join(" + ");},U:"Math.round(this.getTime() / 1000)"},parseDate:function(input,format){var p=Date.parseFunctions;if(p[format]==null){Date.createParser(format);}
 var func=p[format];return Date[func](input);},getFormatCode:function(character){var f=Date.formatCodes[character];if(f){f=Ext.type(f)=='function'?f():f;Date.formatCodes[character]=f;}
 return f||("'"+String.escape(character)+"'");},createNewFormat:function(format){var funcName="format"+Date.formatFunctions.count++,code="Date.prototype."+funcName+" = function(){return ",special=false,ch='';Date.formatFunctions[format]=funcName;for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
 else if(special){special=false;code+="'"+String.escape(ch)+"' + ";}
 else{code+=Date.getFormatCode(ch)+" + ";}}
-eval(code.substring(0,code.length-3)+";}");},createParser:function(format){var funcName="parse"+Date.parseFunctions.count++,regexNum=Date.parseRegexes.length,currentGroup=1,code=["Date."+funcName+" = function(input){","var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;","input = String(input);","d = new Date();","y = d.getFullYear();","m = d.getMonth();","d = d.getDate();","var results = input.match(Date.parseRegexes["+regexNum+"]);","if (results && results.length > 0) {\n"].join('\n'),regex="",special=false,ch='';Date.parseFunctions[format]=funcName;for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
+eval(code.substring(0,code.length-3)+";}");},createParser:function(){var code=["Date.{0} = function(input){","var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;","input = String(input);","d = new Date();","y = d.getFullYear();","m = d.getMonth();","d = d.getDate();","var results = input.match(Date.parseRegexes[{1}]);","if(results && results.length > 0){","{2}","if(u){","v = new Date(u * 1000);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){","v = new Date(y, m, d, h, i, s, ms);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){","v = new Date(y, m, d, h, i, s);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){","v = new Date(y, m, d, h, i);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){","v = new Date(y, m, d, h);","}else if (y >= 0 && m >= 0 && d > 0){","v = new Date(y, m, d);","}else if (y >= 0 && m >= 0){","v = new Date(y, m);","}else if (y >= 0){","v = new Date(y);","}","}","return (v && (z != null || o != null))?"
++" (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :"
++" v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;","}"].join('\n');return function(format){var funcName="parse"+Date.parseFunctions.count++,regexNum=Date.parseRegexes.length,currentGroup=1,calc="",regex="",special=false,ch="";Date.parseFunctions[format]=funcName;for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
 else if(special){special=false;regex+=String.escape(ch);}
-else{var obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}
-code+=["if (u){","v = new Date(u * 1000);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){","v = new Date(y, m, d, h, i, s, ms);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){","v = new Date(y, m, d, h, i, s);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){","v = new Date(y, m, d, h, i);","}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){","v = new Date(y, m, d, h);","}else if (y >= 0 && m >= 0 && d > 0){","v = new Date(y, m, d);","}else if (y >= 0 && m >= 0){","v = new Date(y, m);","}else if (y >= 0){","v = new Date(y);","}","}","return (v && (z != null || o != null))?"
-+" (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :"
-+" v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;","}"].join('\n');Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$","i");eval(code);},parseCodes:{d:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},j:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},D:function(){for(var a=[],i=0;i<7;a.push(Date.getShortDayName(i)),++i);return{g:0,c:null,s:"(?:"+a.join("|")+")"}},l:function(){return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"}},N:{g:0,c:null,s:"[1-7]"},S:{g:0,c:null,s:"(?:st|nd|rd|th)"},w:{g:0,c:null,s:"[0-6]"},z:{g:0,c:null,s:"(?:\\d{1,3}"},W:{g:0,c:null,s:"(?:\\d{2})"},F:function(){return{g:1,c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n",s:"("+Date.monthNames.join("|")+")"}},M:function(){for(var a=[],i=0;i<12;a.push(Date.getShortMonthName(i)),++i);return Ext.applyIf({s:"("+a.join("|")+")"},$f("F"));},m:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{2})"},n:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{1,2})"},t:{g:0,c:null,s:"(?:\\d{2})"},L:{g:0,c:null,s:"(?:1|0)"},o:function(){return $f("Y");},Y:{g:1,c:"y = parseInt(results[{0}], 10);\n",s:"(\\d{4})"},y:{g:1,c:"var ty = parseInt(results[{0}], 10);\n"
+else{var obj=$f(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){calc+=obj.c;}}}
+Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$","i");eval(xf(code,funcName,regexNum,calc));}}(),parseCodes:{d:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},j:{g:1,c:"d = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},D:function(){for(var a=[],i=0;i<7;a.push(Date.getShortDayName(i)),++i);return{g:0,c:null,s:"(?:"+a.join("|")+")"}},l:function(){return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"}},N:{g:0,c:null,s:"[1-7]"},S:{g:0,c:null,s:"(?:st|nd|rd|th)"},w:{g:0,c:null,s:"[0-6]"},z:{g:0,c:null,s:"(?:\\d{1,3})"},W:{g:0,c:null,s:"(?:\\d{2})"},F:function(){return{g:1,c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n",s:"("+Date.monthNames.join("|")+")"}},M:function(){for(var a=[],i=0;i<12;a.push(Date.getShortMonthName(i)),++i);return Ext.applyIf({s:"("+a.join("|")+")"},$f("F"));},m:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{2})"},n:{g:1,c:"m = parseInt(results[{0}], 10) - 1;\n",s:"(\\d{1,2})"},t:{g:0,c:null,s:"(?:\\d{2})"},L:{g:0,c:null,s:"(?:1|0)"},o:function(){return $f("Y");},Y:{g:1,c:"y = parseInt(results[{0}], 10);\n",s:"(\\d{4})"},y:{g:1,c:"var ty = parseInt(results[{0}], 10);\n"
 +"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:{g:1,c:"if (results[{0}] == 'am') {\n"
 +"if (h == 12) { h = 0; }\n"
 +"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"},A:{g:1,c:"if (results[{0}] == 'AM') {\n"

Modified: mickael/trunk/ext/v3.0.0-a1/package/form/form-debug.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/form/form-debug.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/package/form/form-debug.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -109,7 +109,7 @@
     initValue : function(){
         if(this.value !== undefined){
             this.setValue(this.value);
-        }else if(this.el.dom.value.length > 0 && this.el.dom.value != this.emptyText){
+        }else if(!Ext.isEmpty(this.el.dom.value) && this.el.dom.value != this.emptyText){
             this.setValue(this.el.dom.value);
         }
         // reference to original value for reset
@@ -310,6 +310,11 @@
         }
     },
 
+    // private, does not work for all fields
+    append :function(v){
+         this.setValue([this.getValue(), v].join(''));
+    },
+
     // private
     adjustSize : function(w, h){
         var s = Ext.form.Field.superclass.adjustSize.call(this, w, h);
@@ -1231,7 +1236,7 @@
         if(typeof this.maxValue == "string"){
             this.maxValue = this.parseDate(this.maxValue);
         }
-        this.ddMatch = null;
+        this.disabledDatesRE = null;
         this.initDisabledDays();
     },
 
@@ -1315,7 +1320,7 @@
             }
         }
         var fvalue = this.formatDate(value);
-        if(this.ddMatch && this.ddMatch.test(fvalue)){
+        if(this.disabledDatesRE && this.disabledDatesRE.test(fvalue)){
             this.markInvalid(String.format(this.disabledDatesText, fvalue));
             return false;
         }
@@ -1401,7 +1406,7 @@
         Ext.apply(this.menu.picker,  {
             minDate : this.minValue,
             maxDate : this.maxValue,
-            disabledDatesRE : this.ddMatch,
+            disabledDatesRE : this.disabledDatesRE,
             disabledDatesText : this.disabledDatesText,
             disabledDays : this.disabledDays,
             disabledDaysText : this.disabledDaysText,
@@ -2452,7 +2457,13 @@
 Ext.reg('combo', Ext.form.ComboBox);
 
 Ext.Editor = function(field, config){
-    this.field = field;
+    if(field.field){
+        this.field = Ext.create(field.field, 'textfield');
+        config = Ext.apply({}, field); // copy so we don't disturb original config
+        delete config.field;
+    }else{
+        this.field = field;
+    }
     Ext.Editor.superclass.constructor.call(this, config);
 };
 
@@ -2462,6 +2473,7 @@
     
     
     
+    
     value : "",
     
     alignment: "c-c?",
@@ -2503,10 +2515,13 @@
             cls: "x-editor",
             parentEl : ct,
             shim : this.shim,
-            shadowOffset:4,
+            shadowOffset: this.shadowOffset || 4,
             id: this.id,
             constrain: this.constrain
         });
+        if(this.zIndex){
+            this.el.setZIndex(this.zIndex);
+        }
         this.el.setStyle("overflow", Ext.isGecko ? "auto" : "hidden");
         if(this.field.msgTarget != 'title'){
             this.field.msgTarget = 'qtip';
@@ -3060,10 +3075,6 @@
     // private
     initComponent :function(){
         this.form = this.createForm();
-        if(this.fileUpload) {
-            this.bodyCfg.enctype = 'multipart/form-data';
-        }
-
         Ext.FormPanel.superclass.initComponent.call(this);
 
         this.bodyCfg = {
@@ -3072,7 +3083,9 @@
             method : this.method || 'POST',
             id : this.formId || Ext.id()
         };
-        
+        if(this.fileUpload) {
+            this.bodyCfg.enctype = 'multipart/form-data';
+        }
         this.initItems();
         
         this.addEvents(

Modified: mickael/trunk/ext/v3.0.0-a1/package/form/form.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/form/form.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/package/form/form.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -14,7 +14,7 @@
 this.el.addClass('x-form-'+type);}
 if(this.readOnly){this.el.dom.readOnly=true;}
 if(this.tabIndex!==undefined){this.el.dom.setAttribute('tabIndex',this.tabIndex);}
-this.el.addClass([this.fieldClass,this.cls]);},getItemCt:function(){return this.el.up('.x-form-item',4);},initValue:function(){if(this.value!==undefined){this.setValue(this.value);}else if(this.el.dom.value.length>0&&this.el.dom.value!=this.emptyText){this.setValue(this.el.dom.value);}
+this.el.addClass([this.fieldClass,this.cls]);},getItemCt:function(){return this.el.up('.x-form-item',4);},initValue:function(){if(this.value!==undefined){this.setValue(this.value);}else if(!Ext.isEmpty(this.el.dom.value)&&this.el.dom.value!=this.emptyText){this.setValue(this.el.dom.value);}
 this.originalValue=this.getValue();},isDirty:function(){if(this.disabled){return false;}
 return String(this.getValue())!==String(this.originalValue);},afterRender:function(){Ext.form.Field.superclass.afterRender.call(this);this.initEvents();this.initValue();},fireKey:function(e){if(e.isSpecialKey()){this.fireEvent("specialkey",this,e);}},reset:function(){this.setValue(this.originalValue);this.clearInvalid();},initEvents:function(){this.el.on(Ext.isIE||Ext.isSafari3?"keydown":"keypress",this.fireKey,this);this.el.on("focus",this.onFocus,this);var o=this.inEditor&&Ext.isWindows&&Ext.isGecko?{buffer:10}:null;this.el.on("blur",this.onBlur,this,o);},onFocus:function(){if(!Ext.isOpera&&this.focusClass){this.el.addClass(this.focusClass);}
 if(!this.hasFocus){this.hasFocus=true;this.startValue=this.getValue();this.fireEvent("focus",this);}},beforeBlur:Ext.emptyFn,onBlur:function(){this.beforeBlur();if(!Ext.isOpera&&this.focusClass){this.el.removeClass(this.focusClass);}
@@ -29,7 +29,7 @@
 this.fireEvent('valid',this);},getMessageHandler:function(){return Ext.form.MessageTargets[this.msgTarget];},getErrorCt:function(){return this.el.findParent('.x-form-element',5,true)||this.el.findParent('.x-form-field-wrap',5,true);},alignErrorIcon:function(){this.errorIcon.alignTo(this.el,'tl-tr',[2,0]);},getRawValue:function(){var v=this.rendered?this.el.getValue():Ext.value(this.value,'');if(v===this.emptyText){v='';}
 return v;},getValue:function(){if(!this.rendered){return this.value;}
 var v=this.el.getValue();if(v===this.emptyText||v===undefined){v='';}
-return v;},setRawValue:function(v){return this.el.dom.value=(v===null||v===undefined?'':v);},setValue:function(v){this.value=v;if(this.rendered){this.el.dom.value=(v===null||v===undefined?'':v);this.validate();}},adjustSize:function(w,h){var s=Ext.form.Field.superclass.adjustSize.call(this,w,h);s.width=this.adjustWidth(this.el.dom.tagName,s.width);if(this.offsetCt){var ct=this.getItemCt();s.width-=ct.getFrameWidth('lr');s.height-=ct.getFrameWidth('tb');}
+return v;},setRawValue:function(v){return this.el.dom.value=(v===null||v===undefined?'':v);},setValue:function(v){this.value=v;if(this.rendered){this.el.dom.value=(v===null||v===undefined?'':v);this.validate();}},append:function(v){this.setValue([this.getValue(),v].join(''));},adjustSize:function(w,h){var s=Ext.form.Field.superclass.adjustSize.call(this,w,h);s.width=this.adjustWidth(this.el.dom.tagName,s.width);if(this.offsetCt){var ct=this.getItemCt();s.width-=ct.getFrameWidth('lr');s.height-=ct.getFrameWidth('tb');}
 return s;},adjustWidth:function(tag,w){tag=tag.toLowerCase();if(typeof w=='number'&&!Ext.isSafari){if(Ext.isIE&&(tag=='input'||tag=='textarea')){if(tag=='input'&&!Ext.isStrict){return this.inEditor?w:w-3;}
 if(tag=='input'&&Ext.isStrict){return w-(Ext.isIE6?4:1);}
 if(tag=='textarea'&&Ext.isStrict){return w-2;}}else if(Ext.isOpera&&Ext.isStrict){if(tag=='input'){return w+2;}
@@ -96,14 +96,14 @@
 
 Ext.form.DateField=Ext.extend(Ext.form.TriggerField,{format:"m/d/Y",altFormats:"m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d",disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:'x-form-date-trigger',showToday:true,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"},initComponent:function(){Ext.form.DateField.superclass.initComponent.call(this);if(typeof this.minValue=="string"){this.minValue=this.parseDate(this.minValue);}
 if(typeof this.maxValue=="string"){this.maxValue=this.parseDate(this.maxValue);}
-this.ddMatch=null;this.initDisabledDays();},initDisabledDays:function(){if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1)re+="|";}
+this.disabledDatesRE=null;this.initDisabledDays();},initDisabledDays:function(){if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1)re+="|";}
 this.disabledDatesRE=new RegExp(re+")");}},setDisabledDates:function(dd){this.disabledDates=dd;this.initDisabledDays();if(this.menu){this.menu.picker.setDisabledDates(this.disabledDatesRE);}},setDisabledDays:function(dd){this.disabledDays=dd;if(this.menu){this.menu.picker.setDisabledDays(dd);}},setMinValue:function(dt){this.minValue=(typeof dt=="string"?this.parseDate(dt):dt);if(this.menu){this.menu.picker.setMinDate(this.minValue);}},setMaxValue:function(dt){this.maxValue=(typeof dt=="string"?this.parseDate(dt):dt);if(this.menu){this.menu.picker.setMaxDate(this.maxValue);}},validateValue:function(value){value=this.formatDate(value);if(!Ext.form.DateField.superclass.validateValue.call(this,value)){return false;}
 if(value.length<1){return true;}
 var svalue=value;value=this.parseDate(value);if(!value){this.markInvalid(String.format(this.invalidText,svalue,this.format));return false;}
 var time=value.getTime();if(this.minValue&&time<this.minValue.getTime()){this.markInvalid(String.format(this.minText,this.formatDate(this.minValue)));return false;}
 if(this.maxValue&&time>this.maxValue.getTime()){this.markInvalid(String.format(this.maxText,this.formatDate(this.maxValue)));return false;}
 if(this.disabledDays){var day=value.getDay();for(var i=0;i<this.disabledDays.length;i++){if(day===this.disabledDays[i]){this.markInvalid(this.disabledDaysText);return false;}}}
-var fvalue=this.formatDate(value);if(this.ddMatch&&this.ddMatch.test(fvalue)){this.markInvalid(String.format(this.disabledDatesText,fvalue));return false;}
+var fvalue=this.formatDate(value);if(this.disabledDatesRE&&this.disabledDatesRE.test(fvalue)){this.markInvalid(String.format(this.disabledDatesText,fvalue));return false;}
 return true;},validateBlur:function(){return!this.menu||!this.menu.isVisible();},getValue:function(){return this.parseDate(Ext.form.DateField.superclass.getValue.call(this))||"";},setValue:function(date){Ext.form.DateField.superclass.setValue.call(this,this.formatDate(this.parseDate(date)));},parseDate:function(value){if(!value||Ext.isDate(value)){return value;}
 var v=Date.parseDate(value,this.format);if(!v&&this.altFormats){if(!this.altFormatsArray){this.altFormatsArray=this.altFormats.split("|");}
 for(var i=0,len=this.altFormatsArray.length;i<len&&!v;i++){v=Date.parseDate(value,this.altFormatsArray[i]);}}
@@ -111,7 +111,7 @@
 if(this.wrap){this.wrap.remove();}
 Ext.form.DateField.superclass.onDestroy.call(this);},formatDate:function(date){return Ext.isDate(date)?date.dateFormat(this.format):date;},menuListeners:{select:function(m,d){this.setValue(d);},show:function(){this.onFocus();},hide:function(){this.focus.defer(10,this);var ml=this.menuListeners;this.menu.un("select",ml.select,this);this.menu.un("show",ml.show,this);this.menu.un("hide",ml.hide,this);}},onTriggerClick:function(){if(this.disabled){return;}
 if(this.menu==null){this.menu=new Ext.menu.DateMenu();}
-Ext.apply(this.menu.picker,{minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.ddMatch,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.format,showToday:this.showToday,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))});this.menu.on(Ext.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}}});Ext.reg('datefield',Ext.form.DateField);
+Ext.apply(this.menu.picker,{minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.disabledDatesRE,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.format,showToday:this.showToday,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))});this.menu.on(Ext.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}}});Ext.reg('datefield',Ext.form.DateField);
 
 Ext.form.Checkbox=Ext.extend(Ext.form.Field,{checkedCls:'x-form-check-checked',focusCls:'x-form-check-focus',overCls:'x-form-check-over',mouseDownCls:'x-form-check-down',tabIndex:0,checked:false,defaultAutoCreate:{tag:'input',type:'checkbox',autocomplete:'off'},baseCls:'x-form-check',initComponent:function(){Ext.form.Checkbox.superclass.initComponent.call(this);this.addEvents('check');},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.initCheckEvents();},initCheckEvents:function(){this.innerWrap.removeAllListeners();this.innerWrap.addClassOnOver(this.overCls);this.innerWrap.addClassOnClick(this.mouseDownCls);this.innerWrap.on('click',this.onClick,this);this.innerWrap.on('keyup',this.onKeyUp,this);},onRender:function(ct,position){Ext.form.Checkbox.superclass.onRender.call(this,ct,position);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue;}
 this.el.addClass('x-hidden');this.innerWrap=this.el.wrap({tabIndex:this.tabIndex,cls:this.baseCls+'-wrap-inner'});this.wrap=this.innerWrap.wrap({cls:this.baseCls+'-wrap'});if(this.boxLabel){this.labelEl=this.innerWrap.createChild({tag:'label',htmlFor:this.el.id,cls:'x-form-cb-label',html:this.boxLabel});}
@@ -167,7 +167,9 @@
 if(this.isExpanded()){this.collapse();this.el.focus();}else{this.onFocus({});if(this.triggerAction=='all'){this.doQuery(this.allQuery,true);}else{this.doQuery(this.getRawValue());}
 this.el.focus();}}});Ext.reg('combo',Ext.form.ComboBox);
 
-Ext.Editor=function(field,config){this.field=field;Ext.Editor.superclass.constructor.call(this,config);};Ext.extend(Ext.Editor,Ext.Component,{value:"",alignment:"c-c?",shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:false,cancelOnEsc:false,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey");},onRender:function(ct,position){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:ct,shim:this.shim,shadowOffset:4,id:this.id,constrain:this.constrain});this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!='title'){this.field.msgTarget='qtip';}
+Ext.Editor=function(field,config){if(field.field){this.field=Ext.create(field.field,'textfield');config=Ext.apply({},field);delete config.field;}else{this.field=field;}
+Ext.Editor.superclass.constructor.call(this,config);};Ext.extend(Ext.Editor,Ext.Component,{value:"",alignment:"c-c?",shadow:"frame",constrain:false,swallowKeys:true,completeOnEnter:false,cancelOnEsc:false,updateEl:false,initComponent:function(){Ext.Editor.superclass.initComponent.call(this);this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey");},onRender:function(ct,position){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:ct,shim:this.shim,shadowOffset:this.shadowOffset||4,id:this.id,constrain:this.constrain});if(this.zIndex){this.el.setZIndex(this.zIndex);}
+this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!='title'){this.field.msgTarget='qtip';}
 this.field.inEditor=true;this.field.render(this.el);if(Ext.isGecko){this.field.el.dom.setAttribute('autocomplete','off');}
 this.field.on("specialkey",this.onSpecialKey,this);if(this.swallowKeys){this.field.el.swallowEvent(['keydown','keypress']);}
 this.field.show();this.field.on("blur",this.onBlur,this);if(this.field.grow){this.field.on("autosize",this.el.sync,this.el,{delay:1});}},onSpecialKey:function(field,e){var key=e.getKey();if(this.completeOnEnter&&key==e.ENTER){e.stopEvent();this.completeEdit();}else if(this.cancelOnEsc&&key==e.ESC){this.cancelEdit();}else{this.fireEvent('specialkey',field,e);}
@@ -202,8 +204,8 @@
 return this;},getValues:function(asString){var fs=Ext.lib.Ajax.serializeForm(this.el.dom);if(asString===true){return fs;}
 return Ext.urlDecode(fs);},getFieldValues:function(){var o={};this.items.each(function(f){o[f.getName()]=f.getValue();});return o;},clearInvalid:function(){this.items.each(function(f){f.clearInvalid();});return this;},reset:function(){this.items.each(function(f){f.reset();});return this;},add:function(){this.items.addAll(Array.prototype.slice.call(arguments,0));return this;},remove:function(field){this.items.remove(field);return this;},render:function(){this.items.each(function(f){if(f.isFormField&&!f.rendered&&document.getElementById(f.id)){f.applyToMarkup(f.id);}});return this;},applyToFields:function(o){this.items.each(function(f){Ext.apply(f,o);});return this;},applyIfToFields:function(o){this.items.each(function(f){Ext.applyIf(f,o);});return this;},callFieldMethod:function(fnName,args){args=args||[];this.items.each(function(f){if(typeof f[fnName]=='function'){f[fnName].apply(f,args);}});return this;}});Ext.BasicForm=Ext.form.BasicForm;
 
-Ext.FormPanel=Ext.extend(Ext.Panel,{buttonAlign:'center',minButtonWidth:75,labelAlign:'left',monitorValid:false,monitorPoll:200,layout:'form',initComponent:function(){this.form=this.createForm();if(this.fileUpload){this.bodyCfg.enctype='multipart/form-data';}
-Ext.FormPanel.superclass.initComponent.call(this);this.bodyCfg={tag:'form',cls:this.baseCls+'-body',method:this.method||'POST',id:this.formId||Ext.id()};this.initItems();this.addEvents('clientvalidation');this.relayEvents(this.form,['beforeaction','actionfailed','actioncomplete']);},createForm:function(){delete this.initialConfig.listeners;return new Ext.form.BasicForm(null,this.initialConfig);},initFields:function(){var f=this.form;var formPanel=this;var fn=function(c){if(c.isFormField){f.add(c);}if(c.isFieldWrap){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});f.add(c.field);}else if(c.doLayout&&c!=formPanel){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});if(c.items){c.items.each(fn);}}}
+Ext.FormPanel=Ext.extend(Ext.Panel,{buttonAlign:'center',minButtonWidth:75,labelAlign:'left',monitorValid:false,monitorPoll:200,layout:'form',initComponent:function(){this.form=this.createForm();Ext.FormPanel.superclass.initComponent.call(this);this.bodyCfg={tag:'form',cls:this.baseCls+'-body',method:this.method||'POST',id:this.formId||Ext.id()};if(this.fileUpload){this.bodyCfg.enctype='multipart/form-data';}
+this.initItems();this.addEvents('clientvalidation');this.relayEvents(this.form,['beforeaction','actionfailed','actioncomplete']);},createForm:function(){delete this.initialConfig.listeners;return new Ext.form.BasicForm(null,this.initialConfig);},initFields:function(){var f=this.form;var formPanel=this;var fn=function(c){if(c.isFormField){f.add(c);}if(c.isFieldWrap){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});f.add(c.field);}else if(c.doLayout&&c!=formPanel){Ext.applyIf(c,{labelAlign:c.ownerCt.labelAlign,labelWidth:c.ownerCt.labelWidth,itemCls:c.ownerCt.itemCls});if(c.items){c.items.each(fn);}}}
 this.items.each(fn);},getLayoutTarget:function(){return this.form.el;},getForm:function(){return this.form;},onRender:function(ct,position){this.initFields();Ext.FormPanel.superclass.onRender.call(this,ct,position);this.form.initEl(this.body);},beforeDestroy:function(){Ext.FormPanel.superclass.beforeDestroy.call(this);this.stopMonitoring();Ext.destroy(this.form);},initEvents:function(){Ext.FormPanel.superclass.initEvents.call(this);this.items.on('remove',this.onRemove,this);this.items.on('add',this.onAdd,this);if(this.monitorValid){this.startMonitoring();}},onAdd:function(ct,c){if(c.isFormField){this.form.add(c);}},onRemove:function(c){if(c.isFormField){Ext.destroy(c.container.up('.x-form-item'));this.form.remove(c);}},startMonitoring:function(){if(!this.bound){this.bound=true;Ext.TaskMgr.start({run:this.bindHandler,interval:this.monitorPoll||200,scope:this});}},stopMonitoring:function(){this.bound=false;},load:function(){this.form.load.apply(this.form,arguments);},onDisable:function(){Ext.FormPanel.superclass.onDisable.call(this);if(this.form){this.form.items.each(function(){this.disable();});}},onEnable:function(){Ext.FormPanel.superclass.onEnable.call(this);if(this.form){this.form.items.each(function(){this.enable();});}},bindHandler:function(){if(!this.bound){return false;}
 var valid=true;this.form.items.each(function(f){if(!f.isValid(true)){valid=false;return false;}});if(this.buttons){for(var i=0,len=this.buttons.length;i<len;i++){var btn=this.buttons[i];if(btn.formBind===true&&btn.disabled===valid){btn.setDisabled(!valid);}}}
 this.fireEvent('clientvalidation',this,valid);}});Ext.reg('form',Ext.FormPanel);Ext.form.FormPanel=Ext.FormPanel;

Modified: mickael/trunk/ext/v3.0.0-a1/package/grid/edit-grid-debug.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/grid/edit-grid-debug.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/package/grid/edit-grid-debug.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -147,6 +147,7 @@
                     ed.record = r;
                     ed.on("complete", this.onEditComplete, this, {single: true});
                     ed.on("specialkey", this.selModel.onEditorKey, this.selModel);
+                    
                     this.activeEditor = ed;
                     var v = this.preEditValue(r, field);
                     ed.startEdit(this.view.getCell(row, col).firstChild, v === undefined ? '' : v);

Modified: mickael/trunk/ext/v3.0.0-a1/package/grid/grid.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/grid/grid.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/package/grid/grid.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -24,9 +24,9 @@
 return this.fly(el).findParent(this.rowSelector,this.rowSelectorDepth);},findRowIndex:function(el){var r=this.findRow(el);return r?r.rowIndex:false;},getRow:function(row){return this.getRows()[row];},getCell:function(row,col){return this.getRow(row).getElementsByTagName('td')[col];},getHeaderCell:function(index){return this.mainHd.dom.getElementsByTagName('td')[index];},addRowClass:function(row,cls){var r=this.getRow(row);if(r){this.fly(r).addClass(cls);}},removeRowClass:function(row,cls){var r=this.getRow(row);if(r){this.fly(r).removeClass(cls);}},removeRow:function(row){Ext.removeNode(this.getRow(row));this.syncFocusEl(row);},removeRows:function(firstRow,lastRow){var bd=this.mainBody.dom;for(var rowIndex=firstRow;rowIndex<=lastRow;rowIndex++){Ext.removeNode(bd.childNodes[firstRow]);}
 this.syncFocusEl(firstRow);},getScrollState:function(){var sb=this.scroller.dom;return{left:sb.scrollLeft,top:sb.scrollTop};},restoreScroll:function(state){var sb=this.scroller.dom;sb.scrollLeft=state.left;sb.scrollTop=state.top;},scrollToTop:function(){this.scroller.dom.scrollTop=0;this.scroller.dom.scrollLeft=0;},syncScroll:function(){this.syncHeaderScroll();var mb=this.scroller.dom;this.grid.fireEvent("bodyscroll",mb.scrollLeft,mb.scrollTop);},syncHeaderScroll:function(){var mb=this.scroller.dom;this.innerHd.scrollLeft=mb.scrollLeft;this.innerHd.scrollLeft=mb.scrollLeft;},updateSortIcon:function(col,dir){var sc=this.sortClasses;var hds=this.mainHd.select('td').removeClass(sc);hds.item(col).addClass(sc[dir=="DESC"?1:0]);},updateAllColumnWidths:function(){var tw=this.getTotalWidth();var clen=this.cm.getColumnCount();var ws=[];for(var i=0;i<clen;i++){ws[i]=this.getColumnWidth(i);}
 this.innerHd.firstChild.firstChild.style.width=tw;for(var i=0;i<clen;i++){var hd=this.getHeaderCell(i);hd.style.width=ws[i];}
-var ns=this.getRows();for(var i=0,len=ns.length;i<len;i++){ns[i].style.width=tw;ns[i].firstChild.style.width=tw;var row=ns[i].firstChild.rows[0];for(var j=0;j<clen;j++){row.childNodes[j].style.width=ws[j];}}
-this.onAllColumnWidthsUpdated(ws,tw);},updateColumnWidth:function(col,width){var w=this.getColumnWidth(col);var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var hd=this.getHeaderCell(col);hd.style.width=w;var ns=this.getRows();for(var i=0,len=ns.length;i<len;i++){ns[i].style.width=tw;ns[i].firstChild.style.width=tw;ns[i].firstChild.rows[0].childNodes[col].style.width=w;}
-this.onColumnWidthUpdated(col,w,tw);},updateColumnHidden:function(col,hidden){var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var display=hidden?'none':'';var hd=this.getHeaderCell(col);hd.style.display=display;var ns=this.getRows();for(var i=0,len=ns.length;i<len;i++){ns[i].style.width=tw;ns[i].firstChild.style.width=tw;ns[i].firstChild.rows[0].childNodes[col].style.display=display;}
+var ns=this.getRows(),row,trow;for(var i=0,len=ns.length;i<len;i++){row=ns[i];row.style.width=tw;if(row.firstChild){row.firstChild.style.width=tw;trow=row.firstChild.rows[0];for(var j=0;j<clen;j++){trow.childNodes[j].style.width=ws[j];}}}
+this.onAllColumnWidthsUpdated(ws,tw);},updateColumnWidth:function(col,width){var w=this.getColumnWidth(col);var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var hd=this.getHeaderCell(col);hd.style.width=w;var ns=this.getRows(),row;for(var i=0,len=ns.length;i<len;i++){row=ns[i];row.style.width=tw;if(row.firstChild){row.firstChild.style.width=tw;row.firstChild.rows[0].childNodes[col].style.width=w;}}
+this.onColumnWidthUpdated(col,w,tw);},updateColumnHidden:function(col,hidden){var tw=this.getTotalWidth();this.innerHd.firstChild.firstChild.style.width=tw;var display=hidden?'none':'';var hd=this.getHeaderCell(col);hd.style.display=display;var ns=this.getRows(),row;for(var i=0,len=ns.length;i<len;i++){row=ns[i];row.style.width=tw;if(row.firstChild){row.firstChild.style.width=tw;row.firstChild.rows[0].childNodes[col].style.display=display;}}
 this.onColumnHiddenUpdated(col,hidden,tw);delete this.lastViewWidth;this.layout();},doRender:function(cs,rs,ds,startRow,colCount,stripe){var ts=this.templates,ct=ts.cell,rt=ts.row,last=colCount-1;var tstyle='width:'+this.getTotalWidth()+';';var buf=[],cb,c,p={},rp={tstyle:tstyle},r;for(var j=0,len=rs.length;j<len;j++){r=rs[j];cb=[];var rowIndex=(j+startRow);for(var i=0;i<colCount;i++){c=cs[i];p.id=c.id;p.css=i==0?'x-grid3-cell-first ':(i==last?'x-grid3-cell-last ':'');p.attr=p.cellAttr="";p.value=c.renderer(r.data[c.name],p,r,rowIndex,i,ds);p.style=c.style;if(p.value==undefined||p.value==="")p.value="&#160;";if(r.dirty&&typeof r.modified[c.name]!=='undefined'){p.css+=' x-grid3-dirty-cell';}
 cb[cb.length]=ct.apply(p);}
 var alt=[];if(stripe&&((rowIndex+1)%2==0)){alt[0]="x-grid3-row-alt";}
@@ -41,12 +41,13 @@
 if(g.enableHdMenu!==false){if(g.enableColumnHide!==false){this.colMenu=new Ext.menu.Menu({id:g.id+"-hcols-menu"});this.colMenu.on("beforeshow",this.beforeColMenuShow,this);this.colMenu.on("itemclick",this.handleHdMenuClick,this);}
 this.hmenu=new Ext.menu.Menu({id:g.id+"-hctx"});this.hmenu.add({id:"asc",text:this.sortAscText,cls:"xg-hmenu-sort-asc"},{id:"desc",text:this.sortDescText,cls:"xg-hmenu-sort-desc"});if(g.enableColumnHide!==false){this.hmenu.add('-',{id:"columns",text:this.columnsText,menu:this.colMenu,iconCls:'x-cols-icon'});}
 this.hmenu.on("itemclick",this.handleHdMenuClick,this);}
+if(g.trackMouseOver){this.mainBody.on("mouseover",this.onRowOver,this);this.mainBody.on("mouseout",this.onRowOut,this);}
 if(g.enableDragDrop||g.enableDrag){this.dragZone=new Ext.grid.GridDragZone(g,{ddGroup:g.ddGroup||'GridDD'});}
 this.updateHeaderSortState();},layout:function(){if(!this.mainBody){return;}
 var g=this.grid;var c=g.getGridEl();var csize=c.getSize(true);var vw=csize.width;if(vw<20||csize.height<20){return;}
 if(g.autoHeight){this.scroller.dom.style.overflow='visible';}else{this.el.setSize(csize.width,csize.height);var hdHeight=this.mainHd.getHeight();var vh=csize.height-(hdHeight);this.scroller.setSize(vw,vh);if(this.innerHd){this.innerHd.style.width=(vw)+'px';}}
 if(this.forceFit){if(this.lastViewWidth!=vw){this.fitColumns(false,false);this.lastViewWidth=vw;}}else{this.autoExpand();this.syncHeaderScroll();}
-this.onLayout(vw,vh);},onLayout:function(vw,vh){},onColumnWidthUpdated:function(col,w,tw){},onAllColumnWidthsUpdated:function(ws,tw){},onColumnHiddenUpdated:function(col,hidden,tw){},updateColumnText:function(col,text){},afterMove:function(colIndex){},init:function(grid){this.grid=grid;this.initTemplates();this.initData(grid.store,grid.colModel);this.initUI(grid);},getColumnId:function(index){return this.cm.getColumnId(index);},renderHeaders:function(){var cm=this.cm,ts=this.templates;var ct=ts.hcell;var cb=[],sb=[],p={};for(var i=0,len=cm.getColumnCount();i<len;i++){p.id=cm.getColumnId(i);p.value=cm.getColumnHeader(i)||"";p.style=this.getColumnStyle(i,true);p.tooltip=this.getColumnTooltip(i);if(cm.config[i].align=='right'){p.istyle='padding-right:16px';}else{delete p.istyle;}
+this.onLayout(vw,vh);},onLayout:function(vw,vh){},onColumnWidthUpdated:function(col,w,tw){},onAllColumnWidthsUpdated:function(ws,tw){},onColumnHiddenUpdated:function(col,hidden,tw){},updateColumnText:function(col,text){},afterMove:function(colIndex){},init:function(grid){this.grid=grid;this.initTemplates();this.initData(grid.store,grid.colModel);this.initUI(grid);},getColumnId:function(index){return this.cm.getColumnId(index);},renderHeaders:function(){var cm=this.cm,ts=this.templates;var ct=ts.hcell;var cb=[],p={};for(var i=0,len=cm.getColumnCount();i<len;i++){p.id=cm.getColumnId(i);p.value=cm.getColumnHeader(i)||"";p.style=this.getColumnStyle(i,true);p.tooltip=this.getColumnTooltip(i);if(cm.config[i].align=='right'){p.istyle='padding-right:16px';}else{delete p.istyle;}
 cb[cb.length]=ct.apply(p);}
 return ts.header.apply({cells:cb.join(""),tstyle:'width:'+this.getTotalWidth()+';'});},getColumnTooltip:function(i){var tt=this.cm.getColumnTooltip(i);if(tt){if(Ext.QuickTips.isEnabled()){return'ext:qtip="'+tt+'"';}else{return'title="'+tt+'"';}}
 return"";},beforeUpdate:function(){this.grid.stopEditing(true);},updateHeaders:function(){this.innerHd.firstChild.innerHTML=this.renderHeaders();},focusRow:function(row){this.focusCell(row,0,false);},focusCell:function(row,col,hscroll){this.syncFocusEl(this.ensureVisible(row,col,hscroll));if(Ext.isGecko){this.focusEl.focus();}else{this.focusEl.focus.defer(1,this.focusEl);}},resolveCell:function(row,col,hscroll){if(typeof row!="number"){row=row.rowIndex;}
@@ -66,7 +67,7 @@
 this.syncFocusEl(firstRow);},deleteRows:function(dm,firstRow,lastRow){if(dm.getRowCount()<1){this.refresh();}else{this.fireEvent("beforerowsdeleted",this,firstRow,lastRow);this.removeRows(firstRow,lastRow);this.processRows(firstRow);this.fireEvent("rowsdeleted",this,firstRow,lastRow);}},getColumnStyle:function(col,isHeader){var style=!isHeader?(this.cm.config[col].css||''):'';style+='width:'+this.getColumnWidth(col)+';';if(this.cm.isHidden(col)){style+='display:none;';}
 var align=this.cm.config[col].align;if(align){style+='text-align:'+align+';';}
 return style;},getColumnWidth:function(col){var w=this.cm.getColumnWidth(col);if(typeof w=='number'){return(Ext.isBorderBox?w:(w-this.borderWidth>0?w-this.borderWidth:0))+'px';}
-return w;},getTotalWidth:function(){return this.cm.getTotalWidth()+'px';},fitColumns:function(preventRefresh,onlyExpand,omitColumn){var cm=this.cm,leftOver,dist,i;var tw=cm.getTotalWidth(false);var aw=this.grid.getGridEl().getWidth(true)-this.scrollOffset;if(aw<20){return;}
+return w;},getTotalWidth:function(){return this.cm.getTotalWidth()+'px';},fitColumns:function(preventRefresh,onlyExpand,omitColumn){var cm=this.cm,i;var tw=cm.getTotalWidth(false);var aw=this.grid.getGridEl().getWidth(true)-this.scrollOffset;if(aw<20){return;}
 var extra=aw-tw;if(extra===0){return false;}
 var vc=cm.getColumnCount(true);var ac=vc-(typeof omitColumn=='number'?1:0);if(ac===0){ac=1;omitColumn=undefined;}
 var colCount=cm.getColumnCount();var cols=[];var extraCol=0;var width=0;var w;for(i=0;i<colCount;i++){if(!cm.isHidden(i)&&!cm.isFixed(i)&&i!==omitColumn){w=cm.getColumnWidth(i);cols.push(i);extraCol=i;cols.push(w);width+=w;}}
@@ -76,7 +77,7 @@
 return true;},autoExpand:function(preventUpdate){var g=this.grid,cm=this.cm;if(!this.userResized&&g.autoExpandColumn){var tw=cm.getTotalWidth(false);var aw=this.grid.getGridEl().getWidth(true)-this.scrollOffset;if(tw!=aw){var ci=cm.getIndexById(g.autoExpandColumn);var currentWidth=cm.getColumnWidth(ci);var cw=Math.min(Math.max(((aw-tw)+currentWidth),g.autoExpandMin),g.autoExpandMax);if(cw!=currentWidth){cm.setColumnWidth(ci,cw,true);if(preventUpdate!==true){this.updateColumnWidth(ci,cw);}}}}},getColumnData:function(){var cs=[],cm=this.cm,colCount=cm.getColumnCount();for(var i=0;i<colCount;i++){var name=cm.getDataIndex(i);cs[i]={name:(typeof name=='undefined'?this.ds.fields.get(i).name:name),renderer:cm.getRenderer(i),id:cm.getColumnId(i),style:this.getColumnStyle(i)};}
 return cs;},renderRows:function(startRow,endRow){var g=this.grid,cm=g.colModel,ds=g.store,stripe=g.stripeRows;var colCount=cm.getColumnCount();if(ds.getCount()<1){return"";}
 var cs=this.getColumnData();startRow=startRow||0;endRow=typeof endRow=="undefined"?ds.getCount()-1:endRow;var rs=ds.getRange(startRow,endRow);return this.doRender(cs,rs,ds,startRow,colCount,stripe);},renderBody:function(){var markup=this.renderRows();return this.templates.body.apply({rows:markup});},refreshRow:function(record){var ds=this.ds,index;if(typeof record=='number'){index=record;record=ds.getAt(index);}else{index=ds.indexOf(record);}
-var cls=[];this.insertRows(ds,index,index,true);this.getRow(index).rowIndex=index;this.onRemove(ds,record,index+1,true);this.fireEvent("rowupdated",this,index,record);},refresh:function(headersToo){this.fireEvent("beforerefresh",this);this.grid.stopEditing(true);var result=this.renderBody();this.mainBody.update(result);if(headersToo===true){this.updateHeaders();this.updateHeaderSortState();}
+this.insertRows(ds,index,index,true);this.getRow(index).rowIndex=index;this.onRemove(ds,record,index+1,true);this.fireEvent("rowupdated",this,index,record);},refresh:function(headersToo){this.fireEvent("beforerefresh",this);this.grid.stopEditing(true);var result=this.renderBody();this.mainBody.update(result);if(headersToo===true){this.updateHeaders();this.updateHeaderSortState();}
 this.processRows(0,true);this.layout();this.applyEmptyText();this.fireEvent("refresh",this);},applyEmptyText:function(){if(this.emptyText&&!this.hasRows()){this.mainBody.update('<div class="x-grid-empty">'+this.emptyText+'</div>');}},updateHeaderSortState:function(){var state=this.ds.getSortState();if(!state){return;}
 if(!this.sortState||(this.sortState.field!=state.field||this.sortState.direction!=state.direction)){this.grid.fireEvent('sortchange',this.grid,state);}
 this.sortState=state;var sortColumn=this.cm.findColumnIndex(state.field);if(sortColumn!=-1){var sortDir=state.direction;this.updateSortIcon(sortColumn,sortDir);}},destroy:function(){if(this.colMenu){Ext.menu.MenuMgr.unregister(this.colMenu);this.colMenu.destroy();delete this.colMenu;}
@@ -91,17 +92,17 @@
 this.ds=ds;if(this.cm){this.cm.un("configchange",this.onColConfigChange,this);this.cm.un("widthchange",this.onColWidthChange,this);this.cm.un("headerchange",this.onHeaderChange,this);this.cm.un("hiddenchange",this.onHiddenChange,this);this.cm.un("columnmoved",this.onColumnMove,this);this.cm.un("columnlockchange",this.onColumnLock,this);}
 if(cm){delete this.lastViewWidth;cm.on("configchange",this.onColConfigChange,this);cm.on("widthchange",this.onColWidthChange,this);cm.on("headerchange",this.onHeaderChange,this);cm.on("hiddenchange",this.onHiddenChange,this);cm.on("columnmoved",this.onColumnMove,this);cm.on("columnlockchange",this.onColumnLock,this);}
 this.cm=cm;},onDataChange:function(){this.refresh();this.updateHeaderSortState();this.syncFocusEl(0);},onClear:function(){this.refresh();this.syncFocusEl(0);},onUpdate:function(ds,record){this.refreshRow(record);},onAdd:function(ds,records,index){this.insertRows(ds,index,index+(records.length-1));},onRemove:function(ds,record,index,isUpdate){if(isUpdate!==true){this.fireEvent("beforerowremoved",this,index,record);}
-this.removeRow(index);if(isUpdate!==true){this.processRows(index);this.applyEmptyText();this.fireEvent("rowremoved",this,index,record);}},onLoad:function(){this.scrollToTop();},onColWidthChange:function(cm,col,width){this.updateColumnWidth(col,width);},onHeaderChange:function(cm,col,text){this.updateHeaders();},onHiddenChange:function(cm,col,hidden){this.updateColumnHidden(col,hidden);},onColumnMove:function(cm,oldIndex,newIndex){this.indexMap=null;var s=this.getScrollState();this.refresh(true);this.restoreScroll(s);this.afterMove(newIndex);},onColConfigChange:function(){delete this.lastViewWidth;this.indexMap=null;this.refresh(true);},initUI:function(grid){grid.on("headerclick",this.onHeaderClick,this);if(grid.trackMouseOver){grid.on("mouseover",this.onRowOver,this);grid.on("mouseout",this.onRowOut,this);}},initEvents:function(){},onHeaderClick:function(g,index){if(this.headersDisabled||!this.cm.isSortable(index)){return;}
-g.stopEditing(true);g.store.sort(this.cm.getDataIndex(index));},onRowOver:function(e,t){var row;if((row=this.findRowIndex(t))!==false){this.addRowClass(row,"x-grid3-row-over");}},onRowOut:function(e,t){var row;if((row=this.findRowIndex(t))!==false&&row!==this.findRowIndex(e.getRelatedTarget())){this.removeRowClass(row,"x-grid3-row-over");}},handleWheel:function(e){e.stopPropagation();},onRowSelect:function(row){this.addRowClass(row,this.selectedRowClass);},onRowDeselect:function(row){this.removeRowClass(row,this.selectedRowClass);},onCellSelect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).addClass("x-grid3-cell-selected");}},onCellDeselect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).removeClass("x-grid3-cell-selected");}},onColumnSplitterMoved:function(i,w){this.userResized=true;var cm=this.grid.colModel;cm.setColumnWidth(i,w,true);if(this.forceFit){this.fitColumns(true,false,i);this.updateAllColumnWidths();}else{this.updateColumnWidth(i,w);this.syncHeaderScroll();}
+this.removeRow(index);if(isUpdate!==true){this.processRows(index);this.applyEmptyText();this.fireEvent("rowremoved",this,index,record);}},onLoad:function(){this.scrollToTop();},onColWidthChange:function(cm,col,width){this.updateColumnWidth(col,width);},onHeaderChange:function(cm,col,text){this.updateHeaders();},onHiddenChange:function(cm,col,hidden){this.updateColumnHidden(col,hidden);},onColumnMove:function(cm,oldIndex,newIndex){this.indexMap=null;var s=this.getScrollState();this.refresh(true);this.restoreScroll(s);this.afterMove(newIndex);},onColConfigChange:function(){delete this.lastViewWidth;this.indexMap=null;this.refresh(true);},initUI:function(grid){grid.on("headerclick",this.onHeaderClick,this);},initEvents:function(){},onHeaderClick:function(g,index){if(this.headersDisabled||!this.cm.isSortable(index)){return;}
+g.stopEditing(true);g.store.sort(this.cm.getDataIndex(index));},onRowOver:function(e,t){var row;if((row=this.findRowIndex(t))!==false){this.addRowClass(row,"x-grid3-row-over");}},onRowOut:function(e,t){var row;if((row=this.findRowIndex(t))!==false&&!e.within(this.getRow(row),true)){this.removeRowClass(row,"x-grid3-row-over");}},handleWheel:function(e){e.stopPropagation();},onRowSelect:function(row){this.addRowClass(row,this.selectedRowClass);},onRowDeselect:function(row){this.removeRowClass(row,this.selectedRowClass);},onCellSelect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).addClass("x-grid3-cell-selected");}},onCellDeselect:function(row,col){var cell=this.getCell(row,col);if(cell){this.fly(cell).removeClass("x-grid3-cell-selected");}},onColumnSplitterMoved:function(i,w){this.userResized=true;var cm=this.grid.colModel;cm.setColumnWidth(i,w,true);if(this.forceFit){this.fitColumns(true,false,i);this.updateAllColumnWidths();}else{this.updateColumnWidth(i,w);this.syncHeaderScroll();}
 this.grid.fireEvent("columnresize",i,w);},handleHdMenuClick:function(item){var index=this.hdCtxIndex;var cm=this.cm,ds=this.ds;switch(item.id){case"asc":ds.sort(cm.getDataIndex(index),"ASC");break;case"desc":ds.sort(cm.getDataIndex(index),"DESC");break;default:index=cm.getIndexById(item.id.substr(4));if(index!=-1){if(item.checked&&cm.getColumnsBy(this.isHideableColumn,this).length<=1){this.onDenyColumnHide();return false;}
 cm.setHidden(index,item.checked);}}
-return true;},isHideableColumn:function(c){return!c.hidden&&!c.fixed;},beforeColMenuShow:function(){var cm=this.cm,colCount=cm.getColumnCount();this.colMenu.removeAll();for(var i=0;i<colCount;i++){if(cm.config[i].fixed!==true&&cm.config[i].hideable!==false){this.colMenu.add(new Ext.menu.CheckItem({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false,disabled:cm.config[i].hideable===false}));}}},handleHdDown:function(e,t){if(Ext.fly(t).hasClass('x-grid3-hd-btn')){e.stopEvent();var hd=this.findHeaderCell(t);Ext.fly(hd).addClass('x-grid3-hd-menu-open');var index=this.getCellIndex(hd);this.hdCtxIndex=index;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(index));ms.get("desc").setDisabled(!cm.isSortable(index));this.hmenu.on("hide",function(){Ext.fly(hd).removeClass('x-grid3-hd-menu-open');},this,{single:true});this.hmenu.show(t,"tl-bl?");}},handleHdOver:function(e,t){var hd=this.findHeaderCell(t);if(hd&&!this.headersDisabled){this.activeHd=hd;this.activeHdIndex=this.getCellIndex(hd);var fly=this.fly(hd);this.activeHdRegion=fly.getRegion();if(!this.cm.isMenuDisabled(this.activeHdIndex)){fly.addClass("x-grid3-hd-over");this.activeHdBtn=fly.child('.x-grid3-hd-btn');if(this.activeHdBtn){this.activeHdBtn.dom.style.height=(hd.firstChild.offsetHeight-1)+'px';}}}},handleHdMove:function(e,t){if(this.activeHd&&!this.headersDisabled){var hw=this.splitHandleWidth||5;var r=this.activeHdRegion;var x=e.getPageX();var ss=this.activeHd.style;if(x-r.left<=hw&&this.cm.isResizable(this.activeHdIndex-1)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'e-resize':'col-resize';}else if(r.right-x<=(!this.activeHdBtn?hw:2)&&this.cm.isResizable(this.activeHdIndex)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'w-resize':'col-resize';}else{ss.cursor='';}}},handleHdOut:function(e,t){var hd=this.findHeaderCell(t);if(hd&&(!Ext.isIE||!e.within(hd,true))){this.activeHd=null;this.fly(hd).removeClass("x-grid3-hd-over");hd.style.cursor='';}},hasRows:function(){var fc=this.mainBody.dom.firstChild;return fc&&fc.className!='x-grid-empty';},bind:function(d,c){this.initData(d,c);}});Ext.grid.GridView.SplitDragZone=function(grid,hd){this.grid=grid;this.view=grid.getView();this.marker=this.view.resizeMarker;this.proxy=this.view.resizeProxy;Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this,hd,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.scroll=false;this.hw=this.view.splitHandleWidth||5;};Ext.extend(Ext.grid.GridView.SplitDragZone,Ext.dd.DDProxy,{b4StartDrag:function(x,y){this.view.headersDisabled=true;var h=this.view.mainWrap.getHeight();this.marker.setHeight(h);this.marker.show();this.marker.alignTo(this.view.getHeaderCell(this.cellIndex),'tl-tl',[-2,0]);this.proxy.setHeight(h);var w=this.cm.getColumnWidth(this.cellIndex);var minw=Math.max(w-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(minw,1000);this.setYConstraint(0,0);this.minX=x-minw;this.maxX=x+1000;this.startPos=x;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,x,y);},handleMouseDown:function(e){var t=this.view.findHeaderCell(e.getTarget());if(t){var xy=this.view.fly(t).getXY(),x=xy[0],y=xy[1];var exy=e.getXY(),ex=exy[0],ey=exy[1];var w=t.offsetWidth,adjust=false;if((ex-x)<=this.hw){adjust=-1;}else if((x+w)-ex<=this.hw){adjust=0;}
+return true;},isHideableColumn:function(c){return!c.hidden&&!c.fixed;},beforeColMenuShow:function(){var cm=this.cm,colCount=cm.getColumnCount();this.colMenu.removeAll();for(var i=0;i<colCount;i++){if(cm.config[i].fixed!==true&&cm.config[i].hideable!==false){this.colMenu.add(new Ext.menu.CheckItem({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false,disabled:cm.config[i].hideable===false}));}}},handleHdDown:function(e,t){if(Ext.fly(t).hasClass('x-grid3-hd-btn')){e.stopEvent();var hd=this.findHeaderCell(t);Ext.fly(hd).addClass('x-grid3-hd-menu-open');var index=this.getCellIndex(hd);this.hdCtxIndex=index;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(index));ms.get("desc").setDisabled(!cm.isSortable(index));this.hmenu.on("hide",function(){Ext.fly(hd).removeClass('x-grid3-hd-menu-open');},this,{single:true});this.hmenu.show(t,"tl-bl?");}},handleHdOver:function(e,t){var hd=this.findHeaderCell(t);if(hd&&!this.headersDisabled){this.activeHd=hd;this.activeHdIndex=this.getCellIndex(hd);var fly=this.fly(hd);this.activeHdRegion=fly.getRegion();if(!this.cm.isMenuDisabled(this.activeHdIndex)){fly.addClass("x-grid3-hd-over");this.activeHdBtn=fly.child('.x-grid3-hd-btn');if(this.activeHdBtn){this.activeHdBtn.dom.style.height=(hd.firstChild.offsetHeight-1)+'px';}}}},handleHdMove:function(e,t){if(this.activeHd&&!this.headersDisabled){var hw=this.splitHandleWidth||5;var r=this.activeHdRegion;var x=e.getPageX();var ss=this.activeHd.style;if(x-r.left<=hw&&this.cm.isResizable(this.activeHdIndex-1)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'e-resize':'col-resize';}else if(r.right-x<=(!this.activeHdBtn?hw:2)&&this.cm.isResizable(this.activeHdIndex)){ss.cursor=Ext.isAir?'move':Ext.isSafari?'w-resize':'col-resize';}else{ss.cursor='';}}},handleHdOut:function(e,t){var hd=this.findHeaderCell(t);if(hd&&(!Ext.isIE||!e.within(hd,true))){this.activeHd=null;this.fly(hd).removeClass("x-grid3-hd-over");hd.style.cursor='';}},hasRows:function(){var fc=this.mainBody.dom.firstChild;return fc&&fc.className!='x-grid-empty';},bind:function(d,c){this.initData(d,c);}});Ext.grid.GridView.SplitDragZone=function(grid,hd){this.grid=grid;this.view=grid.getView();this.marker=this.view.resizeMarker;this.proxy=this.view.resizeProxy;Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this,hd,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.scroll=false;this.hw=this.view.splitHandleWidth||5;};Ext.extend(Ext.grid.GridView.SplitDragZone,Ext.dd.DDProxy,{b4StartDrag:function(x,y){this.view.headersDisabled=true;var h=this.view.mainWrap.getHeight();this.marker.setHeight(h);this.marker.show();this.marker.alignTo(this.view.getHeaderCell(this.cellIndex),'tl-tl',[-2,0]);this.proxy.setHeight(h);var w=this.cm.getColumnWidth(this.cellIndex);var minw=Math.max(w-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(minw,1000);this.setYConstraint(0,0);this.minX=x-minw;this.maxX=x+1000;this.startPos=x;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,x,y);},handleMouseDown:function(e){var t=this.view.findHeaderCell(e.getTarget());if(t){var xy=this.view.fly(t).getXY(),x=xy[0],y=xy[1];var exy=e.getXY(),ex=exy[0];var w=t.offsetWidth,adjust=false;if((ex-x)<=this.hw){adjust=-1;}else if((x+w)-ex<=this.hw){adjust=0;}
 if(adjust!==false){this.cm=this.grid.colModel;var ci=this.view.getCellIndex(t);if(adjust==-1){if(ci+adjust<0){return;}
 while(this.cm.isHidden(ci+adjust)){--adjust;if(ci+adjust<0){return;}}}
 this.cellIndex=ci+adjust;this.split=t.dom;if(this.cm.isResizable(this.cellIndex)&&!this.cm.isFixed(this.cellIndex)){Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this,arguments);}}else if(this.view.columnDrag){this.view.columnDrag.callHandleMouseDown(e);}}},endDrag:function(e){this.marker.hide();var v=this.view;var endX=Math.max(this.minX,e.getPageX());var diff=endX-this.startPos;v.onColumnSplitterMoved(this.cellIndex,this.cm.getColumnWidth(this.cellIndex)+diff);setTimeout(function(){v.headersDisabled=false;},50);},autoOffset:function(){this.setDelta(0,0);}});
 
 Ext.grid.ColumnModel=function(config){if(config.columns){Ext.apply(this,config);this.setConfig(config.columns,true);}else{this.setConfig(config,true);}
-this.addEvents("widthchange","headerchange","hiddenchange","columnmoved","columnlockchange","configchange");Ext.grid.ColumnModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.ColumnModel,Ext.util.Observable,{defaultWidth:100,defaultSortable:false,getColumnId:function(index){return this.config[index].id;},setConfig:function(config,initial){if(!initial){delete this.totalWidth;for(var i=0,len=this.config.length;i<len;i++){var c=this.config[i];if(c.editor){c.editor.destroy();}}}
+this.addEvents("widthchange","headerchange","hiddenchange","columnmoved","columnlockchange","configchange");Ext.grid.ColumnModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.ColumnModel,Ext.util.Observable,{defaultWidth:100,defaultSortable:false,getColumnId:function(index){return this.config[index].id;},getColumnAt:function(index){return this.config[index];},setConfig:function(config,initial){if(!initial){delete this.totalWidth;for(var i=0,len=this.config.length;i<len;i++){var c=this.config[i];if(c.editor){c.editor.destroy();}}}
 this.config=config;this.lookup={};for(var i=0,len=config.length;i<len;i++){var c=config[i];if(!c.isColumn){var cls=Ext.grid.Column.types[c.xtype||'gridcolumn'];c=new cls(c);config[i]=c;}
 this.lookup[c.id]=c;}
 if(!initial){this.fireEvent('configchange',this);}},getColumnById:function(id){return this.lookup[id];},getIndexById:function(id){for(var i=0,len=this.config.length;i<len;i++){if(this.config[i].id==id){return i;}}
@@ -114,7 +115,7 @@
 return this.config[col].sortable;},isMenuDisabled:function(col){return!!this.config[col].menuDisabled;},getRenderer:function(col){if(!this.config[col].renderer){return Ext.grid.ColumnModel.defaultRenderer;}
 return this.config[col].renderer;},setRenderer:function(col,fn){this.config[col].renderer=fn;},getColumnWidth:function(col){return this.config[col].width||this.defaultWidth;},setColumnWidth:function(col,width,suppressEvent){this.config[col].width=width;this.totalWidth=null;if(!suppressEvent){this.fireEvent("widthchange",this,col,width);}},getTotalWidth:function(includeHidden){if(!this.totalWidth){this.totalWidth=0;for(var i=0,len=this.config.length;i<len;i++){if(includeHidden||!this.isHidden(i)){this.totalWidth+=this.getColumnWidth(i);}}}
 return this.totalWidth;},getColumnHeader:function(col){return this.config[col].header;},setColumnHeader:function(col,header){this.config[col].header=header;this.fireEvent("headerchange",this,col,header);},getColumnTooltip:function(col){return this.config[col].tooltip;},setColumnTooltip:function(col,tooltip){this.config[col].tooltip=tooltip;},getDataIndex:function(col){return this.config[col].dataIndex;},setDataIndex:function(col,dataIndex){this.config[col].dataIndex=dataIndex;},findColumnIndex:function(dataIndex){var c=this.config;for(var i=0,len=c.length;i<len;i++){if(c[i].dataIndex==dataIndex){return i;}}
-return-1;},isCellEditable:function(colIndex,rowIndex){return(this.config[colIndex].editable||(typeof this.config[colIndex].editable=="undefined"&&this.config[colIndex].editor))?true:false;},getCellEditor:function(colIndex,rowIndex){return this.config[colIndex].editor;},setEditable:function(col,editable){this.config[col].editable=editable;},isHidden:function(colIndex){return this.config[colIndex].hidden;},isFixed:function(colIndex){return this.config[colIndex].fixed;},isResizable:function(colIndex){return colIndex>=0&&this.config[colIndex].resizable!==false&&this.config[colIndex].fixed!==true;},setHidden:function(colIndex,hidden){var c=this.config[colIndex];if(c.hidden!==hidden){c.hidden=hidden;this.totalWidth=null;this.fireEvent("hiddenchange",this,colIndex,hidden);}},setEditor:function(col,editor){this.config[col].editor=editor;}});Ext.grid.ColumnModel.defaultRenderer=function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
+return-1;},isCellEditable:function(colIndex,rowIndex){return(this.config[colIndex].editable||(typeof this.config[colIndex].editable=="undefined"&&this.config[colIndex].editor))?true:false;},getCellEditor:function(colIndex,rowIndex){return this.config[colIndex].getCellEditor(rowIndex);},setEditable:function(col,editable){this.config[col].editable=editable;},isHidden:function(colIndex){return this.config[colIndex].hidden;},isFixed:function(colIndex){return this.config[colIndex].fixed;},isResizable:function(colIndex){return colIndex>=0&&this.config[colIndex].resizable!==false&&this.config[colIndex].fixed!==true;},setHidden:function(colIndex,hidden){var c=this.config[colIndex];if(c.hidden!==hidden){c.hidden=hidden;this.totalWidth=null;this.fireEvent("hiddenchange",this,colIndex,hidden);}},setEditor:function(col,editor){this.config[col].editor=editor;}});Ext.grid.ColumnModel.defaultRenderer=function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
 return value;};
 
 Ext.grid.AbstractSelectionModel=function(){this.locked=false;Ext.grid.AbstractSelectionModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.AbstractSelectionModel,Ext.util.Observable,{init:function(grid){this.grid=grid;this.initEvents();},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;}});

Modified: mickael/trunk/ext/v3.0.0-a1/package/menu/menus.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/menu/menus.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/package/menu/menus.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -51,9 +51,9 @@
 return null;},setCheckedItem:function(groupId,itemId){var g=groups[groupId];if(g){for(var i=0,l=g.length;i<l;i++){if(g[i].id==itemId){g[i].setChecked(true);}}}
 return null;}};}();
 
-Ext.menu.BaseItem=function(config){Ext.menu.BaseItem.superclass.constructor.call(this,config);this.addEvents('click','activate','deactivate');if(this.handler){this.on("click",this.handler,this.scope);}};Ext.extend(Ext.menu.BaseItem,Ext.Component,{canActivate:false,activeClass:"x-menu-item-active",hideOnClick:true,hideDelay:100,ctype:"Ext.menu.BaseItem",actionMode:"container",render:function(container,parentMenu){this.parentMenu=parentMenu;Ext.menu.BaseItem.superclass.render.call(this,container);this.container.menuItemId=this.itemId||this.id;},onRender:function(container,position){this.el=Ext.get(this.el);container.dom.appendChild(this.el.dom);},setHandler:function(handler,scope){if(this.handler){this.un("click",this.handler,this.scope);}
+Ext.menu.BaseItem=function(config){Ext.menu.BaseItem.superclass.constructor.call(this,config);this.addEvents('click','activate','deactivate');if(this.handler){this.on("click",this.handler,this.scope);}};Ext.extend(Ext.menu.BaseItem,Ext.Component,{canActivate:false,activeClass:"x-menu-item-active",hideOnClick:true,clickHideDelay:1,ctype:"Ext.menu.BaseItem",actionMode:"container",render:function(container,parentMenu){this.parentMenu=parentMenu;Ext.menu.BaseItem.superclass.render.call(this,container);this.container.menuItemId=this.itemId||this.id;},onRender:function(container,position){this.el=Ext.get(this.el);container.dom.appendChild(this.el.dom);},setHandler:function(handler,scope){if(this.handler){this.un("click",this.handler,this.scope);}
 this.on("click",this.handler=handler,this.scope=scope);},onClick:function(e){if(!this.disabled&&this.fireEvent("click",this,e)!==false&&this.parentMenu.fireEvent("itemclick",this,e)!==false){this.handleClick(e);}else{e.stopEvent();}},activate:function(){if(this.disabled){return false;}
-var li=this.container;li.addClass(this.activeClass);this.region=li.getRegion().adjust(2,2,-2,-2);this.fireEvent("activate",this);return true;},deactivate:function(){this.container.removeClass(this.activeClass);this.fireEvent("deactivate",this);},shouldDeactivate:function(e){return!this.region||!this.region.contains(e.getPoint());},handleClick:function(e){if(this.hideOnClick){this.parentMenu.hide.defer(this.hideDelay,this.parentMenu,[true]);}},expandMenu:function(autoActivate){},hideMenu:function(){}});
+var li=this.container;li.addClass(this.activeClass);this.region=li.getRegion().adjust(2,2,-2,-2);this.fireEvent("activate",this);return true;},deactivate:function(){this.container.removeClass(this.activeClass);this.fireEvent("deactivate",this);},shouldDeactivate:function(e){return!this.region||!this.region.contains(e.getPoint());},handleClick:function(e){if(this.hideOnClick){this.parentMenu.hide.defer(this.clickHideDelay,this.parentMenu,[true]);}},expandMenu:function(autoActivate){},hideMenu:function(){}});
 
 Ext.menu.TextItem=function(cfg){if(typeof cfg=='string'){cfg={text:cfg}}
 Ext.menu.TextItem.superclass.constructor.call(this,cfg);};Ext.extend(Ext.menu.TextItem,Ext.menu.BaseItem,{hideOnClick:false,itemCls:"x-menu-text",onRender:function(){var s=document.createElement("span");s.className=this.itemCls;s.innerHTML=this.text;this.el=s;Ext.menu.TextItem.superclass.onRender.apply(this,arguments);}});

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/ext-all.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/ext-all.css	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/ext-all.css	2008-11-21 14:33:19 UTC (rev 31)
@@ -1108,7 +1108,7 @@
 }
 
 .x-form-cb-label {
-    width:'auto' !important;
+    width:auto !important;
     float:none !important;
     clear:none !important;
     display:inline !important;
@@ -3532,7 +3532,7 @@
 .x-menu a.x-menu-item {
 	display:block;
 	line-height:16px;
-	padding:3px 21px 3px 3px;
+    padding:3px 21px 3px 3px;
 	white-space: nowrap;
 	text-decoration:none;
 	color:#222;
@@ -3541,12 +3541,18 @@
 	cursor:pointer;
 }
 .x-menu-item-active {
-	background: #ebf3fd;
-	border:1px solid #aaccf6;
+	background: #dbecf4;
+    border-color:#AACCF6;
+    border-style:solid;
+    border-width: 1px 0;
+    margin:0 1px;
 	padding: 0;
 }
 .x-menu-item-active a.x-menu-item {
-    color: #233d6d;
+	border-color:#AACCF6;
+    border-style:solid;
+    border-width:0 1px;
+    margin:0 -1px;
 }
 
 .x-menu-item-icon {
@@ -3558,6 +3564,9 @@
 	margin: 0 8px 0 0;
    background-position:center;
 }
+.ext-ie .x-menu-item-icon {
+    vertical-align: middle;
+}
 
 .x-menu-check-item .x-menu-item-icon{
 	background: transparent url(../images/default/menu/unchecked.gif) no-repeat center;
@@ -4223,6 +4232,12 @@
 	background-position:0 -63px;
 }
 
+
+.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{
+	white-space: nowrap;
+    font:normal 11px arial,tahoma, helvetica, sans-serif;
+}
+
 
 
 .x-window {
@@ -4407,7 +4422,7 @@
 }
 
 .x-window-plain .x-window-mc {
-    background: #CAD9EC;
+    background: #ccd9e8;
     border-right:1px solid #DFE8F6;
     border-bottom:1px solid #DFE8F6;
     border-top:1px solid #a3bae9;
@@ -4423,7 +4438,7 @@
 }
 
 body.x-body-masked .x-window-plain .x-window-mc {
-    background: #C7D6E9;
+    background: #ccd9e8;
 }
 
 

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/form.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/form.css	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/form.css	2008-11-21 14:33:19 UTC (rev 31)
@@ -434,7 +434,7 @@
 }
 
 .x-form-cb-label {
-    width:'auto' !important;
+    width:auto !important;
     float:none !important;
     clear:none !important;
     display:inline !important;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/menu.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/menu.css	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/menu.css	2008-11-21 14:33:19 UTC (rev 31)
@@ -133,7 +133,7 @@
 .x-menu a.x-menu-item {
 	display:block;
 	line-height:16px;
-	padding:3px 21px 3px 3px;
+    padding:3px 21px 3px 3px;
 	white-space: nowrap;
 	text-decoration:none;
 	color:#222;
@@ -142,12 +142,18 @@
 	cursor:pointer;
 }
 .x-menu-item-active {
-	background: #ebf3fd;
-	border:1px solid #aaccf6;
+	background: #dbecf4;
+    border-color:#AACCF6;
+    border-style:solid;
+    border-width: 1px 0;
+    margin:0 1px;
 	padding: 0;
 }
 .x-menu-item-active a.x-menu-item {
-    color: #233d6d;
+	border-color:#AACCF6;
+    border-style:solid;
+    border-width:0 1px;
+    margin:0 -1px;
 }
 
 .x-menu-item-icon {
@@ -159,6 +165,9 @@
 	margin: 0 8px 0 0;
    background-position:center;
 }
+.ext-ie .x-menu-item-icon {
+    vertical-align: middle;
+}
 
 .x-menu-check-item .x-menu-item-icon{
 	background: transparent url(../images/default/menu/unchecked.gif) no-repeat center;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/panel.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/panel.css	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/panel.css	2008-11-21 14:33:19 UTC (rev 31)
@@ -455,3 +455,9 @@
 .x-panel-btns .x-btn-click .x-btn-left{
 	background-position:0 -63px;
 }
+
+
+.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{
+	white-space: nowrap;
+    font:normal 11px arial,tahoma, helvetica, sans-serif;
+}

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/window.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/window.css	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/window.css	2008-11-21 14:33:19 UTC (rev 31)
@@ -196,7 +196,7 @@
 }
 
 .x-window-plain .x-window-mc {
-    background: #CAD9EC;
+    background: #ccd9e8;
     border-right:1px solid #DFE8F6;
     border-bottom:1px solid #DFE8F6;
     border-top:1px solid #a3bae9;
@@ -212,5 +212,5 @@
 }
 
 body.x-body-masked .x-window-plain .x-window-mc {
-    background: #C7D6E9;
+    background: #ccd9e8;
 }
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/xtheme-gray.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/xtheme-gray.css	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/xtheme-gray.css	2008-11-21 14:33:19 UTC (rev 31)
@@ -21,7 +21,7 @@
 .x-panel-header {
     color:#333;
 	border:1px solid #d0d0d0;
-    background-image:url(../images/gray/panel/white-top-bottom.gif);
+    background-image:url(../images/gray/panel/top-bottom.gif);
 }
 
 .x-panel-body {
@@ -65,7 +65,7 @@
 	background-image:url(../images/gray/panel/corners-sprite.gif);
 }
 .x-panel-mc {
-    background:#f1f1f1;
+    background:#fff;
 }
 .x-panel-mc .x-panel-body {
     background:transparent;
@@ -98,16 +98,143 @@
 
 /* Buttons */
 
-.x-btn-left{
-	background-image:url(../images/gray/button/btn-sprite.gif);
+.x-btn-tl{
+	background-image:url(../images/gray/button/btn.gif);
 }
-.x-btn-right{
-	background-image:url(../images/gray/button/btn-sprite.gif);
+.x-btn-tr{
+	background-image:url(../images/gray/button/btn.gif);
 }
-.x-btn-center{
-	background-image:url(../images/gray/button/btn-sprite.gif);
+.x-btn-tc{
+	background-image:url(../images/gray/button/btn.gif);
 }
 
+.x-btn-ml{
+	background-image:url(../images/gray/button/btn.gif);
+}
+.x-btn-mr{
+	background-image:url(../images/gray/button/btn.gif);
+}
+
+.x-btn-mc{
+	background-image:url(../images/gray/button/btn.gif);
+}
+.x-btn-bl{
+	background-image:url(../images/gray/button/btn.gif);
+}
+.x-btn-br{
+	background-image:url(../images/gray/button/btn.gif);
+}
+.x-btn-bc{
+	background-image:url(../images/gray/button/btn.gif);
+}
+.x-btn-over .x-btn-mc em.x-btn-split, .x-btn-click .x-btn-mc em.x-btn-split, .x-btn-menu-active .x-btn-mc em.x-btn-split, .x-btn-pressed .x-btn-mc em.x-btn-split {
+    background-image:url(../images/default/button/s-arrow.gif);
+}
+
+.x-toolbar .x-btn-over .x-btn-tl{
+	background-position: 0 0;
+}
+.x-toolbar .x-btn-over .x-btn-tr{
+	background-position: -3px 0;
+}
+.x-toolbar .x-btn-over .x-btn-tc{
+	background-position: 0 -6px;
+}
+
+.x-toolbar .x-btn-over .x-btn-ml{
+	background-position: 0 -24px;
+}
+.x-toolbar .x-btn-over .x-btn-mr{
+	background-position: -3px -24px;
+}
+
+.x-toolbar .x-btn-over .x-btn-mc{
+	background-position: 0 -1096px;
+}
+.x-toolbar .x-btn-over .x-btn-bl{
+	background-position: 0 -3px;
+}
+.x-toolbar .x-btn-over .x-btn-br{
+	background-position: -3px -3px;
+}
+.x-toolbar .x-btn-over .x-btn-bc{
+	background-position: 0 -15px;
+}
+
+.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split, .x-toolbar .x-btn-click .x-btn-mc em.x-btn-split, .x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split, .x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split {
+    background-image:url(../images/default/button/s-arrow.gif);
+}
+
+
+.x-toolbar .x-btn-click .x-btn-tl, .x-toolbar .x-btn-menu-active .x-btn-tl, .x-toolbar .x-btn-pressed .x-btn-tl{
+	background-position: -12px 0;
+}
+.x-toolbar .x-btn-click .x-btn-tr, .x-toolbar .x-btn-menu-active .x-btn-tr, .x-toolbar .x-btn-pressed .x-btn-tr{
+	background-position: -15px 0;
+}
+.x-toolbar .x-btn-click .x-btn-tc, .x-toolbar .x-btn-menu-active .x-btn-tc, .x-toolbar .x-btn-pressed .x-btn-tc{
+	background-position: 0 -12px;
+}
+
+.x-toolbar .x-btn-click .x-btn-ml, .x-toolbar .x-btn-menu-active .x-btn-ml, .x-toolbar .x-btn-pressed .x-btn-ml{
+	background-position: -12px -24px;
+}
+.x-toolbar .x-btn-click .x-btn-mr, .x-toolbar .x-btn-menu-active .x-btn-mr, .x-toolbar .x-btn-pressed .x-btn-mr{
+	background-position: -15px -24px;
+}
+
+.x-toolbar .x-btn-click .x-btn-mc, .x-toolbar .x-btn-menu-active .x-btn-mc, .x-toolbar .x-btn-pressed .x-btn-mc{
+	background-position: 0 -3240px;
+}
+.x-toolbar .x-btn-click .x-btn-bl, .x-toolbar .x-btn-menu-active .x-btn-bl, .x-toolbar .x-btn-pressed .x-btn-bl{
+	background-position: -12px -3px;
+}
+.x-toolbar .x-btn-click .x-btn-br, .x-toolbar .x-btn-menu-active .x-toolbar .x-btn-br, .x-toolbar .x-btn-pressed .x-btn-br{
+	background-position: -15px -3px;
+}
+.x-toolbar .x-btn-click .x-btn-bc, .x-toolbar .x-btn-menu-active .x-btn-bc, .x-toolbar .x-btn-pressed .x-btn-bc{
+	background-position: 0 -21px;
+}
+
+/* Button groups */
+
+.x-btn-group-header {
+    color: #777;
+}
+.x-btn-group-tc {
+	background-image:url(../images/gray/button/group-tb.gif);
+}
+.x-btn-group-tl {
+	background-image:url(../images/gray/button/group-cs.gif);
+}
+.x-btn-group-tr {
+	background-image:url(../images/gray/button/group-cs.gif);
+}
+.x-btn-group-bc {
+	background-image:url(../images/gray/button/group-tb.gif);
+}
+.x-btn-group-bl {
+	background-image:url(../images/gray/button/group-cs.gif);
+}
+.x-btn-group-br {
+	background-image:url(../images/gray/button/group-cs.gif);
+}
+.x-btn-group-ml {
+	background-image:url(../images/gray/button/group-lr.gif);
+}
+.x-btn-group-mr {
+	background-image:url(../images/gray/button/group-lr.gif);
+}
+.x-btn-group-notitle .x-btn-group-tc {
+	background-image:url(../images/gray/button/group-tb.gif);
+}
+
+/* menu */
+
+.x-menu {
+    border-color:#aaa;
+}
+
 /* Layout classes */
 
 .x-border-layout-ct {
@@ -157,7 +284,7 @@
 
 .x-toolbar{
 	border-color:#d0d0d0;
-    background:#f0f4f5 url(../images/gray/toolbar/bg.gif) repeat-x top left;
+    background:#eee url(../images/gray/toolbar/gray-bg.gif) repeat-x top left;
 }
 .x-toolbar button {
     color:#444;
@@ -168,28 +295,9 @@
 .x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button {
     background-image:url(../images/gray/toolbar/btn-arrow.gif);
 }
-.x-toolbar .x-btn-over .x-btn-left{
-	background-image:url(../images/gray/toolbar/tb-btn-sprite.gif);
-}
-.x-toolbar .x-btn-over .x-btn-right{
-	background-image:url(../images/gray/toolbar/tb-btn-sprite.gif);
-}
-.x-toolbar .x-btn-over .x-btn-center{
-	background-image:url(../images/gray/toolbar/tb-btn-sprite.gif);
-}
 .x-toolbar .x-btn-over button {
     color:#111;
 }
-.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
-	background-image:url(../images/gray/toolbar/tb-btn-sprite.gif);
-}
-.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
-	background-image:url(../images/gray/toolbar/tb-btn-sprite.gif);
-}
-
-.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
-	background-image:url(../images/gray/toolbar/tb-btn-sprite.gif);
-}
 .x-toolbar .xtb-sep {
 	background-image: url(../images/default/grid/grid-split.gif);
 }

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/default/button/btn.gif
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/default/panel/tool-sprites.gif
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/default/panel/tools-sprites-trans.gif
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/default/window/left-corners.png
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/default/window/left-right.png
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/default/window/right-corners.png
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/default/window/top-bottom.png
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/gray/button/group-cs.gif
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/gray/panel/corners-sprite.gif
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/gray/panel/left-right.gif
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/gray/panel/top-bottom.gif
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/resources/images/gray/toolbar/gray-bg.gif
===================================================================
(Binary files differ)

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/Ext.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/Ext.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/Ext.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -478,7 +478,7 @@
          * @return {Number} Value, if numeric, else defaultValue
          */
         num : function(v, defaultValue){
-            if(typeof v != 'number'){
+            if(typeof v != 'number' || isNaN(v)){
                 return defaultValue;
             }
             return v;
@@ -754,7 +754,7 @@
 })();
 
 Ext.ns("Ext", "Ext.util", "Ext.grid", "Ext.dd", "Ext.tree", "Ext.data",
-                "Ext.form", "Ext.menu", "Ext.state", "Ext.lib", "Ext.layout", "Ext.app", "Ext.ux", "Ext.chart");
+                "Ext.form", "Ext.menu", "Ext.state", "Ext.lib", "Ext.layout", "Ext.app", "Ext.ux", "Ext.chart", "Ext.direct");
 
 
 /**

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/Direct.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/Direct.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/Direct.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -6,9 +6,17 @@
  * http://extjs.com/license
  */
 
+/*
+ * Ext JS Library 3.0 Pre-alpha
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@xxxxxxxxx
+ * 
+ * http://extjs.com/license
+ */
+
 (function(){
     var transactions = {}, TID = 0, impl, d, pollStartTimer = 0,
-            callBuffer = [], callTask, providers = {};
+            callBuffer = [], callTask;
 
     var get = function(id){
         return transactions[id] || {};
@@ -106,17 +114,16 @@
     }
 
     var cb = function(opt, success, xhr){
+        if(opt && opt.poll){
+            Ext.Direct.fireEvent('poll', xhr, success);
+        }
         if(success){
             var data = null;
             if(!Ext.isEmpty(xhr.responseText)){
-                if(typeof xhr.responseText == 'object'){
-                    data = xhr.responseText;
-                }else{
-                    try{
-                        data = Ext.decode(xhr.responseText);
-                    } catch(e){
-                        return handleException(opt, xhr, d.exceptions.PARSE);
-                    }
+                try{
+                    data = Ext.decode(xhr.responseText);
+                } catch(e){
+                    return handleException(opt, xhr, d.exceptions.PARSE);
                 }
                 if(Ext.isArray(data)){
                     for(var i = 0, len = data.length; i < len; i++){
@@ -253,20 +260,6 @@
         return f;        
     }
 
-    var onProviderData = function(p, e){
-        switch(e.format){
-            case 'string':
-                cb({}, true, {responseText: e.data});
-                break;
-            default:
-                cb({}, true, e.data);
-        }
-    }
-
-    var onProviderException = function(p, e){
-        handleException({}, e.data, e.type);
-    }
-
     impl = Ext.extend(Ext.util.Observable, {
         exceptions: {
             TRANSPORT: 'xhr',
@@ -277,7 +270,7 @@
 
         constructor: function(){
             impl.superclass.constructor.call(this);
-            this.addEvents('beforecall', 'call', 'beforeevent', 'event', 'exception');
+            this.addEvents('beforecall', 'call', 'beforeevent', 'event', 'exception', 'connect', 'disconnect', 'pollstart', 'pollstop');
         },
 
         defineAPI : function(data){
@@ -293,7 +286,6 @@
             }
         },
 
-        /*
         startPoll : function(){
             clearTimeout(pollStartTimer);
             if(!this.poller){
@@ -321,16 +313,12 @@
                 delete this.poller;
                 Ext.Direct.fireEvent('stoppolling');
             }
-        },*/
+        },
 
         inject : function(stringData, opt){
             cb(opt || {}, true, {responseText: stringData});
         },
 
-        injectRaw : function(opt, success, xhr){
-            cb(opt, success, xhr);
-        },
-
         injectTransaction : function(callback){
             var t = {
                 tid: ++TID,
@@ -342,7 +330,6 @@
             return t;
         },
 
-        /*
         startStreaming : function(startKeepAlive){
             pollStartTimer = this.startPoll.defer(10000, this);
             if(startKeepAlive === true){
@@ -367,47 +354,17 @@
                 scope: this
             });
             }).defer(100, this);
-        },*/
-
-        //autoReconnect: true,
-        //pollInterval: 3000,
-        //keepAliveInterval: 60000,
-        //pollUrlFragment: '/poll',
-        //pingUrlFragment: '/ping',
-
-        addProvider : function(provider){
-            if(!provider.events){
-                provider = new d.PROVIDERS[provider.type](provider);
-            }
-            if(!provider.isConnected()){
-                provider.connect();
-            }
-            provider.id = provider.id || Ext.id;
-            providers[provider.id] = provider;
-
-            provider.on('data', onProviderData);
-            provider.on('exception', onProviderException);
-
-            return provider;
         },
 
-        getProvider : function(id){
-            return providers[id];
-        },
-
-        removeProvider : function(id){
-            var provider = id.id ? id : providers[id.id];
-            provider.un('data', onProviderData);
-            provider.un('exception', onProviderException);
-            delete providers[provider.id];
-            return provider;
-        },
-
+        autoReconnect: true,
+        pollInterval: 3000,
+        keepAliveInterval: 60000,
+        pollUrlFragment: '/poll',
+        pingUrlFragment: '/ping',
         enableBuffer: 10
     });
     Ext.Direct = d = new impl();
 
-    d.PROVIDERS = {};
 
     var reconnId = 0;
     var retryId = 0;

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/DirectProxy.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/DirectProxy.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/DirectProxy.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -19,7 +19,7 @@
 	paramOrder: undefined,
 	paramsAsHash: true,
 	directFn: undefined,
-    
+
     load: function(params, reader, cb, scope, arg){
 		if(this.fireEvent("beforeload", this, params) !== false) {
 			var args = [];
@@ -32,7 +32,7 @@
 			}
 			args.push({
 				callback: function(result, e){
-					if(!e.success){
+					if(!e.status){
 						this.fireEvent("loadexception", this, e, result);
             			cb.call(scope, null, arg, false);
             			return;

Modified: mickael/trunk/ext/v3.0.0-a1/source/ext.jsb
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/ext.jsb	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/ext.jsb	2008-11-21 14:33:19 UTC (rev 31)
@@ -29,8 +29,6 @@
     <include name="core\Fx.js" />
     <include name="core\CompositeElement.js" />
     <include name="data\Connection.js" />
-    <include name="data\Direct.js" />
-    <include name="data\DirectProvider.js" />
     <include name="core\UpdateManager.js" />
     <include name="util\Date.js" />
     <include name="util\DelayedTask.js" />
@@ -61,17 +59,24 @@
     <include name="data\SimpleStore.js" />
     <include name="data\JsonStore.js" />
     <include name="data\XmlStore.js" />
-    <include name="data\DirectStore.js" />
     <include name="data\DataField.js" />
     <include name="data\DataReader.js" />
     <include name="data\DataProxy.js" />
     <include name="data\MemoryProxy.js" />
     <include name="data\HttpProxy.js" />
     <include name="data\ScriptTagProxy.js" />
-    <include name="data\DirectProxy.js" />
     <include name="data\JsonReader.js" />
     <include name="data\XmlReader.js" />
     <include name="data\ArrayReader.js" />
+    <include name="direct\Direct.js" />
+    <include name="direct\Transaction.js" />
+    <include name="direct\Event.js" />
+    <include name="direct\Provider.js" />
+    <include name="direct\JsonProvider.js" />
+    <include name="direct\PollingProvider.js" />
+    <include name="direct\RemotingProvider.js" />
+    <include name="data\DirectProxy.js" />
+    <include name="data\DirectStore.js" />
     <include name="data\Tree.js" />
     <include name="data\GroupingStore.js" />
     <include name="widgets\Component.js" />
@@ -149,6 +154,7 @@
     <include name="widgets\form\TextArea.js" />
     <include name="widgets\form\NumberField.js" />
     <include name="widgets\form\DateField.js" />
+    <include name="widgets\form\DisplayField.js" />
     <include name="widgets\form\Combo.js" />
     <include name="widgets\form\Checkbox.js" />
     <include name="widgets\form\CheckboxGroup.js" />
@@ -553,6 +559,8 @@
   <file name="widgets\ListView.js" path="widgets" />
   <file name="ext.jsb" path="" />
   <file name="license.txt" path="" />
+  <file name="data\Direct.js" path="data" />
+  <file name="data\DirectProvider.js" path="data" />
   <file name="adapter\ext-base.js" path="adapter" />
   <file name="adapter\jquery-bridge.js" path="adapter" />
   <file name="adapter\prototype-bridge.js" path="adapter" />
@@ -577,8 +585,6 @@
   <file name="data\DataField.js" path="data" />
   <file name="data\DataProxy.js" path="data" />
   <file name="data\DataReader.js" path="data" />
-  <file name="data\Direct.js" path="data" />
-  <file name="data\DirectProvider.js" path="data" />
   <file name="data\DirectProxy.js" path="data" />
   <file name="data\DirectStore.js" path="data" />
   <file name="data\GroupingStore.js" path="data" />
@@ -604,6 +610,13 @@
   <file name="dd\Registry.js" path="dd" />
   <file name="dd\ScrollManager.js" path="dd" />
   <file name="dd\StatusProxy.js" path="dd" />
+  <file name="direct\Direct.js" path="direct" />
+  <file name="direct\Event.js" path="direct" />
+  <file name="direct\JsonProvider.js" path="direct" />
+  <file name="direct\PollingProvider.js" path="direct" />
+  <file name="direct\Provider.js" path="direct" />
+  <file name="direct\RemotingProvider.js" path="direct" />
+  <file name="direct\Transaction.js" path="direct" />
   <file name="locale\ext-lang-af.js" path="locale" />
   <file name="locale\ext-lang-bg.js" path="locale" />
   <file name="locale\ext-lang-ca.js" path="locale" />
@@ -676,6 +689,7 @@
   <file name="widgets\form\CheckboxGroup.js" path="widgets\form" />
   <file name="widgets\form\Combo.js" path="widgets\form" />
   <file name="widgets\form\DateField.js" path="widgets\form" />
+  <file name="widgets\form\DisplayField.js" path="widgets\form" />
   <file name="widgets\form\Field.js" path="widgets\form" />
   <file name="widgets\form\FieldSet.js" path="widgets\form" />
   <file name="widgets\form\Form.js" path="widgets\form" />

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/Date.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/Date.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/Date.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -108,6 +108,18 @@
  */
 
 (function() {
+
+// create private copy of Ext's String.format() method
+// - to remove unnecessary dependency
+// - to resolve namespace conflict with M$-Ajax's implementation
+function xf(format) {
+    var args = Array.prototype.slice.call(arguments, 1);
+    return format.replace(/\{(\d+)\}/g, function(m, i) {
+        return args[i];
+    });
+}
+
+
 // private
 Date.formatCodeToRegex = function(character, currentGroup) {
     // Note: currentGroup - position in regex result array (see notes for Date.parseCodes below)
@@ -119,7 +131,7 @@
     }
 
     return p? Ext.applyIf({
-      c: p.c? String.format(p.c, currentGroup || "{0}") : p.c
+      c: p.c? xf(p.c, currentGroup || "{0}") : p.c
     }, p) : {
         g:0,
         c:null,
@@ -446,48 +458,19 @@
     },
 
     // private
-    createParser : function(format) {
-        var funcName = "parse" + Date.parseFunctions.count++,
-            regexNum = Date.parseRegexes.length,
-            currentGroup = 1,
-            code = [
-                "Date." + funcName + " = function(input){",
-                    "var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;",
-                    "input = String(input);",
-                    "d = new Date();",
-                    "y = d.getFullYear();",
-                    "m = d.getMonth();",
-                    "d = d.getDate();",
-                    "var results = input.match(Date.parseRegexes[" + regexNum + "]);",
-                    "if (results && results.length > 0) {\n"
-            ].join('\n'),
-            regex = "",
-            special = false,
-            ch = '';
-
-        Date.parseFunctions[format] = funcName;
-
-        for (var i = 0; i < format.length; ++i) {
-            ch = format.charAt(i);
-            if (!special && ch == "\\") {
-                special = true;
-            }
-            else if (special) {
-                special = false;
-                regex += String.escape(ch);
-            }
-            else {
-                var obj = Date.formatCodeToRegex(ch, currentGroup);
-                currentGroup += obj.g;
-                regex += obj.s;
-                if (obj.g && obj.c) {
-                    code += obj.c;
-                }
-            }
-        }
-
-        code += [
-                    "if (u){",
+    createParser : function() {
+        var code = [
+            "Date.{0} = function(input){",
+                "var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;",
+                "input = String(input);",
+                "d = new Date();",
+                "y = d.getFullYear();",
+                "m = d.getMonth();",
+                "d = d.getDate();",
+                "var results = input.match(Date.parseRegexes[{1}]);",
+                "if(results && results.length > 0){",
+                    "{2}",
+                    "if(u){",
                         "v = new Date(u * 1000);", // give top priority to UNIX time
                     "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){",
                         "v = new Date(y, m, d, h, i, s, ms);",
@@ -511,10 +494,41 @@
             "}"
         ].join('\n');
 
-        Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$", "i");
-        eval(code);
-    },
+        return function(format) {
+            var funcName = "parse" + Date.parseFunctions.count++,
+                regexNum = Date.parseRegexes.length,
+                currentGroup = 1,
+                calc = "",
+                regex = "",
+                special = false,
+                ch = "";
 
+            Date.parseFunctions[format] = funcName;
+
+            for (var i = 0; i < format.length; ++i) {
+                ch = format.charAt(i);
+                if (!special && ch == "\\") {
+                    special = true;
+                }
+                else if (special) {
+                    special = false;
+                    regex += String.escape(ch);
+                }
+                else {
+                    var obj = $f(ch, currentGroup);
+                    currentGroup += obj.g;
+                    regex += obj.s;
+                    if (obj.g && obj.c) {
+                        calc += obj.c;
+                    }
+                }
+            }
+
+            Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$", "i");
+            eval(xf(code, funcName, regexNum, calc));
+        }
+    }(),
+
     // private
     parseCodes : {
         /*
@@ -566,7 +580,7 @@
         z: {
             g:0,
             c:null,
-            s:"(?:\\d{1,3}" // day of the year (0 - 364 (365 in leap years))
+            s:"(?:\\d{1,3})" // day of the year (0 - 364 (365 in leap years))
         },
         W: {
             g:0,
@@ -810,7 +824,7 @@
         // adapted from http://www.merlyn.demon.co.uk/weekcalc.htm
         var ms1d = 864e5, // milliseconds in a day
             ms7d = 7 * ms1d; // milliseconds in a week
-            
+
         return function() { // return a closure so constants get calculated only once
             var DC3 = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate() + 3) / ms1d, // an Absolute Day Number
                 AWN = Math.floor(DC3 / 7), // an Absolute Week Number

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/History.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/History.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/History.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -87,7 +87,7 @@
     }
 
     function startUp() {
-        currentToken = hiddenField.value;
+        currentToken = hiddenField.value ? hiddenField.value : getHash();
 
         if (Ext.isIE) {
             checkIFrame();

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/MixedCollection.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/MixedCollection.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/MixedCollection.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -554,7 +554,7 @@
     },
 
     /**
-     * Creates a duplicate of this collection
+     * Creates a shallow copy of this collection
      * @return {MixedCollection}
      */
     clone : function(){

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/ComponentMgr.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/ComponentMgr.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/ComponentMgr.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -95,6 +95,7 @@
          * @param config {Object} A configuration object for the Component you wish to create.
          * @param defaultType {Constructor} The constructor to provide the default Component type if
          * the config object does not contain an xtype. (Optional if the config contains an xtype).
+         * @return {Ext.Component} The newly instantiated Component.
          */
         create : function(config, defaultType){
             return config.render ? config : new types[config.xtype || defaultType](config);

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Editor.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Editor.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Editor.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -12,18 +12,27 @@
  * A base editor field that handles displaying/hiding on demand and has some built-in sizing and event handling logic.
  * @constructor
  * Create a new Editor
- * @param {Ext.form.Field} field The Field object (or descendant)
  * @param {Object} config The config object
  */
 Ext.Editor = function(field, config){
-    this.field = field;
+    if(field.field){
+        this.field = Ext.create(field.field, 'textfield');
+        config = Ext.apply({}, field); // copy so we don't disturb original config
+        delete config.field;
+    }else{
+        this.field = field;
+    }
     Ext.Editor.superclass.constructor.call(this, config);
 };
 
 Ext.extend(Ext.Editor, Ext.Component, {
     /**
+    * @cfg {Ext.form.Field} field
+    * The Field object (or descendant) or config object for field
+    */
+    /**
      * @cfg {Boolean/String} autoSize
-     * True for the editor to automatically adopt the size of the underlying field, "width" to adopt the width only,
+     * True for the editor to automatically adopt the size of the element being edited, "width" to adopt the width only,
      * or "height" to adopt the height only (defaults to false)
      */
     /**
@@ -141,10 +150,13 @@
             cls: "x-editor",
             parentEl : ct,
             shim : this.shim,
-            shadowOffset:4,
+            shadowOffset: this.shadowOffset || 4,
             id: this.id,
             constrain: this.constrain
         });
+        if(this.zIndex){
+            this.el.setZIndex(this.zIndex);
+        }
         this.el.setStyle("overflow", Ext.isGecko ? "auto" : "hidden");
         if(this.field.msgTarget != 'title'){
             this.field.msgTarget = 'qtip';

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Layer.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Layer.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Layer.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -6,448 +6,448 @@
  * http://extjs.com/license
  */
 
-/**
- * @class Ext.Layer
- * @extends Ext.Element
- * An extended {@link Ext.Element} object that supports a shadow and shim, constrain to viewport and
- * automatic maintaining of shadow/shim positions.
- * @cfg {Boolean} shim False to disable the iframe shim in browsers which need one (defaults to true)
- * @cfg {String/Boolean} shadow True to create a shadow element with default class "x-layer-shadow", or
- * you can pass a string with a CSS class name. False turns off the shadow.
- * @cfg {Object} dh DomHelper object config to create element with (defaults to {tag: "div", cls: "x-layer"}).
- * @cfg {Boolean} constrain False to disable constrain to viewport (defaults to true)
- * @cfg {String} cls CSS class to add to the element
- * @cfg {Number} zindex Starting z-index (defaults to 11000)
- * @cfg {Number} shadowOffset Number of pixels to offset the shadow (defaults to 3)
- * @constructor
- * @param {Object} config An object with config options.
- * @param {String/HTMLElement} existingEl (optional) Uses an existing DOM element. If the element is not found it creates it.
- */
-(function(){ 
-Ext.Layer = function(config, existingEl){
-    config = config || {};
-    var dh = Ext.DomHelper;
-    var cp = config.parentEl, pel = cp ? Ext.getDom(cp) : document.body;
-    if(existingEl){
-        this.dom = Ext.getDom(existingEl);
-    }
-    if(!this.dom){
-        var o = config.dh || {tag: "div", cls: "x-layer"};
-        this.dom = dh.append(pel, o);
-    }
-    if(config.cls){
-        this.addClass(config.cls);
-    }
-    this.constrain = config.constrain !== false;
-    this.visibilityMode = Ext.Element.VISIBILITY;
-    if(config.id){
-        this.id = this.dom.id = config.id;
-    }else{
-        this.id = Ext.id(this.dom);
-    }
-    this.zindex = config.zindex || this.getZIndex();
-    this.position("absolute", this.zindex);
-    if(config.shadow){
-        this.shadowOffset = config.shadowOffset || 4;
-        this.shadow = new Ext.Shadow({
-            offset : this.shadowOffset,
-            mode : config.shadow
-        });
-    }else{
-        this.shadowOffset = 0;
-    }
-    this.useShim = config.shim !== false && Ext.useShims;
-    this.useDisplay = config.useDisplay;
-    this.hide();
-};
-
-var supr = Ext.Element.prototype;
-
-// shims are shared among layer to keep from having 100 iframes
-var shims = [];
-
-Ext.extend(Ext.Layer, Ext.Element, {
-
-    getZIndex : function(){
-        return this.zindex || parseInt(this.getStyle("z-index"), 10) || 11000;
-    },
-
-    getShim : function(){
-        if(!this.useShim){
-            return null;
-        }
-        if(this.shim){
-            return this.shim;
-        }
-        var shim = shims.shift();
-        if(!shim){
-            shim = this.createShim();
-            shim.enableDisplayMode('block');
-            shim.dom.style.display = 'none';
-            shim.dom.style.visibility = 'visible';
-        }
-        var pn = this.dom.parentNode;
-        if(shim.dom.parentNode != pn){
-            pn.insertBefore(shim.dom, this.dom);
-        }
-        shim.setStyle('z-index', this.getZIndex()-2);
-        this.shim = shim;
-        return shim;
-    },
-
-    hideShim : function(){
-        if(this.shim){
-            this.shim.setDisplayed(false);
-            shims.push(this.shim);
-            delete this.shim;
-        }
-    },
-
-    disableShadow : function(){
-        if(this.shadow){
-            this.shadowDisabled = true;
-            this.shadow.hide();
-            this.lastShadowOffset = this.shadowOffset;
-            this.shadowOffset = 0;
-        }
-    },
-
-    enableShadow : function(show){
-        if(this.shadow){
-            this.shadowDisabled = false;
-            this.shadowOffset = this.lastShadowOffset;
-            delete this.lastShadowOffset;
-            if(show){
-                this.sync(true);
-            }
-        }
-    },
-
-    // private
-    // this code can execute repeatedly in milliseconds (i.e. during a drag) so
-    // code size was sacrificed for effeciency (e.g. no getBox/setBox, no XY calls)
-    sync : function(doShow){
-        var sw = this.shadow;
-        if(!this.updating && this.isVisible() && (sw || this.useShim)){
-            var sh = this.getShim();
-
-            var w = this.getWidth(),
-                h = this.getHeight();
-
-            var l = this.getLeft(true),
-                t = this.getTop(true);
-
-            if(sw && !this.shadowDisabled){
-                if(doShow && !sw.isVisible()){
-                    sw.show(this);
-                }else{
-                    sw.realign(l, t, w, h);
-                }
-                if(sh){
-                    if(doShow){
-                       sh.show();
-                    }
-                    // fit the shim behind the shadow, so it is shimmed too
-                    var a = sw.adjusts, s = sh.dom.style;
-                    s.left = (Math.min(l, l+a.l))+"px";
-                    s.top = (Math.min(t, t+a.t))+"px";
-                    s.width = (w+a.w)+"px";
-                    s.height = (h+a.h)+"px";
-                }
-            }else if(sh){
-                if(doShow){
-                   sh.show();
-                }
-                sh.setSize(w, h);
-                sh.setLeftTop(l, t);
-            }
-            
-        }
-    },
-
-    // private
-    destroy : function(){
-        this.hideShim();
-        if(this.shadow){
-            this.shadow.hide();
-        }
-        this.removeAllListeners();
-        Ext.removeNode(this.dom);
-        Ext.Element.uncache(this.id);
-    },
-
-    remove : function(){
-        this.destroy();
-    },
-
-    // private
-    beginUpdate : function(){
-        this.updating = true;
-    },
-
-    // private
-    endUpdate : function(){
-        this.updating = false;
-        this.sync(true);
-    },
-
-    // private
-    hideUnders : function(negOffset){
-        if(this.shadow){
-            this.shadow.hide();
-        }
-        this.hideShim();
-    },
-
-    // private
-    constrainXY : function(){
-        if(this.constrain){
-            var vw = Ext.lib.Dom.getViewWidth(),
-                vh = Ext.lib.Dom.getViewHeight();
-            var s = Ext.getDoc().getScroll();
-
-            var xy = this.getXY();
-            var x = xy[0], y = xy[1];
-            var so = this.shadowOffset;
-            var w = this.dom.offsetWidth+so, h = this.dom.offsetHeight+so;
-            // only move it if it needs it
-            var moved = false;
-            // first validate right/bottom
-            if((x + w) > vw+s.left){
-                x = vw - w - so;
-                moved = true;
-            }
-            if((y + h) > vh+s.top){
-                y = vh - h - so;
-                moved = true;
-            }
-            // then make sure top/left isn't negative
-            if(x < s.left){
-                x = s.left;
-                moved = true;
-            }
-            if(y < s.top){
-                y = s.top;
-                moved = true;
-            }
-            if(moved){
-                if(this.avoidY){
-                    var ay = this.avoidY;
-                    if(y <= ay && (y+h) >= ay){
-                        y = ay-h-5;   
-                    }
-                }
-                xy = [x, y];
-                this.storeXY(xy);
-                supr.setXY.call(this, xy);
-                this.sync();
-            }
-        }
-    },
-
-    isVisible : function(){
-        return this.visible;    
-    },
-
-    // private
-    showAction : function(){
-        this.visible = true; // track visibility to prevent getStyle calls
-        if(this.useDisplay === true){
-            this.setDisplayed("");
-        }else if(this.lastXY){
-            supr.setXY.call(this, this.lastXY);
-        }else if(this.lastLT){
-            supr.setLeftTop.call(this, this.lastLT[0], this.lastLT[1]);
-        }
-    },
-
-    // private
-    hideAction : function(){
-        this.visible = false;
-        if(this.useDisplay === true){
-            this.setDisplayed(false);
-        }else{
-            this.setLeftTop(-10000,-10000);
-        }
-    },
-
-    // overridden Element method
-    setVisible : function(v, a, d, c, e){
-        if(v){
-            this.showAction();
-        }
-        if(a && v){
-            var cb = function(){
-                this.sync(true);
-                if(c){
-                    c();
-                }
-            }.createDelegate(this);
-            supr.setVisible.call(this, true, true, d, cb, e);
-        }else{
-            if(!v){
-                this.hideUnders(true);
-            }
-            var cb = c;
-            if(a){
-                cb = function(){
-                    this.hideAction();
-                    if(c){
-                        c();
-                    }
-                }.createDelegate(this);
-            }
-            supr.setVisible.call(this, v, a, d, cb, e);
-            if(v){
-                this.sync(true);
-            }else if(!a){
-                this.hideAction();
-            }
-        }
-    },
-
-    storeXY : function(xy){
-        delete this.lastLT;
-        this.lastXY = xy;
-    },
-
-    storeLeftTop : function(left, top){
-        delete this.lastXY;
-        this.lastLT = [left, top];
-    },
-
-    // private
-    beforeFx : function(){
-        this.beforeAction();
-        return Ext.Layer.superclass.beforeFx.apply(this, arguments);
-    },
-
-    // private
-    afterFx : function(){
-        Ext.Layer.superclass.afterFx.apply(this, arguments);
-        this.sync(this.isVisible());
-    },
-
-    // private
-    beforeAction : function(){
-        if(!this.updating && this.shadow){
-            this.shadow.hide();
-        }
-    },
-
-    // overridden Element method
-    setLeft : function(left){
-        this.storeLeftTop(left, this.getTop(true));
-        supr.setLeft.apply(this, arguments);
-        this.sync();
-    },
-
-    setTop : function(top){
-        this.storeLeftTop(this.getLeft(true), top);
-        supr.setTop.apply(this, arguments);
-        this.sync();
-    },
-
-    setLeftTop : function(left, top){
-        this.storeLeftTop(left, top);
-        supr.setLeftTop.apply(this, arguments);
-        this.sync();
-    },
-
-    setXY : function(xy, a, d, c, e){
-        this.fixDisplay();
-        this.beforeAction();
-        this.storeXY(xy);
-        var cb = this.createCB(c);
-        supr.setXY.call(this, xy, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // private
-    createCB : function(c){
-        var el = this;
-        return function(){
-            el.constrainXY();
-            el.sync(true);
-            if(c){
-                c();
-            }
-        };
-    },
-
-    // overridden Element method
-    setX : function(x, a, d, c, e){
-        this.setXY([x, this.getY()], a, d, c, e);
-    },
-
-    // overridden Element method
-    setY : function(y, a, d, c, e){
-        this.setXY([this.getX(), y], a, d, c, e);
-    },
-
-    // overridden Element method
-    setSize : function(w, h, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        supr.setSize.call(this, w, h, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // overridden Element method
-    setWidth : function(w, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        supr.setWidth.call(this, w, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // overridden Element method
-    setHeight : function(h, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        supr.setHeight.call(this, h, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // overridden Element method
-    setBounds : function(x, y, w, h, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        if(!a){
-            this.storeXY([x, y]);
-            supr.setXY.call(this, [x, y]);
-            supr.setSize.call(this, w, h, a, d, cb, e);
-            cb();
-        }else{
-            supr.setBounds.call(this, x, y, w, h, a, d, cb, e);
-        }
-        return this;
-    },
-    
-    /**
-     * Sets the z-index of this layer and adjusts any shadow and shim z-indexes. The layer z-index is automatically
-     * incremented by two more than the value passed in so that it always shows above any shadow or shim (the shadow
-     * element, if any, will be assigned z-index + 1, and the shim element, if any, will be assigned the unmodified z-index).
-     * @param {Number} zindex The new z-index to set
-     * @return {this} The Layer
-     */
-    setZIndex : function(zindex){
-        this.zindex = zindex;
-        this.setStyle("z-index", zindex + 2);
-        if(this.shadow){
-            this.shadow.setZIndex(zindex + 1);
-        }
-        if(this.shim){
-            this.shim.setStyle("z-index", zindex);
-        }
-    }
-});
+/**
+ * @class Ext.Layer
+ * @extends Ext.Element
+ * An extended {@link Ext.Element} object that supports a shadow and shim, constrain to viewport and
+ * automatic maintaining of shadow/shim positions.
+ * @cfg {Boolean} shim False to disable the iframe shim in browsers which need one (defaults to true)
+ * @cfg {String/Boolean} shadow True to automatically create an {@link Ext.Shadow}, or a string indicating the
+ * shadow's display {@link Ext.Shadow#mode}. False to disable the shadow. (defaults to false)
+ * @cfg {Object} dh DomHelper object config to create element with (defaults to {tag: "div", cls: "x-layer"}).
+ * @cfg {Boolean} constrain False to disable constrain to viewport (defaults to true)
+ * @cfg {String} cls CSS class to add to the element
+ * @cfg {Number} zindex Starting z-index (defaults to 11000)
+ * @cfg {Number} shadowOffset Number of pixels to offset the shadow (defaults to 3)
+ * @constructor
+ * @param {Object} config An object with config options.
+ * @param {String/HTMLElement} existingEl (optional) Uses an existing DOM element. If the element is not found it creates it.
+ */
+(function(){
+Ext.Layer = function(config, existingEl){
+    config = config || {};
+    var dh = Ext.DomHelper;
+    var cp = config.parentEl, pel = cp ? Ext.getDom(cp) : document.body;
+    if(existingEl){
+        this.dom = Ext.getDom(existingEl);
+    }
+    if(!this.dom){
+        var o = config.dh || {tag: "div", cls: "x-layer"};
+        this.dom = dh.append(pel, o);
+    }
+    if(config.cls){
+        this.addClass(config.cls);
+    }
+    this.constrain = config.constrain !== false;
+    this.visibilityMode = Ext.Element.VISIBILITY;
+    if(config.id){
+        this.id = this.dom.id = config.id;
+    }else{
+        this.id = Ext.id(this.dom);
+    }
+    this.zindex = config.zindex || this.getZIndex();
+    this.position("absolute", this.zindex);
+    if(config.shadow){
+        this.shadowOffset = config.shadowOffset || 4;
+        this.shadow = new Ext.Shadow({
+            offset : this.shadowOffset,
+            mode : config.shadow
+        });
+    }else{
+        this.shadowOffset = 0;
+    }
+    this.useShim = config.shim !== false && Ext.useShims;
+    this.useDisplay = config.useDisplay;
+    this.hide();
+};
+
+var supr = Ext.Element.prototype;
+
+// shims are shared among layer to keep from having 100 iframes
+var shims = [];
+
+Ext.extend(Ext.Layer, Ext.Element, {
+
+    getZIndex : function(){
+        return this.zindex || parseInt(this.getStyle("z-index"), 10) || 11000;
+    },
+
+    getShim : function(){
+        if(!this.useShim){
+            return null;
+        }
+        if(this.shim){
+            return this.shim;
+        }
+        var shim = shims.shift();
+        if(!shim){
+            shim = this.createShim();
+            shim.enableDisplayMode('block');
+            shim.dom.style.display = 'none';
+            shim.dom.style.visibility = 'visible';
+        }
+        var pn = this.dom.parentNode;
+        if(shim.dom.parentNode != pn){
+            pn.insertBefore(shim.dom, this.dom);
+        }
+        shim.setStyle('z-index', this.getZIndex()-2);
+        this.shim = shim;
+        return shim;
+    },
+
+    hideShim : function(){
+        if(this.shim){
+            this.shim.setDisplayed(false);
+            shims.push(this.shim);
+            delete this.shim;
+        }
+    },
+
+    disableShadow : function(){
+        if(this.shadow){
+            this.shadowDisabled = true;
+            this.shadow.hide();
+            this.lastShadowOffset = this.shadowOffset;
+            this.shadowOffset = 0;
+        }
+    },
+
+    enableShadow : function(show){
+        if(this.shadow){
+            this.shadowDisabled = false;
+            this.shadowOffset = this.lastShadowOffset;
+            delete this.lastShadowOffset;
+            if(show){
+                this.sync(true);
+            }
+        }
+    },
+
+    // private
+    // this code can execute repeatedly in milliseconds (i.e. during a drag) so
+    // code size was sacrificed for effeciency (e.g. no getBox/setBox, no XY calls)
+    sync : function(doShow){
+        var sw = this.shadow;
+        if(!this.updating && this.isVisible() && (sw || this.useShim)){
+            var sh = this.getShim();
+
+            var w = this.getWidth(),
+                h = this.getHeight();
+
+            var l = this.getLeft(true),
+                t = this.getTop(true);
+
+            if(sw && !this.shadowDisabled){
+                if(doShow && !sw.isVisible()){
+                    sw.show(this);
+                }else{
+                    sw.realign(l, t, w, h);
+                }
+                if(sh){
+                    if(doShow){
+                       sh.show();
+                    }
+                    // fit the shim behind the shadow, so it is shimmed too
+                    var a = sw.adjusts, s = sh.dom.style;
+                    s.left = (Math.min(l, l+a.l))+"px";
+                    s.top = (Math.min(t, t+a.t))+"px";
+                    s.width = (w+a.w)+"px";
+                    s.height = (h+a.h)+"px";
+                }
+            }else if(sh){
+                if(doShow){
+                   sh.show();
+                }
+                sh.setSize(w, h);
+                sh.setLeftTop(l, t);
+            }
+
+        }
+    },
+
+    // private
+    destroy : function(){
+        this.hideShim();
+        if(this.shadow){
+            this.shadow.hide();
+        }
+        this.removeAllListeners();
+        Ext.removeNode(this.dom);
+        Ext.Element.uncache(this.id);
+    },
+
+    remove : function(){
+        this.destroy();
+    },
+
+    // private
+    beginUpdate : function(){
+        this.updating = true;
+    },
+
+    // private
+    endUpdate : function(){
+        this.updating = false;
+        this.sync(true);
+    },
+
+    // private
+    hideUnders : function(negOffset){
+        if(this.shadow){
+            this.shadow.hide();
+        }
+        this.hideShim();
+    },
+
+    // private
+    constrainXY : function(){
+        if(this.constrain){
+            var vw = Ext.lib.Dom.getViewWidth(),
+                vh = Ext.lib.Dom.getViewHeight();
+            var s = Ext.getDoc().getScroll();
+
+            var xy = this.getXY();
+            var x = xy[0], y = xy[1];
+            var so = this.shadowOffset;
+            var w = this.dom.offsetWidth+so, h = this.dom.offsetHeight+so;
+            // only move it if it needs it
+            var moved = false;
+            // first validate right/bottom
+            if((x + w) > vw+s.left){
+                x = vw - w - so;
+                moved = true;
+            }
+            if((y + h) > vh+s.top){
+                y = vh - h - so;
+                moved = true;
+            }
+            // then make sure top/left isn't negative
+            if(x < s.left){
+                x = s.left;
+                moved = true;
+            }
+            if(y < s.top){
+                y = s.top;
+                moved = true;
+            }
+            if(moved){
+                if(this.avoidY){
+                    var ay = this.avoidY;
+                    if(y <= ay && (y+h) >= ay){
+                        y = ay-h-5;
+                    }
+                }
+                xy = [x, y];
+                this.storeXY(xy);
+                supr.setXY.call(this, xy);
+                this.sync();
+            }
+        }
+    },
+
+    isVisible : function(){
+        return this.visible;
+    },
+
+    // private
+    showAction : function(){
+        this.visible = true; // track visibility to prevent getStyle calls
+        if(this.useDisplay === true){
+            this.setDisplayed("");
+        }else if(this.lastXY){
+            supr.setXY.call(this, this.lastXY);
+        }else if(this.lastLT){
+            supr.setLeftTop.call(this, this.lastLT[0], this.lastLT[1]);
+        }
+    },
+
+    // private
+    hideAction : function(){
+        this.visible = false;
+        if(this.useDisplay === true){
+            this.setDisplayed(false);
+        }else{
+            this.setLeftTop(-10000,-10000);
+        }
+    },
+
+    // overridden Element method
+    setVisible : function(v, a, d, c, e){
+        if(v){
+            this.showAction();
+        }
+        if(a && v){
+            var cb = function(){
+                this.sync(true);
+                if(c){
+                    c();
+                }
+            }.createDelegate(this);
+            supr.setVisible.call(this, true, true, d, cb, e);
+        }else{
+            if(!v){
+                this.hideUnders(true);
+            }
+            var cb = c;
+            if(a){
+                cb = function(){
+                    this.hideAction();
+                    if(c){
+                        c();
+                    }
+                }.createDelegate(this);
+            }
+            supr.setVisible.call(this, v, a, d, cb, e);
+            if(v){
+                this.sync(true);
+            }else if(!a){
+                this.hideAction();
+            }
+        }
+    },
+
+    storeXY : function(xy){
+        delete this.lastLT;
+        this.lastXY = xy;
+    },
+
+    storeLeftTop : function(left, top){
+        delete this.lastXY;
+        this.lastLT = [left, top];
+    },
+
+    // private
+    beforeFx : function(){
+        this.beforeAction();
+        return Ext.Layer.superclass.beforeFx.apply(this, arguments);
+    },
+
+    // private
+    afterFx : function(){
+        Ext.Layer.superclass.afterFx.apply(this, arguments);
+        this.sync(this.isVisible());
+    },
+
+    // private
+    beforeAction : function(){
+        if(!this.updating && this.shadow){
+            this.shadow.hide();
+        }
+    },
+
+    // overridden Element method
+    setLeft : function(left){
+        this.storeLeftTop(left, this.getTop(true));
+        supr.setLeft.apply(this, arguments);
+        this.sync();
+    },
+
+    setTop : function(top){
+        this.storeLeftTop(this.getLeft(true), top);
+        supr.setTop.apply(this, arguments);
+        this.sync();
+    },
+
+    setLeftTop : function(left, top){
+        this.storeLeftTop(left, top);
+        supr.setLeftTop.apply(this, arguments);
+        this.sync();
+    },
+
+    setXY : function(xy, a, d, c, e){
+        this.fixDisplay();
+        this.beforeAction();
+        this.storeXY(xy);
+        var cb = this.createCB(c);
+        supr.setXY.call(this, xy, a, d, cb, e);
+        if(!a){
+            cb();
+        }
+    },
+
+    // private
+    createCB : function(c){
+        var el = this;
+        return function(){
+            el.constrainXY();
+            el.sync(true);
+            if(c){
+                c();
+            }
+        };
+    },
+
+    // overridden Element method
+    setX : function(x, a, d, c, e){
+        this.setXY([x, this.getY()], a, d, c, e);
+    },
+
+    // overridden Element method
+    setY : function(y, a, d, c, e){
+        this.setXY([this.getX(), y], a, d, c, e);
+    },
+
+    // overridden Element method
+    setSize : function(w, h, a, d, c, e){
+        this.beforeAction();
+        var cb = this.createCB(c);
+        supr.setSize.call(this, w, h, a, d, cb, e);
+        if(!a){
+            cb();
+        }
+    },
+
+    // overridden Element method
+    setWidth : function(w, a, d, c, e){
+        this.beforeAction();
+        var cb = this.createCB(c);
+        supr.setWidth.call(this, w, a, d, cb, e);
+        if(!a){
+            cb();
+        }
+    },
+
+    // overridden Element method
+    setHeight : function(h, a, d, c, e){
+        this.beforeAction();
+        var cb = this.createCB(c);
+        supr.setHeight.call(this, h, a, d, cb, e);
+        if(!a){
+            cb();
+        }
+    },
+
+    // overridden Element method
+    setBounds : function(x, y, w, h, a, d, c, e){
+        this.beforeAction();
+        var cb = this.createCB(c);
+        if(!a){
+            this.storeXY([x, y]);
+            supr.setXY.call(this, [x, y]);
+            supr.setSize.call(this, w, h, a, d, cb, e);
+            cb();
+        }else{
+            supr.setBounds.call(this, x, y, w, h, a, d, cb, e);
+        }
+        return this;
+    },
+
+    /**
+     * Sets the z-index of this layer and adjusts any shadow and shim z-indexes. The layer z-index is automatically
+     * incremented by two more than the value passed in so that it always shows above any shadow or shim (the shadow
+     * element, if any, will be assigned z-index + 1, and the shim element, if any, will be assigned the unmodified z-index).
+     * @param {Number} zindex The new z-index to set
+     * @return {this} The Layer
+     */
+    setZIndex : function(zindex){
+        this.zindex = zindex;
+        this.setStyle("z-index", zindex + 2);
+        if(this.shadow){
+            this.shadow.setZIndex(zindex + 1);
+        }
+        if(this.shim){
+            this.shim.setStyle("z-index", zindex);
+        }
+    }
+});
 })();
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Panel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Panel.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Panel.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -782,6 +782,7 @@
             this.fbar.toolbarCls = 'x-panel-fbar';
 
             var bct = this.footer.createChild({cls: 'x-panel-btns x-panel-btns-'+this.buttonAlign});
+            this.fbar.ownerCt = this;
             this.fbar.render(bct);
             bct.createChild({cls:'x-clear'});
         }
@@ -932,6 +933,19 @@
         }
     },
 
+    doLayout : function(shallow){
+        Ext.Panel.superclass.doLayout.call(this, shallow);
+        if(this.topToolbar){
+            this.topToolbar.doLayout();
+        }
+        if(this.bottomToolbar){
+            this.bottomToolbar.doLayout();
+        }
+        if(this.fbar){
+            this.fbar.doLayout();
+        }
+    },
+
     // private
     onShow : function(){
         if(this.floating){
@@ -1168,7 +1182,22 @@
         if(w !== undefined || h !== undefined){
             if(!this.collapsed){
                 if(typeof w == 'number'){
-                    w = this.adjustBodyWidth(w - this.getFrameWidth());
+					w = this.adjustBodyWidth(w - this.getFrameWidth());
+                    if(this.tbar){
+	                    this.tbar.setWidth(w);
+	                    if(this.topToolbar){
+	                        this.topToolbar.setSize(w);
+	                    }
+	                }
+					if(this.bbar){
+	                    this.bbar.setWidth(w);
+	                    if(this.bottomToolbar){
+	                        this.bottomToolbar.setSize(w);
+	                    }
+	                }
+					if(this.fbar){
+	                    this.fbar.setSize(w - this.fbar.container.getFrameWidth('lr'));
+	                }
                     this.body.setWidth(w);
                 }else if(w == 'auto'){
                     this.body.setWidth(w);
@@ -1176,24 +1205,11 @@
 
                 if(typeof h == 'number'){
                     h = this.adjustBodyHeight(h - this.getFrameHeight());
-                    this.body.setHeight(h);
+				    this.body.setHeight(h);
                 }else if(h == 'auto'){
                     this.body.setHeight(h);
                 }
 
-                if(this.tbar){
-                    this.tbar.setWidth(w);
-                    if(this.topToolbar){
-                        this.topToolbar.setSize(w);
-                    }
-                }
-                if(this.bbar){
-                    this.bbar.setWidth(w);
-                    if(this.bottomToolbar){
-                        this.bottomToolbar.setSize(w);
-                    }
-                }
-                
                 if(this.disabled && this.el._mask){
                     this.el._mask.setSize(this.el.dom.clientWidth, this.el.getHeight());
                 }

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Window.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Window.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Window.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -242,6 +242,7 @@
             this.mask = this.container.createChild({cls:"ext-el-mask"}, this.el.dom);
             this.mask.enableDisplayMode("block");
             this.mask.hide();
+            this.mask.on('click', this.focus, this);
         }
     },
 
@@ -399,14 +400,15 @@
     focus : function(){
         var f = this.focusEl, db = this.defaultButton, t = typeof db;
         if(t != 'undefined'){
-            if(t == 'number'){
-                f = this.buttons[db];
+            if(t == 'number' && this.fbar){
+                f = this.fbar.items.get(db);
             }else if(t == 'string'){
                 f = Ext.getCmp(db);
             }else{
                 f = db;
             }
         }
+        f = f || this.focusEl;
         f.focus.defer(10, f);
     },
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/DateField.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/DateField.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/DateField.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -114,7 +114,7 @@
         if(typeof this.maxValue == "string"){
             this.maxValue = this.parseDate(this.maxValue);
         }
-        this.ddMatch = null;
+        this.disabledDatesRE = null;
         this.initDisabledDays();
     },
 
@@ -212,7 +212,7 @@
             }
         }
         var fvalue = this.formatDate(value);
-        if(this.ddMatch && this.ddMatch.test(fvalue)){
+        if(this.disabledDatesRE && this.disabledDatesRE.test(fvalue)){
             this.markInvalid(String.format(this.disabledDatesText, fvalue));
             return false;
         }
@@ -324,7 +324,7 @@
         Ext.apply(this.menu.picker,  {
             minDate : this.minValue,
             maxDate : this.maxValue,
-            disabledDatesRE : this.ddMatch,
+            disabledDatesRE : this.disabledDatesRE,
             disabledDatesText : this.disabledDatesText,
             disabledDays : this.disabledDays,
             disabledDaysText : this.disabledDaysText,

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Field.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Field.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Field.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -207,7 +207,7 @@
     initValue : function(){
         if(this.value !== undefined){
             this.setValue(this.value);
-        }else if(this.el.dom.value.length > 0 && this.el.dom.value != this.emptyText){
+        }else if(!Ext.isEmpty(this.el.dom.value) && this.el.dom.value != this.emptyText){
             this.setValue(this.el.dom.value);
         }
         // reference to original value for reset
@@ -438,6 +438,11 @@
         }
     },
 
+    // private, does not work for all fields
+    append :function(v){
+         this.setValue([this.getValue(), v].join(''));
+    },
+
     // private
     adjustSize : function(w, h){
         var s = Ext.form.Field.superclass.adjustSize.call(this, w, h);

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Form.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Form.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Form.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -73,10 +73,6 @@
     // private
     initComponent :function(){
         this.form = this.createForm();
-        if(this.fileUpload) {
-            this.bodyCfg.enctype = 'multipart/form-data';
-        }
-
         Ext.FormPanel.superclass.initComponent.call(this);
 
         this.bodyCfg = {
@@ -85,7 +81,9 @@
             method : this.method || 'POST',
             id : this.formId || Ext.id()
         };
-        
+        if(this.fileUpload) {
+            this.bodyCfg.enctype = 'multipart/form-data';
+        }
         this.initItems();
         
         this.addEvents(

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/Column.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/Column.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/Column.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -10,16 +10,14 @@
     Ext.apply(this, config);
 
     if(typeof this.renderer == "string"){
-        this.renderer = Ext.util.Format[c.renderer];
+        this.renderer = Ext.util.Format[this.renderer];
     }
     if(typeof this.id == "undefined"){
         this.id = ++Ext.grid.Column.AUTO_ID;
     }
     if(this.editor){
-        if(this.editor.isFormField){
-            this.editor = new Ext.grid.GridEditor(this.editor);
-        }else if(this.editor.xtype && !this.editor.events){
-            this.editor = new Ext.grid.GridEditor(Ext.create(this.editor, 'textfield'));
+        if(this.editor.xtype && !this.editor.events){
+            this.editor = Ext.create(this.editor, 'textfield');
         }
     }
 }
@@ -33,6 +31,25 @@
             return "&#160;";
         }
         return value;
+    },
+
+    getEditor: function(rowIndex){
+        return this.editable !== false ? this.editor : null;
+    },
+
+    getCellEditor: function(rowIndex){
+        var editor = this.getEditor(rowIndex);
+        if(editor){
+            if(!editor.startEdit){
+                if(!editor.gridEditor){
+                    editor.gridEditor = new Ext.grid.GridEditor(editor);
+                }
+                return editor.gridEditor;
+            }else if(editor.startEdit){
+                return editor;
+            }
+        }
+        return null;
     }
 };
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnModel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnModel.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnModel.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -188,6 +188,10 @@
         return this.config[index].id;
     },
 
+    getColumnAt : function(index){
+        return this.config[index];
+    },
+
     /**
      * Reconfigures this column model
      * @param {Array} config Array of Column configs
@@ -505,7 +509,7 @@
      * @return {Object}
      */
     getCellEditor : function(colIndex, rowIndex){
-        return this.config[colIndex].editor;
+        return this.config[colIndex].getCellEditor(rowIndex);
     },
 
     /**

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/EditorGrid.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/EditorGrid.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/EditorGrid.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -227,6 +227,10 @@
                     ed.record = r;
                     ed.on("complete", this.onEditComplete, this, {single: true});
                     ed.on("specialkey", this.selModel.onEditorKey, this.selModel);
+                    /**
+                     * The currently active editor or null
+                      * @type Ext.Editor
+                     */
                     this.activeEditor = ed;
                     var v = this.preEditValue(r, field);
                     ed.startEdit(this.view.getCell(row, col).firstChild, v === undefined ? '' : v);

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridPanel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridPanel.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridPanel.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -494,8 +494,13 @@
     },
 
     /**
-     * Reconfigures the grid to use a different Store and Column Model.
-     * The View will be bound to the new objects and refreshed.
+     * <p>Reconfigures the grid to use a different Store and Column Model.
+     * The View will be bound to the new objects and refreshed.</p>
+     * <p>Be aware that upon reconfiguring a GridPanel, certain existing settings <i>may</i> become
+     * invalidated. For example the configured {@link #autoExpandColumn} may no longer exist in the
+     * new ColumnModel. Also, an existing {@link Ext.PagingToolbar PagingToolbar} will still be bound
+     * to the old Store, and will need rebinding. Any {@link #plugins} might also need reconfiguring
+     * with the new data.</p>
      * @param {Ext.data.Store} store The new {@link Ext.data.Store} object
      * @param {Ext.grid.ColumnModel} colModel The new {@link Ext.grid.ColumnModel} object
      */

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridView.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridView.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridView.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -478,13 +478,16 @@
             hd.style.width = ws[i];
         }
 
-        var ns = this.getRows();
+        var ns = this.getRows(), row, trow;
         for(var i = 0, len = ns.length; i < len; i++){
-            ns[i].style.width = tw;
-            ns[i].firstChild.style.width = tw;
-            var row = ns[i].firstChild.rows[0];
-            for(var j = 0; j < clen; j++){
-                row.childNodes[j].style.width = ws[j];
+            row = ns[i];
+            row.style.width = tw;
+            if(row.firstChild){
+                row.firstChild.style.width = tw;
+                trow = row.firstChild.rows[0];
+                for (var j = 0; j < clen; j++) {
+                   trow.childNodes[j].style.width = ws[j];
+                }
             }
         }
 
@@ -500,11 +503,14 @@
         var hd = this.getHeaderCell(col);
         hd.style.width = w;
 
-        var ns = this.getRows();
+        var ns = this.getRows(), row;
         for(var i = 0, len = ns.length; i < len; i++){
-            ns[i].style.width = tw;
-            ns[i].firstChild.style.width = tw;
-            ns[i].firstChild.rows[0].childNodes[col].style.width = w;
+            row = ns[i];
+            row.style.width = tw;
+            if(row.firstChild){
+                row.firstChild.style.width = tw;
+                row.firstChild.rows[0].childNodes[col].style.width = w;
+            }
         }
 
         this.onColumnWidthUpdated(col, w, tw);
@@ -521,11 +527,14 @@
         var hd = this.getHeaderCell(col);
         hd.style.display = display;
 
-        var ns = this.getRows();
+        var ns = this.getRows(), row;
         for(var i = 0, len = ns.length; i < len; i++){
-            ns[i].style.width = tw;
-            ns[i].firstChild.style.width = tw;
-            ns[i].firstChild.rows[0].childNodes[col].style.display = display;
+            row = ns[i];
+            row.style.width = tw;
+            if(row.firstChild){
+                row.firstChild.style.width = tw;
+                row.firstChild.rows[0].childNodes[col].style.display = display;
+            }
         }
 
         this.onColumnHiddenUpdated(col, hidden, tw);
@@ -668,6 +677,11 @@
             //g.on("headercontextmenu", this.handleHdCtx, this);
         }
 
+        if(g.trackMouseOver){
+             this.mainBody.on("mouseover", this.onRowOver, this);
+             this.mainBody.on("mouseout", this.onRowOut, this);
+        }
+
         if(g.enableDragDrop || g.enableDrag){
             this.dragZone = new Ext.grid.GridDragZone(g, {
                 ddGroup : g.ddGroup || 'GridDD'
@@ -763,7 +777,7 @@
         var cm = this.cm, ts = this.templates;
         var ct = ts.hcell;
 
-        var cb = [], sb = [], p = {};
+        var cb = [], p = {};
 
         for(var i = 0, len = cm.getColumnCount(); i < len; i++){
             p.id = cm.getColumnId(i);
@@ -977,7 +991,7 @@
 
     // private
     fitColumns : function(preventRefresh, onlyExpand, omitColumn){
-        var cm = this.cm, leftOver, dist, i;
+        var cm = this.cm, i;
         var tw = cm.getTotalWidth(false);
         var aw = this.grid.getGridEl().getWidth(true)-this.scrollOffset;
 
@@ -1103,7 +1117,6 @@
         }else{
             index = ds.indexOf(record);
         }
-        var cls = [];
         this.insertRows(ds, index, index, true);
         this.getRow(index).rowIndex = index;
         this.onRemove(ds, record, index+1, true);
@@ -1339,16 +1352,10 @@
     // private
     initUI : function(grid){
         grid.on("headerclick", this.onHeaderClick, this);
-
-        if(grid.trackMouseOver){
-            grid.on("mouseover", this.onRowOver, this);
-          grid.on("mouseout", this.onRowOut, this);
-      }
     },
 
     // private
     initEvents : function(){
-
     },
 
     // private
@@ -1371,7 +1378,7 @@
     // private
     onRowOut : function(e, t){
         var row;
-        if((row = this.findRowIndex(t)) !== false && row !== this.findRowIndex(e.getRelatedTarget())){
+        if((row = this.findRowIndex(t)) !== false && !e.within(this.getRow(row), true)){
             this.removeRowClass(row, "x-grid3-row-over");
         }
     },
@@ -1585,7 +1592,7 @@
         var t = this.view.findHeaderCell(e.getTarget());
         if(t){
             var xy = this.view.fly(t).getXY(), x = xy[0], y = xy[1];
-            var exy = e.getXY(), ex = exy[0], ey = exy[1];
+            var exy = e.getXY(), ex = exy[0];
             var w = t.offsetWidth, adjust = false;
             if((ex - x) <= this.hw){
                 adjust = -1;

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/BorderLayout.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/BorderLayout.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/BorderLayout.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -288,6 +288,7 @@
     defaultNSCMargins : {left:5,top:5,right:5,bottom:5},
     // private
     defaultEWCMargins : {left:5,top:0,right:5,bottom:0},
+    floatingZIndex: 100,
 
     /**
      * True if this region is collapsed. Read-only.
@@ -437,7 +438,7 @@
         }
         c.hide();
         c.dom.style.visibility = 'hidden';
-        this.panel.el.setStyle('z-index', 100);
+        this.panel.el.setStyle('z-index', this.floatingZIndex);
     },
 
     // private
@@ -612,7 +613,7 @@
         }
         this.restoreLT = [this.el.dom.style.left, this.el.dom.style.top];
         this.el.alignTo(this.collapsedEl, this.getCollapseAnchor());
-        this.el.setStyle("z-index", 102);
+        this.el.setStyle("z-index", this.floatingZIndex+2);
         if(this.animFloat !== false){
             this.beforeSlide();
             this.el.slideIn(this.getSlideAnchor(), {

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/FormLayout.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/FormLayout.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/FormLayout.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -173,7 +173,7 @@
 
     // private
     adjustWidthAnchor : function(value, comp){
-        return value - (comp.isFormField  ? (comp.hideLabel ? 0 : this.labelAdjust) : 0);
+        return value - (comp.isFormField || comp.fieldLabel  ? (comp.hideLabel ? 0 : this.labelAdjust) : 0);
     },
 
     // private

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/BaseItem.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/BaseItem.js	2008-11-16 21:37:52 UTC (rev 30)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/BaseItem.js	2008-11-21 14:33:19 UTC (rev 31)
@@ -67,9 +67,9 @@
      */
     hideOnClick : true,
     /**
-     * @cfg {Number} hideDelay Length of time in milliseconds to wait before hiding after a click (defaults to 100)
+     * @cfg {Number} clickHideDelay Length of time in milliseconds to wait before hiding after a click (defaults to 100)
      */
-    hideDelay : 100,
+    clickHideDelay : 1,
 
     // private
     ctype: "Ext.menu.BaseItem",
@@ -144,7 +144,7 @@
     // private
     handleClick : function(e){
         if(this.hideOnClick){
-            this.parentMenu.hide.defer(this.hideDelay, this.parentMenu, [true]);
+            this.parentMenu.hide.defer(this.clickHideDelay, this.parentMenu, [true]);
         }
     },
 


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/