[qo-modules-dev] [36] More cleanup.

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


Revision: 36
Author:   mjlecomte
Date:     2008-12-03 05:14:23 +0100 (Wed, 03 Dec 2008)

Log Message:
-----------
More cleanup.  Styles now working, I think I fixed a couple errors in original code.  Bottom taskbar needs css adjustment to position the 'buttons' in the taskbar, and a portion of the taskbar (the main center part) must have a different class now so changes are needed in the css.  If we make the taskbar truly draggable in height then not sure the buttons should be centered.  The taskbar should be draggable only in specific increments if allowed to drag.

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/Element-min.js
    mickael/trunk/ext/v3.0.0-a1/build/core/Element.insertion-min.js
    mickael/trunk/ext/v3.0.0-a1/build/core/Element.scroll-min.js
    mickael/trunk/ext/v3.0.0-a1/build/core/EventManager-min.js
    mickael/trunk/ext/v3.0.0-a1/build/core/Ext-min.js
    mickael/trunk/ext/v3.0.0-a1/build/core/Fx-min.js
    mickael/trunk/ext/v3.0.0-a1/build/data/ArrayReader-min.js
    mickael/trunk/ext/v3.0.0-a1/build/data/DirectProxy-min.js
    mickael/trunk/ext/v3.0.0-a1/build/data/JsonStore-min.js
    mickael/trunk/ext/v3.0.0-a1/build/data/Record-min.js
    mickael/trunk/ext/v3.0.0-a1/build/data/Store-min.js
    mickael/trunk/ext/v3.0.0-a1/build/data/StoreMgr-min.js
    mickael/trunk/ext/v3.0.0-a1/build/data/XmlReader-min.js
    mickael/trunk/ext/v3.0.0-a1/build/data/XmlStore-min.js
    mickael/trunk/ext/v3.0.0-a1/build/dd/DDCore-min.js
    mickael/trunk/ext/v3.0.0-a1/build/dd/DragTracker-min.js
    mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-fr-min.js
    mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-tr-min.js
    mickael/trunk/ext/v3.0.0-a1/build/util/ClickRepeater-min.js
    mickael/trunk/ext/v3.0.0-a1/build/util/Date-min.js
    mickael/trunk/ext/v3.0.0-a1/build/util/Format-min.js
    mickael/trunk/ext/v3.0.0-a1/build/util/History-min.js
    mickael/trunk/ext/v3.0.0-a1/build/util/Observable-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Action-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Button-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/ColorPalette-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Component-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/ComponentMgr-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Container-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/DatePicker-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Editor-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/PagingToolbar-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Panel-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Resizable-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/SplitBar-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/TabPanel-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Toolbar-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/Window-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Checkbox-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Combo-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/FieldSet-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Form-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/form/HtmlEditor-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Radio-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TextField-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TimeField-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TriggerField-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/EditorGrid-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/GridPanel-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/AbsoluteLayout-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/AccordionLayout-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/ContainerLayout-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/build/widgets/menu/Menu-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/tips/Tip-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/tree/TreeEventModel-min.js
    mickael/trunk/ext/v3.0.0-a1/build/widgets/tree/TreeNode-min.js
    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/ext-core-debug.js
    mickael/trunk/ext/v3.0.0-a1/ext-core.js
    mickael/trunk/ext/v3.0.0-a1/learn/desktop/controller.js
    mickael/trunk/ext/v3.0.0-a1/learn/desktop/desktop.html
    mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/App.js
    mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/Desktop.js
    mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/TaskButton.js
    mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/View.js
    mickael/trunk/ext/v3.0.0-a1/learn/desktop/modules-preload.txt
    mickael/trunk/ext/v3.0.0-a1/package/button/button-debug.js
    mickael/trunk/ext/v3.0.0-a1/package/button/button.js
    mickael/trunk/ext/v3.0.0-a1/package/color-palette.js
    mickael/trunk/ext/v3.0.0-a1/package/data/data.js
    mickael/trunk/ext/v3.0.0-a1/package/date.js
    mickael/trunk/ext/v3.0.0-a1/package/datepicker/datepicker.js
    mickael/trunk/ext/v3.0.0-a1/package/dialog/dialogs-debug.js
    mickael/trunk/ext/v3.0.0-a1/package/dragdrop/dragdrop.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/edit-grid.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/package/qtips/qtips.js
    mickael/trunk/ext/v3.0.0-a1/package/resizable.js
    mickael/trunk/ext/v3.0.0-a1/package/splitbar.js
    mickael/trunk/ext/v3.0.0-a1/package/tabs/tabs.js
    mickael/trunk/ext/v3.0.0-a1/package/toolbar/toolbar.js
    mickael/trunk/ext/v3.0.0-a1/package/tree/tree.js
    mickael/trunk/ext/v3.0.0-a1/package/util.js
    mickael/trunk/ext/v3.0.0-a1/package/widget-core.js
    mickael/trunk/ext/v3.0.0-a1/resources/css/borders.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/box.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/button.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/combo.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/core.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/date-picker.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/dd.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/debug.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/dialog.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/editor.css
    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/grid.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/layout.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/list-view.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/progress.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/qtips.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/reset-min.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/reset.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/resizable.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/slider.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/tabs.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/toolbar.css
    mickael/trunk/ext/v3.0.0-a1/resources/css/tree.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/source/adapter/ext-base.js
    mickael/trunk/ext/v3.0.0-a1/source/adapter/jquery-bridge.js
    mickael/trunk/ext/v3.0.0-a1/source/adapter/prototype-bridge.js
    mickael/trunk/ext/v3.0.0-a1/source/adapter/yui-bridge.js
    mickael/trunk/ext/v3.0.0-a1/source/core/CompositeElement.js
    mickael/trunk/ext/v3.0.0-a1/source/core/DomHelper.js
    mickael/trunk/ext/v3.0.0-a1/source/core/DomQuery.js
    mickael/trunk/ext/v3.0.0-a1/source/core/Element.alignment.js
    mickael/trunk/ext/v3.0.0-a1/source/core/Element.dd.js
    mickael/trunk/ext/v3.0.0-a1/source/core/Element.insertion.js
    mickael/trunk/ext/v3.0.0-a1/source/core/Element.js
    mickael/trunk/ext/v3.0.0-a1/source/core/Element.keys.js
    mickael/trunk/ext/v3.0.0-a1/source/core/Element.legacy.js
    mickael/trunk/ext/v3.0.0-a1/source/core/Element.scroll.js
    mickael/trunk/ext/v3.0.0-a1/source/core/EventManager.js
    mickael/trunk/ext/v3.0.0-a1/source/core/Ext.js
    mickael/trunk/ext/v3.0.0-a1/source/core/Fx.js
    mickael/trunk/ext/v3.0.0-a1/source/core/Template.js
    mickael/trunk/ext/v3.0.0-a1/source/core/UpdateManager.js
    mickael/trunk/ext/v3.0.0-a1/source/data/ArrayReader.js
    mickael/trunk/ext/v3.0.0-a1/source/data/Connection.js
    mickael/trunk/ext/v3.0.0-a1/source/data/DataField.js
    mickael/trunk/ext/v3.0.0-a1/source/data/DataProxy.js
    mickael/trunk/ext/v3.0.0-a1/source/data/DataReader.js
    mickael/trunk/ext/v3.0.0-a1/source/data/Direct.js
    mickael/trunk/ext/v3.0.0-a1/source/data/DirectProvider.js
    mickael/trunk/ext/v3.0.0-a1/source/data/DirectProxy.js
    mickael/trunk/ext/v3.0.0-a1/source/data/DirectStore.js
    mickael/trunk/ext/v3.0.0-a1/source/data/GroupingStore.js
    mickael/trunk/ext/v3.0.0-a1/source/data/HttpProxy.js
    mickael/trunk/ext/v3.0.0-a1/source/data/JsonReader.js
    mickael/trunk/ext/v3.0.0-a1/source/data/JsonStore.js
    mickael/trunk/ext/v3.0.0-a1/source/data/MemoryProxy.js
    mickael/trunk/ext/v3.0.0-a1/source/data/Record.js
    mickael/trunk/ext/v3.0.0-a1/source/data/ScriptTagProxy.js
    mickael/trunk/ext/v3.0.0-a1/source/data/SimpleStore.js
    mickael/trunk/ext/v3.0.0-a1/source/data/SortTypes.js
    mickael/trunk/ext/v3.0.0-a1/source/data/Store.js
    mickael/trunk/ext/v3.0.0-a1/source/data/StoreMgr.js
    mickael/trunk/ext/v3.0.0-a1/source/data/Tree.js
    mickael/trunk/ext/v3.0.0-a1/source/data/XmlReader.js
    mickael/trunk/ext/v3.0.0-a1/source/data/XmlStore.js
    mickael/trunk/ext/v3.0.0-a1/source/dd/DDCore.js
    mickael/trunk/ext/v3.0.0-a1/source/dd/DragSource.js
    mickael/trunk/ext/v3.0.0-a1/source/dd/DragTracker.js
    mickael/trunk/ext/v3.0.0-a1/source/dd/DragZone.js
    mickael/trunk/ext/v3.0.0-a1/source/dd/DropTarget.js
    mickael/trunk/ext/v3.0.0-a1/source/dd/DropZone.js
    mickael/trunk/ext/v3.0.0-a1/source/dd/Registry.js
    mickael/trunk/ext/v3.0.0-a1/source/dd/ScrollManager.js
    mickael/trunk/ext/v3.0.0-a1/source/dd/StatusProxy.js
    mickael/trunk/ext/v3.0.0-a1/source/debug.js
    mickael/trunk/ext/v3.0.0-a1/source/ext.jsb
    mickael/trunk/ext/v3.0.0-a1/source/license.txt
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-af.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-bg.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ca.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-cs.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-da.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-de.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-el_GR.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-en.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-en_UK.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-es.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fa.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fr.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fr_CA.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-gr.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-he.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-hr.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-hu.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-id.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-it.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ja.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ko.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-lt.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-lv.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-mk.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-nl.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-no_NB.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-no_NN.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pl.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt_BR.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ro.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ru.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sk.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sl.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sr.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sr_RS.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sv_SE.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-th.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-tr.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ukr.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-vn.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-zh_CN.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-zh_TW.js
    mickael/trunk/ext/v3.0.0-a1/source/state/CookieProvider.js
    mickael/trunk/ext/v3.0.0-a1/source/state/Provider.js
    mickael/trunk/ext/v3.0.0-a1/source/state/StateManager.js
    mickael/trunk/ext/v3.0.0-a1/source/util/CSS.js
    mickael/trunk/ext/v3.0.0-a1/source/util/ClickRepeater.js
    mickael/trunk/ext/v3.0.0-a1/source/util/Cookies.js
    mickael/trunk/ext/v3.0.0-a1/source/util/Date.js
    mickael/trunk/ext/v3.0.0-a1/source/util/DelayedTask.js
    mickael/trunk/ext/v3.0.0-a1/source/util/Format.js
    mickael/trunk/ext/v3.0.0-a1/source/util/History.js
    mickael/trunk/ext/v3.0.0-a1/source/util/JSON.js
    mickael/trunk/ext/v3.0.0-a1/source/util/KeyMap.js
    mickael/trunk/ext/v3.0.0-a1/source/util/KeyNav.js
    mickael/trunk/ext/v3.0.0-a1/source/util/MixedCollection.js
    mickael/trunk/ext/v3.0.0-a1/source/util/Observable.js
    mickael/trunk/ext/v3.0.0-a1/source/util/TaskMgr.js
    mickael/trunk/ext/v3.0.0-a1/source/util/TextMetrics.js
    mickael/trunk/ext/v3.0.0-a1/source/util/XTemplate.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Action.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/BoxComponent.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Button.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/ColorPalette.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Component.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/ComponentMgr.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Container.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/CycleButton.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/DataView.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/DatePicker.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/LoadMask.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/MessageBox.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/PagingToolbar.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Panel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/PanelDD.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/ProgressBar.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Resizable.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Shadow.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Slider.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/SplitBar.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/SplitButton.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/TabPanel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Toolbar.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Viewport.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/Window.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/WindowManager.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/Chart.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/EventProxy.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/FlashComponent.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/swfobject.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Action.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/BasicForm.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Checkbox.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/CheckboxGroup.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Combo.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/FieldSet.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Form.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Hidden.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/HtmlEditor.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Label.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/NumberField.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Radio.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/RadioGroup.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TextArea.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TextField.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TimeField.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TriggerField.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/form/VTypes.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/AbstractSelectionModel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/CellSelectionModel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/CheckboxSelectionModel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/Column.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnDD.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnModel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnSplitDD.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/EditorGrid.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridDD.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridEditor.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/grid/GroupingView.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/PropertyGrid.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/RowNumberer.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/RowSelectionModel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AbsoluteLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AccordionLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AnchorLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/BorderLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/CardLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/ColumnLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/ContainerLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/FitLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/FormLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/TableLayout.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/list/ColumnResizer.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/list/ListView.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/list/Sorter.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Adapter.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/BaseItem.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/CheckItem.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/ColorItem.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/ColorMenu.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/DateItem.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/DateMenu.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Item.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Menu.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/MenuMgr.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Separator.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/TextItem.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/QuickTip.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/QuickTips.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/Tip.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/ToolTip.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/AsyncTreeNode.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeDragZone.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeDropZone.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeEditor.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeEventModel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeFilter.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeLoader.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeNode.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeNodeUI.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreePanel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeSelectionModel.js
    mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeSorter.js

Added Paths:
-----------
    mickael/trunk/ext/v3.0.0-a1/build/data/ArrayStore-min.js
    mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-pt_PT-min.js
    mickael/trunk/ext/v3.0.0-a1/source/data/ArrayStore.js
    mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt_PT.js


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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/adapter/ext/ext-base.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -2,2148 +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, isSafari = (/webkit|khtml/).test(ua), isSafari3 = isSafari && ua.indexOf('webkit/5') != -1, isIE = !isOpera && ua.indexOf("msie") > -1, isIE7 = !isOpera && ua.indexOf("msie 7") > -1, isGecko = !isSafari && ua.indexOf("gecko") > -1, isGecko3 = !isSafari && 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.override = io;
-                Ext.override(sb, overrides);
-                sb.extend = function(o){
-                    Ext.extend(sb, o);
-                };
-                return sb;
-            };
-        }(),
-        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;
-        },
-        isOpera: isOpera,
-        isSafari: isSafari,
-        isSafari3: isSafari3,
-        isSafari2: isSafari && !isSafari3,
-        isIE: isIE,
-        isIE6: isIE && !isIE7,
-        isIE7: isIE7,
-        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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/adapter/jquery/ext-jquery-adapter.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -9,21 +9,21 @@
 
 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,isSafari=(/webkit|khtml/).test(ua),isSafari3=isSafari&&ua.indexOf('webkit/5')!=-1,isIE=!isOpera&&ua.indexOf("msie")>-1,isIE7=!isOpera&&ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isGecko3=!isSafari&&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){}}
+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.override=io;Ext.override(sb,overrides);sb.extend=function(o){Ext.extend(sb,o);};return sb;};}(),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"";}
+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 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;},isOpera:isOpera,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7,isIE7:isIE7,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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/adapter/prototype/ext-prototype-adapter.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -9,21 +9,21 @@
 
 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,isSafari=(/webkit|khtml/).test(ua),isSafari3=isSafari&&ua.indexOf('webkit/5')!=-1,isIE=!isOpera&&ua.indexOf("msie")>-1,isIE7=!isOpera&&ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isGecko3=!isSafari&&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){}}
+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.override=io;Ext.override(sb,overrides);sb.extend=function(o){Ext.extend(sb,o);};return sb;};}(),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"";}
+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 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;},isOpera:isOpera,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7,isIE7:isIE7,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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/adapter/yui/ext-yui-adapter.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -9,21 +9,21 @@
 
 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,isSafari=(/webkit|khtml/).test(ua),isSafari3=isSafari&&ua.indexOf('webkit/5')!=-1,isIE=!isOpera&&ua.indexOf("msie")>-1,isIE7=!isOpera&&ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isGecko3=!isSafari&&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){}}
+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.override=io;Ext.override(sb,overrides);sb.extend=function(o){Ext.extend(sb,o);};return sb;};}(),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"";}
+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 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;},isOpera:isOpera,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7,isIE7:isIE7,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/Element-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/core/Element-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/core/Element-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -48,8 +48,8 @@
 return this;},setLeft:function(left){this.setStyle("left",this.addUnits(left));return this;},setTop:function(top){this.setStyle("top",this.addUnits(top));return this;},setRight:function(right){this.setStyle("right",this.addUnits(right));return this;},setBottom:function(bottom){this.setStyle("bottom",this.addUnits(bottom));return this;},setXY:function(pos,animate){if(!animate||!A){D.setXY(this.dom,pos);}else{this.anim({points:{to:pos}},this.preanim(arguments,1),'motion');}
 return this;},setLocation:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this;},moveTo:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this;},getRegion:function(){return D.getRegion(this.dom);},getHeight:function(contentHeight){var h=this.dom.offsetHeight||0;h=contentHeight!==true?h:h-this.getBorderWidth("tb")-this.getPadding("tb");return h<0?0:h;},getWidth:function(contentWidth){var w=this.dom.offsetWidth||0;w=contentWidth!==true?w:w-this.getBorderWidth("lr")-this.getPadding("lr");return w<0?0:w;},getComputedHeight:function(){var h=Math.max(this.dom.offsetHeight,this.dom.clientHeight);if(!h){h=parseInt(this.getStyle('height'),10)||0;if(!this.isBorderBox()){h+=this.getFrameWidth('tb');}}
 return h;},getComputedWidth:function(){var w=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!w){w=parseInt(this.getStyle('width'),10)||0;if(!this.isBorderBox()){w+=this.getFrameWidth('lr');}}
-return w;},getSize:function(contentSize){return{width:this.getWidth(contentSize),height:this.getHeight(contentSize)};},getStyleSize:function(){var w,h,d=this.dom,s=d.style;if(s.width&&s.width!='auto'){w=parseInt(s.width,10);if(Ext.isBorderBox){w-=this.getFrameWidth('lr');}}
-if(s.height&&s.height!='auto'){h=parseInt(s.height,10);if(Ext.isBorderBox){h-=this.getFrameWidth('tb');}}
+return w;},getSize:function(contentSize){return{width:this.getWidth(contentSize),height:this.getHeight(contentSize)};},getStyleSize:function(){var w,h,d=this.dom,s=d.style;if(s.width&&s.width!='auto'){w=parseInt(s.width,10);if(this.isBorderBox()){w-=this.getFrameWidth('lr');}}
+if(s.height&&s.height!='auto'){h=parseInt(s.height,10);if(this.isBorderBox()){h-=this.getFrameWidth('tb');}}
 return{width:w||this.getWidth(true),height:h||this.getHeight(true)};},getViewSize:function(){var d=this.dom,doc=document,aw=0,ah=0;if(d==doc||d==doc.body){return{width:D.getViewWidth(),height:D.getViewHeight()};}else{return{width:d.clientWidth,height:d.clientHeight};}},getValue:function(asNumber){return asNumber?parseInt(this.dom.value,10):this.dom.value;},adjustWidth:function(width){if(typeof width=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){width-=(this.getBorderWidth("lr")+this.getPadding("lr"));}
 if(width<0){width=0;}}
 return width;},adjustHeight:function(height){if(typeof height=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){height-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
@@ -80,18 +80,18 @@
 if(typeof callback=="function"){callback();}});dom.innerHTML=html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this;},load:function(){var um=this.getUpdater();um.update.apply(um,arguments);return this;},getUpdater:function(){if(!this.updateManager){this.updateManager=new Ext.Updater(this);}
 return this.updateManager;},unselectable:function(){this.dom.unselectable="on";this.swallowEvent("selectstart",true);this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");this.addClass("x-unselectable");return this;},getCenterXY:function(){return this.getAlignToXY(document,'c-c');},center:function(centerIn){this.alignTo(centerIn||document,'c-c');return this;},isBorderBox:function(){return noBoxAdjust[this.dom.tagName.toLowerCase()]||Ext.isBorderBox;},getBox:function(contentBox,local){var xy;if(!local){xy=this.getXY();}else{var left=parseInt(this.getStyle("left"),10)||0;var top=parseInt(this.getStyle("top"),10)||0;xy=[left,top];}
 var el=this.dom,w=el.offsetWidth,h=el.offsetHeight,bx;if(!contentBox){bx={x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h};}else{var l=this.getBorderWidth("l")+this.getPadding("l");var r=this.getBorderWidth("r")+this.getPadding("r");var t=this.getBorderWidth("t")+this.getPadding("t");var b=this.getBorderWidth("b")+this.getPadding("b");bx={x:xy[0]+l,y:xy[1]+t,0:xy[0]+l,1:xy[1]+t,width:w-(l+r),height:h-(t+b)};}
-bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&Ext.isBorderBox?0:(this.getPadding(sides)+this.getBorderWidth(sides));},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
+bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&this.isBorderBox()?0:(this.getPadding(sides)+this.getBorderWidth(sides));},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
 this.setBounds(box.x,box.y,w,h,this.preanim(arguments,2));return this;},repaint:function(){var dom=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.get(dom).removeClass("x-repaint");},1);return this;},getMargins:function(side){if(!side){return{top:parseInt(this.getStyle("margin-top"),10)||0,left:parseInt(this.getStyle("margin-left"),10)||0,bottom:parseInt(this.getStyle("margin-bottom"),10)||0,right:parseInt(this.getStyle("margin-right"),10)||0};}else{return this.addStyles(side,El.margins);}},addStyles:function(sides,styles){var val=0,v,w;for(var i=0,len=sides.length;i<len;i++){v=this.getStyle(styles[sides.charAt(i)]);if(v){w=parseInt(v,10);if(w){val+=(w>=0?w:-1*w);}}}
 return val;},createProxy:function(config,renderTo,matchBox){config=typeof config=="object"?config:{tag:"div",cls:config};var proxy;if(renderTo){proxy=Ext.DomHelper.append(renderTo,config,true);}else{proxy=Ext.DomHelper.insertBefore(this.dom,config,true);}
 if(matchBox){proxy.setBox(this.getBox());}
-return proxy;},mask:function(msg,msgCls){if(this.getStyle("position")=="static"){this.setStyle("position","relative");}
+return proxy;},mask:function(msg,msgCls){if(this.getStyle("position")=="static"){this.addClass("x-masked-relative");}
 if(this._maskMsg){this._maskMsg.remove();}
 if(this._mask){this._mask.remove();}
 this._mask=Ext.DomHelper.append(this.dom,{cls:"ext-el-mask"},true);this.addClass("x-masked");this._mask.setDisplayed(true);if(typeof msg=='string'){this._maskMsg=Ext.DomHelper.append(this.dom,{cls:"ext-el-mask-msg",cn:{tag:'div'}},true);var mm=this._maskMsg;mm.dom.className=msgCls?"ext-el-mask-msg "+msgCls:"ext-el-mask-msg";mm.dom.firstChild.innerHTML=msg;mm.setDisplayed(true);mm.center(this);}
 if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&this.getStyle('height')=='auto'){this._mask.setSize(this.dom.clientWidth,this.getHeight());}
 return this._mask;},unmask:function(){if(this._mask){if(this._maskMsg){this._maskMsg.remove();delete this._maskMsg;}
 this._mask.remove();delete this._mask;}
-this.removeClass("x-masked");},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var el=document.createElement('iframe');el.frameBorder='0';el.className='ext-shim';if(Ext.isIE&&Ext.isSecure){el.src=Ext.SSL_SECURE_URL;}
+this.removeClass(["x-masked","x-masked-relative"]);},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var el=document.createElement('iframe');el.frameBorder='0';el.className='ext-shim';if(Ext.isIE&&Ext.isSecure){el.src=Ext.SSL_SECURE_URL;}
 var shim=Ext.get(this.dom.parentNode.insertBefore(el,this.dom));shim.autoBoxAdjust=false;return shim;},remove:function(){Ext.removeNode(this.dom);delete El.cache[this.dom.id];},hover:function(overFn,outFn,scope){var preOverFn=function(e){if(!e.within(this,true)){overFn.apply(scope||this,arguments);}};var preOutFn=function(e){if(!e.within(this,true)){outFn.apply(scope||this,arguments);}};this.on("mouseover",preOverFn,this.dom);this.on("mouseout",preOutFn,this.dom);return this;},addClassOnOver:function(className){this.hover(function(){Ext.fly(this,'_internal').addClass(className);},function(){Ext.fly(this,'_internal').removeClass(className);});return this;},addClassOnFocus:function(className){this.on("focus",function(){Ext.fly(this,'_internal').addClass(className);},this.dom);this.on("blur",function(){Ext.fly(this,'_internal').removeClass(className);},this.dom);return this;},addClassOnClick:function(className){var dom=this.dom;this.on("mousedown",function(){Ext.fly(dom,'_internal').addClass(className);var d=Ext.getDoc();var fn=function(){Ext.fly(dom,'_internal').removeClass(className);d.removeListener("mouseup",fn);};d.on("mouseup",fn);});return this;},swallowEvent:function(eventName,preventDefault){var fn=function(e){e.stopPropagation();if(preventDefault){e.preventDefault();}};if(Ext.isArray(eventName)){for(var i=0,len=eventName.length;i<len;i++){this.on(eventName[i],fn);}
 return this;}
 this.on(eventName,fn);return this;},parent:function(selector,returnDom){return this.matchNode('parentNode','parentNode',selector,returnDom);},next:function(selector,returnDom){return this.matchNode('nextSibling','nextSibling',selector,returnDom);},prev:function(selector,returnDom){return this.matchNode('previousSibling','previousSibling',selector,returnDom);},first:function(selector,returnDom){return this.matchNode('nextSibling','firstChild',selector,returnDom);},last:function(selector,returnDom){return this.matchNode('previousSibling','lastChild',selector,returnDom);},matchNode:function(dir,start,selector,returnDom){var n=this.dom[start];while(n){if(n.nodeType==1&&(!selector||Ext.DomQuery.is(n,selector))){return!returnDom?Ext.get(n):n;}

Modified: mickael/trunk/ext/v3.0.0-a1/build/core/Element.insertion-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/core/Element.insertion-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/core/Element.insertion-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -11,4 +11,4 @@
 return rt;}
 where=where?where.toLowerCase():'before';el=el||{};var refNode=where=='before'?this.dom:this.dom.nextSibling;if(typeof el=='object'&&!el.nodeType&&!el.dom){if(where=='after'&&!this.dom.nextSibling){rt=Ext.DomHelper.append(this.dom.parentNode,el,!returnDom);}else{rt=Ext.DomHelper[where=='after'?'insertAfter':'insertBefore'](this.dom,el,!returnDom);}}else{rt=this.dom.parentNode.insertBefore(Ext.getDom(el),refNode);if(!returnDom){rt=Ext.get(rt);}}
 return rt;},replace:function(el){el=Ext.get(el);this.insertBefore(el);el.remove();return this;},replaceWith:function(el){if(typeof el=='object'&&!el.nodeType&&!el.dom){el=this.insertSibling(el,'before');}else{el=Ext.getDom(el);this.dom.parentNode.insertBefore(el,this.dom);}
-El.uncache(this.id);this.dom.parentNode.removeChild(this.dom);this.dom=el;this.id=Ext.id(el);El.cache[this.id]=this;return this;}});
\ No newline at end of file
+El.uncache(this.id);Ext.removeNode(this.dom);this.dom=el;this.id=Ext.id(el);El.cache[this.id]=this;return this;}});
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/core/Element.scroll-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/core/Element.scroll-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/core/Element.scroll-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -10,7 +10,7 @@
 Ext.Element.addMethods({scrollIntoView:function(container,hscroll){var c=Ext.getDom(container)||Ext.getBody().dom;var el=this.dom;var o=this.getOffsetsTo(c),l=o[0]+c.scrollLeft,t=o[1]+c.scrollTop,b=t+el.offsetHeight,r=l+el.offsetWidth;var ch=c.clientHeight;var ct=parseInt(c.scrollTop,10);var cl=parseInt(c.scrollLeft,10);var cb=ct+ch;var cr=cl+c.clientWidth;if(el.offsetHeight>ch||t<ct){c.scrollTop=t;}else if(b>cb){c.scrollTop=b-ch;}
 c.scrollTop=c.scrollTop;if(hscroll!==false){if(el.offsetWidth>c.clientWidth||l<cl){c.scrollLeft=l;}else if(r>cr){c.scrollLeft=r-c.clientWidth;}
 c.scrollLeft=c.scrollLeft;}
-return this;},scrollChildIntoView:function(child,hscroll){Ext.fly(child,'_scrollChildIntoView').scrollIntoView(this,hscroll);},isScrollable:function(){var dom=this.dom;return dom.scrollHeight>dom.clientHeight||dom.scrollWidth>dom.clientWidth;},scrollTo:function(side,value,animate){var prop=side.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!animate||!A){this.dom[prop]=value;}else{var to=prop=="scrollLeft"?[value,this.dom.scrollTop]:[this.dom.scrollLeft,value];this.anim({scroll:{"to":to}},this.preanim(arguments,2),'scroll');}
+return this;},scrollChildIntoView:function(child,hscroll){Ext.fly(child,'_scrollChildIntoView').scrollIntoView(this,hscroll);},isScrollable:function(){var dom=this.dom;return dom.scrollHeight>dom.clientHeight||dom.scrollWidth>dom.clientWidth;},scrollTo:function(side,value,animate){var prop=side.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!animate){this.dom[prop]=value;}else{var to=prop=="scrollLeft"?[value,this.dom.scrollTop]:[this.dom.scrollLeft,value];this.anim({scroll:{"to":to}},this.preanim(arguments,2),'scroll');}
 return this;},scroll:function(direction,distance,animate){if(!this.isScrollable()){return;}
 var el=this.dom;var l=el.scrollLeft,t=el.scrollTop;var w=el.scrollWidth,h=el.scrollHeight;var cw=el.clientWidth,ch=el.clientHeight;direction=direction.toLowerCase();var scrolled=false;var a=this.preanim(arguments,2);switch(direction){case"l":case"left":if(w-l>cw){var v=Math.min(l+distance,w-cw);this.scrollTo("left",v,a);scrolled=true;}
 break;case"r":case"right":if(l>0){var v=Math.max(l-distance,0);this.scrollTo("left",v,a);scrolled=true;}

Modified: mickael/trunk/ext/v3.0.0-a1/build/core/EventManager-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/core/EventManager-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/core/EventManager-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -21,14 +21,15 @@
 if(Ext.isGecko||Ext.isOpera){document.removeEventListener("DOMContentLoaded",fireDocReady,false);}
 if(Ext.isIE){var defer=document.getElementById("ie-deferred-loader");if(defer){defer.onreadystatechange=null;defer.parentNode.removeChild(defer);}}
 if(docReadyEvent){docReadyEvent.fire();docReadyEvent.clearListeners();}}};var initDocReady=function(){docReadyEvent=new Ext.util.Event();if(Ext.isGecko||Ext.isOpera){document.addEventListener("DOMContentLoaded",fireDocReady,false);}else if(Ext.isIE){document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");var defer=document.getElementById("ie-deferred-loader");defer.onreadystatechange=function(){if(this.readyState=="complete"){fireDocReady();}};}else if(Ext.isSafari){docReadyProcId=setInterval(function(){var rs=document.readyState;if(rs=="complete"){fireDocReady();}},10);}
-E.on(window,"load",fireDocReady);};var createBuffered=function(h,o){var task=new Ext.util.DelayedTask(h);return function(e){e=new Ext.EventObjectImpl(e);task.delay(o.buffer,h,null,[e]);};};var createSingle=function(h,el,ename,fn,scope){return function(e){Ext.EventManager.removeListener(el,ename,fn,scope);h(e);};};var createDelayed=function(h,o){return function(e){e=new Ext.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var listen=function(element,ename,opt,fn,scope){var o=(!opt||typeof opt=="boolean")?{}:opt;fn=fn||o.fn;scope=scope||o.scope;var el=Ext.getDom(element);if(!el){throw"Error listening for \""+ename+'\". Element "'+element+'" doesn\'t exist.';}
+E.on(window,"load",fireDocReady);};var createBuffered=function(h,o){var task=new Ext.util.DelayedTask(h);return function(e){e=new Ext.EventObjectImpl(e);task.delay(o.buffer,h,null,[e]);};};var createSingle=function(h,el,ename,fn,scope){return function(e){Ext.EventManager.removeListener(el,ename,fn,scope);h(e);};};var createDelayed=function(h,o){return function(e){e=new Ext.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var createTargeted=function(h,o){return function(){if(o.target==Ext.EventObject.setEvent(arguments[0]).target){h.apply(this,Array.prototype.slice.call(arguments,0));}};};var listen=function(element,ename,opt,fn,scope){var o=(!opt||typeof opt=="boolean")?{}:opt;fn=fn||o.fn;scope=scope||o.scope;var el=Ext.getDom(element);if(!el){throw"Error listening for \""+ename+'\". Element "'+element+'" doesn\'t exist.';}
 var h=function(e){if(!window[xname]){return;}
 e=Ext.EventObject.setEvent(e);var t;if(o.delegate){t=e.getTarget(o.delegate,el);if(!t){return;}}else{t=e.target;}
 if(o.stopEvent===true){e.stopEvent();}
 if(o.preventDefault===true){e.preventDefault();}
 if(o.stopPropagation===true){e.stopPropagation();}
 if(o.normalized===false){e=e.browserEvent;}
-fn.call(scope||el,e,t,o);};if(o.delay){h=createDelayed(h,o);}
+fn.call(scope||el,e,t,o);};if(o.target){h=createTargeted(h,o);}
+if(o.delay){h=createDelayed(h,o);}
 if(o.single){h=createSingle(h,el,ename,fn,scope);}
 if(o.buffer){h=createBuffered(h,o);}
 addListener(el,ename,fn,h,scope);return h;};var propRe=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;var pub={addListener:function(element,eventName,fn,scope,options){if(typeof eventName=="object"){var o=eventName;for(var e in o){if(propRe.test(e)){continue;}
@@ -37,10 +38,10 @@
 return listen(element,eventName,options,fn,scope);},removeListener:function(element,eventName,fn,scope){return removeListener(element,eventName,fn,scope);},removeAll:function(element){return removeAll(element);},onDocumentReady:function(fn,scope,options){if(docReadyState){docReadyEvent.addListener(fn,scope,options);docReadyEvent.fire();docReadyEvent.clearListeners();return;}
 if(!docReadyEvent){initDocReady();}
 options=options||{};if(!options.delay){options.delay=1;}
-docReadyEvent.addListener(fn,scope,options);},onWindowResize:function(fn,scope,options){if(!resizeEvent){resizeEvent=new Ext.util.Event();resizeTask=new Ext.util.DelayedTask(function(){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());});E.on(window,"resize",this.fireWindowResize,this);}
+docReadyEvent.addListener(fn,scope,options);},doResizeEvent:function(){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());},onWindowResize:function(fn,scope,options){if(!resizeEvent){resizeEvent=new Ext.util.Event();resizeTask=new Ext.util.DelayedTask(this.doResizeEvent);E.on(window,"resize",this.fireWindowResize,this);}
 resizeEvent.addListener(fn,scope,options);},fireWindowResize:function(){if(resizeEvent){if((Ext.isIE||Ext.isAir)&&resizeTask){resizeTask.delay(50);}else{resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}}},onTextResize:function(fn,scope,options){if(!textEvent){textEvent=new Ext.util.Event();var textEl=new Ext.Element(document.createElement('div'));textEl.dom.className='x-text-resize';textEl.dom.innerHTML='X';textEl.appendTo(document.body);textSize=textEl.dom.offsetHeight;setInterval(function(){if(textEl.dom.offsetHeight!=textSize){textEvent.fire(textSize,textSize=textEl.dom.offsetHeight);}},this.textResizeInterval);}
 textEvent.addListener(fn,scope,options);},removeResizeListener:function(fn,scope){if(resizeEvent){resizeEvent.removeListener(fn,scope);}},fireResize:function(){if(resizeEvent){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}},ieDeferSrc:false,textResizeInterval:50};pub.on=pub.addListener;pub.un=pub.removeListener;pub.stoppedMouseDownEvent=new Ext.util.Event();return pub;}();Ext.onReady=Ext.EventManager.onDocumentReady;(function(){var initExtCss=function(){var bd=document.body||document.getElementsByTagName('body')[0];if(!bd){return false;}
-var cls=[' ',Ext.isIE?"ext-ie "+(Ext.isIE6?'ext-ie6':'ext-ie7'):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?'ext-gecko2':'ext-gecko3'):Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":""];if(Ext.isMac){cls.push("ext-mac");}
+var cls=[' ',Ext.isIE?"ext-ie "+(Ext.isIE6?'ext-ie6':(Ext.isIE7?'ext-ie7':'ext-ie8')):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?'ext-gecko2':'ext-gecko3'):Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":Ext.isChrome?"ext-chrome":""];if(Ext.isMac){cls.push("ext-mac");}
 if(Ext.isLinux){cls.push("ext-linux");}
 if(Ext.isBorderBox){cls.push('ext-border-box');}
 if(Ext.isStrict){var p=bd.parentNode;if(p){p.className+=' ext-strict';}}

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/core/Ext-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -9,21 +9,21 @@
 
 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,isSafari=(/webkit|khtml/).test(ua),isSafari3=isSafari&&ua.indexOf('webkit/5')!=-1,isIE=!isOpera&&ua.indexOf("msie")>-1,isIE7=!isOpera&&ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isGecko3=!isSafari&&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){}}
+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.override=io;Ext.override(sb,overrides);sb.extend=function(o){Ext.extend(sb,o);};return sb;};}(),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"";}
+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 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;},isOpera:isOpera,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7,isIE7:isIE7,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/Fx-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/core/Fx-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/core/Fx-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -14,8 +14,9 @@
 el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;st.fontSize='';el.afterFx(o);};var width=this.getWidth();var height=this.getHeight();arguments.callee.anim=this.fxanim({width:{to:this.adjustWidth(width*2)},height:{to:this.adjustHeight(height*2)},points:{by:[-(width*.5),-(height*.5)]},opacity:{to:0},fontSize:{to:200,unit:"%"}},o,'motion',.5,"easeOut",after);});return this;},switchOff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.clip();var r=this.getFxRestore();var st=this.dom.style;var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}
 el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};this.fxanim({opacity:{to:0.3}},null,null,.1,null,function(){this.clearOpacity();(function(){this.fxanim({height:{to:1},points:{by:[0,this.getHeight()*.5]}},o,'motion',0.3,'easeIn',after);}).defer(100,this);});});return this;},highlight:function(color,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){color=color||"ffff9c";var attr=o.attr||"backgroundColor";this.clearOpacity();this.show();var origColor=this.getColor(attr);var restoreColor=this.dom.style[attr];var endColor=(o.endColor||origColor)||"ffffff";var after=function(){el.dom.style[attr]=restoreColor;el.afterFx(o);};var a={};a[attr]={from:color,to:endColor};arguments.callee.anim=this.fxanim(a,o,'color',1,'easeIn',after);});return this;},frame:function(color,count,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){color=color||"#C3DAF9";if(color.length==6){color="#"+color;}
 count=count||1;var duration=o.duration||1;this.show();var b=this.getBox();var animFn=function(){var proxy=Ext.getBody().createChild({style:{visbility:"hidden",position:"absolute","z-index":"35000",border:"0px solid "+color}});var scale=Ext.isBorderBox?2:1;proxy.animate({top:{from:b.y,to:b.y-20},left:{from:b.x,to:b.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:b.height,to:(b.height+(20*scale))},width:{from:b.width,to:(b.width+(20*scale))}},duration,function(){proxy.remove();if(--count>0){animFn();}else{el.afterFx(o);}});};animFn.call(this);});return this;},pause:function(seconds){var el=this.getFxEl();var o={};el.queueFx(o,function(){setTimeout(function(){el.afterFx(o);},seconds*1000);});return this;},fadeIn:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.setOpacity(0);this.fixDisplay();this.dom.style.visibility='visible';var to=o.endOpacity||1;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to==1){this.clearOpacity();}
-el.afterFx(o);});});return this;},fadeOut:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){arguments.callee.anim=this.fxanim({opacity:{to:o.endOpacity||0}},o,null,.5,"easeOut",function(){if(this.visibilityMode==Ext.Element.DISPLAY||o.useDisplay){this.dom.style.display="none";}else{this.dom.style.visibility="hidden";}
-this.clearOpacity();el.afterFx(o);});});return this;},scale:function(w,h,o){this.shift(Ext.apply({},o,{width:w,height:h}));return this;},shift:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var a={},w=o.width,h=o.height,x=o.x,y=o.y,op=o.opacity;if(w!==undefined){a.width={to:this.adjustWidth(w)};}
+el.afterFx(o);});});return this;},fadeOut:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var to=o.endOpacity||0;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to===0){if(this.visibilityMode==Ext.Element.DISPLAY||o.useDisplay){this.dom.style.display="none";}else{this.dom.style.visibility="hidden";}
+this.clearOpacity();}
+el.afterFx(o);});});return this;},scale:function(w,h,o){this.shift(Ext.apply({},o,{width:w,height:h}));return this;},shift:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var a={},w=o.width,h=o.height,x=o.x,y=o.y,op=o.opacity;if(w!==undefined){a.width={to:this.adjustWidth(w)};}
 if(h!==undefined){a.height={to:this.adjustHeight(h)};}
 if(o.left!==undefined){a.left={to:o.left};}
 if(o.top!==undefined){a.top={to:o.top};}

Modified: mickael/trunk/ext/v3.0.0-a1/build/data/ArrayReader-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/data/ArrayReader-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/data/ArrayReader-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,6 +7,8 @@
  */
 
 
-Ext.data.ArrayReader=Ext.extend(Ext.data.JsonReader,{readRecords:function(o){var sid=this.meta?this.meta.id:null;var recordType=this.recordType,fields=recordType.prototype.fields;var records=[];var root=o;for(var i=0;i<root.length;i++){var n=root[i];var values={};var id=((sid||sid===0)&&n[sid]!==undefined&&n[sid]!==""?n[sid]:null);for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var k=f.mapping!==undefined&&f.mapping!==null?f.mapping:j;var v=n[k]!==undefined?n[k]:f.defaultValue;v=f.convert(v,n);values[f.name]=v;}
+Ext.data.ArrayReader=Ext.extend(Ext.data.JsonReader,{readRecords:function(o){this.arrayData=o;var s=this.meta;var sid=s?(s.idIndex||s.id):null;var recordType=this.recordType,fields=recordType.prototype.fields;var records=[];if(!this.getRoot){this.getRoot=s.root?this.getJsonAccessor(s.root):function(p){return p;};if(s.totalProperty){this.getTotal=this.getJsonAccessor(s.totalProperty);}}
+var root=this.getRoot(o);for(var i=0;i<root.length;i++){var n=root[i];var values={};var id=((sid||sid===0)&&n[sid]!==undefined&&n[sid]!==""?n[sid]:null);for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var k=f.mapping!==undefined&&f.mapping!==null?f.mapping:j;var v=n[k]!==undefined?n[k]:f.defaultValue;v=f.convert(v,n);values[f.name]=v;}
 var record=new recordType(values,id);record.json=n;records[records.length]=record;}
-return{records:records,totalRecords:records.length};}});
\ No newline at end of file
+var totalRecords=records.length;if(s.totalProperty){var v=parseInt(this.getTotal(o),10);if(!isNaN(v)){totalRecords=v;}}
+return{records:records,totalRecords:totalRecords};}});
\ No newline at end of file

Added: mickael/trunk/ext/v3.0.0-a1/build/data/ArrayStore-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/data/ArrayStore-min.js	                        (rev 0)
+++ mickael/trunk/ext/v3.0.0-a1/build/data/ArrayStore-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -0,0 +1,12 @@
+/*
+ * Ext JS Library 3.0 Pre-alpha
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@xxxxxxxxx
+ * 
+ * http://extjs.com/license
+ */
+
+
+Ext.data.ArrayStore=Ext.extend(Ext.data.Store,{constructor:function(config){Ext.data.ArrayStore.superclass.constructor.call(this,Ext.apply(config,{reader:new Ext.data.ArrayReader(config)}));},loadData:function(data,append){if(this.expandData===true){var r=[];for(var i=0,len=data.length;i<len;i++){r[r.length]=[data[i]];}
+data=r;}
+Ext.data.ArrayStore.superclass.loadData.call(this,data,append);}});Ext.reg('arraystore',Ext.data.ArrayStore);Ext.data.SimpleStore=Ext.data.ArrayStore;Ext.reg('simplestore',Ext.data.SimpleStore);
\ 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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/data/DirectProxy-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -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/data/JsonStore-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/data/JsonStore-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/data/JsonStore-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,4 +7,4 @@
  */
 
 
-Ext.data.JsonStore=function(c){Ext.data.JsonStore.superclass.constructor.call(this,Ext.apply(c,{proxy:c.proxy||(!c.data?new Ext.data.HttpProxy({url:c.url}):undefined),reader:new Ext.data.JsonReader(c,c.fields)}));};Ext.extend(Ext.data.JsonStore,Ext.data.Store);
\ No newline at end of file
+Ext.data.JsonStore=Ext.extend(Ext.data.Store,{constructor:function(config){Ext.data.JsonStore.superclass.constructor.call(this,Ext.apply(config,{reader:new Ext.data.JsonReader(config)}));}});Ext.reg('jsonstore',Ext.data.JsonStore);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/data/Record-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/data/Record-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/data/Record-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -11,6 +11,6 @@
 f.getField=function(name){return p.fields.get(name);};return f;};Ext.data.Record.AUTO_ID=1000;Ext.data.Record.EDIT='edit';Ext.data.Record.REJECT='reject';Ext.data.Record.COMMIT='commit';Ext.data.Record.prototype={dirty:false,editing:false,error:null,modified:null,join:function(store){this.store=store;},set:function(name,value){if(String(this.data[name])==String(value)){return;}
 this.dirty=true;if(!this.modified){this.modified={};}
 if(typeof this.modified[name]=='undefined'){this.modified[name]=this.data[name];}
-this.data[name]=value;if(!this.editing&&this.store){this.store.afterEdit(this);}},get:function(name){return this.data[name];},beginEdit:function(){this.editing=true;this.modified={};},cancelEdit:function(){this.editing=false;delete this.modified;},endEdit:function(){this.editing=false;if(this.dirty&&this.store){this.store.afterEdit(this);}},reject:function(silent){var m=this.modified;for(var n in m){if(typeof m[n]!="function"){this.data[n]=m[n];}}
+this.data[name]=value;if(!this.editing&&this.store){this.store.afterEdit(this);}},get:function(name){return this.data[name];},beginEdit:function(){this.editing=true;this.modified=this.modified||{};},cancelEdit:function(){this.editing=false;delete this.modified;},endEdit:function(){this.editing=false;if(this.dirty&&this.store){this.store.afterEdit(this);}},reject:function(silent){var m=this.modified;for(var n in m){if(typeof m[n]!="function"){this.data[n]=m[n];}}
 this.dirty=false;delete this.modified;this.editing=false;if(this.store&&silent!==true){this.store.afterReject(this);}},commit:function(silent){this.dirty=false;delete this.modified;this.editing=false;if(this.store&&silent!==true){this.store.afterCommit(this);}},getChanges:function(){var m=this.modified,cs={};for(var n in m){if(m.hasOwnProperty(n)){cs[n]=this.data[n];}}
 return cs;},hasError:function(){return this.error!=null;},clearError:function(){this.error=null;},copy:function(newId){return new this.constructor(Ext.apply({},this.data),newId||this.id);},isModified:function(fieldName){return!!(this.modified&&this.modified.hasOwnProperty(fieldName));}};
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/data/Store-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/data/Store-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/data/Store-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -13,7 +13,7 @@
 if(this.reader.onMetaChange){this.reader.onMetaChange=this.onMetaChange.createDelegate(this);}}
 if(this.recordType){this.fields=this.recordType.prototype.fields;}
 this.modified=[];this.addEvents('datachanged','metachange','add','remove','update','clear','beforeload','load','loadexception');if(this.proxy){this.relayEvents(this.proxy,["loadexception"]);}
-this.sortToggle={};if(this.sortInfo){this.setDefaultSort(this.sortInfo.field,this.sortInfo.direction);}
+this.sortToggle={};if(this.sortField){this.setDefaultSort(this.sortField,this.sortDir);}else if(this.sortInfo){this.setDefaultSort(this.sortInfo.field,this.sortInfo.direction);}
 Ext.data.Store.superclass.constructor.call(this);if(this.storeId||this.id){Ext.StoreMgr.register(this);}
 if(this.inlineData){this.loadData(this.inlineData);delete this.inlineData;}else if(this.autoLoad){this.load.defer(10,this,[typeof this.autoLoad=='object'?this.autoLoad:undefined]);}};Ext.extend(Ext.data.Store,Ext.util.Observable,{remoteSort:false,pruneModifiedRecords:false,lastOptions:null,destroy:function(){if(this.id){Ext.StoreMgr.unregister(this);}
 this.data=null;this.purgeListeners();},add:function(records){records=[].concat(records);if(records.length<1){return;}
@@ -39,4 +39,4 @@
 value=this.data.createValueMatcher(value,anyMatch,caseSensitive);return function(r){return value.test(r.data[property]);};},sum:function(property,start,end){var rs=this.data.items,v=0;start=start||0;end=(end||end===0)?end:rs.length-1;for(var i=start;i<=end;i++){v+=(rs[i].data[property]||0);}
 return v;},filter:function(property,value,anyMatch,caseSensitive){var fn=this.createFilterFn(property,value,anyMatch,caseSensitive);return fn?this.filterBy(fn):this.clearFilter();},filterBy:function(fn,scope){this.snapshot=this.snapshot||this.data;this.data=this.queryBy(fn,scope||this);this.fireEvent("datachanged",this);},query:function(property,value,anyMatch,caseSensitive){var fn=this.createFilterFn(property,value,anyMatch,caseSensitive);return fn?this.queryBy(fn):this.data.clone();},queryBy:function(fn,scope){var data=this.snapshot||this.data;return data.filterBy(fn,scope||this);},find:function(property,value,start,anyMatch,caseSensitive){var fn=this.createFilterFn(property,value,anyMatch,caseSensitive);return fn?this.data.findIndexBy(fn,null,start):-1;},findBy:function(fn,scope,start){return this.data.findIndexBy(fn,scope,start);},collect:function(dataIndex,allowNull,bypassFilter){var d=(bypassFilter===true&&this.snapshot)?this.snapshot.items:this.data.items;var v,sv,r=[],l={};for(var i=0,len=d.length;i<len;i++){v=d[i].data[dataIndex];sv=String(v);if((allowNull||!Ext.isEmpty(v))&&!l[sv]){l[sv]=true;r[r.length]=v;}}
 return r;},clearFilter:function(suppressEvent){if(this.isFiltered()){this.data=this.snapshot;delete this.snapshot;if(suppressEvent!==true){this.fireEvent("datachanged",this);}}},isFiltered:function(){return this.snapshot&&this.snapshot!=this.data;},afterEdit:function(record){if(this.modified.indexOf(record)==-1){this.modified.push(record);}
-this.fireEvent("update",this,record,Ext.data.Record.EDIT);},afterReject:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.REJECT);},afterCommit:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.COMMIT);},commitChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].commit();}},rejectChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].reject();}},onMetaChange:function(meta,rtype,o){this.recordType=rtype;this.fields=rtype.prototype.fields;delete this.snapshot;this.sortInfo=meta.sortInfo;this.modified=[];this.fireEvent('metachange',this,this.reader.meta);},findInsertIndex:function(record){this.suspendEvents();var data=this.data.clone();this.data.add(record);this.applySort();var index=this.data.indexOf(record);this.data=data;this.resumeEvents();return index;},setBaseParam:function(name,value){this.baseParams=this.baseParams||{};this.baseParams[name]=value;}});
\ No newline at end of file
+this.fireEvent("update",this,record,Ext.data.Record.EDIT);},afterReject:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.REJECT);},afterCommit:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.COMMIT);},commitChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].commit();}},rejectChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].reject();}},onMetaChange:function(meta,rtype,o){this.recordType=rtype;this.fields=rtype.prototype.fields;delete this.snapshot;this.sortInfo=meta.sortInfo;this.modified=[];this.fireEvent('metachange',this,this.reader.meta);},findInsertIndex:function(record){this.suspendEvents();var data=this.data.clone();this.data.add(record);this.applySort();var index=this.data.indexOf(record);this.data=data;this.resumeEvents();return index;},setBaseParam:function(name,value){this.baseParams=this.baseParams||{};this.baseParams[name]=value;}});Ext.reg('store',Ext.data.Store);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/data/StoreMgr-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/data/StoreMgr-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/data/StoreMgr-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,4 +7,4 @@
  */
 
 
-Ext.StoreMgr=Ext.apply(new Ext.util.MixedCollection(),{register:function(){for(var i=0,s;s=arguments[i];i++){this.add(s);}},unregister:function(){for(var i=0,s;s=arguments[i];i++){this.remove(this.lookup(s));}},lookup:function(id){return typeof id=="object"?id:this.get(id);},getKey:function(o){return o.storeId||o.id;}});
\ No newline at end of file
+Ext.StoreMgr=Ext.apply(new Ext.util.MixedCollection(),{register:function(){for(var i=0,s;s=arguments[i];i++){this.add(s);}},unregister:function(){for(var i=0,s;s=arguments[i];i++){this.remove(this.lookup(s));}},lookup:function(id){return typeof id=="object"?(id.events?id:Ext.create(id,'store')):this.get(id);},getKey:function(o){return o.storeId||o.id;}});
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/data/XmlReader-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/data/XmlReader-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/data/XmlReader-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -8,7 +8,7 @@
 
 
 Ext.data.XmlReader=function(meta,recordType){meta=meta||{};Ext.data.XmlReader.superclass.constructor.call(this,meta,recordType||meta.fields);};Ext.extend(Ext.data.XmlReader,Ext.data.DataReader,{read:function(response){var doc=response.responseXML;if(!doc){throw{message:"XmlReader.read: XML Document not available"};}
-return this.readRecords(doc);},readRecords:function(doc){this.xmlData=doc;var root=doc.documentElement||doc;var q=Ext.DomQuery;var recordType=this.recordType,fields=recordType.prototype.fields;var sid=this.meta.id;var totalRecords=0,success=true;if(this.meta.totalRecords){totalRecords=q.selectNumber(this.meta.totalRecords,root,0);}
+return this.readRecords(doc);},readRecords:function(doc){this.xmlData=doc;var root=doc.documentElement||doc;var q=Ext.DomQuery;var recordType=this.recordType,fields=recordType.prototype.fields;var sid=this.meta.idPath||this.meta.id;var totalRecords=0,success=true;if(this.meta.totalRecords){totalRecords=q.selectNumber(this.meta.totalRecords,root,0);}
 if(this.meta.success){var sv=q.selectValue(this.meta.success,root,true);success=sv!==false&&sv!=='false';}
 var records=[];var ns=q.select(this.meta.record,root);for(var i=0,len=ns.length;i<len;i++){var n=ns[i];var values={};var id=sid?q.selectValue(sid,n):undefined;for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var v=q.selectValue(f.mapping||f.name,n,f.defaultValue);v=f.convert(v,n);values[f.name]=v;}
 var record=new recordType(values,id);record.node=n;records[records.length]=record;}

Modified: mickael/trunk/ext/v3.0.0-a1/build/data/XmlStore-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/data/XmlStore-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/data/XmlStore-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,4 +7,4 @@
  */
 
 
-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);
\ No newline at end of file
+Ext.data.XmlStore=Ext.extend(Ext.data.Store,{constructor:function(config){Ext.data.XmlStore.superclass.constructor.call(this,Ext.apply(config,{reader:new Ext.data.XmlReader(config)}));}});Ext.reg('xmlstore',Ext.data.XmlStore);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/dd/DDCore-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/dd/DDCore-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/dd/DDCore-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,7 +7,7 @@
  */
 
 
-(function(){var Event=Ext.EventManager;var Dom=Ext.lib.Dom;Ext.dd.DragDrop=function(id,sGroup,config){if(id){this.init(id,sGroup,config);}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(x,y){},startDrag:function(x,y){},b4Drag:function(e){},onDrag:function(e){},onDragEnter:function(e,id){},b4DragOver:function(e){},onDragOver:function(e,id){},b4DragOut:function(e){},onDragOut:function(e,id){},b4DragDrop:function(e){},onDragDrop:function(e,id){},onInvalidDrop:function(e){},b4EndDrag:function(e){},endDrag:function(e){},b4MouseDown:function(e){},onMouseDown:function(e){},onMouseUp:function(e){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(constrainTo,pad,inContent){if(typeof pad=="number"){pad={left:pad,right:pad,top:pad,bottom:pad};}
+(function(){var Event=Ext.EventManager;var Dom=Ext.lib.Dom;Ext.dd.DragDrop=function(id,sGroup,config){if(id){this.init(id,sGroup,config);}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},moveOnly:false,unlock:function(){this.locked=false;},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(x,y){},startDrag:function(x,y){},b4Drag:function(e){},onDrag:function(e){},onDragEnter:function(e,id){},b4DragOver:function(e){},onDragOver:function(e,id){},b4DragOut:function(e){},onDragOut:function(e,id){},b4DragDrop:function(e){},onDragDrop:function(e,id){},onInvalidDrop:function(e){},b4EndDrag:function(e){},endDrag:function(e){},b4MouseDown:function(e){},onMouseDown:function(e){},onMouseUp:function(e){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(constrainTo,pad,inContent){if(typeof pad=="number"){pad={left:pad,right:pad,top:pad,bottom:pad};}
 pad=pad||this.defaultPadding;var b=Ext.get(this.getEl()).getBox();var ce=Ext.get(constrainTo);var s=ce.getScroll();var c,cd=ce.dom;if(cd==document.body){c={x:s.left,y:s.top,width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()};}else{var xy=ce.getXY();c={x:xy[0]+s.left,y:xy[1]+s.top,width:cd.clientWidth,height:cd.clientHeight};}
 var topSpace=b.y-c.y;var leftSpace=b.x-c.x;this.resetConstraints();this.setXConstraint(leftSpace-(pad.left||0),c.width-leftSpace-b.width-(pad.right||0),this.xTickSize);this.setYConstraint(topSpace-(pad.top||0),c.height-topSpace-b.height-(pad.bottom||0),this.yTickSize);},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id);}
 return this._domRef;},getDragEl:function(){return Ext.getDom(this.dragElId);},init:function(id,sGroup,config){this.initTarget(id,sGroup,config);Event.on(this.id,"mousedown",this.handleMouseDown,this);},initTarget:function(id,sGroup,config){this.config=config||{};this.DDM=Ext.dd.DDM;this.groups={};if(typeof id!=="string"){id=Ext.id(id);}
@@ -34,13 +34,14 @@
 oDD[sMethod].apply(oDD,args);}}},_onLoad:function(){this.init();Event.on(document,"mouseup",this.handleMouseUp,this,true);Event.on(document,"mousemove",this.handleMouseMove,this,true);Event.on(window,"unload",this._onUnload,this,true);Event.on(window,"resize",this._onResize,this,true);},_onResize:function(e){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(oDD,sGroup){if(!this.initialized){this.init();}
 if(!this.ids[sGroup]){this.ids[sGroup]={};}
 this.ids[sGroup][oDD.id]=oDD;},removeDDFromGroup:function(oDD,sGroup){if(!this.ids[sGroup]){this.ids[sGroup]={};}
-var obj=this.ids[sGroup];if(obj&&obj[oDD.id]){delete obj[oDD.id];}},_remove:function(oDD){for(var g in oDD.groups){if(g&&this.ids[g][oDD.id]){delete this.ids[g][oDD.id];}}
+var obj=this.ids[sGroup];if(obj&&obj[oDD.id]){delete obj[oDD.id];}},_remove:function(oDD){for(var g in oDD.groups){if(g&&this.ids[g]&&this.ids[g][oDD.id]){delete this.ids[g][oDD.id];}}
 delete this.handleIds[oDD.id];},regHandle:function(sDDId,sHandleId){if(!this.handleIds[sDDId]){this.handleIds[sDDId]={};}
 this.handleIds[sDDId][sHandleId]=sHandleId;},isDragDrop:function(id){return(this.getDDById(id))?true:false;},getRelated:function(p_oDD,bTargetsOnly){var oDDs=[];for(var i in p_oDD.groups){for(j in this.ids[i]){var dd=this.ids[i][j];if(!this.isTypeOfDD(dd)){continue;}
 if(!bTargetsOnly||dd.isTarget){oDDs[oDDs.length]=dd;}}}
 return oDDs;},isLegalTarget:function(oDD,oTargetDD){var targets=this.getRelated(oDD,true);for(var i=0,len=targets.length;i<len;++i){if(targets[i].id==oTargetDD.id){return true;}}
 return false;},isTypeOfDD:function(oDD){return(oDD&&oDD.__ygDragDrop);},isHandle:function(sDDId,sHandleId){return(this.handleIds[sDDId]&&this.handleIds[sDDId][sHandleId]);},getDDById:function(id){for(var i in this.ids){if(this.ids[i][id]){return this.ids[i][id];}}
 return null;},handleMouseDown:function(e,oDD){if(Ext.QuickTips){Ext.QuickTips.disable();}
+if(this.dragCurrent){this.handleMouseUp(e);}
 this.currentTarget=e.getTarget();this.dragCurrent=oDD;var el=oDD.getEl();this.startX=e.getPageX();this.startY=e.getPageY();this.deltaX=this.startX-el.offsetLeft;this.deltaY=this.startY-el.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var DDM=Ext.dd.DDM;DDM.startDrag(DDM.startX,DDM.startY);},this.clickTimeThresh);},startDrag:function(x,y){clearTimeout(this.clickTimeout);if(this.dragCurrent){this.dragCurrent.b4StartDrag(x,y);this.dragCurrent.startDrag(x,y);}
 this.dragThreshMet=true;},handleMouseUp:function(e){if(Ext.QuickTips){Ext.QuickTips.enable();}
 if(!this.dragCurrent){return;}

Modified: mickael/trunk/ext/v3.0.0-a1/build/dd/DragTracker-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/dd/DragTracker-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/dd/DragTracker-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -8,6 +8,7 @@
 
 
 Ext.dd.DragTracker=function(config){Ext.apply(this,config);this.addEvents('mousedown','mouseup','mousemove','dragstart','dragend','drag');this.dragRegion=new Ext.lib.Region(0,0,0,0);if(this.el){this.initEl(this.el);}}
-Ext.extend(Ext.dd.DragTracker,Ext.util.Observable,{active:false,tolerance:5,autoStart:false,initEl:function(el){this.el=Ext.get(el);el.on('mousedown',this.onMouseDown,this,this.delegate?{delegate:this.delegate}:undefined);},destroy:function(){this.el.un('mousedown',this.onMouseDown,this);},onMouseDown:function(e,target){if(this.fireEvent('mousedown',this,e)!==false&&this.onBeforeStart(e)!==false){this.startXY=this.lastXY=e.getXY();this.dragTarget=this.delegate?target:this.el.dom;e.preventDefault();var doc=Ext.getDoc();doc.on('mouseup',this.onMouseUp,this);doc.on('mousemove',this.onMouseMove,this);doc.on('selectstart',this.stopSelect,this);if(this.autoStart){this.timer=this.triggerStart.defer(this.autoStart===true?1000:this.autoStart,this);}}},onMouseMove:function(e,target){e.preventDefault();var xy=e.getXY(),s=this.startXY;this.lastXY=xy;if(!this.active){if(Math.abs(s[0]-xy[0])>this.tolerance||Math.abs(s[1]-xy[1])>this.tolerance){this.triggerStart();}else{return;}}
-this.fireEvent('mousemove',this,e);this.onDrag(e);this.fireEvent('drag',this,e);},onMouseUp:function(e){var doc=Ext.getDoc();doc.un('mousemove',this.onMouseMove,this);doc.un('mouseup',this.onMouseUp,this);doc.un('selectstart',this.stopSelect,this);e.preventDefault();this.clearStart();this.active=false;delete this.elRegion;this.fireEvent('mouseup',this,e);this.onEnd(e);this.fireEvent('dragend',this,e);},triggerStart:function(isTimer){this.clearStart();this.active=true;this.onStart(this.startXY);this.fireEvent('dragstart',this,this.startXY);},clearStart:function(){if(this.timer){clearTimeout(this.timer);delete this.timer;}},stopSelect:function(e){e.stopEvent();return false;},onBeforeStart:function(e){},onStart:function(xy){},onDrag:function(e){},onEnd:function(e){},getDragTarget:function(){return this.dragTarget;},getDragCt:function(){return this.el;},getXY:function(constrain){return constrain?this.constrainModes[constrain].call(this,this.lastXY):this.lastXY;},getOffset:function(constrain){var xy=this.getXY(constrain);var s=this.startXY;return[s[0]-xy[0],s[1]-xy[1]];},constrainModes:{'point':function(xy){if(!this.elRegion){this.elRegion=this.getDragCt().getRegion();}
+Ext.extend(Ext.dd.DragTracker,Ext.util.Observable,{active:false,tolerance:5,autoStart:false,initEl:function(el){this.el=Ext.get(el);el.on('mousedown',this.onMouseDown,this,this.delegate?{delegate:this.delegate}:undefined);},destroy:function(){this.el.un('mousedown',this.onMouseDown,this);},onMouseDown:function(e,target){if(this.fireEvent('mousedown',this,e)!==false&&this.onBeforeStart(e)!==false){this.startXY=this.lastXY=e.getXY();this.dragTarget=this.delegate?target:this.el.dom;if(this.preventDefault!==false){e.preventDefault();}
+var doc=Ext.getDoc();doc.on('mouseup',this.onMouseUp,this);doc.on('mousemove',this.onMouseMove,this);doc.on('selectstart',this.stopSelect,this);if(this.autoStart){this.timer=this.triggerStart.defer(this.autoStart===true?1000:this.autoStart,this);}}},onMouseMove:function(e,target){e.preventDefault();var xy=e.getXY(),s=this.startXY;this.lastXY=xy;if(!this.active){if(Math.abs(s[0]-xy[0])>this.tolerance||Math.abs(s[1]-xy[1])>this.tolerance){this.triggerStart();}else{return;}}
+this.fireEvent('mousemove',this,e);this.onDrag(e);this.fireEvent('drag',this,e);},onMouseUp:function(e){var doc=Ext.getDoc();doc.un('mousemove',this.onMouseMove,this);doc.un('mouseup',this.onMouseUp,this);doc.un('selectstart',this.stopSelect,this);e.preventDefault();this.clearStart();var wasActive=this.active;this.active=false;delete this.elRegion;this.fireEvent('mouseup',this,e);if(wasActive){this.onEnd(e);this.fireEvent('dragend',this,e);}},triggerStart:function(isTimer){this.clearStart();this.active=true;this.onStart(this.startXY);this.fireEvent('dragstart',this,this.startXY);},clearStart:function(){if(this.timer){clearTimeout(this.timer);delete this.timer;}},stopSelect:function(e){e.stopEvent();return false;},onBeforeStart:function(e){},onStart:function(xy){},onDrag:function(e){},onEnd:function(e){},getDragTarget:function(){return this.dragTarget;},getDragCt:function(){return this.el;},getXY:function(constrain){return constrain?this.constrainModes[constrain].call(this,this.lastXY):this.lastXY;},getOffset:function(constrain){var xy=this.getXY(constrain);var s=this.startXY;return[s[0]-xy[0],s[1]-xy[1]];},constrainModes:{'point':function(xy){if(!this.elRegion){this.elRegion=this.getDragCt().getRegion();}
 var dr=this.dragRegion;dr.left=xy[0];dr.top=xy[1];dr.right=xy[0];dr.bottom=xy[1];dr.constrainTo(this.elRegion);return[dr.left,dr.top];}}});
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-fr-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-fr-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-fr-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,26 +7,24 @@
  */
 
 
-Ext.UpdateManager.defaults.indicatorText='<div class="loading-indicator">En cours de chargement...</div>';if(Ext.View){Ext.View.prototype.emptyText="";}
-if(Ext.grid.GridPanel){Ext.grid.GridPanel.prototype.ddText="{0} ligne(s) sélectionnée(s)";}
-if(Ext.TabPanelItem){Ext.TabPanelItem.prototype.closeText="Fermer cet onglet";}
-if(Ext.form.Field){Ext.form.Field.prototype.invalidText="La valeur de ce champ est invalide";}
+Ext.UpdateManager.defaults.indicatorText='<div class="loading-indicator">En cours de chargement...</div>';if(Ext.DataView){Ext.DataView.prototype.emptyText="";}
+if(Ext.grid.GridPanel){Ext.grid.GridPanel.prototype.ddText="{0} ligne{1} sélectionnée{1}";}
 if(Ext.LoadMask){Ext.LoadMask.prototype.msg="En cours de chargement...";}
-Date.shortMonthNames=["Janv","Févr","Mars","Avr","Mai","Juin","Juil","Août","Sept","Oct","Nov","Déc"];Date.getShortMonthName=function(month){return Date.shortMonthNames[month];};Date.monthNames=["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"];Date.monthNumbers={"Janvier":0,"Février":1,"Mars":2,"Avril":3,"Mai":4,"Juin":5,"Juillet":6,"Août":7,"Septembre":8,"Octobre":9,"Novembre":10,"Décembre":11};Date.getMonthNumber=function(name){return Date.monthNumbers[Ext.util.Format.capitalize(name)];};Date.dayNames=["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"];Date.getShortDayName=function(day){return Date.dayNames[day].substring(0,3);};if(Ext.MessageBox){Ext.MessageBox.buttonText={ok:"OK",cancel:"Annuler",yes:"Oui",no:"Non"};}
+Date.shortMonthNames=["Janv","Févr","Mars","Avr","Mai","Juin","Juil","Août","Sept","Oct","Nov","Déc"];Date.getShortMonthName=function(month){return Date.shortMonthNames[month];};Date.monthNames=["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"];Date.monthNumbers={"Janvier":0,"Février":1,"Mars":2,"Avril":3,"Mai":4,"Juin":5,"Juillet":6,"Août":7,"Septembre":8,"Octobre":9,"Novembre":10,"Décembre":11};Date.getMonthNumber=function(name){return Date.monthNumbers[Ext.util.Format.capitalize(name)];};Date.dayNames=["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"];Date.getShortDayName=function(day){return Date.dayNames[day].substring(0,3);};Date.parseCodes.S.s="(?:er)";Ext.override(Date,{getSuffix:function(){return(this.getDate()==1)?"er":"";}});if(Ext.MessageBox){Ext.MessageBox.buttonText={ok:"OK",cancel:"Annuler",yes:"Oui",no:"Non"};}
 if(Ext.util.Format){Ext.util.Format.date=function(v,format){if(!v)return"";if(!(v instanceof Date))v=new Date(Date.parse(v));return v.dateFormat(format||"d/m/Y");};}
 if(Ext.DatePicker){Ext.apply(Ext.DatePicker.prototype,{todayText:"Aujourd'hui",minText:"Cette date est antérieure à la date minimum",maxText:"Cette date est postérieure à la date maximum",disabledDaysText:"",disabledDatesText:"",monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:'Mois suivant (CTRL+Flèche droite)',prevText:"Mois précédent (CTRL+Flèche gauche)",monthYearText:"Choisissez un mois (CTRL+Flèche haut ou bas pour changer d'année.)",todayTip:"{0} (Barre d'espace)",okText:"&#160;OK&#160;",cancelText:"Annuler",format:"d/m/y",startDay:1});}
 if(Ext.PagingToolbar){Ext.apply(Ext.PagingToolbar.prototype,{beforePageText:"Page",afterPageText:"sur {0}",firstText:"Première page",prevText:"Page précédente",nextText:"Page suivante",lastText:"Dernière page",refreshText:"Actualiser la page",displayMsg:"Page courante {0} - {1} sur {2}",emptyMsg:'Aucune donnée à afficher'});}
+if(Ext.form.Field){Ext.form.Field.prototype.invalidText="La valeur de ce champ est invalide";}
 if(Ext.form.TextField){Ext.apply(Ext.form.TextField.prototype,{minLengthText:"La longueur minimum de ce champ est de {0} caractères",maxLengthText:"La longueur maximum de ce champ est de {0} caractères",blankText:"Ce champ est obligatoire",regexText:"",emptyText:null});}
-if(Ext.form.NumberField){Ext.apply(Ext.form.NumberField.prototype,{minText:"La valeur minimum de ce champ doit être de {0}",maxText:"La valeur maximum de ce champ doit être de {0}",nanText:"{0} n'est pas un nombre valide"});}
+if(Ext.form.NumberField){Ext.apply(Ext.form.NumberField.prototype,{decimalSeparator:",",decimalPrecision:2,minText:"La valeur minimum de ce champ doit être de {0}",maxText:"La valeur maximum de ce champ doit être de {0}",nanText:"{0} n'est pas un nombre valide"});}
 if(Ext.form.DateField){Ext.apply(Ext.form.DateField.prototype,{disabledDaysText:"Désactivé",disabledDatesText:"Désactivé",minText:"La date de ce champ ne peut être antérieure au {0}",maxText:"La date de ce champ ne peut être postérieure au {0}",invalidText:"{0} n'est pas une date valide - elle doit être au format suivant: {1}",format:"d/m/y",altFormats:"d/m/Y|d-m-y|d-m-Y|d/m|d-m|dm|dmy|dmY|d|Y-m-d"});}
 if(Ext.form.ComboBox){Ext.apply(Ext.form.ComboBox.prototype,{loadingText:"En cours de chargement...",valueNotFoundText:undefined});}
 if(Ext.form.VTypes){Ext.apply(Ext.form.VTypes,{emailText:'Ce champ doit contenir une adresse email au format: "usager@xxxxxxxxxxx"',urlText:'Ce champ doit contenir une URL au format suivant: "http:/'+'/www.domaine.com"',alphaText:'Ce champ ne peut contenir que des lettres et le caractère souligné (_)',alphanumText:'Ce champ ne peut contenir que des caractères alphanumériques ainsi que le caractère souligné (_)'});}
 if(Ext.form.HtmlEditor){Ext.apply(Ext.form.HtmlEditor.prototype,{createLinkText:"Veuillez entrer l'URL pour ce lien:",buttonTips:{bold:{title:'Gras (Ctrl+B)',text:'Met le texte sélectionné en gras.',cls:'x-html-editor-tip'},italic:{title:'Italique (Ctrl+I)',text:'Met le texte sélectionné en italique.',cls:'x-html-editor-tip'},underline:{title:'Souligné (Ctrl+U)',text:'Souligne le texte sélectionné.',cls:'x-html-editor-tip'},increasefontsize:{title:'Agrandir la police',text:'Augmente la taille de la police.',cls:'x-html-editor-tip'},decreasefontsize:{title:'Réduire la police',text:'Réduit la taille de la police.',cls:'x-html-editor-tip'},backcolor:{title:'Couleur de surbrillance',text:'Modifie la couleur de fond du texte sélectionné.',cls:'x-html-editor-tip'},forecolor:{title:'Couleur de police',text:'Modifie la couleur du texte sélectionné.',cls:'x-html-editor-tip'},justifyleft:{title:'Aligner à gauche',text:'Aligne le texte à gauche.',cls:'x-html-editor-tip'},justifycenter:{title:'Centrer',text:'Centre le texte.',cls:'x-html-editor-tip'},justifyright:{title:'Aligner à droite',text:'Aligner le texte à droite.',cls:'x-html-editor-tip'},insertunorderedlist:{title:'Liste à puce',text:'Démarre une liste à puce.',cls:'x-html-editor-tip'},insertorderedlist:{title:'Liste numérotée',text:'Démarre une liste numérotée.',cls:'x-html-editor-tip'},createlink:{title:'Lien hypertexte',text:'Transforme en lien hypertexte.',cls:'x-html-editor-tip'},sourceedit:{title:'Code source',text:'Basculer en mode édition du code source.',cls:'x-html-editor-tip'}}});}
-if(Ext.form.TimeField){Ext.apply(Ext.form.TimeField.prototype,{minText:"L'heure de ce champ ne peut être antérieure au {0}",maxText:"L'heure de ce champ ne peut être postérieure au {0}",invalidText:"{0} n'est pas une heure valide",format:"H:i",altFormats:"g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|h a|g a|g A|gi|hi|Hi|gia|hia|g|H"});}
-if(Ext.form.CheckboxGroup){Ext.apply(Ext.form.TextField.prototype,{blankText:"Vous devez sélectionner au moins un item du groupe"});}
-if(Ext.form.RadioGroup){Ext.apply(Ext.form.RadioGroup.prototype,{blankText:"Vous devez sélectionner un choix"});}
-if(Ext.form.BasicForm){Ext.form.BasicForm.prototype.waitTitle="Veuillez patienter...";}
-if(Ext.grid.GridView){Ext.apply(Ext.grid.GridView.prototype,{sortAscText:"Tri croissant",sortDescText:"Tri décroissant",lockText:"Verrouiller la colonne",unlockText:"Déverrouiller la colonne",columnsText:"Colonnes"});}
+if(Ext.grid.GridView){Ext.apply(Ext.grid.GridView.prototype,{sortAscText:"Tri croissant",sortDescText:"Tri décroissant",columnsText:"Colonnes"});}
 if(Ext.grid.GroupingView){Ext.apply(Ext.grid.GroupingView.prototype,{emptyGroupText:'(Aucun)',groupByText:'Grouper par ce champ',showGroupsText:'Afficher par groupes'});}
 if(Ext.grid.PropertyColumnModel){Ext.apply(Ext.grid.PropertyColumnModel.prototype,{nameText:"Propriété",valueText:"Valeur",dateFormat:"d/m/Y"});}
-if(Ext.layout.BorderLayout&&Ext.layout.BorderLayout.SplitRegion){Ext.apply(Ext.layout.BorderLayout.SplitRegion.prototype,{splitTip:"Cliquer et glisser pour redimensionner le panneau.",collapsibleSplitTip:"Cliquer et glisser pour redimensionner le panneau. Double-cliquer pour le cacher."});}
\ No newline at end of file
+if(Ext.layout.BorderLayout&&Ext.layout.BorderLayout.SplitRegion){Ext.apply(Ext.layout.BorderLayout.SplitRegion.prototype,{splitTip:"Cliquer et glisser pour redimensionner le panneau.",collapsibleSplitTip:"Cliquer et glisser pour redimensionner le panneau. Double-cliquer pour le cacher."});}
+if(Ext.form.TimeField){Ext.apply(Ext.form.TimeField.prototype,{minText:"L'heure de ce champ ne peut être antérieure à {0}",maxText:"L'heure de ce champ ne peut être postérieure à {0}",invalidText:"{0} n'est pas une heure valide",format:"H:i",altFormats:"g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|h a|g a|g A|gi|hi|Hi|gia|hia|g|H"});}
+if(Ext.form.CheckboxGroup){Ext.apply(Ext.form.CheckboxGroup.prototype,{blankText:"Vous devez sélectionner au moins un élément dans ce groupe"});}
+if(Ext.form.RadioGroup){Ext.apply(Ext.form.RadioGroup.prototype,{blankText:"Vous devez sélectionner au moins un élément dans ce groupe"});}
\ No newline at end of file

Added: mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-pt_PT-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-pt_PT-min.js	                        (rev 0)
+++ mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-pt_PT-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -0,0 +1,29 @@
+/*
+ * Ext JS Library 3.0 Pre-alpha
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@xxxxxxxxx
+ * 
+ * http://extjs.com/license
+ */
+
+
+Ext.UpdateManager.defaults.indicatorText='<div class="loading-indicator">A carregar...</div>';if(Ext.View){Ext.View.prototype.emptyText="";}
+if(Ext.grid.GridPanel){Ext.grid.GridPanel.prototype.ddText="{0} linha(s) seleccionada(s)";}
+if(Ext.TabPanelItem){Ext.TabPanelItem.prototype.closeText="Fechar aba";}
+if(Ext.LoadMask){Ext.LoadMask.prototype.msg="A carregar...";}
+Date.monthNames=["Janeiro","Fevereiro","Mar&ccedil;o","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"];Date.getShortMonthName=function(month){return Date.monthNames[month].substring(0,3);};Date.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};Date.getMonthNumber=function(name){return Date.monthNumbers[name.substring(0,1).toUpperCase()+name.substring(1,3).toLowerCase()];};Date.dayNames=["Domingo","Segunda","Ter&ccedil;a","Quarta","Quinta","Sexta","Sabado"];Date.getShortDayName=function(day){return Date.dayNames[day].substring(0,3);};if(Ext.MessageBox){Ext.MessageBox.buttonText={ok:"OK",cancel:"Cancelar",yes:"Sim",no:"N&atilde;o"};}
+if(Ext.util.Format){Ext.util.Format.date=function(v,format){if(!v)return"";if(!(v instanceof Date))v=new Date(Date.parse(v));return v.dateFormat(format||"Y/m/d");};}
+if(Ext.DatePicker){Ext.apply(Ext.DatePicker.prototype,{todayText:"Hoje",minText:"A data &eacute; anterior ao m&iacute;nimo definido",maxText:"A data &eacute; posterior ao m�ximo definido",disabledDaysText:"",disabledDatesText:"",monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:'M&ecirc;s Seguinte (Control+Right)',prevText:'M&ecirc;s Anterior (Control+Left)',monthYearText:'Escolha um m&ecirc;s (Control+Up/Down ava&ccedil;ar/recuar anos)',todayTip:"{0} (barra de espa�o)",format:"y/m/d",okText:"*OK*",cancelText:"Cancelar",startDay:0});}
+if(Ext.PagingToolbar){Ext.apply(Ext.PagingToolbar.prototype,{beforePageText:"P&aacute;gina",afterPageText:"de {0}",firstText:"Primeira P&aacute;gina",prevText:"P&aacute;gina Anterior",nextText:"Pr%oacute;xima P&aacute;gina",lastText:"&Uacute;ltima P&aacute;gina",refreshText:"Recaregar",displayMsg:"A mostrar {0} - {1} de {2}",emptyMsg:'Sem dados para mostrar'});}
+if(Ext.form.Field){Ext.form.Field.prototype.invalidText="O valor deste campo &eacute; inv&aacute;lido";}
+if(Ext.form.TextField){Ext.apply(Ext.form.TextField.prototype,{minLengthText:"O comprimento m&iacute;nimo deste campo &eaute; {0}",maxLengthText:"O comprimento m&aacute;ximo deste campo &eaute; {0}",blankText:"Este campo &eacute; de preenchimento obrigat&oacute;rio",regexText:"",emptyText:null});}
+if(Ext.form.NumberField){Ext.apply(Ext.form.NumberField.prototype,{minText:"O valor m&iacute;nimo deste campo &eaute; {0}",maxText:"O valor m&aacute;ximo deste campo &eaute; {0}",nanText:"{0} n&atilde;o &eacute; um numero"});}
+if(Ext.form.DateField){Ext.apply(Ext.form.DateField.prototype,{disabledDaysText:"Desabilitado",disabledDatesText:"Desabilitado",minText:"A data deste campo deve ser posterior a {0}",maxText:"A data deste campo deve ser anterior a {0}",invalidText:"{0} n&atilde;o &eacute; uma data v&aacute;lida - deve estar no seguinte formato{1}",format:"y/m/d",altFormats:"m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d"});}
+if(Ext.form.ComboBox){Ext.apply(Ext.form.ComboBox.prototype,{loadingText:"A Carregar...",valueNotFoundText:undefined});}
+if(Ext.form.VTypes){Ext.apply(Ext.form.VTypes,{emailText:'Este campo deve ser um endere&ccedil;o de email no formato "utilizaor@xxxxxxxxxxx"',urlText:'Este campo deve ser um URL no formato "http:/'+'/www.dominio.com"',alphaText:'Este campo deve conter apenas letras e _',alphanumText:'Este campo deve conter apenas letras, numeros e _'});}
+if(Ext.form.HtmlEditor){Ext.apply(Ext.form.HtmlEditor.prototype,{createLinkText:'Indique o endere&ccedil;o do link:',buttonTips:{bold:{title:'Negrito (Ctrl+B)',text:'Transforma o texto em Negrito.',cls:'x-html-editor-tip'},italic:{title:'Italico (Ctrl+I)',text:'Transforma o texto em italico.',cls:'x-html-editor-tip'},underline:{title:'SUblinhar (Ctrl+U)',text:'Sublinha o texto.',cls:'x-html-editor-tip'},increasefontsize:{title:'Aumentar texto',text:'Aumenta o tamanho da fonte.',cls:'x-html-editor-tip'},decreasefontsize:{title:'Encolher texto',text:'Diminui o tamanho da fonte.',cls:'x-html-editor-tip'},backcolor:{title:'C&ocirc;r de fundo do texto',text:'Altera a c&ocirc;r de fundo do texto.',cls:'x-html-editor-tip'},forecolor:{title:'C&ocirc;r do texo',text:'Altera a a&ocirc;r do texo.',cls:'x-html-editor-tip'},justifyleft:{title:'ALinhar &agrave; esquerda',text:'ALinha o texto &agrave; esquerda.',cls:'x-html-editor-tip'},justifycenter:{title:'Centrar',text:'Centra o texto.',cls:'x-html-editor-tip'},justifyright:{title:'ALinhar &agrave; direita',text:'ALinha o texto &agravce; direita.',cls:'x-html-editor-tip'},insertunorderedlist:{title:'Lista',text:'Inicia uma lista.',cls:'x-html-editor-tip'},insertorderedlist:{title:'Lista Numerada',text:'Inicia uma lista numerada.',cls:'x-html-editor-tip'},createlink:{title:'Hyperlink',text:'Transforma o texto num hyperlink.',cls:'x-html-editor-tip'},sourceedit:{title:'Editar c&oacute;digo',text:'Alterar para o modo de edi&ccedil;&atilde;o de c&oacute;digo.',cls:'x-html-editor-tip'}}});}
+if(Ext.form.BasicForm){Ext.form.BasicForm.prototype.waitTitle="Por favor espere...";}
+if(Ext.grid.GridView){Ext.apply(Ext.grid.GridView.prototype,{sortAscText:"Ordena&ccedil;&atilde;o Crescente",sortDescText:"Ordena&ccedil;&atilde;o Decrescente",lockText:"Fixar Coluna",unlockText:"Libertar Coluna",columnsText:"Colunas"});}
+if(Ext.grid.GroupingView){Ext.apply(Ext.grid.GroupingView.prototype,{emptyGroupText:'(Nenhum)',groupByText:'Agrupar por este campo',showGroupsText:'Mostrar nos Grupos'});}
+if(Ext.grid.PropertyColumnModel){Ext.apply(Ext.grid.PropertyColumnModel.prototype,{nameText:"Nome",valueText:"Valor",dateFormat:"Y/j/m"});}
+if(Ext.layout.BorderLayout&&Ext.layout.BorderLayout.SplitRegion){Ext.apply(Ext.layout.BorderLayout.SplitRegion.prototype,{splitTip:"Arastar para redimensionar.",collapsibleSplitTip:"Arastar para redimensionar. DUplo clique para esconder"});}
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-tr-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-tr-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/locale/ext-lang-tr-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -8,21 +8,21 @@
 
 
 Ext.UpdateManager.defaults.indicatorText='<div class="loading-indicator">Yükleniyor ...</div>';if(Ext.View){Ext.View.prototype.emptyText="";}
-if(Ext.grid.GridPanel){Ext.grid.GridPanel.prototype.ddText="Şeçili satır sayısı : {0}";}
+if(Ext.grid.Grid){Ext.grid.Grid.prototype.ddText="Seçili satýr sayýsý : {0}";}
 if(Ext.TabPanelItem){Ext.TabPanelItem.prototype.closeText="Sekmeyi kapat";}
-if(Ext.form.Field){Ext.form.Field.prototype.invalidText="Bu alandaki değer geçersiz";}
+if(Ext.form.Field){Ext.form.Field.prototype.invalidText="Bu alandaki deðer geçersiz";}
 if(Ext.LoadMask){Ext.LoadMask.prototype.msg="Yükleniyor ...";}
-Date.monthNames=["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"];Date.getShortMonthName=function(month){return Date.monthNames[month].substring(0,3);};Date.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};Date.getMonthNumber=function(name){return Date.monthNumbers[name.substring(0,1).toUpperCase()+name.substring(1,3).toLowerCase()];};Date.dayNames=["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"];Date.shortDayNames=["Paz","Pzt","Sal","Çrş","Prş","Cum","Cmt"];Date.getShortDayName=function(day){return Date.shortDayNames[day];};if(Ext.MessageBox){Ext.MessageBox.buttonText={ok:"Tamam",cancel:"İptal",yes:"Evet",no:"Hayır"};}
+Date.monthNames=["Ocak","Þžubat","Mart","Nisan","Mayýs","Haziran","Temmuz","Aðustos","Eylül","Ekim","Kasým","Aralýk"];Date.getShortMonthName=function(month){return Date.monthNames[month].substring(0,3);};Date.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};Date.getMonthNumber=function(name){return Date.monthNumbers[name.substring(0,1).toUpperCase()+name.substring(1,3).toLowerCase()];};Date.dayNames=["Pazar","Pazartesi","Salý","LJarþŸamba","PerþŸembe","Cuma","Cumartesi"];Date.shortDayNames=["Paz","Pzt","Sal","ÇrþŸ","Prþ","Cum","Cmt"];Date.getShortDayName=function(day){return Date.shortDayNames[day];};if(Ext.MessageBox){Ext.MessageBox.buttonText={ok:"Tamam",cancel:"Ä°ptal",yes:"Evet",no:"Hayýr"};}
 if(Ext.util.Format){Ext.util.Format.date=function(v,format){if(!v)return"";if(!(v instanceof Date))v=new Date(Date.parse(v));return v.dateFormat(format||"d/m/Y");};}
-if(Ext.DatePicker){Ext.apply(Ext.DatePicker.prototype,{todayText:"Bugün",minText:"Bu tarih izin verilen en küçük tarihten daha önce",maxText:"Bu tarih izin verilen en büyük tarihten daha sonra",disabledDaysText:"",disabledDatesText:"",monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:'Gelecek Ay (Control+Right)',prevText:'Önceki Ay (Control+Left)',monthYearText:'Bir ay şeçiniz (Yılı artırmak/azaltmak için Control+Up/Down)',todayTip:"{0} (Boşluk Tuşu - Spacebar)",format:"d/m/Y",okText:"&#160;Tamam&#160;",cancelText:"İptal",startDay:1});}
-if(Ext.PagingToolbar){Ext.apply(Ext.PagingToolbar.prototype,{beforePageText:"Sayfa",afterPageText:" / {0}",firstText:"İlk Sayfa",prevText:"Önceki Sayfa",nextText:"Sonraki Sayfa",lastText:"Son Sayfa",refreshText:"Yenile",displayMsg:"Gösterilen {0} - {1} / {2}",emptyMsg:'Gösterilebilecek veri yok'});}
-if(Ext.form.TextField){Ext.apply(Ext.form.TextField.prototype,{minLengthText:"Girilen verinin uzunluğu en az {0} olabilir",maxLengthText:"Girilen verinin uzunluğu en fazla {0} olabilir",blankText:"Bu alan boş bırakılamaz",regexText:"",emptyText:null});}
-if(Ext.form.NumberField){Ext.apply(Ext.form.NumberField.prototype,{minText:"En az {0} girilebilir",maxText:"En çok {0} girilebilir",nanText:"{0} geçersiz bir sayıdır"});}
-if(Ext.form.DateField){Ext.apply(Ext.form.DateField.prototype,{disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"Bu tarih, {0} tarihinden daha sonra olmalıdır",maxText:"Bu tarih, {0} tarihinden daha önce olmalıdır",invalidText:"{0} geçersiz bir tarihdir - tarih formatı {1} şeklinde olmalıdır",format:"d/m/Y",altFormats:"d.m.y|d.m.Y|d/m/y|d-m-Y|d-m-y|d.m|d/m|d-m|dm|dmY|dmy|d|Y.m.d|Y-m-d|Y/m/d"});}
+if(Ext.DatePicker){Ext.apply(Ext.DatePicker.prototype,{todayText:"Bugün",minText:"Bu tarih izin verilen en küçük tarihten daha önce",maxText:"Bu tarih izin verilen en büyük tarihten daha sonra",disabledDaysText:"",disabledDatesText:"",monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:'Gelecek Ay (Control+Right)',prevText:'Önceki Ay (Control+Left)',monthYearText:'Bir ay sŸeçiniz (Yýlý artýrmak/azaltmak için Control+Up/Down)',todayTip:"{0} (BoþŸluk TuþŸu - Spacebar)",format:"d/m/Y",okText:"&#160;Tamam&#160;",cancelText:"Ä°ptal",startDay:1});}
+if(Ext.PagingToolbar){Ext.apply(Ext.PagingToolbar.prototype,{beforePageText:"Sayfa",afterPageText:" / {0}",firstText:"Ä°lk Sayfa",prevText:"Önceki Sayfa",nextText:"Sonraki Sayfa",lastText:"Son Sayfa",refreshText:"Yenile",displayMsg:"Gösterilen {0} - {1} / {2}",emptyMsg:'Gösterilebilecek veri yok'});}
+if(Ext.form.TextField){Ext.apply(Ext.form.TextField.prototype,{minLengthText:"Girilen verinin uzunluðu en az {0} olabilir",maxLengthText:"Girilen verinin uzunluðu en fazla {0} olabilir",blankText:"Bu alan boþŸ býrakýlamaz",regexText:"",emptyText:null});}
+if(Ext.form.NumberField){Ext.apply(Ext.form.NumberField.prototype,{minText:"En az {0} girilebilir",maxText:"En çok {0} girilebilir",nanText:"{0} geçersiz bir sayýdýr"});}
+if(Ext.form.DateField){Ext.apply(Ext.form.DateField.prototype,{disabledDaysText:"Disabled",disabledDatesText:"Disabled",minText:"Bu tarih, {0} tarihinden daha sonra olmalýdýr",maxText:"Bu tarih, {0} tarihinden daha önce olmalýdýr",invalidText:"{0} geçersiz bir tarihdir - tarih formatý {1} þŸeklinde olmalýdýr",format:"d/m/Y",altFormats:"d.m.y|d.m.Y|d/m/y|d-m-Y|d-m-y|d.m|d/m|d-m|dm|dmY|dmy|d|Y.m.d|Y-m-d|Y/m/d"});}
 if(Ext.form.ComboBox){Ext.apply(Ext.form.ComboBox.prototype,{loadingText:"Yükleniyor ...",valueNotFoundText:undefined});}
-if(Ext.form.VTypes){Ext.apply(Ext.form.VTypes,{emailText:'Bu alan "user@xxxxxxxxxx" şeklinde elektronik posta formatında olmalıdır',urlText:'Bu alan "http://www.domain.com"; şeklinde URL adres formatında olmalıdır',alphaText:'Bu alan sadece harf ve _ içermeli',alphanumText:'Bu alan sadece harf, sayı ve _ içermeli'});}
-if(Ext.form.HtmlEditor){Ext.apply(Ext.form.HtmlEditor.prototype,{createLinkText:'Lütfen bu bağlantı için gerekli URL adresini giriniz:',buttonTips:{bold:{title:'Kalın(Bold) (Ctrl+B)',text:'Şeçili yazıyı kalın yapar.',cls:'x-html-editor-tip'},italic:{title:'İtalik(Italic) (Ctrl+I)',text:'Şeçili yazıyı italik yapar.',cls:'x-html-editor-tip'},underline:{title:'Alt Çizgi(Underline) (Ctrl+U)',text:'Şeçili yazının altını çizer.',cls:'x-html-editor-tip'},increasefontsize:{title:'Fontu büyült',text:'Yazı fontunu büyütür.',cls:'x-html-editor-tip'},decreasefontsize:{title:'Fontu küçült',text:'Yazı fontunu küçültür.',cls:'x-html-editor-tip'},backcolor:{title:'Arka Plan Rengi',text:'Seçili yazının arka plan rengini değiştir.',cls:'x-html-editor-tip'},forecolor:{title:'Yazı Rengi',text:'Seçili yazının rengini değiştir.',cls:'x-html-editor-tip'},justifyleft:{title:'Sola Daya',text:'Yazıyı sola daya.',cls:'x-html-editor-tip'},justifycenter:{title:'Ortala',text:'Yazıyı editörde ortala.',cls:'x-html-editor-tip'},justifyright:{title:'Sağa daya',text:'Yazıyı sağa daya.',cls:'x-html-editor-tip'},insertunorderedlist:{title:'Noktalı Liste',text:'Noktalı listeye başla.',cls:'x-html-editor-tip'},insertorderedlist:{title:'Numaralı Liste',text:'Numaralı lisyeye başla.',cls:'x-html-editor-tip'},createlink:{title:'Web Adresi(Hyperlink)',text:'Seçili yazıyı web adresi(hyperlink) yap.',cls:'x-html-editor-tip'},sourceedit:{title:'Kaynak kodu Düzenleme',text:'Kaynak kodu düzenleme moduna geç.',cls:'x-html-editor-tip'}}});}
-if(Ext.grid.GridView){Ext.apply(Ext.grid.GridView.prototype,{sortAscText:"Artan sırada sırala",sortDescText:"Azalan sırada sırala",lockText:"Kolonu kilitle",unlockText:"Kolon kilidini kaldır",columnsText:"Kolonlar"});}
+if(Ext.form.VTypes){Ext.form.VTypes["emailText"]='Bu alan "user@xxxxxxxxxx" þŸeklinde elektronik posta formatýnda olmalýdýr';Ext.form.VTypes["urlText"]='Bu alan "http://www.domain.com"; þŸeklinde URL adres formatýnda olmalýdýr';Ext.form.VTypes["alphaText"]='Bu alan sadece harf ve _ içermeli';Ext.form.VTypes["alphanumText"]='Bu alan sadece harf, sayý ve _ içermeli';}
+if(Ext.form.HtmlEditor){Ext.apply(Ext.form.HtmlEditor.prototype,{createLinkText:'Lütfen bu baðlantý için gerekli URL adresini giriniz:',buttonTips:{bold:{title:'Kalýn(Bold) (Ctrl+B)',text:'Þžeçili yazýyý kalýn yapar.',cls:'x-html-editor-tip'},italic:{title:'Ä°talik(Italic) (Ctrl+I)',text:'Þžeçili yazýyý italik yapar.',cls:'x-html-editor-tip'},underline:{title:'Alt Çizgi(Underline) (Ctrl+U)',text:'Þžeçili yazýnýn altýný çizer.',cls:'x-html-editor-tip'},increasefontsize:{title:'Fontu büyült',text:'Yazý fontunu büyütür.',cls:'x-html-editor-tip'},decreasefontsize:{title:'Fontu küçült',text:'Yazý fontunu küçültür.',cls:'x-html-editor-tip'},backcolor:{title:'Arka Plan Rengi',text:'Seçili yazýnýn arka plan rengini deðiþŸtir.',cls:'x-html-editor-tip'},forecolor:{title:'Yazý Rengi',text:'Seçili yazýnýn rengini deðiþŸtir.',cls:'x-html-editor-tip'},justifyleft:{title:'Sola Daya',text:'Yazýyý sola daya.',cls:'x-html-editor-tip'},justifycenter:{title:'Ortala',text:'Yazýyý editörde ortala.',cls:'x-html-editor-tip'},justifyright:{title:'Saða daya',text:'Yazýyý saða daya.',cls:'x-html-editor-tip'},insertunorderedlist:{title:'Noktalý Liste',text:'Noktalý listeye baþŸla.',cls:'x-html-editor-tip'},insertorderedlist:{title:'Numaralý Liste',text:'Numaralý lisyeye baþŸla.',cls:'x-html-editor-tip'},createlink:{title:'Web Adresi(Hyperlink)',text:'Seçili yazýyý web adresi(hyperlink) yap.',cls:'x-html-editor-tip'},sourceedit:{title:'Kaynak kodu Düzenleme',text:'Kaynak kodu düzenleme moduna geç.',cls:'x-html-editor-tip'}}});}
+if(Ext.grid.GridView){Ext.apply(Ext.grid.GridView.prototype,{sortAscText:"Artan sýrada sýrala",sortDescText:"Azalan sýrada sýrala",lockText:"Kolonu kilitle",unlockText:"Kolon kilidini kaldýr",columnsText:"Kolonlar"});}
 if(Ext.grid.GroupingView){Ext.apply(Ext.grid.GroupingView.prototype,{emptyGroupText:'(Yok)',groupByText:'Bu Alana Göre Grupla',showGroupsText:'Gruplar Halinde Göster'});}
-if(Ext.grid.PropertyColumnModel){Ext.apply(Ext.grid.PropertyColumnModel.prototype,{nameText:"Ad",valueText:"Değer",dateFormat:"d/m/Y"});}
-if(Ext.layout.BorderLayout&&Ext.layout.BorderLayout.SplitRegion){Ext.apply(Ext.layout.BorderLayout.SplitRegion.prototype,{splitTip:"Yeniden boyutlandırmak için sürükle.",collapsibleSplitTip:"Yeniden boyutlandırmak için sürükle. Saklamak için çift tıkla."});}
\ No newline at end of file
+if(Ext.grid.PropertyColumnModel){Ext.apply(Ext.grid.PropertyColumnModel.prototype,{nameText:"Ad",valueText:"Deðer",dateFormat:"d/m/Y"});}
+if(Ext.layout.BorderLayout.SplitRegion){Ext.apply(Ext.layout.BorderLayout.SplitRegion.prototype,{splitTip:"Yeniden boyutlandýrmak için sürükle.",collapsibleSplitTip:"Yeniden boyutlandýrmak için sürükle. Saklamak için çift týkla."});}
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/util/ClickRepeater-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/util/ClickRepeater-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/util/ClickRepeater-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -11,7 +11,7 @@
 {this.el=Ext.get(el);this.el.unselectable();Ext.apply(this,config);this.addEvents("mousedown","click","mouseup");this.el.on("mousedown",this.handleMouseDown,this);if(this.preventDefault||this.stopDefault){this.el.on("click",function(e){if(this.preventDefault){e.preventDefault();}
 if(this.stopDefault){e.stopEvent();}},this);}
 if(this.handler){this.on("click",this.handler,this.scope||this);}
-Ext.util.ClickRepeater.superclass.constructor.call(this);};Ext.extend(Ext.util.ClickRepeater,Ext.util.Observable,{interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,handleMouseDown:function(){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass);}
+Ext.util.ClickRepeater.superclass.constructor.call(this);};Ext.extend(Ext.util.ClickRepeater,Ext.util.Observable,{interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,destroy:function(){Ext.destroy(this.el);this.purgeListeners();},handleMouseDown:function(){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass);}
 this.mousedownTime=new Date();Ext.getDoc().on("mouseup",this.handleMouseUp,this);this.el.on("mouseout",this.handleMouseOut,this);this.fireEvent("mousedown",this);this.fireEvent("click",this);if(this.accelerate){this.delay=400;}
 this.timer=this.click.defer(this.delay||this.interval,this);},click:function(){this.fireEvent("click",this);this.timer=this.click.defer(this.accelerate?this.easeOutExpo(this.mousedownTime.getElapsed(),400,-390,12000):this.interval,this);},easeOutExpo:function(t,b,c,d){return(t==d)?b+c:c*(-Math.pow(2,-10*t/d)+1)+b;},handleMouseOut:function(){clearTimeout(this.timer);if(this.pressClass){this.el.removeClass(this.pressClass);}
 this.el.on("mouseover",this.handleMouseReturn,this);},handleMouseReturn:function(){this.el.un("mouseover",this.handleMouseReturn,this);if(this.pressClass){this.el.addClass(this.pressClass);}

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/util/Date-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,59 +7,35 @@
  */
 
 
-(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++;Date.formatFunctions[format]=funcName;var code="Date.prototype."+funcName+" = function(){return ";var special=false;var ch='';for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
+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++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code="Date."+funcName+" = function(input){\n"
-+"var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;\n"
-+"input = String(input);\n"
-+"d = new Date();\n"
-+"y = d.getFullYear();\n"
-+"m = d.getMonth();\n"
-+"d = d.getDate();\n"
-+"var results = input.match(Date.parseRegexes["+regexNum+"]);\n"
-+"if (results && results.length > 0) {";var regex="";var special=false;var ch='';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){\n"
-+"v = new Date(u * 1000);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){\n"
-+"v = new Date(y, m, d, h, i, s, ms);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){\n"
-+"v = new Date(y, m, d, h, i, s);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){\n"
-+"v = new Date(y, m, d, h, i);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){\n"
-+"v = new Date(y, m, d, h);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0){\n"
-+"v = new Date(y, m, d);\n"
-+"}else if (y >= 0 && m >= 0){\n"
-+"v = new Date(y, m);\n"
-+"}else if (y >= 0){\n"
-+"v = new Date(y);\n"
-+"}\n}\nreturn (v && (z || o))?"
+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;\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"
++" 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=$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"
 +"if (h == 12) { h = 0; }\n"
 +"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"},g:function(){return $f("G");},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},h:function(){return $f("H");},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1);","var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);","var mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+\-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1);","var hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60);","var mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+\-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,4}"},Z:{g:1,c:"z = results[{0}] * 1;\n"
-+"z = (-43200 <= z && z <= 50400)? z : null;\n",s:"([+\-]?\\d{1,5})"},c:function(){var calc=[];var arr=[$f("Y",1),$f("m",2),$f("d",3),$f("h",4),$f("i",5),$f("s",6),{c:"ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:"if(results[9] == 'Z'){\no = 0;\n}else{\n"+$f("P",9).c+"\n}"}];for(var i=0,l=arr.length;i<l;++i){calc.push(arr[i].c);}
++"z = (-43200 <= z && z <= 50400)? z : null;\n",s:"([+\-]?\\d{1,5})"},c:function(){var calc=[],arr=[$f("Y",1),$f("m",2),$f("d",3),$f("h",4),$f("i",5),$f("s",6),{c:"ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[9] == 'Z'){","z = 0;","}else{",$f("P",9).c,"}"].join('\n')}];for(var i=0,l=arr.length;i<l;++i){calc.push(arr[i].c);}
 return{g:1,c:calc.join(""),s:arr[0].s+"-"+arr[1].s+"-"+arr[2].s+"T"+arr[3].s+":"+arr[4].s+":"+arr[5].s
 +"((\.|,)\\d+)?"
-+"("+$f("P",null).s+"|Z)"}},U:{g:1,c:"u = parseInt(results[{0}], 10);\n",s:"(-?\\d+)"}}});}());Ext.override(Date,{dateFormat:function(format){if(Date.formatFunctions[format]==null){Date.createNewFormat(format);}
++"(Z|([+\-]\\d{2}:\\d{2}))"}},U:{g:1,c:"u = parseInt(results[{0}], 10);\n",s:"(-?\\d+)"}}});}());Ext.override(Date,{dateFormat:function(format){if(Date.formatFunctions[format]==null){Date.createNewFormat(format);}
 var func=Date.formatFunctions[format];return this[func]();},getTimezone:function(){return this.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/,"$1$2").replace(/[^A-Z]/g,"");},getGMTOffset:function(colon){return(this.getTimezoneOffset()>0?"-":"+")
-+String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset()/60)),2,"0")
++String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")
 +(colon?":":"")
 +String.leftPad(Math.abs(this.getTimezoneOffset()%60),2,"0");},getDayOfYear:function(){var num=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var i=0;i<this.getMonth();++i){num+=Date.daysInMonth[i];}
-return num+this.getDate()-1;},getWeekOfYear:function(){var ms1d=864e5;var ms7d=7*ms1d;var DC3=Date.UTC(this.getFullYear(),this.getMonth(),this.getDate()+3)/ms1d;var AWN=Math.floor(DC3/7);var Wyr=new Date(AWN*ms7d).getUTCFullYear();return AWN-Math.floor(Date.UTC(Wyr,0,7)/ms7d)+1;},isLeapYear:function(){var year=this.getFullYear();return!!((year&3)==0&&(year%100||(year%400==0&&year)));},getFirstDayOfMonth:function(){var day=(this.getDay()-(this.getDate()-1))%7;return(day<0)?(day+7):day;},getLastDayOfMonth:function(){var day=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(day<0)?(day+7):day;},getFirstDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),1);},getLastDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth());},getDaysInMonth:function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];},getSuffix:function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}},clone:function(){return new Date(this.getTime());},clearTime:function(clone){if(clone){return this.clone().clearTime();}
+return num+this.getDate()-1;},getWeekOfYear:function(){var ms1d=864e5,ms7d=7*ms1d;return function(){var DC3=Date.UTC(this.getFullYear(),this.getMonth(),this.getDate()+3)/ms1d,AWN=Math.floor(DC3/7),Wyr=new Date(AWN*ms7d).getUTCFullYear();return AWN-Math.floor(Date.UTC(Wyr,0,7)/ms7d)+1;}}(),isLeapYear:function(){var year=this.getFullYear();return!!((year&3)==0&&(year%100||(year%400==0&&year)));},getFirstDayOfMonth:function(){var day=(this.getDay()-(this.getDate()-1))%7;return(day<0)?(day+7):day;},getLastDayOfMonth:function(){var day=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(day<0)?(day+7):day;},getFirstDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),1);},getLastDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth());},getDaysInMonth:function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];},getSuffix:function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}},clone:function(){return new Date(this.getTime());},clearTime:function(clone){if(clone){return this.clone().clearTime();}
 this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;},add:function(interval,value){var d=this.clone();if(!interval||value===0)return d;switch(interval.toLowerCase()){case Date.MILLI:d.setMilliseconds(this.getMilliseconds()+value);break;case Date.SECOND:d.setSeconds(this.getSeconds()+value);break;case Date.MINUTE:d.setMinutes(this.getMinutes()+value);break;case Date.HOUR:d.setHours(this.getHours()+value);break;case Date.DAY:d.setDate(this.getDate()+value);break;case Date.MONTH:var day=this.getDate();if(day>28){day=Math.min(day,this.getFirstDateOfMonth().add('mo',value).getLastDateOfMonth().getDate());}
 d.setDate(day);d.setMonth(this.getMonth()+value);break;case Date.YEAR:d.setFullYear(this.getFullYear()+value);break;}
 return d;},between:function(start,end){var t=this.getTime();return start.getTime()<=t&&t<=end.getTime();}});Date.prototype.format=Date.prototype.dateFormat;if(Ext.isSafari){Date.brokenSetMonth=Date.prototype.setMonth;Date.prototype.setMonth=function(num){if(num<=-1){var n=Math.ceil(-num);var back_year=Math.ceil(n/12);var month=(n%12)?12-n%12:0;this.setFullYear(this.getFullYear()-back_year);return Date.brokenSetMonth.call(this,month);}else{return Date.brokenSetMonth.apply(this,arguments);}};}
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/util/Format-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/util/Format-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/util/Format-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -15,10 +15,11 @@
 return v.dateFormat(format||"m/d/Y");},dateRenderer:function(format){return function(v){return Ext.util.Format.date(v,format);};},stripTagsRE:/<\/?[^>]+>/gi,stripTags:function(v){return!v?v:String(v).replace(this.stripTagsRE,"");},stripScriptsRe:/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,stripScripts:function(v){return!v?v:String(v).replace(this.stripScriptsRe,"");},fileSize:function(size){if(size<1024){return size+" bytes";}else if(size<1048576){return(Math.round(((size*10)/1024))/10)+" KB";}else{return(Math.round(((size*10)/1048576))/10)+" MB";}},math:function(){var fns={};return function(v,a){if(!fns[a]){fns[a]=new Function('v','return v '+a+';');}
 return fns[a](v);}}(),number:function(v,format){if(!format){return v;}
 v*=1;if(typeof v!='number'||isNaN(v)){return'';}
-var hasComma=-1<format.indexOf(','),psplit=format.replace(/[^\d\.]/g,'').split('.');if(1<psplit.length){v=v.toFixed(psplit[1].length);}
+var comma=',';var dec='.';var i18n=false;if(format.substr(format.length-2)=='/i'){format=format.substr(0,format.length-2);i18n=true;comma='.';dec=',';}
+var hasComma=format.indexOf(comma)!=-1,psplit=(i18n?format.replace(/[^\d\,]/g,''):format.replace(/[^\d\.]/g,'')).split(dec);if(1<psplit.length){v=v.toFixed(psplit[1].length);}
 else if(2<psplit.length){throw('NumberFormatException: invalid format, formats should have no more than 1 period: '+format);}
 else{v=v.toFixed(0);}
 var fnum=v.toString();if(hasComma){psplit=fnum.split('.');var cnum=psplit[0],parr=[],j=cnum.length,m=Math.floor(j/3),n=cnum.length%3||3;for(var i=0;i<j;i+=n){if(i!=0){n=3;}
 parr[parr.length]=cnum.substr(i,n);m-=1;}
-fnum=parr.join(',');if(psplit[1]){fnum+='.'+psplit[1];}}
+fnum=parr.join(comma);if(psplit[1]){fnum+=dec+psplit[1];}}
 return format.replace(/[\d,?\.?]+/,fnum);},numberRenderer:function(format){return function(v){return Ext.util.Format.number(v,format);};},plural:function(v,s,p){return v+' '+(v==1?s:(p?p:s+'s'));}}}();
\ No newline at end of file

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/util/History-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -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/util/Observable-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/util/Observable-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/util/Observable-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,7 +7,11 @@
  */
 
 
-Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners;}};Ext.util.Observable.prototype={fireEvent:function(){if(this.eventsSuspended===true){if(this.suspendedEventsQueue){this.suspendedEventsQueue.push(arguments);}}else{var ce=this.events[arguments[0].toLowerCase()];if(typeof ce=="object"){return ce.fire.apply(ce,Array.prototype.slice.call(arguments,1));}}
+Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners;}
+if(!this.events){this.events={};}};Ext.util.Observable.prototype={fireEvent:function(){var a=Array.prototype.slice.call(arguments,0);var ename=a[0];if(ename===true){a.shift();var c=this;while(c){if(c.fireEvent.apply(c,a)===false){return false;}
+c=c.getBubbleTarget?c.getBubbleTarget():null;}
+return true;}
+if(this.eventsSuspended===true){var q=this.suspendedEventsQueue;if(q){q[q.length]=a;}}else{var ce=this.events[ename.toLowerCase()];if(typeof ce=="object"){a.shift();return ce.fire.apply(ce,a);}}
 return true;},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(eventName,fn,scope,o){if(typeof eventName=="object"){o=eventName;for(var e in o){if(this.filterOptRe.test(e)){continue;}
 if(typeof o[e]=="function"){this.addListener(e,o[e],o.scope,o);}else{this.addListener(e,o[e].fn,o[e].scope,o[e]);}}
 return;}
@@ -22,7 +26,8 @@
 for(var i=0,len=e.after.length;i<len;i++){makeCall(e.after[i].fn,e.after[i].scope,args);if(cancel){return returnValue;}}
 return returnValue;};}
 return e;},beforeMethod:function(method,fn,scope){var e=this.getMethodEvent(method);e.before.push({fn:fn,scope:scope});},afterMethod:function(method,fn,scope){var e=this.getMethodEvent(method);e.after.push({fn:fn,scope:scope});},removeMethodListener:function(method,fn,scope){var e=this.getMethodEvent(method);for(var i=0,len=e.before.length;i<len;i++){if(e.before[i].fn==fn&&e.before[i].scope==scope){e.before.splice(i,1);return;}}
-for(var i=0,len=e.after.length;i<len;i++){if(e.after[i].fn==fn&&e.after[i].scope==scope){e.after.splice(i,1);return;}}}};Ext.util.Observable.prototype.on=Ext.util.Observable.prototype.addListener;Ext.util.Observable.prototype.un=Ext.util.Observable.prototype.removeListener;Ext.util.Observable.capture=function(o,fn,scope){o.fireEvent=o.fireEvent.createInterceptor(fn,scope);};Ext.util.Observable.releaseCapture=function(o){o.fireEvent=Ext.util.Observable.prototype.fireEvent;};(function(){var createBuffered=function(h,o,scope){var task=new Ext.util.DelayedTask();return function(){task.delay(o.buffer,h,scope,Array.prototype.slice.call(arguments,0));};};var createSingle=function(h,e,fn,scope){return function(){e.removeListener(fn,scope);return h.apply(scope,arguments);};};var createDelayed=function(h,o,scope){return function(){var args=Array.prototype.slice.call(arguments,0);setTimeout(function(){h.apply(scope,args);},o.delay||10);};};Ext.util.Event=function(obj,name){this.name=name;this.obj=obj;this.listeners=[];};Ext.util.Event.prototype={addListener:function(fn,scope,options){scope=scope||this.obj;if(!this.isListening(fn,scope)){var l=this.createListener(fn,scope,options);if(!this.firing){this.listeners.push(l);}else{this.listeners=this.listeners.slice(0);this.listeners.push(l);}}},createListener:function(fn,scope,o){o=o||{};scope=scope||this.obj;var l={fn:fn,scope:scope,options:o};var h=fn;if(o.delay){h=createDelayed(h,o,scope);}
+for(var i=0,len=e.after.length;i<len;i++){if(e.after[i].fn==fn&&e.after[i].scope==scope){e.after.splice(i,1);return;}}}};Ext.util.Observable.prototype.on=Ext.util.Observable.prototype.addListener;Ext.util.Observable.prototype.un=Ext.util.Observable.prototype.removeListener;Ext.util.Observable.capture=function(o,fn,scope){o.fireEvent=o.fireEvent.createInterceptor(fn,scope);};Ext.util.Observable.releaseCapture=function(o){o.fireEvent=Ext.util.Observable.prototype.fireEvent;};(function(){var createBuffered=function(h,o,scope){var task=new Ext.util.DelayedTask();return function(){task.delay(o.buffer,h,scope,Array.prototype.slice.call(arguments,0));};};var createSingle=function(h,e,fn,scope){return function(){e.removeListener(fn,scope);return h.apply(scope,arguments);};};var createDelayed=function(h,o,scope){return function(){var args=Array.prototype.slice.call(arguments,0);setTimeout(function(){h.apply(scope,args);},o.delay||10);};};var createTargeted=function(h,o,scope){return function(){if(o.target==arguments[0]){h.apply(scope,Array.prototype.slice.call(arguments,0));}};};Ext.util.Event=function(obj,name){this.name=name;this.obj=obj;this.listeners=[];};Ext.util.Event.prototype={addListener:function(fn,scope,options){scope=scope||this.obj;if(!this.isListening(fn,scope)){var l=this.createListener(fn,scope,options);if(!this.firing){this.listeners.push(l);}else{this.listeners=this.listeners.slice(0);this.listeners.push(l);}}},createListener:function(fn,scope,o){o=o||{};scope=scope||this.obj;var l={fn:fn,scope:scope,options:o};var h=fn;if(o.target){h=createTargeted(h,o,scope);}
+if(o.delay){h=createDelayed(h,o,scope);}
 if(o.single){h=createSingle(h,this,fn,scope);}
 if(o.buffer){h=createBuffered(h,o,scope);}
 l.fireFn=h;return l;},findListener:function(fn,scope){scope=scope||this.obj;var ls=this.listeners;for(var i=0,len=ls.length;i<len;i++){var l=ls[i];if(l.fn==fn&&l.scope==scope){return i;}}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/Action-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/Action-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Action-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,5 +7,5 @@
  */
 
 
-Ext.Action=function(config){this.initialConfig=config;this.items=[];}
+Ext.Action=function(config){this.initialConfig=config;this.itemId=config.itemId=(config.itemId||config.id||Ext.id());this.items=[];}
 Ext.Action.prototype={isAction:true,setText:function(text){this.initialConfig.text=text;this.callEach('setText',[text]);},getText:function(){return this.initialConfig.text;},setIconClass:function(cls){this.initialConfig.iconCls=cls;this.callEach('setIconClass',[cls]);},getIconClass:function(){return this.initialConfig.iconCls;},setDisabled:function(v){this.initialConfig.disabled=v;this.callEach('setDisabled',[v]);},enable:function(){this.setDisabled(false);},disable:function(){this.setDisabled(true);},isDisabled:function(){return this.initialConfig.disabled;},setHidden:function(v){this.initialConfig.hidden=v;this.callEach('setVisible',[!v]);},show:function(){this.setHidden(false);},hide:function(){this.setHidden(true);},isHidden:function(){return this.initialConfig.hidden;},setHandler:function(fn,scope){this.initialConfig.handler=fn;this.initialConfig.scope=scope;this.callEach('setHandler',[fn,scope]);},each:function(fn,scope){Ext.each(this.items,fn,scope);},callEach:function(fnName,args){var cs=this.items;for(var i=0,len=cs.length;i<len;i++){cs[i][fnName].apply(cs[i],args);}},addComponent:function(comp){this.items.push(comp);comp.on('destroy',this.removeComponent,this);},removeComponent:function(comp){this.items.remove(comp);},execute:function(){this.initialConfig.handler.apply(this.initialConfig.scope||window,arguments);}};
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/Button-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/Button-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Button-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -12,15 +12,16 @@
 return[this.text||'&#160;',this.type,this.iconCls||'',cls,'x-btn-'+this.scale+' x-btn-icon-'+this.scale+'-'+this.iconAlign,this.getMenuClass()];},getMenuClass:function(){return this.menu?(this.arrowAlign!='bottom'?'x-btn-arrow':'x-btn-arrow-bottom'):'';},onRender:function(ct,position){if(!this.template){if(!Ext.Button.buttonTemplate){Ext.Button.buttonTemplate=new Ext.Template('<table cellspacing="0" class="x-btn {3}"><tbody class="{4}">','<tr><td class="x-btn-tl"><i>&#160;</i></td><td class="x-btn-tc"></td><td class="x-btn-tr"><i>&#160;</i></td></tr>','<tr><td class="x-btn-ml"><i>&#160;</i></td><td class="x-btn-mc"><em class="{5}" unselectable="on"><button class="x-btn-text {2}" type="{1}">{0}</button></em></td><td class="x-btn-mr"><i>&#160;</i></td></tr>','<tr><td class="x-btn-bl"><i>&#160;</i></td><td class="x-btn-bc"></td><td class="x-btn-br"><i>&#160;</i></td></tr>',"</tbody></table>");Ext.Button.buttonTemplate.compile();}
 this.template=Ext.Button.buttonTemplate;}
 var btn,targs=this.getTemplateArgs();if(position){btn=this.template.insertBefore(position,targs,true);}else{btn=this.template.append(ct,targs,true);}
-var btnEl=btn.child(this.buttonSelector);btnEl.on('focus',this.onFocus,this);btnEl.on('blur',this.onBlur,this);this.initButtonEl(btn,btnEl);Ext.ButtonToggleMgr.register(this);},initButtonEl:function(btn,btnEl){this.el=btn;if(this.icon){btnEl.setStyle('background-image','url('+this.icon+')');}
+var btnEl=btn.child(this.buttonSelector);btnEl.on('focus',this.onFocus,this);btnEl.on('blur',this.onBlur,this);this.initButtonEl(btn,btnEl);Ext.ButtonToggleMgr.register(this);},initButtonEl:function(btn,btnEl){this.el=btn;if(this.id){this.el.dom.id=this.el.id=this.id;}
+if(this.icon){btnEl.setStyle('background-image','url('+this.icon+')');}
 if(this.tabIndex!==undefined){btnEl.dom.tabIndex=this.tabIndex;}
 if(this.tooltip){if(typeof this.tooltip=='object'){Ext.QuickTips.register(Ext.apply({target:btnEl.id},this.tooltip));}else{btnEl.dom[this.tooltipType]=this.tooltip;}}
 if(this.handleMouseEvents){btn.on("mouseover",this.onMouseOver,this);btn.on("mousedown",this.onMouseDown,this);}
 if(this.menu){this.menu.on("show",this.onMenuShow,this);this.menu.on("hide",this.onMenuHide,this);}
-if(this.id){this.el.dom.id=this.el.id=this.id;}
 if(this.repeat){var repeater=new Ext.util.ClickRepeater(btn,typeof this.repeat=="object"?this.repeat:{});repeater.on("click",this.onClick,this);}
 btn.on(this.clickEvent,this.onClick,this);},afterRender:function(){Ext.Button.superclass.afterRender.call(this);if(Ext.isIE6){this.doAutoWidth.defer(1,this);}else{this.doAutoWidth();}},setIconClass:function(cls){if(this.el){this.el.child(this.buttonSelector).replaceClass(this.iconCls,cls);}
-this.iconCls=cls;},beforeDestroy:function(){if(this.rendered){var btn=this.el.child(this.buttonSelector);if(btn){btn.removeAllListeners();}}
+this.iconCls=cls;},beforeDestroy:function(){if(this.rendered){var btnEl=this.el.child(this.buttonSelector);if(btnEl){if(this.tooltip){Ext.QuickTips.unregister(btnEl);}
+btnEl.removeAllListeners();}}
 if(this.menu){Ext.destroy(this.menu);}},onDestroy:function(){if(this.rendered){Ext.ButtonToggleMgr.unregister(this);}},doAutoWidth:function(){if(this.el&&this.text&&typeof this.width=='undefined'){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var ib=this.el.child(this.buttonSelector);if(ib&&ib.getWidth()>20){ib.clip();ib.setWidth(Ext.util.TextMetrics.measure(ib,this.text).width+ib.getFrameWidth('lr'));}}
 if(this.minWidth){if(this.el.getWidth()<this.minWidth){this.el.setWidth(this.minWidth);}}}},setHandler:function(handler,scope){this.handler=handler;this.scope=scope;},setText:function(text){this.text=text;if(this.el){this.el.child("td.x-btn-mc "+this.buttonSelector).update(text);}
 this.doAutoWidth();},getText:function(){return this.text;},toggle:function(state){state=state===undefined?!this.pressed:state;if(state!=this.pressed){if(state){this.el.addClass("x-btn-pressed");this.pressed=true;this.fireEvent("toggle",this,true);}else{this.el.removeClass("x-btn-pressed");this.pressed=false;this.fireEvent("toggle",this,false);}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/ColorPalette-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/ColorPalette-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/ColorPalette-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,5 +7,5 @@
  */
 
 
-Ext.ColorPalette=function(config){Ext.ColorPalette.superclass.constructor.call(this,config);this.addEvents('select');if(this.handler){this.on("select",this.handler,this.scope,true);}};Ext.extend(Ext.ColorPalette,Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:'click',ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],onRender:function(container,position){var t=this.tpl||new Ext.XTemplate('<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>');var el=document.createElement("div");el.className=this.itemCls;t.overwrite(el,this.colors);container.dom.insertBefore(el,position);this.el=Ext.get(el);this.el.on(this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!='click'){this.el.on('click',Ext.emptyFn,this,{delegate:"a",preventDefault:true});}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var s=this.value;this.value=null;this.select(s);}},handleClick:function(e,t){e.preventDefault();if(!this.disabled){var c=t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(c.toUpperCase());}},select:function(color){color=color.replace("#","");if(color!=this.value||this.allowReselect){var el=this.el;if(this.value){el.child("a.color-"+this.value).removeClass("x-color-palette-sel");}
+Ext.ColorPalette=function(config){Ext.ColorPalette.superclass.constructor.call(this,config);this.addEvents('select');if(this.handler){this.on("select",this.handler,this.scope,true);}};Ext.extend(Ext.ColorPalette,Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:'click',ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],onRender:function(container,position){var t=this.tpl||new Ext.XTemplate('<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>');var el=document.createElement("div");el.id=this.getId();el.className=this.itemCls;t.overwrite(el,this.colors);container.dom.insertBefore(el,position);this.el=Ext.get(el);this.el.on(this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!='click'){this.el.on('click',Ext.emptyFn,this,{delegate:"a",preventDefault:true});}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var s=this.value;this.value=null;this.select(s);}},handleClick:function(e,t){e.preventDefault();if(!this.disabled){var c=t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(c.toUpperCase());}},select:function(color){color=color.replace("#","");if(color!=this.value||this.allowReselect){var el=this.el;if(this.value){el.child("a.color-"+this.value).removeClass("x-color-palette-sel");}
 el.child("a.color-"+color).addClass("x-color-palette-sel");this.value=color;this.fireEvent("select",this,color);}}});Ext.reg('colorpalette',Ext.ColorPalette);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/Component-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/Component-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Component-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -9,7 +9,7 @@
 
 Ext.Component=function(config){config=config||{};if(config.initialConfig){if(config.isAction){this.baseAction=config;}
 config=config.initialConfig;}else if(config.tagName||config.dom||typeof config=="string"){config={applyTo:config,id:config.id||config};}
-this.initialConfig=config;Ext.apply(this,config);this.addEvents('disable','enable','beforeshow','show','beforehide','hide','beforerender','render','beforedestroy','destroy','beforestaterestore','staterestore','beforestatesave','statesave');this.getId();Ext.ComponentMgr.register(this);Ext.Component.superclass.constructor.call(this);if(this.baseAction){this.baseAction.addComponent(this);}
+this.initialConfig=config;Ext.apply(this,config);this.addEvents('disable','enable','beforeshow','show','beforehide','hide','beforerender','render','afterrender','beforedestroy','destroy','beforestaterestore','staterestore','beforestatesave','statesave');this.getId();Ext.ComponentMgr.register(this);Ext.Component.superclass.constructor.call(this);if(this.baseAction){this.baseAction.addComponent(this);}
 this.initComponent();if(this.plugins){if(Ext.isArray(this.plugins)){for(var i=0,len=this.plugins.length;i<len;i++){this.plugins[i]=this.initPlugin(this.plugins[i]);}}else{this.plugins=this.initPlugin(this.plugins);}}
 if(this.stateful!==false){this.initState(config);}
 if(this.applyTo){this.applyToMarkup(this.applyTo);delete this.applyTo;}else if(this.renderTo){this.render(this.renderTo);delete this.renderTo;}};Ext.Component.AUTO_ID=1000;Ext.extend(Ext.Component,Ext.util.Observable,{disabledClass:"x-item-disabled",allowDomMove:true,autoShow:false,hideMode:'display',hideParent:false,hidden:false,disabled:false,rendered:false,ctype:"Ext.Component",actionMode:"el",getActionEl:function(){return this[this.actionMode];},initPlugin:function(p){if(p.ptype&&typeof p.init!='function'){p=Ext.ComponentMgr.createPlugin(p);}else if(typeof p=='string'){p=Ext.ComponentMgr.createPlugin({ptype:p});}
@@ -21,8 +21,11 @@
 if(this.style){this.el.applyStyles(this.style);delete this.style;}
 this.fireEvent("render",this);this.afterRender(this.container);if(this.hidden){this.hide();}
 if(this.disabled){this.disable();}
-if(this.stateful!==false){this.initStateEvents();}}
-return this;},initState:function(config){if(Ext.state.Manager){var state=Ext.state.Manager.get(this.stateId||this.id);if(state){if(this.fireEvent('beforestaterestore',this,state)!==false){this.applyState(state);this.fireEvent('staterestore',this,state);}}}},initStateEvents:function(){if(this.stateEvents){for(var i=0,e;e=this.stateEvents[i];i++){this.on(e,this.saveState,this,{delay:100});}}},applyState:function(state,config){if(state){Ext.apply(this,state);}},getState:function(){return null;},saveState:function(){if(Ext.state.Manager){var state=this.getState();if(this.fireEvent('beforestatesave',this,state)!==false){Ext.state.Manager.set(this.stateId||this.id,state);this.fireEvent('statesave',this,state);}}},applyToMarkup:function(el){this.allowDomMove=false;this.el=Ext.get(el);this.render(this.el.dom.parentNode);},addClass:function(cls){if(this.el){this.el.addClass(cls);}else{this.cls=this.cls?this.cls+' '+cls:cls;}},removeClass:function(cls){if(this.el){this.el.removeClass(cls);}else if(this.cls){this.cls=this.cls.split(' ').remove(cls).join(' ');}},onRender:function(ct,position){if(this.autoEl){if(typeof this.autoEl=='string'){this.el=document.createElement(this.autoEl);}else{var div=document.createElement('div');Ext.DomHelper.overwrite(div,this.autoEl);this.el=div.firstChild;}
+if(this.stateful!==false){this.initStateEvents();}
+this.initRef();this.fireEvent("afterrender",this);}
+return this;},initRef:function(){if(this.ref){var levels=this.ref.split('/');var last=levels.length,i=0;var t=this;while(i<last){if(t.ownerCt){t=t.ownerCt;}
+i++;}
+t[levels[--i]]=this;}},initState:function(config){if(Ext.state.Manager){var id=this.getStateId();if(id){var state=Ext.state.Manager.get(id);if(state){if(this.fireEvent('beforestaterestore',this,state)!==false){this.applyState(state);this.fireEvent('staterestore',this,state);}}}}},getStateId:function(){return this.stateId||((this.id.indexOf('ext-comp-')==0||this.id.indexOf('ext-gen')==0)?null:this.id);},initStateEvents:function(){if(this.stateEvents){for(var i=0,e;e=this.stateEvents[i];i++){this.on(e,this.saveState,this,{delay:100});}}},applyState:function(state,config){if(state){Ext.apply(this,state);}},getState:function(){return null;},saveState:function(){if(Ext.state.Manager){var id=this.getStateId();if(id){var state=this.getState();if(this.fireEvent('beforestatesave',this,state)!==false){Ext.state.Manager.set(id,state);this.fireEvent('statesave',this,state);}}}},applyToMarkup:function(el){this.allowDomMove=false;this.el=Ext.get(el);this.render(this.el.dom.parentNode);},addClass:function(cls){if(this.el){this.el.addClass(cls);}else{this.cls=this.cls?this.cls+' '+cls:cls;}},removeClass:function(cls){if(this.el){this.el.removeClass(cls);}else if(this.cls){this.cls=this.cls.split(' ').remove(cls).join(' ');}},onRender:function(ct,position){if(this.autoEl){if(typeof this.autoEl=='string'){this.el=document.createElement(this.autoEl);}else{var div=document.createElement('div');Ext.DomHelper.overwrite(div,this.autoEl);this.el=div.firstChild;}
 if(!this.el.id){this.el.id=this.getId();}}
 if(this.el){this.el=Ext.get(this.el);if(this.allowDomMove!==false){ct.dom.insertBefore(this.el.dom,position);}
 if(this.overCls){this.el.addClassOnOver(this.overCls);}}},getAutoCreate:function(){var cfg=typeof this.autoCreate=="object"?this.autoCreate:Ext.apply({},this.defaultAutoCreate);if(this.id&&!cfg.id){cfg.id=this.id;}
@@ -43,4 +46,4 @@
 return tc.xtypes;},findParentBy:function(fn){for(var p=this.ownerCt;(p!=null)&&!fn(p,this);p=p.ownerCt);return p||null;},findParentByType:function(xtype){return typeof xtype=='function'?this.findParentBy(function(p){return p.constructor===xtype;}):this.findParentBy(function(p){return p.constructor.xtype===xtype;});},getDomPositionEl:function(){return this.getPositionEl?this.getPositionEl():this.getEl();},mon:function(item,ename,fn,scope,opt){if(!this.mons){this.mons=[];this.on('beforedestroy',function(){for(var i=0,len=this.mons.length;i<len;i++){var m=this.mons[i];m.item.un(m.ename,m.fn,m.scope);}},this);}
 this.mons.push({item:item,ename:ename,fn:fn,scope:scope});item.on(ename,fn,scope,opt);},nextSibling:function(){if(this.ownerCt){var index=this.ownerCt.items.indexOf(this);if(index!=-1&&index+1<this.ownerCt.items.getCount()){return this.ownerCt.items.itemAt(index+1);}}
 return null;},previousSibling:function(){if(this.ownerCt){var index=this.ownerCt.items.indexOf(this);if(index>0){return this.ownerCt.items.itemAt(index-1);}}
-return null;}});Ext.reg('component',Ext.Component);
\ No newline at end of file
+return null;},getBubbleTarget:function(){return this.ownerCt;}});Ext.reg('component',Ext.Component);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/ComponentMgr-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/ComponentMgr-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/ComponentMgr-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,4 +7,4 @@
  */
 
 
-Ext.ComponentMgr=function(){var all=new Ext.util.MixedCollection();var types={};var ptypes={};return{register:function(c){all.add(c);},unregister:function(c){all.remove(c);},get:function(id){return all.get(id);},onAvailable:function(id,fn,scope){all.on("add",function(index,o){if(o.id==id){fn.call(scope||o,o);all.un("add",fn,scope);}});},all:all,registerType:function(xtype,cls){types[xtype]=cls;cls.xtype=xtype;},create:function(config,defaultType){return new types[config.xtype||defaultType](config);},registerPlugin:function(ptype,cls){ptypes[ptype]=cls;cls.ptype=ptype;},createPlugin:function(config,defaultType){return new ptypes[config.ptype||defaultType](config);}};}();Ext.reg=Ext.ComponentMgr.registerType;Ext.preg=Ext.ComponentMgr.registerPlugin;
\ No newline at end of file
+Ext.ComponentMgr=function(){var all=new Ext.util.MixedCollection();var types={};var ptypes={};return{register:function(c){all.add(c);},unregister:function(c){all.remove(c);},get:function(id){return all.get(id);},onAvailable:function(id,fn,scope){all.on("add",function(index,o){if(o.id==id){fn.call(scope||o,o);all.un("add",fn,scope);}});},all:all,registerType:function(xtype,cls){types[xtype]=cls;cls.xtype=xtype;},create:function(config,defaultType){return config.render?config:new types[config.xtype||defaultType](config);},registerPlugin:function(ptype,cls){ptypes[ptype]=cls;cls.ptype=ptype;},createPlugin:function(config,defaultType){return new ptypes[config.ptype||defaultType](config);}};}();Ext.reg=Ext.ComponentMgr.registerType;Ext.preg=Ext.ComponentMgr.registerPlugin;Ext.create=Ext.ComponentMgr.create;
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/Container-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/Container-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Container-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -15,20 +15,20 @@
 if(this.monitorResize===true){Ext.EventManager.onWindowResize(this.doLayout,this,[false]);}},getLayoutTarget:function(){return this.el;},getComponentId:function(comp){return comp.itemId||comp.id;},add:function(comp){if(!this.items){this.initItems();}
 var a=arguments,len=a.length;if(len>1){for(var i=0;i<len;i++){Ext.Container.prototype.add.call(this,a[i]);}
 return;}
-var c=this.lookupComponent(this.applyDefaults(comp));var pos=this.items.length;if(this.fireEvent('beforeadd',this,c,pos)!==false&&this.onBeforeAdd(c)!==false){this.items.add(c);c.ownerCt=this;this.fireEvent('add',this,c,pos);}
+var c=this.lookupComponent(this.applyDefaults(comp));var pos=this.items.length;if(this.fireEvent('beforeadd',this,c,pos)!==false&&this.onBeforeAdd(c)!==false){this.items.add(c);c.ownerCt=this;this.fireEvent(true,'add',this,c,pos);}
 return c;},insert:function(index,comp){if(!this.items){this.initItems();}
 var a=arguments,len=a.length;if(len>2){for(var i=len-1;i>=1;--i){this.insert(index,a[i]);}
 return;}
 var c=this.lookupComponent(this.applyDefaults(comp));if(c.ownerCt==this&&this.items.indexOf(c)<index){--index;}
-if(this.fireEvent('beforeadd',this,c,index)!==false&&this.onBeforeAdd(c)!==false){this.items.insert(index,c);c.ownerCt=this;this.fireEvent('add',this,c,index);}
+if(this.fireEvent('beforeadd',this,c,index)!==false&&this.onBeforeAdd(c)!==false){this.items.insert(index,c);c.ownerCt=this;this.fireEvent(true,'add',this,c,index);}
 return c;},applyDefaults:function(c){if(this.defaults){if(typeof c=='string'){c=Ext.ComponentMgr.get(c);Ext.apply(c,this.defaults);}else if(!c.events){Ext.applyIf(c,this.defaults);}else{Ext.apply(c,this.defaults);}}
 return c;},onBeforeAdd:function(item){if(item.ownerCt){item.ownerCt.remove(item,false);}
 if(this.hideBorders===true){item.border=(item.border===true);}},remove:function(comp,autoDestroy){var c=this.getComponent(comp);if(c&&this.fireEvent('beforeremove',this,c)!==false){this.items.remove(c);delete c.ownerCt;if(autoDestroy===true||(autoDestroy!==false&&this.autoDestroy)){c.destroy();}
 if(this.layout&&this.layout.activeItem==c){delete this.layout.activeItem;}
-this.fireEvent('remove',this,c);}
+this.fireEvent(true,'remove',this,c);}
 return c;},getComponent:function(comp){if(typeof comp=='object'){return comp;}
 return this.items.get(comp);},lookupComponent:function(comp){if(typeof comp=='string'){return Ext.ComponentMgr.get(comp);}else if(!comp.events){return this.createComponent(comp);}
-return comp;},createComponent:function(config){return Ext.ComponentMgr.create(config,this.defaultType);},doLayout:function(shallow){if(this.rendered&&this.layout){this.layout.layout();}
+return comp;},createComponent:function(config){return Ext.create(config,this.defaultType);},doLayout:function(shallow){if(this.rendered&&this.layout){this.layout.layout();}
 if(shallow!==false&&this.items){var cs=this.items.items;for(var i=0,len=cs.length;i<len;i++){var c=cs[i];if(c.doLayout){c.doLayout();}}}},getLayout:function(){if(!this.layout){var layout=new Ext.layout.ContainerLayout(this.layoutConfig);this.setLayout(layout);}
 return this.layout;},beforeDestroy:function(){if(this.items){Ext.destroy.apply(Ext,this.items.items);}
 if(this.monitorResize){Ext.EventManager.removeResizeListener(this.doLayout,this);}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/DatePicker-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/DatePicker-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/DatePicker-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -36,4 +36,4 @@
 if(ddMatch&&format){var fvalue=d.dateFormat(format);if(ddMatch.test(fvalue)){cell.title=ddText.replace("%0",fvalue);cell.className=" x-date-disabled";}}};var i=0;for(;i<startingPos;i++){textEls[i].innerHTML=(++prevStart);d.setDate(d.getDate()+1);cells[i].className="x-date-prevday";setCellClass(this,cells[i]);}
 for(;i<days;i++){var intDay=i-startingPos+1;textEls[i].innerHTML=(intDay);d.setDate(d.getDate()+1);cells[i].className="x-date-active";setCellClass(this,cells[i]);}
 var extraDays=0;for(;i<42;i++){textEls[i].innerHTML=(++extraDays);d.setDate(d.getDate()+1);cells[i].className="x-date-nextday";setCellClass(this,cells[i]);}
-this.mbtn.setText(this.monthNames[date.getMonth()]+" "+date.getFullYear());if(!this.internalRender){var main=this.el.dom.firstChild;var w=main.offsetWidth;this.el.setWidth(w+this.el.getBorderWidth("lr"));Ext.fly(main).setWidth(w);this.internalRender=true;if(Ext.isOpera&&!this.secondPass){main.rows[0].cells[1].style.width=(w-(main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth))+"px";this.secondPass=true;this.update.defer(10,this,[date]);}}},beforeDestroy:function(){if(this.rendered){Ext.destroy(this.mbtn,this.todayBtn);}}});Ext.reg('datepicker',Ext.DatePicker);
\ No newline at end of file
+this.mbtn.setText(this.monthNames[date.getMonth()]+" "+date.getFullYear());if(!this.internalRender){var main=this.el.dom.firstChild;var w=main.offsetWidth;this.el.setWidth(w+this.el.getBorderWidth("lr"));Ext.fly(main).setWidth(w);this.internalRender=true;if(Ext.isOpera&&!this.secondPass){main.rows[0].cells[1].style.width=(w-(main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth))+"px";this.secondPass=true;this.update.defer(10,this,[date]);}}},beforeDestroy:function(){if(this.rendered){Ext.destroy(this.leftClickRpt,this.rightClickRpt,this.monthPicker,this.eventEl,this.mbtn,this.todayBtn);}}});Ext.reg('datepicker',Ext.DatePicker);
\ No newline at end of file

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Editor-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -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);}
@@ -25,4 +27,4 @@
 this.fireEvent("startedit",this.boundEl,this.startValue);},deferredFocus:function(){if(this.editing){this.field.focus();}},cancelEdit:function(remainVisible){if(this.editing){var v=this.getValue();this.setValue(this.startValue);if(remainVisible!==true){this.hide();}
 this.fireEvent("canceledit",this,v,this.startValue);}},onBlur:function(){if(this.allowBlur!==true&&this.editing){this.completeEdit();}},onHide:function(){if(this.editing){this.completeEdit();return;}
 this.field.blur();if(this.field.collapse){this.field.collapse();}
-this.el.hide();if(this.hideEl!==false){this.boundEl.show();}},setValue:function(v){this.field.setValue(v);},getValue:function(){return this.field.getValue();},beforeDestroy:function(){this.field.destroy();this.field=null;}});Ext.reg('editor',Ext.Editor);
\ No newline at end of file
+this.el.hide();if(this.hideEl!==false){this.boundEl.show();}},setValue:function(v){this.field.setValue(v);},getValue:function(){return this.field.getValue();},beforeDestroy:function(){Ext.destroy(this.field);this.field=null;}});Ext.reg('editor',Ext.Editor);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/PagingToolbar-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/PagingToolbar-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/PagingToolbar-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -13,4 +13,5 @@
 this.cursor=(o.params&&o.params[this.paramNames.start])?o.params[this.paramNames.start]:0;var d=this.getPageData(),ap=d.activePage,ps=d.pages;this.afterTextItem.setText(String.format(this.afterPageText,d.pages));this.field.value=ap;this.first.setDisabled(ap==1);this.prev.setDisabled(ap==1);this.next.setDisabled(ap==ps);this.last.setDisabled(ap==ps);this.refresh.enable();this.updateInfo();this.fireEvent('change',this,d);},getPageData:function(){var total=this.store.getTotalCount();return{total:total,activePage:Math.ceil((this.cursor+this.pageSize)/this.pageSize),pages:total<this.pageSize?1:Math.ceil(total/this.pageSize)};},changePage:function(page){this.doLoad(((page-1)*this.pageSize).constrain(0,this.store.getTotalCount()));},onLoadError:function(){if(!this.rendered){return;}
 this.refresh.enable();},readPage:function(d){var v=this.field.value,pageNum;if(!v||isNaN(pageNum=parseInt(v,10))){this.field.value=d.activePage;return false;}
 return pageNum;},onPagingKeydown:function(e){var k=e.getKey(),d=this.getPageData(),pageNum;if(k==e.RETURN){e.stopEvent();pageNum=this.readPage(d);if(pageNum!==false){pageNum=Math.min(Math.max(1,pageNum),d.pages)-1;this.doLoad(pageNum*this.pageSize);}}else if(k==e.HOME||k==e.END){e.stopEvent();pageNum=k==e.HOME?1:d.pages;this.field.value=pageNum;}else if(k==e.UP||k==e.PAGEUP||k==e.DOWN||k==e.PAGEDOWN){e.stopEvent();if(pageNum=this.readPage(d)){var increment=e.shiftKey?10:1;if(k==e.DOWN||k==e.PAGEDOWN){increment*=-1;}
-pageNum+=increment;if(pageNum>=1&pageNum<=d.pages){this.field.value=pageNum;}}}},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable();}},doLoad:function(start){var o={},pn=this.paramNames;o[pn.start]=start;o[pn.limit]=this.pageSize;if(this.fireEvent('beforechange',this,o)!==false){this.store.load({params:o});}},onClick:function(button){var store=this.store;switch(button){case this.first:this.doLoad(0);break;case this.prev:this.doLoad(Math.max(0,this.cursor-this.pageSize));break;case this.next:this.doLoad(this.cursor+this.pageSize);break;case this.last:var total=store.getTotalCount();var extra=total%this.pageSize;var lastStart=extra?(total-extra):total-this.pageSize;this.doLoad(lastStart);break;case this.refresh:this.doLoad(this.cursor);break;}},unbind:function(store){store=Ext.StoreMgr.lookup(store);store.un("beforeload",this.beforeLoad,this);store.un("load",this.onLoad,this);store.un("loadexception",this.onLoadError,this);this.store=undefined;},bind:function(store){store=Ext.StoreMgr.lookup(store);store.on("beforeload",this.beforeLoad,this);store.on("load",this.onLoad,this);store.on("loadexception",this.onLoadError,this);this.store=store;this.paramNames.start=store.paramNames.start;this.paramNames.limit=store.paramNames.limit;}});})();Ext.reg('paging',Ext.PagingToolbar);
\ No newline at end of file
+pageNum+=increment;if(pageNum>=1&pageNum<=d.pages){this.field.value=pageNum;}}}},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable();}},doLoad:function(start){var o={},pn=this.paramNames;o[pn.start]=start;o[pn.limit]=this.pageSize;if(this.fireEvent('beforechange',this,o)!==false){this.store.load({params:o});}},onClick:function(button){var store=this.store;switch(button){case this.first:this.doLoad(0);break;case this.prev:this.doLoad(Math.max(0,this.cursor-this.pageSize));break;case this.next:this.doLoad(this.cursor+this.pageSize);break;case this.last:var total=store.getTotalCount();var extra=total%this.pageSize;var lastStart=extra?(total-extra):total-this.pageSize;this.doLoad(lastStart);break;case this.refresh:this.doLoad(this.cursor);break;}},unbind:function(store){store=Ext.StoreMgr.lookup(store);store.un("beforeload",this.beforeLoad,this);store.un("load",this.onLoad,this);store.un("loadexception",this.onLoadError,this);this.store=undefined;},bind:function(store){store=Ext.StoreMgr.lookup(store);store.on("beforeload",this.beforeLoad,this);store.on("load",this.onLoad,this);store.on("loadexception",this.onLoadError,this);this.store=store;this.paramNames.start=store.paramNames.start;this.paramNames.limit=store.paramNames.limit;},onDestroy:function(){if(this.store){this.unbind(this.store);}
+Ext.PagingToolbar.superclass.onDestroy.call(this);}});})();Ext.reg('paging',Ext.PagingToolbar);
\ No newline at end of file

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Panel-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,44 +7,51 @@
  */
 
 
-Ext.Panel=Ext.extend(Ext.Container,{baseCls:'x-panel',collapsedCls:'x-panel-collapsed',maskDisabled:true,animCollapse:Ext.enableFx,headerAsText:true,buttonAlign:'right',collapsed:false,collapseFirst:true,minButtonWidth:75,elements:'body',toolTarget:'header',collapseEl:'bwrap',slideAnchor:'t',disabledClass:'',deferHeight:true,expandDefaults:{duration:.25},collapseDefaults:{duration:.25},initComponent:function(){Ext.Panel.superclass.initComponent.call(this);this.addEvents('bodyresize','titlechange','collapse','expand','beforecollapse','beforeexpand','beforeclose','close','activate','deactivate');if(this.tbar){this.elements+=',tbar';if(typeof this.tbar=='object'){this.topToolbar=this.tbar;}
+Ext.Panel=Ext.extend(Ext.Container,{baseCls:'x-panel',collapsedCls:'x-panel-collapsed',maskDisabled:true,animCollapse:Ext.enableFx,headerAsText:true,buttonAlign:'right',collapsed:false,collapseFirst:true,minButtonWidth:75,elements:'body',toolTarget:'header',collapseEl:'bwrap',slideAnchor:'t',disabledClass:'',deferHeight:true,expandDefaults:{duration:.25},collapseDefaults:{duration:.25},initComponent:function(){Ext.Panel.superclass.initComponent.call(this);this.addEvents('bodyresize','titlechange','collapse','expand','beforecollapse','beforeexpand','beforeclose','close','activate','deactivate');if(this.unstyled){this.baseCls='x-plain';}
+if(this.tbar){this.elements+=',tbar';if(typeof this.tbar=='object'){this.topToolbar=this.tbar;}
 delete this.tbar;}
 if(this.bbar){this.elements+=',bbar';if(typeof this.bbar=='object'){this.bottomToolbar=this.bbar;}
 delete this.bbar;}
 if(this.header===true){this.elements+=',header';delete this.header;}else if(this.title&&this.header!==false){this.elements+=',header';}
 if(this.footer===true){this.elements+=',footer';delete this.footer;}
-if(this.buttons){var btns=this.buttons;this.buttons=[];for(var i=0,len=btns.length;i<len;i++){if(btns[i].render){btns[i].ownerCt=this;this.buttons.push(btns[i]);}else{this.addButton(btns[i]);}}}
+if(this.buttons){this.elements+=',footer';var btns=this.buttons;this.buttons=[];for(var i=0,len=btns.length;i<len;i++){if(btns[i].render){this.buttons.push(btns[i]);}else if(btns[i].xtype){this.buttons.push(Ext.create(btns[i],'button'));}else{this.addButton(btns[i]);}}}
+if(this.fbar){this.elements+=',footer';if(this.buttonAlign=='right'&&this.initialConfig.buttonAlign===undefined){this.buttonAlign='left';}}
 if(this.autoLoad){this.on('render',this.doAutoLoad,this,{delay:10});}},createElement:function(name,pnode){if(this[name]){pnode.appendChild(this[name].dom);return;}
-if(name==='bwrap'||this.elements.indexOf(name)!=-1){if(this[name+'Cfg']){this[name]=Ext.fly(pnode).createChild(this[name+'Cfg']);}else{var el=document.createElement('div');el.className=this[name+'Cls'];this[name]=Ext.get(pnode.appendChild(el));}}},onRender:function(ct,position){Ext.Panel.superclass.onRender.call(this,ct,position);this.createClasses();if(this.el){this.el.addClass(this.baseCls);this.header=this.el.down('.'+this.headerCls);this.bwrap=this.el.down('.'+this.bwrapCls);var cp=this.bwrap?this.bwrap:this.el;this.tbar=cp.down('.'+this.tbarCls);this.body=cp.down('.'+this.bodyCls);this.bbar=cp.down('.'+this.bbarCls);this.footer=cp.down('.'+this.footerCls);this.fromMarkup=true;}else{this.el=ct.createChild({id:this.id,cls:this.baseCls},position);}
+if(name==='bwrap'||this.elements.indexOf(name)!=-1){if(this[name+'Cfg']){this[name]=Ext.fly(pnode).createChild(this[name+'Cfg']);}else{var el=document.createElement('div');el.className=this[name+'Cls'];this[name]=Ext.get(pnode.appendChild(el));}
+if(this[name+'CssClass']){this[name].addClass(this[name+'CssClass']);}
+if(this[name+'Style']){this[name].applyStyles(this[name+'Style']);}}},onRender:function(ct,position){Ext.Panel.superclass.onRender.call(this,ct,position);this.createClasses();if(this.el){this.el.addClass(this.baseCls);this.header=this.el.down('.'+this.headerCls);this.bwrap=this.el.down('.'+this.bwrapCls);var cp=this.bwrap?this.bwrap:this.el;this.tbar=cp.down('.'+this.tbarCls);this.body=cp.down('.'+this.bodyCls);this.bbar=cp.down('.'+this.bbarCls);this.footer=cp.down('.'+this.footerCls);this.fromMarkup=true;}else{this.el=ct.createChild({id:this.id,cls:this.baseCls},position);}
 var el=this.el,d=el.dom;if(this.cls){this.el.addClass(this.cls);}
 if(this.buttons){this.elements+=',footer';}
 if(this.frame){el.insertHtml('afterBegin',String.format(Ext.Element.boxMarkup,this.baseCls));this.createElement('header',d.firstChild.firstChild.firstChild);this.createElement('bwrap',d);var bw=this.bwrap.dom;var ml=d.childNodes[1],bl=d.childNodes[2];bw.appendChild(ml);bw.appendChild(bl);var mc=bw.firstChild.firstChild.firstChild;this.createElement('tbar',mc);this.createElement('body',mc);this.createElement('bbar',mc);this.createElement('footer',bw.lastChild.firstChild.firstChild);if(!this.footer){this.bwrap.dom.lastChild.className+=' x-panel-nofooter';}}else{this.createElement('header',d);this.createElement('bwrap',d);var bw=this.bwrap.dom;this.createElement('tbar',bw);this.createElement('body',bw);this.createElement('bbar',bw);this.createElement('footer',bw);if(!this.header){this.body.addClass(this.bodyCls+'-noheader');if(this.tbar){this.tbar.addClass(this.tbarCls+'-noheader');}}}
+if(this.padding!==undefined){this.body.setStyle('padding',this.body.addUnits(this.padding));}
 if(this.border===false){this.el.addClass(this.baseCls+'-noborder');this.body.addClass(this.bodyCls+'-noborder');if(this.header){this.header.addClass(this.headerCls+'-noborder');}
 if(this.footer){this.footer.addClass(this.footerCls+'-noborder');}
 if(this.tbar){this.tbar.addClass(this.tbarCls+'-noborder');}
 if(this.bbar){this.bbar.addClass(this.bbarCls+'-noborder');}}
 if(this.bodyBorder===false){this.body.addClass(this.bodyCls+'-noborder');}
-if(this.bodyStyle){this.body.applyStyles(this.bodyStyle);}
 this.bwrap.enableDisplayMode('block');if(this.header){this.header.unselectable();if(this.headerAsText){this.header.dom.innerHTML='<span class="'+this.headerTextCls+'">'+this.header.dom.innerHTML+'</span>';if(this.iconCls){this.setIconClass(this.iconCls);}}}
 if(this.floating){this.makeFloating(this.floating);}
 if(this.collapsible){this.tools=this.tools?this.tools.slice(0):[];if(!this.hideCollapseTool){this.tools[this.collapseFirst?'unshift':'push']({id:'toggle',handler:this.toggleCollapse,scope:this});}
 if(this.titleCollapse&&this.header){this.header.on('click',this.toggleCollapse,this);this.header.setStyle('cursor','pointer');}}
 if(this.tools){var ts=this.tools;this.tools={};this.addTool.apply(this,ts);}else{this.tools={};}
-if(this.buttons&&this.buttons.length>0){var tb=this.footer.createChild({cls:'x-panel-btns-ct',cn:{cls:"x-panel-btns x-panel-btns-"+this.buttonAlign,html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'}},null,true);var tr=tb.getElementsByTagName('tr')[0];for(var i=0,len=this.buttons.length;i<len;i++){var b=this.buttons[i];var td=document.createElement('td');td.className='x-panel-btn-td';b.render(tr.appendChild(td));}}
-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.ComponentMgr.create(this.topToolbar,'toolbar');}
-this.topToolbar.render(this.tbar);this.topToolbar.ownerCt=this;}
-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.ComponentMgr.create(this.bottomToolbar,'toolbar');}
-this.bottomToolbar.render(this.bbar);this.bottomToolbar.ownerCt=this;}},setIconClass:function(cls){var old=this.iconCls;this.iconCls=cls;if(this.rendered&&this.header){if(this.frame){this.header.addClass('x-panel-icon');this.header.replaceClass(old,this.iconCls);}else{var hd=this.header.dom;var img=hd.firstChild&&String(hd.firstChild.tagName).toLowerCase()=='img'?hd.firstChild:null;if(img){Ext.fly(img).replaceClass(old,this.iconCls);}else{Ext.DomHelper.insertBefore(hd.firstChild,{tag:'img',src:Ext.BLANK_IMAGE_URL,cls:'x-panel-inline-icon '+this.iconCls});}}}},makeFloating:function(cfg){this.floating=true;this.el=new Ext.Layer(typeof cfg=='object'?cfg:{shadow:this.shadow!==undefined?this.shadow:'sides',shadowOffset:this.shadowOffset,constrain:false,shim:this.shim===false?false:undefined},this.el);},getTopToolbar:function(){return this.topToolbar;},getBottomToolbar:function(){return this.bottomToolbar;},addButton:function(config,handler,scope){var bc={handler:handler,scope:scope,minWidth:this.minButtonWidth,hideParent:true};if(typeof config=="string"){bc.text=config;}else{Ext.apply(bc,config);}
-var btn=new Ext.Button(bc);btn.ownerCt=this;if(!this.buttons){this.buttons=[];}
+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');this.fbar.enableOverflow=false;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.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');}
+this.bottomToolbar.ownerCt=this;this.bottomToolbar.render(this.bbar);}},setIconClass:function(cls){var old=this.iconCls;this.iconCls=cls;if(this.rendered&&this.header){if(this.frame){this.header.addClass('x-panel-icon');this.header.replaceClass(old,this.iconCls);}else{var hd=this.header.dom;var img=hd.firstChild&&String(hd.firstChild.tagName).toLowerCase()=='img'?hd.firstChild:null;if(img){Ext.fly(img).replaceClass(old,this.iconCls);}else{Ext.DomHelper.insertBefore(hd.firstChild,{tag:'img',src:Ext.BLANK_IMAGE_URL,cls:'x-panel-inline-icon '+this.iconCls});}}}},makeFloating:function(cfg){this.floating=true;this.el=new Ext.Layer(typeof cfg=='object'?cfg:{shadow:this.shadow!==undefined?this.shadow:'sides',shadowOffset:this.shadowOffset,constrain:false,shim:this.shim===false?false:undefined},this.el);},getTopToolbar:function(){return this.topToolbar;},getBottomToolbar:function(){return this.bottomToolbar;},addButton:function(config,handler,scope){var bc={handler:handler,scope:scope,minWidth:this.minButtonWidth,hideParent:true};if(typeof config=="string"){bc.text=config;}else{Ext.apply(bc,config);}
+var btn=new Ext.Button(bc);if(!this.buttons){this.buttons=[];}
 this.buttons.push(btn);return btn;},addTool:function(){if(!this[this.toolTarget]){return;}
 if(!this.toolTemplate){var tt=new Ext.Template('<div class="x-tool x-tool-{id}">&#160;</div>');tt.disableFormats=true;tt.compile();Ext.Panel.prototype.toolTemplate=tt;}
-for(var i=0,a=arguments,len=a.length;i<len;i++){var tc=a[i],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);}
+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.fromMarkup&&this.height===undefined&&!this.autoHeight){this.height=this.el.getHeight();}
-if(this.floating&&!this.hidden&&!this.initHidden){this.el.show();}
+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);}
 this.setAutoScroll();if(this.html){this.body.update(typeof this.html=='object'?Ext.DomHelper.markup(this.html):this.html);delete this.html;}
 if(this.contentEl){var ce=Ext.getDom(this.contentEl);Ext.fly(ce).removeClass(['x-hidden','x-hide-display']);this.body.dom.appendChild(ce);}
@@ -57,20 +64,22 @@
 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.buttonAlign!='center'){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');}
-return w;},getFrameHeight:function(){var h=this.el.getFrameWidth('tb');h+=(this.tbar?this.tbar.getHeight():0)+
+this.syncShadow();},adjustBodyHeight:function(h){return h;},adjustBodyWidth:function(w){return w;},onPosition:function(){this.syncShadow();},getFrameWidth:function(){var w=this.el.getFrameWidth('lr')+this.bwrap.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');}
+return w;},getFrameHeight:function(){var h=this.el.getFrameWidth('tb')+this.bwrap.getFrameWidth('tb');h+=(this.tbar?this.tbar.getHeight():0)+
 (this.bbar?this.bbar.getHeight():0);if(this.frame){var hd=this.el.dom.firstChild;var ft=this.bwrap.dom.lastChild;h+=(hd.offsetHeight+ft.offsetHeight);var mc=this.bwrap.dom.firstChild.firstChild.firstChild;h+=Ext.fly(mc).getFrameWidth('tb');}else{h+=(this.header?this.header.getHeight():0)+
 (this.footer?this.footer.getHeight():0);}
 return h;},getInnerWidth:function(){return this.getSize().width-this.getFrameWidth();},getInnerHeight:function(){return this.getSize().height-this.getFrameHeight();},syncShadow:function(){if(this.floating){this.el.sync(true);}},getLayoutTarget:function(){return this.body;},setTitle:function(title,iconCls){this.title=title;if(this.header&&this.headerAsText){this.header.child('span').update(title);}
 if(iconCls){this.setIconClass(iconCls);}
-this.fireEvent('titlechange',this,title);return this;},getUpdater:function(){return this.body.getUpdater();},load:function(){var um=this.body.getUpdater();um.update.apply(um,arguments);return this;},beforeDestroy:function(){Ext.Element.uncache(this.header,this.tbar,this.bbar,this.footer,this.body);if(this.tools){for(var k in this.tools){Ext.destroy(this.tools[k]);}}
+this.fireEvent('titlechange',this,title);return this;},getUpdater:function(){return this.body.getUpdater();},load:function(){var um=this.body.getUpdater();um.update.apply(um,arguments);return this;},beforeDestroy:function(){if(this.header){this.header.removeAllListeners();if(this.headerAsText){Ext.Element.uncache(this.header.child('span'));}}
+Ext.Element.uncache(this.header,this.tbar,this.bbar,this.footer,this.body,this.bwrap);if(this.tools){for(var k in this.tools){Ext.destroy(this.tools[k]);}}
 if(this.buttons){for(var b in this.buttons){Ext.destroy(this.buttons[b]);}}
-Ext.destroy(this.topToolbar,this.bottomToolbar);Ext.Panel.superclass.beforeDestroy.call(this);},createClasses:function(){this.headerCls=this.baseCls+'-header';this.headerTextCls=this.baseCls+'-header-text';this.bwrapCls=this.baseCls+'-bwrap';this.tbarCls=this.baseCls+'-tbar';this.bodyCls=this.baseCls+'-body';this.bbarCls=this.baseCls+'-bbar';this.footerCls=this.baseCls+'-footer';},createGhost:function(cls,useShim,appendTo){var el=document.createElement('div');el.className='x-panel-ghost '+(cls?cls:'');if(this.header){el.appendChild(this.el.dom.firstChild.cloneNode(true));}
+Ext.destroy(this.topToolbar,this.bottomToolbar,this.fbar);Ext.Panel.superclass.beforeDestroy.call(this);},createClasses:function(){this.headerCls=this.baseCls+'-header';this.headerTextCls=this.baseCls+'-header-text';this.bwrapCls=this.baseCls+'-bwrap';this.tbarCls=this.baseCls+'-tbar';this.bodyCls=this.baseCls+'-body';this.bbarCls=this.baseCls+'-bbar';this.footerCls=this.baseCls+'-footer';},createGhost:function(cls,useShim,appendTo){var el=document.createElement('div');el.className='x-panel-ghost '+(cls?cls:'');if(this.header){el.appendChild(this.el.dom.firstChild.cloneNode(true));}
 Ext.fly(el.appendChild(document.createElement('ul'))).setHeight(this.bwrap.getHeight());el.style.width=this.el.dom.offsetWidth+'px';;if(!appendTo){this.container.dom.appendChild(el);}else{Ext.getDom(appendTo).appendChild(el);}
 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);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/Resizable-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/Resizable-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Resizable-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -33,9 +33,10 @@
 var sw=this.snap(w,wi,mw);var sh=this.snap(h,hi,mh);if(sw!=w||sh!=h){switch(pos){case"northeast":y-=sh-h;break;case"north":y-=sh-h;break;case"southwest":x-=sw-w;break;case"west":x-=sw-w;break;case"northwest":x-=sw-w;y-=sh-h;break;}
 w=sw;h=sh;}
 if(this.preserveRatio){switch(pos){case"southeast":case"east":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);break;case"south":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"northeast":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"north":var tw=w;w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);x+=(tw-w)/2;break;case"southwest":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);var tw=w;w=ow*(h/oh);x+=tw-w;break;case"west":var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);y+=(th-h)/2;var tw=w;w=ow*(h/oh);x+=tw-w;break;case"northwest":var tw=w;var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);y+=th-h;x+=tw-w;break;}}
-this.proxy.setBounds(x,y,w,h);if(this.dynamic){this.resizeElement();}}catch(e){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over");}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over");}},getEl:function(){return this.el;},getResizeChild:function(){return this.resizeChild;},destroy:function(removeEl){this.proxy.remove();if(this.overlay){this.overlay.removeAllListeners();this.overlay.remove();}
-var ps=Ext.Resizable.positions;for(var k in ps){if(typeof ps[k]!="function"&&this[ps[k]]){var h=this[ps[k]];h.el.removeAllListeners();h.el.remove();}}
-if(removeEl){this.el.update("");this.el.remove();}},syncHandleHeight:function(){var h=this.el.getHeight(true);if(this.west){this.west.el.setHeight(h);}
+this.proxy.setBounds(x,y,w,h);if(this.dynamic){this.resizeElement();}}catch(e){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over");}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over");}},getEl:function(){return this.el;},getResizeChild:function(){return this.resizeChild;},destroy:function(removeEl){if(this.dd){this.dd.destroy();}
+if(this.overlay){Ext.destroy(this.overlay);this.overlay=null;}
+Ext.destroy(this.proxy);this.proxy=null;var ps=Ext.Resizable.positions;for(var k in ps){if(typeof ps[k]!="function"&&this[ps[k]]){this[ps[k]].destroy();}}
+if(removeEl){this.el.update("");Ext.destroy(this.el);this.el=null;}},syncHandleHeight:function(){var h=this.el.getHeight(true);if(this.west){this.west.el.setHeight(h);}
 if(this.east){this.east.el.setHeight(h);}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=function(rz,pos,disableTrackOver,transparent){if(!this.tpl){var tpl=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});tpl.compile();Ext.Resizable.Handle.prototype.tpl=tpl;}
 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);}};
\ No newline at end of file
+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;}};
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/SplitBar-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/SplitBar-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/SplitBar-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -9,10 +9,10 @@
 
 Ext.SplitBar=function(dragElement,resizingElement,orientation,placement,existingProxy){this.el=Ext.get(dragElement,true);this.el.dom.unselectable="on";this.resizingEl=Ext.get(resizingElement,true);this.orientation=orientation||Ext.SplitBar.HORIZONTAL;this.minSize=0;this.maxSize=2000;this.animate=false;this.useShim=false;this.shim=null;if(!existingProxy){this.proxy=Ext.SplitBar.createProxy(this.orientation);}else{this.proxy=Ext.get(existingProxy).dom;}
 this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{dragElId:this.proxy.id});this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);this.dragSpecs={};this.adapter=new Ext.SplitBar.BasicLayoutAdapter();this.adapter.init(this);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.placement=placement||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);this.el.addClass("x-splitbar-h");}else{this.placement=placement||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);this.el.addClass("x-splitbar-v");}
-this.addEvents("resize","moved","beforeresize","beforeapply");Ext.SplitBar.superclass.constructor.call(this);};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(x,y){this.fireEvent("beforeresize",this);this.overlay=Ext.DomHelper.append(document.body,{cls:"x-drag-overlay",html:"&#160;"},true);this.overlay.unselectable();this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var size=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();;this.activeMaxSize=this.getMaximumSize();;var c1=size-this.activeMinSize;var c2=Math.max(this.activeMaxSize-size,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?c1:c2,this.placement==Ext.SplitBar.LEFT?c2:c1);this.dd.setYConstraint(0,0);}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?c1:c2,this.placement==Ext.SplitBar.TOP?c2:c1);}
-this.dragSpecs.startSize=size;this.dragSpecs.startPoint=[x,y];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,x,y);},onEndProxyDrag:function(e){Ext.get(this.proxy).setDisplayed(false);var endPoint=Ext.lib.Event.getXY(e);if(this.overlay){this.overlay.remove();delete this.overlay;}
+this.addEvents("resize","moved","beforeresize","beforeapply");Ext.SplitBar.superclass.constructor.call(this);};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(x,y){this.fireEvent("beforeresize",this);this.overlay=Ext.DomHelper.append(document.body,{cls:"x-drag-overlay",html:"&#160;"},true);this.overlay.unselectable();this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var size=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();this.activeMaxSize=this.getMaximumSize();var c1=size-this.activeMinSize;var c2=Math.max(this.activeMaxSize-size,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?c1:c2,this.placement==Ext.SplitBar.LEFT?c2:c1);this.dd.setYConstraint(0,0);}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?c1:c2,this.placement==Ext.SplitBar.TOP?c2:c1);}
+this.dragSpecs.startSize=size;this.dragSpecs.startPoint=[x,y];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,x,y);},onEndProxyDrag:function(e){Ext.get(this.proxy).setDisplayed(false);var endPoint=Ext.lib.Event.getXY(e);if(this.overlay){Ext.destroy(this.overlay);delete this.overlay;}
 var newSize;if(this.orientation==Ext.SplitBar.HORIZONTAL){newSize=this.dragSpecs.startSize+
 (this.placement==Ext.SplitBar.LEFT?endPoint[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-endPoint[0]);}else{newSize=this.dragSpecs.startSize+
 (this.placement==Ext.SplitBar.TOP?endPoint[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-endPoint[1]);}
 newSize=Math.min(Math.max(newSize,this.activeMinSize),this.activeMaxSize);if(newSize!=this.dragSpecs.startSize){if(this.fireEvent('beforeapply',this,newSize)!==false){this.adapter.setElementSize(this,newSize);this.fireEvent("moved",this,newSize);this.fireEvent("resize",this,newSize);}}},getAdapter:function(){return this.adapter;},setAdapter:function(adapter){this.adapter=adapter;this.adapter.init(this);},getMinimumSize:function(){return this.minSize;},setMinimumSize:function(minSize){this.minSize=minSize;},getMaximumSize:function(){return this.maxSize;},setMaximumSize:function(maxSize){this.maxSize=maxSize;},setCurrentSize:function(size){var oldAnimate=this.animate;this.animate=false;this.adapter.setElementSize(this,size);this.animate=oldAnimate;},destroy:function(removeEl){if(this.shim){this.shim.remove();}
-this.dd.unreg();Ext.removeNode(this.proxy);if(removeEl){this.el.remove();}}});Ext.SplitBar.createProxy=function(dir){var proxy=new Ext.Element(document.createElement("div"));proxy.unselectable();var cls='x-splitbar-proxy';proxy.addClass(cls+' '+(dir==Ext.SplitBar.HORIZONTAL?cls+'-h':cls+'-v'));document.body.appendChild(proxy.dom);return proxy.dom;};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(s){},getElementSize:function(s){if(s.orientation==Ext.SplitBar.HORIZONTAL){return s.resizingEl.getWidth();}else{return s.resizingEl.getHeight();}},setElementSize:function(s,newSize,onComplete){if(s.orientation==Ext.SplitBar.HORIZONTAL){if(!s.animate){s.resizingEl.setWidth(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setWidth(newSize,true,.1,onComplete,'easeOut');}}else{if(!s.animate){s.resizingEl.setHeight(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setHeight(newSize,true,.1,onComplete,'easeOut');}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(container){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(container);};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(s){this.basic.init(s);},getElementSize:function(s){return this.basic.getElementSize(s);},setElementSize:function(s,newSize,onComplete){this.basic.setElementSize(s,newSize,this.moveSplitter.createDelegate(this,[s]));},moveSplitter:function(s){var yes=Ext.SplitBar;switch(s.placement){case yes.LEFT:s.el.setX(s.resizingEl.getRight());break;case yes.RIGHT:s.el.setStyle("right",(this.container.getWidth()-s.resizingEl.getLeft())+"px");break;case yes.TOP:s.el.setY(s.resizingEl.getBottom());break;case yes.BOTTOM:s.el.setY(s.resizingEl.getTop()-s.el.getHeight());break;}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;
\ No newline at end of file
+this.dd.unreg();Ext.destroy(Ext.get(this.proxy));if(removeEl){this.el.remove();}}});Ext.SplitBar.createProxy=function(dir){var proxy=new Ext.Element(document.createElement("div"));proxy.unselectable();var cls='x-splitbar-proxy';proxy.addClass(cls+' '+(dir==Ext.SplitBar.HORIZONTAL?cls+'-h':cls+'-v'));document.body.appendChild(proxy.dom);return proxy.dom;};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(s){},getElementSize:function(s){if(s.orientation==Ext.SplitBar.HORIZONTAL){return s.resizingEl.getWidth();}else{return s.resizingEl.getHeight();}},setElementSize:function(s,newSize,onComplete){if(s.orientation==Ext.SplitBar.HORIZONTAL){if(!s.animate){s.resizingEl.setWidth(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setWidth(newSize,true,.1,onComplete,'easeOut');}}else{if(!s.animate){s.resizingEl.setHeight(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setHeight(newSize,true,.1,onComplete,'easeOut');}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(container){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(container);};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(s){this.basic.init(s);},getElementSize:function(s){return this.basic.getElementSize(s);},setElementSize:function(s,newSize,onComplete){this.basic.setElementSize(s,newSize,this.moveSplitter.createDelegate(this,[s]));},moveSplitter:function(s){var yes=Ext.SplitBar;switch(s.placement){case yes.LEFT:s.el.setX(s.resizingEl.getRight());break;case yes.RIGHT:s.el.setStyle("right",(this.container.getWidth()-s.resizingEl.getLeft())+"px");break;case yes.TOP:s.el.setY(s.resizingEl.getBottom());break;case yes.BOTTOM:s.el.setY(s.resizingEl.getTop()-s.el.getHeight());break;}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/TabPanel-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/TabPanel-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/TabPanel-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -9,9 +9,9 @@
 
 Ext.TabPanel=Ext.extend(Ext.Panel,{monitorResize:true,deferredRender:true,tabWidth:120,minTabWidth:30,resizeTabs:false,enableTabScroll:false,scrollIncrement:0,scrollRepeatInterval:400,scrollDuration:.35,animScroll:true,tabPosition:'top',baseCls:'x-tab-panel',autoTabs:false,autoTabSelector:'div.x-tab',activeTab:null,tabMargin:2,plain:false,wheelIncrement:20,idDelimiter:'__',itemCls:'x-tab-item',elements:'body',headerAsText:false,frame:false,hideBorders:true,initComponent:function(){this.frame=false;Ext.TabPanel.superclass.initComponent.call(this);this.addEvents('beforetabchange','tabchange','contextmenu');this.setLayout(new Ext.layout.CardLayout({deferredRender:this.deferredRender}));if(this.tabPosition=='top'){this.elements+=',header';this.stripTarget='header';}else{this.elements+=',footer';this.stripTarget='footer';}
 if(!this.stack){this.stack=Ext.TabPanel.AccessStack();}
-this.initItems();},render:function(){Ext.TabPanel.superclass.render.apply(this,arguments);if(this.activeTab!==undefined){var item=this.activeTab;delete this.activeTab;this.setActiveTab(item);}},onRender:function(ct,position){Ext.TabPanel.superclass.onRender.call(this,ct,position);if(this.plain){var pos=this.tabPosition=='top'?'header':'footer';this[pos].addClass('x-tab-panel-'+pos+'-plain');}
+this.initItems();if(this.activeTab!==undefined&&typeof this.activeTab!='object'){this.activeTab=this.items.get(this.activeTab);}},render:function(){Ext.TabPanel.superclass.render.apply(this,arguments);if(this.activeTab!==undefined){var item=this.activeTab;delete this.activeTab;this.setActiveTab(item);}},onRender:function(ct,position){Ext.TabPanel.superclass.onRender.call(this,ct,position);if(this.plain){var pos=this.tabPosition=='top'?'header':'footer';this[pos].addClass('x-tab-panel-'+pos+'-plain');}
 var st=this[this.stripTarget];this.stripWrap=st.createChild({cls:'x-tab-strip-wrap',cn:{tag:'ul',cls:'x-tab-strip x-tab-strip-'+this.tabPosition}});var beforeEl=(this.tabPosition=='bottom'?this.stripWrap:null);this.stripSpacer=st.createChild({cls:'x-tab-strip-spacer'},beforeEl);this.strip=new Ext.Element(this.stripWrap.dom.firstChild);this.edge=this.strip.createChild({tag:'li',cls:'x-tab-edge'});this.strip.createChild({cls:'x-clear'});this.body.addClass('x-tab-panel-body-'+this.tabPosition);if(!this.itemTpl){var tt=new Ext.Template('<li class="{cls}" id="{id}"><a class="x-tab-strip-close" onclick="return false;"></a>','<a class="x-tab-right" href="#" onclick="return false;"><em class="x-tab-left">','<span class="x-tab-strip-inner"><span class="x-tab-strip-text {iconCls}">{text}</span></span>','</em></a></li>');tt.disableFormats=true;tt.compile();Ext.TabPanel.prototype.itemTpl=tt;}
-this.items.each(this.initTab,this);},afterRender:function(){Ext.TabPanel.superclass.afterRender.call(this);if(this.autoTabs){this.readTabs(false);}},initEvents:function(){Ext.TabPanel.superclass.initEvents.call(this);this.on('add',this.onAdd,this);this.on('remove',this.onRemove,this);this.strip.on('mousedown',this.onStripMouseDown,this);this.strip.on('contextmenu',this.onStripContextMenu,this);if(this.enableTabScroll){this.strip.on('mousewheel',this.onWheel,this);}},findTargets:function(e){var item=null;var itemEl=e.getTarget('li',this.strip);if(itemEl){item=this.getComponent(itemEl.id.split(this.idDelimiter)[1]);if(item.disabled){return{close:null,item:null,el:null};}}
+this.items.each(this.initTab,this);},afterRender:function(){Ext.TabPanel.superclass.afterRender.call(this);if(this.autoTabs){this.readTabs(false);}},initEvents:function(){Ext.TabPanel.superclass.initEvents.call(this);this.on('add',this.onAdd,this,{target:this});this.on('remove',this.onRemove,this,{target:this});this.strip.on('mousedown',this.onStripMouseDown,this);this.strip.on('contextmenu',this.onStripContextMenu,this);if(this.enableTabScroll){this.strip.on('mousewheel',this.onWheel,this);}},findTargets:function(e){var item=null;var itemEl=e.getTarget('li',this.strip);if(itemEl){item=this.getComponent(itemEl.id.split(this.idDelimiter)[1]);if(item.disabled){return{close:null,item:null,el:null};}}
 return{close:e.getTarget('.x-tab-strip-close',this.strip),item:item,el:itemEl};},onStripMouseDown:function(e){if(e.button!=0){return;}
 e.preventDefault();var t=this.findTargets(e);if(t.close){if(t.item.fireEvent('close',t.item)!==false){this.remove(t.item);}
 return;}
@@ -20,9 +20,9 @@
 if(item.iconCls){cls+=' x-tab-with-icon';}
 if(item.tabCls){cls+=' '+item.tabCls;}
 var p={id:this.id+this.idDelimiter+item.getItemId(),text:item.title,cls:cls,iconCls:item.iconCls||''};var el=before?this.itemTpl.insertBefore(before,p):this.itemTpl.append(this.strip,p);Ext.fly(el).addClassOnOver('x-tab-strip-over');if(item.tabTip){Ext.fly(el).child('span.x-tab-strip-text',true).qtip=item.tabTip;}
-item.on('disable',this.onItemDisabled,this);item.on('enable',this.onItemEnabled,this);item.on('titlechange',this.onItemTitleChanged,this);item.on('beforeshow',this.onBeforeShowItem,this);},onAdd:function(tp,item,index){this.initTab(item,index);if(this.items.getCount()==1){this.syncSize();}
+item.tabEl=el;item.on('disable',this.onItemDisabled,this);item.on('enable',this.onItemEnabled,this);item.on('titlechange',this.onItemTitleChanged,this);item.on('beforeshow',this.onBeforeShowItem,this);},onAdd:function(tp,item,index){this.initTab(item,index);if(this.items.getCount()==1){this.syncSize();}
 this.delegateUpdates();},onBeforeAdd:function(item){var existing=item.events?(this.items.containsKey(item.getItemId())?item:null):this.items.get(item);if(existing){this.setActiveTab(item);return false;}
-Ext.TabPanel.superclass.onBeforeAdd.apply(this,arguments);var es=item.elements;item.elements=es?es.replace(',header',''):es;item.border=(item.border===true);},onRemove:function(tp,item){Ext.removeNode(this.getTabEl(item));this.stack.remove(item);item.un('disable',this.onItemDisabled,this);item.un('enable',this.onItemEnabled,this);item.un('titlechange',this.onItemTitleChanged,this);item.un('beforeshow',this.onBeforeShowItem,this);if(item==this.activeTab){var next=this.stack.next();if(next){this.setActiveTab(next);}else{this.setActiveTab(0);}}
+Ext.TabPanel.superclass.onBeforeAdd.apply(this,arguments);var es=item.elements;item.elements=es?es.replace(',header',''):es;item.border=(item.border===true);},onRemove:function(tp,item){Ext.destroy(Ext.get(this.getTabEl(item)));this.stack.remove(item);item.un('disable',this.onItemDisabled,this);item.un('enable',this.onItemEnabled,this);item.un('titlechange',this.onItemTitleChanged,this);item.un('beforeshow',this.onBeforeShowItem,this);if(item==this.activeTab){var next=this.stack.next();if(next){this.setActiveTab(next);}else{this.setActiveTab(0);}}
 this.delegateUpdates();},onBeforeShowItem:function(item){if(item!=this.activeTab){this.setActiveTab(item);return false;}},onItemDisabled:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).addClass('x-item-disabled');}
 this.stack.remove(item);},onItemEnabled:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).removeClass('x-item-disabled');}},onItemTitleChanged:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).child('span.x-tab-strip-text',true).innerHTML=item.title;}},getTabEl:function(item){var itemId=(typeof item==='number')?this.items.items[item].getItemId():item.getItemId();return document.getElementById(this.id+this.idDelimiter+itemId);},onResize:function(){Ext.TabPanel.superclass.onResize.apply(this,arguments);this.delegateUpdates();},beginUpdate:function(){this.suspendUpdates=true;},endUpdate:function(){this.suspendUpdates=false;this.delegateUpdates();},hideTabStripItem:function(item){item=this.getComponent(item);var el=this.getTabEl(item);if(el){el.style.display='none';this.delegateUpdates();}
 this.stack.remove(item);},unhideTabStripItem:function(item){item=this.getComponent(item);var el=this.getTabEl(item);if(el){el.style.display='';this.delegateUpdates();}},delegateUpdates:function(){if(this.suspendUpdates){return;}
@@ -41,5 +41,7 @@
 tw-=wrap.getMargins('lr');wrap.setWidth(tw>20?tw:20);if(!this.scrolling){if(!this.scrollLeft){this.createScrollers();}else{this.scrollLeft.show();this.scrollRight.show();}}
 this.scrolling=true;if(pos>(l-tw)){wd.scrollLeft=l-tw;}else{this.scrollToTab(this.activeTab,false);}
 this.updateScrollButtons();}},createScrollers:function(){var h=this.stripWrap.dom.offsetHeight;var sl=this.header.insertFirst({cls:'x-tab-scroller-left'});sl.setHeight(h);sl.addClassOnOver('x-tab-scroller-left-over');this.leftRepeater=new Ext.util.ClickRepeater(sl,{interval:this.scrollRepeatInterval,handler:this.onScrollLeft,scope:this});this.scrollLeft=sl;var sr=this.header.insertFirst({cls:'x-tab-scroller-right'});sr.setHeight(h);sr.addClassOnOver('x-tab-scroller-right-over');this.rightRepeater=new Ext.util.ClickRepeater(sr,{interval:this.scrollRepeatInterval,handler:this.onScrollRight,scope:this});this.scrollRight=sr;},getScrollWidth:function(){return this.edge.getOffsetsTo(this.stripWrap)[0]+this.getScrollPos();},getScrollPos:function(){return parseInt(this.stripWrap.dom.scrollLeft,10)||0;},getScrollArea:function(){return parseInt(this.stripWrap.dom.clientWidth,10)||0;},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this};},getScrollIncrement:function(){return this.scrollIncrement||(this.resizeTabs?this.lastTabWidth+2:100);},scrollToTab:function(item,animate){if(!item){return;}
-var el=this.getTabEl(item);var pos=this.getScrollPos(),area=this.getScrollArea();var left=Ext.fly(el).getOffsetsTo(this.stripWrap)[0]+pos;var right=left+el.offsetWidth;if(left<pos){this.scrollTo(left,animate);}else if(right>(pos+area)){this.scrollTo(right-area,animate);}},scrollTo:function(pos,animate){this.stripWrap.scrollTo('left',pos,animate?this.getScrollAnim():false);if(!animate){this.updateScrollButtons();}},onWheel:function(e){var d=e.getWheelDelta()*this.wheelIncrement*-1;e.stopEvent();var pos=this.getScrollPos();var newpos=pos+d;var sw=this.getScrollWidth()-this.getScrollArea();var s=Math.max(0,Math.min(sw,newpos));if(s!=pos){this.scrollTo(s,false);}},onScrollRight:function(){var sw=this.getScrollWidth()-this.getScrollArea();var pos=this.getScrollPos();var s=Math.min(sw,pos+this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},onScrollLeft:function(){var pos=this.getScrollPos();var s=Math.max(0,pos-this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},updateScrollButtons:function(){var pos=this.getScrollPos();this.scrollLeft[pos==0?'addClass':'removeClass']('x-tab-scroller-left-disabled');this.scrollRight[pos>=(this.getScrollWidth()-this.getScrollArea())?'addClass':'removeClass']('x-tab-scroller-right-disabled');}});Ext.reg('tabpanel',Ext.TabPanel);Ext.TabPanel.prototype.activate=Ext.TabPanel.prototype.setActiveTab;Ext.TabPanel.AccessStack=function(){var items=[];return{add:function(item){items.push(item);if(items.length>10){items.shift();}},remove:function(item){var s=[];for(var i=0,len=items.length;i<len;i++){if(items[i]!=item){s.push(items[i]);}}
+var el=this.getTabEl(item);var pos=this.getScrollPos(),area=this.getScrollArea();var left=Ext.fly(el).getOffsetsTo(this.stripWrap)[0]+pos;var right=left+el.offsetWidth;if(left<pos){this.scrollTo(left,animate);}else if(right>(pos+area)){this.scrollTo(right-area,animate);}},scrollTo:function(pos,animate){this.stripWrap.scrollTo('left',pos,animate?this.getScrollAnim():false);if(!animate){this.updateScrollButtons();}},onWheel:function(e){var d=e.getWheelDelta()*this.wheelIncrement*-1;e.stopEvent();var pos=this.getScrollPos();var newpos=pos+d;var sw=this.getScrollWidth()-this.getScrollArea();var s=Math.max(0,Math.min(sw,newpos));if(s!=pos){this.scrollTo(s,false);}},onScrollRight:function(){var sw=this.getScrollWidth()-this.getScrollArea();var pos=this.getScrollPos();var s=Math.min(sw,pos+this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},onScrollLeft:function(){var pos=this.getScrollPos();var s=Math.max(0,pos-this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},updateScrollButtons:function(){var pos=this.getScrollPos();this.scrollLeft[pos==0?'addClass':'removeClass']('x-tab-scroller-left-disabled');this.scrollRight[pos>=(this.getScrollWidth()-this.getScrollArea())?'addClass':'removeClass']('x-tab-scroller-right-disabled');},beforeDestroy:function(){if(this.items){this.items.each(function(item){if(item&&item.tabEl){Ext.get(item.tabEl).removeAllListeners();item.tabEl=null;}},this);}
+if(this.strip){this.strip.removeAllListeners();}
+Ext.TabPanel.superclass.beforeDestroy.apply(this);}});Ext.reg('tabpanel',Ext.TabPanel);Ext.TabPanel.prototype.activate=Ext.TabPanel.prototype.setActiveTab;Ext.TabPanel.AccessStack=function(){var items=[];return{add:function(item){items.push(item);if(items.length>10){items.shift();}},remove:function(item){var s=[];for(var i=0,len=items.length;i<len;i++){if(items[i]!=item){s.push(items[i]);}}
 items=s;},next:function(){return items.pop();}};};
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/Toolbar-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/Toolbar-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Toolbar-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -9,17 +9,19 @@
 
 Ext.layout.ToolbarLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,triggerWidth:16,lastOverflow:false,noItemsMenuText:'<div class="x-toolbar-no-items">(None)</div>',onLayout:function(ct,target){if(!this.leftTr){target.addClass('x-toolbar-layout-ct');target.insertHtml('beforeEnd','<table cellspacing="0" class="x-toolbar-ct"><tbody><tr><td class="x-toolbar-left" align="left"><table cellspacing="0"><tbody><tr class="x-toolbar-left-row"></tr></tbody></table></td><td class="x-toolbar-right" align="right"><table cellspacing="0" class="x-toolbar-right-ct"><tbody><tr><td><table cellspacing="0"><tbody><tr class="x-toolbar-right-row"></tr></tbody></table></td><td><table cellspacing="0"><tbody><tr class="x-toolbar-extras-row"></tr></tbody></table></td></tr></tbody></td></tr></tbody></table>');this.leftTr=target.child('tr.x-toolbar-left-row',true);this.rightTr=target.child('tr.x-toolbar-right-row',true);this.extrasTr=target.child('tr.x-toolbar-extras-row',true);}
 var side=this.leftTr;var pos=0;var items=ct.items.items;for(var i=0,len=items.length,c;i<len;i++,pos++){c=items[i];if(c.isFill){side=this.rightTr;pos=0;}else if(!c.rendered){c.render(this.insertCell(c,side,pos));}else{if(!c.xtbHidden&&!this.isValidParent(c,side.childNodes[pos])){var td=this.insertCell(c,side,pos);td.appendChild(c.getDomPositionEl().dom);c.container=Ext.get(td);}}}
-this.cleanup(this.leftTr);this.cleanup(this.rightTr);this.cleanup(this.extrasTr);this.fitToSize(target);},cleanup:function(row){var cn=row.childNodes;for(var i=cn.length-1,c;i>=0&&(c=cn[i]);i--){if(!c.firstChild){row.removeChild(c);}}},insertCell:function(c,side,pos){var td=document.createElement('td');td.className='x-toolbar-cell';side.insertBefore(td,side.childNodes[pos]||null);return td;},hideItem:function(item){var h=(this.hiddens=this.hiddens||[]);h.push(item);item.xtbHidden=true;item.xtbWidth=item.getDomPositionEl().dom.parentNode.offsetWidth;item.hide();},unhideItem:function(item){item.show();item.xtbHidden=false;this.hiddens.remove(item);if(this.hiddens.length<1){delete this.hiddens;}},getItemWidth:function(c){return c.hidden?(c.xtbWidth||0):c.getDomPositionEl().dom.parentNode.offsetWidth;},fitToSize:function(t){var w=t.dom.clientWidth;var lw=this.lastWidth||0;this.lastWidth=w;var iw=t.dom.firstChild.offsetWidth;var clipWidth=w-this.triggerWidth;var hideIndex=-1;if(iw>w||(this.hiddens&&w>lw)){var i,items=this.container.items.items,len=items.length,c;var loopWidth=0;for(i=0;i<len;i++){c=items[i];if(!c.isFill){loopWidth+=this.getItemWidth(c);if(loopWidth>clipWidth){if(!c.xtbHidden){this.hideItem(c);}}else{if(c.xtbHidden){this.unhideItem(c);}}}}}
+this.cleanup(this.leftTr);this.cleanup(this.rightTr);this.cleanup(this.extrasTr);this.fitToSize(target);},cleanup:function(row){var cn=row.childNodes;for(var i=cn.length-1,c;i>=0&&(c=cn[i]);i--){if(!c.firstChild){row.removeChild(c);}}},insertCell:function(c,side,pos){var td=document.createElement('td');td.className='x-toolbar-cell';side.insertBefore(td,side.childNodes[pos]||null);return td;},hideItem:function(item){var h=(this.hiddens=this.hiddens||[]);h.push(item);item.xtbHidden=true;item.xtbWidth=item.getDomPositionEl().dom.parentNode.offsetWidth;item.hide();},unhideItem:function(item){item.show();item.xtbHidden=false;this.hiddens.remove(item);if(this.hiddens.length<1){delete this.hiddens;}},getItemWidth:function(c){return c.hidden?(c.xtbWidth||0):c.getDomPositionEl().dom.parentNode.offsetWidth;},fitToSize:function(t){if(this.container.enableOverflow===false){return;}
+var w=t.dom.clientWidth;var lw=this.lastWidth||0;this.lastWidth=w;var iw=t.dom.firstChild.offsetWidth;var clipWidth=w-this.triggerWidth;var hideIndex=-1;if(iw>w||(this.hiddens&&w>lw)){var i,items=this.container.items.items,len=items.length,c;var loopWidth=0;for(i=0;i<len;i++){c=items[i];if(!c.isFill){loopWidth+=this.getItemWidth(c);if(loopWidth>clipWidth){if(!c.xtbHidden){this.hideItem(c);}}else{if(c.xtbHidden){this.unhideItem(c);}}}}}
 if(this.hiddens){this.initMore();if(!this.lastOverflow){this.container.fireEvent('overflowchange',this.container,true);this.lastOverflow=true;}}else if(this.more){this.more.destroy();delete this.more;if(this.lastOverflow){this.container.fireEvent('overflowchange',this.container,false);this.lastOverflow=false;}}},createMenuConfig:function(c,hideOnClick){var cfg=Ext.apply({},c.initialConfig);cfg.hideOnClick=hideOnClick;delete cfg.xtype;return cfg;},addComponentToMenu:function(m,c){if(c instanceof Ext.Toolbar.Separator){m.add('-');}else if(typeof c.isXType=='function'){if(c.isXType('splitbutton')){m.add(this.createMenuConfig(c,true));}else if(c.isXType('button')){m.add(this.createMenuConfig(c,!c.menu));}else if(c.isXType('buttongroup')){m.add('-');c.items.each(function(item){this.addComponentToMenu(m,item);},this);m.add('-');}}},beforeMoreShow:function(m){m.removeAll();for(var i=0,h=this.container.items.items,len=h.length,c;i<len;i++){c=h[i];if(c.xtbHidden){this.addComponentToMenu(m,c);}}
 if(m.items.length<1){m.add(this.noItemsMenuText);}},initMore:function(){if(!this.more){this.moreMenu=new Ext.menu.Menu({listeners:{beforeshow:this.beforeMoreShow,scope:this}});this.more=new Ext.Button({iconCls:'x-toolbar-more-icon',cls:'x-toolbar-more',menu:this.moreMenu});var td=this.insertCell(this.more,this.extrasTr,100);this.more.render(td);}}});Ext.Container.LAYOUTS['toolbar']=Ext.layout.ToolbarLayout;Ext.Toolbar=function(config){if(Ext.isArray(config)){config={items:config,layout:'toolbar'};}else{config=Ext.apply({layout:'toolbar'},config);if(config.buttons){config.items=config.buttons;}}
-Ext.Toolbar.superclass.constructor.call(this,config);};(function(){var T=Ext.Toolbar;Ext.extend(T,Ext.Container,{defaultType:'button',trackMenus:true,internalDefaults:{removeMode:'container',hideParent:true},autoCreate:{cls:'x-toolbar x-small-editor'},initComponent:function(){T.superclass.initComponent.call(this);this.addEvents('overflowchange');},onRender:function(ct,position){this.el=ct.createChild(Ext.apply({id:this.id},this.autoCreate),position);},add:function(){var a=arguments,l=a.length;for(var i=0;i<l;i++){var el=a[i];if(el.isFormField){this.addField(el);}else if(el.render){this.addItem(el);}else if(typeof el=="string"){if(el=="separator"||el=="-"){this.addSeparator();}else if(el==" "){this.addSpacer();}else if(el=="->"){this.addFill();}else{this.addText(el);}}else if(el.tag){this.addDom(el);}else if(el.tagName){this.addElement(el);}else if(typeof el=="object"){if(el.xtype){this.addItem(Ext.ComponentMgr.create(el,'button'));}else{this.addButton(el);}}}},addSeparator:function(){return this.addItem(new T.Separator());},addSpacer:function(){return this.addItem(new T.Spacer());},addFill:function(){this.addItem(new T.Fill());},addElement:function(el){var item=new T.Item({el:el});this.addItem(item);return item;},addItem:function(item){Ext.Toolbar.superclass.add.apply(this,arguments);return item;},addButton:function(config){if(Ext.isArray(config)){var buttons=[];for(var i=0,len=config.length;i<len;i++){buttons.push(this.addButton(config[i]));}
+Ext.Toolbar.superclass.constructor.call(this,config);};(function(){var T=Ext.Toolbar;Ext.extend(T,Ext.Container,{defaultType:'button',trackMenus:true,internalDefaults:{removeMode:'container',hideParent:true},toolbarCls:'x-toolbar',initComponent:function(){T.superclass.initComponent.call(this);this.addEvents('overflowchange');},onRender:function(ct,position){if(!this.el){if(!this.autoCreate){this.autoCreate={cls:this.toolbarCls+' x-small-editor'}}
+this.el=ct.createChild(Ext.apply({id:this.id},this.autoCreate),position);}},add:function(){var a=arguments,l=a.length;for(var i=0;i<l;i++){var el=a[i];if(el.isFormField){this.addField(el);}else if(el.render){this.addItem(el);}else if(typeof el=="string"){if(el=="separator"||el=="-"){this.addSeparator();}else if(el==" "){this.addSpacer();}else if(el=="->"){this.addFill();}else{this.addText(el);}}else if(el.tag){this.addDom(el);}else if(el.tagName){this.addElement(el);}else if(typeof el=="object"){if(el.xtype){this.addItem(Ext.create(el,'button'));}else{this.addButton(el);}}}},addSeparator:function(){return this.addItem(new T.Separator());},addSpacer:function(){return this.addItem(new T.Spacer());},addFill:function(){this.addItem(new T.Fill());},addElement:function(el){var item=new T.Item({el:el});this.addItem(item);return item;},addItem:function(item){Ext.Toolbar.superclass.add.apply(this,arguments);return item;},addButton:function(config){if(Ext.isArray(config)){var buttons=[];for(var i=0,len=config.length;i<len;i++){buttons.push(this.addButton(config[i]));}
 return buttons;}
 var b=config;if(!b.events){b=config.split?new T.SplitButton(config):new T.Button(config);}
 this.initMenuTracking(b);this.addItem(b);return b;},initMenuTracking:function(item){if(this.trackMenus&&item.menu){item.on({'menutriggerover':this.onButtonTriggerOver,'menushow':this.onButtonMenuShow,'menuhide':this.onButtonMenuHide,scope:this});}},addText:function(text){var t=new T.TextItem(text);this.addItem(t);return t;},insertButton:function(index,item){if(Ext.isArray(item)){var buttons=[];for(var i=0,len=item.length;i<len;i++){buttons.push(this.insertButton(index+i,item[i]));}
 return buttons;}
 if(!(item instanceof T.Button)){item=new T.Button(item);}
 Ext.Toolbar.superclass.insert.call(this,index,item);return item;},addDom:function(config){var item=new T.Item({autoEl:config});this.addItem(item);return item;},addField:function(field){this.addItem(field);return field;},applyDefaults:function(c){c=Ext.Toolbar.superclass.applyDefaults.call(this,c);var d=this.internalDefaults;if(c.events){Ext.applyIf(c.initialConfig,d);Ext.apply(c,d);}else{Ext.applyIf(c,d);}
-return c;},onDisable:function(){this.items.each(function(item){if(item.disable){item.disable();}});},onEnable:function(){this.items.each(function(item){if(item.enable){item.enable();}});},onButtonTriggerOver:function(btn){if(this.activeMenuBtn&&this.activeMenuBtn!=btn){this.activeMenuBtn.hideMenu();btn.showMenu();this.activeMenuBtn=btn;}},onButtonMenuShow:function(btn){this.activeMenuBtn=btn;},onButtonMenuHide:function(btn){delete this.activeMenuBtn;}});Ext.reg('toolbar',Ext.Toolbar);T.Item=Ext.extend(Ext.BoxComponent,{hideParent:true,enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.reg('tbitem',T.Item);T.Separator=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'span',cls:'ytb-sep'},position);}});Ext.reg('tbseparator',T.Separator);T.Spacer=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'div',cls:'ytb-spacer'},position);}});Ext.reg('tbspacer',T.Spacer);T.Fill=Ext.extend(T.Item,{render:Ext.emptyFn,isFill:true});Ext.reg('tbfill',T.Fill);T.TextItem=Ext.extend(T.Item,{constructor:function(config){if(typeof config=='string'){config={autoEl:{cls:'xtb-text',html:config}};}else{config.autoEl={cls:'xtb-text',html:config.text||''};}
+return c;},onDisable:function(){this.items.each(function(item){if(item.disable){item.disable();}});},onEnable:function(){this.items.each(function(item){if(item.enable){item.enable();}});},onButtonTriggerOver:function(btn){if(this.activeMenuBtn&&this.activeMenuBtn!=btn){this.activeMenuBtn.hideMenu();btn.showMenu();this.activeMenuBtn=btn;}},onButtonMenuShow:function(btn){this.activeMenuBtn=btn;},onButtonMenuHide:function(btn){delete this.activeMenuBtn;}});Ext.reg('toolbar',Ext.Toolbar);T.Item=Ext.extend(Ext.BoxComponent,{hideParent:true,enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.reg('tbitem',T.Item);T.Separator=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'span',cls:'xtb-sep'},position);}});Ext.reg('tbseparator',T.Separator);T.Spacer=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'div',cls:'xtb-spacer',style:this.width?'width:'+this.width+'px':''},position);}});Ext.reg('tbspacer',T.Spacer);T.Fill=Ext.extend(T.Item,{render:Ext.emptyFn,isFill:true});Ext.reg('tbfill',T.Fill);T.TextItem=Ext.extend(T.Item,{constructor:function(config){if(typeof config=='string'){config={autoEl:{cls:'xtb-text',html:config}};}else{config.autoEl={cls:'xtb-text',html:config.text||''};}
 T.TextItem.superclass.constructor.call(this,config);},setText:function(t){if(this.rendered){this.el.dom.innerHTML=t;}else{this.autoEl.html=t;}}});Ext.reg('tbtext',T.TextItem);T.Button=Ext.extend(Ext.Button,{});T.SplitButton=Ext.extend(Ext.SplitButton,{});Ext.reg('tbbutton',T.Button);Ext.reg('tbsplit',T.SplitButton);})();Ext.ButtonGroup=Ext.extend(Ext.Panel,{baseCls:'x-btn-group',layout:'table',defaultType:'button',frame:true,internalDefaults:{removeMode:'container',hideParent:true},initComponent:function(){this.layoutConfig=this.layoutConfig||{};Ext.applyIf(this.layoutConfig,{columns:this.columns});if(!this.title){this.addClass('x-btn-group-notitle');}
 this.on('afterlayout',this.onAfterLayout,this);Ext.ButtonGroup.superclass.initComponent.call(this);},applyDefaults:function(c){c=Ext.ButtonGroup.superclass.applyDefaults.call(this,c);var d=this.internalDefaults;if(c.events){Ext.applyIf(c.initialConfig,d);Ext.apply(c,d);}else{Ext.applyIf(c,d);}
 return c;},onAfterLayout:function(){var bodyWidth=this.body.getFrameWidth('lr')+this.body.dom.firstChild.offsetWidth;this.body.setWidth(bodyWidth);this.el.setWidth(bodyWidth+this.getFrameWidth());}});Ext.reg('buttongroup',Ext.ButtonGroup);
\ No newline at end of file

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/Window-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -8,17 +8,18 @@
 
 
 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();}
-if(this.closable){var km=this.getKeyMap();km.on(27,this.onEsc,this);km.disable();}},initDraggable:function(){this.dd=new Ext.Window.DD(this);},onEsc:function(){this[this.closeAction]();},beforeDestroy:function(){Ext.destroy(this.resizer,this.dd,this.proxy,this.mask);Ext.Window.superclass.beforeDestroy.call(this);},onDestroy:function(){if(this.manager){this.manager.unregister(this);}
+if(this.closable){var km=this.getKeyMap();km.on(27,this.onEsc,this);km.disable();}},initDraggable:function(){this.dd=new Ext.Window.DD(this);},onEsc:function(){this[this.closeAction]();},beforeDestroy:function(){this.hide();if(this.doAnchor){Ext.EventManager.removeResizeListener(this.doAnchor,this);Ext.EventManager.un(window,'scroll',this.doAnchor,this);}
+Ext.destroy(this.focusEl,this.resizer,this.dd,this.proxy,this.mask);Ext.Window.superclass.beforeDestroy.call(this);},onDestroy:function(){if(this.manager){this.manager.unregister(this);}
 Ext.Window.superclass.onDestroy.call(this);},initTools:function(){if(this.minimizable){this.addTool({id:'minimize',handler:this.minimize.createDelegate(this,[])});}
 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;}
@@ -48,7 +49,8 @@
 if(this.collapsible){this.tools.toggle.show();}
 this.container.removeClass('x-window-maximized-ct');this.doConstrain();this.fireEvent('restore',this);}},toggleMaximize:function(){this[this.maximized?'restore':'maximize']();},fitContainer:function(){var vs=this.container.getViewSize();this.setSize(vs.width,vs.height);},setZIndex:function(index){if(this.modal){this.mask.setStyle("z-index",index);}
 this.el.setZIndex(++index);index+=5;if(this.resizer){this.resizer.proxy.setStyle("z-index",++index);}
-this.lastZIndex=index;},alignTo:function(element,position,offsets){var xy=this.el.getAlignToXY(element,position,offsets);this.setPagePosition(xy[0],xy[1]);return this;},anchorTo:function(el,alignment,offsets,monitorScroll,_pname){var action=function(){this.alignTo(el,alignment,offsets);};Ext.EventManager.onWindowResize(action,this);var tm=typeof monitorScroll;if(tm!='undefined'){Ext.EventManager.on(window,'scroll',action,this,{buffer:tm=='number'?monitorScroll:50});}
-action.call(this);this[_pname]=action;return this;},toFront:function(){if(this.manager.bringToFront(this)){this.focus();}
+this.lastZIndex=index;},alignTo:function(element,position,offsets){var xy=this.el.getAlignToXY(element,position,offsets);this.setPagePosition(xy[0],xy[1]);return this;},anchorTo:function(el,alignment,offsets,monitorScroll){if(this.doAnchor){Ext.EventManager.removeResizeListener(this.doAnchor,this);Ext.EventManager.un(window,'scroll',this.doAnchor,this);}
+this.doAnchor=function(){this.alignTo(el,alignment,offsets);};Ext.EventManager.onWindowResize(this.doAnchor,this);var tm=typeof monitorScroll;if(tm!='undefined'){Ext.EventManager.on(window,'scroll',this.doAnchor,this,{buffer:tm=='number'?monitorScroll:50});}
+this.doAnchor();return this;},toFront:function(e){if(this.manager.bringToFront(this)){if(!e||!e.getTarget().focus){this.focus();}}
 return this;},setActive:function(active){if(active){if(!this.maximized){this.el.enableShadow(true);}
 this.fireEvent('activate',this);}else{this.el.disableShadow();this.fireEvent('deactivate',this);}},toBack:function(){this.manager.sendToBack(this);return this;},center:function(){var xy=this.el.getAlignToXY(this.container,'c-c');this.setPagePosition(xy[0],xy[1]);return this;}});Ext.reg('window',Ext.Window);Ext.Window.DD=function(win){this.win=win;Ext.Window.DD.superclass.constructor.call(this,win.el.id,'WindowDD-'+win.id);this.setHandleElId(win.header.id);this.scroll=false;};Ext.extend(Ext.Window.DD,Ext.dd.DD,{moveOnly:true,headerOffsets:[100,25],startDrag:function(){var w=this.win;this.proxy=w.ghost();if(w.constrain!==false){var so=w.el.shadowOffset;this.constrainTo(w.container,{right:so,left:so,bottom:so});}else if(w.constrainHeader!==false){var s=this.proxy.getSize();this.constrainTo(w.container,{right:-(s.width-this.headerOffsets[0]),bottom:-(s.height-this.headerOffsets[1])});}},b4Drag:Ext.emptyFn,onDrag:function(e){this.alignElWithMouse(this.proxy,e.getPageX(),e.getPageY());},endDrag:function(e){this.win.unghost();this.win.saveState();}});
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Checkbox-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Checkbox-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Checkbox-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,12 +7,9 @@
  */
 
 
-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});}
-this.imageEl=this.innerWrap.createChild({tag:'img',src:Ext.BLANK_IMAGE_URL,cls:this.baseCls},this.el);if(this.checked){this.setValue(true);}else{this.checked=this.el.dom.checked;}
-this.originalValue=this.checked;},onDestroy:function(){if(this.rendered){Ext.destroy(this.imageEl,this.labelEl,this.innerWrap,this.wrap);}
-Ext.form.Checkbox.superclass.onDestroy.call(this);},onFocus:function(e){Ext.form.Checkbox.superclass.onFocus.call(this,e);this.el.addClass(this.focusCls);},onBlur:function(e){Ext.form.Checkbox.superclass.onBlur.call(this,e);this.el.removeClass(this.focusCls);},onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel&&!this.fieldLabel){this.el.alignTo(this.wrap,'c-c');}},onKeyUp:function(e){if(e.getKey()==Ext.EventObject.SPACE){this.onClick(e);}},onClick:function(e){if(!this.disabled&&!this.readOnly){this.toggleValue();}
-e.stopEvent();},onEnable:function(){Ext.form.Checkbox.superclass.onEnable.call(this);this.initCheckEvents();},onDisable:function(){Ext.form.Checkbox.superclass.onDisable.call(this);this.innerWrap.removeAllListeners();},toggleValue:function(){this.setValue(!this.checked);},getResizeEl:function(){if(!this.resizeEl){this.resizeEl=Ext.isSafari?this.wrap:(this.wrap.up('.x-form-element',5)||this.wrap);}
-return this.resizeEl;},getPositionEl:function(){return this.wrap;},getActionEl:function(){return this.wrap;},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,initValue:Ext.emptyFn,getValue:function(){if(this.rendered){return this.el.dom.checked;}
-return this.checked;},setValue:function(v){var checked=this.checked;this.checked=(v===true||v==='true'||v=='1'||String(v).toLowerCase()=='on');if(this.rendered){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked;this.wrap[this.checked?'addClass':'removeClass'](this.checkedCls);}
-if(checked!=this.checked){this.fireEvent("check",this,this.checked);if(this.handler){this.handler.call(this.scope||this,this,this.checked);}}}});Ext.reg('checkbox',Ext.form.Checkbox);
\ No newline at end of file
+Ext.form.Checkbox=Ext.extend(Ext.form.Field,{focusClass:undefined,fieldClass:"x-form-field",checked:false,defaultAutoCreate:{tag:"input",type:'checkbox',autocomplete:"off"},initComponent:function(){Ext.form.Checkbox.superclass.initComponent.call(this);this.addEvents('check');},onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel){this.el.alignTo(this.wrap,'c-c');}},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.el.on("click",this.onClick,this);this.el.on("change",this.onClick,this);},getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,onRender:function(ct,position){Ext.form.Checkbox.superclass.onRender.call(this,ct,position);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue;}
+this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:'label',htmlFor:this.el.id,cls:'x-form-cb-label',html:this.boxLabel});}
+if(this.checked){this.setValue(true);}else{this.checked=this.el.dom.checked;}},onDestroy:function(){if(this.wrap){this.wrap.remove();}
+Ext.form.Checkbox.superclass.onDestroy.call(this);},initValue:Ext.emptyFn,getValue:function(){if(this.rendered){return this.el.dom.checked;}
+return false;},onClick:function(){if(this.el.dom.checked!=this.checked){this.setValue(this.el.dom.checked);}},setValue:function(v){this.checked=(v===true||v==='true'||v=='1'||String(v).toLowerCase()=='on');if(this.el&&this.el.dom){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked;}
+this.fireEvent("check",this,this.checked);}});Ext.reg('checkbox',Ext.form.Checkbox);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Combo-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Combo-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Combo-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -10,23 +10,25 @@
 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]);}
-this.store=new Ext.data.SimpleStore({'id':0,fields:['value','text'],data:d});this.valueField='value';this.displayField='text';}
+this.store=new Ext.data.ArrayStore({'id':0,fields:['value','text'],data:d});this.valueField='value';this.displayField='text';}
 s.name=Ext.id();if(!this.lazyRender){this.target=true;this.el=Ext.DomHelper.insertBefore(s,this.autoCreate||this.defaultAutoCreate);Ext.removeNode(s);this.render(this.el.parentNode);}else{Ext.removeNode(s);}}
-else if(Ext.isArray(this.store)){if(Ext.isArray(this.store[0])){this.store=new Ext.data.SimpleStore({fields:['value','text'],data:this.store});this.valueField='value';}else{this.store=new Ext.data.SimpleStore({fields:['text'],data:this.store,expandData:true});this.valueField='text';}
+else if(Ext.isArray(this.store)){if(Ext.isArray(this.store[0])){this.store=new Ext.data.ArrayStore({fields:['value','text'],data:this.store});this.valueField='value';}else{this.store=new Ext.data.ArrayStore({fields:['text'],data:this.store,expandData:true});this.valueField='text';}
 this.displayField='text';this.mode='local';}
 this.selectedIndex=-1;if(this.mode=='local'){if(this.initialConfig.queryDelay===undefined){this.queryDelay=10;}
 if(this.initialConfig.minChars===undefined){this.minChars=0;}}},onRender:function(ct,position){Ext.form.ComboBox.superclass.onRender.call(this,ct,position);if(this.hiddenName){this.hiddenField=this.el.insertSibling({tag:'input',type:'hidden',name:this.hiddenName,id:(this.hiddenId||this.hiddenName)},'before',true);this.el.dom.removeAttribute('name');}
 if(Ext.isGecko){this.el.dom.setAttribute('autocomplete','off');}
 if(!this.lazyInit){this.initList();}else{this.on('focus',this.initList,this,{single:true});}
-if(!this.editable){this.editable=true;this.setEditable(false);}},initValue:function(){Ext.form.ComboBox.superclass.initValue.call(this);if(this.hiddenField){this.hiddenField.value=this.hiddenValue!==undefined?this.hiddenValue:this.value!==undefined?this.value:'';}},initList:function(){if(!this.list){var cls='x-combo-list';this.list=new Ext.Layer({shadow:this.shadow,cls:[cls,this.listClass].join(' '),constrain:false});var lw=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth);this.list.setWidth(lw);this.list.swallowEvent('mousewheel');this.assetHeight=0;if(this.title){this.header=this.list.createChild({cls:cls+'-hd',html:this.title});this.assetHeight+=this.header.getHeight();}
+if(!this.editable){this.editable=true;this.setEditable(false);}},initValue:function(){Ext.form.ComboBox.superclass.initValue.call(this);if(this.hiddenField){this.hiddenField.value=this.hiddenValue!==undefined?this.hiddenValue:this.value!==undefined?this.value:'';}},initList:function(){if(!this.list){var cls='x-combo-list';this.list=new Ext.Layer({shadow:this.shadow,cls:[cls,this.listClass].join(' '),constrain:false});var lw=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth);this.list.setWidth(lw);this.list.swallowEvent('mousewheel');this.assetHeight=0;if(this.syncFont!==false){this.list.setStyle('font-size',this.el.getStyle('font-size'));}
+if(this.title){this.header=this.list.createChild({cls:cls+'-hd',html:this.title});this.assetHeight+=this.header.getHeight();}
 this.innerList=this.list.createChild({cls:cls+'-inner'});this.innerList.on('mouseover',this.onViewOver,this);this.innerList.on('mousemove',this.onViewMove,this);this.innerList.setWidth(lw-this.list.getFrameWidth('lr'));if(this.pageSize){this.footer=this.list.createChild({cls:cls+'-ft'});this.pageTb=new Ext.PagingToolbar({store:this.store,pageSize:this.pageSize,renderTo:this.footer});this.assetHeight+=this.footer.getHeight();}
 if(!this.tpl){this.tpl='<tpl for="."><div class="'+cls+'-item">{'+this.displayField+'}</div></tpl>';}
 this.view=new Ext.DataView({applyTo:this.innerList,tpl:this.tpl,singleSelect:true,selectedClass:this.selectedClass,itemSelector:this.itemSelector||'.'+cls+'-item'});this.view.on('click',this.onViewClick,this);this.bindStore(this.store,true);if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:'se'});this.resizer.on('resize',function(r,w,h){this.maxHeight=h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;this.listWidth=w;this.innerList.setWidth(w-this.list.getFrameWidth('lr'));this.restrictHeight();},this);this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom',this.handleHeight+'px');}}},bindStore:function(store,initial){if(this.store&&!initial){this.store.un('beforeload',this.onBeforeLoad,this);this.store.un('load',this.onLoad,this);this.store.un('loadexception',this.collapse,this);if(!store){this.store=null;if(this.view){this.view.setStore(null);}}}
 if(store){this.store=Ext.StoreMgr.lookup(store);this.store.on('beforeload',this.onBeforeLoad,this);this.store.on('load',this.onLoad,this);this.store.on('loadexception',this.collapse,this);if(this.view){this.view.setStore(store);}}},initEvents:function(){Ext.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{"up":function(e){this.inKeyMode=true;this.selectPrev();},"down":function(e){if(!this.isExpanded()){this.onTriggerClick();}else{this.inKeyMode=true;this.selectNext();}},"enter":function(e){this.onViewClick();this.delayedCheck=true;this.unsetDelayCheck.defer(10,this);},"esc":function(e){this.collapse();},"tab":function(e){this.onViewClick(false);return true;},scope:this,doRelay:function(foo,bar,hname){if(hname=='down'||this.scope.isExpanded()){return Ext.KeyNav.prototype.doRelay.apply(this,arguments);}
 return true;},forceKeyDown:true});this.queryDelay=Math.max(this.queryDelay||10,this.mode=='local'?10:250);this.dqTask=new Ext.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Ext.util.DelayedTask(this.onTypeAhead,this);}
 if(this.editable!==false){this.el.on("keyup",this.onKeyUp,this);}
-if(this.forceSelection){this.on('blur',this.doForce,this);}},onDestroy:function(){if(this.view){this.view.el.removeAllListeners();this.view.el.remove();this.view.purgeListeners();}
-if(this.list){this.list.destroy();}
+if(this.forceSelection){this.on('blur',this.doForce,this);}},onDestroy:function(){if(this.view){Ext.destroy(this.view);}
+if(this.list){if(this.innerList){this.innerList.un('mouseover',this.onViewOver,this);this.innerList.un('mousemove',this.onViewMove,this);}
+this.list.destroy();}
 this.bindStore(null);Ext.form.ComboBox.superclass.onDestroy.call(this);},unsetDelayCheck:function(){delete this.delayedCheck;},fireKey:function(e){if(e.isNavKeyPress()&&!this.isExpanded()&&!this.delayedCheck){this.fireEvent("specialkey",this,e);}},onResize:function(w,h){Ext.form.ComboBox.superclass.onResize.apply(this,arguments);if(this.list&&this.listWidth===undefined){var lw=Math.max(w,this.minListWidth);this.list.setWidth(lw);this.innerList.setWidth(lw-this.list.getFrameWidth('lr'));}},onEnable:function(){Ext.form.ComboBox.superclass.onEnable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=false;}},onDisable:function(){Ext.form.ComboBox.superclass.onDisable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=true;}},setEditable:function(value){if(value==this.editable){return;}
 this.editable=value;if(!value){this.el.dom.setAttribute('readOnly',true);this.el.on('mousedown',this.onTriggerClick,this);this.el.addClass('x-combo-noedit');}else{this.el.dom.setAttribute('readOnly',false);this.el.un('mousedown',this.onTriggerClick,this);this.el.removeClass('x-combo-noedit');}},onBeforeLoad:function(){if(!this.hasFocus){return;}
 this.innerList.update(this.loadingText?'<div class="loading-indicator">'+this.loadingText+'</div>':'');this.restrictHeight();this.selectedIndex=-1;},onLoad:function(){if(!this.hasFocus){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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/DateField-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Field-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -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,8 +29,8 @@
 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 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;}
+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&&!this.normalWidth){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;}
 if(tag=='textarea'){return w-2;}}}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/form/FieldSet-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/form/FieldSet-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/FieldSet-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -10,4 +10,5 @@
 Ext.form.FieldSet=Ext.extend(Ext.Panel,{baseCls:'x-fieldset',layout:'form',onRender:function(ct,position){if(!this.el){this.el=document.createElement('fieldset');this.el.id=this.id;if(this.title||this.header||this.checkboxToggle){this.el.appendChild(document.createElement('legend')).className='x-fieldset-header';}}
 Ext.form.FieldSet.superclass.onRender.call(this,ct,position);if(this.checkboxToggle){var o=typeof this.checkboxToggle=='object'?this.checkboxToggle:{tag:'input',type:'checkbox',name:this.checkboxName||this.id+'-checkbox'};this.checkbox=this.header.insertFirst(o);this.checkbox.dom.checked=!this.collapsed;this.checkbox.on('click',this.onCheckClick,this);}},onCollapse:function(doAnim,animArg){if(this.checkbox){this.checkbox.dom.checked=false;}
 this.afterCollapse();},onExpand:function(doAnim,animArg){if(this.checkbox){this.checkbox.dom.checked=true;}
-this.afterExpand();},onCheckClick:function(){this[this.checkbox.dom.checked?'expand':'collapse']();}});Ext.reg('fieldset',Ext.form.FieldSet);
\ No newline at end of file
+this.afterExpand();},onCheckClick:function(){this[this.checkbox.dom.checked?'expand':'collapse']();},beforeDestroy:function(){if(this.checkbox){this.checkbox.un('click',this.onCheckClick,this);}
+Ext.form.FieldSet.superclass.beforeDestroy.call(this);}});Ext.reg('fieldset',Ext.form.FieldSet);
\ No newline at end of file

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Form-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,8 +7,8 @@
  */
 
 
-Ext.FormPanel=Ext.extend(Ext.Panel,{buttonAlign:'center',minButtonWidth:75,labelAlign:'left',monitorValid:false,monitorPoll:200,initComponent:function(){this.form=this.createForm();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';}
-Ext.FormPanel.superclass.initComponent.call(this);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);}}}
+var valid=true;this.form.items.each(function(f){if(!f.isValid(true)){valid=false;return false;}});if(this.fbar){var fitems=this.fbar.items.items;for(var i=0,len=fitems.length;i<len;i++){var btn=fitems[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/form/HtmlEditor-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/form/HtmlEditor-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/HtmlEditor-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -12,8 +12,7 @@
 var tb=new Ext.Toolbar({renderTo:this.wrap.dom.firstChild});tb.el.on('click',function(e){e.preventDefault();});if(this.enableFont&&!Ext.isSafari2){this.fontSelect=tb.el.createChild({tag:'select',cls:'x-font-select',html:this.createFontOptions()});this.fontSelect.on('change',function(){var font=this.fontSelect.dom.value;this.relayCmd('fontname',font);this.deferFocus();},this);tb.add(this.fontSelect.dom,'-');};if(this.enableFormat){tb.add(btn('bold'),btn('italic'),btn('underline'));};if(this.enableFontSize){tb.add('-',btn('increasefontsize',false,this.adjustFont),btn('decreasefontsize',false,this.adjustFont));};if(this.enableColors){tb.add('-',{itemId:'forecolor',cls:'x-btn-icon x-edit-forecolor',clickEvent:'mousedown',tooltip:tipsEnabled?editor.buttonTips['forecolor']||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({allowReselect:true,focus:Ext.emptyFn,value:'000000',plain:true,selectHandler:function(cp,color){this.execCmd('forecolor',Ext.isSafari||Ext.isIE?'#'+color:color);this.deferFocus();},scope:this,clickEvent:'mousedown'})},{itemId:'backcolor',cls:'x-btn-icon x-edit-backcolor',clickEvent:'mousedown',tooltip:tipsEnabled?editor.buttonTips['backcolor']||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({focus:Ext.emptyFn,value:'FFFFFF',plain:true,allowReselect:true,selectHandler:function(cp,color){if(Ext.isGecko){this.execCmd('useCSS',false);this.execCmd('hilitecolor',color);this.execCmd('useCSS',true);this.deferFocus();}else{this.execCmd(Ext.isOpera?'hilitecolor':'backcolor',Ext.isSafari||Ext.isIE?'#'+color:color);this.deferFocus();}},scope:this,clickEvent:'mousedown'})});};if(this.enableAlignments){tb.add('-',btn('justifyleft'),btn('justifycenter'),btn('justifyright'));};if(!Ext.isSafari2){if(this.enableLinks){tb.add('-',btn('createlink',false,this.createLink));};if(this.enableLists){tb.add('-',btn('insertorderedlist'),btn('insertunorderedlist'));}
 if(this.enableSourceEdit){tb.add('-',btn('sourceedit',true,function(btn){this.toggleSourceEdit(btn.pressed);}));}}
 this.tb=tb;},getDocMarkup:function(){return'<html><head><style type="text/css">body{border:0;margin:0;padding:3px;height:98%;cursor:text;}</style></head><body></body></html>';},getEditorBody:function(){return this.doc.body||this.doc.documentElement;},getDoc:function(){return Ext.isIE?this.getWin().document:(this.iframe.contentDocument||this.getWin().document);},getWin:function(){return Ext.isIE?this.iframe.contentWindow:window.frames[this.iframe.name];},onRender:function(ct,position){Ext.form.HtmlEditor.superclass.onRender.call(this,ct,position);this.el.dom.style.border='0 none';this.el.dom.setAttribute('tabIndex',-1);this.el.addClass('x-hidden');if(Ext.isIE){this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')}
-this.wrap=this.el.wrap({cls:'x-html-editor-wrap',cn:{cls:'x-html-editor-tb'}});this.createToolbar(this);this.tb.items.each(function(item){if(item.itemId!='sourceedit'){item.disable();}});this.tb.doLayout();var iframe=document.createElement('iframe');iframe.name=Ext.id();iframe.frameBorder='0';iframe.src=Ext.isIE?Ext.SSL_SECURE_URL:"javascript:;";this.wrap.dom.appendChild(iframe);this.iframe=iframe;this.initFrame();if(this.autoMonitorDesignMode!==false){this.monitorTask=Ext.TaskMgr.start({run:this.checkDesignMode,scope:this,interval:100});}
-if(!this.width){var sz=this.el.getSize();this.setSize(sz.width,this.height||sz.height);}},initFrame:function(){this.doc=this.getDoc();this.win=this.getWin();this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var task={run:function(){if(this.doc.body||this.doc.readyState=='complete'){Ext.TaskMgr.stop(task);this.doc.designMode="on";this.initEditor.defer(10,this);}},interval:10,duration:10000,scope:this};Ext.TaskMgr.start(task);},checkDesignMode:function(){if(this.wrap&&this.wrap.dom.offsetWidth){var doc=this.getDoc();if(!doc){return;}
+this.wrap=this.el.wrap({cls:'x-html-editor-wrap',cn:{cls:'x-html-editor-tb'}});this.createToolbar(this);this.tb.items.each(function(item){if(item.itemId!='sourceedit'){item.disable();}});this.tb.doLayout();this.createIFrame();if(!this.width){var sz=this.el.getSize();this.setSize(sz.width,this.height||sz.height);}},createIFrame:function(){var iframe=document.createElement('iframe');iframe.name=Ext.id();iframe.frameBorder='0';iframe.src=Ext.isIE?Ext.SSL_SECURE_URL:"javascript:;";this.wrap.dom.appendChild(iframe);this.iframe=iframe;this.initFrame();if(this.autoMonitorDesignMode!==false){this.monitorTask=Ext.TaskMgr.start({run:this.checkDesignMode,scope:this,interval:100});}},initFrame:function(){this.doc=this.getDoc();this.win=this.getWin();this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var task={run:function(){if(this.doc.body||this.doc.readyState=='complete'){Ext.TaskMgr.stop(task);this.doc.designMode="on";this.initEditor.defer(10,this);}},interval:10,duration:10000,scope:this};Ext.TaskMgr.start(task);},checkDesignMode:function(){if(this.wrap&&this.wrap.dom.offsetWidth){var doc=this.getDoc();if(!doc){return;}
 if(!doc.editorInitialized||String(doc.designMode).toLowerCase()!='on'){this.initFrame();}}},onResize:function(w,h){Ext.form.HtmlEditor.superclass.onResize.apply(this,arguments);if(this.el&&this.iframe){if(typeof w=='number'){var aw=w-this.wrap.getFrameWidth('lr');this.el.setWidth(this.adjustWidth('textarea',aw));this.iframe.style.width=aw+'px';}
 if(typeof h=='number'){var ah=h-this.wrap.getFrameWidth('tb')-this.tb.el.getHeight();this.el.setHeight(this.adjustWidth('textarea',ah));this.iframe.style.height=ah+'px';if(this.doc){this.getEditorBody().style.height=(ah-(this.iframePad*2))+'px';}}}},toggleSourceEdit:function(sourceEditMode){if(sourceEditMode===undefined){sourceEditMode=!this.sourceEditMode;}
 this.sourceEditMode=sourceEditMode===true;var btn=this.tb.items.get('sourceedit');if(btn.pressed!==this.sourceEditMode){btn.toggle(this.sourceEditMode);return;}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Radio-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Radio-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/Radio-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,4 +7,4 @@
  */
 
 
-Ext.form.Radio=Ext.extend(Ext.form.Checkbox,{inputType:'radio',baseCls:'x-form-radio',getGroupValue:function(){var c=this.getParent().child('input[name='+this.el.dom.name+']:checked',true);return c?c.value:null;},getParent:function(){return this.el.up('form')||Ext.getBody();},toggleValue:function(){if(!this.checked){var els=this.getParent().select('input[name='+this.el.dom.name+']');els.each(function(el){if(el.dom.id==this.id){this.setValue(true);}else{Ext.getCmp(el.dom.id).setValue(false);}},this);}},setValue:function(v){if(typeof v=='boolean'){Ext.form.Radio.superclass.setValue.call(this,v);}else{var r=this.getParent().child('input[name='+this.el.dom.name+'][value='+v+']',true);if(r&&!r.checked){Ext.getCmp(r.id).toggleValue();};}},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn});Ext.reg('radio',Ext.form.Radio);
\ No newline at end of file
+Ext.form.Radio=Ext.extend(Ext.form.Checkbox,{inputType:'radio',markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,getGroupValue:function(){var p=this.el.up('form')||Ext.getBody();var c=p.child('input[name='+this.el.dom.name+']:checked',true);return c?c.value:null;},onClick:function(){if(this.el.dom.checked!=this.checked){var p=this.el.up('form')||Ext.getBody();var els=p.select('input[name='+this.el.dom.name+']');els.each(function(el){if(el.dom.id==this.id){this.setValue(true);}else{Ext.getCmp(el.dom.id).setValue(false);}},this);}},setValue:function(v){if(typeof v=='boolean'){Ext.form.Radio.superclass.setValue.call(this,v);}else{var r=this.el.up('form').child('input[name='+this.el.dom.name+'][value='+v+']',true);if(r){r.checked=true;};}}});Ext.reg('radio',Ext.form.Radio);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TextField-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TextField-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TextField-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -13,7 +13,7 @@
 if(this.maskRe||(this.vtype&&this.disableKeyFilter!==true&&(this.maskRe=Ext.form.VTypes[this.vtype+'Mask']))){this.el.on("keypress",this.filterKeys,this);}
 if(this.grow){this.el.on("keyup",this.onKeyUpBuffered,this,{buffer:50});this.el.on("click",this.autoSize,this);}
 if(this.enableKeyEvents){this.el.on("keyup",this.onKeyUp,this);this.el.on("keydown",this.onKeyDown,this);this.el.on("keypress",this.onKeyPress,this);}},processValue:function(value){if(this.stripCharsRe){var newValue=value.replace(this.stripCharsRe,'');if(newValue!==value){this.setRawValue(newValue);return newValue;}}
-return value;},filterValidation:function(e){if(!e.isNavKeyPress()){this.validationTask.delay(this.validationDelay);}},onKeyUpBuffered:function(e){if(!e.isNavKeyPress()){this.autoSize();}},onKeyUp:function(e){this.fireEvent('keyup',this,e);},onKeyDown:function(e){this.fireEvent('keydown',this,e);},onKeyPress:function(e){this.fireEvent('keypress',this,e);},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText();},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass);}},preFocus:function(){if(this.emptyText){if(this.el.dom.value==this.emptyText){this.setRawValue('');}
+return value;},filterValidation:function(e){if(!e.isNavKeyPress()){this.validationTask.delay(this.validationDelay);}},onKeyUpBuffered:function(e){if(!e.isNavKeyPress()){this.autoSize();}},onKeyUp:function(e){this.fireEvent('keyup',this,e);},onKeyDown:function(e){this.fireEvent('keydown',this,e);},onKeyPress:function(e){this.fireEvent('keypress',this,e);},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText();},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1&&!this.hasFocus){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass);}},preFocus:function(){if(this.emptyText){if(this.el.dom.value==this.emptyText){this.setRawValue('');}
 this.el.removeClass(this.emptyClass);}
 if(this.selectOnFocus){this.el.dom.select();}},postBlur:function(){this.applyEmptyText();},filterKeys:function(e){if(e.ctrlKey){return;}
 var k=e.getKey();if(Ext.isGecko&&(e.isNavKeyPress()||k==e.BACKSPACE||(k==e.DELETE&&e.button==-1))){return;}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TimeField-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TimeField-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TimeField-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -12,4 +12,4 @@
 if(!this.store){var min=this.parseDate(this.minValue);if(!min){min=new Date(this.initDate).clearTime();}
 var max=this.parseDate(this.maxValue);if(!max){max=new Date(this.initDate).clearTime().add('mi',(24*60)-1);}
 var times=[];while(min<=max){times.push([min.dateFormat(this.format)]);min=min.add('mi',this.increment);}
-this.store=new Ext.data.SimpleStore({fields:['text'],data:times});this.displayField='text';}},getValue:function(){var v=Ext.form.TimeField.superclass.getValue.call(this);return this.formatDate(this.parseDate(v))||'';},setValue:function(value){Ext.form.TimeField.superclass.setValue.call(this,this.formatDate(this.parseDate(value)));},validateValue:Ext.form.DateField.prototype.validateValue,parseDate:Ext.form.DateField.prototype.parseDate,formatDate:Ext.form.DateField.prototype.formatDate,beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v.dateFormat(this.format));}}});Ext.reg('timefield',Ext.form.TimeField);
\ No newline at end of file
+this.store=new Ext.data.ArrayStore({fields:['text'],data:times});this.displayField='text';}},getValue:function(){var v=Ext.form.TimeField.superclass.getValue.call(this);return this.formatDate(this.parseDate(v))||'';},setValue:function(value){Ext.form.TimeField.superclass.setValue.call(this,this.formatDate(this.parseDate(value)));},validateValue:Ext.form.DateField.prototype.validateValue,parseDate:Ext.form.DateField.prototype.parseDate,formatDate:Ext.form.DateField.prototype.formatDate,beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v.dateFormat(this.format));}}});Ext.reg('timefield',Ext.form.TimeField);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TriggerField-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TriggerField-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/form/TriggerField-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -11,6 +11,7 @@
 this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},alignErrorIcon:function(){if(this.wrap){this.errorIcon.alignTo(this.wrap,'tl-tr',[2,0]);}},onRender:function(ct,position){Ext.form.TriggerField.superclass.onRender.call(this,ct,position);this.wrap=this.el.wrap({cls:"x-form-field-wrap"});this.trigger=this.wrap.createChild(this.triggerConfig||{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.triggerClass});if(this.hideTrigger){this.trigger.setDisplayed(false);}
 this.initTrigger();if(!this.width){this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());}},afterRender:function(){Ext.form.TriggerField.superclass.afterRender.call(this);var y;if(Ext.isIE&&!this.hideTrigger&&this.el.getY()!=(y=this.trigger.getY())){this.el.position();this.el.setY(y);}},initTrigger:function(){this.trigger.on("click",this.onTriggerClick,this,{preventDefault:true});this.trigger.addClassOnOver('x-form-trigger-over');this.trigger.addClassOnClick('x-form-trigger-click');},onDestroy:function(){if(this.trigger){this.trigger.removeAllListeners();this.trigger.remove();}
 if(this.wrap){this.wrap.remove();}
-Ext.form.TriggerField.superclass.onDestroy.call(this);},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass('x-trigger-wrap-focus');this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this,{delay:10});if(this.monitorTab){this.el.on("keydown",this.checkTab,this);}}},checkTab:function(e){if(e.getKey()==e.TAB){this.triggerBlur();}},onBlur:function(){},mimicBlur:function(e){if(!this.wrap.contains(e.target)&&this.validateBlur(e)){this.triggerBlur();}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);if(this.monitorTab){this.el.un("keydown",this.checkTab,this);}
-this.beforeBlur();this.wrap.removeClass('x-trigger-wrap-focus');Ext.form.TriggerField.superclass.onBlur.call(this);},beforeBlur:Ext.emptyFn,validateBlur:function(e){return true;},onDisable:function(){Ext.form.TriggerField.superclass.onDisable.call(this);if(this.wrap){this.wrap.addClass(this.disabledClass);this.el.removeClass(this.disabledClass);}},onEnable:function(){Ext.form.TriggerField.superclass.onEnable.call(this);if(this.wrap){this.wrap.removeClass(this.disabledClass);}},onShow:function(){if(this.wrap){this.wrap.dom.style.display='';this.wrap.dom.style.visibility='visible';}},onHide:function(){this.wrap.dom.style.display='none';},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:'span',cls:'x-form-twin-triggers',cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger2Class}]};},getTrigger:function(index){return this.triggers[index];},initTrigger:function(){var ts=this.trigger.select('.x-form-trigger',true);this.wrap.setStyle('overflow','hidden');var triggerField=this;ts.each(function(t,all,index){t.hide=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='none';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};t.show=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};var triggerIndex='Trigger'+(index+1);if(this['hide'+triggerIndex]){t.dom.style.display='none';}
+Ext.form.TriggerField.superclass.onDestroy.call(this);},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass('x-trigger-wrap-focus');this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this,{delay:10});if(this.monitorTab){this.el.on("keydown",this.checkTab,this);}}},checkTab:function(e){if(e.getKey()==e.TAB){this.triggerBlur();}},onBlur:function(){},mimicBlur:function(e){if(!this.wrap.contains(e.target)&&this.validateBlur(e)){this.triggerBlur();}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);if(this.monitorTab&&this.el){this.el.un("keydown",this.checkTab,this);}
+this.beforeBlur();if(this.wrap){this.wrap.removeClass('x-trigger-wrap-focus');}
+Ext.form.TriggerField.superclass.onBlur.call(this);},beforeBlur:Ext.emptyFn,validateBlur:function(e){return true;},onDisable:function(){Ext.form.TriggerField.superclass.onDisable.call(this);if(this.wrap){this.wrap.addClass(this.disabledClass);this.el.removeClass(this.disabledClass);}},onEnable:function(){Ext.form.TriggerField.superclass.onEnable.call(this);if(this.wrap){this.wrap.removeClass(this.disabledClass);}},onShow:function(){if(this.wrap){this.wrap.dom.style.display='';this.wrap.dom.style.visibility='visible';}},onHide:function(){this.wrap.dom.style.display='none';},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:'span',cls:'x-form-twin-triggers',cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger2Class}]};},getTrigger:function(index){return this.triggers[index];},initTrigger:function(){var ts=this.trigger.select('.x-form-trigger',true);this.wrap.setStyle('overflow','hidden');var triggerField=this;ts.each(function(t,all,index){t.hide=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='none';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};t.show=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};var triggerIndex='Trigger'+(index+1);if(this['hide'+triggerIndex]){t.dom.style.display='none';}
 t.on("click",this['on'+triggerIndex+'Click'],this,{preventDefault:true});t.addClassOnOver('x-form-trigger-over');t.addClassOnClick('x-form-trigger-click');},this);this.triggers=ts.elements;},onTrigger1Click:Ext.emptyFn,onTrigger2Click:Ext.emptyFn});Ext.reg('trigger',Ext.form.TriggerField);
\ 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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/Column-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,8 +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&&this.editor.isFormField){this.editor=new Ext.grid.GridEditor(this.editor);}}
-Ext.grid.Column.AUTO_ID=0;Ext.grid.Column.prototype={renderer:function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
-return value;}};
\ No newline at end of file
+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;},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,{trueText:'true',falseText:'false',undefinedText:'&#160;',constructor:function(cfg){this.supr().constructor.apply(this,arguments);var t=this.trueText,f=this.falseText,u=this.undefinedText;this.renderer=function(v){if(v===undefined){return u;}
+if(!v||v==='false'){return f;}
+return t;};}});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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/ColumnModel-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,11 +7,9 @@
  */
 
 
-Ext.grid.ColumnModel=function(config){this.defaultWidth=100;this.defaultSortable=false;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,{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.config=config;this.lookup={};for(var i=0,len=config.length;i<len;i++){var c=config[i];if(typeof c.renderer=="string"){c.renderer=Ext.util.Format[c.renderer];}
-if(typeof c.id=="undefined"){c.id='xgc'+i;}
-if(c.editor&&c.editor.isFormField){c.editor=new Ext.grid.GridEditor(c.editor);}
+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;},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;}}
 return-1;},moveColumn:function(oldIndex,newIndex){var c=this.config[oldIndex];this.config.splice(oldIndex,1);this.config.splice(newIndex,0,c);this.dataMap=null;this.fireEvent("columnmoved",this,oldIndex,newIndex);},isLocked:function(colIndex){return this.config[colIndex].locked===true;},setLocked:function(colIndex,value,suppressEvent){if(this.isLocked(colIndex)==value){return;}
@@ -23,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/EditorGrid-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/EditorGrid-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/EditorGrid-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -12,7 +12,8 @@
 this.on("celldblclick",this.onCellDblClick,this);}
 this.getGridEl().addClass("xedit-grid");},onCellDblClick:function(g,row,col){this.startEditing(row,col);},onAutoEditClick:function(e,t){if(e.button!==0){return;}
 var row=this.view.findRowIndex(t);var col=this.view.findCellIndex(t);if(row!==false&&col!==false){this.stopEditing();if(this.selModel.getSelectedCell){var sc=this.selModel.getSelectedCell();if(sc&&sc.cell[0]===row&&sc.cell[1]===col){this.startEditing(row,col);}}else{if(this.selModel.isSelected(row)){this.startEditing(row,col);}}}},onEditComplete:function(ed,value,startValue){this.editing=false;this.activeEditor=null;ed.un("specialkey",this.selModel.onEditorKey,this.selModel);var r=ed.record;var field=this.colModel.getDataIndex(ed.col);value=this.postEditValue(value,startValue,r,field);if(String(value)!==String(startValue)){var e={grid:this,record:r,field:field,originalValue:startValue,value:value,row:ed.row,column:ed.col,cancel:false};if(this.fireEvent("validateedit",e)!==false&&!e.cancel){r.set(field,e.value);delete e.cancel;this.fireEvent("afteredit",e);}}
-this.view.focusCell(ed.row,ed.col);},startEditing:function(row,col){this.stopEditing();if(this.colModel.isCellEditable(col,row)){this.view.ensureVisible(row,col,true);var r=this.store.getAt(row);var field=this.colModel.getDataIndex(col);var e={grid:this,record:r,field:field,value:r.data[field],row:row,column:col,cancel:false};if(this.fireEvent("beforeedit",e)!==false&&!e.cancel){this.editing=true;var ed=this.colModel.getCellEditor(col,row);if(!ed.rendered){ed.render(this.view.getEditorParent(ed));}
-(function(){ed.row=row;ed.col=col;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);}).defer(50,this);}}},preEditValue:function(r,field){var value=r.data[field];return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlDecode(value):value;},postEditValue:function(value,originalValue,r,field){return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlEncode(value):value;},stopEditing:function(cancel){if(this.activeEditor){this.activeEditor[cancel===true?'cancelEdit':'completeEdit']();}
+this.view.focusCell(ed.row,ed.col);},startEditing:function(row,col){this.stopEditing();if(this.colModel.isCellEditable(col,row)){this.view.ensureVisible(row,col,true);var r=this.store.getAt(row);var field=this.colModel.getDataIndex(col);var e={grid:this,record:r,field:field,value:r.data[field],row:row,column:col,cancel:false};if(this.fireEvent("beforeedit",e)!==false&&!e.cancel){this.editing=true;var ed=this.colModel.getCellEditor(col,row);if(!ed){return;}
+if(!ed.rendered){ed.render(this.view.getEditorParent(ed));}
+(function(){ed.row=row;ed.col=col;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);}).defer(50,this);}}},preEditValue:function(r,field){var value=r.data[field];return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlDecode(value):value;},postEditValue:function(value,originalValue,r,field){return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlEncode(value):value;},stopEditing:function(cancel){if(this.activeEditor){this.activeEditor[cancel===true?'cancelEdit':'completeEdit']();}
 this.activeEditor=null;},onDestroy:function(){if(this.rendered){var cols=this.colModel.config;for(var i=0,len=cols.length;i<len;i++){var c=cols[i];Ext.destroy(c.editor);}}
 Ext.grid.EditorGridPanel.superclass.onDestroy.call(this);}});Ext.reg('editorgrid',Ext.grid.EditorGridPanel);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/GridPanel-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/GridPanel-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/GridPanel-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -13,8 +13,8 @@
 if(this.cm){this.colModel=this.cm;delete this.cm;}
 if(this.sm){this.selModel=this.sm;delete this.sm;}
 this.store=Ext.StoreMgr.lookup(this.store);this.addEvents("click","dblclick","contextmenu","mousedown","mouseup","mouseover","mouseout","keypress","keydown","cellmousedown","rowmousedown","headermousedown","cellclick","celldblclick","rowclick","rowdblclick","headerclick","headerdblclick","rowcontextmenu","cellcontextmenu","headercontextmenu","bodyscroll","columnresize","columnmove","sortchange");},onRender:function(ct,position){Ext.grid.GridPanel.superclass.onRender.apply(this,arguments);var c=this.body;this.el.addClass('x-grid-panel');var view=this.getView();view.init(this);c.on("mousedown",this.onMouseDown,this);c.on("click",this.onClick,this);c.on("dblclick",this.onDblClick,this);c.on("contextmenu",this.onContextMenu,this);c.on("keydown",this.onKeyDown,this);this.relayEvents(c,["mousedown","mouseup","mouseover","mouseout","keypress"]);this.getSelectionModel().init(this);this.view.render();},initEvents:function(){Ext.grid.GridPanel.superclass.initEvents.call(this);if(this.loadMask){this.loadMask=new Ext.LoadMask(this.bwrap,Ext.apply({store:this.store},this.loadMask));}},initStateEvents:function(){Ext.grid.GridPanel.superclass.initStateEvents.call(this);this.colModel.on('hiddenchange',this.saveState,this,{delay:100});},applyState:function(state){var cm=this.colModel;var cs=state.columns;if(cs){for(var i=0,len=cs.length;i<len;i++){var s=cs[i];var c=cm.getColumnById(s.id);if(c){c.hidden=s.hidden;c.width=s.width;var oldIndex=cm.getIndexById(s.id);if(oldIndex!=i){cm.moveColumn(oldIndex,i);}}}}
-if(state.sort){this.store[this.store.remoteSort?'setDefaultSort':'sort'](state.sort.field,state.sort.direction);}},getState:function(){var o={columns:[]};for(var i=0,c;c=this.colModel.config[i];i++){o.columns[i]={id:c.id,width:c.width};if(c.hidden){o.columns[i].hidden=true;}}
-var ss=this.store.getSortState();if(ss){o.sort=ss;}
+if(state.sort&&this.store){this.store[this.store.remoteSort?'setDefaultSort':'sort'](state.sort.field,state.sort.direction);}},getState:function(){var o={columns:[]};for(var i=0,c;c=this.colModel.config[i];i++){o.columns[i]={id:c.id,width:c.width};if(c.hidden){o.columns[i].hidden=true;}}
+if(this.store){var ss=this.store.getSortState();if(ss){o.sort=ss;}}
 return o;},afterRender:function(){Ext.grid.GridPanel.superclass.afterRender.call(this);this.view.layout();if(this.deferRowRender){this.view.afterRender.defer(10,this.view);}else{this.view.afterRender();}
 this.viewReady=true;},reconfigure:function(store,colModel){if(this.loadMask){this.loadMask.destroy();this.loadMask=new Ext.LoadMask(this.bwrap,Ext.apply({store:store},this.initialConfig.loadMask));}
 this.view.bind(store,colModel);this.store=store;this.colModel=colModel;if(this.rendered){this.view.refresh(true);}},onKeyDown:function(e){this.fireEvent("keydown",e);},onDestroy:function(){if(this.rendered){if(this.loadMask){this.loadMask.destroy();}

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/grid/GridView-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,7 +7,7 @@
  */
 
 
-Ext.grid.GridView=function(config){Ext.apply(this,config);this.addEvents("beforerowremoved","beforerowsinserted","beforerefresh","rowremoved","rowsinserted","rowupdated","refresh");Ext.grid.GridView.superclass.constructor.call(this);};Ext.extend(Ext.grid.GridView,Ext.util.Observable,{deferEmptyText:true,scrollOffset:19,autoFill:false,forceFit:false,sortClasses:["sort-asc","sort-desc"],sortAscText:"Sort Ascending",sortDescText:"Sort Descending",columnsText:"Columns",selectedRowClass:"x-grid3-row-selected",borderWidth:2,tdClass:'x-grid3-cell',hdCls:'x-grid3-hd',cellSelectorDepth:4,rowSelectorDepth:10,cellSelector:'td.x-grid3-cell',rowSelector:'div.x-grid3-row',initTemplates:function(){var ts=this.templates||{};if(!ts.master){ts.master=new Ext.Template('<div class="x-grid3" hidefocus="true">','<div class="x-grid3-viewport">','<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset">{header}</div></div><div class="x-clear"></div></div>','<div class="x-grid3-scroller"><div class="x-grid3-body">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>',"</div>",'<div class="x-grid3-resize-marker">&#160;</div>','<div class="x-grid3-resize-proxy">&#160;</div>',"</div>");}
+Ext.grid.GridView=function(config){Ext.apply(this,config);this.addEvents("beforerowremoved","beforerowsinserted","beforerefresh","rowremoved","rowsinserted","rowupdated","refresh");Ext.grid.GridView.superclass.constructor.call(this);};Ext.extend(Ext.grid.GridView,Ext.util.Observable,{deferEmptyText:true,scrollOffset:19,autoFill:false,forceFit:false,sortClasses:["sort-asc","sort-desc"],sortAscText:"Sort Ascending",sortDescText:"Sort Descending",columnsText:"Columns",selectedRowClass:"x-grid3-row-selected",borderWidth:2,tdClass:'x-grid3-cell',hdCls:'x-grid3-hd',markDirty:true,cellSelectorDepth:4,rowSelectorDepth:10,cellSelector:'td.x-grid3-cell',rowSelector:'div.x-grid3-row',initTemplates:function(){var ts=this.templates||{};if(!ts.master){ts.master=new Ext.Template('<div class="x-grid3" hidefocus="true">','<div class="x-grid3-viewport">','<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset">{header}</div></div><div class="x-clear"></div></div>','<div class="x-grid3-scroller"><div class="x-grid3-body">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>',"</div>",'<div class="x-grid3-resize-marker">&#160;</div>','<div class="x-grid3-resize-proxy">&#160;</div>',"</div>");}
 if(!ts.header){ts.header=new Ext.Template('<table border="0" cellspacing="0" cellpadding="0" style="{tstyle}">','<thead><tr class="x-grid3-hd-row">{cells}</tr></thead>',"</table>");}
 if(!ts.hcell){ts.hcell=new Ext.Template('<td class="x-grid3-hd x-grid3-cell x-grid3-td-{id}" style="{style}"><div {tooltip} {attr} class="x-grid3-hd-inner x-grid3-hd-{id}" unselectable="on" style="{istyle}">',this.grid.enableHdMenu?'<a class="x-grid3-hd-btn" href="#"></a>':'','{value}<img class="x-grid3-sort-icon" src="',Ext.BLANK_IMAGE_URL,'" />',"</div></td>");}
 if(!ts.body){ts.body=new Ext.Template('{rows}');}
@@ -21,13 +21,13 @@
 return this.fly(el).findParent(this.cellSelector,this.cellSelectorDepth);},findCellIndex:function(el,requiredCls){var cell=this.findCell(el);if(cell&&(!requiredCls||this.fly(cell).hasClass(requiredCls))){return this.getCellIndex(cell);}
 return false;},getCellIndex:function(el){if(el){var m=el.className.match(this.colRe);if(m&&m[1]){return this.cm.getIndexById(m[1]);}}
 return false;},findHeaderCell:function(el){var cell=this.findCell(el);return cell&&this.fly(cell).hasClass(this.hdCls)?cell:null;},findHeaderIndex:function(el){return this.findCellIndex(el,this.hdCls);},findRow:function(el){if(!el){return false;}
-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.focusRow(row);},removeRows:function(firstRow,lastRow){var bd=this.mainBody.dom;for(var rowIndex=firstRow;rowIndex<=lastRow;rowIndex++){Ext.removeNode(bd.childNodes[firstRow]);}
-this.focusRow(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);}
+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;}
-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';}
+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(this.markDirty&&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";}
 if(r.dirty){alt[1]=" x-grid3-dirty-row";}
@@ -35,35 +35,39 @@
 rp.alt=alt.join(" ");rp.cells=cb.join("");buf[buf.length]=rt.apply(rp);}
 return buf.join("");},processRows:function(startRow,skipStripe){if(this.ds.getCount()<1){return;}
 skipStripe=skipStripe||!this.grid.stripeRows;startRow=startRow||0;var rows=this.getRows();var cls=' x-grid3-row-alt ';for(var i=startRow,len=rows.length;i<len;i++){var row=rows[i];row.rowIndex=i;if(!skipStripe){var isAlt=((i+1)%2==0);var hasAlt=(' '+row.className+' ').indexOf(cls)!=-1;if(isAlt==hasAlt){continue;}
-if(isAlt){row.className+=" x-grid3-row-alt";}else{row.className=row.className.replace("x-grid3-row-alt","");}}}},afterRender:function(){this.mainBody.dom.innerHTML=this.renderRows();this.processRows(0,true);if(this.deferEmptyText!==true){this.applyEmptyText();}},renderUI:function(){var header=this.renderHeaders();var body=this.templates.body.apply({rows:''});var html=this.templates.master.apply({body:body,header:header});var g=this.grid;g.getGridEl().dom.innerHTML=html;this.initElements();Ext.fly(this.innerHd).on("click",this.handleHdDown,this);this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("mousemove",this.handleHdMove,this);this.scroller.on('scroll',this.syncScroll,this);if(g.enableColumnResize!==false){this.splitone=new Ext.grid.GridView.SplitDragZone(g,this.mainHd.dom);}
+if(isAlt){row.className+=" x-grid3-row-alt";}else{row.className=row.className.replace("x-grid3-row-alt","");}}}},afterRender:function(){if(!this.ds||!this.cm){return;}
+this.mainBody.dom.innerHTML=this.renderRows();this.processRows(0,true);if(this.deferEmptyText!==true){this.applyEmptyText();}},renderUI:function(){var header=this.renderHeaders();var body=this.templates.body.apply({rows:''});var html=this.templates.master.apply({body:body,header:header});var g=this.grid;g.getGridEl().dom.innerHTML=html;this.initElements();Ext.fly(this.innerHd).on("click",this.handleHdDown,this);this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("mousemove",this.handleHdMove,this);this.scroller.on('scroll',this.syncScroll,this);if(g.enableColumnResize!==false){this.splitone=new Ext.grid.GridView.SplitDragZone(g,this.mainHd.dom);}
 if(g.enableColumnMove){this.columnDrag=new Ext.grid.GridView.ColumnDragZone(g,this.innerHd);this.columnDrop=new Ext.grid.HeaderDropZone(g,this.mainHd.dom);}
 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(g.autoHeight){this.scroller.dom.style.overflow='visible';if(Ext.isSafari){this.scroller.dom.style.position='static';}}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){row=Math.min(row,Math.max(0,this.getRows().length-1));var xy=this.ensureVisible(row,col,hscroll);this.focusEl.setXY(xy||this.scroller.getXY());if(Ext.isGecko){this.focusEl.focus();}else{this.focusEl.focus.defer(1,this.focusEl);}},ensureVisible:function(row,col,hscroll){if(typeof row!="number"){row=row.rowIndex;}
-if(!this.ds){return;}
-if(row<0||row>=this.ds.getCount()){return;}
+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;}
+if(!this.ds){return null;}
+if(row<0||row>=this.ds.getCount()){return null;}
 col=(col!==undefined?col:0);var rowEl=this.getRow(row),cellEl;if(!(hscroll===false&&col===0)){while(this.cm.isHidden(col)){col++;}
 cellEl=this.getCell(row,col);}
-if(!rowEl){return;}
-var c=this.scroller.dom;var ctop=0;var p=rowEl,stop=this.el.dom;while(p&&p!=stop){ctop+=p.offsetTop;p=p.offsetParent;}
+return{row:rowEl,cell:cellEl};},getResolvedXY:function(resolved){if(!resolved){return null;}
+var s=this.scroller.dom,c=resolved.cell,r=resolved.row;return c?Ext.fly(c).getXY():[s.scrollLeft+this.el.getX(),Ext.fly(r).getY()];},syncFocusEl:function(row,col,hscroll){var xy=row;if(!Ext.isArray(xy)){row=Math.min(row,Math.max(0,this.getRows().length-1));xy=this.getResolvedXY(this.resolveCell(row,col,hscroll));}
+this.focusEl.setXY(xy||this.scroller.getXY());},ensureVisible:function(row,col,hscroll){var resolved=this.resolveCell(row,col,hscroll);if(!resolved||!resolved.row){return;}
+var rowEl=resolved.row,cellEl=resolved.cell;var c=this.scroller.dom;var ctop=0;var p=rowEl,stop=this.el.dom;while(p&&p!=stop){ctop+=p.offsetTop;p=p.offsetParent;}
 ctop-=this.mainHd.dom.offsetHeight;var cbot=ctop+rowEl.offsetHeight;var ch=c.clientHeight;var stop=parseInt(c.scrollTop,10);var sbot=stop+ch;if(ctop<stop){c.scrollTop=ctop;}else if(cbot>sbot){c.scrollTop=cbot-ch;}
 if(hscroll!==false){var cleft=parseInt(cellEl.offsetLeft,10);var cright=cleft+cellEl.offsetWidth;var sleft=parseInt(c.scrollLeft,10);var sright=sleft+c.clientWidth;if(cleft<sleft){c.scrollLeft=cleft;}else if(cright>sright){c.scrollLeft=cright-c.clientWidth;}}
-return cellEl?Ext.fly(cellEl).getXY():[c.scrollLeft+this.el.getX(),Ext.fly(rowEl).getY()];},insertRows:function(dm,firstRow,lastRow,isUpdate){if(!isUpdate&&firstRow===0&&lastRow>=dm.getCount()-1){this.refresh();}else{if(!isUpdate){this.fireEvent("beforerowsinserted",this,firstRow,lastRow);}
+return this.getResolvedXY(resolved);},insertRows:function(dm,firstRow,lastRow,isUpdate){if(!isUpdate&&firstRow===0&&lastRow>=dm.getCount()-1){this.refresh();}else{if(!isUpdate){this.fireEvent("beforerowsinserted",this,firstRow,lastRow);}
 var html=this.renderRows(firstRow,lastRow);var before=this.getRow(firstRow);if(before){Ext.DomHelper.insertHtml('beforeBegin',before,html);}else{Ext.DomHelper.insertHtml('beforeEnd',this.mainBody.dom,html);}
 if(!isUpdate){this.fireEvent("rowsinserted",this,firstRow,lastRow);this.processRows(firstRow);}}
-this.focusRow(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;';}
+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;}}
@@ -73,26 +77,26 @@
 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){this.colMenu.removeAll();Ext.menu.MenuMgr.unregister(this.colMenu);this.colMenu.getEl().remove();delete this.colMenu;}
-if(this.hmenu){this.hmenu.removeAll();Ext.menu.MenuMgr.unregister(this.hmenu);this.hmenu.getEl().remove();delete this.hmenu;}
+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;}
+if(this.hmenu){Ext.menu.MenuMgr.unregister(this.hmenu);this.hmenu.destroy();delete this.hmenu;}
 if(this.grid.enableColumnMove){var dds=Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];if(dds){for(var dd in dds){if(!dds[dd].config.isTarget&&dds[dd].dragElId){var elid=dds[dd].dragElId;dds[dd].unreg();Ext.get(elid).remove();}else if(dds[dd].config.isTarget){dds[dd].proxyTop.remove();dds[dd].proxyBottom.remove();dds[dd].unreg();}
 if(Ext.dd.DDM.locationCache[dd]){delete Ext.dd.DDM.locationCache[dd];}}
 delete Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];}}
-Ext.destroy(this.resizeMarker,this.resizeProxy);if(this.dragZone){this.dragZone.unreg();}
-this.initData(null,null);Ext.EventManager.removeResizeListener(this.onWindowResize,this);},onDenyColumnHide:function(){},render:function(){if(this.autoFill){this.fitColumns(true,true);}else if(this.forceFit){this.fitColumns(true,false);}else if(this.grid.autoExpandColumn){this.autoExpand(true);}
+if(this.dragZone){this.dragZone.unreg();}
+Ext.fly(this.innerHd).removeAllListeners();Ext.removeNode(this.innerHd);Ext.destroy(this.resizeMarker,this.resizeProxy,this.focusEl,this.mainBody,this.scroller,this.mainHd,this.mainWrap,this.dragZone,this.splitone,this.columnDrag,this.columnDrop);this.initData(null,null);Ext.EventManager.removeResizeListener(this.onWindowResize,this);},onDenyColumnHide:function(){},render:function(){if(this.autoFill){this.fitColumns(true,true);}else if(this.forceFit){this.fitColumns(true,false);}else if(this.grid.autoExpandColumn){this.autoExpand(true);}
 this.renderUI();},initData:function(ds,cm){if(this.ds){this.ds.un("load",this.onLoad,this);this.ds.un("datachanged",this.onDataChange,this);this.ds.un("add",this.onAdd,this);this.ds.un("remove",this.onRemove,this);this.ds.un("update",this.onUpdate,this);this.ds.un("clear",this.onClear,this);}
 if(ds){ds.on("load",this.onLoad,this);ds.on("datachanged",this.onDataChange,this);ds.on("add",this.onAdd,this);ds.on("remove",this.onRemove,this);ds.on("update",this.onUpdate,this);ds.on("clear",this.onClear,this);}
 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.focusRow(0);},onClear:function(){this.refresh();this.focusRow(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.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);},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/AbsoluteLayout-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/AbsoluteLayout-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/AbsoluteLayout-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,5 +7,5 @@
  */
 
 
-Ext.layout.AbsoluteLayout=Ext.extend(Ext.layout.AnchorLayout,{extraCls:'x-abs-layout-item',isForm:false,setContainer:function(ct){Ext.layout.AbsoluteLayout.superclass.setContainer.call(this,ct);if(ct.isXType('form')){this.isForm=true;}},onLayout:function(ct,target){if(this.isForm){ct.body.position();}else{target.position();}
-Ext.layout.AbsoluteLayout.superclass.onLayout.call(this,ct,target);},getAnchorViewSize:function(ct,target){return this.isForm?ct.body.getStyleSize():Ext.layout.AbsoluteLayout.superclass.getAnchorViewSize.call(this,ct,target);},isValidParent:function(c,target){return this.isForm?true:Ext.layout.AbsoluteLayout.superclass.isValidParent.call(this,c,target);},adjustWidthAnchor:function(value,comp){return value?value-comp.getPosition(true)[0]:value;},adjustHeightAnchor:function(value,comp){return value?value-comp.getPosition(true)[1]:value;}});Ext.Container.LAYOUTS['absolute']=Ext.layout.AbsoluteLayout;
\ No newline at end of file
+Ext.layout.AbsoluteLayout=Ext.extend(Ext.layout.AnchorLayout,{extraCls:'x-abs-layout-item',isForm:false,setContainer:function(ct){Ext.layout.AbsoluteLayout.superclass.setContainer.call(this,ct);if(ct.isXType('form')){this.isForm=true;}},onLayout:function(ct,target){if(this.isForm){ct.body.position();this.paddingLeft=ct.body.getPadding('r');this.paddingTop=ct.body.getPadding('t');}else{target.position();this.paddingLeft=target.getPadding('r');this.paddingTop=target.getPadding('t');}
+Ext.layout.AbsoluteLayout.superclass.onLayout.call(this,ct,target);},getAnchorViewSize:function(ct,target){return this.isForm?ct.body.getStyleSize():Ext.layout.AbsoluteLayout.superclass.getAnchorViewSize.call(this,ct,target);},isValidParent:function(c,target){return this.isForm?true:Ext.layout.AbsoluteLayout.superclass.isValidParent.call(this,c,target);},adjustWidthAnchor:function(value,comp){return value?value-comp.getPosition(true)[0]+this.paddingLeft:value;},adjustHeightAnchor:function(value,comp){return value?value-comp.getPosition(true)[1]+this.paddingTop:value;}});Ext.Container.LAYOUTS['absolute']=Ext.layout.AbsoluteLayout;
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/AccordionLayout-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/AccordionLayout-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/AccordionLayout-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -12,8 +12,8 @@
 if(this.titleCollapse){c.titleCollapse=true;}
 if(this.hideCollapseTool){c.hideCollapseTool=true;}
 if(this.collapseFirst!==undefined){c.collapseFirst=this.collapseFirst;}
-if(!this.activeItem&&!c.collapsed){this.activeItem=c;}else if(this.activeItem){c.collapsed=true;}
+if(!this.activeItem&&!c.collapsed){this.activeItem=c;}else if(this.activeItem&&this.activeItem!=c){c.collapsed=true;}
 Ext.layout.Accordion.superclass.renderItem.apply(this,arguments);c.header.addClass('x-accordion-hd');c.on('beforeexpand',this.beforeExpand,this);},beforeExpand:function(p,anim){var ai=this.activeItem;if(ai){if(this.sequence){delete this.activeItem;if(!ai.collapsed){ai.collapse({callback:function(){p.expand(anim||true);},scope:this});return false;}}else{ai.collapse(this.animate);}}
 this.activeItem=p;if(this.activeOnTop){p.el.dom.parentNode.insertBefore(p.el.dom,p.el.dom.parentNode.firstChild);}
 this.layout();},setItemSize:function(item,size){if(this.fill&&item){var items=this.container.items.items;var hh=0;for(var i=0,len=items.length;i<len;i++){var p=items[i];if(p!=item){hh+=(p.getSize().height-p.bwrap.getHeight());}}
-size.height-=hh;item.setSize(size);}}});Ext.Container.LAYOUTS['accordion']=Ext.layout.Accordion;
\ No newline at end of file
+size.height-=hh;item.setSize(size);}},setActiveItem:function(item){item=this.container.getComponent(item);this.activeItem=item;if(item){item.expand();}}});Ext.Container.LAYOUTS['accordion']=Ext.layout.Accordion;
\ 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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/BorderLayout-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -13,27 +13,28 @@
 this.rendered=true;}
 var size=target.getViewSize();if(size.width<20||size.height<20){if(collapsed){this.restoreCollapsed=collapsed;}
 return;}else if(this.restoreCollapsed){collapsed=this.restoreCollapsed;delete this.restoreCollapsed;}
-var w=size.width,h=size.height;var centerW=w,centerH=h,centerY=0,centerX=0;var n=this.north,s=this.south,west=this.west,e=this.east,c=this.center;if(!c){throw'No center region defined in BorderLayout '+ct.id;}
+var w=size.width,h=size.height;var centerW=w,centerH=h,centerY=0,centerX=0;var n=this.north,s=this.south,west=this.west,e=this.east,c=this.center;if(!c&&Ext.layout.BorderLayout.WARN!==false){throw'No center region defined in BorderLayout '+ct.id;}
 if(n&&n.isVisible()){var b=n.getSize();var m=n.getMargins();b.width=w-(m.left+m.right);b.x=m.left;b.y=m.top;centerY=b.height+b.y+m.bottom;centerH-=centerY;n.applyLayout(b);}
 if(s&&s.isVisible()){var b=s.getSize();var m=s.getMargins();b.width=w-(m.left+m.right);b.x=m.left;var totalHeight=(b.height+m.top+m.bottom);b.y=h-totalHeight+m.top;centerH-=totalHeight;s.applyLayout(b);}
 if(west&&west.isVisible()){var b=west.getSize();var m=west.getMargins();b.height=centerH-(m.top+m.bottom);b.x=m.left;b.y=centerY+m.top;var totalWidth=(b.width+m.left+m.right);centerX+=totalWidth;centerW-=totalWidth;west.applyLayout(b);}
 if(e&&e.isVisible()){var b=e.getSize();var m=e.getMargins();b.height=centerH-(m.top+m.bottom);var totalWidth=(b.width+m.left+m.right);b.x=w-totalWidth+m.left;b.y=centerY+m.top;centerW-=totalWidth;e.applyLayout(b);}
-var m=c.getMargins();var centerBox={x:centerX+m.left,y:centerY+m.top,width:centerW-(m.left+m.right),height:centerH-(m.top+m.bottom)};c.applyLayout(centerBox);if(collapsed){for(var i=0,len=collapsed.length;i<len;i++){collapsed[i].collapse(false);}}
-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&&region.split){region.split.destroy(true);}}
+if(c){var m=c.getMargins();var centerBox={x:centerX+m.left,y:centerY+m.top,width:centerW-(m.left+m.right),height:centerH-(m.top+m.bottom)};c.applyLayout(centerBox);}
+if(collapsed){for(var i=0,len=collapsed.length;i<len;i++){collapsed[i].collapse(false);}}
+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);}
@@ -44,4 +45,4 @@
 if(this.collapsible){this.splitEl.on("dblclick",this.onCollapseClick,this);}},getSize:function(){if(this.isCollapsed){return this.collapsedEl.getSize();}
 var s=this.panel.getSize();if(this.position=='north'||this.position=='south'){s.height+=this.splitEl.dom.offsetHeight;}else{s.width+=this.splitEl.dom.offsetWidth;}
 return s;},getHMaxSize:function(){var cmax=this.maxSize||10000;var center=this.layout.center;return Math.min(cmax,(this.el.getWidth()+center.el.getWidth())-center.getMinWidth());},getVMaxSize:function(){var cmax=this.maxSize||10000;var center=this.layout.center;return Math.min(cmax,(this.el.getHeight()+center.el.getHeight())-center.getMinHeight());},onSplitMove:function(split,newSize){var s=this.panel.getSize();this.lastSplitSize=newSize;if(this.position=='north'||this.position=='south'){this.panel.setSize(s.width,newSize);this.state.height=newSize;}else{this.panel.setSize(newSize,s.height);this.state.width=newSize;}
-this.layout.layout();this.panel.saveState();return false;},getSplitBar:function(){return this.split;}});Ext.Container.LAYOUTS['border']=Ext.layout.BorderLayout;
\ No newline at end of file
+this.layout.layout();this.panel.saveState();return false;},getSplitBar:function(){return this.split;},destroy:function(){Ext.destroy(this.miniSplitEl,this.split,this.splitEl);}});Ext.Container.LAYOUTS['border']=Ext.layout.BorderLayout;
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/ContainerLayout-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/ContainerLayout-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/ContainerLayout-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -8,7 +8,7 @@
 
 
 Ext.layout.ContainerLayout=function(config){Ext.apply(this,config);};Ext.layout.ContainerLayout.prototype={monitorResize:false,activeItem:null,layout:function(){var target=this.container.getLayoutTarget();this.onLayout(this.container,target);this.container.fireEvent('afterlayout',this.container,this);},onLayout:function(ct,target){this.renderAll(ct,target);},isValidParent:function(c,target){return target&&c.getDomPositionEl().dom.parentNode==(target.dom||target);},renderAll:function(ct,target){var items=ct.items.items;for(var i=0,len=items.length;i<len;i++){var c=items[i];if(c&&(!c.rendered||!this.isValidParent(c,target))){this.renderItem(c,i,target);}}},renderItem:function(c,position,target){if(c&&!c.rendered){c.render(target,position);if(this.extraCls){var t=c.getPositionEl?c.getPositionEl():c;t.addClass(this.extraCls);}
-if(this.renderHidden&&c!=this.activeItem){c.hide();}}else if(c&&!this.isValidParent(c,target)){if(this.extraCls){c.addClass(this.extraCls);}
+if(this.renderHidden&&c!=this.activeItem){c.hide();}}else if(c&&!this.isValidParent(c,target)){if(this.extraCls){var t=c.getPositionEl?c.getPositionEl():c;t.addClass(this.extraCls);}
 if(typeof position=='number'){position=target.dom.childNodes[position];}
 target.dom.insertBefore(c.getDomPositionEl().dom,position||null);c.container=target;if(this.renderHidden&&c!=this.activeItem){c.hide();}}},onResize:function(){if(this.container.collapsed){return;}
 var b=this.container.bufferResize;if(b){if(!this.resizeTask){this.resizeTask=new Ext.util.DelayedTask(this.layout,this);this.resizeBuffer=typeof b=='number'?b:100;}

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/layout/FormLayout-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/menu/BaseItem-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -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.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/build/widgets/menu/Menu-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/menu/Menu-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/menu/Menu-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -8,7 +8,7 @@
 
 
 Ext.menu.Menu=function(config){if(Ext.isArray(config)){config={items:config};}
-Ext.apply(this,config);this.id=this.id||Ext.id();this.addEvents('beforeshow','beforehide','show','hide','click','mouseover','mouseout','itemclick');Ext.menu.MenuMgr.register(this);Ext.menu.Menu.superclass.constructor.call(this);var mis=this.items;this.items=new Ext.util.MixedCollection();if(mis){this.add.apply(this,mis);}};Ext.extend(Ext.menu.Menu,Ext.util.Observable,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,ignoreParentClicks:false,hidden:true,createEl:function(){return new Ext.Layer({cls:"x-menu",shadow:this.shadow,constrain:false,parentEl:this.parentEl||document.body,zindex:15000});},render:function(){if(this.el){return;}
+Ext.apply(this,config);this.id=this.id||Ext.id();this.addEvents('beforeshow','beforehide','show','hide','click','mouseover','mouseout','itemclick');Ext.menu.MenuMgr.register(this);Ext.menu.Menu.superclass.constructor.call(this);var mis=this.items;this.items=new Ext.util.MixedCollection(false,Ext.Container.prototype.getComponentId);if(mis){this.add.apply(this,mis);}};Ext.extend(Ext.menu.Menu,Ext.util.Observable,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,ignoreParentClicks:false,hidden:true,createEl:function(){return new Ext.Layer({cls:"x-menu",shadow:this.shadow,constrain:false,parentEl:this.parentEl||document.body,zindex:this.zIndex||15000});},render:function(){if(this.el){return;}
 var el=this.el=this.createEl();if(!this.keyNav){this.keyNav=new Ext.menu.MenuNav(this);}
 if(this.plain){el.addClass("x-menu-plain");}
 if(this.cls){el.addClass(this.cls);}
@@ -28,7 +28,7 @@
 return this.el;},addSeparator:function(){return this.addItem(new Ext.menu.Separator());},addElement:function(el){return this.addItem(new Ext.menu.BaseItem(el));},addItem:function(item){this.items.add(item);if(this.ul){var li=document.createElement("li");li.className="x-menu-list-item";this.ul.dom.appendChild(li);item.render(li,this);this.delayAutoWidth();}
 return item;},addMenuItem:function(config){if(!(config instanceof Ext.menu.Item)){if(typeof config.checked=="boolean"){config=new Ext.menu.CheckItem(config);}else{config=new Ext.menu.Item(config);}}
 return this.addItem(config);},addText:function(text){return this.addItem(new Ext.menu.TextItem(text));},insert:function(index,item){this.items.insert(index,item);if(this.ul){var li=document.createElement("li");li.className="x-menu-list-item";this.ul.dom.insertBefore(li,this.ul.dom.childNodes[index]);item.render(li,this);this.delayAutoWidth();}
-return item;},remove:function(item){this.items.removeKey(item.id);item.destroy();},removeAll:function(){if(this.items){var f;while(f=this.items.first()){this.remove(f);}}},destroy:function(){this.beforeDestroy();Ext.menu.MenuMgr.unregister(this);if(this.keyNav){this.keyNav.disable();}
+return item;},remove:function(item){this.items.remove(item);item.destroy();},removeAll:function(){if(this.items){var f;while(f=this.items.first()){this.remove(f);}}},destroy:function(){this.beforeDestroy();Ext.menu.MenuMgr.unregister(this);if(this.keyNav){this.keyNav.disable();}
 this.removeAll();if(this.ul){this.ul.removeAllListeners();}
 if(this.el){this.el.destroy();}},beforeDestroy:Ext.emptyFn});Ext.menu.MenuNav=function(menu){Ext.menu.MenuNav.superclass.constructor.call(this,menu.el);this.scope=this.menu=menu;};Ext.extend(Ext.menu.MenuNav,Ext.KeyNav,{doRelay:function(e,h){var k=e.getKey();if(!this.menu.activeItem&&e.isNavKeyPress()&&k!=e.SPACE&&k!=e.RETURN){this.menu.tryActivate(0,1);return false;}
 return h.call(this.scope||this,e,this.menu);},up:function(e,m){if(!m.tryActivate(m.items.indexOf(m.activeItem)-1,-1)){m.tryActivate(m.items.length-1,-1);}},down:function(e,m){if(!m.tryActivate(m.items.indexOf(m.activeItem)+1,1)){m.tryActivate(0,1);}},right:function(e,m){if(m.activeItem){m.activeItem.expandMenu(true);}},left:function(e,m){m.hide();if(m.parentMenu&&m.parentMenu.activeItem){m.parentMenu.activeItem.activate();}},enter:function(e,m){if(m.activeItem){e.stopPropagation();m.activeItem.onClick(e);m.fireEvent("click",this,m.activeItem);return true;}}});
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/tips/Tip-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/tips/Tip-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/tips/Tip-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,7 +7,7 @@
  */
 
 
-Ext.Tip=Ext.extend(Ext.Panel,{minWidth:40,maxWidth:300,shadow:"sides",defaultAlign:"tl-bl?",autoRender:true,quickShowInterval:250,frame:true,hidden:true,baseCls:'x-tip',floating:{shadow:true,shim:true,useDisplay:true,constrain:false},autoHeight:true,initComponent:function(){Ext.Tip.superclass.initComponent.call(this);if(this.closable&&!this.title){this.elements+=',header';}},afterRender:function(){Ext.Tip.superclass.afterRender.call(this);if(this.closable){this.addTool({id:'close',handler:this.hide,scope:this});}},showAt:function(xy){Ext.Tip.superclass.show.call(this);if(this.measureWidth!==false&&(!this.initialConfig||typeof this.initialConfig.width!='number')){this.doAutoWidth();}
+Ext.Tip=Ext.extend(Ext.Panel,{minWidth:40,maxWidth:300,shadow:"sides",defaultAlign:"tl-bl?",autoRender:true,quickShowInterval:250,frame:true,hidden:true,baseCls:'x-tip',floating:{shadow:true,shim:true,useDisplay:true,constrain:false},autoHeight:true,closeAction:'hide',initComponent:function(){Ext.Tip.superclass.initComponent.call(this);if(this.closable&&!this.title){this.elements+=',header';}},afterRender:function(){Ext.Tip.superclass.afterRender.call(this);if(this.closable){this.addTool({id:'close',handler:this[this.closeAction],scope:this});}},showAt:function(xy){Ext.Tip.superclass.show.call(this);if(this.measureWidth!==false&&(!this.initialConfig||typeof this.initialConfig.width!='number')){this.doAutoWidth();}
 if(this.constrainPosition){xy=this.el.adjustForConstraints(xy);}
 this.setPagePosition(xy[0],xy[1]);},doAutoWidth:function(){var bw=this.body.getTextWidth();if(this.title){bw=Math.max(bw,this.header.child('span').getTextWidth(this.title));}
 bw+=this.getFrameWidth()+(this.closable?20:0)+this.body.getPadding("lr");this.setWidth(bw.constrain(this.minWidth,this.maxWidth));if(Ext.isIE7&&!this.repainted){this.el.repaint();this.repainted=true;}},showBy:function(el,pos){if(!this.rendered){this.render(Ext.getBody());}

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/tree/TreeEventModel-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/tree/TreeEventModel-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/tree/TreeEventModel-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -14,10 +14,11 @@
 return t;},delegateOut:function(e,t){if(!this.beforeEvent(e)){return;}
 if(e.getTarget('.x-tree-ec-icon',1)){var n=this.getNode(e);this.onIconOut(e,n);if(n==this.lastEcOver){delete this.lastEcOver;}}
 if((t=this.getNodeTarget(e))&&!e.within(t,true)){this.onNodeOut(e,this.getNode(e));}},delegateOver:function(e,t){if(!this.beforeEvent(e)){return;}
+if(Ext.isGecko&&!this.trackingDoc){Ext.getBody().on('mouseover',this.trackExit,this);this.trackingDoc=true;}
 if(this.lastEcOver){this.onIconOut(e,this.lastEcOver);delete this.lastEcOver;}
 if(e.getTarget('.x-tree-ec-icon',1)){this.lastEcOver=this.getNode(e);this.onIconOver(e,this.lastEcOver);}
-if(t=this.getNodeTarget(e)){this.onNodeOver(e,this.getNode(e));}},delegateClick:function(e,t){if(!this.beforeEvent(e)){return;}
+if(t=this.getNodeTarget(e)){this.onNodeOver(e,this.getNode(e));}},trackExit:function(e){if(this.lastOverNode&&!e.within(this.lastOverNode.ui.getEl())){this.onNodeOut(e,this.lastOverNode);delete this.lastOverNode;Ext.getBody().un('mouseover',this.trackExit,this);this.trackingDoc=false;}},delegateClick:function(e,t){if(!this.beforeEvent(e)){return;}
 if(e.getTarget('input[type=checkbox]',1)){this.onCheckboxClick(e,this.getNode(e));}
 else if(e.getTarget('.x-tree-ec-icon',1)){this.onIconClick(e,this.getNode(e));}
-else if(this.getNodeTarget(e)){this.onNodeClick(e,this.getNode(e));}},delegateDblClick:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeDblClick(e,this.getNode(e));}},delegateContextMenu:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeContextMenu(e,this.getNode(e));}},onNodeClick:function(e,node){node.ui.onClick(e);},onNodeOver:function(e,node){node.ui.onOver(e);},onNodeOut:function(e,node){node.ui.onOut(e);},onIconOver:function(e,node){node.ui.addClass('x-tree-ec-over');},onIconOut:function(e,node){node.ui.removeClass('x-tree-ec-over');},onIconClick:function(e,node){node.ui.ecClick(e);},onCheckboxClick:function(e,node){node.ui.onCheckChange(e);},onNodeDblClick:function(e,node){node.ui.onDblClick(e);},onNodeContextMenu:function(e,node){node.ui.onContextMenu(e);},beforeEvent:function(e){if(this.disabled){e.stopEvent();return false;}
+else if(this.getNodeTarget(e)){this.onNodeClick(e,this.getNode(e));}},delegateDblClick:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeDblClick(e,this.getNode(e));}},delegateContextMenu:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeContextMenu(e,this.getNode(e));}},onNodeClick:function(e,node){node.ui.onClick(e);},onNodeOver:function(e,node){this.lastOverNode=node;node.ui.onOver(e);},onNodeOut:function(e,node){node.ui.onOut(e);},onIconOver:function(e,node){node.ui.addClass('x-tree-ec-over');},onIconOut:function(e,node){node.ui.removeClass('x-tree-ec-over');},onIconClick:function(e,node){node.ui.ecClick(e);},onCheckboxClick:function(e,node){node.ui.onCheckChange(e);},onNodeDblClick:function(e,node){node.ui.onDblClick(e);},onNodeContextMenu:function(e,node){node.ui.onContextMenu(e);},beforeEvent:function(e){if(this.disabled){e.stopEvent();return false;}
 return true;},disable:function(){this.disabled=true;},enable:function(){this.disabled=false;}};
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/build/widgets/tree/TreeNode-min.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/build/widgets/tree/TreeNode-min.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/build/widgets/tree/TreeNode-min.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -25,7 +25,7 @@
 if(deep===true){this.expandChildNodes(true);}},isHiddenRoot:function(){return this.isRoot&&!this.getOwnerTree().rootVisible;},collapse:function(deep,anim){if(this.expanded&&!this.isHiddenRoot()){if(this.fireEvent("beforecollapse",this,deep,anim)===false){return;}
 this.expanded=false;if((this.getOwnerTree().animate&&anim!==false)||anim){this.ui.animCollapse(function(){this.fireEvent("collapse",this);if(deep===true){this.collapseChildNodes(true);}}.createDelegate(this));return;}else{this.ui.collapse();this.fireEvent("collapse",this);}}
 if(deep===true){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(true,false);}}},delayedExpand:function(delay){if(!this.expandProcId){this.expandProcId=this.expand.defer(delay,this);}},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);}
-this.expandProcId=false;},toggle:function(){if(this.expanded){this.collapse();}else{this.expand();}},ensureVisible:function(callback){var tree=this.getOwnerTree();tree.expandPath(this.parentNode.getPath(),false,function(){var node=tree.getNodeById(this.id);tree.getTreeEl().scrollChildIntoView(node.ui.anchor);Ext.callback(callback);}.createDelegate(this));},expandChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].expand(deep);}},collapseChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(deep);}},disable:function(){this.disabled=true;this.unselect();if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,true);}
+this.expandProcId=false;},toggle:function(){if(this.expanded){this.collapse();}else{this.expand();}},ensureVisible:function(callback){var tree=this.getOwnerTree();tree.expandPath(this.parentNode?this.parentNode.getPath():this.getPath(),false,function(){var node=tree.getNodeById(this.id);tree.getTreeEl().scrollChildIntoView(node.ui.anchor);Ext.callback(callback);}.createDelegate(this));},expandChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].expand(deep);}},collapseChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(deep);}},disable:function(){this.disabled=true;this.unselect();if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,true);}
 this.fireEvent("disabledchange",this,true);},enable:function(){this.disabled=false;if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,false);}
 this.fireEvent("disabledchange",this,false);},renderChildren:function(suppressEvent){if(suppressEvent!==false){this.fireEvent("beforechildrenrendered",this);}
 var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].render(true);}

Modified: mickael/trunk/ext/v3.0.0-a1/ext-all-debug.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/ext-all-debug.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/ext-all-debug.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,8 +6,6 @@
  * http://extjs.com/license
  */
 
-
-
 
 Ext.DomHelper = function(){
     var tempTableEl = null;
@@ -341,8 +339,6 @@
     };
 }();
 
-
-
 
 Ext.Template = function(html){
     var a = arguments;
@@ -499,8 +495,6 @@
 };
 
 
-
-
 Ext.DomQuery = function(){
     var cache = {}, simpleCache = {}, valueCache = {};
     var nonSpace = /\S/;
@@ -1188,8 +1182,6 @@
 
 Ext.query = Ext.DomQuery.select;
 
-
-
 
 Ext.util.Observable = function(){
     
@@ -1197,18 +1189,36 @@
         this.on(this.listeners);
         delete this.listeners;
     }
+    if(!this.events){
+        this.events = {};
+    }
 };
 Ext.util.Observable.prototype = {
     
     fireEvent : function(){
+        var a = Array.prototype.slice.call(arguments, 0);
+        var ename = a[0];
+        if(ename === true){
+            a.shift();
+            var c = this;
+            while(c){
+                if(c.fireEvent.apply(c, a) === false){
+                    return false;
+                }
+                c = c.getBubbleTarget ? c.getBubbleTarget() : null;
+            }
+            return true;
+        }
         if(this.eventsSuspended === true){
-            if (this.suspendedEventsQueue) {
-                this.suspendedEventsQueue.push(arguments);
+            var q = this.suspendedEventsQueue;
+            if (q) {
+                q[q.length] = a;
             }
         } else {
-            var ce = this.events[arguments[0].toLowerCase()];
+            var ce = this.events[ename.toLowerCase()];
             if(typeof ce == "object"){
-                return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));
+                a.shift();
+                return ce.fire.apply(ce, a);
             }
         }
         return true;
@@ -1451,6 +1461,14 @@
         };
     };
 
+    var createTargeted = function(h, o, scope){
+        return function(){
+            if(o.target == arguments[0]){
+                h.apply(scope, Array.prototype.slice.call(arguments, 0));
+            }
+        };
+    };
+
     Ext.util.Event = function(obj, name){
         this.name = name;
         this.obj = obj;
@@ -1476,6 +1494,9 @@
             scope = scope || this.obj;
             var l = {fn: fn, scope: scope, options: o};
             var h = fn;
+            if(o.target){
+                h = createTargeted(h, o, scope);
+            }
             if(o.delay){
                 h = createDelayed(h, o, scope);
             }
@@ -1541,8 +1562,6 @@
         }
     };
 })();
-
-
 
 Ext.EventManager = function(){
     var docReadyEvent, docReadyProcId, docReadyState = false;
@@ -1704,6 +1723,14 @@
         };
     };
 
+    var createTargeted = function(h, o){
+        return function(){
+            if(o.target == Ext.EventObject.setEvent(arguments[0]).target){
+                h.apply(this, Array.prototype.slice.call(arguments, 0));
+            }
+        };
+    };
+
     var listen = function(element, ename, opt, fn, scope){
         var o = (!opt || typeof opt == "boolean") ? {} : opt;
         fn = fn || o.fn; scope = scope || o.scope;
@@ -1742,6 +1769,9 @@
 
             fn.call(scope || el, e, t, o);
         };
+        if(o.target){
+            h = createTargeted(h, o);
+        }
         if(o.delay){
             h = createDelayed(h, o);
         }
@@ -1808,13 +1838,16 @@
             docReadyEvent.addListener(fn, scope, options);
         },
 
+        // private
+        doResizeEvent: function(){
+            resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
+        },
         
+        
         onWindowResize : function(fn, scope, options){
             if(!resizeEvent){
                 resizeEvent = new Ext.util.Event();
-                resizeTask = new Ext.util.DelayedTask(function(){
-                    resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
-                });
+                resizeTask = new Ext.util.DelayedTask(this.doResizeEvent);
                 E.on(window, "resize", this.fireWindowResize, this);
             }
             resizeEvent.addListener(fn, scope, options);
@@ -1886,10 +1919,11 @@
         var bd = document.body || document.getElementsByTagName('body')[0];
         if(!bd){ return false; }
         var cls = [' ',
-                Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : 'ext-ie7')
+                Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : (Ext.isIE7 ? 'ext-ie7' : 'ext-ie8'))
                 : Ext.isGecko ? "ext-gecko " + (Ext.isGecko2 ? 'ext-gecko2' : 'ext-gecko3')
                 : Ext.isOpera ? "ext-opera"
-                : Ext.isSafari ? "ext-safari" : ""];
+                : Ext.isSafari ? "ext-safari"
+                : Ext.isChrome ? "ext-chrome" : ""];
 
         if(Ext.isMac){
             cls.push("ext-mac");
@@ -2292,8 +2326,6 @@
 
     return new Ext.EventObjectImpl();
 }();
-
-
 
 (function(){
 var D = Ext.lib.Dom;
@@ -2848,13 +2880,13 @@
         var w, h, d = this.dom, s = d.style;
         if(s.width && s.width != 'auto'){
             w = parseInt(s.width, 10);
-            if(Ext.isBorderBox){
+            if(this.isBorderBox()){
                w -= this.getFrameWidth('lr');
             }
         }
         if(s.height && s.height != 'auto'){
             h = parseInt(s.height, 10);
-            if(Ext.isBorderBox){
+            if(this.isBorderBox()){
                h -= this.getFrameWidth('tb');
             }
         }
@@ -3349,7 +3381,7 @@
 
     
     getFrameWidth : function(sides, onlyContentBox){
-        return onlyContentBox && Ext.isBorderBox ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));
+        return onlyContentBox && this.isBorderBox() ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));
     },
 
     
@@ -3420,7 +3452,7 @@
     
     mask : function(msg, msgCls){
         if(this.getStyle("position") == "static"){
-            this.setStyle("position", "relative");
+            this.addClass("x-masked-relative");
         }
         if(this._maskMsg){
             this._maskMsg.remove();
@@ -3457,7 +3489,7 @@
             this._mask.remove();
             delete this._mask;
         }
-        this.removeClass("x-masked");
+        this.removeClass(["x-masked", "x-masked-relative"]);
     },
 
     
@@ -3926,8 +3958,6 @@
 });
 })();
 
-
-
 Ext.Element.addMethods({
     
     scrollIntoView : function(container, hscroll){
@@ -3978,7 +4008,7 @@
     
     scrollTo : function(side, value, animate){
         var prop = side.toLowerCase() == "left" ? "scrollLeft" : "scrollTop";
-        if(!animate || !A){
+        if(!animate){
             this.dom[prop] = value;
         }else{
             var to = prop == "scrollLeft" ? [value, this.dom.scrollTop] : [this.dom.scrollLeft, value];
@@ -4038,8 +4068,6 @@
          return scrolled;
     }
 });
-
-
 Ext.Element.addMethods({
     
     addKeyListener : function(key, fn, scope){
@@ -4068,8 +4096,6 @@
         return new Ext.KeyMap(this, config);
     }
 });
-
-
 Ext.Element.addMethods({
     
     appendChild: function(el){
@@ -4157,15 +4183,13 @@
             this.dom.parentNode.insertBefore(el, this.dom);
         }
         El.uncache(this.id);
-        this.dom.parentNode.removeChild(this.dom);
+        Ext.removeNode(this.dom);
         this.dom = el;
         this.id = Ext.id(el);
         El.cache[this.id] = this;
         return this;
     }
 });
-
-
 Ext.Element.addMethods({
     
     initDD : function(group, config, overrides){
@@ -4185,8 +4209,6 @@
         return Ext.apply(dd, overrides);
     }
 });
-
-
 Ext.Element.addMethods({
     
     getAnchorXY : function(anchor, local, s){
@@ -4409,8 +4431,6 @@
     }()
 });
 
-
-
 
 //Notifies Element that fx methods are available
 Ext.enableFx = true;
@@ -4800,14 +4820,17 @@
         var el = this.getFxEl();
         o = o || {};
         el.queueFx(o, function(){
-            arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}},
+            var to = o.endOpacity || 0;
+            arguments.callee.anim = this.fxanim({opacity:{to:to}},
                 o, null, .5, "easeOut", function(){
-                if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){
-                     this.dom.style.display = "none";
-                }else{
-                     this.dom.style.visibility = "hidden";
+                if(to === 0){
+                    if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){
+                         this.dom.style.display = "none";
+                    }else{
+                         this.dom.style.visibility = "hidden";
+                    }
+                    this.clearOpacity();
                 }
-                this.clearOpacity();
                 el.afterFx(o);
             });
         });
@@ -5108,8 +5131,6 @@
 Ext.Element.addMethods(Ext.Fx);
 
 
-
-
 Ext.CompositeElement = function(els){
     this.elements = [];
     this.addElements(els);
@@ -5364,8 +5385,6 @@
 };
 
 Ext.select = Ext.Element.select;
-
-
 
 Ext.data.Connection = function(config){
     Ext.apply(this, config);
@@ -5629,420 +5648,7 @@
         return Ext.lib.Ajax.serializeForm(form);
     }
 });
-
-
-(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;
-        }
-        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(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 = [];
-        }
-    }
-
-    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;        
-    }
-
-    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 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.Updater = Ext.extend(Ext.util.Observable, {
     constructor: function(el, forceNew){
         el = Ext.get(el);
@@ -6306,13 +5912,23 @@
 
 Ext.UpdateManager = Ext.Updater;
 
-
-
 
 
 
 
 (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)
@@ -6324,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,
@@ -6492,11 +6108,13 @@
 
     // private
     createNewFormat : function(format) {
-        var funcName = "format" + Date.formatFunctions.count++;
+        var funcName = "format" + Date.formatFunctions.count++,
+            code = "Date.prototype." + funcName + " = function(){return ",
+            special = false,
+            ch = '';
+
         Date.formatFunctions[format] = funcName;
-        var code = "Date.prototype." + funcName + " = function(){return ";
-        var special = false;
-        var ch = '';
+
         for (var i = 0; i < format.length; ++i) {
             ch = format.charAt(i);
             if (!special && ch == "\\") {
@@ -6514,69 +6132,77 @@
     },
 
     // private
-    createParser : function(format) {
-        var funcName = "parse" + Date.parseFunctions.count++;
-        var regexNum = Date.parseRegexes.length;
-        var currentGroup = 1;
-        Date.parseFunctions[format] = funcName;
+    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);",
+                    "}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))?" // favour UTC offset over GMT offset
+                    + " (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :" // reset to UTC, then add offset
+                    + " v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;", // reset to GMT, then add offset
+            "}"
+        ].join('\n');
 
-        var code = "Date." + funcName + " = function(input){\n"
-            + "var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;\n"
-            + "input = String(input);\n"
-            + "d = new Date();\n"
-            + "y = d.getFullYear();\n"
-            + "m = d.getMonth();\n"
-            + "d = d.getDate();\n"
-            + "var results = input.match(Date.parseRegexes[" + regexNum + "]);\n"
-            + "if (results && results.length > 0) {";
-        var regex = "";
+        return function(format) {
+            var funcName = "parse" + Date.parseFunctions.count++,
+                regexNum = Date.parseRegexes.length,
+                currentGroup = 1,
+                calc = "",
+                regex = "",
+                special = false,
+                ch = "";
 
-        var special = false;
-        var ch = '';
-        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;
+            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));
         }
+    }(),
 
-        code += "if (u){\n"
-            + "v = new Date(u * 1000);\n" // give top priority to UNIX time
-            + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){\n"
-            + "v = new Date(y, m, d, h, i, s, ms);\n"
-            + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){\n"
-            + "v = new Date(y, m, d, h, i, s);\n"
-            + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){\n"
-            + "v = new Date(y, m, d, h, i);\n"
-            + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){\n"
-            + "v = new Date(y, m, d, h);\n"
-            + "}else if (y >= 0 && m >= 0 && d > 0){\n"
-            + "v = new Date(y, m, d);\n"
-            + "}else if (y >= 0 && m >= 0){\n"
-            + "v = new Date(y, m);\n"
-            + "}else if (y >= 0){\n"
-            + "v = new Date(y);\n"
-            + "}\n}\nreturn (v && (z || o))?" // favour UTC offset over GMT offset
-            +     " (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :" // reset to UTC, then add offset
-            +         " v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;\n" // reset to GMT, then add offset
-            + "}";
-
-        Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$", "i");
-        eval(code);
-    },
-
     // private
     parseCodes : {
         
@@ -6623,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,
@@ -6720,7 +6346,7 @@
         u: {
             g:1,
             c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",
-            s:"(\\d+)" // milliseconds with leading zeroes (arbitrary number of digits allowed) e.g. 001, 100, 999, 999876543210
+            s:"(\\d+)" // decimal fraction of a second (minimum = 1 digit, maximum = unlimited)
         },
         O: {
             g:1,
@@ -6756,17 +6382,24 @@
             s:"([+\-]?\\d{1,5})" // leading '+' sign is optional for UTC offset
         },
         c: function() {
-            var calc = [];
-            var arr = [
-                $f("Y", 1), // year
-                $f("m", 2), // month
-                $f("d", 3), // day
-                $f("h", 4), // hour
-                $f("i", 5), // minute
-                $f("s", 6), // second
-                {c:"ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"}, // millisecond decimal fraction (with leading zeroes + arbitrary no. of digits)
-                {c:"if(results[9] == 'Z'){\no = 0;\n}else{\n" + $f("P", 9).c + "\n}"} // allow both "Z" (i.e. UTC) and "+08:00" (i.e. GMT) time zone delimiters
-            ];
+            var calc = [],
+                arr = [
+                    $f("Y", 1), // year
+                    $f("m", 2), // month
+                    $f("d", 3), // day
+                    $f("h", 4), // hour
+                    $f("i", 5), // minute
+                    $f("s", 6), // second
+                    {c:"ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"}, // decimal fraction of a second (minimum = 1 digit, maximum = unlimited)
+                    {c:[ // allow both "Z" (i.e. UTC) and "+08:00" (i.e. UTC offset) time zone delimiters
+                        "if(results[9] == 'Z'){",
+                            "z = 0;",
+                        "}else{",
+                            $f("P", 9).c,
+                        "}"
+                    ].join('\n')}
+                ];
+
             for (var i = 0, l = arr.length; i < l; ++i) {
                 calc.push(arr[i].c);
             }
@@ -6775,8 +6408,8 @@
                 g:1,
                 c:calc.join(""),
                 s:arr[0].s + "-" + arr[1].s + "-" + arr[2].s + "T" + arr[3].s + ":" + arr[4].s + ":" + arr[5].s
-                      + "((\.|,)\\d+)?" // ",998465" or ".998465" millisecond decimal fraction
-                      + "(" + $f("P", null).s + "|Z)" // "Z" (UTC) or "GMT+08:00" (GMT offset)
+                      + "((\.|,)\\d+)?" // decimal fraction of a second (e.g. ",998465" or ".998465")
+                      + "(Z|([+\-]\\d{2}:\\d{2}))" // "Z" (UTC) or "+08:00" (UTC offset)
             }
         },
         U: {
@@ -6819,7 +6452,7 @@
     
     getGMTOffset : function(colon) {
         return (this.getTimezoneOffset() > 0 ? "-" : "+")
-            + String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset() / 60)), 2, "0")
+            + String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset()) / 60), 2, "0")
             + (colon ? ":" : "")
             + String.leftPad(Math.abs(this.getTimezoneOffset() % 60), 2, "0");
     },
@@ -6837,14 +6470,18 @@
     
     getWeekOfYear : function() {
         // adapted from http://www.merlyn.demon.co.uk/weekcalc.htm
-        var ms1d = 864e5; // milliseconds in a day
-        var ms7d = 7 * ms1d; // milliseconds in a week
-        var DC3 = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate() + 3) / ms1d; // an Absolute Day Number
-        var AWN = Math.floor(DC3 / 7); // an Absolute Week Number
-        var Wyr = new Date(AWN * ms7d).getUTCFullYear();
-        return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1;
-    },
+        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
+                Wyr = new Date(AWN * ms7d).getUTCFullYear();
+
+            return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1;
+        }
+    }(),
+
     
     isLeapYear : function() {
         var year = this.getFullYear();
@@ -6979,8 +6616,6 @@
         }
     };
 }
-
-
 
 Ext.util.DelayedTask = function(fn, scope, args){
     var id = null, d, t;
@@ -7016,8 +6651,6 @@
         }
     };
 };
-
-
 
 Ext.util.TaskRunner = function(interval){
     interval = interval || 10;
@@ -7109,8 +6742,6 @@
 
 
 Ext.TaskMgr = new Ext.util.TaskRunner();
-
-
 
 Ext.util.MixedCollection = function(allowFunctions, keyFn){
     this.items = [];
@@ -7465,9 +7096,69 @@
 });
 
 Ext.util.MixedCollection.prototype.get = Ext.util.MixedCollection.prototype.item;
-
-
 
+Ext.ComponentMgr = function(){
+    var all = new Ext.util.MixedCollection();
+    var types = {};
+    var ptypes = {};
+
+    return {
+        
+        register : function(c){
+            all.add(c);
+        },
+
+        
+        unregister : function(c){
+            all.remove(c);
+        },
+
+        
+        get : function(id){
+            return all.get(id);
+        },
+
+        
+        onAvailable : function(id, fn, scope){
+            all.on("add", function(index, o){
+                if(o.id == id){
+                    fn.call(scope || o, o);
+                    all.un("add", fn, scope);
+                }
+            });
+        },
+
+        
+        all : all,
+
+        
+        registerType : function(xtype, cls){
+            types[xtype] = cls;
+            cls.xtype = xtype;
+        },
+
+        
+        create : function(config, defaultType){
+            return config.render ? config : new types[config.xtype || defaultType](config);
+        },
+
+        registerPlugin : function(ptype, cls){
+            ptypes[ptype] = cls;
+            cls.ptype = ptype;
+        },
+
+        createPlugin : function(config, defaultType){
+            return new ptypes[config.ptype || defaultType](config);
+        }
+    };
+}();
+
+
+Ext.reg = Ext.ComponentMgr.registerType; // this will be called a lot internally, shorthand to keep the bytes down
+Ext.preg = Ext.ComponentMgr.registerPlugin;
+Ext.create = Ext.ComponentMgr.create;
+
+
 Ext.util.JSON = new (function(){
     var useHasOwn = !!{}.hasOwnProperty;
 
@@ -7584,8 +7275,6 @@
 Ext.decode = Ext.util.JSON.decode;
 
 
-
-
 Ext.util.Format = function(){
     var trimRe = /^\s+|\s+$/g;
     return {
@@ -7736,6 +7425,7 @@
             }
         }(),
 
+
         
         number: function(v, format) {
             if(!format){
@@ -7745,52 +7435,52 @@
             if(typeof v != 'number' || isNaN(v)){
                 return '';
             }
-            var hasComma = -1 < format.indexOf(','),
-                psplit = format.replace(/[^\d\.]/g,'').split('.');
+            var comma = ',';
+            var dec = '.';
+            var i18n = false;
+            
+            if(format.substr(format.length - 2) == '/i'){
+                format = format.substr(0, format.length-2);
+                i18n = true;
+                comma = '.';
+                dec = ',';
+            }
 
-            // compute precision
+            var hasComma = format.indexOf(comma) != -1,
+                psplit = (i18n ? format.replace(/[^\d\,]/g,'') : format.replace(/[^\d\.]/g,'')).split(dec);
+
             if (1 < psplit.length) {
-                // fix number precision
                 v = v.toFixed(psplit[1].length);
             }
-            // error: too many periods
             else if (2 < psplit.length) {
                 throw('NumberFormatException: invalid format, formats should have no more than 1 period: ' + format);
             }
-            // remove precision
             else {
                 v = v.toFixed(0);
             }
 
-            // get the string now that precision is correct
             var fnum = v.toString();
 
-            // format has comma, then compute commas
             if (hasComma) {
-                // remove precision for computation
                 psplit = fnum.split('.');
 
                 var cnum = psplit[0],
                     parr = [],
                     j = cnum.length,
                     m = Math.floor(j / 3),
-                    n = cnum.length % 3 || 3; // n cannot be ZERO or causes infinite loop
+                    n = cnum.length % 3 || 3;
 
-                // break the number into chunks of 3 digits; first chunk may be less than 3
                 for (var i = 0; i < j; i += n) {
                     if (i != 0) {n = 3;}
                     parr[parr.length] = cnum.substr(i, n);
                     m -= 1;
                 }
-
-                // put chunks back together, separated by comma
-                fnum = parr.join(',');
-
-                // add the precision back in
-                if (psplit[1]) {fnum += '.' + psplit[1];}
+                fnum = parr.join(comma);
+                if (psplit[1]) {
+                    fnum += dec + psplit[1];
+                }
             }
 
-            // replace the number portion of the format with fnum
             return format.replace(/[\d,?\.?]+/, fnum);
         },
 
@@ -7807,8 +7497,6 @@
         }
     }
 }();
-
-
 
 Ext.XTemplate = function(){
     Ext.XTemplate.superclass.constructor.apply(this, arguments);
@@ -7969,8 +7657,6 @@
     return new Ext.XTemplate(el.value || el.innerHTML);
 };
 
-
-
 Ext.util.CSS = function(){
 	var rules = null;
    	var doc = document;
@@ -8090,8 +7776,6 @@
    	}
    };	
 }();
-
-
 
 Ext.util.ClickRepeater = function(el, config)
 {
@@ -8137,6 +7821,12 @@
     timer : 0,
 
     // private
+    destroy : function() {
+        Ext.destroy(this.el);
+        this.purgeListeners();
+    },
+    
+    // private
     handleMouseDown : function(){
         clearTimeout(this.timer);
         this.el.blur();
@@ -8201,8 +7891,6 @@
         this.fireEvent("mouseup", this);
     }
 });
-
-
 
 Ext.KeyNav = function(el, config){
     this.el = Ext.get(el);
@@ -8305,8 +7993,6 @@
 	}
 };
 
-
-
 Ext.KeyMap = function(el, config, eventName){
     this.el  = Ext.get(el);
     this.eventName = eventName || "keydown";
@@ -8428,8 +8114,6 @@
 		}
 	}
 };
-
-
 
 Ext.util.TextMetrics = function(){
     var shared;
@@ -8507,8 +8191,6 @@
     }
 });
 
-
-
 
 
 (function() {
@@ -8562,6 +8244,9 @@
     lock: function() { this.locked = true; },
 
     
+    moveOnly: false,
+
+    
     unlock: function() { this.locked = false; },
 
     
@@ -9291,7 +8976,7 @@
         
         _remove: function(oDD) {
             for (var g in oDD.groups) {
-                if (g && this.ids[g][oDD.id]) {
+                if (g && this.ids[g] && this.ids[g][oDD.id]) {
                     delete this.ids[g][oDD.id];
                 }
             }
@@ -9367,8 +9052,13 @@
             if(Ext.QuickTips){
                 Ext.QuickTips.disable();
             }
+            if(this.dragCurrent){
+                // the original browser mouseup wasn't handled (e.g. outside FF browser window)
+                // so clean up first to avoid breaking the next drag
+                this.handleMouseUp(e);
+            }
+            
             this.currentTarget = e.getTarget();
-
             this.dragCurrent = oDD;
 
             var el = oDD.getEl();
@@ -9454,7 +9144,6 @@
             if (! this.dragCurrent) {
                 return true;
             }
-
             // var button = e.which || e.button;
 
             // check for IE mouseup outside of page boundary
@@ -10283,8 +9972,6 @@
     }
 });
 
-
-
 Ext.dd.DragTracker = function(config){
     Ext.apply(this, config);
     this.addEvents(
@@ -10322,7 +10009,9 @@
         if(this.fireEvent('mousedown', this, e) !== false && this.onBeforeStart(e) !== false){
             this.startXY = this.lastXY = e.getXY();
             this.dragTarget = this.delegate ? target : this.el.dom;
-            e.preventDefault();
+            if(this.preventDefault !== false){
+                e.preventDefault();
+            }
             var doc = Ext.getDoc();
             doc.on('mouseup', this.onMouseUp, this);
             doc.on('mousemove', this.onMouseMove, this);
@@ -10356,11 +10045,14 @@
         doc.un('selectstart', this.stopSelect, this);
         e.preventDefault();
         this.clearStart();
+        var wasActive = this.active;
         this.active = false;
         delete this.elRegion;
         this.fireEvent('mouseup', this, e);
-        this.onEnd(e);
-        this.fireEvent('dragend', this, e);
+        if(wasActive){
+            this.onEnd(e);
+            this.fireEvent('dragend', this, e);
+        }
     },
 
     triggerStart: function(isTimer){
@@ -10438,8 +10130,6 @@
     }
 });
 
-
-
 Ext.dd.ScrollManager = function(){
     var ddm = Ext.dd.DragDropMgr;
     var els = {};
@@ -10587,8 +10277,6 @@
     };
 }();
 
-
-
 Ext.dd.Registry = function(){
     var elements = {}; 
     var handles = {}; 
@@ -10671,8 +10359,6 @@
     };
 }();
 
-
-
 Ext.dd.StatusProxy = function(config){
     Ext.apply(this, config);
     this.id = this.id || Ext.id();
@@ -10794,8 +10480,6 @@
     }
 };
 
-
-
 Ext.dd.DragSource = function(el, config){
     this.el = Ext.get(el);
     if(!this.dragData){
@@ -11043,8 +10727,6 @@
     }    
 });
 
-
-
 Ext.dd.DropTarget = function(el, config){
     this.el = Ext.get(el);
     
@@ -11099,8 +10781,6 @@
     }
 });
 
-
-
 Ext.dd.DragZone = function(el, config){
     Ext.dd.DragZone.superclass.constructor.call(this, el, config);
     if(this.containerScroll){
@@ -11139,8 +10819,6 @@
     }
 });
 
-
-
 Ext.dd.DropZone = function(el, config){
     Ext.dd.DropZone.superclass.constructor.call(this, el, config);
 };
@@ -11233,8 +10911,6 @@
 });
 
 
-
-
 Ext.data.SortTypes = {
     
     none : function(s){
@@ -11284,8 +10960,6 @@
     	return val;
     }
 };
-
-
 
 Ext.data.Record = function(data, id){
     this.id = (id || id === 0) ? id : ++Ext.data.Record.AUTO_ID;
@@ -11355,7 +11029,7 @@
     
     beginEdit : function(){
         this.editing = true;
-        this.modified = {};
+        this.modified = this.modified || {};
     },
 
     
@@ -11429,8 +11103,6 @@
         return !!(this.modified && this.modified.hasOwnProperty(fieldName));
     }
 };
-
-
 
 Ext.StoreMgr = Ext.apply(new Ext.util.MixedCollection(), {
     
@@ -11451,7 +11123,7 @@
 
     
     lookup : function(id){
-        return typeof id == "object" ? id : this.get(id);
+        return typeof id == "object" ? (id.events ? id : Ext.create(id, 'store')) : this.get(id);
     },
 
     // getKey implementation for MixedCollection
@@ -11459,8 +11131,6 @@
          return o.storeId || o.id;
     }
 });
-
-
 
 Ext.data.Store = function(config){
     this.data = new Ext.util.MixedCollection(false);
@@ -11469,7 +11139,7 @@
     };
     
     this.baseParams = {};
-    // private
+    
     this.paramNames = {
         "start" : "start",
         "limit" : "limit",
@@ -11528,7 +11198,9 @@
     }
 
     this.sortToggle = {};
-	if(this.sortInfo){
+    if(this.sortField){
+        this.setDefaultSort(this.sortField, this.sortDir);
+    }else if(this.sortInfo){
 		this.setDefaultSort(this.sortInfo.field, this.sortInfo.direction);
 	}
 
@@ -11974,19 +11646,37 @@
         this.baseParams[name] = value;
     }
 });
-
-
 
-Ext.data.SimpleStore = function(config){
-    Ext.data.SimpleStore.superclass.constructor.call(this, Ext.apply(config, {
-        reader: new Ext.data.ArrayReader({
-                id: config.id
-            },
-            Ext.data.Record.create(config.fields)
-        )
-    }));
-};
-Ext.extend(Ext.data.SimpleStore, Ext.data.Store, {
+Ext.reg('store', Ext.data.Store);
+
+Ext.data.JsonStore = Ext.extend(Ext.data.Store, {
+    constructor: function(config){
+        Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(config, {
+            reader: new Ext.data.JsonReader(config)
+        }));
+    }
+    
+    
+});
+Ext.reg('jsonstore', Ext.data.JsonStore);
+Ext.data.XmlStore = Ext.extend(Ext.data.Store, {
+    constructor: function(config){
+        Ext.data.XmlStore.superclass.constructor.call(this, Ext.apply(config, {
+            reader: new Ext.data.XmlReader(config)
+        }));
+    }
+    
+    
+});
+Ext.reg('xmlstore', Ext.data.XmlStore);
+
+Ext.data.ArrayStore = Ext.extend(Ext.data.Store, {
+    constructor: function(config){
+        Ext.data.ArrayStore.superclass.constructor.call(this, Ext.apply(config, {
+            reader: new Ext.data.ArrayReader(config)
+        }));
+    },
+
     loadData : function(data, append){
         if(this.expandData === true){
             var r = [];
@@ -11995,33 +11685,14 @@
             }
             data = r;
         }
-        Ext.data.SimpleStore.superclass.loadData.call(this, data, append);
+        Ext.data.ArrayStore.superclass.loadData.call(this, data, append);
     }
 });
-
-
+Ext.reg('arraystore', Ext.data.ArrayStore);
 
-Ext.data.JsonStore = function(c){
-    
-    
-    Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(c, {
-        proxy: c.proxy || (!c.data ? new Ext.data.HttpProxy({url: c.url}) : undefined),
-        reader: new Ext.data.JsonReader(c, c.fields)
-    }));
-};
-Ext.extend(Ext.data.JsonStore, Ext.data.Store);
-
-
-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);
-
-
+// backwards compat
+Ext.data.SimpleStore = Ext.data.ArrayStore;
+Ext.reg('simplestore', Ext.data.SimpleStore);
 // 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.
@@ -12122,8 +11793,6 @@
     sortDir : "ASC"
 };
 
-
-
 Ext.data.DataReader = function(meta, recordType){
     
     this.meta = meta;
@@ -12135,8 +11804,6 @@
     
 };
 
-
-
 Ext.data.DataProxy = function(){
     this.addEvents(
         
@@ -12149,8 +11816,6 @@
 
 Ext.extend(Ext.data.DataProxy, Ext.util.Observable);
 
-
-
 Ext.data.MemoryProxy = function(data){
     Ext.data.MemoryProxy.superclass.constructor.call(this);
     this.data = data;
@@ -12179,8 +11844,6 @@
     }
 });
 
-
-
 Ext.data.HttpProxy = function(conn){
     Ext.data.HttpProxy.superclass.constructor.call(this);
     
@@ -12255,8 +11918,6 @@
     }
 });
 
-
-
 Ext.data.ScriptTagProxy = function(config){
     Ext.data.ScriptTagProxy.superclass.constructor.call(this);
     Ext.apply(this, config);
@@ -12381,62 +12042,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 || {};
@@ -12552,8 +12157,6 @@
 	    };
     }
 });
-
-
 
 Ext.data.XmlReader = function(meta, recordType){
     meta = meta || {};
@@ -12576,7 +12179,7 @@
         var root = doc.documentElement || doc;
     	var q = Ext.DomQuery;
     	var recordType = this.recordType, fields = recordType.prototype.fields;
-    	var sid = this.meta.id;
+    	var sid = this.meta.idPath || this.meta.id;
     	var totalRecords = 0, success = true;
     	if(this.meta.totalRecords){
     	    totalRecords = q.selectNumber(this.meta.totalRecords, root, 0);
@@ -12610,17 +12213,26 @@
 	    };
     }
 });
-
-
 
 Ext.data.ArrayReader = Ext.extend(Ext.data.JsonReader, {
     
     readRecords : function(o){
-        var sid = this.meta ? this.meta.id : null;
+        this.arrayData = o;
+        var s = this.meta;
+        var sid = s ? (s.idIndex || s.id) : null;
     	var recordType = this.recordType, fields = recordType.prototype.fields;
     	var records = [];
-    	var root = o;
-	    for(var i = 0; i < root.length; i++){
+
+        if(!this.getRoot){
+            this.getRoot = s.root ? this.getJsonAccessor(s.root) : function(p){return p;};
+            if(s.totalProperty) {
+                this.getTotal = this.getJsonAccessor(s.totalProperty);
+            }
+        }
+
+        var root = this.getRoot(o);
+
+        for(var i = 0; i < root.length; i++){
 		    var n = root[i];
 	        var values = {};
 	        var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);
@@ -12635,15 +12247,573 @@
 	        record.json = n;
 	        records[records.length] = record;
 	    }
-	    return {
+
+        var totalRecords = records.length;
+
+        if(s.totalProperty){
+            var v = parseInt(this.getTotal(o), 10);
+            if(!isNaN(v)){
+                totalRecords = v;
+            }
+        }
+
+        return {
 	        records : records,
-	        totalRecords : records.length
+	        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 = 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 = {};
    
@@ -13139,8 +13309,6 @@
     }
 });
 
-
-
 Ext.data.GroupingStore = Ext.extend(Ext.data.Store, {
     
     
@@ -13221,71 +13389,7 @@
                (this.sortInfo ? this.sortInfo.field : undefined) : this.groupField;
     }
 });
-
-
 
-Ext.ComponentMgr = function(){
-    var all = new Ext.util.MixedCollection();
-    var types = {};
-    var ptypes = {};
-
-    return {
-        
-        register : function(c){
-            all.add(c);
-        },
-
-        
-        unregister : function(c){
-            all.remove(c);
-        },
-
-        
-        get : function(id){
-            return all.get(id);
-        },
-
-        
-        onAvailable : function(id, fn, scope){
-            all.on("add", function(index, o){
-                if(o.id == id){
-                    fn.call(scope || o, o);
-                    all.un("add", fn, scope);
-                }
-            });
-        },
-
-        
-        all : all,
-
-        
-        registerType : function(xtype, cls){
-            types[xtype] = cls;
-            cls.xtype = xtype;
-        },
-
-        
-        create : function(config, defaultType){
-            return new types[config.xtype || defaultType](config);
-        },
-
-        registerPlugin : function(ptype, cls){
-            ptypes[ptype] = cls;
-            cls.ptype = ptype;
-        },
-
-        createPlugin : function(config, defaultType){
-            return new ptypes[config.ptype || defaultType](config);
-        }
-    };
-}();
-
-
-Ext.reg = Ext.ComponentMgr.registerType; // this will be called a lot internally, shorthand to keep the bytes down
-Ext.preg = Ext.ComponentMgr.registerPlugin;
-
-
-
 Ext.Component = function(config){
     config = config || {};
     if(config.initialConfig){
@@ -13319,6 +13423,8 @@
         
         'render',
         
+        'afterrender',
+        
         'beforedestroy',
         
         'destroy',
@@ -13482,24 +13588,49 @@
             if(this.stateful !== false){
                 this.initStateEvents();
             }
+            this.initRef();
+            this.fireEvent("afterrender", this);
         }
         return this;
     },
 
+    initRef : function(){
+        if(this.ref){
+            var levels = this.ref.split('/');
+            var last = levels.length, i = 0;
+            var t = this;
+            while(i < last){
+                if(t.ownerCt){
+                    t = t.ownerCt;
+                }
+                i++;
+            }
+            t[levels[--i]] = this;
+        }
+    },
+
     // private
     initState : function(config){
         if(Ext.state.Manager){
-            var state = Ext.state.Manager.get(this.stateId || this.id);
-            if(state){
-                if(this.fireEvent('beforestaterestore', this, state) !== false){
-                    this.applyState(state);
-                    this.fireEvent('staterestore', this, state);
+            var id = this.getStateId();
+            if(id){
+                var state = Ext.state.Manager.get(id);
+                if(state){
+                    if(this.fireEvent('beforestaterestore', this, state) !== false){
+                        this.applyState(state);
+                        this.fireEvent('staterestore', this, state);
+                    }
                 }
             }
         }
     },
 
     // private
+    getStateId : function(){
+        return this.stateId || ((this.id.indexOf('ext-comp-') == 0 || this.id.indexOf('ext-gen') == 0) ? null : this.id);
+    },
+
+    // private
     initStateEvents : function(){
         if(this.stateEvents){
             for(var i = 0, e; e = this.stateEvents[i]; i++){
@@ -13523,10 +13654,13 @@
     // private
     saveState : function(){
         if(Ext.state.Manager){
-            var state = this.getState();
-            if(this.fireEvent('beforestatesave', this, state) !== false){
-                Ext.state.Manager.set(this.stateId || this.id, state);
-                this.fireEvent('statesave', this, state);
+            var id = this.getStateId();
+            if(id){
+                var state = this.getState();
+                if(this.fireEvent('beforestatesave', this, state) !== false){
+                    Ext.state.Manager.set(id, state);
+                    this.fireEvent('statesave', this, state);
+                }
             }
         }
     },
@@ -13578,7 +13712,7 @@
             }
             if(this.overCls) {
                 this.el.addClassOnOver(this.overCls);
-            }            
+            }
         }
     },
 
@@ -13829,6 +13963,7 @@
         item.on(ename, fn, scope, opt);
     },
 
+    
     nextSibling : function(){
         if(this.ownerCt){
             var index = this.ownerCt.items.indexOf(this);
@@ -13839,6 +13974,7 @@
         return null;
     },
 
+    
     previousSibling : function(){
         if(this.ownerCt){
             var index = this.ownerCt.items.indexOf(this);
@@ -13847,16 +13983,20 @@
             }
         }
         return null;
+    },
+
+    
+    getBubbleTarget : function(){
+        return this.ownerCt;
     }
 });
 
 Ext.reg('component', Ext.Component);
 
 
-
-
 Ext.Action = function(config){
     this.initialConfig = config;
+    this.itemId = config.itemId = (config.itemId || config.id || Ext.id());
     this.items = [];
 }
 
@@ -13971,433 +14111,429 @@
         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){
     Ext.apply(this, config);
@@ -14549,8 +14685,6 @@
         }
     };
 }();
-
-
 
 Ext.BoxComponent = Ext.extend(Ext.Component, {
     
@@ -14794,8 +14928,6 @@
 });
 Ext.reg('spacer', Ext.Spacer);
 
-
-
 Ext.SplitBar = function(dragElement, resizingElement, orientation, placement, existingProxy){
     
     
@@ -14877,8 +15009,8 @@
         this.overlay.show();
         Ext.get(this.proxy).setDisplayed("block");
         var size = this.adapter.getElementSize(this);
-        this.activeMinSize = this.getMinimumSize();;
-        this.activeMaxSize = this.getMaximumSize();;
+        this.activeMinSize = this.getMinimumSize();
+        this.activeMaxSize = this.getMaximumSize();
         var c1 = size - this.activeMinSize;
         var c2 = Math.max(this.activeMaxSize - size, 0);
         if(this.orientation == Ext.SplitBar.HORIZONTAL){
@@ -14906,7 +15038,7 @@
         Ext.get(this.proxy).setDisplayed(false);
         var endPoint = Ext.lib.Event.getXY(e);
         if(this.overlay){
-            this.overlay.remove();
+            Ext.destroy(this.overlay);
             delete this.overlay;
         }
         var newSize;
@@ -14978,7 +15110,7 @@
             this.shim.remove();
         }
         this.dd.unreg();
-        Ext.removeNode(this.proxy);
+        Ext.destroy(Ext.get(this.proxy));
         if(removeEl){
             this.el.remove();
         }
@@ -15094,8 +15226,6 @@
 
 Ext.SplitBar.BOTTOM = 4;
 
-
-
 
 Ext.Container = Ext.extend(Ext.BoxComponent, {
     
@@ -15214,7 +15344,7 @@
         if(this.fireEvent('beforeadd', this, c, pos) !== false && this.onBeforeAdd(c) !== false){
             this.items.add(c);
             c.ownerCt = this;
-            this.fireEvent('add', this, c, pos);
+            this.fireEvent(true, 'add', this, c, pos);
         }
         return c;
     },
@@ -15240,7 +15370,7 @@
         if(this.fireEvent('beforeadd', this, c, index) !== false && this.onBeforeAdd(c) !== false){
             this.items.insert(index, c);
             c.ownerCt = this;
-            this.fireEvent('add', this, c, index);
+            this.fireEvent(true, 'add', this, c, index);
         }
         return c;
     },
@@ -15282,7 +15412,7 @@
             if(this.layout && this.layout.activeItem == c){
                 delete this.layout.activeItem;
             }
-            this.fireEvent('remove', this, c);
+            this.fireEvent(true, 'remove', this, c);
         }
         return c;
     },
@@ -15307,7 +15437,7 @@
 
     // private
     createComponent : function(config){
-        return Ext.ComponentMgr.create(config, this.defaultType);
+        return Ext.create(config, this.defaultType);
     },
 
     
@@ -15425,8 +15555,6 @@
 
 Ext.Container.LAYOUTS = {};
 Ext.reg('container', Ext.Container);
-
-
 
 Ext.layout.ContainerLayout = function(config){
     Ext.apply(this, config);
@@ -15484,7 +15612,8 @@
             }
         }else if(c && !this.isValidParent(c, target)){
             if(this.extraCls){
-                c.addClass(this.extraCls);
+                var t = c.getPositionEl ? c.getPositionEl() : c;
+            	t.addClass(this.extraCls);
             }
             if(typeof position == 'number'){
                 position = target.dom.childNodes[position];
@@ -15554,12 +15683,11 @@
         };
     },
 
+    
     destroy : Ext.emptyFn
 };
 Ext.Container.LAYOUTS['auto'] = Ext.layout.ContainerLayout;
 
-
-
 Ext.layout.FitLayout = Ext.extend(Ext.layout.ContainerLayout, {
     // private
     monitorResize:true,
@@ -15581,8 +15709,6 @@
 });
 Ext.Container.LAYOUTS['fit'] = Ext.layout.FitLayout;
 
-
-
 Ext.layout.CardLayout = Ext.extend(Ext.layout.FitLayout, {
     
     deferredRender : false,
@@ -15614,8 +15740,6 @@
 });
 Ext.Container.LAYOUTS['card'] = Ext.layout.CardLayout;
 
-
-
 Ext.layout.AnchorLayout = Ext.extend(Ext.layout.ContainerLayout, {
     // private
     monitorResize:true,
@@ -15723,8 +15847,6 @@
 });
 Ext.Container.LAYOUTS['anchor'] = Ext.layout.AnchorLayout;
 
-
-
 Ext.layout.ColumnLayout = Ext.extend(Ext.layout.ContainerLayout, {
     // private
     monitorResize:true,
@@ -15788,8 +15910,6 @@
 });
 
 Ext.Container.LAYOUTS['column'] = Ext.layout.ColumnLayout;
-
-
 
 Ext.layout.BorderLayout = Ext.extend(Ext.layout.ContainerLayout, {
     // private
@@ -15839,7 +15959,7 @@
         var centerW = w, centerH = h, centerY = 0, centerX = 0;
 
         var n = this.north, s = this.south, west = this.west, e = this.east, c = this.center;
-        if(!c){
+        if(!c && Ext.layout.BorderLayout.WARN !== false){
             throw 'No center region defined in BorderLayout ' + ct.id;
         }
 
@@ -15884,22 +16004,21 @@
             centerW -= totalWidth;
             e.applyLayout(b);
         }
-
-        var m = c.getMargins();
-        var centerBox = {
-            x: centerX + m.left,
-            y: centerY + m.top,
-            width: centerW - (m.left+m.right),
-            height: centerH - (m.top+m.bottom)
-        };
-        c.applyLayout(centerBox);
-
+        if(c){
+            var m = c.getMargins();
+            var centerBox = {
+                x: centerX + m.left,
+                y: centerY + m.top,
+                width: centerW - (m.left+m.right),
+                height: centerH - (m.top+m.bottom)
+            };
+            c.applyLayout(centerBox);
+        }
         if(collapsed){
             for(var i = 0, len = collapsed.length; i < len; i++){
                 collapsed[i].collapse(false);
             }
         }
-
         if(Ext.isIE && Ext.isStrict){ // workaround IE strict repainting issue
             target.repaint();
         }
@@ -15909,8 +16028,12 @@
         var r = ['north', 'south', 'east', 'west'];
         for (var i = 0; i < r.length; i++) {
             var region = this[r[i]];
-            if (region && region.split) {
-                region.split.destroy(true);
+            if(region){
+                if(region.destroy){
+                    region.destroy();
+                }else if (region.split){
+                    region.split.destroy(true);
+                }
             }
         }
         Ext.layout.BorderLayout.superclass.destroy.call(this);
@@ -15965,6 +16088,7 @@
     defaultNSCMargins : {left:5,top:5,right:5,bottom:5},
     // private
     defaultEWCMargins : {left:5,top:0,right:5,bottom:0},
+    floatingZIndex: 100,
 
     
     isCollapsed : false,
@@ -16098,7 +16222,7 @@
         }
         c.hide();
         c.dom.style.visibility = 'hidden';
-        this.panel.el.setStyle('z-index', 100);
+        this.panel.el.setStyle('z-index', this.floatingZIndex);
     },
 
     // private
@@ -16252,7 +16376,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(), {
@@ -16582,17 +16706,22 @@
     
     getSplitBar : function(){
         return this.split;
+    },
+    
+    // inherit docs
+    destroy : function() {
+        Ext.destroy(
+            this.miniSplitEl, 
+            this.split, 
+            this.splitEl
+        );
     }
 });
 
 Ext.Container.LAYOUTS['border'] = Ext.layout.BorderLayout;
-
-
 
 Ext.layout.FormLayout = Ext.extend(Ext.layout.AnchorLayout, {
     
-    
-    
     labelSeparator : ':',
 
     // private
@@ -16669,7 +16798,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
@@ -16682,8 +16811,6 @@
 
 Ext.Container.LAYOUTS['form'] = Ext.layout.FormLayout;
 
-
-
 Ext.layout.Accordion = Ext.extend(Ext.layout.FitLayout, {
     
     fill : true,
@@ -16721,7 +16848,7 @@
         }
         if(!this.activeItem && !c.collapsed){
             this.activeItem = c;
-        }else if(this.activeItem){
+        }else if(this.activeItem && this.activeItem != c){
             c.collapsed = true;
         }
         Ext.layout.Accordion.superclass.renderItem.apply(this, arguments);
@@ -16766,12 +16893,19 @@
             size.height -= hh;
             item.setSize(size);
         }
+    },
+
+    
+    setActiveItem : function(item){
+        item = this.container.getComponent(item);
+        this.activeItem = item;
+        if(item){
+            item.expand();
+        }
     }
 });
 Ext.Container.LAYOUTS['accordion'] = Ext.layout.Accordion;
 
-
-
 Ext.layout.TableLayout = Ext.extend(Ext.layout.ContainerLayout, {
     
 
@@ -16876,8 +17010,6 @@
 
 Ext.Container.LAYOUTS['table'] = Ext.layout.TableLayout;
 
-
-
 Ext.layout.AbsoluteLayout = Ext.extend(Ext.layout.AnchorLayout, {
     extraCls: 'x-abs-layout-item',
     isForm: false,
@@ -16890,7 +17022,15 @@
     },
 
     onLayout : function(ct, target){
-        if(this.isForm){ ct.body.position(); } else { target.position(); }
+        if(this.isForm){
+            ct.body.position();
+            this.paddingLeft = ct.body.getPadding('r');
+            this.paddingTop = ct.body.getPadding('t');
+        } else {
+            target.position();
+            this.paddingLeft = target.getPadding('r');
+            this.paddingTop = target.getPadding('t');
+        }
         Ext.layout.AbsoluteLayout.superclass.onLayout.call(this, ct, target);
     },
 
@@ -16906,19 +17046,17 @@
 
     // private
     adjustWidthAnchor : function(value, comp){
-        return value ? value - comp.getPosition(true)[0] : value;
+        return value ? value - comp.getPosition(true)[0] + this.paddingLeft : value;
     },
 
     // private
     adjustHeightAnchor : function(value, comp){
-        return  value ? value - comp.getPosition(true)[1] : value;
+        return  value ? value - comp.getPosition(true)[1] + this.paddingTop : value;
     }
     
 });
 Ext.Container.LAYOUTS['absolute'] = Ext.layout.AbsoluteLayout;
 
-
-
 Ext.Viewport = Ext.extend(Ext.Container, {
 	
     
@@ -16952,8 +17090,258 @@
     }
 });
 Ext.reg('viewport', Ext.Viewport);
+Ext.layout.Box = Ext.extend(Ext.layout.ContainerLayout, {
+    // private
+    monitorResize:true,
+    scrollOffset : 0,
+    extraCls: 'x-box-item',
+    ctCls: 'x-box-layout-ct',
+    innerCls: 'x-box-inner',
 
+    defaultMargins : {left:0,top:0,right:0,bottom:0},
+    padding:'0',
+    pack: 'start',
 
+    // private
+    isValidParent : function(c, target){
+        return c.getEl().dom.parentNode == this.innerCt.dom;
+    },
+
+    // private
+    onLayout : function(ct, target){
+        var cs = ct.items.items, len = cs.length, c, i, last = len-1, cm;
+
+        if(!this.innerCt){
+            target.addClass(this.ctCls);
+
+            // the innerCt prevents wrapping and shuffling while
+            // the container is resizing
+            this.innerCt = target.createChild({cls:this.innerCls});
+            this.padding = this.parseMargins(this.padding);
+        }
+        this.renderAll(ct, this.innerCt);
+    },
+
+    // private
+    renderItem : function(c){
+        if(typeof c.margins == 'string'){
+            c.margins = this.parseMargins(c.margins);
+        }else if(!c.margins){
+            c.margins = this.defaultMargins;
+        }
+        Ext.layout.Box.superclass.renderItem.apply(this, arguments);
+    },
+
+    getTargetSize : function(target){
+        return Ext.isIE && target.dom != Ext.getBody().dom ? target.getStyleSize() : target.getViewSize();
+    }
+
+    
+});
+
+Ext.layout.VBox = Ext.extend(Ext.layout.Box, {
+    // private
+    align: 'left', // left, center, stretch, strechmax
+    pack: 'start',
+
+    // private
+    onLayout : function(ct, target){
+        Ext.layout.VBox.superclass.onLayout.call(this, ct, target);
+
+        var cs = ct.items.items, len = cs.length, c, i, last = len-1, cm;
+        var size = this.getTargetSize(target);
+
+        if(size.width < 1 && size.height < 1){ // display none?
+            return;
+        }
+
+        var w = size.width - target.getPadding('lr') - this.scrollOffset,
+            h = size.height - target.getPadding('tb'),
+            l = this.padding.left, t = this.padding.top;
+
+        var stretchWidth = w - (this.padding.left + this.padding.right);
+
+        var totalFlex = 0;
+        var totalHeight = 0;
+
+        var maxWidth = 0;
+
+        for(i = 0; i < len; i++){
+            c = cs[i];
+            cm = c.margins;
+            totalFlex += c.flex || 0;
+            totalHeight += c.getHeight() + cm.top + cm.bottom;
+            maxWidth = Math.max(maxWidth, c.getWidth() + cm.left + cm.top);
+        }
+
+        var innerCtWidth = maxWidth + this.padding.left + this.padding.right;
+
+        switch(this.align){
+            case 'stretch':
+                this.innerCt.setSize(w, h);
+                break;
+            case 'stretchmax':
+            case 'left':
+            case 'center':
+                this.innerCt.setSize(w = Math.max(w, innerCtWidth), h);
+                break;
+
+        }
+
+        var extraHeight = h - totalHeight - this.padding.top - this.padding.bottom;
+        var allocated = 0;
+
+        var cw, ch, cl, availableWidth = w - this.padding.left - this.padding.right;
+
+        if(this.pack == 'center'){
+            t += extraHeight ? extraHeight/2 : 0;
+        }else if(this.pack == 'end'){
+            t += extraHeight;
+        }
+        for(i = 0; i < len; i++){
+            c = cs[i];
+            cm = c.margins;
+            cw = c.getWidth();
+            ch = c.getHeight();
+
+            t += cm.top;
+            if(this.align != 'center'){
+                cl = l + cm.left;
+            }else{
+                var diff = availableWidth - (cw + cm.left + cm.right);
+                if(diff == 0){
+                    cl = l + cm.left;
+                }else{
+                    cl = l + cm.left + (diff/2);
+                }
+            }
+            c.setPosition(cl, t);
+            if(this.pack == 'start' && c.flex){
+                var ratio = c.flex/totalFlex;
+                var add = Math.floor(extraHeight*ratio);
+                allocated += add;
+                if(i == last){
+                    add += (extraHeight-allocated);
+                }
+                ch += add;
+                c.setHeight(ch);
+            }
+            if(this.align == 'stretch'){
+                c.setWidth((stretchWidth - (cm.left + cm.right)).constrain(c.minWidth || 0, c.maxWidth || 1000000));
+            }else if(this.align == 'stretchmax'){
+                c.setWidth((maxWidth - (cm.left + cm.right)).constrain(c.minWidth || 0, c.maxWidth || 1000000));
+            }
+            t += ch + cm.bottom;
+        }
+    }
+    
+});
+
+Ext.Container.LAYOUTS['vbox'] = Ext.layout.VBox;
+
+Ext.layout.HBox = Ext.extend(Ext.layout.Box, {
+    // private
+    align: 'top', // top, middle, stretch, strechmax
+    pack: 'start',
+
+    // private
+    onLayout : function(ct, target){
+        Ext.layout.HBox.superclass.onLayout.call(this, ct, target);
+
+        var cs = ct.items.items, len = cs.length, c, i, last = len-1, cm;
+        var size = this.getTargetSize(target);
+
+        if(size.width < 1 && size.height < 1){ // display none?
+            return;
+        }
+
+        var w = size.width - target.getPadding('lr') - this.scrollOffset,
+            h = size.height - target.getPadding('tb'),
+            l = this.padding.left, t = this.padding.top;
+
+        var stretchHeight = h - (this.padding.top + this.padding.bottom);
+
+        var totalFlex = 0;
+        var totalWidth = 0;
+
+        var maxHeight = 0;
+
+        for(i = 0; i < len; i++){
+            c = cs[i];
+            cm = c.margins;
+            totalFlex += c.flex || 0;
+            totalWidth += c.getWidth() + cm.left + cm.right;
+            maxHeight = Math.max(maxHeight, c.getHeight() + cm.top + cm.bottom);
+        }
+
+        var innerCtHeight = maxHeight + this.padding.top + this.padding.bottom;
+
+        switch(this.align){
+            case 'stretch':
+                this.innerCt.setSize(w, h);
+                break;
+            case 'stretchmax':
+            case 'top':
+                this.innerCt.setSize(w, innerCtHeight);
+                break;
+            case 'middle':
+                this.innerCt.setSize(w, h = Math.max(h, innerCtHeight));
+                break;
+
+        }
+
+        var extraWidth = w - totalWidth - this.padding.left - this.padding.right;
+        var allocated = 0;
+
+        var cw, ch, ct, availableHeight = h - this.padding.top - this.padding.bottom;
+
+        if(this.pack == 'center'){
+            l += extraWidth ? extraWidth/2 : 0;
+        }else if(this.pack == 'end'){
+            l += extraWidth;
+        }
+        for(i = 0; i < len; i++){
+            c = cs[i];
+            cm = c.margins;
+            cw = c.getWidth();
+            ch = c.getHeight();
+
+            l += cm.left;
+            if(this.align != 'middle'){
+                ct = t + cm.top;
+            }else{
+                var diff = availableHeight - (ch + cm.top + cm.bottom);
+                if(diff == 0){
+                    ct = t + cm.top;
+                }else{
+                    ct = t + cm.top + (diff/2);
+                }
+            }
+
+            c.setPosition(l, ct);
+            if(this.pack == 'start' && c.flex){
+                var ratio = c.flex/totalFlex;
+                var add = Math.floor(extraWidth*ratio);
+                allocated += add;
+                if(i == last){
+                    add += (extraWidth-allocated);
+                }
+                cw += add;
+                c.setWidth(cw);
+            }
+            if(this.align == 'stretch'){
+                c.setHeight((stretchHeight - (cm.top + cm.bottom)).constrain(c.minHeight || 0, c.maxHeight || 1000000));
+            }else if(this.align == 'stretchmax'){
+                c.setHeight((maxHeight - (cm.top + cm.bottom)).constrain(c.minHeight || 0, c.maxHeight || 1000000));
+            }
+            l += cw + cm.right;
+        }
+    }
+
+    
+});
+
+Ext.Container.LAYOUTS['hbox'] = Ext.layout.HBox;
 
 Ext.Panel = Ext.extend(Ext.Container, {
     
@@ -17010,6 +17398,7 @@
     
     minButtonWidth:75,
     
+    
     elements : 'body',
 
     // protected - these could be used to customize the behavior of the window,
@@ -17058,6 +17447,10 @@
             'deactivate'
         );
 
+        if(this.unstyled){
+            this.baseCls = 'x-plain';
+        }
+
         // shortcuts
         if(this.tbar){
             this.elements += ',tbar';
@@ -17087,18 +17480,27 @@
         }
 
         if(this.buttons){
+            this.elements += ',footer';
             var btns = this.buttons;
             
             this.buttons = [];
             for(var i = 0, len = btns.length; i < len; i++) {
                 if(btns[i].render){ // button instance
-                    btns[i].ownerCt = this;
                     this.buttons.push(btns[i]);
+                }else if(btns[i].xtype){
+                    this.buttons.push(Ext.create(btns[i], 'button'));
                 }else{
                     this.addButton(btns[i]);
                 }
             }
         }
+        if(this.fbar){
+            this.elements += ',footer';
+            // if default button align and using fbar, align left by default
+            if(this.buttonAlign == 'right' && this.initialConfig.buttonAlign === undefined){
+                this.buttonAlign = 'left';
+            }
+        }
         if(this.autoLoad){
             this.on('render', this.doAutoLoad, this, {delay:10});
         }
@@ -17119,6 +17521,12 @@
                 el.className = this[name+'Cls'];
                 this[name] = Ext.get(pnode.appendChild(el));
             }
+            if(this[name+'CssClass']){
+                this[name].addClass(this[name+'CssClass']);
+            }
+            if(this[name+'Style']){
+                this[name].applyStyles(this[name+'Style']);
+            }
         }
     },
 
@@ -17127,7 +17535,6 @@
         Ext.Panel.superclass.onRender.call(this, ct, position);
 
         this.createClasses();
-
         if(this.el){ // existing markup
             this.el.addClass(this.baseCls);
             this.header = this.el.down('.'+this.headerCls);
@@ -17197,6 +17604,10 @@
             }
         }
 
+        if(this.padding !== undefined) {
+            this.body.setStyle('padding', this.body.addUnits(this.padding));
+        }
+
         if(this.border === false){
             this.el.addClass(this.baseCls + '-noborder');
             this.body.addClass(this.bodyCls + '-noborder');
@@ -17218,10 +17629,6 @@
            this.body.addClass(this.bodyCls + '-noborder');
         }
 
-        if(this.bodyStyle){
-           this.body.applyStyles(this.bodyStyle);
-        }
-
         this.bwrap.enableDisplayMode('block');
 
         if(this.header){
@@ -17265,37 +17672,44 @@
         }
 
         if(this.buttons && this.buttons.length > 0){
-            // tables are required to maintain order and for correct IE layout
-            var tb = this.footer.createChild({cls:'x-panel-btns-ct', cn: {
-                cls:"x-panel-btns x-panel-btns-"+this.buttonAlign,
-                html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'
-            }}, null, true);
-            var tr = tb.getElementsByTagName('tr')[0];
-            for(var i = 0, len = this.buttons.length; i < len; i++) {
-                var b = this.buttons[i];
-                var td = document.createElement('td');
-                td.className = 'x-panel-btn-td';
-                b.render(tr.appendChild(td));
+            this.fbar = new Ext.Toolbar({
+                items: this.buttons,
+                toolbarCls: 'x-panel-fbar'
+            });
+        }
+        if(this.fbar){
+            this.fbar = Ext.create(this.fbar, 'toolbar');
+            this.fbar.enableOverflow = false;
+            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.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.ComponentMgr.create(this.topToolbar, 'toolbar');
+                this.topToolbar = Ext.create(this.topToolbar, 'toolbar');
             }
+            this.topToolbar.ownerCt = this;
             this.topToolbar.render(this.tbar);
-            this.topToolbar.ownerCt = this;
         }
         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.ComponentMgr.create(this.bottomToolbar, 'toolbar');
+                this.bottomToolbar = Ext.create(this.bottomToolbar, 'toolbar');
             }
+            this.bottomToolbar.ownerCt = this;
             this.bottomToolbar.render(this.bbar);
-            this.bottomToolbar.ownerCt = this;
         }
     },
 
@@ -17358,7 +17772,6 @@
             Ext.apply(bc, config);
         }
         var btn = new Ext.Button(bc);
-        btn.ownerCt = this;
         if(!this.buttons){
             this.buttons = [];
         }
@@ -17381,30 +17794,46 @@
             Ext.Panel.prototype.toolTemplate = tt;
         }
         for(var i = 0, a = arguments, len = a.length; i < len; i++) {
-            var tc = a[i], 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;
+            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);
             }
-            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();
+        }
+    },
+
     // private
     onShow : function(){
         if(this.floating){
@@ -17434,9 +17863,6 @@
 
     // private
     afterRender : function(){
-        if(this.fromMarkup && this.height === undefined && !this.autoHeight){
-            this.height = this.el.getHeight();
-        }
         if(this.floating && !this.hidden && !this.initHidden){
             this.el.show();
         }
@@ -17620,7 +18046,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.buttonAlign != 'center'){
+	                    this.fbar.setSize(w - this.fbar.container.getFrameWidth('lr'));
+	                }
                     this.body.setWidth(w);
                 }else if(w == 'auto'){
                     this.body.setWidth(w);
@@ -17628,24 +18069,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());
                 }
@@ -17682,7 +18110,7 @@
 
     
     getFrameWidth : function(){
-        var w = this.el.getFrameWidth('lr');
+        var w = this.el.getFrameWidth('lr')+this.bwrap.getFrameWidth('lr');
 
         if(this.frame){
             var l = this.bwrap.dom.firstChild;
@@ -17695,7 +18123,7 @@
 
     
     getFrameHeight : function(){
-        var h  = this.el.getFrameWidth('tb');
+        var h  = this.el.getFrameWidth('tb')+this.bwrap.getFrameWidth('tb');
         h += (this.tbar ? this.tbar.getHeight() : 0) +
              (this.bbar ? this.bbar.getHeight() : 0);
 
@@ -17761,12 +18189,19 @@
 
     // private
     beforeDestroy : function(){
+        if(this.header){
+            this.header.removeAllListeners();
+            if(this.headerAsText){
+                Ext.Element.uncache(this.header.child('span'));
+            }
+        }
         Ext.Element.uncache(
             this.header,
             this.tbar,
             this.bbar,
             this.footer,
-            this.body
+            this.body,
+            this.bwrap
         );
         if(this.tools){
             for(var k in this.tools){
@@ -17780,7 +18215,8 @@
         }
         Ext.destroy(
             this.topToolbar,
-            this.bottomToolbar
+            this.bottomToolbar,
+            this.fbar
         );
         Ext.Panel.superclass.beforeDestroy.call(this);
     },
@@ -17830,8 +18266,6 @@
 });
 Ext.reg('panel', Ext.Panel);
 
-
-
 
 Ext.Window = Ext.extend(Ext.Panel, {
     
@@ -17843,6 +18277,9 @@
     
     
     
+    
+    
+    
     baseCls : 'x-window',
     
     resizable:true,
@@ -17931,6 +18368,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);
         }
     },
 
@@ -17985,7 +18423,13 @@
 
     // private
     beforeDestroy : function(){
+        this.hide();
+		if(this.doAnchor){
+		    Ext.EventManager.removeResizeListener(this.doAnchor, this);
+		    Ext.EventManager.un(window, 'scroll', this.doAnchor, this);
+        }
         Ext.destroy(
+            this.focusEl,
             this.resizer,
             this.dd,
             this.proxy,
@@ -18074,14 +18518,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);
     },
 
@@ -18407,25 +18852,31 @@
     },
 
     
-    anchorTo : function(el, alignment, offsets, monitorScroll, _pname){
-        var action = function(){
-            this.alignTo(el, alignment, offsets);
-        };
-        Ext.EventManager.onWindowResize(action, this);
-        var tm = typeof monitorScroll;
-        if(tm != 'undefined'){
-            Ext.EventManager.on(window, 'scroll', action, this,
-                {buffer: tm == 'number' ? monitorScroll : 50});
-        }
-        action.call(this);
-        this[_pname] = action;
-        return this;
+    anchorTo : function(el, alignment, offsets, monitorScroll){
+      if(this.doAnchor){
+          Ext.EventManager.removeResizeListener(this.doAnchor, this);
+          Ext.EventManager.un(window, 'scroll', this.doAnchor, this);
+      }
+      this.doAnchor = function(){
+          this.alignTo(el, alignment, offsets);
+      };
+      Ext.EventManager.onWindowResize(this.doAnchor, this);
+      
+      var tm = typeof monitorScroll;
+      if(tm != 'undefined'){
+          Ext.EventManager.on(window, 'scroll', this.doAnchor, this,
+              {buffer: tm == 'number' ? monitorScroll : 50});
+      }
+      this.doAnchor();
+      return this;
     },
 
     
-    toFront : function(){
+    toFront : function(e){
         if(this.manager.bringToFront(this)){
-            this.focus();
+            if(!e || !e.getTarget().focus){
+                this.focus();
+            }
         }
         return this;
     },
@@ -18494,8 +18945,6 @@
     }
 });
 
-
-
 
 Ext.WindowGroup = function(){
     var list = {};
@@ -18633,8 +19082,6 @@
 
 Ext.WindowMgr = new Ext.WindowGroup();
 
-
-
 Ext.dd.PanelProxy = function(panel, config){
     this.panel = panel;
     this.id = this.panel.id +'-ddproxy';
@@ -18753,8 +19200,6 @@
         this.setDelta(x, y);
     }
 });
-
-
 
 Ext.state.Provider = function(){
     
@@ -18847,8 +19292,6 @@
 });
 
 
-
-
 Ext.state.Manager = function(){
     var provider = new Ext.state.Provider();
 
@@ -18881,8 +19324,6 @@
 }();
 
 
-
-
 Ext.state.CookieProvider = function(config){
     Ext.state.CookieProvider.superclass.constructor.call(this);
     this.path = "/";
@@ -18943,8 +19384,6 @@
            ((this.secure == true) ? "; secure" : "");
     }
 });
-
-
 
 Ext.DataView = Ext.extend(Ext.BoxComponent, {
     
@@ -19422,8 +19861,6 @@
 });
 
 Ext.reg('dataview', Ext.DataView);
-
-
 Ext.ListView = Ext.extend(Ext.DataView, {
     itemSelector: 'dl',
     selectedClass:'x-list-selected',
@@ -19589,8 +20026,6 @@
 });
 
 Ext.reg('listview', Ext.ListView);
-
-
 Ext.ListView.ColumnResizer = Ext.extend(Ext.util.Observable, {
     minPct: .05,
     constructor: function(config){
@@ -19705,8 +20140,6 @@
         }, 100);
     }
 });
-
-
 Ext.ListView.Sorter = Ext.extend(Ext.util.Observable, {
     
     sortClasses : ["sort-asc", "sort-desc"],
@@ -19761,8 +20194,6 @@
         }
     }
 });
-
-
 
 Ext.ColorPalette = function(config){
     Ext.ColorPalette.superclass.constructor.call(this, config);
@@ -19803,6 +20234,7 @@
             '<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>'
         );
         var el = document.createElement("div");
+        el.id = this.getId();
         el.className = this.itemCls;
         t.overwrite(el, this.colors);
         container.dom.insertBefore(el, position);
@@ -19850,8 +20282,6 @@
 });
 Ext.reg('colorpalette', Ext.ColorPalette);
 
-
-
 Ext.DatePicker = Ext.extend(Ext.Component, {
     
     todayText : "Today",
@@ -20439,19 +20869,25 @@
     // private
     beforeDestroy : function() {
         if(this.rendered){
-            Ext.destroy(this.mbtn, this.todayBtn);
+            Ext.destroy(
+                this.leftClickRpt,
+                this.rightClickRpt,
+                this.monthPicker,
+                this.eventEl,
+                this.mbtn,
+                this.todayBtn
+            );
         }
     }
 
     
 });
 Ext.reg('datepicker', Ext.DatePicker);
-
-
 
 Ext.TabPanel = Ext.extend(Ext.Panel,  {
     
     
+    
     monitorResize : true,
     
     deferredRender : true,
@@ -20526,6 +20962,9 @@
             this.stack = Ext.TabPanel.AccessStack();
         }
         this.initItems();
+        if(this.activeTab !== undefined && typeof this.activeTab != 'object'){
+           this.activeTab = this.items.get(this.activeTab);
+        }
     },
 
     // private
@@ -20555,7 +20994,7 @@
         var beforeEl = (this.tabPosition=='bottom' ? this.stripWrap : null);
         this.stripSpacer = st.createChild({cls:'x-tab-strip-spacer'}, beforeEl);
         this.strip = new Ext.Element(this.stripWrap.dom.firstChild);
-        
+
         this.edge = this.strip.createChild({tag:'li', cls:'x-tab-edge'});
         this.strip.createChild({cls:'x-clear'});
 
@@ -20587,8 +21026,8 @@
     // private
     initEvents : function(){
         Ext.TabPanel.superclass.initEvents.call(this);
-        this.on('add', this.onAdd, this);
-        this.on('remove', this.onRemove, this);
+        this.on('add', this.onAdd, this, {target: this});
+        this.on('remove', this.onRemove, this, {target: this});
 
         this.strip.on('mousedown', this.onStripMouseDown, this);
         this.strip.on('contextmenu', this.onStripContextMenu, this);
@@ -20677,7 +21116,7 @@
         if(item.tabCls){
             cls += ' ' + item.tabCls;
         }
-        
+
         var p = {
             id: this.id + this.idDelimiter + item.getItemId(),
             text: item.title,
@@ -20693,6 +21132,8 @@
         if(item.tabTip){
             Ext.fly(el).child('span.x-tab-strip-text', true).qtip = item.tabTip;
         }
+        item.tabEl = el;
+
         item.on('disable', this.onItemDisabled, this);
         item.on('enable', this.onItemEnabled, this);
         item.on('titlechange', this.onItemTitleChanged, this);
@@ -20723,7 +21164,7 @@
 
     // private
     onRemove : function(tp, item){
-        Ext.removeNode(this.getTabEl(item));
+        Ext.destroy(Ext.get(this.getTabEl(item)));
         this.stack.remove(item);
         item.un('disable', this.onItemDisabled, this);
         item.un('enable', this.onItemEnabled, this);
@@ -21083,6 +21524,22 @@
         var pos = this.getScrollPos();
         this.scrollLeft[pos == 0 ? 'addClass' : 'removeClass']('x-tab-scroller-left-disabled');
         this.scrollRight[pos >= (this.getScrollWidth()-this.getScrollArea()) ? 'addClass' : 'removeClass']('x-tab-scroller-right-disabled');
+    },
+
+    // private
+    beforeDestroy : function() {
+        if(this.items){
+            this.items.each(function(item){
+                if(item && item.tabEl){
+                    Ext.get(item.tabEl).removeAllListeners();
+                    item.tabEl = null;
+                }
+            }, this);
+        }
+        if(this.strip){
+            this.strip.removeAllListeners();
+        }
+        Ext.TabPanel.superclass.beforeDestroy.apply(this);
     }
 
     
@@ -21130,8 +21587,6 @@
 };
 
 
-
-
 
 
 Ext.Button = Ext.extend(Ext.BoxComponent, {
@@ -21258,6 +21713,9 @@
     initButtonEl : function(btn, btnEl){
         this.el = btn;
 
+        if(this.id){
+            this.el.dom.id = this.el.id = this.id;
+        }
         if(this.icon){
             btnEl.setStyle('background-image', 'url(' +this.icon +')');
         }
@@ -21286,10 +21744,6 @@
             this.menu.on("hide", this.onMenuHide, this);
         }
 
-        if(this.id){
-            this.el.dom.id = this.el.id = this.id;
-        }
-
         if(this.repeat){
             var repeater = new Ext.util.ClickRepeater(btn,
                 typeof this.repeat == "object" ? this.repeat : {}
@@ -21321,9 +21775,12 @@
     // private
     beforeDestroy: function(){
     	if(this.rendered){
-	        var btn = this.el.child(this.buttonSelector);
-	        if(btn){
-	            btn.removeAllListeners();
+	        var btnEl = this.el.child(this.buttonSelector);
+	        if(btnEl){
+                if(this.tooltip){
+                    Ext.QuickTips.unregister(btnEl);
+                }
+	            btnEl.removeAllListeners();
 	        }
 	    }
         if(this.menu){
@@ -21623,8 +22080,6 @@
    };
 }();
 
-
-
 Ext.SplitButton = Ext.extend(Ext.Button, {
 	// private
     arrowSelector : 'em',
@@ -21698,8 +22153,6 @@
 
 Ext.reg('splitbutton', Ext.SplitButton);
 
-
-
 Ext.CycleButton = Ext.extend(Ext.SplitButton, {
     
     
@@ -21814,8 +22267,6 @@
 });
 Ext.reg('cycle', Ext.CycleButton);
 
-
-
 Ext.layout.ToolbarLayout = Ext.extend(Ext.layout.ContainerLayout, {
     monitorResize: true,
     triggerWidth: 16,
@@ -21896,6 +22347,9 @@
     },
 
     fitToSize :function(t){
+        if(this.container.enableOverflow === false){
+            return;
+        }
         var w = t.dom.clientWidth;
         var lw = this.lastWidth || 0;
         this.lastWidth = w;
@@ -22028,12 +22482,8 @@
 
     trackMenus : true,
     internalDefaults: {removeMode: 'container', hideParent: true},
+    toolbarCls: 'x-toolbar',
 
-    // private
-    autoCreate: {
-        cls:'x-toolbar x-small-editor'
-    },
-
     initComponent : function(){
         T.superclass.initComponent.call(this);
 
@@ -22042,7 +22492,14 @@
 
     // private
     onRender : function(ct, position){
-        this.el = ct.createChild(Ext.apply({ id: this.id },this.autoCreate), position);
+        if(!this.el){
+            if(!this.autoCreate){
+                this.autoCreate = {
+                    cls: this.toolbarCls + ' x-small-editor'
+                }
+            }
+            this.el = ct.createChild(Ext.apply({ id: this.id },this.autoCreate), position);
+        }
     },
     
     
@@ -22070,7 +22527,7 @@
                 this.addElement(el);
             }else if(typeof el == "object"){ // must be button config?
                 if(el.xtype){
-                    this.addItem(Ext.ComponentMgr.create(el, 'button'));
+                    this.addItem(Ext.create(el, 'button'));
                 }else{
                     this.addButton(el);
                 }
@@ -22237,7 +22694,7 @@
 
 T.Separator = Ext.extend(T.Item, {
     onRender : function(ct, position){
-        this.el = ct.createChild({tag:'span', cls:'ytb-sep'}, position);
+        this.el = ct.createChild({tag:'span', cls:'xtb-sep'}, position);
     }
 });
 Ext.reg('tbseparator', T.Separator);
@@ -22245,7 +22702,7 @@
 
 T.Spacer = Ext.extend(T.Item, {
     onRender : function(ct, position){
-        this.el = ct.createChild({tag:'div', cls:'ytb-spacer'}, position);
+        this.el = ct.createChild({tag:'div', cls:'xtb-spacer', style: this.width?'width:'+this.width+'px':''}, position);
     }
 });
 Ext.reg('tbspacer', T.Spacer);
@@ -22325,8 +22782,6 @@
 });
 
 Ext.reg('buttongroup', Ext.ButtonGroup);
-
-
 
 (function() {
 
@@ -22361,6 +22816,7 @@
     
     paramNames : {start: 'start', limit: 'limit'},
 
+    // private
     constructor: function(config) {
 	    var pagingItems = [this.first = new T.Button({
 	        tooltip: this.firstText,
@@ -22426,6 +22882,7 @@
         this.on('afterlayout', this.onFirstLayout, this, {single: true});
 	},
 
+    // private
 	onFirstLayout: function(ii) {
     	this.inputItem.el.on({
 	    	keydown: {fn: this.onPagingKeydown, scope: this},
@@ -22494,6 +22951,7 @@
         this.refresh.enable();
     },
 
+    // private
     readPage : function(d){
         var v = this.field.value, pageNum;
         if (!v || isNaN(pageNum = parseInt(v, 10))) {
@@ -22539,6 +22997,7 @@
         }
     },
 
+    // private
     doLoad : function(start){
         var o = {}, pn = this.paramNames;
         o[pn.start] = start;
@@ -22591,14 +23050,20 @@
         this.store = store;
         this.paramNames.start = store.paramNames.start;
         this.paramNames.limit = store.paramNames.limit;
+    },
+    
+    // private
+    onDestroy : function(){
+        if(this.store){
+            this.unbind(this.store);
+        }
+        Ext.PagingToolbar.superclass.onDestroy.call(this);
     }
 });
 
 })();
 Ext.reg('paging', Ext.PagingToolbar);
 
-
-
 Ext.Resizable = function(el, config){
     this.el = Ext.get(el);
     
@@ -23057,22 +23522,26 @@
     
     
     destroy : function(removeEl){
-        this.proxy.remove();
+        if(this.dd){
+            this.dd.destroy();
+        }
         if(this.overlay){
-            this.overlay.removeAllListeners();
-            this.overlay.remove();
+            Ext.destroy(this.overlay);
+            this.overlay = null;
         }
+        Ext.destroy(this.proxy);
+        this.proxy = null;
+        
         var ps = Ext.Resizable.positions;
         for(var k in ps){
             if(typeof ps[k] != "function" && this[ps[k]]){
-                var h = this[ps[k]];
-                h.el.removeAllListeners();
-                h.el.remove();
+                this[ps[k]].destroy();
             }
         }
         if(removeEl){
             this.el.update("");
-            this.el.remove();
+            Ext.destroy(this.el);
+            this.el = null;
         }
     },
 
@@ -23119,6 +23588,7 @@
 
 // private
 Ext.Resizable.Handle.prototype = {
+    // private
     afterResize : function(rz){
         // do nothing    
     },
@@ -23133,17 +23603,26 @@
     // private
     onMouseOut : function(e){
         this.rz.handleOut(this, e);
-    }  
+    },
+    // private
+    destroy : function(){
+        Ext.destroy(this.el);
+        this.el = null;
+    }
 };
 
 
 
 
-
-
 
 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);
 };
 
@@ -23153,6 +23632,7 @@
     
     
     
+    
     value : "",
     
     alignment: "c-c?",
@@ -23194,10 +23674,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';
@@ -23385,13 +23868,11 @@
     },
 
     beforeDestroy : function(){
-        this.field.destroy();
+        Ext.destroy(this.field);
         this.field = null;
     }
 });
 Ext.reg('editor', Ext.Editor);
-
-
 
 Ext.MessageBox = function(){
     var dlg, opt, mask, waitTimer;
@@ -23771,8 +24252,6 @@
 
 Ext.Msg = Ext.MessageBox;
 
-
-
 Ext.Tip = Ext.extend(Ext.Panel, {
     
     
@@ -23794,6 +24273,8 @@
     floating:{shadow:true,shim:true,useDisplay:true,constrain:false},
     autoHeight:true,
 
+    closeAction: 'hide',
+
     // private
     initComponent : function(){
         Ext.Tip.superclass.initComponent.call(this);
@@ -23808,7 +24289,7 @@
         if(this.closable){
             this.addTool({
                 id: 'close',
-                handler: this.hide,
+                handler: this[this.closeAction],
                 scope: this
             });
         }
@@ -23877,8 +24358,6 @@
     }
 });
 
-
-
 Ext.ToolTip = Ext.extend(Ext.Tip, {
     
     
@@ -24048,8 +24527,6 @@
     }
 });
 
-
-
 Ext.QuickTip = Ext.extend(Ext.ToolTip, {
     
     
@@ -24195,8 +24672,6 @@
     }
 });
 
-
-
 Ext.QuickTips = function(){
     var tip, locks = [];
     return {
@@ -24261,8 +24736,6 @@
     }
 }();
 
-
-
 Ext.tree.TreePanel = Ext.extend(Ext.Panel, {
     rootVisible : true,
     animate: Ext.enableFx,
@@ -24641,8 +25114,6 @@
 Ext.tree.TreePanel.nodeTypes = {};
 
 Ext.reg('treepanel', Ext.tree.TreePanel);
-
-
 Ext.tree.TreeEventModel = function(tree){
     this.tree = tree;
     this.tree.on('render', this.initEvents, this);
@@ -24699,6 +25170,10 @@
         if(!this.beforeEvent(e)){
             return;
         }
+        if(Ext.isGecko && !this.trackingDoc){ // prevent hanging in FF
+            Ext.getBody().on('mouseover', this.trackExit, this);
+            this.trackingDoc = true;
+        }
         if(this.lastEcOver){ // prevent hung highlight
             this.onIconOut(e, this.lastEcOver);
             delete this.lastEcOver;
@@ -24712,6 +25187,15 @@
         }
     },
 
+    trackExit : function(e){
+        if(this.lastOverNode && !e.within(this.lastOverNode.ui.getEl())){
+            this.onNodeOut(e, this.lastOverNode);
+            delete this.lastOverNode;
+            Ext.getBody().un('mouseover', this.trackExit, this);
+            this.trackingDoc = false;
+        }
+    },
+
     delegateClick : function(e, t){
         if(!this.beforeEvent(e)){
             return;
@@ -24745,6 +25229,7 @@
     },
 
     onNodeOver : function(e, node){
+        this.lastOverNode = node;
         node.ui.onOver(e);
     },
 
@@ -24793,8 +25278,6 @@
     }
 };
 
-
-
 Ext.tree.DefaultSelectionModel = function(config){
    this.selNode = null;
    
@@ -25034,8 +25517,6 @@
     selectPrevious : Ext.tree.DefaultSelectionModel.prototype.selectPrevious
 });
 
-
-
 Ext.tree.TreeNode = function(attributes){
     attributes = attributes || {};
     if(typeof attributes == "string"){
@@ -25296,7 +25777,7 @@
     
     ensureVisible : function(callback){
         var tree = this.getOwnerTree();
-        tree.expandPath(this.parentNode.getPath(), false, function(){
+        tree.expandPath(this.parentNode ? this.parentNode.getPath() : this.getPath(), false, function(){
             var node = tree.getNodeById(this.id);  // Somehow if we don't do this, we lose changes that happened to node in the meantime
             tree.getTreeEl().scrollChildIntoView(node.ui.anchor);
             Ext.callback(callback);
@@ -25414,8 +25895,6 @@
 
 Ext.tree.TreePanel.nodeTypes.node = Ext.tree.TreeNode;
 
-
-
  Ext.tree.AsyncTreeNode = function(config){
     this.loaded = config && config.loaded === true;
     this.loading = false;
@@ -25496,8 +25975,6 @@
 
 Ext.tree.TreePanel.nodeTypes.async = Ext.tree.AsyncTreeNode;
 
-
-
 Ext.tree.TreeNodeUI = function(node){
     this.node = node;
     this.rendered = false;
@@ -26063,8 +26540,6 @@
     expand : Ext.emptyFn
 });
 
-
-
 Ext.tree.TreeLoader = function(config){
     this.baseParams = {};
     Ext.apply(this, config);
@@ -26228,8 +26703,6 @@
     }
 });
 
-
-
 Ext.tree.TreeFilter = function(tree, config){
     this.tree = tree;
     this.filtered = {};
@@ -26319,8 +26792,6 @@
 };
 
 
-
-
 Ext.tree.TreeSorter = function(tree, config){
     
     
@@ -26386,8 +26857,6 @@
     }
 };
 
-
-
 if(Ext.dd.DropZone){
     
 Ext.tree.TreeDropZone = function(tree, config){
@@ -26647,8 +27116,6 @@
 
 }
 
-
-
 if(Ext.dd.DragZone){
 Ext.tree.TreeDragZone = function(tree, config){
     Ext.tree.TreeDragZone.superclass.constructor.call(this, tree.getTreeEl(), config);
@@ -26710,8 +27177,6 @@
     }
 });
 }
-
-
 
 Ext.tree.TreeEditor = function(tree, fc, config){
     fc = fc || {};
@@ -26824,8 +27289,6 @@
         }
     }
 });
-
-
 
 Ext.menu.Menu = function(config){
     if(Ext.isArray(config)){
@@ -26856,7 +27319,7 @@
     var mis = this.items;
     
 
-    this.items = new Ext.util.MixedCollection();
+    this.items = new Ext.util.MixedCollection(false, Ext.Container.prototype.getComponentId);
     if(mis){
         this.add.apply(this, mis);
     }
@@ -26888,7 +27351,7 @@
             shadow:this.shadow,
             constrain: false,
             parentEl: this.parentEl || document.body,
-            zindex:15000
+            zindex: this.zIndex || 15000
         });
     },
 
@@ -27174,7 +27637,7 @@
 
     
     remove : function(item){
-        this.items.removeKey(item.id);
+        this.items.remove(item);
         item.destroy();
     },
 
@@ -27259,8 +27722,6 @@
         }
     }
 });
-
-
 
 Ext.menu.MenuMgr = function(){
    var menus, active, groups = {}, attached = false, lastShow = new Date();
@@ -27456,8 +27917,6 @@
    };
 }();
 
-
-
 
 Ext.menu.BaseItem = function(config){
     Ext.menu.BaseItem.superclass.constructor.call(this, config);
@@ -27486,7 +27945,7 @@
     
     hideOnClick : true,
     
-    hideDelay : 100,
+    clickHideDelay : 1,
 
     // private
     ctype: "Ext.menu.BaseItem",
@@ -27499,7 +27958,7 @@
         
         this.parentMenu = parentMenu;
         Ext.menu.BaseItem.superclass.render.call(this, container);
-        this.container.menuItemId = this.id;
+        this.container.menuItemId = this.itemId || this.id;
     },
 
     // private
@@ -27552,7 +28011,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]);
         }
     },
 
@@ -27566,8 +28025,6 @@
         // do nothing
     }
 });
-
-
 
 Ext.menu.TextItem = function(cfg){
     if(typeof cfg == 'string'){
@@ -27592,8 +28049,6 @@
         Ext.menu.TextItem.superclass.onRender.apply(this, arguments);
     }
 });
-
-
 
 Ext.menu.Separator = function(config){
     Ext.menu.Separator.superclass.constructor.call(this, config);
@@ -27615,8 +28070,6 @@
         Ext.menu.Separator.superclass.onRender.apply(this, arguments);
     }
 });
-
-
 
 Ext.menu.Item = function(config){
     Ext.menu.Item.superclass.constructor.call(this, config);
@@ -27757,8 +28210,6 @@
         }
     }
 });
-
-
 
 Ext.menu.CheckItem = function(config){
     Ext.menu.CheckItem.superclass.constructor.call(this, config);
@@ -27826,8 +28277,6 @@
        Ext.menu.CheckItem.superclass.handleClick.apply(this, arguments);
     }
 });
-
-
 
 Ext.menu.Adapter = function(component, config){
     Ext.menu.Adapter.superclass.constructor.call(this, config);
@@ -27870,8 +28319,6 @@
         Ext.menu.Adapter.superclass.enable.call(this);
     }
 });
-
-
 
 Ext.menu.DateItem = function(config){
     Ext.menu.DateItem.superclass.constructor.call(this, new Ext.DatePicker(config), config);
@@ -27894,8 +28341,6 @@
         Ext.menu.DateItem.superclass.handleClick.call(this);
     }
 });
-
-
 
 Ext.menu.ColorItem = function(config){
     Ext.menu.ColorItem.superclass.constructor.call(this, new Ext.ColorPalette(config), config);
@@ -27907,8 +28352,6 @@
     }
 };
 Ext.extend(Ext.menu.ColorItem, Ext.menu.Adapter);
-
-
 
 Ext.menu.DateMenu = function(config){
     Ext.menu.DateMenu.superclass.constructor.call(this, config);
@@ -27934,8 +28377,6 @@
         this.picker.destroy();
     }
 });
-
-
 
 Ext.menu.ColorMenu = function(config){
     Ext.menu.ColorMenu.superclass.constructor.call(this, config);
@@ -27948,8 +28389,6 @@
     this.relayEvents(ci, ["select"]);
 };
 Ext.extend(Ext.menu.ColorMenu, Ext.menu.Menu);
-
-
 
 Ext.form.Field = Ext.extend(Ext.BoxComponent,  {
     
@@ -27959,6 +28398,7 @@
     
     
     
+    
     invalidClass : "x-form-invalid",
     
     invalidText : "The value in this field is invalid",
@@ -28052,7 +28492,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
@@ -28253,6 +28693,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);
@@ -28268,7 +28713,7 @@
     // private
     adjustWidth : function(tag, w){
         tag = tag.toLowerCase();
-        if(typeof w == 'number' && !Ext.isSafari){
+        if(typeof w == 'number' && !Ext.isSafari && !this.normalWidth){
             if(Ext.isIE && (tag == 'input' || tag == 'textarea')){
                 if(tag == 'input' && !Ext.isStrict){
                     return this.inEditor ? w : w - 3;
@@ -28412,12 +28857,11 @@
 };
 Ext.reg('field', Ext.form.Field);
 
-
-
 
 Ext.form.TextField = Ext.extend(Ext.form.Field,  {
     
     
+    
     grow : false,
     
     growMin : 30,
@@ -28555,7 +28999,7 @@
     },
 
     applyEmptyText : function(){
-        if(this.rendered && this.emptyText && this.getRawValue().length < 1){
+        if(this.rendered && this.emptyText && this.getRawValue().length < 1 && !this.hasFocus){
             this.setRawValue(this.emptyText);
             this.el.addClass(this.emptyClass);
         }
@@ -28686,8 +29130,6 @@
 });
 Ext.reg('textfield', Ext.form.TextField);
 
-
-
 
 Ext.form.TriggerField = Ext.extend(Ext.form.TextField,  {
     
@@ -28813,11 +29255,13 @@
     triggerBlur : function(){
         this.mimicing = false;
         Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur, this);
-        if(this.monitorTab){
+        if(this.monitorTab && this.el){
             this.el.un("keydown", this.checkTab, this);
         }
         this.beforeBlur();
-        this.wrap.removeClass('x-trigger-wrap-focus');
+        if(this.wrap){
+            this.wrap.removeClass('x-trigger-wrap-focus');
+        }
         Ext.form.TriggerField.superclass.onBlur.call(this);
     },
 
@@ -28916,8 +29360,6 @@
     onTrigger2Click : Ext.emptyFn
 });
 Ext.reg('trigger', Ext.form.TriggerField);
-
-
 
 Ext.form.TextArea = Ext.extend(Ext.form.TextField,  {
     
@@ -29006,11 +29448,10 @@
     }
 });
 Ext.reg('textarea', Ext.form.TextArea);
-
-
 
 Ext.form.NumberField = Ext.extend(Ext.form.TextField,  {
     
+    
     fieldClass: "x-form-field x-form-num-field",
     
     allowDecimals : true,
@@ -29115,8 +29556,6 @@
     }
 });
 Ext.reg('numberfield', Ext.form.NumberField);
-
-
 
 Ext.form.DateField = Ext.extend(Ext.form.TriggerField,  {
     
@@ -29154,7 +29593,7 @@
         if(typeof this.maxValue == "string"){
             this.maxValue = this.parseDate(this.maxValue);
         }
-        this.ddMatch = null;
+        this.disabledDatesRE = null;
         this.initDisabledDays();
     },
 
@@ -29238,7 +29677,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;
         }
@@ -29324,7 +29763,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,
@@ -29355,8 +29794,54 @@
 });
 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, {
     
     
@@ -29455,7 +29940,7 @@
                     }
                     d.push([value, o.text]);
                 }
-                this.store = new Ext.data.SimpleStore({
+                this.store = new Ext.data.ArrayStore({
                     'id': 0,
                     fields: ['value', 'text'],
                     data : d
@@ -29476,13 +29961,13 @@
         //auto-configure store from local array data
         else if(Ext.isArray(this.store)){
 			if (Ext.isArray(this.store[0])){
-				this.store = new Ext.data.SimpleStore({
+				this.store = new Ext.data.ArrayStore({
 				    fields: ['value','text'],
 				    data: this.store
 				});
 		        this.valueField = 'value';
 			}else{
-				this.store = new Ext.data.SimpleStore({
+				this.store = new Ext.data.ArrayStore({
 				    fields: ['text'],
 				    data: this.store,
 				    expandData: true
@@ -29553,7 +30038,9 @@
             this.list.setWidth(lw);
             this.list.swallowEvent('mousewheel');
             this.assetHeight = 0;
-
+            if(this.syncFont !== false){
+                this.list.setStyle('font-size', this.el.getStyle('font-size'));
+            }
             if(this.title){
                 this.header = this.list.createChild({cls:cls+'-hd', html: this.title});
                 this.assetHeight += this.header.getHeight();
@@ -29696,11 +30183,13 @@
     // private
     onDestroy : function(){
         if(this.view){
-            this.view.el.removeAllListeners();
-            this.view.el.remove();
-            this.view.purgeListeners();
+            Ext.destroy(this.view);
         }
         if(this.list){
+            if(this.innerList){
+                this.innerList.un('mouseover', this.onViewOver, this);
+                this.innerList.un('mousemove', this.onViewMove, this);
+            }
             this.list.destroy();
         }
         this.bindStore(null);
@@ -30119,32 +30608,20 @@
 
 });
 Ext.reg('combo', Ext.form.ComboBox);
-
-
 
 Ext.form.Checkbox = Ext.extend(Ext.form.Field,  {
     
-    checkedCls: 'x-form-check-checked',
+    focusClass : undefined,
     
-    focusCls: 'x-form-check-focus',
+    fieldClass: "x-form-field",
     
-    overCls: 'x-form-check-over',
-    
-    mouseDownCls: 'x-form-check-down',
-    
-    tabIndex: 0,
-    
     checked: false,
     
-    defaultAutoCreate: {tag: 'input', type: 'checkbox', autocomplete: 'off'},
+    defaultAutoCreate : { tag: "input", type: 'checkbox', autocomplete: "off"},
     
     
-    
 
-    // private
-    baseCls: 'x-form-check',
-
-    // private
+	// private
     initComponent : function(){
         Ext.form.Checkbox.superclass.initComponent.call(this);
         this.addEvents(
@@ -30154,140 +30631,61 @@
     },
 
     // private
+    onResize : function(){
+        Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
+        if(!this.boxLabel){
+            this.el.alignTo(this.wrap, 'c-c');
+        }
+    },
+
+    // private
     initEvents : function(){
         Ext.form.Checkbox.superclass.initEvents.call(this);
-        this.initCheckEvents();
+        this.el.on("click", this.onClick,  this);
+        this.el.on("change", this.onClick,  this);
     },
 
+	// private
+    getResizeEl : function(){
+        return this.wrap;
+    },
+
     // private
-    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);
+    getPositionEl : function(){
+        return this.wrap;
     },
 
+    
+    markInvalid : Ext.emptyFn,
+    
+    clearInvalid : Ext.emptyFn,
+
     // private
     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'});
-
+        this.wrap = this.el.wrap({cls: "x-form-check-wrap"});
         if(this.boxLabel){
-            this.labelEl = this.innerWrap.createChild({
-                tag: 'label',
-                htmlFor: this.el.id,
-                cls: 'x-form-cb-label',
-                html: this.boxLabel
-            });
+            this.wrap.createChild({tag: 'label', htmlFor: this.el.id, cls: 'x-form-cb-label', html: this.boxLabel});
         }
-
-        this.imageEl = this.innerWrap.createChild({
-            tag: 'img',
-            src: Ext.BLANK_IMAGE_URL,
-            cls: this.baseCls
-        }, this.el);
-
         if(this.checked){
             this.setValue(true);
         }else{
             this.checked = this.el.dom.checked;
         }
-        this.originalValue = this.checked;
     },
 
     // private
     onDestroy : function(){
-        if(this.rendered){
-            Ext.destroy(this.imageEl, this.labelEl, this.innerWrap, this.wrap);
+        if(this.wrap){
+            this.wrap.remove();
         }
         Ext.form.Checkbox.superclass.onDestroy.call(this);
     },
 
     // private
-    onFocus: function(e) {
-        Ext.form.Checkbox.superclass.onFocus.call(this, e);
-        this.el.addClass(this.focusCls);
-    },
-
-    // private
-    onBlur: function(e) {
-        Ext.form.Checkbox.superclass.onBlur.call(this, e);
-        this.el.removeClass(this.focusCls);
-    },
-
-    // private
-    onResize : function(){
-        Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
-        if(!this.boxLabel && !this.fieldLabel){
-            this.el.alignTo(this.wrap, 'c-c');
-        }
-    },
-
-    // private
-    onKeyUp : function(e){
-        if(e.getKey() == Ext.EventObject.SPACE){
-            this.onClick(e);
-        }
-    },
-
-    // private
-    onClick : function(e){
-        if (!this.disabled && !this.readOnly) {
-            this.toggleValue();
-        }
-        e.stopEvent();
-    },
-
-    // private
-    onEnable : function(){
-        Ext.form.Checkbox.superclass.onEnable.call(this);
-        this.initCheckEvents();
-    },
-
-    // private
-    onDisable : function(){
-        Ext.form.Checkbox.superclass.onDisable.call(this);
-        this.innerWrap.removeAllListeners();
-    },
-
-    toggleValue : function(){
-        this.setValue(!this.checked);
-    },
-
-    // private
-    getResizeEl : function(){
-        if(!this.resizeEl){
-            this.resizeEl = Ext.isSafari ? this.wrap : (this.wrap.up('.x-form-element', 5) || this.wrap);
-        }
-        return this.resizeEl;
-    },
-
-    // private
-    getPositionEl : function(){
-        return this.wrap;
-    },
-
-    // private
-    getActionEl : function(){
-        return this.wrap;
-    },
-
-    
-    markInvalid : Ext.emptyFn,
-    
-    clearInvalid : Ext.emptyFn,
-
-    // private
     initValue : Ext.emptyFn,
 
     
@@ -30295,39 +30693,31 @@
         if(this.rendered){
             return this.el.dom.checked;
         }
-        return this.checked;
+        return false;
     },
 
+	// private
+    onClick : function(){
+        if(this.el.dom.checked != this.checked){
+            this.setValue(this.el.dom.checked);
+        }
+    },
+
     
-    setValue : function(v) {
-        var checked = this.checked;
+    setValue : function(v){
         this.checked = (v === true || v === 'true' || v == '1' || String(v).toLowerCase() == 'on');
-        
-        if(this.rendered){
+        if(this.el && this.el.dom){
             this.el.dom.checked = this.checked;
             this.el.dom.defaultChecked = this.checked;
-            this.wrap[this.checked? 'addClass' : 'removeClass'](this.checkedCls);
         }
-        
-        if(checked != this.checked){
-            this.fireEvent("check", this, this.checked);
-            if(this.handler){
-                this.handler.call(this.scope || this, this, this.checked);
-            }
-        }
+        this.fireEvent("check", this, this.checked);
     }
-
-    
-    
-    
 });
 Ext.reg('checkbox', Ext.form.Checkbox);
 
-
-
-
 Ext.form.CheckboxGroup = Ext.extend(Ext.form.Field, {
     
+    
     columns : 'auto',
     
     vertical : false,
@@ -30515,62 +30905,51 @@
 
 Ext.reg('checkboxgroup', Ext.form.CheckboxGroup);
 
-
-
 
 Ext.form.Radio = Ext.extend(Ext.form.Checkbox, {
-    // private
     inputType: 'radio',
-    // private
-    baseCls: 'x-form-radio',
+
     
+    markInvalid : Ext.emptyFn,
     
+    clearInvalid : Ext.emptyFn,
+
+    
     getGroupValue : function(){
-        var c = this.getParent().child('input[name='+this.el.dom.name+']:checked', true);
+    	var p = this.el.up('form') || Ext.getBody();
+        var c = p.child('input[name='+this.el.dom.name+']:checked', true);
         return c ? c.value : null;
     },
-    
+
     // private
-    getParent : function(){
-        return this.el.up('form') || Ext.getBody();
+    onClick : function(){
+    	if(this.el.dom.checked != this.checked){
+    		var p = this.el.up('form') || Ext.getBody();
+			var els = p.select('input[name='+this.el.dom.name+']');
+			els.each(function(el){
+				if(el.dom.id == this.id){
+					this.setValue(true);
+				}else{
+					Ext.getCmp(el.dom.id).setValue(false);
+				}
+			}, this);
+		}
     },
 
-    // private
-    toggleValue : function() {
-        if(!this.checked){
-            var els = this.getParent().select('input[name='+this.el.dom.name+']');
-            els.each(function(el){
-                if(el.dom.id == this.id){
-                    this.setValue(true);
-                }else{
-                    Ext.getCmp(el.dom.id).setValue(false);
-                }
-            }, this);
-        }
-    },
     
-    
     setValue : function(v){
-        if(typeof v=='boolean') {
+    	if (typeof v == 'boolean') {
             Ext.form.Radio.superclass.setValue.call(this, v);
-        }else{
-            var r = this.getParent().child('input[name='+this.el.dom.name+'][value='+v+']', true);
-            if(r && !r.checked){
-                Ext.getCmp(r.id).toggleValue();
+        } else {
+            var r = this.el.up('form').child('input[name='+this.el.dom.name+'][value='+v+']', true);
+            if (r){
+                r.checked = true;
             };
         }
-    },
-    
-    
-    markInvalid : Ext.emptyFn,
-    
-    clearInvalid : Ext.emptyFn
-    
+    }
 });
 Ext.reg('radio', Ext.form.Radio);
 
-
-
 
 Ext.form.RadioGroup = Ext.extend(Ext.form.CheckboxGroup, {
     
@@ -30588,8 +30967,6 @@
 Ext.reg('radiogroup', Ext.form.RadioGroup);
 
 
-
-
 Ext.form.Hidden = Ext.extend(Ext.form.Field, {
     // private
     inputType : 'hidden',
@@ -30614,8 +30991,6 @@
     clearInvalid : Ext.emptyFn
 });
 Ext.reg('hidden', Ext.form.Hidden);
-
-
 
 Ext.form.BasicForm = function(el, config){
     Ext.apply(this, config);
@@ -30678,16 +31053,16 @@
     },
 
     // private
-	destroy: function() {
+    destroy: function() {
         this.items.each(function(f){
             Ext.destroy(f);
         });
         if(this.el){
-			this.el.removeAllListeners();
-			this.el.remove();
+            this.el.removeAllListeners();
+            this.el.remove();
         }
-		this.purgeListeners();
-	},
+        this.purgeListeners();
+    },
 
     
     isValid : function(){
@@ -30952,14 +31327,13 @@
 
 // back compat
 Ext.BasicForm = Ext.form.BasicForm;
-
-
 
 Ext.FormPanel = Ext.extend(Ext.Panel, {
 	
     
     
     
+    
     buttonAlign:'center',
 
     
@@ -30974,9 +31348,13 @@
     
     monitorPoll : 200,
 
+    layout:'form',
+
     // private
     initComponent :function(){
         this.form = this.createForm();
+        Ext.FormPanel.superclass.initComponent.call(this);
+
         this.bodyCfg = {
             tag: 'form',
             cls: this.baseCls + '-body',
@@ -30986,9 +31364,8 @@
         if(this.fileUpload) {
             this.bodyCfg.enctype = 'multipart/form-data';
         }
-
-        Ext.FormPanel.superclass.initComponent.call(this);
-
+        this.initItems();
+        
         this.addEvents(
             
             'clientvalidation'
@@ -31134,9 +31511,10 @@
                 return false;
             }
         });
-        if(this.buttons){
-            for(var i = 0, len = this.buttons.length; i < len; i++){
-                var btn = this.buttons[i];
+        if(this.fbar){
+            var fitems = this.fbar.items.items;
+            for(var i = 0, len = fitems.length; i < len; i++){
+                var btn = fitems[i];
                 if(btn.formBind === true && btn.disabled === valid){
                     btn.setDisabled(!valid);
                 }
@@ -31151,8 +31529,6 @@
 
 
 
-
-
 Ext.form.FieldSet = Ext.extend(Ext.Panel, {
     
     
@@ -31205,6 +31581,14 @@
     
     onCheckClick : function(){
         this[this.checkbox.dom.checked ? 'expand' : 'collapse']();
+    },
+    
+    // private
+    beforeDestroy : function(){
+        if(this.checkbox){
+            this.checkbox.un('click', this.onCheckClick, this);
+        }
+        Ext.form.FieldSet.superclass.beforeDestroy.call(this);
     }
 
     
@@ -31250,8 +31634,6 @@
 
 
 
-
-
 Ext.form.HtmlEditor = Ext.extend(Ext.form.Field, {
     
     enableFormat : true,
@@ -31523,6 +31905,15 @@
         });
         this.tb.doLayout();
 
+        this.createIFrame();
+
+        if(!this.width){
+            var sz = this.el.getSize();
+            this.setSize(sz.width, this.height || sz.height);
+        }
+    },
+
+    createIFrame: function(){
         var iframe = document.createElement('iframe');
         iframe.name = Ext.id();
         iframe.frameBorder = '0';
@@ -31532,7 +31923,7 @@
         this.iframe = iframe;
 
         this.initFrame();
-        
+
         if(this.autoMonitorDesignMode !== false){
             this.monitorTask = Ext.TaskMgr.start({
                 run: this.checkDesignMode,
@@ -31540,11 +31931,6 @@
                 interval:100
             });
         }
-
-        if(!this.width){
-            var sz = this.el.getSize();
-            this.setSize(sz.width, this.height || sz.height);
-        }
     },
 
     initFrame : function(){
@@ -32137,8 +32523,6 @@
 });
 Ext.reg('htmleditor', Ext.form.HtmlEditor);
 
-
-
 Ext.form.TimeField = Ext.extend(Ext.form.ComboBox, {
     
     minValue : null,
@@ -32194,7 +32578,7 @@
                 times.push([min.dateFormat(this.format)]);
                 min = min.add('mi', this.increment);
             }
-            this.store = new Ext.data.SimpleStore({
+            this.store = new Ext.data.ArrayStore({
                 fields: ['text'],
                 data : times
             });
@@ -32232,8 +32616,6 @@
     
 });
 Ext.reg('timefield', Ext.form.TimeField);
-
-
 
 Ext.form.Label = Ext.extend(Ext.BoxComponent, {
     
@@ -32264,8 +32646,6 @@
 });
 
 Ext.reg('label', Ext.form.Label);
-
-
 
 Ext.form.Action = function(form, options){
     this.form = form;
@@ -32498,8 +32878,6 @@
     'submit' : Ext.form.Action.Submit
 };
 
-
-
 
 Ext.form.VTypes = function(){
     // closure these in so they are only created once.
@@ -32546,8 +32924,6 @@
     };
 }();
 
-
-
 Ext.grid.GridPanel = Ext.extend(Ext.Panel, {
     
     
@@ -32599,7 +32975,7 @@
     rendered : false,
     // private
     viewReady: false,
-    // private
+    
     stateEvents: ["columnmove", "columnresize", "sortchange"],
 
     // private
@@ -32747,7 +33123,7 @@
                 }
             }
         }
-        if(state.sort){
+        if(state.sort && this.store){
             this.store[this.store.remoteSort ? 'setDefaultSort' : 'sort'](state.sort.field, state.sort.direction);
         }
     },
@@ -32763,9 +33139,11 @@
                 o.columns[i].hidden = true;
             }
         }
-        var ss = this.store.getSortState();
-        if(ss){
-            o.sort = ss;
+        if(this.store){
+            var ss = this.store.getSortState();
+            if(ss){
+                o.sort = ss;
+            }
         }
         return o;
     },
@@ -33005,8 +33383,6 @@
     
 });
 Ext.reg('grid', Ext.grid.GridPanel);
-
-
 
 Ext.grid.GridView = function(config){
     Ext.apply(this, config);
@@ -33058,6 +33434,7 @@
     borderWidth: 2,
     tdClass: 'x-grid3-cell',
     hdCls: 'x-grid3-hd',
+    markDirty: true,
 
     
     cellSelectorDepth: 4,
@@ -33278,7 +33655,7 @@
     // private
     removeRow : function(row){
         Ext.removeNode(this.getRow(row));
-        this.focusRow(row);
+        this.syncFocusEl(row);
     },
     
     // private
@@ -33287,7 +33664,7 @@
         for(var rowIndex = firstRow; rowIndex <= lastRow; rowIndex++){
             Ext.removeNode(bd.childNodes[firstRow]);
         }
-        this.focusRow(firstRow);
+        this.syncFocusEl(firstRow);
     },
 
     // scrolling stuff
@@ -33348,13 +33725,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];
+                }
             }
         }
 
@@ -33370,11 +33750,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);
@@ -33391,11 +33774,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);
@@ -33421,7 +33807,7 @@
                 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'){
+                if(this.markDirty && r.dirty && typeof r.modified[c.name] !== 'undefined'){
                     p.css += ' x-grid3-dirty-cell';
                 }
                 cb[cb.length] = ct.apply(p);
@@ -33472,6 +33858,9 @@
     },
 
     afterRender: function(){
+        if(!this.ds || !this.cm){
+            return;
+        }
         this.mainBody.dom.innerHTML = this.renderRows();
         this.processRows(0, true);
 
@@ -33535,6 +33924,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'
@@ -33558,8 +33952,12 @@
         if(vw < 20 || csize.height < 20){ // display: none?
             return;
         }
+        
         if(g.autoHeight){
             this.scroller.dom.style.overflow = 'visible';
+            if(Ext.isSafari){
+                this.scroller.dom.style.position = 'static';
+            }
         }else{
             this.el.setSize(csize.width, csize.height);
 
@@ -33629,7 +34027,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);
@@ -33676,10 +34074,7 @@
 
     
     focusCell : function(row, col, hscroll){
-        row = Math.min(row, Math.max(0, this.getRows().length-1));
-        var xy = this.ensureVisible(row, col, hscroll);
-        this.focusEl.setXY(xy||this.scroller.getXY());
-        
+		this.syncFocusEl(this.ensureVisible(row, col, hscroll));
         if(Ext.isGecko){
             this.focusEl.focus();
         }else{
@@ -33687,16 +34082,15 @@
         }
     },
 
-    // private
-    ensureVisible : function(row, col, hscroll){
-        if(typeof row != "number"){
+	resolveCell : function(row, col, hscroll){
+		if(typeof row != "number"){
             row = row.rowIndex;
         }
         if(!this.ds){
-            return;
+            return null;
         }
         if(row < 0 || row >= this.ds.getCount()){
-            return;
+            return null;
         }
         col = (col !== undefined ? col : 0);
 
@@ -33707,12 +34101,37 @@
             }
             cellEl = this.getCell(row, col);
         }
-        if(!rowEl){
-            return;
-        }
 
-        var c = this.scroller.dom;
+		return {row: rowEl, cell: cellEl};
+	},
 
+	getResolvedXY : function(resolved){
+		if(!resolved){
+			return null;
+		}
+		var s = this.scroller.dom, c = resolved.cell, r = resolved.row;
+		return c ? Ext.fly(c).getXY() : [s.scrollLeft+this.el.getX(), Ext.fly(r).getY()];
+	},
+
+	syncFocusEl : function(row, col, hscroll){
+		var xy = row;
+		if(!Ext.isArray(xy)){
+			row = Math.min(row, Math.max(0, this.getRows().length-1));
+        	xy = this.getResolvedXY(this.resolveCell(row, col, hscroll));
+		}
+        this.focusEl.setXY(xy||this.scroller.getXY());
+    },
+
+	ensureVisible : function(row, col, hscroll){
+        var resolved = this.resolveCell(row, col, hscroll);
+		if(!resolved || !resolved.row){
+			return;
+		}
+
+		var rowEl = resolved.row, cellEl = resolved.cell;
+
+		var c = this.scroller.dom;
+
         var ctop = 0;
         var p = rowEl, stop = this.el.dom;
         while(p && p != stop){
@@ -33727,7 +34146,7 @@
         var stop = parseInt(c.scrollTop, 10);
         var sbot = stop + ch;
 
-        if(ctop < stop){
+		if(ctop < stop){
           c.scrollTop = ctop;
         }else if(cbot > sbot){
             c.scrollTop = cbot-ch;
@@ -33745,7 +34164,7 @@
                 c.scrollLeft = cright-c.clientWidth;
             }
         }
-        return cellEl ? Ext.fly(cellEl).getXY() : [c.scrollLeft+this.el.getX(), Ext.fly(rowEl).getY()];
+        return this.getResolvedXY(resolved);
     },
 
     // private
@@ -33768,7 +34187,7 @@
                 this.processRows(firstRow);
             }
         }
-        this.focusRow(firstRow);
+        this.syncFocusEl(firstRow);
     },
 
     // private
@@ -33815,7 +34234,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;
 
@@ -33941,7 +34360,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);
@@ -33993,15 +34411,13 @@
     // private
     destroy : function(){
         if(this.colMenu){
-            this.colMenu.removeAll();
             Ext.menu.MenuMgr.unregister(this.colMenu);
-            this.colMenu.getEl().remove();
+            this.colMenu.destroy();
             delete this.colMenu;
         }
         if(this.hmenu){
-            this.hmenu.removeAll();
             Ext.menu.MenuMgr.unregister(this.hmenu);
-            this.hmenu.getEl().remove();
+            this.hmenu.destroy();
             delete this.hmenu;
         }
         if(this.grid.enableColumnMove){
@@ -34025,11 +34441,16 @@
             }
         }
 
-        Ext.destroy(this.resizeMarker, this.resizeProxy);
-
         if(this.dragZone){
             this.dragZone.unreg();
         }
+        
+        Ext.fly(this.innerHd).removeAllListeners();
+        Ext.removeNode(this.innerHd);
+        
+        Ext.destroy(this.resizeMarker, this.resizeProxy, this.focusEl, this.mainBody, 
+                    this.scroller, this.mainHd, this.mainWrap, this.dragZone, 
+                    this.splitone, this.columnDrag, this.columnDrop);
 
         this.initData(null, null);
         Ext.EventManager.removeResizeListener(this.onWindowResize, this);
@@ -34099,13 +34520,13 @@
     onDataChange : function(){
         this.refresh();
         this.updateHeaderSortState();
-        this.focusRow(0);
+        this.syncFocusEl(0);
     },
 
     // private
     onClear : function(){
         this.refresh();
-        this.focusRow(0);
+        this.syncFocusEl(0);
     },
 
     // private
@@ -34171,16 +34592,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
@@ -34203,7 +34618,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");
         }
     },
@@ -34250,6 +34665,7 @@
             this.updateAllColumnWidths();
         }else{
             this.updateColumnWidth(i, w);
+            this.syncHeaderScroll();
         }
 
         this.grid.fireEvent("columnresize", i, w);
@@ -34416,7 +34832,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;
@@ -34465,8 +34881,6 @@
 });
 
 
-
-
 Ext.grid.GroupingView = Ext.extend(Ext.grid.GridView, {
     
     hideGroupedColumn:false,
@@ -34839,8 +35253,6 @@
 });
 // private
 Ext.grid.GroupingView.GROUP_ID = 1000;
-
-
 // private
 // This is a support class used internally by the Grid components
 Ext.grid.HeaderDragZone = function(grid, hd, hd2){
@@ -35052,8 +35464,6 @@
         Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this, e);
     }
 });
-
-
 // private
 // This is a support class used internally by the Grid components
 Ext.grid.SplitDragZone = function(grid, hd, hd2){
@@ -35110,8 +35520,6 @@
         this.setDelta(0,0);
     }
 });
-
-
 
 Ext.grid.GridDragZone = function(grid, config){
     this.view = grid.getView();
@@ -35175,17 +35583,9 @@
     }
 });
 
-
-
 
 Ext.grid.ColumnModel = function(config){
-	
-    this.defaultWidth = 100;
-
     
-    this.defaultSortable = false;
-
-    
     if(config.columns){
         Ext.apply(this, config);
         this.setConfig(config.columns, true);
@@ -35194,12 +35594,12 @@
     }
     this.addEvents(
         
-	    "widthchange",
+        "widthchange",
         
-	    "headerchange",
+        "headerchange",
         
-	    "hiddenchange",
-	    
+        "hiddenchange",
+        
         "columnmoved",
         // deprecated - to be removed
         "columnlockchange",
@@ -35210,7 +35610,9 @@
 };
 Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, {
     
+    defaultWidth: 100,
     
+    defaultSortable: false,
     
     
     
@@ -35225,12 +35627,18 @@
     
     
     
+    
+    
 
     
     getColumnId : function(index){
         return this.config[index].id;
     },
 
+    getColumnAt : function(index){
+        return this.config[index];
+    },
+
     
     setConfig : function(config, initial){
         if(!initial){ // cleanup
@@ -35247,15 +35655,11 @@
         // if no id, create one
         for(var i = 0, len = config.length; i < len; i++){
             var c = config[i];
-            if(typeof c.renderer == "string"){
-                c.renderer = Ext.util.Format[c.renderer];
+            if(!c.isColumn){
+                var cls = Ext.grid.Column.types[c.xtype || 'gridcolumn'];
+                c = new cls(c);
+                config[i] = c;
             }
-            if(typeof c.id == "undefined"){
-                c.id = 'xgc'+i;
-            }
-            if(c.editor && c.editor.isFormField){
-                c.editor = new Ext.grid.GridEditor(c.editor);
-            }
             this.lookup[c.id] = c;
         }
         if(!initial){
@@ -35450,7 +35854,7 @@
 
     
     getCellEditor : function(colIndex, rowIndex){
-        return this.config[colIndex].editor;
+        return this.config[colIndex].getCellEditor(rowIndex);
     },
 
     
@@ -35492,16 +35896,12 @@
 
 // private
 Ext.grid.ColumnModel.defaultRenderer = function(value){
-	if(typeof value == "string" && value.length < 1){
-	    return "&#160;";
-	}
-	return 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);
@@ -35529,8 +35929,6 @@
         return this.locked;
     }
 });
-
-
 
 Ext.grid.RowSelectionModel = function(config){
     Ext.apply(this, config);
@@ -35899,8 +36297,6 @@
         }
     }
 });
-
-
 
 Ext.grid.CellSelectionModel = function(config){
     Ext.apply(this, config);
@@ -36088,8 +36484,6 @@
         }
     }
 });
-
-
 
 Ext.grid.EditorGridPanel = Ext.extend(Ext.grid.GridPanel, {
     
@@ -36106,7 +36500,7 @@
 	
     // private
     trackMouseOver: false, // causes very odd FF errors
-    
+
     // private
     initComponent : function(){
         Ext.grid.EditorGridPanel.superclass.initComponent.call(this);
@@ -36131,7 +36525,7 @@
     // private
     initEvents : function(){
         Ext.grid.EditorGridPanel.superclass.initEvents.call(this);
-        
+
         this.on("bodyscroll", this.stopEditing, this, [true]);
 
         if(this.clicksToEdit == 1){
@@ -36219,6 +36613,9 @@
             if(this.fireEvent("beforeedit", e) !== false && !e.cancel){
                 this.editing = true;
                 var ed = this.colModel.getCellEditor(col, row);
+                if(!ed){
+                    return;
+                }
                 if(!ed.rendered){
                     ed.render(this.view.getEditorParent(ed));
                 }
@@ -36228,25 +36625,26 @@
                     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);
+                    ed.startEdit(this.view.getCell(row, col).firstChild, v === undefined ? '' : v);
                 }).defer(50, this);
             }
         }
     },
-    
+
     // private
     preEditValue : function(r, field){
         var value = r.data[field];
         return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlDecode(value) : value;
     },
-    
+
     // private
 	postEditValue : function(value, originalValue, r, field){
 		return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlEncode(value) : value;
 	},
-	    
+
     
     stopEditing : function(cancel){
         if(this.activeEditor){
@@ -36254,7 +36652,7 @@
         }
         this.activeEditor = null;
     },
-    
+
     // private
     onDestroy: function() {
         if(this.rendered){
@@ -36268,8 +36666,6 @@
     }
 });
 Ext.reg('editorgrid', Ext.grid.EditorGridPanel);
-
-
 // private
 // This is a support class used internally by the Grid components
 Ext.grid.GridEditor = function(field, config){
@@ -36285,8 +36681,6 @@
     shim:false,
     shadow:false
 });
-
-
 
 Ext.grid.PropertyRecord = Ext.data.Record.create([
     {name:'name',type:'string'}, 'value'
@@ -36532,35 +36926,109 @@
 });
 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];
+        this.renderer = Ext.util.Format[this.renderer];
     }
     if(typeof this.id == "undefined"){
         this.id = ++Ext.grid.Column.AUTO_ID;
     }
-    if(this.editor && this.editor.isFormField){
-        this.editor = new Ext.grid.GridEditor(this.editor);
+    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;
+    },
+
+    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, {
+    trueText: 'true',
+    falseText: 'false',
+    undefinedText: '&#160;',
 
+    constructor: function(cfg){
+        this.supr().constructor.apply(this, arguments);
+        var t = this.trueText, f = this.falseText, u = this.undefinedText;
+        this.renderer = function(v){
+            if(v === undefined){
+                return u;
+            }
+            if(!v || v === 'false'){
+                return f;
+            }
+            return t;
+        };
+    }
+});
 
+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
+};
+
 Ext.grid.RowNumberer = function(config){
     Ext.apply(this, config);
     if(this.rowspan){
@@ -36592,8 +37060,6 @@
     }
 };
 
-
-
 Ext.grid.CheckboxSelectionModel = Ext.extend(Ext.grid.RowSelectionModel, {
     
     header: '<div class="x-grid3-hd-checker">&#160;</div>',
@@ -36664,8 +37130,6 @@
         return '<div class="x-grid3-row-checker">&#160;</div>';
     }
 });
-
-
 
 Ext.LoadMask = function(el, config){
     this.el = Ext.get(el);
@@ -36743,8 +37207,6 @@
     }
 };
 
-
-
 Ext.ProgressBar = Ext.extend(Ext.BoxComponent, {
    
     baseCls : 'x-progress',
@@ -36910,8 +37372,6 @@
     }
 });
 Ext.reg('progress', Ext.ProgressBar);
-
-
 Ext.debug = {};
 
 (function(){
@@ -37397,8 +37857,6 @@
 
 
 
-
-
 var deconcept = deconcept || {};
 
 if(typeof deconcept.util == "undefined" || !deconcept.util){
@@ -37673,8 +38131,6 @@
         deconcept.unloadSet = true;
     }
 }
-
-
 Ext.FlashComponent = Ext.extend(Ext.BoxComponent, {
     flashVersion : '9.0.45',
     backgroundColor: '#ffffff',
@@ -37749,8 +38205,6 @@
 });
 
 Ext.reg('flash', Ext.FlashComponent);
-
-
 Ext.FlashEventProxy = {
     onEvent : function(id, e){
         var fp = Ext.getCmp(id);
@@ -37762,8 +38216,6 @@
     }
 }
 
-
-
 Ext.Slider = Ext.extend(Ext.BoxComponent, {
 	
 	
@@ -38065,8 +38517,6 @@
         }
     }
 };
-
-
 Ext.util.Cookies = {
     set : function(name, value){
         var argv = arguments;
@@ -38109,8 +38559,6 @@
         return unescape(document.cookie.substring(offset, endstr));
     }
 };
-
-
 Ext.chart.Chart = Ext.extend(Ext.FlashComponent, {
     url: "http:/"+"/yui.yahooapis.com/2.5.1/build/charts/assets/charts.swf",
     refreshBuffer: 100,
@@ -38529,8 +38977,6 @@
 
 
 
-
-
 Ext.History = (function () {
     var iframe, hiddenField;
     var ready = false;
@@ -38603,7 +39049,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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/ext-all.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -129,7 +129,11 @@
 return r;},"prev":function(c,ss){var is=Ext.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci;}}
 return r;}}};}();Ext.query=Ext.DomQuery.select;
 
-Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners;}};Ext.util.Observable.prototype={fireEvent:function(){if(this.eventsSuspended===true){if(this.suspendedEventsQueue){this.suspendedEventsQueue.push(arguments);}}else{var ce=this.events[arguments[0].toLowerCase()];if(typeof ce=="object"){return ce.fire.apply(ce,Array.prototype.slice.call(arguments,1));}}
+Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners;}
+if(!this.events){this.events={};}};Ext.util.Observable.prototype={fireEvent:function(){var a=Array.prototype.slice.call(arguments,0);var ename=a[0];if(ename===true){a.shift();var c=this;while(c){if(c.fireEvent.apply(c,a)===false){return false;}
+c=c.getBubbleTarget?c.getBubbleTarget():null;}
+return true;}
+if(this.eventsSuspended===true){var q=this.suspendedEventsQueue;if(q){q[q.length]=a;}}else{var ce=this.events[ename.toLowerCase()];if(typeof ce=="object"){a.shift();return ce.fire.apply(ce,a);}}
 return true;},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(eventName,fn,scope,o){if(typeof eventName=="object"){o=eventName;for(var e in o){if(this.filterOptRe.test(e)){continue;}
 if(typeof o[e]=="function"){this.addListener(e,o[e],o.scope,o);}else{this.addListener(e,o[e].fn,o[e].scope,o[e]);}}
 return;}
@@ -144,7 +148,8 @@
 for(var i=0,len=e.after.length;i<len;i++){makeCall(e.after[i].fn,e.after[i].scope,args);if(cancel){return returnValue;}}
 return returnValue;};}
 return e;},beforeMethod:function(method,fn,scope){var e=this.getMethodEvent(method);e.before.push({fn:fn,scope:scope});},afterMethod:function(method,fn,scope){var e=this.getMethodEvent(method);e.after.push({fn:fn,scope:scope});},removeMethodListener:function(method,fn,scope){var e=this.getMethodEvent(method);for(var i=0,len=e.before.length;i<len;i++){if(e.before[i].fn==fn&&e.before[i].scope==scope){e.before.splice(i,1);return;}}
-for(var i=0,len=e.after.length;i<len;i++){if(e.after[i].fn==fn&&e.after[i].scope==scope){e.after.splice(i,1);return;}}}};Ext.util.Observable.prototype.on=Ext.util.Observable.prototype.addListener;Ext.util.Observable.prototype.un=Ext.util.Observable.prototype.removeListener;Ext.util.Observable.capture=function(o,fn,scope){o.fireEvent=o.fireEvent.createInterceptor(fn,scope);};Ext.util.Observable.releaseCapture=function(o){o.fireEvent=Ext.util.Observable.prototype.fireEvent;};(function(){var createBuffered=function(h,o,scope){var task=new Ext.util.DelayedTask();return function(){task.delay(o.buffer,h,scope,Array.prototype.slice.call(arguments,0));};};var createSingle=function(h,e,fn,scope){return function(){e.removeListener(fn,scope);return h.apply(scope,arguments);};};var createDelayed=function(h,o,scope){return function(){var args=Array.prototype.slice.call(arguments,0);setTimeout(function(){h.apply(scope,args);},o.delay||10);};};Ext.util.Event=function(obj,name){this.name=name;this.obj=obj;this.listeners=[];};Ext.util.Event.prototype={addListener:function(fn,scope,options){scope=scope||this.obj;if(!this.isListening(fn,scope)){var l=this.createListener(fn,scope,options);if(!this.firing){this.listeners.push(l);}else{this.listeners=this.listeners.slice(0);this.listeners.push(l);}}},createListener:function(fn,scope,o){o=o||{};scope=scope||this.obj;var l={fn:fn,scope:scope,options:o};var h=fn;if(o.delay){h=createDelayed(h,o,scope);}
+for(var i=0,len=e.after.length;i<len;i++){if(e.after[i].fn==fn&&e.after[i].scope==scope){e.after.splice(i,1);return;}}}};Ext.util.Observable.prototype.on=Ext.util.Observable.prototype.addListener;Ext.util.Observable.prototype.un=Ext.util.Observable.prototype.removeListener;Ext.util.Observable.capture=function(o,fn,scope){o.fireEvent=o.fireEvent.createInterceptor(fn,scope);};Ext.util.Observable.releaseCapture=function(o){o.fireEvent=Ext.util.Observable.prototype.fireEvent;};(function(){var createBuffered=function(h,o,scope){var task=new Ext.util.DelayedTask();return function(){task.delay(o.buffer,h,scope,Array.prototype.slice.call(arguments,0));};};var createSingle=function(h,e,fn,scope){return function(){e.removeListener(fn,scope);return h.apply(scope,arguments);};};var createDelayed=function(h,o,scope){return function(){var args=Array.prototype.slice.call(arguments,0);setTimeout(function(){h.apply(scope,args);},o.delay||10);};};var createTargeted=function(h,o,scope){return function(){if(o.target==arguments[0]){h.apply(scope,Array.prototype.slice.call(arguments,0));}};};Ext.util.Event=function(obj,name){this.name=name;this.obj=obj;this.listeners=[];};Ext.util.Event.prototype={addListener:function(fn,scope,options){scope=scope||this.obj;if(!this.isListening(fn,scope)){var l=this.createListener(fn,scope,options);if(!this.firing){this.listeners.push(l);}else{this.listeners=this.listeners.slice(0);this.listeners.push(l);}}},createListener:function(fn,scope,o){o=o||{};scope=scope||this.obj;var l={fn:fn,scope:scope,options:o};var h=fn;if(o.target){h=createTargeted(h,o,scope);}
+if(o.delay){h=createDelayed(h,o,scope);}
 if(o.single){h=createSingle(h,this,fn,scope);}
 if(o.buffer){h=createBuffered(h,o,scope);}
 l.fireFn=h;return l;},findListener:function(fn,scope){scope=scope||this.obj;var ls=this.listeners;for(var i=0,len=ls.length;i<len;i++){var l=ls[i];if(l.fn==fn&&l.scope==scope){return i;}}
@@ -168,14 +173,15 @@
 if(Ext.isGecko||Ext.isOpera){document.removeEventListener("DOMContentLoaded",fireDocReady,false);}
 if(Ext.isIE){var defer=document.getElementById("ie-deferred-loader");if(defer){defer.onreadystatechange=null;defer.parentNode.removeChild(defer);}}
 if(docReadyEvent){docReadyEvent.fire();docReadyEvent.clearListeners();}}};var initDocReady=function(){docReadyEvent=new Ext.util.Event();if(Ext.isGecko||Ext.isOpera){document.addEventListener("DOMContentLoaded",fireDocReady,false);}else if(Ext.isIE){document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");var defer=document.getElementById("ie-deferred-loader");defer.onreadystatechange=function(){if(this.readyState=="complete"){fireDocReady();}};}else if(Ext.isSafari){docReadyProcId=setInterval(function(){var rs=document.readyState;if(rs=="complete"){fireDocReady();}},10);}
-E.on(window,"load",fireDocReady);};var createBuffered=function(h,o){var task=new Ext.util.DelayedTask(h);return function(e){e=new Ext.EventObjectImpl(e);task.delay(o.buffer,h,null,[e]);};};var createSingle=function(h,el,ename,fn,scope){return function(e){Ext.EventManager.removeListener(el,ename,fn,scope);h(e);};};var createDelayed=function(h,o){return function(e){e=new Ext.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var listen=function(element,ename,opt,fn,scope){var o=(!opt||typeof opt=="boolean")?{}:opt;fn=fn||o.fn;scope=scope||o.scope;var el=Ext.getDom(element);if(!el){throw"Error listening for \""+ename+'\". Element "'+element+'" doesn\'t exist.';}
+E.on(window,"load",fireDocReady);};var createBuffered=function(h,o){var task=new Ext.util.DelayedTask(h);return function(e){e=new Ext.EventObjectImpl(e);task.delay(o.buffer,h,null,[e]);};};var createSingle=function(h,el,ename,fn,scope){return function(e){Ext.EventManager.removeListener(el,ename,fn,scope);h(e);};};var createDelayed=function(h,o){return function(e){e=new Ext.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var createTargeted=function(h,o){return function(){if(o.target==Ext.EventObject.setEvent(arguments[0]).target){h.apply(this,Array.prototype.slice.call(arguments,0));}};};var listen=function(element,ename,opt,fn,scope){var o=(!opt||typeof opt=="boolean")?{}:opt;fn=fn||o.fn;scope=scope||o.scope;var el=Ext.getDom(element);if(!el){throw"Error listening for \""+ename+'\". Element "'+element+'" doesn\'t exist.';}
 var h=function(e){if(!window[xname]){return;}
 e=Ext.EventObject.setEvent(e);var t;if(o.delegate){t=e.getTarget(o.delegate,el);if(!t){return;}}else{t=e.target;}
 if(o.stopEvent===true){e.stopEvent();}
 if(o.preventDefault===true){e.preventDefault();}
 if(o.stopPropagation===true){e.stopPropagation();}
 if(o.normalized===false){e=e.browserEvent;}
-fn.call(scope||el,e,t,o);};if(o.delay){h=createDelayed(h,o);}
+fn.call(scope||el,e,t,o);};if(o.target){h=createTargeted(h,o);}
+if(o.delay){h=createDelayed(h,o);}
 if(o.single){h=createSingle(h,el,ename,fn,scope);}
 if(o.buffer){h=createBuffered(h,o);}
 addListener(el,ename,fn,h,scope);return h;};var propRe=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;var pub={addListener:function(element,eventName,fn,scope,options){if(typeof eventName=="object"){var o=eventName;for(var e in o){if(propRe.test(e)){continue;}
@@ -184,10 +190,10 @@
 return listen(element,eventName,options,fn,scope);},removeListener:function(element,eventName,fn,scope){return removeListener(element,eventName,fn,scope);},removeAll:function(element){return removeAll(element);},onDocumentReady:function(fn,scope,options){if(docReadyState){docReadyEvent.addListener(fn,scope,options);docReadyEvent.fire();docReadyEvent.clearListeners();return;}
 if(!docReadyEvent){initDocReady();}
 options=options||{};if(!options.delay){options.delay=1;}
-docReadyEvent.addListener(fn,scope,options);},onWindowResize:function(fn,scope,options){if(!resizeEvent){resizeEvent=new Ext.util.Event();resizeTask=new Ext.util.DelayedTask(function(){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());});E.on(window,"resize",this.fireWindowResize,this);}
+docReadyEvent.addListener(fn,scope,options);},doResizeEvent:function(){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());},onWindowResize:function(fn,scope,options){if(!resizeEvent){resizeEvent=new Ext.util.Event();resizeTask=new Ext.util.DelayedTask(this.doResizeEvent);E.on(window,"resize",this.fireWindowResize,this);}
 resizeEvent.addListener(fn,scope,options);},fireWindowResize:function(){if(resizeEvent){if((Ext.isIE||Ext.isAir)&&resizeTask){resizeTask.delay(50);}else{resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}}},onTextResize:function(fn,scope,options){if(!textEvent){textEvent=new Ext.util.Event();var textEl=new Ext.Element(document.createElement('div'));textEl.dom.className='x-text-resize';textEl.dom.innerHTML='X';textEl.appendTo(document.body);textSize=textEl.dom.offsetHeight;setInterval(function(){if(textEl.dom.offsetHeight!=textSize){textEvent.fire(textSize,textSize=textEl.dom.offsetHeight);}},this.textResizeInterval);}
 textEvent.addListener(fn,scope,options);},removeResizeListener:function(fn,scope){if(resizeEvent){resizeEvent.removeListener(fn,scope);}},fireResize:function(){if(resizeEvent){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}},ieDeferSrc:false,textResizeInterval:50};pub.on=pub.addListener;pub.un=pub.removeListener;pub.stoppedMouseDownEvent=new Ext.util.Event();return pub;}();Ext.onReady=Ext.EventManager.onDocumentReady;(function(){var initExtCss=function(){var bd=document.body||document.getElementsByTagName('body')[0];if(!bd){return false;}
-var cls=[' ',Ext.isIE?"ext-ie "+(Ext.isIE6?'ext-ie6':'ext-ie7'):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?'ext-gecko2':'ext-gecko3'):Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":""];if(Ext.isMac){cls.push("ext-mac");}
+var cls=[' ',Ext.isIE?"ext-ie "+(Ext.isIE6?'ext-ie6':(Ext.isIE7?'ext-ie7':'ext-ie8')):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?'ext-gecko2':'ext-gecko3'):Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":Ext.isChrome?"ext-chrome":""];if(Ext.isMac){cls.push("ext-mac");}
 if(Ext.isLinux){cls.push("ext-linux");}
 if(Ext.isBorderBox){cls.push('ext-border-box');}
 if(Ext.isStrict){var p=bd.parentNode;if(p){p.className+=' ext-strict';}}
@@ -243,8 +249,8 @@
 return this;},setLeft:function(left){this.setStyle("left",this.addUnits(left));return this;},setTop:function(top){this.setStyle("top",this.addUnits(top));return this;},setRight:function(right){this.setStyle("right",this.addUnits(right));return this;},setBottom:function(bottom){this.setStyle("bottom",this.addUnits(bottom));return this;},setXY:function(pos,animate){if(!animate||!A){D.setXY(this.dom,pos);}else{this.anim({points:{to:pos}},this.preanim(arguments,1),'motion');}
 return this;},setLocation:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this;},moveTo:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this;},getRegion:function(){return D.getRegion(this.dom);},getHeight:function(contentHeight){var h=this.dom.offsetHeight||0;h=contentHeight!==true?h:h-this.getBorderWidth("tb")-this.getPadding("tb");return h<0?0:h;},getWidth:function(contentWidth){var w=this.dom.offsetWidth||0;w=contentWidth!==true?w:w-this.getBorderWidth("lr")-this.getPadding("lr");return w<0?0:w;},getComputedHeight:function(){var h=Math.max(this.dom.offsetHeight,this.dom.clientHeight);if(!h){h=parseInt(this.getStyle('height'),10)||0;if(!this.isBorderBox()){h+=this.getFrameWidth('tb');}}
 return h;},getComputedWidth:function(){var w=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!w){w=parseInt(this.getStyle('width'),10)||0;if(!this.isBorderBox()){w+=this.getFrameWidth('lr');}}
-return w;},getSize:function(contentSize){return{width:this.getWidth(contentSize),height:this.getHeight(contentSize)};},getStyleSize:function(){var w,h,d=this.dom,s=d.style;if(s.width&&s.width!='auto'){w=parseInt(s.width,10);if(Ext.isBorderBox){w-=this.getFrameWidth('lr');}}
-if(s.height&&s.height!='auto'){h=parseInt(s.height,10);if(Ext.isBorderBox){h-=this.getFrameWidth('tb');}}
+return w;},getSize:function(contentSize){return{width:this.getWidth(contentSize),height:this.getHeight(contentSize)};},getStyleSize:function(){var w,h,d=this.dom,s=d.style;if(s.width&&s.width!='auto'){w=parseInt(s.width,10);if(this.isBorderBox()){w-=this.getFrameWidth('lr');}}
+if(s.height&&s.height!='auto'){h=parseInt(s.height,10);if(this.isBorderBox()){h-=this.getFrameWidth('tb');}}
 return{width:w||this.getWidth(true),height:h||this.getHeight(true)};},getViewSize:function(){var d=this.dom,doc=document,aw=0,ah=0;if(d==doc||d==doc.body){return{width:D.getViewWidth(),height:D.getViewHeight()};}else{return{width:d.clientWidth,height:d.clientHeight};}},getValue:function(asNumber){return asNumber?parseInt(this.dom.value,10):this.dom.value;},adjustWidth:function(width){if(typeof width=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){width-=(this.getBorderWidth("lr")+this.getPadding("lr"));}
 if(width<0){width=0;}}
 return width;},adjustHeight:function(height){if(typeof height=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){height-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
@@ -275,18 +281,18 @@
 if(typeof callback=="function"){callback();}});dom.innerHTML=html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this;},load:function(){var um=this.getUpdater();um.update.apply(um,arguments);return this;},getUpdater:function(){if(!this.updateManager){this.updateManager=new Ext.Updater(this);}
 return this.updateManager;},unselectable:function(){this.dom.unselectable="on";this.swallowEvent("selectstart",true);this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");this.addClass("x-unselectable");return this;},getCenterXY:function(){return this.getAlignToXY(document,'c-c');},center:function(centerIn){this.alignTo(centerIn||document,'c-c');return this;},isBorderBox:function(){return noBoxAdjust[this.dom.tagName.toLowerCase()]||Ext.isBorderBox;},getBox:function(contentBox,local){var xy;if(!local){xy=this.getXY();}else{var left=parseInt(this.getStyle("left"),10)||0;var top=parseInt(this.getStyle("top"),10)||0;xy=[left,top];}
 var el=this.dom,w=el.offsetWidth,h=el.offsetHeight,bx;if(!contentBox){bx={x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h};}else{var l=this.getBorderWidth("l")+this.getPadding("l");var r=this.getBorderWidth("r")+this.getPadding("r");var t=this.getBorderWidth("t")+this.getPadding("t");var b=this.getBorderWidth("b")+this.getPadding("b");bx={x:xy[0]+l,y:xy[1]+t,0:xy[0]+l,1:xy[1]+t,width:w-(l+r),height:h-(t+b)};}
-bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&Ext.isBorderBox?0:(this.getPadding(sides)+this.getBorderWidth(sides));},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
+bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&this.isBorderBox()?0:(this.getPadding(sides)+this.getBorderWidth(sides));},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
 this.setBounds(box.x,box.y,w,h,this.preanim(arguments,2));return this;},repaint:function(){var dom=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.get(dom).removeClass("x-repaint");},1);return this;},getMargins:function(side){if(!side){return{top:parseInt(this.getStyle("margin-top"),10)||0,left:parseInt(this.getStyle("margin-left"),10)||0,bottom:parseInt(this.getStyle("margin-bottom"),10)||0,right:parseInt(this.getStyle("margin-right"),10)||0};}else{return this.addStyles(side,El.margins);}},addStyles:function(sides,styles){var val=0,v,w;for(var i=0,len=sides.length;i<len;i++){v=this.getStyle(styles[sides.charAt(i)]);if(v){w=parseInt(v,10);if(w){val+=(w>=0?w:-1*w);}}}
 return val;},createProxy:function(config,renderTo,matchBox){config=typeof config=="object"?config:{tag:"div",cls:config};var proxy;if(renderTo){proxy=Ext.DomHelper.append(renderTo,config,true);}else{proxy=Ext.DomHelper.insertBefore(this.dom,config,true);}
 if(matchBox){proxy.setBox(this.getBox());}
-return proxy;},mask:function(msg,msgCls){if(this.getStyle("position")=="static"){this.setStyle("position","relative");}
+return proxy;},mask:function(msg,msgCls){if(this.getStyle("position")=="static"){this.addClass("x-masked-relative");}
 if(this._maskMsg){this._maskMsg.remove();}
 if(this._mask){this._mask.remove();}
 this._mask=Ext.DomHelper.append(this.dom,{cls:"ext-el-mask"},true);this.addClass("x-masked");this._mask.setDisplayed(true);if(typeof msg=='string'){this._maskMsg=Ext.DomHelper.append(this.dom,{cls:"ext-el-mask-msg",cn:{tag:'div'}},true);var mm=this._maskMsg;mm.dom.className=msgCls?"ext-el-mask-msg "+msgCls:"ext-el-mask-msg";mm.dom.firstChild.innerHTML=msg;mm.setDisplayed(true);mm.center(this);}
 if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&this.getStyle('height')=='auto'){this._mask.setSize(this.dom.clientWidth,this.getHeight());}
 return this._mask;},unmask:function(){if(this._mask){if(this._maskMsg){this._maskMsg.remove();delete this._maskMsg;}
 this._mask.remove();delete this._mask;}
-this.removeClass("x-masked");},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var el=document.createElement('iframe');el.frameBorder='0';el.className='ext-shim';if(Ext.isIE&&Ext.isSecure){el.src=Ext.SSL_SECURE_URL;}
+this.removeClass(["x-masked","x-masked-relative"]);},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var el=document.createElement('iframe');el.frameBorder='0';el.className='ext-shim';if(Ext.isIE&&Ext.isSecure){el.src=Ext.SSL_SECURE_URL;}
 var shim=Ext.get(this.dom.parentNode.insertBefore(el,this.dom));shim.autoBoxAdjust=false;return shim;},remove:function(){Ext.removeNode(this.dom);delete El.cache[this.dom.id];},hover:function(overFn,outFn,scope){var preOverFn=function(e){if(!e.within(this,true)){overFn.apply(scope||this,arguments);}};var preOutFn=function(e){if(!e.within(this,true)){outFn.apply(scope||this,arguments);}};this.on("mouseover",preOverFn,this.dom);this.on("mouseout",preOutFn,this.dom);return this;},addClassOnOver:function(className){this.hover(function(){Ext.fly(this,'_internal').addClass(className);},function(){Ext.fly(this,'_internal').removeClass(className);});return this;},addClassOnFocus:function(className){this.on("focus",function(){Ext.fly(this,'_internal').addClass(className);},this.dom);this.on("blur",function(){Ext.fly(this,'_internal').removeClass(className);},this.dom);return this;},addClassOnClick:function(className){var dom=this.dom;this.on("mousedown",function(){Ext.fly(dom,'_internal').addClass(className);var d=Ext.getDoc();var fn=function(){Ext.fly(dom,'_internal').removeClass(className);d.removeListener("mouseup",fn);};d.on("mouseup",fn);});return this;},swallowEvent:function(eventName,preventDefault){var fn=function(e){e.stopPropagation();if(preventDefault){e.preventDefault();}};if(Ext.isArray(eventName)){for(var i=0,len=eventName.length;i<len;i++){this.on(eventName[i],fn);}
 return this;}
 this.on(eventName,fn);return this;},parent:function(selector,returnDom){return this.matchNode('parentNode','parentNode',selector,returnDom);},next:function(selector,returnDom){return this.matchNode('nextSibling','nextSibling',selector,returnDom);},prev:function(selector,returnDom){return this.matchNode('previousSibling','previousSibling',selector,returnDom);},first:function(selector,returnDom){return this.matchNode('nextSibling','firstChild',selector,returnDom);},last:function(selector,returnDom){return this.matchNode('previousSibling','lastChild',selector,returnDom);},matchNode:function(dir,start,selector,returnDom){var n=this.dom[start];while(n){if(n.nodeType==1&&(!selector||Ext.DomQuery.is(n,selector))){return!returnDom?Ext.get(n):n;}
@@ -324,7 +330,7 @@
 Ext.Element.addMethods({scrollIntoView:function(container,hscroll){var c=Ext.getDom(container)||Ext.getBody().dom;var el=this.dom;var o=this.getOffsetsTo(c),l=o[0]+c.scrollLeft,t=o[1]+c.scrollTop,b=t+el.offsetHeight,r=l+el.offsetWidth;var ch=c.clientHeight;var ct=parseInt(c.scrollTop,10);var cl=parseInt(c.scrollLeft,10);var cb=ct+ch;var cr=cl+c.clientWidth;if(el.offsetHeight>ch||t<ct){c.scrollTop=t;}else if(b>cb){c.scrollTop=b-ch;}
 c.scrollTop=c.scrollTop;if(hscroll!==false){if(el.offsetWidth>c.clientWidth||l<cl){c.scrollLeft=l;}else if(r>cr){c.scrollLeft=r-c.clientWidth;}
 c.scrollLeft=c.scrollLeft;}
-return this;},scrollChildIntoView:function(child,hscroll){Ext.fly(child,'_scrollChildIntoView').scrollIntoView(this,hscroll);},isScrollable:function(){var dom=this.dom;return dom.scrollHeight>dom.clientHeight||dom.scrollWidth>dom.clientWidth;},scrollTo:function(side,value,animate){var prop=side.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!animate||!A){this.dom[prop]=value;}else{var to=prop=="scrollLeft"?[value,this.dom.scrollTop]:[this.dom.scrollLeft,value];this.anim({scroll:{"to":to}},this.preanim(arguments,2),'scroll');}
+return this;},scrollChildIntoView:function(child,hscroll){Ext.fly(child,'_scrollChildIntoView').scrollIntoView(this,hscroll);},isScrollable:function(){var dom=this.dom;return dom.scrollHeight>dom.clientHeight||dom.scrollWidth>dom.clientWidth;},scrollTo:function(side,value,animate){var prop=side.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!animate){this.dom[prop]=value;}else{var to=prop=="scrollLeft"?[value,this.dom.scrollTop]:[this.dom.scrollLeft,value];this.anim({scroll:{"to":to}},this.preanim(arguments,2),'scroll');}
 return this;},scroll:function(direction,distance,animate){if(!this.isScrollable()){return;}
 var el=this.dom;var l=el.scrollLeft,t=el.scrollTop;var w=el.scrollWidth,h=el.scrollHeight;var cw=el.clientWidth,ch=el.clientHeight;direction=direction.toLowerCase();var scrolled=false;var a=this.preanim(arguments,2);switch(direction){case"l":case"left":if(w-l>cw){var v=Math.min(l+distance,w-cw);this.scrollTo("left",v,a);scrolled=true;}
 break;case"r":case"right":if(l>0){var v=Math.max(l-distance,0);this.scrollTo("left",v,a);scrolled=true;}
@@ -340,7 +346,7 @@
 return rt;}
 where=where?where.toLowerCase():'before';el=el||{};var refNode=where=='before'?this.dom:this.dom.nextSibling;if(typeof el=='object'&&!el.nodeType&&!el.dom){if(where=='after'&&!this.dom.nextSibling){rt=Ext.DomHelper.append(this.dom.parentNode,el,!returnDom);}else{rt=Ext.DomHelper[where=='after'?'insertAfter':'insertBefore'](this.dom,el,!returnDom);}}else{rt=this.dom.parentNode.insertBefore(Ext.getDom(el),refNode);if(!returnDom){rt=Ext.get(rt);}}
 return rt;},replace:function(el){el=Ext.get(el);this.insertBefore(el);el.remove();return this;},replaceWith:function(el){if(typeof el=='object'&&!el.nodeType&&!el.dom){el=this.insertSibling(el,'before');}else{el=Ext.getDom(el);this.dom.parentNode.insertBefore(el,this.dom);}
-El.uncache(this.id);this.dom.parentNode.removeChild(this.dom);this.dom=el;this.id=Ext.id(el);El.cache[this.id]=this;return this;}});
+El.uncache(this.id);Ext.removeNode(this.dom);this.dom=el;this.id=Ext.id(el);El.cache[this.id]=this;return this;}});
 
 Ext.Element.addMethods({initDD:function(group,config,overrides){var dd=new Ext.dd.DD(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);},initDDProxy:function(group,config,overrides){var dd=new Ext.dd.DDProxy(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);},initDDTarget:function(group,config,overrides){var dd=new Ext.dd.DDTarget(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);}});
 
@@ -370,8 +376,9 @@
 el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;st.fontSize='';el.afterFx(o);};var width=this.getWidth();var height=this.getHeight();arguments.callee.anim=this.fxanim({width:{to:this.adjustWidth(width*2)},height:{to:this.adjustHeight(height*2)},points:{by:[-(width*.5),-(height*.5)]},opacity:{to:0},fontSize:{to:200,unit:"%"}},o,'motion',.5,"easeOut",after);});return this;},switchOff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.clip();var r=this.getFxRestore();var st=this.dom.style;var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}
 el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};this.fxanim({opacity:{to:0.3}},null,null,.1,null,function(){this.clearOpacity();(function(){this.fxanim({height:{to:1},points:{by:[0,this.getHeight()*.5]}},o,'motion',0.3,'easeIn',after);}).defer(100,this);});});return this;},highlight:function(color,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){color=color||"ffff9c";var attr=o.attr||"backgroundColor";this.clearOpacity();this.show();var origColor=this.getColor(attr);var restoreColor=this.dom.style[attr];var endColor=(o.endColor||origColor)||"ffffff";var after=function(){el.dom.style[attr]=restoreColor;el.afterFx(o);};var a={};a[attr]={from:color,to:endColor};arguments.callee.anim=this.fxanim(a,o,'color',1,'easeIn',after);});return this;},frame:function(color,count,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){color=color||"#C3DAF9";if(color.length==6){color="#"+color;}
 count=count||1;var duration=o.duration||1;this.show();var b=this.getBox();var animFn=function(){var proxy=Ext.getBody().createChild({style:{visbility:"hidden",position:"absolute","z-index":"35000",border:"0px solid "+color}});var scale=Ext.isBorderBox?2:1;proxy.animate({top:{from:b.y,to:b.y-20},left:{from:b.x,to:b.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:b.height,to:(b.height+(20*scale))},width:{from:b.width,to:(b.width+(20*scale))}},duration,function(){proxy.remove();if(--count>0){animFn();}else{el.afterFx(o);}});};animFn.call(this);});return this;},pause:function(seconds){var el=this.getFxEl();var o={};el.queueFx(o,function(){setTimeout(function(){el.afterFx(o);},seconds*1000);});return this;},fadeIn:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.setOpacity(0);this.fixDisplay();this.dom.style.visibility='visible';var to=o.endOpacity||1;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to==1){this.clearOpacity();}
-el.afterFx(o);});});return this;},fadeOut:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){arguments.callee.anim=this.fxanim({opacity:{to:o.endOpacity||0}},o,null,.5,"easeOut",function(){if(this.visibilityMode==Ext.Element.DISPLAY||o.useDisplay){this.dom.style.display="none";}else{this.dom.style.visibility="hidden";}
-this.clearOpacity();el.afterFx(o);});});return this;},scale:function(w,h,o){this.shift(Ext.apply({},o,{width:w,height:h}));return this;},shift:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var a={},w=o.width,h=o.height,x=o.x,y=o.y,op=o.opacity;if(w!==undefined){a.width={to:this.adjustWidth(w)};}
+el.afterFx(o);});});return this;},fadeOut:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var to=o.endOpacity||0;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to===0){if(this.visibilityMode==Ext.Element.DISPLAY||o.useDisplay){this.dom.style.display="none";}else{this.dom.style.visibility="hidden";}
+this.clearOpacity();}
+el.afterFx(o);});});return this;},scale:function(w,h,o){this.shift(Ext.apply({},o,{width:w,height:h}));return this;},shift:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var a={},w=o.width,h=o.height,x=o.x,y=o.y,op=o.opacity;if(w!==undefined){a.width={to:this.adjustWidth(w)};}
 if(h!==undefined){a.height={to:this.adjustHeight(h)};}
 if(o.left!==undefined){a.left={to:o.left};}
 if(o.top!==undefined){a.top={to:o.top};}
@@ -437,31 +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;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(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=[];}}
-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;}
-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();}}};})();
-
 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;};}
@@ -476,59 +458,35 @@
 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++;Date.formatFunctions[format]=funcName;var code="Date.prototype."+funcName+" = function(){return ";var special=false;var ch='';for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
+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++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code="Date."+funcName+" = function(input){\n"
-+"var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;\n"
-+"input = String(input);\n"
-+"d = new Date();\n"
-+"y = d.getFullYear();\n"
-+"m = d.getMonth();\n"
-+"d = d.getDate();\n"
-+"var results = input.match(Date.parseRegexes["+regexNum+"]);\n"
-+"if (results && results.length > 0) {";var regex="";var special=false;var ch='';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){\n"
-+"v = new Date(u * 1000);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){\n"
-+"v = new Date(y, m, d, h, i, s, ms);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){\n"
-+"v = new Date(y, m, d, h, i, s);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){\n"
-+"v = new Date(y, m, d, h, i);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){\n"
-+"v = new Date(y, m, d, h);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0){\n"
-+"v = new Date(y, m, d);\n"
-+"}else if (y >= 0 && m >= 0){\n"
-+"v = new Date(y, m);\n"
-+"}else if (y >= 0){\n"
-+"v = new Date(y);\n"
-+"}\n}\nreturn (v && (z || o))?"
-+" (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;\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"
 +"if (h == 12) { h = 0; }\n"
 +"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"},g:function(){return $f("G");},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},h:function(){return $f("H");},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1);","var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);","var mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+\-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1);","var hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60);","var mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+\-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,4}"},Z:{g:1,c:"z = results[{0}] * 1;\n"
-+"z = (-43200 <= z && z <= 50400)? z : null;\n",s:"([+\-]?\\d{1,5})"},c:function(){var calc=[];var arr=[$f("Y",1),$f("m",2),$f("d",3),$f("h",4),$f("i",5),$f("s",6),{c:"ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:"if(results[9] == 'Z'){\no = 0;\n}else{\n"+$f("P",9).c+"\n}"}];for(var i=0,l=arr.length;i<l;++i){calc.push(arr[i].c);}
++"z = (-43200 <= z && z <= 50400)? z : null;\n",s:"([+\-]?\\d{1,5})"},c:function(){var calc=[],arr=[$f("Y",1),$f("m",2),$f("d",3),$f("h",4),$f("i",5),$f("s",6),{c:"ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[9] == 'Z'){","z = 0;","}else{",$f("P",9).c,"}"].join('\n')}];for(var i=0,l=arr.length;i<l;++i){calc.push(arr[i].c);}
 return{g:1,c:calc.join(""),s:arr[0].s+"-"+arr[1].s+"-"+arr[2].s+"T"+arr[3].s+":"+arr[4].s+":"+arr[5].s
 +"((\.|,)\\d+)?"
-+"("+$f("P",null).s+"|Z)"}},U:{g:1,c:"u = parseInt(results[{0}], 10);\n",s:"(-?\\d+)"}}});}());Ext.override(Date,{dateFormat:function(format){if(Date.formatFunctions[format]==null){Date.createNewFormat(format);}
++"(Z|([+\-]\\d{2}:\\d{2}))"}},U:{g:1,c:"u = parseInt(results[{0}], 10);\n",s:"(-?\\d+)"}}});}());Ext.override(Date,{dateFormat:function(format){if(Date.formatFunctions[format]==null){Date.createNewFormat(format);}
 var func=Date.formatFunctions[format];return this[func]();},getTimezone:function(){return this.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/,"$1$2").replace(/[^A-Z]/g,"");},getGMTOffset:function(colon){return(this.getTimezoneOffset()>0?"-":"+")
-+String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset()/60)),2,"0")
++String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")
 +(colon?":":"")
 +String.leftPad(Math.abs(this.getTimezoneOffset()%60),2,"0");},getDayOfYear:function(){var num=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var i=0;i<this.getMonth();++i){num+=Date.daysInMonth[i];}
-return num+this.getDate()-1;},getWeekOfYear:function(){var ms1d=864e5;var ms7d=7*ms1d;var DC3=Date.UTC(this.getFullYear(),this.getMonth(),this.getDate()+3)/ms1d;var AWN=Math.floor(DC3/7);var Wyr=new Date(AWN*ms7d).getUTCFullYear();return AWN-Math.floor(Date.UTC(Wyr,0,7)/ms7d)+1;},isLeapYear:function(){var year=this.getFullYear();return!!((year&3)==0&&(year%100||(year%400==0&&year)));},getFirstDayOfMonth:function(){var day=(this.getDay()-(this.getDate()-1))%7;return(day<0)?(day+7):day;},getLastDayOfMonth:function(){var day=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(day<0)?(day+7):day;},getFirstDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),1);},getLastDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth());},getDaysInMonth:function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];},getSuffix:function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}},clone:function(){return new Date(this.getTime());},clearTime:function(clone){if(clone){return this.clone().clearTime();}
+return num+this.getDate()-1;},getWeekOfYear:function(){var ms1d=864e5,ms7d=7*ms1d;return function(){var DC3=Date.UTC(this.getFullYear(),this.getMonth(),this.getDate()+3)/ms1d,AWN=Math.floor(DC3/7),Wyr=new Date(AWN*ms7d).getUTCFullYear();return AWN-Math.floor(Date.UTC(Wyr,0,7)/ms7d)+1;}}(),isLeapYear:function(){var year=this.getFullYear();return!!((year&3)==0&&(year%100||(year%400==0&&year)));},getFirstDayOfMonth:function(){var day=(this.getDay()-(this.getDate()-1))%7;return(day<0)?(day+7):day;},getLastDayOfMonth:function(){var day=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(day<0)?(day+7):day;},getFirstDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),1);},getLastDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth());},getDaysInMonth:function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];},getSuffix:function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}},clone:function(){return new Date(this.getTime());},clearTime:function(clone){if(clone){return this.clone().clearTime();}
 this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;},add:function(interval,value){var d=this.clone();if(!interval||value===0)return d;switch(interval.toLowerCase()){case Date.MILLI:d.setMilliseconds(this.getMilliseconds()+value);break;case Date.SECOND:d.setSeconds(this.getSeconds()+value);break;case Date.MINUTE:d.setMinutes(this.getMinutes()+value);break;case Date.HOUR:d.setHours(this.getHours()+value);break;case Date.DAY:d.setDate(this.getDate()+value);break;case Date.MONTH:var day=this.getDate();if(day>28){day=Math.min(day,this.getFirstDateOfMonth().add('mo',value).getLastDateOfMonth().getDate());}
 d.setDate(day);d.setMonth(this.getMonth()+value);break;case Date.YEAR:d.setFullYear(this.getFullYear()+value);break;}
 return d;},between:function(start,end){var t=this.getTime();return start.getTime()<=t&&t<=end.getTime();}});Date.prototype.format=Date.prototype.dateFormat;if(Ext.isSafari){Date.brokenSetMonth=Date.prototype.setMonth;Date.prototype.setMonth=function(num){if(num<=-1){var n=Math.ceil(-num);var back_year=Math.ceil(n/12);var month=(n%12)?12-n%12:0;this.setFullYear(this.getFullYear()-back_year);return Date.brokenSetMonth.call(this,month);}else{return Date.brokenSetMonth.apply(this,arguments);}};}
@@ -568,6 +526,8 @@
 return value;},clone:function(){var r=new Ext.util.MixedCollection();var k=this.keys,it=this.items;for(var i=0,len=it.length;i<len;i++){r.add(k[i],it[i]);}
 r.getKey=this.getKey;return r;}});Ext.util.MixedCollection.prototype.get=Ext.util.MixedCollection.prototype.item;
 
+Ext.ComponentMgr=function(){var all=new Ext.util.MixedCollection();var types={};var ptypes={};return{register:function(c){all.add(c);},unregister:function(c){all.remove(c);},get:function(id){return all.get(id);},onAvailable:function(id,fn,scope){all.on("add",function(index,o){if(o.id==id){fn.call(scope||o,o);all.un("add",fn,scope);}});},all:all,registerType:function(xtype,cls){types[xtype]=cls;cls.xtype=xtype;},create:function(config,defaultType){return config.render?config:new types[config.xtype||defaultType](config);},registerPlugin:function(ptype,cls){ptypes[ptype]=cls;cls.ptype=ptype;},createPlugin:function(config,defaultType){return new ptypes[config.ptype||defaultType](config);}};}();Ext.reg=Ext.ComponentMgr.registerType;Ext.preg=Ext.ComponentMgr.registerPlugin;Ext.create=Ext.ComponentMgr.create;
+
 Ext.util.JSON=new(function(){var useHasOwn=!!{}.hasOwnProperty;var pad=function(n){return n<10?"0"+n:n;};var m={"\b":'\\b',"\t":'\\t',"\n":'\\n',"\f":'\\f',"\r":'\\r','"':'\\"',"\\":'\\\\'};var encodeString=function(s){if(/["\\\x00-\x1f]/.test(s)){return'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c;}
 c=b.charCodeAt();return"\\u00"+
 Math.floor(c/16).toString(16)+
@@ -591,12 +551,13 @@
 return v.dateFormat(format||"m/d/Y");},dateRenderer:function(format){return function(v){return Ext.util.Format.date(v,format);};},stripTagsRE:/<\/?[^>]+>/gi,stripTags:function(v){return!v?v:String(v).replace(this.stripTagsRE,"");},stripScriptsRe:/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,stripScripts:function(v){return!v?v:String(v).replace(this.stripScriptsRe,"");},fileSize:function(size){if(size<1024){return size+" bytes";}else if(size<1048576){return(Math.round(((size*10)/1024))/10)+" KB";}else{return(Math.round(((size*10)/1048576))/10)+" MB";}},math:function(){var fns={};return function(v,a){if(!fns[a]){fns[a]=new Function('v','return v '+a+';');}
 return fns[a](v);}}(),number:function(v,format){if(!format){return v;}
 v*=1;if(typeof v!='number'||isNaN(v)){return'';}
-var hasComma=-1<format.indexOf(','),psplit=format.replace(/[^\d\.]/g,'').split('.');if(1<psplit.length){v=v.toFixed(psplit[1].length);}
+var comma=',';var dec='.';var i18n=false;if(format.substr(format.length-2)=='/i'){format=format.substr(0,format.length-2);i18n=true;comma='.';dec=',';}
+var hasComma=format.indexOf(comma)!=-1,psplit=(i18n?format.replace(/[^\d\,]/g,''):format.replace(/[^\d\.]/g,'')).split(dec);if(1<psplit.length){v=v.toFixed(psplit[1].length);}
 else if(2<psplit.length){throw('NumberFormatException: invalid format, formats should have no more than 1 period: '+format);}
 else{v=v.toFixed(0);}
 var fnum=v.toString();if(hasComma){psplit=fnum.split('.');var cnum=psplit[0],parr=[],j=cnum.length,m=Math.floor(j/3),n=cnum.length%3||3;for(var i=0;i<j;i+=n){if(i!=0){n=3;}
 parr[parr.length]=cnum.substr(i,n);m-=1;}
-fnum=parr.join(',');if(psplit[1]){fnum+='.'+psplit[1];}}
+fnum=parr.join(comma);if(psplit[1]){fnum+=dec+psplit[1];}}
 return format.replace(/[\d,?\.?]+/,fnum);},numberRenderer:function(format){return function(v){return Ext.util.Format.number(v,format);};},plural:function(v,s,p){return v+' '+(v==1?s:(p?p:s+'s'));}}}();
 
 Ext.XTemplate=function(){Ext.XTemplate.superclass.constructor.apply(this,arguments);var s=this.html;s=['<tpl>',s,'</tpl>'].join('');var re=/<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;var nameRe=/^<tpl\b[^>]*?for="(.*?)"/;var ifRe=/^<tpl\b[^>]*?if="(.*?)"/;var execRe=/^<tpl\b[^>]*?exec="(.*?)"/;var m,id=0;var tpls=[];while(m=s.match(re)){var m2=m[0].match(nameRe);var m3=m[0].match(ifRe);var m4=m[0].match(execRe);var exp=null,fn=null,exec=null;var name=m2&&m2[1]?m2[1]:'';if(m3){exp=m3&&m3[1]?m3[1]:null;if(exp){fn=new Function('values','parent','xindex','xcount','with(values){ return '+(Ext.util.Format.htmlDecode(exp))+'; }');}}
@@ -630,7 +591,7 @@
 {this.el=Ext.get(el);this.el.unselectable();Ext.apply(this,config);this.addEvents("mousedown","click","mouseup");this.el.on("mousedown",this.handleMouseDown,this);if(this.preventDefault||this.stopDefault){this.el.on("click",function(e){if(this.preventDefault){e.preventDefault();}
 if(this.stopDefault){e.stopEvent();}},this);}
 if(this.handler){this.on("click",this.handler,this.scope||this);}
-Ext.util.ClickRepeater.superclass.constructor.call(this);};Ext.extend(Ext.util.ClickRepeater,Ext.util.Observable,{interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,handleMouseDown:function(){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass);}
+Ext.util.ClickRepeater.superclass.constructor.call(this);};Ext.extend(Ext.util.ClickRepeater,Ext.util.Observable,{interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,destroy:function(){Ext.destroy(this.el);this.purgeListeners();},handleMouseDown:function(){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass);}
 this.mousedownTime=new Date();Ext.getDoc().on("mouseup",this.handleMouseUp,this);this.el.on("mouseout",this.handleMouseOut,this);this.fireEvent("mousedown",this);this.fireEvent("click",this);if(this.accelerate){this.delay=400;}
 this.timer=this.click.defer(this.delay||this.interval,this);},click:function(){this.fireEvent("click",this);this.timer=this.click.defer(this.accelerate?this.easeOutExpo(this.mousedownTime.getElapsed(),400,-390,12000):this.interval,this);},easeOutExpo:function(t,b,c,d){return(t==d)?b+c:c*(-Math.pow(2,-10*t/d)+1)+b;},handleMouseOut:function(){clearTimeout(this.timer);if(this.pressClass){this.el.removeClass(this.pressClass);}
 this.el.on("mouseover",this.handleMouseReturn,this);},handleMouseReturn:function(){this.el.un("mouseover",this.handleMouseReturn,this);if(this.pressClass){this.el.addClass(this.pressClass);}
@@ -655,7 +616,7 @@
 shared.bind(el);shared.setFixedWidth(fixedWidth||'auto');return shared.getSize(text);},createInstance:function(el,fixedWidth){return Ext.util.TextMetrics.Instance(el,fixedWidth);}};}();Ext.util.TextMetrics.Instance=function(bindTo,fixedWidth){var ml=new Ext.Element(document.createElement('div'));document.body.appendChild(ml.dom);ml.position('absolute');ml.setLeftTop(-1000,-1000);ml.hide();if(fixedWidth){ml.setWidth(fixedWidth);}
 var instance={getSize:function(text){ml.update(text);var s=ml.getSize();ml.update('');return s;},bind:function(el){ml.setStyle(Ext.fly(el).getStyles('font-size','font-style','font-weight','font-family','line-height','text-transform','letter-spacing'));},setFixedWidth:function(width){ml.setWidth(width);},getWidth:function(text){ml.dom.style.width='auto';return this.getSize(text).width;},getHeight:function(text){return this.getSize(text).height;}};instance.bind(bindTo);return instance;};Ext.Element.addMethods({getTextWidth:function(text,min,max){return(Ext.util.TextMetrics.measure(this.dom,Ext.value(text,this.dom.innerHTML,true)).width).constrain(min||0,max||1000000);}});
 
-(function(){var Event=Ext.EventManager;var Dom=Ext.lib.Dom;Ext.dd.DragDrop=function(id,sGroup,config){if(id){this.init(id,sGroup,config);}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(x,y){},startDrag:function(x,y){},b4Drag:function(e){},onDrag:function(e){},onDragEnter:function(e,id){},b4DragOver:function(e){},onDragOver:function(e,id){},b4DragOut:function(e){},onDragOut:function(e,id){},b4DragDrop:function(e){},onDragDrop:function(e,id){},onInvalidDrop:function(e){},b4EndDrag:function(e){},endDrag:function(e){},b4MouseDown:function(e){},onMouseDown:function(e){},onMouseUp:function(e){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(constrainTo,pad,inContent){if(typeof pad=="number"){pad={left:pad,right:pad,top:pad,bottom:pad};}
+(function(){var Event=Ext.EventManager;var Dom=Ext.lib.Dom;Ext.dd.DragDrop=function(id,sGroup,config){if(id){this.init(id,sGroup,config);}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},moveOnly:false,unlock:function(){this.locked=false;},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(x,y){},startDrag:function(x,y){},b4Drag:function(e){},onDrag:function(e){},onDragEnter:function(e,id){},b4DragOver:function(e){},onDragOver:function(e,id){},b4DragOut:function(e){},onDragOut:function(e,id){},b4DragDrop:function(e){},onDragDrop:function(e,id){},onInvalidDrop:function(e){},b4EndDrag:function(e){},endDrag:function(e){},b4MouseDown:function(e){},onMouseDown:function(e){},onMouseUp:function(e){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(constrainTo,pad,inContent){if(typeof pad=="number"){pad={left:pad,right:pad,top:pad,bottom:pad};}
 pad=pad||this.defaultPadding;var b=Ext.get(this.getEl()).getBox();var ce=Ext.get(constrainTo);var s=ce.getScroll();var c,cd=ce.dom;if(cd==document.body){c={x:s.left,y:s.top,width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()};}else{var xy=ce.getXY();c={x:xy[0]+s.left,y:xy[1]+s.top,width:cd.clientWidth,height:cd.clientHeight};}
 var topSpace=b.y-c.y;var leftSpace=b.x-c.x;this.resetConstraints();this.setXConstraint(leftSpace-(pad.left||0),c.width-leftSpace-b.width-(pad.right||0),this.xTickSize);this.setYConstraint(topSpace-(pad.top||0),c.height-topSpace-b.height-(pad.bottom||0),this.yTickSize);},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id);}
 return this._domRef;},getDragEl:function(){return Ext.getDom(this.dragElId);},init:function(id,sGroup,config){this.initTarget(id,sGroup,config);Event.on(this.id,"mousedown",this.handleMouseDown,this);},initTarget:function(id,sGroup,config){this.config=config||{};this.DDM=Ext.dd.DDM;this.groups={};if(typeof id!=="string"){id=Ext.id(id);}
@@ -682,13 +643,14 @@
 oDD[sMethod].apply(oDD,args);}}},_onLoad:function(){this.init();Event.on(document,"mouseup",this.handleMouseUp,this,true);Event.on(document,"mousemove",this.handleMouseMove,this,true);Event.on(window,"unload",this._onUnload,this,true);Event.on(window,"resize",this._onResize,this,true);},_onResize:function(e){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(oDD,sGroup){if(!this.initialized){this.init();}
 if(!this.ids[sGroup]){this.ids[sGroup]={};}
 this.ids[sGroup][oDD.id]=oDD;},removeDDFromGroup:function(oDD,sGroup){if(!this.ids[sGroup]){this.ids[sGroup]={};}
-var obj=this.ids[sGroup];if(obj&&obj[oDD.id]){delete obj[oDD.id];}},_remove:function(oDD){for(var g in oDD.groups){if(g&&this.ids[g][oDD.id]){delete this.ids[g][oDD.id];}}
+var obj=this.ids[sGroup];if(obj&&obj[oDD.id]){delete obj[oDD.id];}},_remove:function(oDD){for(var g in oDD.groups){if(g&&this.ids[g]&&this.ids[g][oDD.id]){delete this.ids[g][oDD.id];}}
 delete this.handleIds[oDD.id];},regHandle:function(sDDId,sHandleId){if(!this.handleIds[sDDId]){this.handleIds[sDDId]={};}
 this.handleIds[sDDId][sHandleId]=sHandleId;},isDragDrop:function(id){return(this.getDDById(id))?true:false;},getRelated:function(p_oDD,bTargetsOnly){var oDDs=[];for(var i in p_oDD.groups){for(j in this.ids[i]){var dd=this.ids[i][j];if(!this.isTypeOfDD(dd)){continue;}
 if(!bTargetsOnly||dd.isTarget){oDDs[oDDs.length]=dd;}}}
 return oDDs;},isLegalTarget:function(oDD,oTargetDD){var targets=this.getRelated(oDD,true);for(var i=0,len=targets.length;i<len;++i){if(targets[i].id==oTargetDD.id){return true;}}
 return false;},isTypeOfDD:function(oDD){return(oDD&&oDD.__ygDragDrop);},isHandle:function(sDDId,sHandleId){return(this.handleIds[sDDId]&&this.handleIds[sDDId][sHandleId]);},getDDById:function(id){for(var i in this.ids){if(this.ids[i][id]){return this.ids[i][id];}}
 return null;},handleMouseDown:function(e,oDD){if(Ext.QuickTips){Ext.QuickTips.disable();}
+if(this.dragCurrent){this.handleMouseUp(e);}
 this.currentTarget=e.getTarget();this.dragCurrent=oDD;var el=oDD.getEl();this.startX=e.getPageX();this.startY=e.getPageY();this.deltaX=this.startX-el.offsetLeft;this.deltaY=this.startY-el.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var DDM=Ext.dd.DDM;DDM.startDrag(DDM.startX,DDM.startY);},this.clickTimeThresh);},startDrag:function(x,y){clearTimeout(this.clickTimeout);if(this.dragCurrent){this.dragCurrent.b4StartDrag(x,y);this.dragCurrent.startDrag(x,y);}
 this.dragThreshMet=true;},handleMouseUp:function(e){if(Ext.QuickTips){Ext.QuickTips.enable();}
 if(!this.dragCurrent){return;}
@@ -744,8 +706,9 @@
 this.setDragElPos(iPageX,iPageY);Ext.fly(dragEl).show();},_resizeProxy:function(){if(this.resizeFrame){var el=this.getEl();Ext.fly(this.getDragEl()).setSize(el.offsetWidth,el.offsetHeight);}},b4MouseDown:function(e){var x=e.getPageX();var y=e.getPageY();this.autoOffset(x,y);this.setDragElPos(x,y);},b4StartDrag:function(x,y){this.showFrame(x,y);},b4EndDrag:function(e){Ext.fly(this.getDragEl()).hide();},endDrag:function(e){var lel=this.getEl();var del=this.getDragEl();del.style.visibility="";this.beforeMove();lel.style.visibility="hidden";Ext.dd.DDM.moveToEl(lel,del);del.style.visibility="hidden";lel.style.visibility="";this.afterDrag();},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id);}});Ext.dd.DDTarget=function(id,sGroup,config){if(id){this.initTarget(id,sGroup,config);}};Ext.extend(Ext.dd.DDTarget,Ext.dd.DragDrop,{toString:function(){return("DDTarget "+this.id);}});
 
 Ext.dd.DragTracker=function(config){Ext.apply(this,config);this.addEvents('mousedown','mouseup','mousemove','dragstart','dragend','drag');this.dragRegion=new Ext.lib.Region(0,0,0,0);if(this.el){this.initEl(this.el);}}
-Ext.extend(Ext.dd.DragTracker,Ext.util.Observable,{active:false,tolerance:5,autoStart:false,initEl:function(el){this.el=Ext.get(el);el.on('mousedown',this.onMouseDown,this,this.delegate?{delegate:this.delegate}:undefined);},destroy:function(){this.el.un('mousedown',this.onMouseDown,this);},onMouseDown:function(e,target){if(this.fireEvent('mousedown',this,e)!==false&&this.onBeforeStart(e)!==false){this.startXY=this.lastXY=e.getXY();this.dragTarget=this.delegate?target:this.el.dom;e.preventDefault();var doc=Ext.getDoc();doc.on('mouseup',this.onMouseUp,this);doc.on('mousemove',this.onMouseMove,this);doc.on('selectstart',this.stopSelect,this);if(this.autoStart){this.timer=this.triggerStart.defer(this.autoStart===true?1000:this.autoStart,this);}}},onMouseMove:function(e,target){e.preventDefault();var xy=e.getXY(),s=this.startXY;this.lastXY=xy;if(!this.active){if(Math.abs(s[0]-xy[0])>this.tolerance||Math.abs(s[1]-xy[1])>this.tolerance){this.triggerStart();}else{return;}}
-this.fireEvent('mousemove',this,e);this.onDrag(e);this.fireEvent('drag',this,e);},onMouseUp:function(e){var doc=Ext.getDoc();doc.un('mousemove',this.onMouseMove,this);doc.un('mouseup',this.onMouseUp,this);doc.un('selectstart',this.stopSelect,this);e.preventDefault();this.clearStart();this.active=false;delete this.elRegion;this.fireEvent('mouseup',this,e);this.onEnd(e);this.fireEvent('dragend',this,e);},triggerStart:function(isTimer){this.clearStart();this.active=true;this.onStart(this.startXY);this.fireEvent('dragstart',this,this.startXY);},clearStart:function(){if(this.timer){clearTimeout(this.timer);delete this.timer;}},stopSelect:function(e){e.stopEvent();return false;},onBeforeStart:function(e){},onStart:function(xy){},onDrag:function(e){},onEnd:function(e){},getDragTarget:function(){return this.dragTarget;},getDragCt:function(){return this.el;},getXY:function(constrain){return constrain?this.constrainModes[constrain].call(this,this.lastXY):this.lastXY;},getOffset:function(constrain){var xy=this.getXY(constrain);var s=this.startXY;return[s[0]-xy[0],s[1]-xy[1]];},constrainModes:{'point':function(xy){if(!this.elRegion){this.elRegion=this.getDragCt().getRegion();}
+Ext.extend(Ext.dd.DragTracker,Ext.util.Observable,{active:false,tolerance:5,autoStart:false,initEl:function(el){this.el=Ext.get(el);el.on('mousedown',this.onMouseDown,this,this.delegate?{delegate:this.delegate}:undefined);},destroy:function(){this.el.un('mousedown',this.onMouseDown,this);},onMouseDown:function(e,target){if(this.fireEvent('mousedown',this,e)!==false&&this.onBeforeStart(e)!==false){this.startXY=this.lastXY=e.getXY();this.dragTarget=this.delegate?target:this.el.dom;if(this.preventDefault!==false){e.preventDefault();}
+var doc=Ext.getDoc();doc.on('mouseup',this.onMouseUp,this);doc.on('mousemove',this.onMouseMove,this);doc.on('selectstart',this.stopSelect,this);if(this.autoStart){this.timer=this.triggerStart.defer(this.autoStart===true?1000:this.autoStart,this);}}},onMouseMove:function(e,target){e.preventDefault();var xy=e.getXY(),s=this.startXY;this.lastXY=xy;if(!this.active){if(Math.abs(s[0]-xy[0])>this.tolerance||Math.abs(s[1]-xy[1])>this.tolerance){this.triggerStart();}else{return;}}
+this.fireEvent('mousemove',this,e);this.onDrag(e);this.fireEvent('drag',this,e);},onMouseUp:function(e){var doc=Ext.getDoc();doc.un('mousemove',this.onMouseMove,this);doc.un('mouseup',this.onMouseUp,this);doc.un('selectstart',this.stopSelect,this);e.preventDefault();this.clearStart();var wasActive=this.active;this.active=false;delete this.elRegion;this.fireEvent('mouseup',this,e);if(wasActive){this.onEnd(e);this.fireEvent('dragend',this,e);}},triggerStart:function(isTimer){this.clearStart();this.active=true;this.onStart(this.startXY);this.fireEvent('dragstart',this,this.startXY);},clearStart:function(){if(this.timer){clearTimeout(this.timer);delete this.timer;}},stopSelect:function(e){e.stopEvent();return false;},onBeforeStart:function(e){},onStart:function(xy){},onDrag:function(e){},onEnd:function(e){},getDragTarget:function(){return this.dragTarget;},getDragCt:function(){return this.el;},getXY:function(constrain){return constrain?this.constrainModes[constrain].call(this,this.lastXY):this.lastXY;},getOffset:function(constrain){var xy=this.getXY(constrain);var s=this.startXY;return[s[0]-xy[0],s[1]-xy[1]];},constrainModes:{'point':function(xy){if(!this.elRegion){this.elRegion=this.getDragCt().getRegion();}
 var dr=this.dragRegion;dr.left=xy[0];dr.top=xy[1];dr.right=xy[0];dr.bottom=xy[1];dr.constrainTo(this.elRegion);return[dr.left,dr.top];}}});
 
 Ext.dd.ScrollManager=function(){var ddm=Ext.dd.DragDropMgr;var els={};var dragEl=null;var proc={};var onStop=function(e){dragEl=null;clearProc();};var triggerRefresh=function(){if(ddm.dragCurrent){ddm.refreshCache(ddm.dragCurrent.groups);}};var doScroll=function(){if(ddm.dragCurrent){var dds=Ext.dd.ScrollManager;var inc=proc.el.ddScrollConfig?proc.el.ddScrollConfig.increment:dds.increment;if(!dds.animate){if(proc.el.scroll(proc.dir,inc)){triggerRefresh();}}else{proc.el.scroll(proc.dir,inc,true,dds.animDuration,triggerRefresh);}}};var clearProc=function(){if(proc.id){clearInterval(proc.id);}
@@ -806,11 +769,11 @@
 f.getField=function(name){return p.fields.get(name);};return f;};Ext.data.Record.AUTO_ID=1000;Ext.data.Record.EDIT='edit';Ext.data.Record.REJECT='reject';Ext.data.Record.COMMIT='commit';Ext.data.Record.prototype={dirty:false,editing:false,error:null,modified:null,join:function(store){this.store=store;},set:function(name,value){if(String(this.data[name])==String(value)){return;}
 this.dirty=true;if(!this.modified){this.modified={};}
 if(typeof this.modified[name]=='undefined'){this.modified[name]=this.data[name];}
-this.data[name]=value;if(!this.editing&&this.store){this.store.afterEdit(this);}},get:function(name){return this.data[name];},beginEdit:function(){this.editing=true;this.modified={};},cancelEdit:function(){this.editing=false;delete this.modified;},endEdit:function(){this.editing=false;if(this.dirty&&this.store){this.store.afterEdit(this);}},reject:function(silent){var m=this.modified;for(var n in m){if(typeof m[n]!="function"){this.data[n]=m[n];}}
+this.data[name]=value;if(!this.editing&&this.store){this.store.afterEdit(this);}},get:function(name){return this.data[name];},beginEdit:function(){this.editing=true;this.modified=this.modified||{};},cancelEdit:function(){this.editing=false;delete this.modified;},endEdit:function(){this.editing=false;if(this.dirty&&this.store){this.store.afterEdit(this);}},reject:function(silent){var m=this.modified;for(var n in m){if(typeof m[n]!="function"){this.data[n]=m[n];}}
 this.dirty=false;delete this.modified;this.editing=false;if(this.store&&silent!==true){this.store.afterReject(this);}},commit:function(silent){this.dirty=false;delete this.modified;this.editing=false;if(this.store&&silent!==true){this.store.afterCommit(this);}},getChanges:function(){var m=this.modified,cs={};for(var n in m){if(m.hasOwnProperty(n)){cs[n]=this.data[n];}}
 return cs;},hasError:function(){return this.error!=null;},clearError:function(){this.error=null;},copy:function(newId){return new this.constructor(Ext.apply({},this.data),newId||this.id);},isModified:function(fieldName){return!!(this.modified&&this.modified.hasOwnProperty(fieldName));}};
 
-Ext.StoreMgr=Ext.apply(new Ext.util.MixedCollection(),{register:function(){for(var i=0,s;s=arguments[i];i++){this.add(s);}},unregister:function(){for(var i=0,s;s=arguments[i];i++){this.remove(this.lookup(s));}},lookup:function(id){return typeof id=="object"?id:this.get(id);},getKey:function(o){return o.storeId||o.id;}});
+Ext.StoreMgr=Ext.apply(new Ext.util.MixedCollection(),{register:function(){for(var i=0,s;s=arguments[i];i++){this.add(s);}},unregister:function(){for(var i=0,s;s=arguments[i];i++){this.remove(this.lookup(s));}},lookup:function(id){return typeof id=="object"?(id.events?id:Ext.create(id,'store')):this.get(id);},getKey:function(o){return o.storeId||o.id;}});
 
 Ext.data.Store=function(config){this.data=new Ext.util.MixedCollection(false);this.data.getKey=function(o){return o.id;};this.baseParams={};this.paramNames={"start":"start","limit":"limit","sort":"sort","dir":"dir"};if(config&&config.data){this.inlineData=config.data;delete config.data;}
 Ext.apply(this,config);if(this.url&&!this.proxy){this.proxy=new Ext.data.HttpProxy({url:this.url});}
@@ -818,7 +781,7 @@
 if(this.reader.onMetaChange){this.reader.onMetaChange=this.onMetaChange.createDelegate(this);}}
 if(this.recordType){this.fields=this.recordType.prototype.fields;}
 this.modified=[];this.addEvents('datachanged','metachange','add','remove','update','clear','beforeload','load','loadexception');if(this.proxy){this.relayEvents(this.proxy,["loadexception"]);}
-this.sortToggle={};if(this.sortInfo){this.setDefaultSort(this.sortInfo.field,this.sortInfo.direction);}
+this.sortToggle={};if(this.sortField){this.setDefaultSort(this.sortField,this.sortDir);}else if(this.sortInfo){this.setDefaultSort(this.sortInfo.field,this.sortInfo.direction);}
 Ext.data.Store.superclass.constructor.call(this);if(this.storeId||this.id){Ext.StoreMgr.register(this);}
 if(this.inlineData){this.loadData(this.inlineData);delete this.inlineData;}else if(this.autoLoad){this.load.defer(10,this,[typeof this.autoLoad=='object'?this.autoLoad:undefined]);}};Ext.extend(Ext.data.Store,Ext.util.Observable,{remoteSort:false,pruneModifiedRecords:false,lastOptions:null,destroy:function(){if(this.id){Ext.StoreMgr.unregister(this);}
 this.data=null;this.purgeListeners();},add:function(records){records=[].concat(records);if(records.length<1){return;}
@@ -844,15 +807,15 @@
 value=this.data.createValueMatcher(value,anyMatch,caseSensitive);return function(r){return value.test(r.data[property]);};},sum:function(property,start,end){var rs=this.data.items,v=0;start=start||0;end=(end||end===0)?end:rs.length-1;for(var i=start;i<=end;i++){v+=(rs[i].data[property]||0);}
 return v;},filter:function(property,value,anyMatch,caseSensitive){var fn=this.createFilterFn(property,value,anyMatch,caseSensitive);return fn?this.filterBy(fn):this.clearFilter();},filterBy:function(fn,scope){this.snapshot=this.snapshot||this.data;this.data=this.queryBy(fn,scope||this);this.fireEvent("datachanged",this);},query:function(property,value,anyMatch,caseSensitive){var fn=this.createFilterFn(property,value,anyMatch,caseSensitive);return fn?this.queryBy(fn):this.data.clone();},queryBy:function(fn,scope){var data=this.snapshot||this.data;return data.filterBy(fn,scope||this);},find:function(property,value,start,anyMatch,caseSensitive){var fn=this.createFilterFn(property,value,anyMatch,caseSensitive);return fn?this.data.findIndexBy(fn,null,start):-1;},findBy:function(fn,scope,start){return this.data.findIndexBy(fn,scope,start);},collect:function(dataIndex,allowNull,bypassFilter){var d=(bypassFilter===true&&this.snapshot)?this.snapshot.items:this.data.items;var v,sv,r=[],l={};for(var i=0,len=d.length;i<len;i++){v=d[i].data[dataIndex];sv=String(v);if((allowNull||!Ext.isEmpty(v))&&!l[sv]){l[sv]=true;r[r.length]=v;}}
 return r;},clearFilter:function(suppressEvent){if(this.isFiltered()){this.data=this.snapshot;delete this.snapshot;if(suppressEvent!==true){this.fireEvent("datachanged",this);}}},isFiltered:function(){return this.snapshot&&this.snapshot!=this.data;},afterEdit:function(record){if(this.modified.indexOf(record)==-1){this.modified.push(record);}
-this.fireEvent("update",this,record,Ext.data.Record.EDIT);},afterReject:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.REJECT);},afterCommit:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.COMMIT);},commitChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].commit();}},rejectChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].reject();}},onMetaChange:function(meta,rtype,o){this.recordType=rtype;this.fields=rtype.prototype.fields;delete this.snapshot;this.sortInfo=meta.sortInfo;this.modified=[];this.fireEvent('metachange',this,this.reader.meta);},findInsertIndex:function(record){this.suspendEvents();var data=this.data.clone();this.data.add(record);this.applySort();var index=this.data.indexOf(record);this.data=data;this.resumeEvents();return index;},setBaseParam:function(name,value){this.baseParams=this.baseParams||{};this.baseParams[name]=value;}});
+this.fireEvent("update",this,record,Ext.data.Record.EDIT);},afterReject:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.REJECT);},afterCommit:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.COMMIT);},commitChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].commit();}},rejectChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].reject();}},onMetaChange:function(meta,rtype,o){this.recordType=rtype;this.fields=rtype.prototype.fields;delete this.snapshot;this.sortInfo=meta.sortInfo;this.modified=[];this.fireEvent('metachange',this,this.reader.meta);},findInsertIndex:function(record){this.suspendEvents();var data=this.data.clone();this.data.add(record);this.applySort();var index=this.data.indexOf(record);this.data=data;this.resumeEvents();return index;},setBaseParam:function(name,value){this.baseParams=this.baseParams||{};this.baseParams[name]=value;}});Ext.reg('store',Ext.data.Store);
 
-Ext.data.SimpleStore=function(config){Ext.data.SimpleStore.superclass.constructor.call(this,Ext.apply(config,{reader:new Ext.data.ArrayReader({id:config.id},Ext.data.Record.create(config.fields))}));};Ext.extend(Ext.data.SimpleStore,Ext.data.Store,{loadData:function(data,append){if(this.expandData===true){var r=[];for(var i=0,len=data.length;i<len;i++){r[r.length]=[data[i]];}
-data=r;}
-Ext.data.SimpleStore.superclass.loadData.call(this,data,append);}});
+Ext.data.JsonStore=Ext.extend(Ext.data.Store,{constructor:function(config){Ext.data.JsonStore.superclass.constructor.call(this,Ext.apply(config,{reader:new Ext.data.JsonReader(config)}));}});Ext.reg('jsonstore',Ext.data.JsonStore);
 
-Ext.data.JsonStore=function(c){Ext.data.JsonStore.superclass.constructor.call(this,Ext.apply(c,{proxy:c.proxy||(!c.data?new Ext.data.HttpProxy({url:c.url}):undefined),reader:new Ext.data.JsonReader(c,c.fields)}));};Ext.extend(Ext.data.JsonStore,Ext.data.Store);
+Ext.data.XmlStore=Ext.extend(Ext.data.Store,{constructor:function(config){Ext.data.XmlStore.superclass.constructor.call(this,Ext.apply(config,{reader:new Ext.data.XmlReader(config)}));}});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.ArrayStore=Ext.extend(Ext.data.Store,{constructor:function(config){Ext.data.ArrayStore.superclass.constructor.call(this,Ext.apply(config,{reader:new Ext.data.ArrayReader(config)}));},loadData:function(data,append){if(this.expandData===true){var r=[];for(var i=0,len=data.length;i<len;i++){r[r.length]=[data[i]];}
+data=r;}
+Ext.data.ArrayStore.superclass.loadData.call(this,data,append);}});Ext.reg('arraystore',Ext.data.ArrayStore);Ext.data.SimpleStore=Ext.data.ArrayStore;Ext.reg('simplestore',Ext.data.SimpleStore);
 
 Ext.data.Field=function(config){if(typeof config=="string"){config={name:config};}
 Ext.apply(this,config);if(!this.type){this.type="auto";}
@@ -883,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);}
@@ -903,16 +860,60 @@
 return{success:success,records:records,totalRecords:totalRecords};}});
 
 Ext.data.XmlReader=function(meta,recordType){meta=meta||{};Ext.data.XmlReader.superclass.constructor.call(this,meta,recordType||meta.fields);};Ext.extend(Ext.data.XmlReader,Ext.data.DataReader,{read:function(response){var doc=response.responseXML;if(!doc){throw{message:"XmlReader.read: XML Document not available"};}
-return this.readRecords(doc);},readRecords:function(doc){this.xmlData=doc;var root=doc.documentElement||doc;var q=Ext.DomQuery;var recordType=this.recordType,fields=recordType.prototype.fields;var sid=this.meta.id;var totalRecords=0,success=true;if(this.meta.totalRecords){totalRecords=q.selectNumber(this.meta.totalRecords,root,0);}
+return this.readRecords(doc);},readRecords:function(doc){this.xmlData=doc;var root=doc.documentElement||doc;var q=Ext.DomQuery;var recordType=this.recordType,fields=recordType.prototype.fields;var sid=this.meta.idPath||this.meta.id;var totalRecords=0,success=true;if(this.meta.totalRecords){totalRecords=q.selectNumber(this.meta.totalRecords,root,0);}
 if(this.meta.success){var sv=q.selectValue(this.meta.success,root,true);success=sv!==false&&sv!=='false';}
 var records=[];var ns=q.select(this.meta.record,root);for(var i=0,len=ns.length;i<len;i++){var n=ns[i];var values={};var id=sid?q.selectValue(sid,n):undefined;for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var v=q.selectValue(f.mapping||f.name,n,f.defaultValue);v=f.convert(v,n);values[f.name]=v;}
 var record=new recordType(values,id);record.node=n;records[records.length]=record;}
 return{success:success,records:records,totalRecords:totalRecords||records.length};}});
 
-Ext.data.ArrayReader=Ext.extend(Ext.data.JsonReader,{readRecords:function(o){var sid=this.meta?this.meta.id:null;var recordType=this.recordType,fields=recordType.prototype.fields;var records=[];var root=o;for(var i=0;i<root.length;i++){var n=root[i];var values={};var id=((sid||sid===0)&&n[sid]!==undefined&&n[sid]!==""?n[sid]:null);for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var k=f.mapping!==undefined&&f.mapping!==null?f.mapping:j;var v=n[k]!==undefined?n[k]:f.defaultValue;v=f.convert(v,n);values[f.name]=v;}
+Ext.data.ArrayReader=Ext.extend(Ext.data.JsonReader,{readRecords:function(o){this.arrayData=o;var s=this.meta;var sid=s?(s.idIndex||s.id):null;var recordType=this.recordType,fields=recordType.prototype.fields;var records=[];if(!this.getRoot){this.getRoot=s.root?this.getJsonAccessor(s.root):function(p){return p;};if(s.totalProperty){this.getTotal=this.getJsonAccessor(s.totalProperty);}}
+var root=this.getRoot(o);for(var i=0;i<root.length;i++){var n=root[i];var values={};var id=((sid||sid===0)&&n[sid]!==undefined&&n[sid]!==""?n[sid]:null);for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var k=f.mapping!==undefined&&f.mapping!==null?f.mapping:j;var v=n[k]!==undefined?n[k]:f.defaultValue;v=f.convert(v,n);values[f.name]=v;}
 var record=new recordType(values,id);record.json=n;records[records.length]=record;}
-return{records:records,totalRecords:records.length};}});
+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;}
@@ -964,11 +965,9 @@
 this.fireEvent('datachanged',this);}},applySort:function(){Ext.data.GroupingStore.superclass.applySort.call(this);if(!this.groupOnSort&&!this.remoteGroup){var gs=this.getGroupState();if(gs&&gs!=this.sortInfo.field){this.sortData(this.groupField);}}},applyGrouping:function(alwaysFireChange){if(this.groupField!==false){this.groupBy(this.groupField,true);return true;}else{if(alwaysFireChange===true){this.fireEvent('datachanged',this);}
 return false;}},getGroupState:function(){return this.groupOnSort&&this.groupField!==false?(this.sortInfo?this.sortInfo.field:undefined):this.groupField;}});
 
-Ext.ComponentMgr=function(){var all=new Ext.util.MixedCollection();var types={};var ptypes={};return{register:function(c){all.add(c);},unregister:function(c){all.remove(c);},get:function(id){return all.get(id);},onAvailable:function(id,fn,scope){all.on("add",function(index,o){if(o.id==id){fn.call(scope||o,o);all.un("add",fn,scope);}});},all:all,registerType:function(xtype,cls){types[xtype]=cls;cls.xtype=xtype;},create:function(config,defaultType){return new types[config.xtype||defaultType](config);},registerPlugin:function(ptype,cls){ptypes[ptype]=cls;cls.ptype=ptype;},createPlugin:function(config,defaultType){return new ptypes[config.ptype||defaultType](config);}};}();Ext.reg=Ext.ComponentMgr.registerType;Ext.preg=Ext.ComponentMgr.registerPlugin;
-
 Ext.Component=function(config){config=config||{};if(config.initialConfig){if(config.isAction){this.baseAction=config;}
 config=config.initialConfig;}else if(config.tagName||config.dom||typeof config=="string"){config={applyTo:config,id:config.id||config};}
-this.initialConfig=config;Ext.apply(this,config);this.addEvents('disable','enable','beforeshow','show','beforehide','hide','beforerender','render','beforedestroy','destroy','beforestaterestore','staterestore','beforestatesave','statesave');this.getId();Ext.ComponentMgr.register(this);Ext.Component.superclass.constructor.call(this);if(this.baseAction){this.baseAction.addComponent(this);}
+this.initialConfig=config;Ext.apply(this,config);this.addEvents('disable','enable','beforeshow','show','beforehide','hide','beforerender','render','afterrender','beforedestroy','destroy','beforestaterestore','staterestore','beforestatesave','statesave');this.getId();Ext.ComponentMgr.register(this);Ext.Component.superclass.constructor.call(this);if(this.baseAction){this.baseAction.addComponent(this);}
 this.initComponent();if(this.plugins){if(Ext.isArray(this.plugins)){for(var i=0,len=this.plugins.length;i<len;i++){this.plugins[i]=this.initPlugin(this.plugins[i]);}}else{this.plugins=this.initPlugin(this.plugins);}}
 if(this.stateful!==false){this.initState(config);}
 if(this.applyTo){this.applyToMarkup(this.applyTo);delete this.applyTo;}else if(this.renderTo){this.render(this.renderTo);delete this.renderTo;}};Ext.Component.AUTO_ID=1000;Ext.extend(Ext.Component,Ext.util.Observable,{disabledClass:"x-item-disabled",allowDomMove:true,autoShow:false,hideMode:'display',hideParent:false,hidden:false,disabled:false,rendered:false,ctype:"Ext.Component",actionMode:"el",getActionEl:function(){return this[this.actionMode];},initPlugin:function(p){if(p.ptype&&typeof p.init!='function'){p=Ext.ComponentMgr.createPlugin(p);}else if(typeof p=='string'){p=Ext.ComponentMgr.createPlugin({ptype:p});}
@@ -980,8 +979,11 @@
 if(this.style){this.el.applyStyles(this.style);delete this.style;}
 this.fireEvent("render",this);this.afterRender(this.container);if(this.hidden){this.hide();}
 if(this.disabled){this.disable();}
-if(this.stateful!==false){this.initStateEvents();}}
-return this;},initState:function(config){if(Ext.state.Manager){var state=Ext.state.Manager.get(this.stateId||this.id);if(state){if(this.fireEvent('beforestaterestore',this,state)!==false){this.applyState(state);this.fireEvent('staterestore',this,state);}}}},initStateEvents:function(){if(this.stateEvents){for(var i=0,e;e=this.stateEvents[i];i++){this.on(e,this.saveState,this,{delay:100});}}},applyState:function(state,config){if(state){Ext.apply(this,state);}},getState:function(){return null;},saveState:function(){if(Ext.state.Manager){var state=this.getState();if(this.fireEvent('beforestatesave',this,state)!==false){Ext.state.Manager.set(this.stateId||this.id,state);this.fireEvent('statesave',this,state);}}},applyToMarkup:function(el){this.allowDomMove=false;this.el=Ext.get(el);this.render(this.el.dom.parentNode);},addClass:function(cls){if(this.el){this.el.addClass(cls);}else{this.cls=this.cls?this.cls+' '+cls:cls;}},removeClass:function(cls){if(this.el){this.el.removeClass(cls);}else if(this.cls){this.cls=this.cls.split(' ').remove(cls).join(' ');}},onRender:function(ct,position){if(this.autoEl){if(typeof this.autoEl=='string'){this.el=document.createElement(this.autoEl);}else{var div=document.createElement('div');Ext.DomHelper.overwrite(div,this.autoEl);this.el=div.firstChild;}
+if(this.stateful!==false){this.initStateEvents();}
+this.initRef();this.fireEvent("afterrender",this);}
+return this;},initRef:function(){if(this.ref){var levels=this.ref.split('/');var last=levels.length,i=0;var t=this;while(i<last){if(t.ownerCt){t=t.ownerCt;}
+i++;}
+t[levels[--i]]=this;}},initState:function(config){if(Ext.state.Manager){var id=this.getStateId();if(id){var state=Ext.state.Manager.get(id);if(state){if(this.fireEvent('beforestaterestore',this,state)!==false){this.applyState(state);this.fireEvent('staterestore',this,state);}}}}},getStateId:function(){return this.stateId||((this.id.indexOf('ext-comp-')==0||this.id.indexOf('ext-gen')==0)?null:this.id);},initStateEvents:function(){if(this.stateEvents){for(var i=0,e;e=this.stateEvents[i];i++){this.on(e,this.saveState,this,{delay:100});}}},applyState:function(state,config){if(state){Ext.apply(this,state);}},getState:function(){return null;},saveState:function(){if(Ext.state.Manager){var id=this.getStateId();if(id){var state=this.getState();if(this.fireEvent('beforestatesave',this,state)!==false){Ext.state.Manager.set(id,state);this.fireEvent('statesave',this,state);}}}},applyToMarkup:function(el){this.allowDomMove=false;this.el=Ext.get(el);this.render(this.el.dom.parentNode);},addClass:function(cls){if(this.el){this.el.addClass(cls);}else{this.cls=this.cls?this.cls+' '+cls:cls;}},removeClass:function(cls){if(this.el){this.el.removeClass(cls);}else if(this.cls){this.cls=this.cls.split(' ').remove(cls).join(' ');}},onRender:function(ct,position){if(this.autoEl){if(typeof this.autoEl=='string'){this.el=document.createElement(this.autoEl);}else{var div=document.createElement('div');Ext.DomHelper.overwrite(div,this.autoEl);this.el=div.firstChild;}
 if(!this.el.id){this.el.id=this.getId();}}
 if(this.el){this.el=Ext.get(this.el);if(this.allowDomMove!==false){ct.dom.insertBefore(this.el.dom,position);}
 if(this.overCls){this.el.addClassOnOver(this.overCls);}}},getAutoCreate:function(){var cfg=typeof this.autoCreate=="object"?this.autoCreate:Ext.apply({},this.defaultAutoCreate);if(this.id&&!cfg.id){cfg.id=this.id;}
@@ -1002,9 +1004,9 @@
 return tc.xtypes;},findParentBy:function(fn){for(var p=this.ownerCt;(p!=null)&&!fn(p,this);p=p.ownerCt);return p||null;},findParentByType:function(xtype){return typeof xtype=='function'?this.findParentBy(function(p){return p.constructor===xtype;}):this.findParentBy(function(p){return p.constructor.xtype===xtype;});},getDomPositionEl:function(){return this.getPositionEl?this.getPositionEl():this.getEl();},mon:function(item,ename,fn,scope,opt){if(!this.mons){this.mons=[];this.on('beforedestroy',function(){for(var i=0,len=this.mons.length;i<len;i++){var m=this.mons[i];m.item.un(m.ename,m.fn,m.scope);}},this);}
 this.mons.push({item:item,ename:ename,fn:fn,scope:scope});item.on(ename,fn,scope,opt);},nextSibling:function(){if(this.ownerCt){var index=this.ownerCt.items.indexOf(this);if(index!=-1&&index+1<this.ownerCt.items.getCount()){return this.ownerCt.items.itemAt(index+1);}}
 return null;},previousSibling:function(){if(this.ownerCt){var index=this.ownerCt.items.indexOf(this);if(index>0){return this.ownerCt.items.itemAt(index-1);}}
-return null;}});Ext.reg('component',Ext.Component);
+return null;},getBubbleTarget:function(){return this.ownerCt;}});Ext.reg('component',Ext.Component);
 
-Ext.Action=function(config){this.initialConfig=config;this.items=[];}
+Ext.Action=function(config){this.initialConfig=config;this.itemId=config.itemId=(config.itemId||config.id||Ext.id());this.items=[];}
 Ext.Action.prototype={isAction:true,setText:function(text){this.initialConfig.text=text;this.callEach('setText',[text]);},getText:function(){return this.initialConfig.text;},setIconClass:function(cls){this.initialConfig.iconCls=cls;this.callEach('setIconClass',[cls]);},getIconClass:function(){return this.initialConfig.iconCls;},setDisabled:function(v){this.initialConfig.disabled=v;this.callEach('setDisabled',[v]);},enable:function(){this.setDisabled(false);},disable:function(){this.setDisabled(true);},isDisabled:function(){return this.initialConfig.disabled;},setHidden:function(v){this.initialConfig.hidden=v;this.callEach('setVisible',[!v]);},show:function(){this.setHidden(false);},hide:function(){this.setHidden(true);},isHidden:function(){return this.initialConfig.hidden;},setHandler:function(fn,scope){this.initialConfig.handler=fn;this.initialConfig.scope=scope;this.callEach('setHandler',[fn,scope]);},each:function(fn,scope){Ext.each(this.items,fn,scope);},callEach:function(fnName,args){var cs=this.items;for(var i=0,len=cs.length;i<len;i++){cs[i][fnName].apply(cs[i],args);}},addComponent:function(comp){this.items.push(comp);comp.on('destroy',this.removeComponent,this);},removeComponent:function(comp){this.items.remove(comp);},execute:function(){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);}
@@ -1063,13 +1065,13 @@
 
 Ext.SplitBar=function(dragElement,resizingElement,orientation,placement,existingProxy){this.el=Ext.get(dragElement,true);this.el.dom.unselectable="on";this.resizingEl=Ext.get(resizingElement,true);this.orientation=orientation||Ext.SplitBar.HORIZONTAL;this.minSize=0;this.maxSize=2000;this.animate=false;this.useShim=false;this.shim=null;if(!existingProxy){this.proxy=Ext.SplitBar.createProxy(this.orientation);}else{this.proxy=Ext.get(existingProxy).dom;}
 this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{dragElId:this.proxy.id});this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);this.dragSpecs={};this.adapter=new Ext.SplitBar.BasicLayoutAdapter();this.adapter.init(this);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.placement=placement||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);this.el.addClass("x-splitbar-h");}else{this.placement=placement||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);this.el.addClass("x-splitbar-v");}
-this.addEvents("resize","moved","beforeresize","beforeapply");Ext.SplitBar.superclass.constructor.call(this);};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(x,y){this.fireEvent("beforeresize",this);this.overlay=Ext.DomHelper.append(document.body,{cls:"x-drag-overlay",html:"&#160;"},true);this.overlay.unselectable();this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var size=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();;this.activeMaxSize=this.getMaximumSize();;var c1=size-this.activeMinSize;var c2=Math.max(this.activeMaxSize-size,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?c1:c2,this.placement==Ext.SplitBar.LEFT?c2:c1);this.dd.setYConstraint(0,0);}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?c1:c2,this.placement==Ext.SplitBar.TOP?c2:c1);}
-this.dragSpecs.startSize=size;this.dragSpecs.startPoint=[x,y];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,x,y);},onEndProxyDrag:function(e){Ext.get(this.proxy).setDisplayed(false);var endPoint=Ext.lib.Event.getXY(e);if(this.overlay){this.overlay.remove();delete this.overlay;}
+this.addEvents("resize","moved","beforeresize","beforeapply");Ext.SplitBar.superclass.constructor.call(this);};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(x,y){this.fireEvent("beforeresize",this);this.overlay=Ext.DomHelper.append(document.body,{cls:"x-drag-overlay",html:"&#160;"},true);this.overlay.unselectable();this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var size=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();this.activeMaxSize=this.getMaximumSize();var c1=size-this.activeMinSize;var c2=Math.max(this.activeMaxSize-size,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?c1:c2,this.placement==Ext.SplitBar.LEFT?c2:c1);this.dd.setYConstraint(0,0);}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?c1:c2,this.placement==Ext.SplitBar.TOP?c2:c1);}
+this.dragSpecs.startSize=size;this.dragSpecs.startPoint=[x,y];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,x,y);},onEndProxyDrag:function(e){Ext.get(this.proxy).setDisplayed(false);var endPoint=Ext.lib.Event.getXY(e);if(this.overlay){Ext.destroy(this.overlay);delete this.overlay;}
 var newSize;if(this.orientation==Ext.SplitBar.HORIZONTAL){newSize=this.dragSpecs.startSize+
 (this.placement==Ext.SplitBar.LEFT?endPoint[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-endPoint[0]);}else{newSize=this.dragSpecs.startSize+
 (this.placement==Ext.SplitBar.TOP?endPoint[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-endPoint[1]);}
 newSize=Math.min(Math.max(newSize,this.activeMinSize),this.activeMaxSize);if(newSize!=this.dragSpecs.startSize){if(this.fireEvent('beforeapply',this,newSize)!==false){this.adapter.setElementSize(this,newSize);this.fireEvent("moved",this,newSize);this.fireEvent("resize",this,newSize);}}},getAdapter:function(){return this.adapter;},setAdapter:function(adapter){this.adapter=adapter;this.adapter.init(this);},getMinimumSize:function(){return this.minSize;},setMinimumSize:function(minSize){this.minSize=minSize;},getMaximumSize:function(){return this.maxSize;},setMaximumSize:function(maxSize){this.maxSize=maxSize;},setCurrentSize:function(size){var oldAnimate=this.animate;this.animate=false;this.adapter.setElementSize(this,size);this.animate=oldAnimate;},destroy:function(removeEl){if(this.shim){this.shim.remove();}
-this.dd.unreg();Ext.removeNode(this.proxy);if(removeEl){this.el.remove();}}});Ext.SplitBar.createProxy=function(dir){var proxy=new Ext.Element(document.createElement("div"));proxy.unselectable();var cls='x-splitbar-proxy';proxy.addClass(cls+' '+(dir==Ext.SplitBar.HORIZONTAL?cls+'-h':cls+'-v'));document.body.appendChild(proxy.dom);return proxy.dom;};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(s){},getElementSize:function(s){if(s.orientation==Ext.SplitBar.HORIZONTAL){return s.resizingEl.getWidth();}else{return s.resizingEl.getHeight();}},setElementSize:function(s,newSize,onComplete){if(s.orientation==Ext.SplitBar.HORIZONTAL){if(!s.animate){s.resizingEl.setWidth(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setWidth(newSize,true,.1,onComplete,'easeOut');}}else{if(!s.animate){s.resizingEl.setHeight(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setHeight(newSize,true,.1,onComplete,'easeOut');}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(container){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(container);};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(s){this.basic.init(s);},getElementSize:function(s){return this.basic.getElementSize(s);},setElementSize:function(s,newSize,onComplete){this.basic.setElementSize(s,newSize,this.moveSplitter.createDelegate(this,[s]));},moveSplitter:function(s){var yes=Ext.SplitBar;switch(s.placement){case yes.LEFT:s.el.setX(s.resizingEl.getRight());break;case yes.RIGHT:s.el.setStyle("right",(this.container.getWidth()-s.resizingEl.getLeft())+"px");break;case yes.TOP:s.el.setY(s.resizingEl.getBottom());break;case yes.BOTTOM:s.el.setY(s.resizingEl.getTop()-s.el.getHeight());break;}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;
+this.dd.unreg();Ext.destroy(Ext.get(this.proxy));if(removeEl){this.el.remove();}}});Ext.SplitBar.createProxy=function(dir){var proxy=new Ext.Element(document.createElement("div"));proxy.unselectable();var cls='x-splitbar-proxy';proxy.addClass(cls+' '+(dir==Ext.SplitBar.HORIZONTAL?cls+'-h':cls+'-v'));document.body.appendChild(proxy.dom);return proxy.dom;};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(s){},getElementSize:function(s){if(s.orientation==Ext.SplitBar.HORIZONTAL){return s.resizingEl.getWidth();}else{return s.resizingEl.getHeight();}},setElementSize:function(s,newSize,onComplete){if(s.orientation==Ext.SplitBar.HORIZONTAL){if(!s.animate){s.resizingEl.setWidth(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setWidth(newSize,true,.1,onComplete,'easeOut');}}else{if(!s.animate){s.resizingEl.setHeight(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setHeight(newSize,true,.1,onComplete,'easeOut');}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(container){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(container);};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(s){this.basic.init(s);},getElementSize:function(s){return this.basic.getElementSize(s);},setElementSize:function(s,newSize,onComplete){this.basic.setElementSize(s,newSize,this.moveSplitter.createDelegate(this,[s]));},moveSplitter:function(s){var yes=Ext.SplitBar;switch(s.placement){case yes.LEFT:s.el.setX(s.resizingEl.getRight());break;case yes.RIGHT:s.el.setStyle("right",(this.container.getWidth()-s.resizingEl.getLeft())+"px");break;case yes.TOP:s.el.setY(s.resizingEl.getBottom());break;case yes.BOTTOM:s.el.setY(s.resizingEl.getTop()-s.el.getHeight());break;}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;
 
 Ext.Container=Ext.extend(Ext.BoxComponent,{autoDestroy:true,defaultType:'panel',initComponent:function(){Ext.Container.superclass.initComponent.call(this);this.addEvents('afterlayout','beforeadd','beforeremove','add','remove');var items=this.items;if(items){delete this.items;if(Ext.isArray(items)){this.add.apply(this,items);}else{this.add(items);}}},initItems:function(){if(!this.items){this.items=new Ext.util.MixedCollection(false,this.getComponentId);this.getLayout();}},setLayout:function(layout){if(this.layout&&this.layout!=layout){this.layout.setContainer(null);}
 this.initItems();this.layout=layout;layout.setContainer(this);},render:function(){Ext.Container.superclass.render.apply(this,arguments);if(this.layout){if(typeof this.layout=='object'&&!this.layout.layout){this.layoutConfig=this.layout;this.layout=this.layoutConfig.type;}
@@ -1079,20 +1081,20 @@
 if(this.monitorResize===true){Ext.EventManager.onWindowResize(this.doLayout,this,[false]);}},getLayoutTarget:function(){return this.el;},getComponentId:function(comp){return comp.itemId||comp.id;},add:function(comp){if(!this.items){this.initItems();}
 var a=arguments,len=a.length;if(len>1){for(var i=0;i<len;i++){Ext.Container.prototype.add.call(this,a[i]);}
 return;}
-var c=this.lookupComponent(this.applyDefaults(comp));var pos=this.items.length;if(this.fireEvent('beforeadd',this,c,pos)!==false&&this.onBeforeAdd(c)!==false){this.items.add(c);c.ownerCt=this;this.fireEvent('add',this,c,pos);}
+var c=this.lookupComponent(this.applyDefaults(comp));var pos=this.items.length;if(this.fireEvent('beforeadd',this,c,pos)!==false&&this.onBeforeAdd(c)!==false){this.items.add(c);c.ownerCt=this;this.fireEvent(true,'add',this,c,pos);}
 return c;},insert:function(index,comp){if(!this.items){this.initItems();}
 var a=arguments,len=a.length;if(len>2){for(var i=len-1;i>=1;--i){this.insert(index,a[i]);}
 return;}
 var c=this.lookupComponent(this.applyDefaults(comp));if(c.ownerCt==this&&this.items.indexOf(c)<index){--index;}
-if(this.fireEvent('beforeadd',this,c,index)!==false&&this.onBeforeAdd(c)!==false){this.items.insert(index,c);c.ownerCt=this;this.fireEvent('add',this,c,index);}
+if(this.fireEvent('beforeadd',this,c,index)!==false&&this.onBeforeAdd(c)!==false){this.items.insert(index,c);c.ownerCt=this;this.fireEvent(true,'add',this,c,index);}
 return c;},applyDefaults:function(c){if(this.defaults){if(typeof c=='string'){c=Ext.ComponentMgr.get(c);Ext.apply(c,this.defaults);}else if(!c.events){Ext.applyIf(c,this.defaults);}else{Ext.apply(c,this.defaults);}}
 return c;},onBeforeAdd:function(item){if(item.ownerCt){item.ownerCt.remove(item,false);}
 if(this.hideBorders===true){item.border=(item.border===true);}},remove:function(comp,autoDestroy){var c=this.getComponent(comp);if(c&&this.fireEvent('beforeremove',this,c)!==false){this.items.remove(c);delete c.ownerCt;if(autoDestroy===true||(autoDestroy!==false&&this.autoDestroy)){c.destroy();}
 if(this.layout&&this.layout.activeItem==c){delete this.layout.activeItem;}
-this.fireEvent('remove',this,c);}
+this.fireEvent(true,'remove',this,c);}
 return c;},getComponent:function(comp){if(typeof comp=='object'){return comp;}
 return this.items.get(comp);},lookupComponent:function(comp){if(typeof comp=='string'){return Ext.ComponentMgr.get(comp);}else if(!comp.events){return this.createComponent(comp);}
-return comp;},createComponent:function(config){return Ext.ComponentMgr.create(config,this.defaultType);},doLayout:function(shallow){if(this.rendered&&this.layout){this.layout.layout();}
+return comp;},createComponent:function(config){return Ext.create(config,this.defaultType);},doLayout:function(shallow){if(this.rendered&&this.layout){this.layout.layout();}
 if(shallow!==false&&this.items){var cs=this.items.items;for(var i=0,len=cs.length;i<len;i++){var c=cs[i];if(c.doLayout){c.doLayout();}}}},getLayout:function(){if(!this.layout){var layout=new Ext.layout.ContainerLayout(this.layoutConfig);this.setLayout(layout);}
 return this.layout;},beforeDestroy:function(){if(this.items){Ext.destroy.apply(Ext,this.items.items);}
 if(this.monitorResize){Ext.EventManager.removeResizeListener(this.doLayout,this);}
@@ -1101,7 +1103,7 @@
 p=p.ownerCt;}},cascade:function(fn,scope,args){if(fn.apply(scope||this,args||[this])!==false){if(this.items){var cs=this.items.items;for(var i=0,len=cs.length;i<len;i++){if(cs[i].cascade){cs[i].cascade(fn,scope,args);}else{fn.apply(scope||cs[i],args||[cs[i]]);}}}}},findById:function(id){var m,ct=this;this.cascade(function(c){if(ct!=c&&c.id===id){m=c;return false;}});return m||null;},findByType:function(xtype){return typeof xtype=='function'?this.findBy(function(c){return c.constructor===xtype;}):this.findBy(function(c){return c.constructor.xtype===xtype;});},find:function(prop,value){return this.findBy(function(c){return c[prop]===value;});},findBy:function(fn,scope){var m=[],ct=this;this.cascade(function(c){if(ct!=c&&fn.call(scope||c,c,ct)===true){m.push(c);}});return m;},get:function(key){return this.items.get(key);}});Ext.Container.LAYOUTS={};Ext.reg('container',Ext.Container);
 
 Ext.layout.ContainerLayout=function(config){Ext.apply(this,config);};Ext.layout.ContainerLayout.prototype={monitorResize:false,activeItem:null,layout:function(){var target=this.container.getLayoutTarget();this.onLayout(this.container,target);this.container.fireEvent('afterlayout',this.container,this);},onLayout:function(ct,target){this.renderAll(ct,target);},isValidParent:function(c,target){return target&&c.getDomPositionEl().dom.parentNode==(target.dom||target);},renderAll:function(ct,target){var items=ct.items.items;for(var i=0,len=items.length;i<len;i++){var c=items[i];if(c&&(!c.rendered||!this.isValidParent(c,target))){this.renderItem(c,i,target);}}},renderItem:function(c,position,target){if(c&&!c.rendered){c.render(target,position);if(this.extraCls){var t=c.getPositionEl?c.getPositionEl():c;t.addClass(this.extraCls);}
-if(this.renderHidden&&c!=this.activeItem){c.hide();}}else if(c&&!this.isValidParent(c,target)){if(this.extraCls){c.addClass(this.extraCls);}
+if(this.renderHidden&&c!=this.activeItem){c.hide();}}else if(c&&!this.isValidParent(c,target)){if(this.extraCls){var t=c.getPositionEl?c.getPositionEl():c;t.addClass(this.extraCls);}
 if(typeof position=='number'){position=target.dom.childNodes[position];}
 target.dom.insertBefore(c.getDomPositionEl().dom,position||null);c.container=target;if(this.renderHidden&&c!=this.activeItem){c.hide();}}},onResize:function(){if(this.container.collapsed){return;}
 var b=this.container.bufferResize;if(b){if(!this.resizeTask){this.resizeTask=new Ext.util.DelayedTask(this.layout,this);this.resizeBuffer=typeof b=='number'?b:100;}
@@ -1135,27 +1137,28 @@
 this.rendered=true;}
 var size=target.getViewSize();if(size.width<20||size.height<20){if(collapsed){this.restoreCollapsed=collapsed;}
 return;}else if(this.restoreCollapsed){collapsed=this.restoreCollapsed;delete this.restoreCollapsed;}
-var w=size.width,h=size.height;var centerW=w,centerH=h,centerY=0,centerX=0;var n=this.north,s=this.south,west=this.west,e=this.east,c=this.center;if(!c){throw'No center region defined in BorderLayout '+ct.id;}
+var w=size.width,h=size.height;var centerW=w,centerH=h,centerY=0,centerX=0;var n=this.north,s=this.south,west=this.west,e=this.east,c=this.center;if(!c&&Ext.layout.BorderLayout.WARN!==false){throw'No center region defined in BorderLayout '+ct.id;}
 if(n&&n.isVisible()){var b=n.getSize();var m=n.getMargins();b.width=w-(m.left+m.right);b.x=m.left;b.y=m.top;centerY=b.height+b.y+m.bottom;centerH-=centerY;n.applyLayout(b);}
 if(s&&s.isVisible()){var b=s.getSize();var m=s.getMargins();b.width=w-(m.left+m.right);b.x=m.left;var totalHeight=(b.height+m.top+m.bottom);b.y=h-totalHeight+m.top;centerH-=totalHeight;s.applyLayout(b);}
 if(west&&west.isVisible()){var b=west.getSize();var m=west.getMargins();b.height=centerH-(m.top+m.bottom);b.x=m.left;b.y=centerY+m.top;var totalWidth=(b.width+m.left+m.right);centerX+=totalWidth;centerW-=totalWidth;west.applyLayout(b);}
 if(e&&e.isVisible()){var b=e.getSize();var m=e.getMargins();b.height=centerH-(m.top+m.bottom);var totalWidth=(b.width+m.left+m.right);b.x=w-totalWidth+m.left;b.y=centerY+m.top;centerW-=totalWidth;e.applyLayout(b);}
-var m=c.getMargins();var centerBox={x:centerX+m.left,y:centerY+m.top,width:centerW-(m.left+m.right),height:centerH-(m.top+m.bottom)};c.applyLayout(centerBox);if(collapsed){for(var i=0,len=collapsed.length;i<len;i++){collapsed[i].collapse(false);}}
-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&&region.split){region.split.destroy(true);}}
+if(c){var m=c.getMargins();var centerBox={x:centerX+m.left,y:centerY+m.top,width:centerW-(m.left+m.right),height:centerH-(m.top+m.bottom)};c.applyLayout(centerBox);}
+if(collapsed){for(var i=0,len=collapsed.length;i<len;i++){collapsed[i].collapse(false);}}
+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);}
@@ -1166,25 +1169,25 @@
 if(this.collapsible){this.splitEl.on("dblclick",this.onCollapseClick,this);}},getSize:function(){if(this.isCollapsed){return this.collapsedEl.getSize();}
 var s=this.panel.getSize();if(this.position=='north'||this.position=='south'){s.height+=this.splitEl.dom.offsetHeight;}else{s.width+=this.splitEl.dom.offsetWidth;}
 return s;},getHMaxSize:function(){var cmax=this.maxSize||10000;var center=this.layout.center;return Math.min(cmax,(this.el.getWidth()+center.el.getWidth())-center.getMinWidth());},getVMaxSize:function(){var cmax=this.maxSize||10000;var center=this.layout.center;return Math.min(cmax,(this.el.getHeight()+center.el.getHeight())-center.getMinHeight());},onSplitMove:function(split,newSize){var s=this.panel.getSize();this.lastSplitSize=newSize;if(this.position=='north'||this.position=='south'){this.panel.setSize(s.width,newSize);this.state.height=newSize;}else{this.panel.setSize(newSize,s.height);this.state.width=newSize;}
-this.layout.layout();this.panel.saveState();return false;},getSplitBar:function(){return this.split;}});Ext.Container.LAYOUTS['border']=Ext.layout.BorderLayout;
+this.layout.layout();this.panel.saveState();return false;},getSplitBar:function(){return this.split;},destroy:function(){Ext.destroy(this.miniSplitEl,this.split,this.splitEl);}});Ext.Container.LAYOUTS['border']=Ext.layout.BorderLayout;
 
 Ext.layout.FormLayout=Ext.extend(Ext.layout.AnchorLayout,{labelSeparator:':',getAnchorViewSize:function(ct,target){return(ct.body||ct.el).getStyleSize();},setContainer:function(ct){Ext.layout.FormLayout.superclass.setContainer.call(this,ct);if(ct.labelAlign){ct.addClass('x-form-label-'+ct.labelAlign);}
 if(ct.hideLabels){this.labelStyle="display:none";this.elementStyle="padding-left:0;";this.labelAdjust=0;}else{this.labelSeparator=ct.labelSeparator||this.labelSeparator;ct.labelWidth=ct.labelWidth||100;if(typeof ct.labelWidth=='number'){var pad=(typeof ct.labelPad=='number'?ct.labelPad:5);this.labelAdjust=ct.labelWidth+pad;this.labelStyle="width:"+ct.labelWidth+"px;";this.elementStyle="padding-left:"+(ct.labelWidth+pad)+'px';}
 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;}
 if(this.titleCollapse){c.titleCollapse=true;}
 if(this.hideCollapseTool){c.hideCollapseTool=true;}
 if(this.collapseFirst!==undefined){c.collapseFirst=this.collapseFirst;}
-if(!this.activeItem&&!c.collapsed){this.activeItem=c;}else if(this.activeItem){c.collapsed=true;}
+if(!this.activeItem&&!c.collapsed){this.activeItem=c;}else if(this.activeItem&&this.activeItem!=c){c.collapsed=true;}
 Ext.layout.Accordion.superclass.renderItem.apply(this,arguments);c.header.addClass('x-accordion-hd');c.on('beforeexpand',this.beforeExpand,this);},beforeExpand:function(p,anim){var ai=this.activeItem;if(ai){if(this.sequence){delete this.activeItem;if(!ai.collapsed){ai.collapse({callback:function(){p.expand(anim||true);},scope:this});return false;}}else{ai.collapse(this.animate);}}
 this.activeItem=p;if(this.activeOnTop){p.el.dom.parentNode.insertBefore(p.el.dom,p.el.dom.parentNode.firstChild);}
 this.layout();},setItemSize:function(item,size){if(this.fill&&item){var items=this.container.items.items;var hh=0;for(var i=0,len=items.length;i<len;i++){var p=items[i];if(p!=item){hh+=(p.getSize().height-p.bwrap.getHeight());}}
-size.height-=hh;item.setSize(size);}}});Ext.Container.LAYOUTS['accordion']=Ext.layout.Accordion;
+size.height-=hh;item.setSize(size);}},setActiveItem:function(item){item=this.container.getComponent(item);this.activeItem=item;if(item){item.expand();}}});Ext.Container.LAYOUTS['accordion']=Ext.layout.Accordion;
 
 Ext.layout.TableLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:false,tableAttrs:null,setContainer:function(ct){Ext.layout.TableLayout.superclass.setContainer.call(this,ct);this.currentRow=0;this.currentColumn=0;this.cells=[];},onLayout:function(ct,target){var cs=ct.items.items,len=cs.length,c,i;if(!this.table){target.addClass('x-table-layout-ct');this.table=target.createChild(Ext.apply({tag:'table',cls:'x-table-layout',cellspacing:0,cn:{tag:'tbody'}},this.tableAttrs),null,true);this.renderAll(ct,target);}},getRow:function(index){var row=this.table.tBodies[0].childNodes[index];if(!row){row=document.createElement('tr');this.table.tBodies[0].appendChild(row);}
 return row;},getNextCell:function(c){var cell=this.getNextNonSpan(this.currentColumn,this.currentRow);var curCol=this.currentColumn=cell[0],curRow=this.currentRow=cell[1];for(var rowIndex=curRow;rowIndex<curRow+(c.rowspan||1);rowIndex++){if(!this.cells[rowIndex]){this.cells[rowIndex]=[];}
@@ -1196,49 +1199,76 @@
 this.getRow(curRow).appendChild(td);return td;},getNextNonSpan:function(colIndex,rowIndex){var cols=this.columns;while((cols&&colIndex>=cols)||(this.cells[rowIndex]&&this.cells[rowIndex][colIndex])){if(cols&&colIndex>=cols){rowIndex++;colIndex=0;}else{colIndex++;}}
 return[colIndex,rowIndex];},renderItem:function(c,position,target){if(c&&!c.rendered){c.render(this.getNextCell(c));}},isValidParent:function(c,target){return true;}});Ext.Container.LAYOUTS['table']=Ext.layout.TableLayout;
 
-Ext.layout.AbsoluteLayout=Ext.extend(Ext.layout.AnchorLayout,{extraCls:'x-abs-layout-item',isForm:false,setContainer:function(ct){Ext.layout.AbsoluteLayout.superclass.setContainer.call(this,ct);if(ct.isXType('form')){this.isForm=true;}},onLayout:function(ct,target){if(this.isForm){ct.body.position();}else{target.position();}
-Ext.layout.AbsoluteLayout.superclass.onLayout.call(this,ct,target);},getAnchorViewSize:function(ct,target){return this.isForm?ct.body.getStyleSize():Ext.layout.AbsoluteLayout.superclass.getAnchorViewSize.call(this,ct,target);},isValidParent:function(c,target){return this.isForm?true:Ext.layout.AbsoluteLayout.superclass.isValidParent.call(this,c,target);},adjustWidthAnchor:function(value,comp){return value?value-comp.getPosition(true)[0]:value;},adjustHeightAnchor:function(value,comp){return value?value-comp.getPosition(true)[1]:value;}});Ext.Container.LAYOUTS['absolute']=Ext.layout.AbsoluteLayout;
+Ext.layout.AbsoluteLayout=Ext.extend(Ext.layout.AnchorLayout,{extraCls:'x-abs-layout-item',isForm:false,setContainer:function(ct){Ext.layout.AbsoluteLayout.superclass.setContainer.call(this,ct);if(ct.isXType('form')){this.isForm=true;}},onLayout:function(ct,target){if(this.isForm){ct.body.position();this.paddingLeft=ct.body.getPadding('r');this.paddingTop=ct.body.getPadding('t');}else{target.position();this.paddingLeft=target.getPadding('r');this.paddingTop=target.getPadding('t');}
+Ext.layout.AbsoluteLayout.superclass.onLayout.call(this,ct,target);},getAnchorViewSize:function(ct,target){return this.isForm?ct.body.getStyleSize():Ext.layout.AbsoluteLayout.superclass.getAnchorViewSize.call(this,ct,target);},isValidParent:function(c,target){return this.isForm?true:Ext.layout.AbsoluteLayout.superclass.isValidParent.call(this,c,target);},adjustWidthAnchor:function(value,comp){return value?value-comp.getPosition(true)[0]+this.paddingLeft:value;},adjustHeightAnchor:function(value,comp){return value?value-comp.getPosition(true)[1]+this.paddingTop:value;}});Ext.Container.LAYOUTS['absolute']=Ext.layout.AbsoluteLayout;
 
 Ext.Viewport=Ext.extend(Ext.Container,{initComponent:function(){Ext.Viewport.superclass.initComponent.call(this);document.getElementsByTagName('html')[0].className+=' x-viewport';this.el=Ext.getBody();this.el.setHeight=Ext.emptyFn;this.el.setWidth=Ext.emptyFn;this.el.setSize=Ext.emptyFn;this.el.dom.scroll='no';this.allowDomMove=false;this.autoWidth=true;this.autoHeight=true;Ext.EventManager.onWindowResize(this.fireResize,this);this.renderTo=this.el;},fireResize:function(w,h){this.fireEvent('resize',this,w,h,w,h);}});Ext.reg('viewport',Ext.Viewport);
 
-Ext.Panel=Ext.extend(Ext.Container,{baseCls:'x-panel',collapsedCls:'x-panel-collapsed',maskDisabled:true,animCollapse:Ext.enableFx,headerAsText:true,buttonAlign:'right',collapsed:false,collapseFirst:true,minButtonWidth:75,elements:'body',toolTarget:'header',collapseEl:'bwrap',slideAnchor:'t',disabledClass:'',deferHeight:true,expandDefaults:{duration:.25},collapseDefaults:{duration:.25},initComponent:function(){Ext.Panel.superclass.initComponent.call(this);this.addEvents('bodyresize','titlechange','collapse','expand','beforecollapse','beforeexpand','beforeclose','close','activate','deactivate');if(this.tbar){this.elements+=',tbar';if(typeof this.tbar=='object'){this.topToolbar=this.tbar;}
+Ext.layout.Box=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,scrollOffset:0,extraCls:'x-box-item',ctCls:'x-box-layout-ct',innerCls:'x-box-inner',defaultMargins:{left:0,top:0,right:0,bottom:0},padding:'0',pack:'start',isValidParent:function(c,target){return c.getEl().dom.parentNode==this.innerCt.dom;},onLayout:function(ct,target){var cs=ct.items.items,len=cs.length,c,i,last=len-1,cm;if(!this.innerCt){target.addClass(this.ctCls);this.innerCt=target.createChild({cls:this.innerCls});this.padding=this.parseMargins(this.padding);}
+this.renderAll(ct,this.innerCt);},renderItem:function(c){if(typeof c.margins=='string'){c.margins=this.parseMargins(c.margins);}else if(!c.margins){c.margins=this.defaultMargins;}
+Ext.layout.Box.superclass.renderItem.apply(this,arguments);},getTargetSize:function(target){return Ext.isIE&&target.dom!=Ext.getBody().dom?target.getStyleSize():target.getViewSize();}});Ext.layout.VBox=Ext.extend(Ext.layout.Box,{align:'left',pack:'start',onLayout:function(ct,target){Ext.layout.VBox.superclass.onLayout.call(this,ct,target);var cs=ct.items.items,len=cs.length,c,i,last=len-1,cm;var size=this.getTargetSize(target);if(size.width<1&&size.height<1){return;}
+var w=size.width-target.getPadding('lr')-this.scrollOffset,h=size.height-target.getPadding('tb'),l=this.padding.left,t=this.padding.top;var stretchWidth=w-(this.padding.left+this.padding.right);var totalFlex=0;var totalHeight=0;var maxWidth=0;for(i=0;i<len;i++){c=cs[i];cm=c.margins;totalFlex+=c.flex||0;totalHeight+=c.getHeight()+cm.top+cm.bottom;maxWidth=Math.max(maxWidth,c.getWidth()+cm.left+cm.top);}
+var innerCtWidth=maxWidth+this.padding.left+this.padding.right;switch(this.align){case'stretch':this.innerCt.setSize(w,h);break;case'stretchmax':case'left':case'center':this.innerCt.setSize(w=Math.max(w,innerCtWidth),h);break;}
+var extraHeight=h-totalHeight-this.padding.top-this.padding.bottom;var allocated=0;var cw,ch,cl,availableWidth=w-this.padding.left-this.padding.right;if(this.pack=='center'){t+=extraHeight?extraHeight/2:0;}else if(this.pack=='end'){t+=extraHeight;}
+for(i=0;i<len;i++){c=cs[i];cm=c.margins;cw=c.getWidth();ch=c.getHeight();t+=cm.top;if(this.align!='center'){cl=l+cm.left;}else{var diff=availableWidth-(cw+cm.left+cm.right);if(diff==0){cl=l+cm.left;}else{cl=l+cm.left+(diff/2);}}
+c.setPosition(cl,t);if(this.pack=='start'&&c.flex){var ratio=c.flex/totalFlex;var add=Math.floor(extraHeight*ratio);allocated+=add;if(i==last){add+=(extraHeight-allocated);}
+ch+=add;c.setHeight(ch);}
+if(this.align=='stretch'){c.setWidth((stretchWidth-(cm.left+cm.right)).constrain(c.minWidth||0,c.maxWidth||1000000));}else if(this.align=='stretchmax'){c.setWidth((maxWidth-(cm.left+cm.right)).constrain(c.minWidth||0,c.maxWidth||1000000));}
+t+=ch+cm.bottom;}}});Ext.Container.LAYOUTS['vbox']=Ext.layout.VBox;Ext.layout.HBox=Ext.extend(Ext.layout.Box,{align:'top',pack:'start',onLayout:function(ct,target){Ext.layout.HBox.superclass.onLayout.call(this,ct,target);var cs=ct.items.items,len=cs.length,c,i,last=len-1,cm;var size=this.getTargetSize(target);if(size.width<1&&size.height<1){return;}
+var w=size.width-target.getPadding('lr')-this.scrollOffset,h=size.height-target.getPadding('tb'),l=this.padding.left,t=this.padding.top;var stretchHeight=h-(this.padding.top+this.padding.bottom);var totalFlex=0;var totalWidth=0;var maxHeight=0;for(i=0;i<len;i++){c=cs[i];cm=c.margins;totalFlex+=c.flex||0;totalWidth+=c.getWidth()+cm.left+cm.right;maxHeight=Math.max(maxHeight,c.getHeight()+cm.top+cm.bottom);}
+var innerCtHeight=maxHeight+this.padding.top+this.padding.bottom;switch(this.align){case'stretch':this.innerCt.setSize(w,h);break;case'stretchmax':case'top':this.innerCt.setSize(w,innerCtHeight);break;case'middle':this.innerCt.setSize(w,h=Math.max(h,innerCtHeight));break;}
+var extraWidth=w-totalWidth-this.padding.left-this.padding.right;var allocated=0;var cw,ch,ct,availableHeight=h-this.padding.top-this.padding.bottom;if(this.pack=='center'){l+=extraWidth?extraWidth/2:0;}else if(this.pack=='end'){l+=extraWidth;}
+for(i=0;i<len;i++){c=cs[i];cm=c.margins;cw=c.getWidth();ch=c.getHeight();l+=cm.left;if(this.align!='middle'){ct=t+cm.top;}else{var diff=availableHeight-(ch+cm.top+cm.bottom);if(diff==0){ct=t+cm.top;}else{ct=t+cm.top+(diff/2);}}
+c.setPosition(l,ct);if(this.pack=='start'&&c.flex){var ratio=c.flex/totalFlex;var add=Math.floor(extraWidth*ratio);allocated+=add;if(i==last){add+=(extraWidth-allocated);}
+cw+=add;c.setWidth(cw);}
+if(this.align=='stretch'){c.setHeight((stretchHeight-(cm.top+cm.bottom)).constrain(c.minHeight||0,c.maxHeight||1000000));}else if(this.align=='stretchmax'){c.setHeight((maxHeight-(cm.top+cm.bottom)).constrain(c.minHeight||0,c.maxHeight||1000000));}
+l+=cw+cm.right;}}});Ext.Container.LAYOUTS['hbox']=Ext.layout.HBox;
+
+Ext.Panel=Ext.extend(Ext.Container,{baseCls:'x-panel',collapsedCls:'x-panel-collapsed',maskDisabled:true,animCollapse:Ext.enableFx,headerAsText:true,buttonAlign:'right',collapsed:false,collapseFirst:true,minButtonWidth:75,elements:'body',toolTarget:'header',collapseEl:'bwrap',slideAnchor:'t',disabledClass:'',deferHeight:true,expandDefaults:{duration:.25},collapseDefaults:{duration:.25},initComponent:function(){Ext.Panel.superclass.initComponent.call(this);this.addEvents('bodyresize','titlechange','collapse','expand','beforecollapse','beforeexpand','beforeclose','close','activate','deactivate');if(this.unstyled){this.baseCls='x-plain';}
+if(this.tbar){this.elements+=',tbar';if(typeof this.tbar=='object'){this.topToolbar=this.tbar;}
 delete this.tbar;}
 if(this.bbar){this.elements+=',bbar';if(typeof this.bbar=='object'){this.bottomToolbar=this.bbar;}
 delete this.bbar;}
 if(this.header===true){this.elements+=',header';delete this.header;}else if(this.title&&this.header!==false){this.elements+=',header';}
 if(this.footer===true){this.elements+=',footer';delete this.footer;}
-if(this.buttons){var btns=this.buttons;this.buttons=[];for(var i=0,len=btns.length;i<len;i++){if(btns[i].render){btns[i].ownerCt=this;this.buttons.push(btns[i]);}else{this.addButton(btns[i]);}}}
+if(this.buttons){this.elements+=',footer';var btns=this.buttons;this.buttons=[];for(var i=0,len=btns.length;i<len;i++){if(btns[i].render){this.buttons.push(btns[i]);}else if(btns[i].xtype){this.buttons.push(Ext.create(btns[i],'button'));}else{this.addButton(btns[i]);}}}
+if(this.fbar){this.elements+=',footer';if(this.buttonAlign=='right'&&this.initialConfig.buttonAlign===undefined){this.buttonAlign='left';}}
 if(this.autoLoad){this.on('render',this.doAutoLoad,this,{delay:10});}},createElement:function(name,pnode){if(this[name]){pnode.appendChild(this[name].dom);return;}
-if(name==='bwrap'||this.elements.indexOf(name)!=-1){if(this[name+'Cfg']){this[name]=Ext.fly(pnode).createChild(this[name+'Cfg']);}else{var el=document.createElement('div');el.className=this[name+'Cls'];this[name]=Ext.get(pnode.appendChild(el));}}},onRender:function(ct,position){Ext.Panel.superclass.onRender.call(this,ct,position);this.createClasses();if(this.el){this.el.addClass(this.baseCls);this.header=this.el.down('.'+this.headerCls);this.bwrap=this.el.down('.'+this.bwrapCls);var cp=this.bwrap?this.bwrap:this.el;this.tbar=cp.down('.'+this.tbarCls);this.body=cp.down('.'+this.bodyCls);this.bbar=cp.down('.'+this.bbarCls);this.footer=cp.down('.'+this.footerCls);this.fromMarkup=true;}else{this.el=ct.createChild({id:this.id,cls:this.baseCls},position);}
+if(name==='bwrap'||this.elements.indexOf(name)!=-1){if(this[name+'Cfg']){this[name]=Ext.fly(pnode).createChild(this[name+'Cfg']);}else{var el=document.createElement('div');el.className=this[name+'Cls'];this[name]=Ext.get(pnode.appendChild(el));}
+if(this[name+'CssClass']){this[name].addClass(this[name+'CssClass']);}
+if(this[name+'Style']){this[name].applyStyles(this[name+'Style']);}}},onRender:function(ct,position){Ext.Panel.superclass.onRender.call(this,ct,position);this.createClasses();if(this.el){this.el.addClass(this.baseCls);this.header=this.el.down('.'+this.headerCls);this.bwrap=this.el.down('.'+this.bwrapCls);var cp=this.bwrap?this.bwrap:this.el;this.tbar=cp.down('.'+this.tbarCls);this.body=cp.down('.'+this.bodyCls);this.bbar=cp.down('.'+this.bbarCls);this.footer=cp.down('.'+this.footerCls);this.fromMarkup=true;}else{this.el=ct.createChild({id:this.id,cls:this.baseCls},position);}
 var el=this.el,d=el.dom;if(this.cls){this.el.addClass(this.cls);}
 if(this.buttons){this.elements+=',footer';}
 if(this.frame){el.insertHtml('afterBegin',String.format(Ext.Element.boxMarkup,this.baseCls));this.createElement('header',d.firstChild.firstChild.firstChild);this.createElement('bwrap',d);var bw=this.bwrap.dom;var ml=d.childNodes[1],bl=d.childNodes[2];bw.appendChild(ml);bw.appendChild(bl);var mc=bw.firstChild.firstChild.firstChild;this.createElement('tbar',mc);this.createElement('body',mc);this.createElement('bbar',mc);this.createElement('footer',bw.lastChild.firstChild.firstChild);if(!this.footer){this.bwrap.dom.lastChild.className+=' x-panel-nofooter';}}else{this.createElement('header',d);this.createElement('bwrap',d);var bw=this.bwrap.dom;this.createElement('tbar',bw);this.createElement('body',bw);this.createElement('bbar',bw);this.createElement('footer',bw);if(!this.header){this.body.addClass(this.bodyCls+'-noheader');if(this.tbar){this.tbar.addClass(this.tbarCls+'-noheader');}}}
+if(this.padding!==undefined){this.body.setStyle('padding',this.body.addUnits(this.padding));}
 if(this.border===false){this.el.addClass(this.baseCls+'-noborder');this.body.addClass(this.bodyCls+'-noborder');if(this.header){this.header.addClass(this.headerCls+'-noborder');}
 if(this.footer){this.footer.addClass(this.footerCls+'-noborder');}
 if(this.tbar){this.tbar.addClass(this.tbarCls+'-noborder');}
 if(this.bbar){this.bbar.addClass(this.bbarCls+'-noborder');}}
 if(this.bodyBorder===false){this.body.addClass(this.bodyCls+'-noborder');}
-if(this.bodyStyle){this.body.applyStyles(this.bodyStyle);}
 this.bwrap.enableDisplayMode('block');if(this.header){this.header.unselectable();if(this.headerAsText){this.header.dom.innerHTML='<span class="'+this.headerTextCls+'">'+this.header.dom.innerHTML+'</span>';if(this.iconCls){this.setIconClass(this.iconCls);}}}
 if(this.floating){this.makeFloating(this.floating);}
 if(this.collapsible){this.tools=this.tools?this.tools.slice(0):[];if(!this.hideCollapseTool){this.tools[this.collapseFirst?'unshift':'push']({id:'toggle',handler:this.toggleCollapse,scope:this});}
 if(this.titleCollapse&&this.header){this.header.on('click',this.toggleCollapse,this);this.header.setStyle('cursor','pointer');}}
 if(this.tools){var ts=this.tools;this.tools={};this.addTool.apply(this,ts);}else{this.tools={};}
-if(this.buttons&&this.buttons.length>0){var tb=this.footer.createChild({cls:'x-panel-btns-ct',cn:{cls:"x-panel-btns x-panel-btns-"+this.buttonAlign,html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'}},null,true);var tr=tb.getElementsByTagName('tr')[0];for(var i=0,len=this.buttons.length;i<len;i++){var b=this.buttons[i];var td=document.createElement('td');td.className='x-panel-btn-td';b.render(tr.appendChild(td));}}
-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.ComponentMgr.create(this.topToolbar,'toolbar');}
-this.topToolbar.render(this.tbar);this.topToolbar.ownerCt=this;}
-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.ComponentMgr.create(this.bottomToolbar,'toolbar');}
-this.bottomToolbar.render(this.bbar);this.bottomToolbar.ownerCt=this;}},setIconClass:function(cls){var old=this.iconCls;this.iconCls=cls;if(this.rendered&&this.header){if(this.frame){this.header.addClass('x-panel-icon');this.header.replaceClass(old,this.iconCls);}else{var hd=this.header.dom;var img=hd.firstChild&&String(hd.firstChild.tagName).toLowerCase()=='img'?hd.firstChild:null;if(img){Ext.fly(img).replaceClass(old,this.iconCls);}else{Ext.DomHelper.insertBefore(hd.firstChild,{tag:'img',src:Ext.BLANK_IMAGE_URL,cls:'x-panel-inline-icon '+this.iconCls});}}}},makeFloating:function(cfg){this.floating=true;this.el=new Ext.Layer(typeof cfg=='object'?cfg:{shadow:this.shadow!==undefined?this.shadow:'sides',shadowOffset:this.shadowOffset,constrain:false,shim:this.shim===false?false:undefined},this.el);},getTopToolbar:function(){return this.topToolbar;},getBottomToolbar:function(){return this.bottomToolbar;},addButton:function(config,handler,scope){var bc={handler:handler,scope:scope,minWidth:this.minButtonWidth,hideParent:true};if(typeof config=="string"){bc.text=config;}else{Ext.apply(bc,config);}
-var btn=new Ext.Button(bc);btn.ownerCt=this;if(!this.buttons){this.buttons=[];}
+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');this.fbar.enableOverflow=false;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.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');}
+this.bottomToolbar.ownerCt=this;this.bottomToolbar.render(this.bbar);}},setIconClass:function(cls){var old=this.iconCls;this.iconCls=cls;if(this.rendered&&this.header){if(this.frame){this.header.addClass('x-panel-icon');this.header.replaceClass(old,this.iconCls);}else{var hd=this.header.dom;var img=hd.firstChild&&String(hd.firstChild.tagName).toLowerCase()=='img'?hd.firstChild:null;if(img){Ext.fly(img).replaceClass(old,this.iconCls);}else{Ext.DomHelper.insertBefore(hd.firstChild,{tag:'img',src:Ext.BLANK_IMAGE_URL,cls:'x-panel-inline-icon '+this.iconCls});}}}},makeFloating:function(cfg){this.floating=true;this.el=new Ext.Layer(typeof cfg=='object'?cfg:{shadow:this.shadow!==undefined?this.shadow:'sides',shadowOffset:this.shadowOffset,constrain:false,shim:this.shim===false?false:undefined},this.el);},getTopToolbar:function(){return this.topToolbar;},getBottomToolbar:function(){return this.bottomToolbar;},addButton:function(config,handler,scope){var bc={handler:handler,scope:scope,minWidth:this.minButtonWidth,hideParent:true};if(typeof config=="string"){bc.text=config;}else{Ext.apply(bc,config);}
+var btn=new Ext.Button(bc);if(!this.buttons){this.buttons=[];}
 this.buttons.push(btn);return btn;},addTool:function(){if(!this[this.toolTarget]){return;}
 if(!this.toolTemplate){var tt=new Ext.Template('<div class="x-tool x-tool-{id}">&#160;</div>');tt.disableFormats=true;tt.compile();Ext.Panel.prototype.toolTemplate=tt;}
-for(var i=0,a=arguments,len=a.length;i<len;i++){var tc=a[i],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);}
+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.fromMarkup&&this.height===undefined&&!this.autoHeight){this.height=this.el.getHeight();}
-if(this.floating&&!this.hidden&&!this.initHidden){this.el.show();}
+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);}
 this.setAutoScroll();if(this.html){this.body.update(typeof this.html=='object'?Ext.DomHelper.markup(this.html):this.html);delete this.html;}
 if(this.contentEl){var ce=Ext.getDom(this.contentEl);Ext.fly(ce).removeClass(['x-hidden','x-hide-display']);this.body.dom.appendChild(ce);}
@@ -1251,36 +1281,39 @@
 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.buttonAlign!='center'){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');}
-return w;},getFrameHeight:function(){var h=this.el.getFrameWidth('tb');h+=(this.tbar?this.tbar.getHeight():0)+
+this.syncShadow();},adjustBodyHeight:function(h){return h;},adjustBodyWidth:function(w){return w;},onPosition:function(){this.syncShadow();},getFrameWidth:function(){var w=this.el.getFrameWidth('lr')+this.bwrap.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');}
+return w;},getFrameHeight:function(){var h=this.el.getFrameWidth('tb')+this.bwrap.getFrameWidth('tb');h+=(this.tbar?this.tbar.getHeight():0)+
 (this.bbar?this.bbar.getHeight():0);if(this.frame){var hd=this.el.dom.firstChild;var ft=this.bwrap.dom.lastChild;h+=(hd.offsetHeight+ft.offsetHeight);var mc=this.bwrap.dom.firstChild.firstChild.firstChild;h+=Ext.fly(mc).getFrameWidth('tb');}else{h+=(this.header?this.header.getHeight():0)+
 (this.footer?this.footer.getHeight():0);}
 return h;},getInnerWidth:function(){return this.getSize().width-this.getFrameWidth();},getInnerHeight:function(){return this.getSize().height-this.getFrameHeight();},syncShadow:function(){if(this.floating){this.el.sync(true);}},getLayoutTarget:function(){return this.body;},setTitle:function(title,iconCls){this.title=title;if(this.header&&this.headerAsText){this.header.child('span').update(title);}
 if(iconCls){this.setIconClass(iconCls);}
-this.fireEvent('titlechange',this,title);return this;},getUpdater:function(){return this.body.getUpdater();},load:function(){var um=this.body.getUpdater();um.update.apply(um,arguments);return this;},beforeDestroy:function(){Ext.Element.uncache(this.header,this.tbar,this.bbar,this.footer,this.body);if(this.tools){for(var k in this.tools){Ext.destroy(this.tools[k]);}}
+this.fireEvent('titlechange',this,title);return this;},getUpdater:function(){return this.body.getUpdater();},load:function(){var um=this.body.getUpdater();um.update.apply(um,arguments);return this;},beforeDestroy:function(){if(this.header){this.header.removeAllListeners();if(this.headerAsText){Ext.Element.uncache(this.header.child('span'));}}
+Ext.Element.uncache(this.header,this.tbar,this.bbar,this.footer,this.body,this.bwrap);if(this.tools){for(var k in this.tools){Ext.destroy(this.tools[k]);}}
 if(this.buttons){for(var b in this.buttons){Ext.destroy(this.buttons[b]);}}
-Ext.destroy(this.topToolbar,this.bottomToolbar);Ext.Panel.superclass.beforeDestroy.call(this);},createClasses:function(){this.headerCls=this.baseCls+'-header';this.headerTextCls=this.baseCls+'-header-text';this.bwrapCls=this.baseCls+'-bwrap';this.tbarCls=this.baseCls+'-tbar';this.bodyCls=this.baseCls+'-body';this.bbarCls=this.baseCls+'-bbar';this.footerCls=this.baseCls+'-footer';},createGhost:function(cls,useShim,appendTo){var el=document.createElement('div');el.className='x-panel-ghost '+(cls?cls:'');if(this.header){el.appendChild(this.el.dom.firstChild.cloneNode(true));}
+Ext.destroy(this.topToolbar,this.bottomToolbar,this.fbar);Ext.Panel.superclass.beforeDestroy.call(this);},createClasses:function(){this.headerCls=this.baseCls+'-header';this.headerTextCls=this.baseCls+'-header-text';this.bwrapCls=this.baseCls+'-bwrap';this.tbarCls=this.baseCls+'-tbar';this.bodyCls=this.baseCls+'-body';this.bbarCls=this.baseCls+'-bbar';this.footerCls=this.baseCls+'-footer';},createGhost:function(cls,useShim,appendTo){var el=document.createElement('div');el.className='x-panel-ghost '+(cls?cls:'');if(this.header){el.appendChild(this.el.dom.firstChild.cloneNode(true));}
 Ext.fly(el.appendChild(document.createElement('ul'))).setHeight(this.bwrap.getHeight());el.style.width=this.el.dom.offsetWidth+'px';;if(!appendTo){this.container.dom.appendChild(el);}else{Ext.getDom(appendTo).appendChild(el);}
 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();}
-if(this.closable){var km=this.getKeyMap();km.on(27,this.onEsc,this);km.disable();}},initDraggable:function(){this.dd=new Ext.Window.DD(this);},onEsc:function(){this[this.closeAction]();},beforeDestroy:function(){Ext.destroy(this.resizer,this.dd,this.proxy,this.mask);Ext.Window.superclass.beforeDestroy.call(this);},onDestroy:function(){if(this.manager){this.manager.unregister(this);}
+if(this.closable){var km=this.getKeyMap();km.on(27,this.onEsc,this);km.disable();}},initDraggable:function(){this.dd=new Ext.Window.DD(this);},onEsc:function(){this[this.closeAction]();},beforeDestroy:function(){this.hide();if(this.doAnchor){Ext.EventManager.removeResizeListener(this.doAnchor,this);Ext.EventManager.un(window,'scroll',this.doAnchor,this);}
+Ext.destroy(this.focusEl,this.resizer,this.dd,this.proxy,this.mask);Ext.Window.superclass.beforeDestroy.call(this);},onDestroy:function(){if(this.manager){this.manager.unregister(this);}
 Ext.Window.superclass.onDestroy.call(this);},initTools:function(){if(this.minimizable){this.addTool({id:'minimize',handler:this.minimize.createDelegate(this,[])});}
 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;}
@@ -1310,8 +1343,9 @@
 if(this.collapsible){this.tools.toggle.show();}
 this.container.removeClass('x-window-maximized-ct');this.doConstrain();this.fireEvent('restore',this);}},toggleMaximize:function(){this[this.maximized?'restore':'maximize']();},fitContainer:function(){var vs=this.container.getViewSize();this.setSize(vs.width,vs.height);},setZIndex:function(index){if(this.modal){this.mask.setStyle("z-index",index);}
 this.el.setZIndex(++index);index+=5;if(this.resizer){this.resizer.proxy.setStyle("z-index",++index);}
-this.lastZIndex=index;},alignTo:function(element,position,offsets){var xy=this.el.getAlignToXY(element,position,offsets);this.setPagePosition(xy[0],xy[1]);return this;},anchorTo:function(el,alignment,offsets,monitorScroll,_pname){var action=function(){this.alignTo(el,alignment,offsets);};Ext.EventManager.onWindowResize(action,this);var tm=typeof monitorScroll;if(tm!='undefined'){Ext.EventManager.on(window,'scroll',action,this,{buffer:tm=='number'?monitorScroll:50});}
-action.call(this);this[_pname]=action;return this;},toFront:function(){if(this.manager.bringToFront(this)){this.focus();}
+this.lastZIndex=index;},alignTo:function(element,position,offsets){var xy=this.el.getAlignToXY(element,position,offsets);this.setPagePosition(xy[0],xy[1]);return this;},anchorTo:function(el,alignment,offsets,monitorScroll){if(this.doAnchor){Ext.EventManager.removeResizeListener(this.doAnchor,this);Ext.EventManager.un(window,'scroll',this.doAnchor,this);}
+this.doAnchor=function(){this.alignTo(el,alignment,offsets);};Ext.EventManager.onWindowResize(this.doAnchor,this);var tm=typeof monitorScroll;if(tm!='undefined'){Ext.EventManager.on(window,'scroll',this.doAnchor,this,{buffer:tm=='number'?monitorScroll:50});}
+this.doAnchor();return this;},toFront:function(e){if(this.manager.bringToFront(this)){if(!e||!e.getTarget().focus){this.focus();}}
 return this;},setActive:function(active){if(active){if(!this.maximized){this.el.enableShadow(true);}
 this.fireEvent('activate',this);}else{this.el.disableShadow();this.fireEvent('deactivate',this);}},toBack:function(){this.manager.sendToBack(this);return this;},center:function(){var xy=this.el.getAlignToXY(this.container,'c-c');this.setPagePosition(xy[0],xy[1]);return this;}});Ext.reg('window',Ext.Window);Ext.Window.DD=function(win){this.win=win;Ext.Window.DD.superclass.constructor.call(this,win.el.id,'WindowDD-'+win.id);this.setHandleElId(win.header.id);this.scroll=false;};Ext.extend(Ext.Window.DD,Ext.dd.DD,{moveOnly:true,headerOffsets:[100,25],startDrag:function(){var w=this.win;this.proxy=w.ghost();if(w.constrain!==false){var so=w.el.shadowOffset;this.constrainTo(w.container,{right:so,left:so,bottom:so});}else if(w.constrainHeader!==false){var s=this.proxy.getSize();this.constrainTo(w.container,{right:-(s.width-this.headerOffsets[0]),bottom:-(s.height-this.headerOffsets[1])});}},b4Drag:Ext.emptyFn,onDrag:function(e){this.alignElWithMouse(this.proxy,e.getPageX(),e.getPageY());},endDrag:function(e){this.win.unghost();this.win.saveState();}});
 
@@ -1396,7 +1430,7 @@
 this.sortState=state;var cs=this.view.columns,sortColumn=-1;for(var i=0,len=cs.length;i<len;i++){if(cs[i].dataIndex==state.field){sortColumn=i;break;}}
 if(sortColumn!=-1){var sortDir=state.direction;this.updateSortIcon(sortColumn,sortDir);}},updateSortIcon:function(col,dir){var sc=this.sortClasses;var hds=this.view.innerHd.select('em').removeClass(sc);hds.item(col).addClass(sc[dir=="DESC"?1:0]);},onHdClick:function(e){var hd=e.getTarget('em',3);if(hd&&!this.view.disableHeaders){var index=this.view.findHeaderIndex(hd);this.view.store.sort(this.view.columns[index].dataIndex);}}});
 
-Ext.ColorPalette=function(config){Ext.ColorPalette.superclass.constructor.call(this,config);this.addEvents('select');if(this.handler){this.on("select",this.handler,this.scope,true);}};Ext.extend(Ext.ColorPalette,Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:'click',ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],onRender:function(container,position){var t=this.tpl||new Ext.XTemplate('<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>');var el=document.createElement("div");el.className=this.itemCls;t.overwrite(el,this.colors);container.dom.insertBefore(el,position);this.el=Ext.get(el);this.el.on(this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!='click'){this.el.on('click',Ext.emptyFn,this,{delegate:"a",preventDefault:true});}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var s=this.value;this.value=null;this.select(s);}},handleClick:function(e,t){e.preventDefault();if(!this.disabled){var c=t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(c.toUpperCase());}},select:function(color){color=color.replace("#","");if(color!=this.value||this.allowReselect){var el=this.el;if(this.value){el.child("a.color-"+this.value).removeClass("x-color-palette-sel");}
+Ext.ColorPalette=function(config){Ext.ColorPalette.superclass.constructor.call(this,config);this.addEvents('select');if(this.handler){this.on("select",this.handler,this.scope,true);}};Ext.extend(Ext.ColorPalette,Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:'click',ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],onRender:function(container,position){var t=this.tpl||new Ext.XTemplate('<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>');var el=document.createElement("div");el.id=this.getId();el.className=this.itemCls;t.overwrite(el,this.colors);container.dom.insertBefore(el,position);this.el=Ext.get(el);this.el.on(this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!='click'){this.el.on('click',Ext.emptyFn,this,{delegate:"a",preventDefault:true});}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var s=this.value;this.value=null;this.select(s);}},handleClick:function(e,t){e.preventDefault();if(!this.disabled){var c=t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(c.toUpperCase());}},select:function(color){color=color.replace("#","");if(color!=this.value||this.allowReselect){var el=this.el;if(this.value){el.child("a.color-"+this.value).removeClass("x-color-palette-sel");}
 el.child("a.color-"+color).addClass("x-color-palette-sel");this.value=color;this.fireEvent("select",this,color);}}});Ext.reg('colorpalette',Ext.ColorPalette);
 
 Ext.DatePicker=Ext.extend(Ext.Component,{todayText:"Today",okText:"&#160;OK&#160;",cancelText:"Cancel",todayTip:"{0} (Spacebar)",minText:"This date is before the minimum date",maxText:"This date is after the maximum date",format:"m/d/y",disabledDaysText:"Disabled",disabledDatesText:"Disabled",constrainToViewport:true,monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:'Next Month (Control+Right)',prevText:'Previous Month (Control+Left)',monthYearText:'Choose a month (Control+Up/Down to move years)',startDay:0,showToday:true,initComponent:function(){Ext.DatePicker.superclass.initComponent.call(this);this.value=this.value?this.value.clearTime():new Date().clearTime();this.addEvents('select');if(this.handler){this.on("select",this.handler,this.scope||this);}
@@ -1428,13 +1462,13 @@
 if(ddMatch&&format){var fvalue=d.dateFormat(format);if(ddMatch.test(fvalue)){cell.title=ddText.replace("%0",fvalue);cell.className=" x-date-disabled";}}};var i=0;for(;i<startingPos;i++){textEls[i].innerHTML=(++prevStart);d.setDate(d.getDate()+1);cells[i].className="x-date-prevday";setCellClass(this,cells[i]);}
 for(;i<days;i++){var intDay=i-startingPos+1;textEls[i].innerHTML=(intDay);d.setDate(d.getDate()+1);cells[i].className="x-date-active";setCellClass(this,cells[i]);}
 var extraDays=0;for(;i<42;i++){textEls[i].innerHTML=(++extraDays);d.setDate(d.getDate()+1);cells[i].className="x-date-nextday";setCellClass(this,cells[i]);}
-this.mbtn.setText(this.monthNames[date.getMonth()]+" "+date.getFullYear());if(!this.internalRender){var main=this.el.dom.firstChild;var w=main.offsetWidth;this.el.setWidth(w+this.el.getBorderWidth("lr"));Ext.fly(main).setWidth(w);this.internalRender=true;if(Ext.isOpera&&!this.secondPass){main.rows[0].cells[1].style.width=(w-(main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth))+"px";this.secondPass=true;this.update.defer(10,this,[date]);}}},beforeDestroy:function(){if(this.rendered){Ext.destroy(this.mbtn,this.todayBtn);}}});Ext.reg('datepicker',Ext.DatePicker);
+this.mbtn.setText(this.monthNames[date.getMonth()]+" "+date.getFullYear());if(!this.internalRender){var main=this.el.dom.firstChild;var w=main.offsetWidth;this.el.setWidth(w+this.el.getBorderWidth("lr"));Ext.fly(main).setWidth(w);this.internalRender=true;if(Ext.isOpera&&!this.secondPass){main.rows[0].cells[1].style.width=(w-(main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth))+"px";this.secondPass=true;this.update.defer(10,this,[date]);}}},beforeDestroy:function(){if(this.rendered){Ext.destroy(this.leftClickRpt,this.rightClickRpt,this.monthPicker,this.eventEl,this.mbtn,this.todayBtn);}}});Ext.reg('datepicker',Ext.DatePicker);
 
 Ext.TabPanel=Ext.extend(Ext.Panel,{monitorResize:true,deferredRender:true,tabWidth:120,minTabWidth:30,resizeTabs:false,enableTabScroll:false,scrollIncrement:0,scrollRepeatInterval:400,scrollDuration:.35,animScroll:true,tabPosition:'top',baseCls:'x-tab-panel',autoTabs:false,autoTabSelector:'div.x-tab',activeTab:null,tabMargin:2,plain:false,wheelIncrement:20,idDelimiter:'__',itemCls:'x-tab-item',elements:'body',headerAsText:false,frame:false,hideBorders:true,initComponent:function(){this.frame=false;Ext.TabPanel.superclass.initComponent.call(this);this.addEvents('beforetabchange','tabchange','contextmenu');this.setLayout(new Ext.layout.CardLayout({deferredRender:this.deferredRender}));if(this.tabPosition=='top'){this.elements+=',header';this.stripTarget='header';}else{this.elements+=',footer';this.stripTarget='footer';}
 if(!this.stack){this.stack=Ext.TabPanel.AccessStack();}
-this.initItems();},render:function(){Ext.TabPanel.superclass.render.apply(this,arguments);if(this.activeTab!==undefined){var item=this.activeTab;delete this.activeTab;this.setActiveTab(item);}},onRender:function(ct,position){Ext.TabPanel.superclass.onRender.call(this,ct,position);if(this.plain){var pos=this.tabPosition=='top'?'header':'footer';this[pos].addClass('x-tab-panel-'+pos+'-plain');}
+this.initItems();if(this.activeTab!==undefined&&typeof this.activeTab!='object'){this.activeTab=this.items.get(this.activeTab);}},render:function(){Ext.TabPanel.superclass.render.apply(this,arguments);if(this.activeTab!==undefined){var item=this.activeTab;delete this.activeTab;this.setActiveTab(item);}},onRender:function(ct,position){Ext.TabPanel.superclass.onRender.call(this,ct,position);if(this.plain){var pos=this.tabPosition=='top'?'header':'footer';this[pos].addClass('x-tab-panel-'+pos+'-plain');}
 var st=this[this.stripTarget];this.stripWrap=st.createChild({cls:'x-tab-strip-wrap',cn:{tag:'ul',cls:'x-tab-strip x-tab-strip-'+this.tabPosition}});var beforeEl=(this.tabPosition=='bottom'?this.stripWrap:null);this.stripSpacer=st.createChild({cls:'x-tab-strip-spacer'},beforeEl);this.strip=new Ext.Element(this.stripWrap.dom.firstChild);this.edge=this.strip.createChild({tag:'li',cls:'x-tab-edge'});this.strip.createChild({cls:'x-clear'});this.body.addClass('x-tab-panel-body-'+this.tabPosition);if(!this.itemTpl){var tt=new Ext.Template('<li class="{cls}" id="{id}"><a class="x-tab-strip-close" onclick="return false;"></a>','<a class="x-tab-right" href="#" onclick="return false;"><em class="x-tab-left">','<span class="x-tab-strip-inner"><span class="x-tab-strip-text {iconCls}">{text}</span></span>','</em></a></li>');tt.disableFormats=true;tt.compile();Ext.TabPanel.prototype.itemTpl=tt;}
-this.items.each(this.initTab,this);},afterRender:function(){Ext.TabPanel.superclass.afterRender.call(this);if(this.autoTabs){this.readTabs(false);}},initEvents:function(){Ext.TabPanel.superclass.initEvents.call(this);this.on('add',this.onAdd,this);this.on('remove',this.onRemove,this);this.strip.on('mousedown',this.onStripMouseDown,this);this.strip.on('contextmenu',this.onStripContextMenu,this);if(this.enableTabScroll){this.strip.on('mousewheel',this.onWheel,this);}},findTargets:function(e){var item=null;var itemEl=e.getTarget('li',this.strip);if(itemEl){item=this.getComponent(itemEl.id.split(this.idDelimiter)[1]);if(item.disabled){return{close:null,item:null,el:null};}}
+this.items.each(this.initTab,this);},afterRender:function(){Ext.TabPanel.superclass.afterRender.call(this);if(this.autoTabs){this.readTabs(false);}},initEvents:function(){Ext.TabPanel.superclass.initEvents.call(this);this.on('add',this.onAdd,this,{target:this});this.on('remove',this.onRemove,this,{target:this});this.strip.on('mousedown',this.onStripMouseDown,this);this.strip.on('contextmenu',this.onStripContextMenu,this);if(this.enableTabScroll){this.strip.on('mousewheel',this.onWheel,this);}},findTargets:function(e){var item=null;var itemEl=e.getTarget('li',this.strip);if(itemEl){item=this.getComponent(itemEl.id.split(this.idDelimiter)[1]);if(item.disabled){return{close:null,item:null,el:null};}}
 return{close:e.getTarget('.x-tab-strip-close',this.strip),item:item,el:itemEl};},onStripMouseDown:function(e){if(e.button!=0){return;}
 e.preventDefault();var t=this.findTargets(e);if(t.close){if(t.item.fireEvent('close',t.item)!==false){this.remove(t.item);}
 return;}
@@ -1443,9 +1477,9 @@
 if(item.iconCls){cls+=' x-tab-with-icon';}
 if(item.tabCls){cls+=' '+item.tabCls;}
 var p={id:this.id+this.idDelimiter+item.getItemId(),text:item.title,cls:cls,iconCls:item.iconCls||''};var el=before?this.itemTpl.insertBefore(before,p):this.itemTpl.append(this.strip,p);Ext.fly(el).addClassOnOver('x-tab-strip-over');if(item.tabTip){Ext.fly(el).child('span.x-tab-strip-text',true).qtip=item.tabTip;}
-item.on('disable',this.onItemDisabled,this);item.on('enable',this.onItemEnabled,this);item.on('titlechange',this.onItemTitleChanged,this);item.on('beforeshow',this.onBeforeShowItem,this);},onAdd:function(tp,item,index){this.initTab(item,index);if(this.items.getCount()==1){this.syncSize();}
+item.tabEl=el;item.on('disable',this.onItemDisabled,this);item.on('enable',this.onItemEnabled,this);item.on('titlechange',this.onItemTitleChanged,this);item.on('beforeshow',this.onBeforeShowItem,this);},onAdd:function(tp,item,index){this.initTab(item,index);if(this.items.getCount()==1){this.syncSize();}
 this.delegateUpdates();},onBeforeAdd:function(item){var existing=item.events?(this.items.containsKey(item.getItemId())?item:null):this.items.get(item);if(existing){this.setActiveTab(item);return false;}
-Ext.TabPanel.superclass.onBeforeAdd.apply(this,arguments);var es=item.elements;item.elements=es?es.replace(',header',''):es;item.border=(item.border===true);},onRemove:function(tp,item){Ext.removeNode(this.getTabEl(item));this.stack.remove(item);item.un('disable',this.onItemDisabled,this);item.un('enable',this.onItemEnabled,this);item.un('titlechange',this.onItemTitleChanged,this);item.un('beforeshow',this.onBeforeShowItem,this);if(item==this.activeTab){var next=this.stack.next();if(next){this.setActiveTab(next);}else{this.setActiveTab(0);}}
+Ext.TabPanel.superclass.onBeforeAdd.apply(this,arguments);var es=item.elements;item.elements=es?es.replace(',header',''):es;item.border=(item.border===true);},onRemove:function(tp,item){Ext.destroy(Ext.get(this.getTabEl(item)));this.stack.remove(item);item.un('disable',this.onItemDisabled,this);item.un('enable',this.onItemEnabled,this);item.un('titlechange',this.onItemTitleChanged,this);item.un('beforeshow',this.onBeforeShowItem,this);if(item==this.activeTab){var next=this.stack.next();if(next){this.setActiveTab(next);}else{this.setActiveTab(0);}}
 this.delegateUpdates();},onBeforeShowItem:function(item){if(item!=this.activeTab){this.setActiveTab(item);return false;}},onItemDisabled:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).addClass('x-item-disabled');}
 this.stack.remove(item);},onItemEnabled:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).removeClass('x-item-disabled');}},onItemTitleChanged:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).child('span.x-tab-strip-text',true).innerHTML=item.title;}},getTabEl:function(item){var itemId=(typeof item==='number')?this.items.items[item].getItemId():item.getItemId();return document.getElementById(this.id+this.idDelimiter+itemId);},onResize:function(){Ext.TabPanel.superclass.onResize.apply(this,arguments);this.delegateUpdates();},beginUpdate:function(){this.suspendUpdates=true;},endUpdate:function(){this.suspendUpdates=false;this.delegateUpdates();},hideTabStripItem:function(item){item=this.getComponent(item);var el=this.getTabEl(item);if(el){el.style.display='none';this.delegateUpdates();}
 this.stack.remove(item);},unhideTabStripItem:function(item){item=this.getComponent(item);var el=this.getTabEl(item);if(el){el.style.display='';this.delegateUpdates();}},delegateUpdates:function(){if(this.suspendUpdates){return;}
@@ -1464,7 +1498,9 @@
 tw-=wrap.getMargins('lr');wrap.setWidth(tw>20?tw:20);if(!this.scrolling){if(!this.scrollLeft){this.createScrollers();}else{this.scrollLeft.show();this.scrollRight.show();}}
 this.scrolling=true;if(pos>(l-tw)){wd.scrollLeft=l-tw;}else{this.scrollToTab(this.activeTab,false);}
 this.updateScrollButtons();}},createScrollers:function(){var h=this.stripWrap.dom.offsetHeight;var sl=this.header.insertFirst({cls:'x-tab-scroller-left'});sl.setHeight(h);sl.addClassOnOver('x-tab-scroller-left-over');this.leftRepeater=new Ext.util.ClickRepeater(sl,{interval:this.scrollRepeatInterval,handler:this.onScrollLeft,scope:this});this.scrollLeft=sl;var sr=this.header.insertFirst({cls:'x-tab-scroller-right'});sr.setHeight(h);sr.addClassOnOver('x-tab-scroller-right-over');this.rightRepeater=new Ext.util.ClickRepeater(sr,{interval:this.scrollRepeatInterval,handler:this.onScrollRight,scope:this});this.scrollRight=sr;},getScrollWidth:function(){return this.edge.getOffsetsTo(this.stripWrap)[0]+this.getScrollPos();},getScrollPos:function(){return parseInt(this.stripWrap.dom.scrollLeft,10)||0;},getScrollArea:function(){return parseInt(this.stripWrap.dom.clientWidth,10)||0;},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this};},getScrollIncrement:function(){return this.scrollIncrement||(this.resizeTabs?this.lastTabWidth+2:100);},scrollToTab:function(item,animate){if(!item){return;}
-var el=this.getTabEl(item);var pos=this.getScrollPos(),area=this.getScrollArea();var left=Ext.fly(el).getOffsetsTo(this.stripWrap)[0]+pos;var right=left+el.offsetWidth;if(left<pos){this.scrollTo(left,animate);}else if(right>(pos+area)){this.scrollTo(right-area,animate);}},scrollTo:function(pos,animate){this.stripWrap.scrollTo('left',pos,animate?this.getScrollAnim():false);if(!animate){this.updateScrollButtons();}},onWheel:function(e){var d=e.getWheelDelta()*this.wheelIncrement*-1;e.stopEvent();var pos=this.getScrollPos();var newpos=pos+d;var sw=this.getScrollWidth()-this.getScrollArea();var s=Math.max(0,Math.min(sw,newpos));if(s!=pos){this.scrollTo(s,false);}},onScrollRight:function(){var sw=this.getScrollWidth()-this.getScrollArea();var pos=this.getScrollPos();var s=Math.min(sw,pos+this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},onScrollLeft:function(){var pos=this.getScrollPos();var s=Math.max(0,pos-this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},updateScrollButtons:function(){var pos=this.getScrollPos();this.scrollLeft[pos==0?'addClass':'removeClass']('x-tab-scroller-left-disabled');this.scrollRight[pos>=(this.getScrollWidth()-this.getScrollArea())?'addClass':'removeClass']('x-tab-scroller-right-disabled');}});Ext.reg('tabpanel',Ext.TabPanel);Ext.TabPanel.prototype.activate=Ext.TabPanel.prototype.setActiveTab;Ext.TabPanel.AccessStack=function(){var items=[];return{add:function(item){items.push(item);if(items.length>10){items.shift();}},remove:function(item){var s=[];for(var i=0,len=items.length;i<len;i++){if(items[i]!=item){s.push(items[i]);}}
+var el=this.getTabEl(item);var pos=this.getScrollPos(),area=this.getScrollArea();var left=Ext.fly(el).getOffsetsTo(this.stripWrap)[0]+pos;var right=left+el.offsetWidth;if(left<pos){this.scrollTo(left,animate);}else if(right>(pos+area)){this.scrollTo(right-area,animate);}},scrollTo:function(pos,animate){this.stripWrap.scrollTo('left',pos,animate?this.getScrollAnim():false);if(!animate){this.updateScrollButtons();}},onWheel:function(e){var d=e.getWheelDelta()*this.wheelIncrement*-1;e.stopEvent();var pos=this.getScrollPos();var newpos=pos+d;var sw=this.getScrollWidth()-this.getScrollArea();var s=Math.max(0,Math.min(sw,newpos));if(s!=pos){this.scrollTo(s,false);}},onScrollRight:function(){var sw=this.getScrollWidth()-this.getScrollArea();var pos=this.getScrollPos();var s=Math.min(sw,pos+this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},onScrollLeft:function(){var pos=this.getScrollPos();var s=Math.max(0,pos-this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},updateScrollButtons:function(){var pos=this.getScrollPos();this.scrollLeft[pos==0?'addClass':'removeClass']('x-tab-scroller-left-disabled');this.scrollRight[pos>=(this.getScrollWidth()-this.getScrollArea())?'addClass':'removeClass']('x-tab-scroller-right-disabled');},beforeDestroy:function(){if(this.items){this.items.each(function(item){if(item&&item.tabEl){Ext.get(item.tabEl).removeAllListeners();item.tabEl=null;}},this);}
+if(this.strip){this.strip.removeAllListeners();}
+Ext.TabPanel.superclass.beforeDestroy.apply(this);}});Ext.reg('tabpanel',Ext.TabPanel);Ext.TabPanel.prototype.activate=Ext.TabPanel.prototype.setActiveTab;Ext.TabPanel.AccessStack=function(){var items=[];return{add:function(item){items.push(item);if(items.length>10){items.shift();}},remove:function(item){var s=[];for(var i=0,len=items.length;i<len;i++){if(items[i]!=item){s.push(items[i]);}}
 items=s;},next:function(){return items.pop();}};};
 
 Ext.Button=Ext.extend(Ext.BoxComponent,{hidden:false,disabled:false,pressed:false,enableToggle:false,menuAlign:"tl-bl?",type:'button',menuClassTarget:'tr:nth(2)',clickEvent:'click',handleMouseEvents:true,tooltipType:'qtip',buttonSelector:"button:first",scale:'small',iconAlign:'left',arrowAlign:'right',initComponent:function(){Ext.Button.superclass.initComponent.call(this);this.addEvents("click","toggle",'mouseover','mouseout','menushow','menuhide','menutriggerover','menutriggerout');if(this.menu){this.menu=Ext.menu.MenuMgr.get(this.menu);}
@@ -1472,15 +1508,16 @@
 return[this.text||'&#160;',this.type,this.iconCls||'',cls,'x-btn-'+this.scale+' x-btn-icon-'+this.scale+'-'+this.iconAlign,this.getMenuClass()];},getMenuClass:function(){return this.menu?(this.arrowAlign!='bottom'?'x-btn-arrow':'x-btn-arrow-bottom'):'';},onRender:function(ct,position){if(!this.template){if(!Ext.Button.buttonTemplate){Ext.Button.buttonTemplate=new Ext.Template('<table cellspacing="0" class="x-btn {3}"><tbody class="{4}">','<tr><td class="x-btn-tl"><i>&#160;</i></td><td class="x-btn-tc"></td><td class="x-btn-tr"><i>&#160;</i></td></tr>','<tr><td class="x-btn-ml"><i>&#160;</i></td><td class="x-btn-mc"><em class="{5}" unselectable="on"><button class="x-btn-text {2}" type="{1}">{0}</button></em></td><td class="x-btn-mr"><i>&#160;</i></td></tr>','<tr><td class="x-btn-bl"><i>&#160;</i></td><td class="x-btn-bc"></td><td class="x-btn-br"><i>&#160;</i></td></tr>',"</tbody></table>");Ext.Button.buttonTemplate.compile();}
 this.template=Ext.Button.buttonTemplate;}
 var btn,targs=this.getTemplateArgs();if(position){btn=this.template.insertBefore(position,targs,true);}else{btn=this.template.append(ct,targs,true);}
-var btnEl=btn.child(this.buttonSelector);btnEl.on('focus',this.onFocus,this);btnEl.on('blur',this.onBlur,this);this.initButtonEl(btn,btnEl);Ext.ButtonToggleMgr.register(this);},initButtonEl:function(btn,btnEl){this.el=btn;if(this.icon){btnEl.setStyle('background-image','url('+this.icon+')');}
+var btnEl=btn.child(this.buttonSelector);btnEl.on('focus',this.onFocus,this);btnEl.on('blur',this.onBlur,this);this.initButtonEl(btn,btnEl);Ext.ButtonToggleMgr.register(this);},initButtonEl:function(btn,btnEl){this.el=btn;if(this.id){this.el.dom.id=this.el.id=this.id;}
+if(this.icon){btnEl.setStyle('background-image','url('+this.icon+')');}
 if(this.tabIndex!==undefined){btnEl.dom.tabIndex=this.tabIndex;}
 if(this.tooltip){if(typeof this.tooltip=='object'){Ext.QuickTips.register(Ext.apply({target:btnEl.id},this.tooltip));}else{btnEl.dom[this.tooltipType]=this.tooltip;}}
 if(this.handleMouseEvents){btn.on("mouseover",this.onMouseOver,this);btn.on("mousedown",this.onMouseDown,this);}
 if(this.menu){this.menu.on("show",this.onMenuShow,this);this.menu.on("hide",this.onMenuHide,this);}
-if(this.id){this.el.dom.id=this.el.id=this.id;}
 if(this.repeat){var repeater=new Ext.util.ClickRepeater(btn,typeof this.repeat=="object"?this.repeat:{});repeater.on("click",this.onClick,this);}
 btn.on(this.clickEvent,this.onClick,this);},afterRender:function(){Ext.Button.superclass.afterRender.call(this);if(Ext.isIE6){this.doAutoWidth.defer(1,this);}else{this.doAutoWidth();}},setIconClass:function(cls){if(this.el){this.el.child(this.buttonSelector).replaceClass(this.iconCls,cls);}
-this.iconCls=cls;},beforeDestroy:function(){if(this.rendered){var btn=this.el.child(this.buttonSelector);if(btn){btn.removeAllListeners();}}
+this.iconCls=cls;},beforeDestroy:function(){if(this.rendered){var btnEl=this.el.child(this.buttonSelector);if(btnEl){if(this.tooltip){Ext.QuickTips.unregister(btnEl);}
+btnEl.removeAllListeners();}}
 if(this.menu){Ext.destroy(this.menu);}},onDestroy:function(){if(this.rendered){Ext.ButtonToggleMgr.unregister(this);}},doAutoWidth:function(){if(this.el&&this.text&&typeof this.width=='undefined'){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var ib=this.el.child(this.buttonSelector);if(ib&&ib.getWidth()>20){ib.clip();ib.setWidth(Ext.util.TextMetrics.measure(ib,this.text).width+ib.getFrameWidth('lr'));}}
 if(this.minWidth){if(this.el.getWidth()<this.minWidth){this.el.setWidth(this.minWidth);}}}},setHandler:function(handler,scope){this.handler=handler;this.scope=scope;},setText:function(text){this.text=text;if(this.el){this.el.child("td.x-btn-mc "+this.buttonSelector).update(text);}
 this.doAutoWidth();},getText:function(){return this.text;},toggle:function(state){state=state===undefined?!this.pressed:state;if(state!=this.pressed){if(state){this.el.addClass("x-btn-pressed");this.pressed=true;this.fireEvent("toggle",this,true);}else{this.el.removeClass("x-btn-pressed");this.pressed=false;this.fireEvent("toggle",this,false);}
@@ -1521,17 +1558,19 @@
 
 Ext.layout.ToolbarLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,triggerWidth:16,lastOverflow:false,noItemsMenuText:'<div class="x-toolbar-no-items">(None)</div>',onLayout:function(ct,target){if(!this.leftTr){target.addClass('x-toolbar-layout-ct');target.insertHtml('beforeEnd','<table cellspacing="0" class="x-toolbar-ct"><tbody><tr><td class="x-toolbar-left" align="left"><table cellspacing="0"><tbody><tr class="x-toolbar-left-row"></tr></tbody></table></td><td class="x-toolbar-right" align="right"><table cellspacing="0" class="x-toolbar-right-ct"><tbody><tr><td><table cellspacing="0"><tbody><tr class="x-toolbar-right-row"></tr></tbody></table></td><td><table cellspacing="0"><tbody><tr class="x-toolbar-extras-row"></tr></tbody></table></td></tr></tbody></td></tr></tbody></table>');this.leftTr=target.child('tr.x-toolbar-left-row',true);this.rightTr=target.child('tr.x-toolbar-right-row',true);this.extrasTr=target.child('tr.x-toolbar-extras-row',true);}
 var side=this.leftTr;var pos=0;var items=ct.items.items;for(var i=0,len=items.length,c;i<len;i++,pos++){c=items[i];if(c.isFill){side=this.rightTr;pos=0;}else if(!c.rendered){c.render(this.insertCell(c,side,pos));}else{if(!c.xtbHidden&&!this.isValidParent(c,side.childNodes[pos])){var td=this.insertCell(c,side,pos);td.appendChild(c.getDomPositionEl().dom);c.container=Ext.get(td);}}}
-this.cleanup(this.leftTr);this.cleanup(this.rightTr);this.cleanup(this.extrasTr);this.fitToSize(target);},cleanup:function(row){var cn=row.childNodes;for(var i=cn.length-1,c;i>=0&&(c=cn[i]);i--){if(!c.firstChild){row.removeChild(c);}}},insertCell:function(c,side,pos){var td=document.createElement('td');td.className='x-toolbar-cell';side.insertBefore(td,side.childNodes[pos]||null);return td;},hideItem:function(item){var h=(this.hiddens=this.hiddens||[]);h.push(item);item.xtbHidden=true;item.xtbWidth=item.getDomPositionEl().dom.parentNode.offsetWidth;item.hide();},unhideItem:function(item){item.show();item.xtbHidden=false;this.hiddens.remove(item);if(this.hiddens.length<1){delete this.hiddens;}},getItemWidth:function(c){return c.hidden?(c.xtbWidth||0):c.getDomPositionEl().dom.parentNode.offsetWidth;},fitToSize:function(t){var w=t.dom.clientWidth;var lw=this.lastWidth||0;this.lastWidth=w;var iw=t.dom.firstChild.offsetWidth;var clipWidth=w-this.triggerWidth;var hideIndex=-1;if(iw>w||(this.hiddens&&w>lw)){var i,items=this.container.items.items,len=items.length,c;var loopWidth=0;for(i=0;i<len;i++){c=items[i];if(!c.isFill){loopWidth+=this.getItemWidth(c);if(loopWidth>clipWidth){if(!c.xtbHidden){this.hideItem(c);}}else{if(c.xtbHidden){this.unhideItem(c);}}}}}
+this.cleanup(this.leftTr);this.cleanup(this.rightTr);this.cleanup(this.extrasTr);this.fitToSize(target);},cleanup:function(row){var cn=row.childNodes;for(var i=cn.length-1,c;i>=0&&(c=cn[i]);i--){if(!c.firstChild){row.removeChild(c);}}},insertCell:function(c,side,pos){var td=document.createElement('td');td.className='x-toolbar-cell';side.insertBefore(td,side.childNodes[pos]||null);return td;},hideItem:function(item){var h=(this.hiddens=this.hiddens||[]);h.push(item);item.xtbHidden=true;item.xtbWidth=item.getDomPositionEl().dom.parentNode.offsetWidth;item.hide();},unhideItem:function(item){item.show();item.xtbHidden=false;this.hiddens.remove(item);if(this.hiddens.length<1){delete this.hiddens;}},getItemWidth:function(c){return c.hidden?(c.xtbWidth||0):c.getDomPositionEl().dom.parentNode.offsetWidth;},fitToSize:function(t){if(this.container.enableOverflow===false){return;}
+var w=t.dom.clientWidth;var lw=this.lastWidth||0;this.lastWidth=w;var iw=t.dom.firstChild.offsetWidth;var clipWidth=w-this.triggerWidth;var hideIndex=-1;if(iw>w||(this.hiddens&&w>lw)){var i,items=this.container.items.items,len=items.length,c;var loopWidth=0;for(i=0;i<len;i++){c=items[i];if(!c.isFill){loopWidth+=this.getItemWidth(c);if(loopWidth>clipWidth){if(!c.xtbHidden){this.hideItem(c);}}else{if(c.xtbHidden){this.unhideItem(c);}}}}}
 if(this.hiddens){this.initMore();if(!this.lastOverflow){this.container.fireEvent('overflowchange',this.container,true);this.lastOverflow=true;}}else if(this.more){this.more.destroy();delete this.more;if(this.lastOverflow){this.container.fireEvent('overflowchange',this.container,false);this.lastOverflow=false;}}},createMenuConfig:function(c,hideOnClick){var cfg=Ext.apply({},c.initialConfig);cfg.hideOnClick=hideOnClick;delete cfg.xtype;return cfg;},addComponentToMenu:function(m,c){if(c instanceof Ext.Toolbar.Separator){m.add('-');}else if(typeof c.isXType=='function'){if(c.isXType('splitbutton')){m.add(this.createMenuConfig(c,true));}else if(c.isXType('button')){m.add(this.createMenuConfig(c,!c.menu));}else if(c.isXType('buttongroup')){m.add('-');c.items.each(function(item){this.addComponentToMenu(m,item);},this);m.add('-');}}},beforeMoreShow:function(m){m.removeAll();for(var i=0,h=this.container.items.items,len=h.length,c;i<len;i++){c=h[i];if(c.xtbHidden){this.addComponentToMenu(m,c);}}
 if(m.items.length<1){m.add(this.noItemsMenuText);}},initMore:function(){if(!this.more){this.moreMenu=new Ext.menu.Menu({listeners:{beforeshow:this.beforeMoreShow,scope:this}});this.more=new Ext.Button({iconCls:'x-toolbar-more-icon',cls:'x-toolbar-more',menu:this.moreMenu});var td=this.insertCell(this.more,this.extrasTr,100);this.more.render(td);}}});Ext.Container.LAYOUTS['toolbar']=Ext.layout.ToolbarLayout;Ext.Toolbar=function(config){if(Ext.isArray(config)){config={items:config,layout:'toolbar'};}else{config=Ext.apply({layout:'toolbar'},config);if(config.buttons){config.items=config.buttons;}}
-Ext.Toolbar.superclass.constructor.call(this,config);};(function(){var T=Ext.Toolbar;Ext.extend(T,Ext.Container,{defaultType:'button',trackMenus:true,internalDefaults:{removeMode:'container',hideParent:true},autoCreate:{cls:'x-toolbar x-small-editor'},initComponent:function(){T.superclass.initComponent.call(this);this.addEvents('overflowchange');},onRender:function(ct,position){this.el=ct.createChild(Ext.apply({id:this.id},this.autoCreate),position);},add:function(){var a=arguments,l=a.length;for(var i=0;i<l;i++){var el=a[i];if(el.isFormField){this.addField(el);}else if(el.render){this.addItem(el);}else if(typeof el=="string"){if(el=="separator"||el=="-"){this.addSeparator();}else if(el==" "){this.addSpacer();}else if(el=="->"){this.addFill();}else{this.addText(el);}}else if(el.tag){this.addDom(el);}else if(el.tagName){this.addElement(el);}else if(typeof el=="object"){if(el.xtype){this.addItem(Ext.ComponentMgr.create(el,'button'));}else{this.addButton(el);}}}},addSeparator:function(){return this.addItem(new T.Separator());},addSpacer:function(){return this.addItem(new T.Spacer());},addFill:function(){this.addItem(new T.Fill());},addElement:function(el){var item=new T.Item({el:el});this.addItem(item);return item;},addItem:function(item){Ext.Toolbar.superclass.add.apply(this,arguments);return item;},addButton:function(config){if(Ext.isArray(config)){var buttons=[];for(var i=0,len=config.length;i<len;i++){buttons.push(this.addButton(config[i]));}
+Ext.Toolbar.superclass.constructor.call(this,config);};(function(){var T=Ext.Toolbar;Ext.extend(T,Ext.Container,{defaultType:'button',trackMenus:true,internalDefaults:{removeMode:'container',hideParent:true},toolbarCls:'x-toolbar',initComponent:function(){T.superclass.initComponent.call(this);this.addEvents('overflowchange');},onRender:function(ct,position){if(!this.el){if(!this.autoCreate){this.autoCreate={cls:this.toolbarCls+' x-small-editor'}}
+this.el=ct.createChild(Ext.apply({id:this.id},this.autoCreate),position);}},add:function(){var a=arguments,l=a.length;for(var i=0;i<l;i++){var el=a[i];if(el.isFormField){this.addField(el);}else if(el.render){this.addItem(el);}else if(typeof el=="string"){if(el=="separator"||el=="-"){this.addSeparator();}else if(el==" "){this.addSpacer();}else if(el=="->"){this.addFill();}else{this.addText(el);}}else if(el.tag){this.addDom(el);}else if(el.tagName){this.addElement(el);}else if(typeof el=="object"){if(el.xtype){this.addItem(Ext.create(el,'button'));}else{this.addButton(el);}}}},addSeparator:function(){return this.addItem(new T.Separator());},addSpacer:function(){return this.addItem(new T.Spacer());},addFill:function(){this.addItem(new T.Fill());},addElement:function(el){var item=new T.Item({el:el});this.addItem(item);return item;},addItem:function(item){Ext.Toolbar.superclass.add.apply(this,arguments);return item;},addButton:function(config){if(Ext.isArray(config)){var buttons=[];for(var i=0,len=config.length;i<len;i++){buttons.push(this.addButton(config[i]));}
 return buttons;}
 var b=config;if(!b.events){b=config.split?new T.SplitButton(config):new T.Button(config);}
 this.initMenuTracking(b);this.addItem(b);return b;},initMenuTracking:function(item){if(this.trackMenus&&item.menu){item.on({'menutriggerover':this.onButtonTriggerOver,'menushow':this.onButtonMenuShow,'menuhide':this.onButtonMenuHide,scope:this});}},addText:function(text){var t=new T.TextItem(text);this.addItem(t);return t;},insertButton:function(index,item){if(Ext.isArray(item)){var buttons=[];for(var i=0,len=item.length;i<len;i++){buttons.push(this.insertButton(index+i,item[i]));}
 return buttons;}
 if(!(item instanceof T.Button)){item=new T.Button(item);}
 Ext.Toolbar.superclass.insert.call(this,index,item);return item;},addDom:function(config){var item=new T.Item({autoEl:config});this.addItem(item);return item;},addField:function(field){this.addItem(field);return field;},applyDefaults:function(c){c=Ext.Toolbar.superclass.applyDefaults.call(this,c);var d=this.internalDefaults;if(c.events){Ext.applyIf(c.initialConfig,d);Ext.apply(c,d);}else{Ext.applyIf(c,d);}
-return c;},onDisable:function(){this.items.each(function(item){if(item.disable){item.disable();}});},onEnable:function(){this.items.each(function(item){if(item.enable){item.enable();}});},onButtonTriggerOver:function(btn){if(this.activeMenuBtn&&this.activeMenuBtn!=btn){this.activeMenuBtn.hideMenu();btn.showMenu();this.activeMenuBtn=btn;}},onButtonMenuShow:function(btn){this.activeMenuBtn=btn;},onButtonMenuHide:function(btn){delete this.activeMenuBtn;}});Ext.reg('toolbar',Ext.Toolbar);T.Item=Ext.extend(Ext.BoxComponent,{hideParent:true,enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.reg('tbitem',T.Item);T.Separator=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'span',cls:'ytb-sep'},position);}});Ext.reg('tbseparator',T.Separator);T.Spacer=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'div',cls:'ytb-spacer'},position);}});Ext.reg('tbspacer',T.Spacer);T.Fill=Ext.extend(T.Item,{render:Ext.emptyFn,isFill:true});Ext.reg('tbfill',T.Fill);T.TextItem=Ext.extend(T.Item,{constructor:function(config){if(typeof config=='string'){config={autoEl:{cls:'xtb-text',html:config}};}else{config.autoEl={cls:'xtb-text',html:config.text||''};}
+return c;},onDisable:function(){this.items.each(function(item){if(item.disable){item.disable();}});},onEnable:function(){this.items.each(function(item){if(item.enable){item.enable();}});},onButtonTriggerOver:function(btn){if(this.activeMenuBtn&&this.activeMenuBtn!=btn){this.activeMenuBtn.hideMenu();btn.showMenu();this.activeMenuBtn=btn;}},onButtonMenuShow:function(btn){this.activeMenuBtn=btn;},onButtonMenuHide:function(btn){delete this.activeMenuBtn;}});Ext.reg('toolbar',Ext.Toolbar);T.Item=Ext.extend(Ext.BoxComponent,{hideParent:true,enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.reg('tbitem',T.Item);T.Separator=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'span',cls:'xtb-sep'},position);}});Ext.reg('tbseparator',T.Separator);T.Spacer=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'div',cls:'xtb-spacer',style:this.width?'width:'+this.width+'px':''},position);}});Ext.reg('tbspacer',T.Spacer);T.Fill=Ext.extend(T.Item,{render:Ext.emptyFn,isFill:true});Ext.reg('tbfill',T.Fill);T.TextItem=Ext.extend(T.Item,{constructor:function(config){if(typeof config=='string'){config={autoEl:{cls:'xtb-text',html:config}};}else{config.autoEl={cls:'xtb-text',html:config.text||''};}
 T.TextItem.superclass.constructor.call(this,config);},setText:function(t){if(this.rendered){this.el.dom.innerHTML=t;}else{this.autoEl.html=t;}}});Ext.reg('tbtext',T.TextItem);T.Button=Ext.extend(Ext.Button,{});T.SplitButton=Ext.extend(Ext.SplitButton,{});Ext.reg('tbbutton',T.Button);Ext.reg('tbsplit',T.SplitButton);})();Ext.ButtonGroup=Ext.extend(Ext.Panel,{baseCls:'x-btn-group',layout:'table',defaultType:'button',frame:true,internalDefaults:{removeMode:'container',hideParent:true},initComponent:function(){this.layoutConfig=this.layoutConfig||{};Ext.applyIf(this.layoutConfig,{columns:this.columns});if(!this.title){this.addClass('x-btn-group-notitle');}
 this.on('afterlayout',this.onAfterLayout,this);Ext.ButtonGroup.superclass.initComponent.call(this);},applyDefaults:function(c){c=Ext.ButtonGroup.superclass.applyDefaults.call(this,c);var d=this.internalDefaults;if(c.events){Ext.applyIf(c.initialConfig,d);Ext.apply(c,d);}else{Ext.applyIf(c,d);}
 return c;},onAfterLayout:function(){var bodyWidth=this.body.getFrameWidth('lr')+this.body.dom.firstChild.offsetWidth;this.body.setWidth(bodyWidth);this.el.setWidth(bodyWidth+this.getFrameWidth());}});Ext.reg('buttongroup',Ext.ButtonGroup);
@@ -1542,7 +1581,8 @@
 this.cursor=(o.params&&o.params[this.paramNames.start])?o.params[this.paramNames.start]:0;var d=this.getPageData(),ap=d.activePage,ps=d.pages;this.afterTextItem.setText(String.format(this.afterPageText,d.pages));this.field.value=ap;this.first.setDisabled(ap==1);this.prev.setDisabled(ap==1);this.next.setDisabled(ap==ps);this.last.setDisabled(ap==ps);this.refresh.enable();this.updateInfo();this.fireEvent('change',this,d);},getPageData:function(){var total=this.store.getTotalCount();return{total:total,activePage:Math.ceil((this.cursor+this.pageSize)/this.pageSize),pages:total<this.pageSize?1:Math.ceil(total/this.pageSize)};},changePage:function(page){this.doLoad(((page-1)*this.pageSize).constrain(0,this.store.getTotalCount()));},onLoadError:function(){if(!this.rendered){return;}
 this.refresh.enable();},readPage:function(d){var v=this.field.value,pageNum;if(!v||isNaN(pageNum=parseInt(v,10))){this.field.value=d.activePage;return false;}
 return pageNum;},onPagingKeydown:function(e){var k=e.getKey(),d=this.getPageData(),pageNum;if(k==e.RETURN){e.stopEvent();pageNum=this.readPage(d);if(pageNum!==false){pageNum=Math.min(Math.max(1,pageNum),d.pages)-1;this.doLoad(pageNum*this.pageSize);}}else if(k==e.HOME||k==e.END){e.stopEvent();pageNum=k==e.HOME?1:d.pages;this.field.value=pageNum;}else if(k==e.UP||k==e.PAGEUP||k==e.DOWN||k==e.PAGEDOWN){e.stopEvent();if(pageNum=this.readPage(d)){var increment=e.shiftKey?10:1;if(k==e.DOWN||k==e.PAGEDOWN){increment*=-1;}
-pageNum+=increment;if(pageNum>=1&pageNum<=d.pages){this.field.value=pageNum;}}}},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable();}},doLoad:function(start){var o={},pn=this.paramNames;o[pn.start]=start;o[pn.limit]=this.pageSize;if(this.fireEvent('beforechange',this,o)!==false){this.store.load({params:o});}},onClick:function(button){var store=this.store;switch(button){case this.first:this.doLoad(0);break;case this.prev:this.doLoad(Math.max(0,this.cursor-this.pageSize));break;case this.next:this.doLoad(this.cursor+this.pageSize);break;case this.last:var total=store.getTotalCount();var extra=total%this.pageSize;var lastStart=extra?(total-extra):total-this.pageSize;this.doLoad(lastStart);break;case this.refresh:this.doLoad(this.cursor);break;}},unbind:function(store){store=Ext.StoreMgr.lookup(store);store.un("beforeload",this.beforeLoad,this);store.un("load",this.onLoad,this);store.un("loadexception",this.onLoadError,this);this.store=undefined;},bind:function(store){store=Ext.StoreMgr.lookup(store);store.on("beforeload",this.beforeLoad,this);store.on("load",this.onLoad,this);store.on("loadexception",this.onLoadError,this);this.store=store;this.paramNames.start=store.paramNames.start;this.paramNames.limit=store.paramNames.limit;}});})();Ext.reg('paging',Ext.PagingToolbar);
+pageNum+=increment;if(pageNum>=1&pageNum<=d.pages){this.field.value=pageNum;}}}},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable();}},doLoad:function(start){var o={},pn=this.paramNames;o[pn.start]=start;o[pn.limit]=this.pageSize;if(this.fireEvent('beforechange',this,o)!==false){this.store.load({params:o});}},onClick:function(button){var store=this.store;switch(button){case this.first:this.doLoad(0);break;case this.prev:this.doLoad(Math.max(0,this.cursor-this.pageSize));break;case this.next:this.doLoad(this.cursor+this.pageSize);break;case this.last:var total=store.getTotalCount();var extra=total%this.pageSize;var lastStart=extra?(total-extra):total-this.pageSize;this.doLoad(lastStart);break;case this.refresh:this.doLoad(this.cursor);break;}},unbind:function(store){store=Ext.StoreMgr.lookup(store);store.un("beforeload",this.beforeLoad,this);store.un("load",this.onLoad,this);store.un("loadexception",this.onLoadError,this);this.store=undefined;},bind:function(store){store=Ext.StoreMgr.lookup(store);store.on("beforeload",this.beforeLoad,this);store.on("load",this.onLoad,this);store.on("loadexception",this.onLoadError,this);this.store=store;this.paramNames.start=store.paramNames.start;this.paramNames.limit=store.paramNames.limit;},onDestroy:function(){if(this.store){this.unbind(this.store);}
+Ext.PagingToolbar.superclass.onDestroy.call(this);}});})();Ext.reg('paging',Ext.PagingToolbar);
 
 Ext.Resizable=function(el,config){this.el=Ext.get(el);if(config&&config.wrap){config.resizeChild=this.el;this.el=this.el.wrap(typeof config.wrap=="object"?config.wrap:{cls:"xresizable-wrap"});this.el.id=this.el.dom.id=config.resizeChild.id+"-rzwrap";this.el.setStyle("overflow","hidden");this.el.setPositioning(config.resizeChild.getPositioning());config.resizeChild.clearPositioning();if(!config.width||!config.height){var csize=config.resizeChild.getSize();this.el.setSize(csize.width,csize.height);}
 if(config.pinned&&!config.adjustments){config.adjustments="auto";}}
@@ -1570,14 +1610,17 @@
 var sw=this.snap(w,wi,mw);var sh=this.snap(h,hi,mh);if(sw!=w||sh!=h){switch(pos){case"northeast":y-=sh-h;break;case"north":y-=sh-h;break;case"southwest":x-=sw-w;break;case"west":x-=sw-w;break;case"northwest":x-=sw-w;y-=sh-h;break;}
 w=sw;h=sh;}
 if(this.preserveRatio){switch(pos){case"southeast":case"east":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);break;case"south":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"northeast":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"north":var tw=w;w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);x+=(tw-w)/2;break;case"southwest":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);var tw=w;w=ow*(h/oh);x+=tw-w;break;case"west":var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);y+=(th-h)/2;var tw=w;w=ow*(h/oh);x+=tw-w;break;case"northwest":var tw=w;var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);y+=th-h;x+=tw-w;break;}}
-this.proxy.setBounds(x,y,w,h);if(this.dynamic){this.resizeElement();}}catch(e){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over");}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over");}},getEl:function(){return this.el;},getResizeChild:function(){return this.resizeChild;},destroy:function(removeEl){this.proxy.remove();if(this.overlay){this.overlay.removeAllListeners();this.overlay.remove();}
-var ps=Ext.Resizable.positions;for(var k in ps){if(typeof ps[k]!="function"&&this[ps[k]]){var h=this[ps[k]];h.el.removeAllListeners();h.el.remove();}}
-if(removeEl){this.el.update("");this.el.remove();}},syncHandleHeight:function(){var h=this.el.getHeight(true);if(this.west){this.west.el.setHeight(h);}
+this.proxy.setBounds(x,y,w,h);if(this.dynamic){this.resizeElement();}}catch(e){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over");}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over");}},getEl:function(){return this.el;},getResizeChild:function(){return this.resizeChild;},destroy:function(removeEl){if(this.dd){this.dd.destroy();}
+if(this.overlay){Ext.destroy(this.overlay);this.overlay=null;}
+Ext.destroy(this.proxy);this.proxy=null;var ps=Ext.Resizable.positions;for(var k in ps){if(typeof ps[k]!="function"&&this[ps[k]]){this[ps[k]].destroy();}}
+if(removeEl){this.el.update("");Ext.destroy(this.el);this.el=null;}},syncHandleHeight:function(){var h=this.el.getHeight(true);if(this.west){this.west.el.setHeight(h);}
 if(this.east){this.east.el.setHeight(h);}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=function(rz,pos,disableTrackOver,transparent){if(!this.tpl){var tpl=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});tpl.compile();Ext.Resizable.Handle.prototype.tpl=tpl;}
 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);}};
+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);}
@@ -1595,7 +1638,7 @@
 this.fireEvent("startedit",this.boundEl,this.startValue);},deferredFocus:function(){if(this.editing){this.field.focus();}},cancelEdit:function(remainVisible){if(this.editing){var v=this.getValue();this.setValue(this.startValue);if(remainVisible!==true){this.hide();}
 this.fireEvent("canceledit",this,v,this.startValue);}},onBlur:function(){if(this.allowBlur!==true&&this.editing){this.completeEdit();}},onHide:function(){if(this.editing){this.completeEdit();return;}
 this.field.blur();if(this.field.collapse){this.field.collapse();}
-this.el.hide();if(this.hideEl!==false){this.boundEl.show();}},setValue:function(v){this.field.setValue(v);},getValue:function(){return this.field.getValue();},beforeDestroy:function(){this.field.destroy();this.field=null;}});Ext.reg('editor',Ext.Editor);
+this.el.hide();if(this.hideEl!==false){this.boundEl.show();}},setValue:function(v){this.field.setValue(v);},getValue:function(){return this.field.getValue();},beforeDestroy:function(){Ext.destroy(this.field);this.field=null;}});Ext.reg('editor',Ext.Editor);
 
 Ext.MessageBox=function(){var dlg,opt,mask,waitTimer;var bodyEl,msgEl,textboxEl,textareaEl,progressBar,pp,iconEl,spacerEl;var buttons,activeTextEl,bwidth,iconCls='';var handleButton=function(button){if(dlg.isVisible()){dlg.hide();Ext.callback(opt.fn,opt.scope||window,[button,activeTextEl.dom.value,opt],1);}};var handleHide=function(){if(opt&&opt.cls){dlg.el.removeClass(opt.cls);}
 progressBar.reset();};var handleEsc=function(d,k,e){if(opt&&opt.closable!==false){dlg.hide();}
@@ -1619,7 +1662,7 @@
 return this;},setIcon:function(icon){if(icon&&icon!=''){iconEl.removeClass('x-hidden');iconEl.replaceClass(iconCls,icon);iconCls=icon;}else{iconEl.replaceClass(iconCls,'x-hidden');iconCls='';}
 return this;},progress:function(title,msg,progressText){this.show({title:title,msg:msg,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth,progressText:progressText});return this;},wait:function(msg,title,config){this.show({title:title,msg:msg,buttons:false,closable:false,wait:true,modal:true,minWidth:this.minProgressWidth,waitConfig:config});return this;},alert:function(title,msg,fn,scope){this.show({title:title,msg:msg,buttons:this.OK,fn:fn,scope:scope});return this;},confirm:function(title,msg,fn,scope){this.show({title:title,msg:msg,buttons:this.YESNO,fn:fn,scope:scope,icon:this.QUESTION});return this;},prompt:function(title,msg,fn,scope,multiline,value){this.show({title:title,msg:msg,buttons:this.OKCANCEL,fn:fn,minWidth:250,scope:scope,prompt:true,multiline:multiline,value:value});return this;},OK:{ok:true},CANCEL:{cancel:true},OKCANCEL:{ok:true,cancel:true},YESNO:{yes:true,no:true},YESNOCANCEL:{yes:true,no:true,cancel:true},INFO:'ext-mb-info',WARNING:'ext-mb-warning',QUESTION:'ext-mb-question',ERROR:'ext-mb-error',defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}};}();Ext.Msg=Ext.MessageBox;
 
-Ext.Tip=Ext.extend(Ext.Panel,{minWidth:40,maxWidth:300,shadow:"sides",defaultAlign:"tl-bl?",autoRender:true,quickShowInterval:250,frame:true,hidden:true,baseCls:'x-tip',floating:{shadow:true,shim:true,useDisplay:true,constrain:false},autoHeight:true,initComponent:function(){Ext.Tip.superclass.initComponent.call(this);if(this.closable&&!this.title){this.elements+=',header';}},afterRender:function(){Ext.Tip.superclass.afterRender.call(this);if(this.closable){this.addTool({id:'close',handler:this.hide,scope:this});}},showAt:function(xy){Ext.Tip.superclass.show.call(this);if(this.measureWidth!==false&&(!this.initialConfig||typeof this.initialConfig.width!='number')){this.doAutoWidth();}
+Ext.Tip=Ext.extend(Ext.Panel,{minWidth:40,maxWidth:300,shadow:"sides",defaultAlign:"tl-bl?",autoRender:true,quickShowInterval:250,frame:true,hidden:true,baseCls:'x-tip',floating:{shadow:true,shim:true,useDisplay:true,constrain:false},autoHeight:true,closeAction:'hide',initComponent:function(){Ext.Tip.superclass.initComponent.call(this);if(this.closable&&!this.title){this.elements+=',header';}},afterRender:function(){Ext.Tip.superclass.afterRender.call(this);if(this.closable){this.addTool({id:'close',handler:this[this.closeAction],scope:this});}},showAt:function(xy){Ext.Tip.superclass.show.call(this);if(this.measureWidth!==false&&(!this.initialConfig||typeof this.initialConfig.width!='number')){this.doAutoWidth();}
 if(this.constrainPosition){xy=this.el.adjustForConstraints(xy);}
 this.setPagePosition(xy[0],xy[1]);},doAutoWidth:function(){var bw=this.body.getTextWidth();if(this.title){bw=Math.max(bw,this.header.child('span').getTextWidth(this.title));}
 bw+=this.getFrameWidth()+(this.closable?20:0)+this.body.getPadding("lr");this.setWidth(bw.constrain(this.minWidth,this.maxWidth));if(Ext.isIE7&&!this.repainted){this.el.repaint();this.repainted=true;}},showBy:function(el,pos){if(!this.rendered){this.render(Ext.getBody());}
@@ -1676,12 +1719,13 @@
 return t;},delegateOut:function(e,t){if(!this.beforeEvent(e)){return;}
 if(e.getTarget('.x-tree-ec-icon',1)){var n=this.getNode(e);this.onIconOut(e,n);if(n==this.lastEcOver){delete this.lastEcOver;}}
 if((t=this.getNodeTarget(e))&&!e.within(t,true)){this.onNodeOut(e,this.getNode(e));}},delegateOver:function(e,t){if(!this.beforeEvent(e)){return;}
+if(Ext.isGecko&&!this.trackingDoc){Ext.getBody().on('mouseover',this.trackExit,this);this.trackingDoc=true;}
 if(this.lastEcOver){this.onIconOut(e,this.lastEcOver);delete this.lastEcOver;}
 if(e.getTarget('.x-tree-ec-icon',1)){this.lastEcOver=this.getNode(e);this.onIconOver(e,this.lastEcOver);}
-if(t=this.getNodeTarget(e)){this.onNodeOver(e,this.getNode(e));}},delegateClick:function(e,t){if(!this.beforeEvent(e)){return;}
+if(t=this.getNodeTarget(e)){this.onNodeOver(e,this.getNode(e));}},trackExit:function(e){if(this.lastOverNode&&!e.within(this.lastOverNode.ui.getEl())){this.onNodeOut(e,this.lastOverNode);delete this.lastOverNode;Ext.getBody().un('mouseover',this.trackExit,this);this.trackingDoc=false;}},delegateClick:function(e,t){if(!this.beforeEvent(e)){return;}
 if(e.getTarget('input[type=checkbox]',1)){this.onCheckboxClick(e,this.getNode(e));}
 else if(e.getTarget('.x-tree-ec-icon',1)){this.onIconClick(e,this.getNode(e));}
-else if(this.getNodeTarget(e)){this.onNodeClick(e,this.getNode(e));}},delegateDblClick:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeDblClick(e,this.getNode(e));}},delegateContextMenu:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeContextMenu(e,this.getNode(e));}},onNodeClick:function(e,node){node.ui.onClick(e);},onNodeOver:function(e,node){node.ui.onOver(e);},onNodeOut:function(e,node){node.ui.onOut(e);},onIconOver:function(e,node){node.ui.addClass('x-tree-ec-over');},onIconOut:function(e,node){node.ui.removeClass('x-tree-ec-over');},onIconClick:function(e,node){node.ui.ecClick(e);},onCheckboxClick:function(e,node){node.ui.onCheckChange(e);},onNodeDblClick:function(e,node){node.ui.onDblClick(e);},onNodeContextMenu:function(e,node){node.ui.onContextMenu(e);},beforeEvent:function(e){if(this.disabled){e.stopEvent();return false;}
+else if(this.getNodeTarget(e)){this.onNodeClick(e,this.getNode(e));}},delegateDblClick:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeDblClick(e,this.getNode(e));}},delegateContextMenu:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeContextMenu(e,this.getNode(e));}},onNodeClick:function(e,node){node.ui.onClick(e);},onNodeOver:function(e,node){this.lastOverNode=node;node.ui.onOver(e);},onNodeOut:function(e,node){node.ui.onOut(e);},onIconOver:function(e,node){node.ui.addClass('x-tree-ec-over');},onIconOut:function(e,node){node.ui.removeClass('x-tree-ec-over');},onIconClick:function(e,node){node.ui.ecClick(e);},onCheckboxClick:function(e,node){node.ui.onCheckChange(e);},onNodeDblClick:function(e,node){node.ui.onDblClick(e);},onNodeContextMenu:function(e,node){node.ui.onContextMenu(e);},beforeEvent:function(e){if(this.disabled){e.stopEvent();return false;}
 return true;},disable:function(){this.disabled=true;},enable:function(){this.disabled=false;}};
 
 Ext.tree.DefaultSelectionModel=function(config){this.selNode=null;this.addEvents("selectionchange","beforeselect");Ext.apply(this,config);Ext.tree.DefaultSelectionModel.superclass.constructor.call(this);};Ext.extend(Ext.tree.DefaultSelectionModel,Ext.util.Observable,{init:function(tree){this.tree=tree;tree.getTreeEl().on("keydown",this.onKeyDown,this);tree.on("click",this.onNodeClick,this);},onNodeClick:function(node,e){this.select(node);},select:function(node){var last=this.selNode;if(last!=node&&this.fireEvent('beforeselect',this,node,last)!==false){if(last){last.ui.onSelectedChange(false);}
@@ -1719,7 +1763,7 @@
 if(deep===true){this.expandChildNodes(true);}},isHiddenRoot:function(){return this.isRoot&&!this.getOwnerTree().rootVisible;},collapse:function(deep,anim){if(this.expanded&&!this.isHiddenRoot()){if(this.fireEvent("beforecollapse",this,deep,anim)===false){return;}
 this.expanded=false;if((this.getOwnerTree().animate&&anim!==false)||anim){this.ui.animCollapse(function(){this.fireEvent("collapse",this);if(deep===true){this.collapseChildNodes(true);}}.createDelegate(this));return;}else{this.ui.collapse();this.fireEvent("collapse",this);}}
 if(deep===true){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(true,false);}}},delayedExpand:function(delay){if(!this.expandProcId){this.expandProcId=this.expand.defer(delay,this);}},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);}
-this.expandProcId=false;},toggle:function(){if(this.expanded){this.collapse();}else{this.expand();}},ensureVisible:function(callback){var tree=this.getOwnerTree();tree.expandPath(this.parentNode.getPath(),false,function(){var node=tree.getNodeById(this.id);tree.getTreeEl().scrollChildIntoView(node.ui.anchor);Ext.callback(callback);}.createDelegate(this));},expandChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].expand(deep);}},collapseChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(deep);}},disable:function(){this.disabled=true;this.unselect();if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,true);}
+this.expandProcId=false;},toggle:function(){if(this.expanded){this.collapse();}else{this.expand();}},ensureVisible:function(callback){var tree=this.getOwnerTree();tree.expandPath(this.parentNode?this.parentNode.getPath():this.getPath(),false,function(){var node=tree.getNodeById(this.id);tree.getTreeEl().scrollChildIntoView(node.ui.anchor);Ext.callback(callback);}.createDelegate(this));},expandChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].expand(deep);}},collapseChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(deep);}},disable:function(){this.disabled=true;this.unselect();if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,true);}
 this.fireEvent("disabledchange",this,true);},enable:function(){this.disabled=false;if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,false);}
 this.fireEvent("disabledchange",this,false);},renderChildren:function(suppressEvent){if(suppressEvent!==false){this.fireEvent("beforechildrenrendered",this);}
 var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].render(true);}
@@ -1814,7 +1858,7 @@
 this.autoEditTimer=this.startEdit.defer(this.editDelay,this,[node.ui.textNode,node.text]);return false;}},bindScroll:function(){this.tree.getTreeEl().on('scroll',this.cancelEdit,this);},beforeNodeClick:function(node,e){clearTimeout(this.autoEditTimer);if(this.tree.getSelectionModel().isSelected(node)){e.stopEvent();return this.triggerEdit(node);}},onNodeDblClick:function(node,e){clearTimeout(this.autoEditTimer);},updateNode:function(ed,value){this.tree.getTreeEl().un('scroll',this.cancelEdit,this);this.editNode.setText(value);},onHide:function(){Ext.tree.TreeEditor.superclass.onHide.call(this);if(this.editNode){this.editNode.ui.focus.defer(50,this.editNode.ui);}},onSpecialKey:function(field,e){var k=e.getKey();if(k==e.ESC){e.stopEvent();this.cancelEdit();}else if(k==e.ENTER&&!e.hasModifier()){e.stopEvent();this.completeEdit();}}});
 
 Ext.menu.Menu=function(config){if(Ext.isArray(config)){config={items:config};}
-Ext.apply(this,config);this.id=this.id||Ext.id();this.addEvents('beforeshow','beforehide','show','hide','click','mouseover','mouseout','itemclick');Ext.menu.MenuMgr.register(this);Ext.menu.Menu.superclass.constructor.call(this);var mis=this.items;this.items=new Ext.util.MixedCollection();if(mis){this.add.apply(this,mis);}};Ext.extend(Ext.menu.Menu,Ext.util.Observable,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,ignoreParentClicks:false,hidden:true,createEl:function(){return new Ext.Layer({cls:"x-menu",shadow:this.shadow,constrain:false,parentEl:this.parentEl||document.body,zindex:15000});},render:function(){if(this.el){return;}
+Ext.apply(this,config);this.id=this.id||Ext.id();this.addEvents('beforeshow','beforehide','show','hide','click','mouseover','mouseout','itemclick');Ext.menu.MenuMgr.register(this);Ext.menu.Menu.superclass.constructor.call(this);var mis=this.items;this.items=new Ext.util.MixedCollection(false,Ext.Container.prototype.getComponentId);if(mis){this.add.apply(this,mis);}};Ext.extend(Ext.menu.Menu,Ext.util.Observable,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,ignoreParentClicks:false,hidden:true,createEl:function(){return new Ext.Layer({cls:"x-menu",shadow:this.shadow,constrain:false,parentEl:this.parentEl||document.body,zindex:this.zIndex||15000});},render:function(){if(this.el){return;}
 var el=this.el=this.createEl();if(!this.keyNav){this.keyNav=new Ext.menu.MenuNav(this);}
 if(this.plain){el.addClass("x-menu-plain");}
 if(this.cls){el.addClass(this.cls);}
@@ -1834,7 +1878,7 @@
 return this.el;},addSeparator:function(){return this.addItem(new Ext.menu.Separator());},addElement:function(el){return this.addItem(new Ext.menu.BaseItem(el));},addItem:function(item){this.items.add(item);if(this.ul){var li=document.createElement("li");li.className="x-menu-list-item";this.ul.dom.appendChild(li);item.render(li,this);this.delayAutoWidth();}
 return item;},addMenuItem:function(config){if(!(config instanceof Ext.menu.Item)){if(typeof config.checked=="boolean"){config=new Ext.menu.CheckItem(config);}else{config=new Ext.menu.Item(config);}}
 return this.addItem(config);},addText:function(text){return this.addItem(new Ext.menu.TextItem(text));},insert:function(index,item){this.items.insert(index,item);if(this.ul){var li=document.createElement("li");li.className="x-menu-list-item";this.ul.dom.insertBefore(li,this.ul.dom.childNodes[index]);item.render(li,this);this.delayAutoWidth();}
-return item;},remove:function(item){this.items.removeKey(item.id);item.destroy();},removeAll:function(){if(this.items){var f;while(f=this.items.first()){this.remove(f);}}},destroy:function(){this.beforeDestroy();Ext.menu.MenuMgr.unregister(this);if(this.keyNav){this.keyNav.disable();}
+return item;},remove:function(item){this.items.remove(item);item.destroy();},removeAll:function(){if(this.items){var f;while(f=this.items.first()){this.remove(f);}}},destroy:function(){this.beforeDestroy();Ext.menu.MenuMgr.unregister(this);if(this.keyNav){this.keyNav.disable();}
 this.removeAll();if(this.ul){this.ul.removeAllListeners();}
 if(this.el){this.el.destroy();}},beforeDestroy:Ext.emptyFn});Ext.menu.MenuNav=function(menu){Ext.menu.MenuNav.superclass.constructor.call(this,menu.el);this.scope=this.menu=menu;};Ext.extend(Ext.menu.MenuNav,Ext.KeyNav,{doRelay:function(e,h){var k=e.getKey();if(!this.menu.activeItem&&e.isNavKeyPress()&&k!=e.SPACE&&k!=e.RETURN){this.menu.tryActivate(0,1);return false;}
 return h.call(this.scope||this,e,this.menu);},up:function(e,m){if(!m.tryActivate(m.items.indexOf(m.activeItem)-1,-1)){m.tryActivate(m.items.length-1,-1);}},down:function(e,m){if(!m.tryActivate(m.items.indexOf(m.activeItem)+1,1)){m.tryActivate(0,1);}},right:function(e,m){if(m.activeItem){m.activeItem.expandMenu(true);}},left:function(e,m){m.hide();if(m.parentMenu&&m.parentMenu.activeItem){m.parentMenu.activeItem.activate();}},enter:function(e,m){if(m.activeItem){e.stopPropagation();m.activeItem.onClick(e);m.fireEvent("click",this,m.activeItem);return true;}}});
@@ -1857,9 +1901,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.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);}});
@@ -1897,7 +1941,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);}
@@ -1912,8 +1956,8 @@
 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 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;}
+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&&!this.normalWidth){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;}
 if(tag=='textarea'){return w-2;}}}
@@ -1929,7 +1973,7 @@
 if(this.maskRe||(this.vtype&&this.disableKeyFilter!==true&&(this.maskRe=Ext.form.VTypes[this.vtype+'Mask']))){this.el.on("keypress",this.filterKeys,this);}
 if(this.grow){this.el.on("keyup",this.onKeyUpBuffered,this,{buffer:50});this.el.on("click",this.autoSize,this);}
 if(this.enableKeyEvents){this.el.on("keyup",this.onKeyUp,this);this.el.on("keydown",this.onKeyDown,this);this.el.on("keypress",this.onKeyPress,this);}},processValue:function(value){if(this.stripCharsRe){var newValue=value.replace(this.stripCharsRe,'');if(newValue!==value){this.setRawValue(newValue);return newValue;}}
-return value;},filterValidation:function(e){if(!e.isNavKeyPress()){this.validationTask.delay(this.validationDelay);}},onKeyUpBuffered:function(e){if(!e.isNavKeyPress()){this.autoSize();}},onKeyUp:function(e){this.fireEvent('keyup',this,e);},onKeyDown:function(e){this.fireEvent('keydown',this,e);},onKeyPress:function(e){this.fireEvent('keypress',this,e);},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText();},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass);}},preFocus:function(){if(this.emptyText){if(this.el.dom.value==this.emptyText){this.setRawValue('');}
+return value;},filterValidation:function(e){if(!e.isNavKeyPress()){this.validationTask.delay(this.validationDelay);}},onKeyUpBuffered:function(e){if(!e.isNavKeyPress()){this.autoSize();}},onKeyUp:function(e){this.fireEvent('keyup',this,e);},onKeyDown:function(e){this.fireEvent('keydown',this,e);},onKeyPress:function(e){this.fireEvent('keypress',this,e);},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText();},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1&&!this.hasFocus){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass);}},preFocus:function(){if(this.emptyText){if(this.el.dom.value==this.emptyText){this.setRawValue('');}
 this.el.removeClass(this.emptyClass);}
 if(this.selectOnFocus){this.el.dom.select();}},postBlur:function(){this.applyEmptyText();},filterKeys:function(e){if(e.ctrlKey){return;}
 var k=e.getKey();if(Ext.isGecko&&(e.isNavKeyPress()||k==e.BACKSPACE||(k==e.DELETE&&e.button==-1))){return;}
@@ -1949,8 +1993,9 @@
 this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},alignErrorIcon:function(){if(this.wrap){this.errorIcon.alignTo(this.wrap,'tl-tr',[2,0]);}},onRender:function(ct,position){Ext.form.TriggerField.superclass.onRender.call(this,ct,position);this.wrap=this.el.wrap({cls:"x-form-field-wrap"});this.trigger=this.wrap.createChild(this.triggerConfig||{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.triggerClass});if(this.hideTrigger){this.trigger.setDisplayed(false);}
 this.initTrigger();if(!this.width){this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());}},afterRender:function(){Ext.form.TriggerField.superclass.afterRender.call(this);var y;if(Ext.isIE&&!this.hideTrigger&&this.el.getY()!=(y=this.trigger.getY())){this.el.position();this.el.setY(y);}},initTrigger:function(){this.trigger.on("click",this.onTriggerClick,this,{preventDefault:true});this.trigger.addClassOnOver('x-form-trigger-over');this.trigger.addClassOnClick('x-form-trigger-click');},onDestroy:function(){if(this.trigger){this.trigger.removeAllListeners();this.trigger.remove();}
 if(this.wrap){this.wrap.remove();}
-Ext.form.TriggerField.superclass.onDestroy.call(this);},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass('x-trigger-wrap-focus');this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this,{delay:10});if(this.monitorTab){this.el.on("keydown",this.checkTab,this);}}},checkTab:function(e){if(e.getKey()==e.TAB){this.triggerBlur();}},onBlur:function(){},mimicBlur:function(e){if(!this.wrap.contains(e.target)&&this.validateBlur(e)){this.triggerBlur();}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);if(this.monitorTab){this.el.un("keydown",this.checkTab,this);}
-this.beforeBlur();this.wrap.removeClass('x-trigger-wrap-focus');Ext.form.TriggerField.superclass.onBlur.call(this);},beforeBlur:Ext.emptyFn,validateBlur:function(e){return true;},onDisable:function(){Ext.form.TriggerField.superclass.onDisable.call(this);if(this.wrap){this.wrap.addClass(this.disabledClass);this.el.removeClass(this.disabledClass);}},onEnable:function(){Ext.form.TriggerField.superclass.onEnable.call(this);if(this.wrap){this.wrap.removeClass(this.disabledClass);}},onShow:function(){if(this.wrap){this.wrap.dom.style.display='';this.wrap.dom.style.visibility='visible';}},onHide:function(){this.wrap.dom.style.display='none';},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:'span',cls:'x-form-twin-triggers',cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger2Class}]};},getTrigger:function(index){return this.triggers[index];},initTrigger:function(){var ts=this.trigger.select('.x-form-trigger',true);this.wrap.setStyle('overflow','hidden');var triggerField=this;ts.each(function(t,all,index){t.hide=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='none';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};t.show=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};var triggerIndex='Trigger'+(index+1);if(this['hide'+triggerIndex]){t.dom.style.display='none';}
+Ext.form.TriggerField.superclass.onDestroy.call(this);},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass('x-trigger-wrap-focus');this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this,{delay:10});if(this.monitorTab){this.el.on("keydown",this.checkTab,this);}}},checkTab:function(e){if(e.getKey()==e.TAB){this.triggerBlur();}},onBlur:function(){},mimicBlur:function(e){if(!this.wrap.contains(e.target)&&this.validateBlur(e)){this.triggerBlur();}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);if(this.monitorTab&&this.el){this.el.un("keydown",this.checkTab,this);}
+this.beforeBlur();if(this.wrap){this.wrap.removeClass('x-trigger-wrap-focus');}
+Ext.form.TriggerField.superclass.onBlur.call(this);},beforeBlur:Ext.emptyFn,validateBlur:function(e){return true;},onDisable:function(){Ext.form.TriggerField.superclass.onDisable.call(this);if(this.wrap){this.wrap.addClass(this.disabledClass);this.el.removeClass(this.disabledClass);}},onEnable:function(){Ext.form.TriggerField.superclass.onEnable.call(this);if(this.wrap){this.wrap.removeClass(this.disabledClass);}},onShow:function(){if(this.wrap){this.wrap.dom.style.display='';this.wrap.dom.style.visibility='visible';}},onHide:function(){this.wrap.dom.style.display='none';},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:'span',cls:'x-form-twin-triggers',cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger2Class}]};},getTrigger:function(index){return this.triggers[index];},initTrigger:function(){var ts=this.trigger.select('.x-form-trigger',true);this.wrap.setStyle('overflow','hidden');var triggerField=this;ts.each(function(t,all,index){t.hide=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='none';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};t.show=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};var triggerIndex='Trigger'+(index+1);if(this['hide'+triggerIndex]){t.dom.style.display='none';}
 t.on("click",this['on'+triggerIndex+'Click'],this,{preventDefault:true});t.addClassOnOver('x-form-trigger-over');t.addClassOnClick('x-form-trigger-click');},this);this.triggers=ts.elements;},onTrigger1Click:Ext.emptyFn,onTrigger2Click:Ext.emptyFn});Ext.reg('trigger',Ext.form.TriggerField);
 
 Ext.form.TextArea=Ext.extend(Ext.form.TextField,{growMin:60,growMax:1000,growAppend:'&#160;\n&#160;',growPad:0,enterIsSpecial:false,preventScrollbars:false,onRender:function(ct,position){if(!this.el){this.defaultAutoCreate={tag:"textarea",style:"width:100px;height:60px;",autocomplete:"off"};}
@@ -1975,14 +2020,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]);}}
@@ -1990,28 +2035,35 @@
 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]);}
-this.store=new Ext.data.SimpleStore({'id':0,fields:['value','text'],data:d});this.valueField='value';this.displayField='text';}
+this.store=new Ext.data.ArrayStore({'id':0,fields:['value','text'],data:d});this.valueField='value';this.displayField='text';}
 s.name=Ext.id();if(!this.lazyRender){this.target=true;this.el=Ext.DomHelper.insertBefore(s,this.autoCreate||this.defaultAutoCreate);Ext.removeNode(s);this.render(this.el.parentNode);}else{Ext.removeNode(s);}}
-else if(Ext.isArray(this.store)){if(Ext.isArray(this.store[0])){this.store=new Ext.data.SimpleStore({fields:['value','text'],data:this.store});this.valueField='value';}else{this.store=new Ext.data.SimpleStore({fields:['text'],data:this.store,expandData:true});this.valueField='text';}
+else if(Ext.isArray(this.store)){if(Ext.isArray(this.store[0])){this.store=new Ext.data.ArrayStore({fields:['value','text'],data:this.store});this.valueField='value';}else{this.store=new Ext.data.ArrayStore({fields:['text'],data:this.store,expandData:true});this.valueField='text';}
 this.displayField='text';this.mode='local';}
 this.selectedIndex=-1;if(this.mode=='local'){if(this.initialConfig.queryDelay===undefined){this.queryDelay=10;}
 if(this.initialConfig.minChars===undefined){this.minChars=0;}}},onRender:function(ct,position){Ext.form.ComboBox.superclass.onRender.call(this,ct,position);if(this.hiddenName){this.hiddenField=this.el.insertSibling({tag:'input',type:'hidden',name:this.hiddenName,id:(this.hiddenId||this.hiddenName)},'before',true);this.el.dom.removeAttribute('name');}
 if(Ext.isGecko){this.el.dom.setAttribute('autocomplete','off');}
 if(!this.lazyInit){this.initList();}else{this.on('focus',this.initList,this,{single:true});}
-if(!this.editable){this.editable=true;this.setEditable(false);}},initValue:function(){Ext.form.ComboBox.superclass.initValue.call(this);if(this.hiddenField){this.hiddenField.value=this.hiddenValue!==undefined?this.hiddenValue:this.value!==undefined?this.value:'';}},initList:function(){if(!this.list){var cls='x-combo-list';this.list=new Ext.Layer({shadow:this.shadow,cls:[cls,this.listClass].join(' '),constrain:false});var lw=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth);this.list.setWidth(lw);this.list.swallowEvent('mousewheel');this.assetHeight=0;if(this.title){this.header=this.list.createChild({cls:cls+'-hd',html:this.title});this.assetHeight+=this.header.getHeight();}
+if(!this.editable){this.editable=true;this.setEditable(false);}},initValue:function(){Ext.form.ComboBox.superclass.initValue.call(this);if(this.hiddenField){this.hiddenField.value=this.hiddenValue!==undefined?this.hiddenValue:this.value!==undefined?this.value:'';}},initList:function(){if(!this.list){var cls='x-combo-list';this.list=new Ext.Layer({shadow:this.shadow,cls:[cls,this.listClass].join(' '),constrain:false});var lw=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth);this.list.setWidth(lw);this.list.swallowEvent('mousewheel');this.assetHeight=0;if(this.syncFont!==false){this.list.setStyle('font-size',this.el.getStyle('font-size'));}
+if(this.title){this.header=this.list.createChild({cls:cls+'-hd',html:this.title});this.assetHeight+=this.header.getHeight();}
 this.innerList=this.list.createChild({cls:cls+'-inner'});this.innerList.on('mouseover',this.onViewOver,this);this.innerList.on('mousemove',this.onViewMove,this);this.innerList.setWidth(lw-this.list.getFrameWidth('lr'));if(this.pageSize){this.footer=this.list.createChild({cls:cls+'-ft'});this.pageTb=new Ext.PagingToolbar({store:this.store,pageSize:this.pageSize,renderTo:this.footer});this.assetHeight+=this.footer.getHeight();}
 if(!this.tpl){this.tpl='<tpl for="."><div class="'+cls+'-item">{'+this.displayField+'}</div></tpl>';}
 this.view=new Ext.DataView({applyTo:this.innerList,tpl:this.tpl,singleSelect:true,selectedClass:this.selectedClass,itemSelector:this.itemSelector||'.'+cls+'-item'});this.view.on('click',this.onViewClick,this);this.bindStore(this.store,true);if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:'se'});this.resizer.on('resize',function(r,w,h){this.maxHeight=h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;this.listWidth=w;this.innerList.setWidth(w-this.list.getFrameWidth('lr'));this.restrictHeight();},this);this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom',this.handleHeight+'px');}}},bindStore:function(store,initial){if(this.store&&!initial){this.store.un('beforeload',this.onBeforeLoad,this);this.store.un('load',this.onLoad,this);this.store.un('loadexception',this.collapse,this);if(!store){this.store=null;if(this.view){this.view.setStore(null);}}}
 if(store){this.store=Ext.StoreMgr.lookup(store);this.store.on('beforeload',this.onBeforeLoad,this);this.store.on('load',this.onLoad,this);this.store.on('loadexception',this.collapse,this);if(this.view){this.view.setStore(store);}}},initEvents:function(){Ext.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{"up":function(e){this.inKeyMode=true;this.selectPrev();},"down":function(e){if(!this.isExpanded()){this.onTriggerClick();}else{this.inKeyMode=true;this.selectNext();}},"enter":function(e){this.onViewClick();this.delayedCheck=true;this.unsetDelayCheck.defer(10,this);},"esc":function(e){this.collapse();},"tab":function(e){this.onViewClick(false);return true;},scope:this,doRelay:function(foo,bar,hname){if(hname=='down'||this.scope.isExpanded()){return Ext.KeyNav.prototype.doRelay.apply(this,arguments);}
 return true;},forceKeyDown:true});this.queryDelay=Math.max(this.queryDelay||10,this.mode=='local'?10:250);this.dqTask=new Ext.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Ext.util.DelayedTask(this.onTypeAhead,this);}
 if(this.editable!==false){this.el.on("keyup",this.onKeyUp,this);}
-if(this.forceSelection){this.on('blur',this.doForce,this);}},onDestroy:function(){if(this.view){this.view.el.removeAllListeners();this.view.el.remove();this.view.purgeListeners();}
-if(this.list){this.list.destroy();}
+if(this.forceSelection){this.on('blur',this.doForce,this);}},onDestroy:function(){if(this.view){Ext.destroy(this.view);}
+if(this.list){if(this.innerList){this.innerList.un('mouseover',this.onViewOver,this);this.innerList.un('mousemove',this.onViewMove,this);}
+this.list.destroy();}
 this.bindStore(null);Ext.form.ComboBox.superclass.onDestroy.call(this);},unsetDelayCheck:function(){delete this.delayedCheck;},fireKey:function(e){if(e.isNavKeyPress()&&!this.isExpanded()&&!this.delayedCheck){this.fireEvent("specialkey",this,e);}},onResize:function(w,h){Ext.form.ComboBox.superclass.onResize.apply(this,arguments);if(this.list&&this.listWidth===undefined){var lw=Math.max(w,this.minListWidth);this.list.setWidth(lw);this.innerList.setWidth(lw-this.list.getFrameWidth('lr'));}},onEnable:function(){Ext.form.ComboBox.superclass.onEnable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=false;}},onDisable:function(){Ext.form.ComboBox.superclass.onDisable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=true;}},setEditable:function(value){if(value==this.editable){return;}
 this.editable=value;if(!value){this.el.dom.setAttribute('readOnly',true);this.el.on('mousedown',this.onTriggerClick,this);this.el.addClass('x-combo-noedit');}else{this.el.dom.setAttribute('readOnly',false);this.el.un('mousedown',this.onTriggerClick,this);this.el.removeClass('x-combo-noedit');}},onBeforeLoad:function(){if(!this.hasFocus){return;}
 this.innerList.update(this.loadingText?'<div class="loading-indicator">'+this.loadingText+'</div>':'');this.restrictHeight();this.selectedIndex=-1;},onLoad:function(){if(!this.hasFocus){return;}
@@ -2033,15 +2085,12 @@
 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.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});}
-this.imageEl=this.innerWrap.createChild({tag:'img',src:Ext.BLANK_IMAGE_URL,cls:this.baseCls},this.el);if(this.checked){this.setValue(true);}else{this.checked=this.el.dom.checked;}
-this.originalValue=this.checked;},onDestroy:function(){if(this.rendered){Ext.destroy(this.imageEl,this.labelEl,this.innerWrap,this.wrap);}
-Ext.form.Checkbox.superclass.onDestroy.call(this);},onFocus:function(e){Ext.form.Checkbox.superclass.onFocus.call(this,e);this.el.addClass(this.focusCls);},onBlur:function(e){Ext.form.Checkbox.superclass.onBlur.call(this,e);this.el.removeClass(this.focusCls);},onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel&&!this.fieldLabel){this.el.alignTo(this.wrap,'c-c');}},onKeyUp:function(e){if(e.getKey()==Ext.EventObject.SPACE){this.onClick(e);}},onClick:function(e){if(!this.disabled&&!this.readOnly){this.toggleValue();}
-e.stopEvent();},onEnable:function(){Ext.form.Checkbox.superclass.onEnable.call(this);this.initCheckEvents();},onDisable:function(){Ext.form.Checkbox.superclass.onDisable.call(this);this.innerWrap.removeAllListeners();},toggleValue:function(){this.setValue(!this.checked);},getResizeEl:function(){if(!this.resizeEl){this.resizeEl=Ext.isSafari?this.wrap:(this.wrap.up('.x-form-element',5)||this.wrap);}
-return this.resizeEl;},getPositionEl:function(){return this.wrap;},getActionEl:function(){return this.wrap;},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,initValue:Ext.emptyFn,getValue:function(){if(this.rendered){return this.el.dom.checked;}
-return this.checked;},setValue:function(v){var checked=this.checked;this.checked=(v===true||v==='true'||v=='1'||String(v).toLowerCase()=='on');if(this.rendered){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked;this.wrap[this.checked?'addClass':'removeClass'](this.checkedCls);}
-if(checked!=this.checked){this.fireEvent("check",this,this.checked);if(this.handler){this.handler.call(this.scope||this,this,this.checked);}}}});Ext.reg('checkbox',Ext.form.Checkbox);
+Ext.form.Checkbox=Ext.extend(Ext.form.Field,{focusClass:undefined,fieldClass:"x-form-field",checked:false,defaultAutoCreate:{tag:"input",type:'checkbox',autocomplete:"off"},initComponent:function(){Ext.form.Checkbox.superclass.initComponent.call(this);this.addEvents('check');},onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel){this.el.alignTo(this.wrap,'c-c');}},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.el.on("click",this.onClick,this);this.el.on("change",this.onClick,this);},getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,onRender:function(ct,position){Ext.form.Checkbox.superclass.onRender.call(this,ct,position);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue;}
+this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:'label',htmlFor:this.el.id,cls:'x-form-cb-label',html:this.boxLabel});}
+if(this.checked){this.setValue(true);}else{this.checked=this.el.dom.checked;}},onDestroy:function(){if(this.wrap){this.wrap.remove();}
+Ext.form.Checkbox.superclass.onDestroy.call(this);},initValue:Ext.emptyFn,getValue:function(){if(this.rendered){return this.el.dom.checked;}
+return false;},onClick:function(){if(this.el.dom.checked!=this.checked){this.setValue(this.el.dom.checked);}},setValue:function(v){this.checked=(v===true||v==='true'||v=='1'||String(v).toLowerCase()=='on');if(this.el&&this.el.dom){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked;}
+this.fireEvent("check",this,this.checked);}});Ext.reg('checkbox',Ext.form.Checkbox);
 
 Ext.form.CheckboxGroup=Ext.extend(Ext.form.Field,{columns:'auto',vertical:false,allowBlank:true,blankText:"You must select at least one item in this group",defaultType:'checkbox',groupCls:'x-form-check-group',onRender:function(ct,position){if(!this.el){var panelCfg={cls:this.groupCls,layout:'column',border:false,renderTo:ct};var colCfg={defaultType:this.defaultType,layout:'form',border:false,defaults:{hideLabel:true,anchor:'100%'}}
 if(this.items[0].items){Ext.apply(panelCfg,{layoutConfig:{columns:this.items.length},defaults:this.defaults,items:this.items})
@@ -2059,7 +2108,7 @@
 Ext.form.CheckboxGroup.superclass.onRender.call(this,ct,position);},validateValue:function(value){if(!this.allowBlank){var blank=true;this.items.each(function(f){if(f.checked){return blank=false;}},this);if(blank){this.markInvalid(this.blankText);return false;}}
 return true;},onDisable:function(){this.items.each(function(item){item.disable();})},onEnable:function(){this.items.each(function(item){item.enable();})},onResize:function(w,h){this.panel.setSize(w,h);this.panel.doLayout();},reset:function(){Ext.form.CheckboxGroup.superclass.reset.call(this);this.items.each(function(c){if(c.reset){c.reset();}},this);},initValue:Ext.emptyFn,getValue:Ext.emptyFn,getRawValue:Ext.emptyFn,setValue:Ext.emptyFn,setRawValue:Ext.emptyFn});Ext.reg('checkboxgroup',Ext.form.CheckboxGroup);
 
-Ext.form.Radio=Ext.extend(Ext.form.Checkbox,{inputType:'radio',baseCls:'x-form-radio',getGroupValue:function(){var c=this.getParent().child('input[name='+this.el.dom.name+']:checked',true);return c?c.value:null;},getParent:function(){return this.el.up('form')||Ext.getBody();},toggleValue:function(){if(!this.checked){var els=this.getParent().select('input[name='+this.el.dom.name+']');els.each(function(el){if(el.dom.id==this.id){this.setValue(true);}else{Ext.getCmp(el.dom.id).setValue(false);}},this);}},setValue:function(v){if(typeof v=='boolean'){Ext.form.Radio.superclass.setValue.call(this,v);}else{var r=this.getParent().child('input[name='+this.el.dom.name+'][value='+v+']',true);if(r&&!r.checked){Ext.getCmp(r.id).toggleValue();};}},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn});Ext.reg('radio',Ext.form.Radio);
+Ext.form.Radio=Ext.extend(Ext.form.Checkbox,{inputType:'radio',markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,getGroupValue:function(){var p=this.el.up('form')||Ext.getBody();var c=p.child('input[name='+this.el.dom.name+']:checked',true);return c?c.value:null;},onClick:function(){if(this.el.dom.checked!=this.checked){var p=this.el.up('form')||Ext.getBody();var els=p.select('input[name='+this.el.dom.name+']');els.each(function(el){if(el.dom.id==this.id){this.setValue(true);}else{Ext.getCmp(el.dom.id).setValue(false);}},this);}},setValue:function(v){if(typeof v=='boolean'){Ext.form.Radio.superclass.setValue.call(this,v);}else{var r=this.el.up('form').child('input[name='+this.el.dom.name+'][value='+v+']',true);if(r){r.checked=true;};}}});Ext.reg('radio',Ext.form.Radio);
 
 Ext.form.RadioGroup=Ext.extend(Ext.form.CheckboxGroup,{allowBlank:true,blankText:"You must select one item in this group",defaultType:'radio',groupCls:'x-form-radio-group'});Ext.reg('radiogroup',Ext.form.RadioGroup);
 
@@ -2080,24 +2129,24 @@
 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,initComponent:function(){this.form=this.createForm();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';}
-Ext.FormPanel.superclass.initComponent.call(this);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);}}}
+var valid=true;this.form.items.each(function(f){if(!f.isValid(true)){valid=false;return false;}});if(this.fbar){var fitems=this.fbar.items.items;for(var i=0,len=fitems.length;i<len;i++){var btn=fitems[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;
 
 Ext.form.FieldSet=Ext.extend(Ext.Panel,{baseCls:'x-fieldset',layout:'form',onRender:function(ct,position){if(!this.el){this.el=document.createElement('fieldset');this.el.id=this.id;if(this.title||this.header||this.checkboxToggle){this.el.appendChild(document.createElement('legend')).className='x-fieldset-header';}}
 Ext.form.FieldSet.superclass.onRender.call(this,ct,position);if(this.checkboxToggle){var o=typeof this.checkboxToggle=='object'?this.checkboxToggle:{tag:'input',type:'checkbox',name:this.checkboxName||this.id+'-checkbox'};this.checkbox=this.header.insertFirst(o);this.checkbox.dom.checked=!this.collapsed;this.checkbox.on('click',this.onCheckClick,this);}},onCollapse:function(doAnim,animArg){if(this.checkbox){this.checkbox.dom.checked=false;}
 this.afterCollapse();},onExpand:function(doAnim,animArg){if(this.checkbox){this.checkbox.dom.checked=true;}
-this.afterExpand();},onCheckClick:function(){this[this.checkbox.dom.checked?'expand':'collapse']();}});Ext.reg('fieldset',Ext.form.FieldSet);
+this.afterExpand();},onCheckClick:function(){this[this.checkbox.dom.checked?'expand':'collapse']();},beforeDestroy:function(){if(this.checkbox){this.checkbox.un('click',this.onCheckClick,this);}
+Ext.form.FieldSet.superclass.beforeDestroy.call(this);}});Ext.reg('fieldset',Ext.form.FieldSet);
 
 Ext.form.HtmlEditor=Ext.extend(Ext.form.Field,{enableFormat:true,enableFontSize:true,enableColors:true,enableAlignments:true,enableLists:true,enableSourceEdit:true,enableLinks:true,enableFont:true,createLinkText:'Please enter the URL for the link:',defaultLinkValue:'http:/'+'/',fontFamilies:['Arial','Courier New','Tahoma','Times New Roman','Verdana'],defaultFont:'tahoma',validationEvent:false,deferHeight:true,initialized:false,activated:false,sourceEditMode:false,onFocus:Ext.emptyFn,iframePad:3,hideMode:'offsets',defaultAutoCreate:{tag:"textarea",style:"width:500px;height:300px;",autocomplete:"off"},initComponent:function(){this.addEvents('initialize','activate','beforesync','beforepush','sync','push','editmodechange')},createFontOptions:function(){var buf=[],fs=this.fontFamilies,ff,lc;for(var i=0,len=fs.length;i<len;i++){ff=fs[i];lc=ff.toLowerCase();buf.push('<option value="',lc,'" style="font-family:',ff,';"',(this.defaultFont==lc?' selected="true">':'>'),ff,'</option>');}
 return buf.join('');},createToolbar:function(editor){var tipsEnabled=Ext.QuickTips&&Ext.QuickTips.isEnabled();function btn(id,toggle,handler){return{itemId:id,cls:'x-btn-icon x-edit-'+id,enableToggle:toggle!==false,scope:editor,handler:handler||editor.relayBtnCmd,clickEvent:'mousedown',tooltip:tipsEnabled?editor.buttonTips[id]||undefined:undefined,tabIndex:-1};}
 var tb=new Ext.Toolbar({renderTo:this.wrap.dom.firstChild});tb.el.on('click',function(e){e.preventDefault();});if(this.enableFont&&!Ext.isSafari2){this.fontSelect=tb.el.createChild({tag:'select',cls:'x-font-select',html:this.createFontOptions()});this.fontSelect.on('change',function(){var font=this.fontSelect.dom.value;this.relayCmd('fontname',font);this.deferFocus();},this);tb.add(this.fontSelect.dom,'-');};if(this.enableFormat){tb.add(btn('bold'),btn('italic'),btn('underline'));};if(this.enableFontSize){tb.add('-',btn('increasefontsize',false,this.adjustFont),btn('decreasefontsize',false,this.adjustFont));};if(this.enableColors){tb.add('-',{itemId:'forecolor',cls:'x-btn-icon x-edit-forecolor',clickEvent:'mousedown',tooltip:tipsEnabled?editor.buttonTips['forecolor']||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({allowReselect:true,focus:Ext.emptyFn,value:'000000',plain:true,selectHandler:function(cp,color){this.execCmd('forecolor',Ext.isSafari||Ext.isIE?'#'+color:color);this.deferFocus();},scope:this,clickEvent:'mousedown'})},{itemId:'backcolor',cls:'x-btn-icon x-edit-backcolor',clickEvent:'mousedown',tooltip:tipsEnabled?editor.buttonTips['backcolor']||undefined:undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({focus:Ext.emptyFn,value:'FFFFFF',plain:true,allowReselect:true,selectHandler:function(cp,color){if(Ext.isGecko){this.execCmd('useCSS',false);this.execCmd('hilitecolor',color);this.execCmd('useCSS',true);this.deferFocus();}else{this.execCmd(Ext.isOpera?'hilitecolor':'backcolor',Ext.isSafari||Ext.isIE?'#'+color:color);this.deferFocus();}},scope:this,clickEvent:'mousedown'})});};if(this.enableAlignments){tb.add('-',btn('justifyleft'),btn('justifycenter'),btn('justifyright'));};if(!Ext.isSafari2){if(this.enableLinks){tb.add('-',btn('createlink',false,this.createLink));};if(this.enableLists){tb.add('-',btn('insertorderedlist'),btn('insertunorderedlist'));}
 if(this.enableSourceEdit){tb.add('-',btn('sourceedit',true,function(btn){this.toggleSourceEdit(btn.pressed);}));}}
 this.tb=tb;},getDocMarkup:function(){return'<html><head><style type="text/css">body{border:0;margin:0;padding:3px;height:98%;cursor:text;}</style></head><body></body></html>';},getEditorBody:function(){return this.doc.body||this.doc.documentElement;},getDoc:function(){return Ext.isIE?this.getWin().document:(this.iframe.contentDocument||this.getWin().document);},getWin:function(){return Ext.isIE?this.iframe.contentWindow:window.frames[this.iframe.name];},onRender:function(ct,position){Ext.form.HtmlEditor.superclass.onRender.call(this,ct,position);this.el.dom.style.border='0 none';this.el.dom.setAttribute('tabIndex',-1);this.el.addClass('x-hidden');if(Ext.isIE){this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')}
-this.wrap=this.el.wrap({cls:'x-html-editor-wrap',cn:{cls:'x-html-editor-tb'}});this.createToolbar(this);this.tb.items.each(function(item){if(item.itemId!='sourceedit'){item.disable();}});this.tb.doLayout();var iframe=document.createElement('iframe');iframe.name=Ext.id();iframe.frameBorder='0';iframe.src=Ext.isIE?Ext.SSL_SECURE_URL:"javascript:;";this.wrap.dom.appendChild(iframe);this.iframe=iframe;this.initFrame();if(this.autoMonitorDesignMode!==false){this.monitorTask=Ext.TaskMgr.start({run:this.checkDesignMode,scope:this,interval:100});}
-if(!this.width){var sz=this.el.getSize();this.setSize(sz.width,this.height||sz.height);}},initFrame:function(){this.doc=this.getDoc();this.win=this.getWin();this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var task={run:function(){if(this.doc.body||this.doc.readyState=='complete'){Ext.TaskMgr.stop(task);this.doc.designMode="on";this.initEditor.defer(10,this);}},interval:10,duration:10000,scope:this};Ext.TaskMgr.start(task);},checkDesignMode:function(){if(this.wrap&&this.wrap.dom.offsetWidth){var doc=this.getDoc();if(!doc){return;}
+this.wrap=this.el.wrap({cls:'x-html-editor-wrap',cn:{cls:'x-html-editor-tb'}});this.createToolbar(this);this.tb.items.each(function(item){if(item.itemId!='sourceedit'){item.disable();}});this.tb.doLayout();this.createIFrame();if(!this.width){var sz=this.el.getSize();this.setSize(sz.width,this.height||sz.height);}},createIFrame:function(){var iframe=document.createElement('iframe');iframe.name=Ext.id();iframe.frameBorder='0';iframe.src=Ext.isIE?Ext.SSL_SECURE_URL:"javascript:;";this.wrap.dom.appendChild(iframe);this.iframe=iframe;this.initFrame();if(this.autoMonitorDesignMode!==false){this.monitorTask=Ext.TaskMgr.start({run:this.checkDesignMode,scope:this,interval:100});}},initFrame:function(){this.doc=this.getDoc();this.win=this.getWin();this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var task={run:function(){if(this.doc.body||this.doc.readyState=='complete'){Ext.TaskMgr.stop(task);this.doc.designMode="on";this.initEditor.defer(10,this);}},interval:10,duration:10000,scope:this};Ext.TaskMgr.start(task);},checkDesignMode:function(){if(this.wrap&&this.wrap.dom.offsetWidth){var doc=this.getDoc();if(!doc){return;}
 if(!doc.editorInitialized||String(doc.designMode).toLowerCase()!='on'){this.initFrame();}}},onResize:function(w,h){Ext.form.HtmlEditor.superclass.onResize.apply(this,arguments);if(this.el&&this.iframe){if(typeof w=='number'){var aw=w-this.wrap.getFrameWidth('lr');this.el.setWidth(this.adjustWidth('textarea',aw));this.iframe.style.width=aw+'px';}
 if(typeof h=='number'){var ah=h-this.wrap.getFrameWidth('tb')-this.tb.el.getHeight();this.el.setHeight(this.adjustWidth('textarea',ah));this.iframe.style.height=ah+'px';if(this.doc){this.getEditorBody().style.height=(ah-(this.iframePad*2))+'px';}}}},toggleSourceEdit:function(sourceEditMode){if(sourceEditMode===undefined){sourceEditMode=!this.sourceEditMode;}
 this.sourceEditMode=sourceEditMode===true;var btn=this.tb.items.get('sourceedit');if(btn.pressed!==this.sourceEditMode){btn.toggle(this.sourceEditMode);return;}
@@ -2132,7 +2181,7 @@
 if(!this.store){var min=this.parseDate(this.minValue);if(!min){min=new Date(this.initDate).clearTime();}
 var max=this.parseDate(this.maxValue);if(!max){max=new Date(this.initDate).clearTime().add('mi',(24*60)-1);}
 var times=[];while(min<=max){times.push([min.dateFormat(this.format)]);min=min.add('mi',this.increment);}
-this.store=new Ext.data.SimpleStore({fields:['text'],data:times});this.displayField='text';}},getValue:function(){var v=Ext.form.TimeField.superclass.getValue.call(this);return this.formatDate(this.parseDate(v))||'';},setValue:function(value){Ext.form.TimeField.superclass.setValue.call(this,this.formatDate(this.parseDate(value)));},validateValue:Ext.form.DateField.prototype.validateValue,parseDate:Ext.form.DateField.prototype.parseDate,formatDate:Ext.form.DateField.prototype.formatDate,beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v.dateFormat(this.format));}}});Ext.reg('timefield',Ext.form.TimeField);
+this.store=new Ext.data.ArrayStore({fields:['text'],data:times});this.displayField='text';}},getValue:function(){var v=Ext.form.TimeField.superclass.getValue.call(this);return this.formatDate(this.parseDate(v))||'';},setValue:function(value){Ext.form.TimeField.superclass.setValue.call(this,this.formatDate(this.parseDate(value)));},validateValue:Ext.form.DateField.prototype.validateValue,parseDate:Ext.form.DateField.prototype.parseDate,formatDate:Ext.form.DateField.prototype.formatDate,beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v.dateFormat(this.format));}}});Ext.reg('timefield',Ext.form.TimeField);
 
 Ext.form.Label=Ext.extend(Ext.BoxComponent,{onRender:function(ct,position){if(!this.el){this.el=document.createElement('label');this.el.id=this.getId();this.el.innerHTML=this.text?Ext.util.Format.htmlEncode(this.text):(this.html||'');if(this.forId){this.el.setAttribute('for',this.forId);}}
 Ext.form.Label.superclass.onRender.call(this,ct,position);},setText:function(t,encode){this.text=t;if(this.rendered){this.el.dom.innerHTML=encode!==false?Ext.util.Format.htmlEncode(t):t;}
@@ -2158,8 +2207,8 @@
 if(this.cm){this.colModel=this.cm;delete this.cm;}
 if(this.sm){this.selModel=this.sm;delete this.sm;}
 this.store=Ext.StoreMgr.lookup(this.store);this.addEvents("click","dblclick","contextmenu","mousedown","mouseup","mouseover","mouseout","keypress","keydown","cellmousedown","rowmousedown","headermousedown","cellclick","celldblclick","rowclick","rowdblclick","headerclick","headerdblclick","rowcontextmenu","cellcontextmenu","headercontextmenu","bodyscroll","columnresize","columnmove","sortchange");},onRender:function(ct,position){Ext.grid.GridPanel.superclass.onRender.apply(this,arguments);var c=this.body;this.el.addClass('x-grid-panel');var view=this.getView();view.init(this);c.on("mousedown",this.onMouseDown,this);c.on("click",this.onClick,this);c.on("dblclick",this.onDblClick,this);c.on("contextmenu",this.onContextMenu,this);c.on("keydown",this.onKeyDown,this);this.relayEvents(c,["mousedown","mouseup","mouseover","mouseout","keypress"]);this.getSelectionModel().init(this);this.view.render();},initEvents:function(){Ext.grid.GridPanel.superclass.initEvents.call(this);if(this.loadMask){this.loadMask=new Ext.LoadMask(this.bwrap,Ext.apply({store:this.store},this.loadMask));}},initStateEvents:function(){Ext.grid.GridPanel.superclass.initStateEvents.call(this);this.colModel.on('hiddenchange',this.saveState,this,{delay:100});},applyState:function(state){var cm=this.colModel;var cs=state.columns;if(cs){for(var i=0,len=cs.length;i<len;i++){var s=cs[i];var c=cm.getColumnById(s.id);if(c){c.hidden=s.hidden;c.width=s.width;var oldIndex=cm.getIndexById(s.id);if(oldIndex!=i){cm.moveColumn(oldIndex,i);}}}}
-if(state.sort){this.store[this.store.remoteSort?'setDefaultSort':'sort'](state.sort.field,state.sort.direction);}},getState:function(){var o={columns:[]};for(var i=0,c;c=this.colModel.config[i];i++){o.columns[i]={id:c.id,width:c.width};if(c.hidden){o.columns[i].hidden=true;}}
-var ss=this.store.getSortState();if(ss){o.sort=ss;}
+if(state.sort&&this.store){this.store[this.store.remoteSort?'setDefaultSort':'sort'](state.sort.field,state.sort.direction);}},getState:function(){var o={columns:[]};for(var i=0,c;c=this.colModel.config[i];i++){o.columns[i]={id:c.id,width:c.width};if(c.hidden){o.columns[i].hidden=true;}}
+if(this.store){var ss=this.store.getSortState();if(ss){o.sort=ss;}}
 return o;},afterRender:function(){Ext.grid.GridPanel.superclass.afterRender.call(this);this.view.layout();if(this.deferRowRender){this.view.afterRender.defer(10,this.view);}else{this.view.afterRender();}
 this.viewReady=true;},reconfigure:function(store,colModel){if(this.loadMask){this.loadMask.destroy();this.loadMask=new Ext.LoadMask(this.bwrap,Ext.apply({store:store},this.initialConfig.loadMask));}
 this.view.bind(store,colModel);this.store=store;this.colModel=colModel;if(this.rendered){this.view.refresh(true);}},onKeyDown:function(e){this.fireEvent("keydown",e);},onDestroy:function(){if(this.rendered){if(this.loadMask){this.loadMask.destroy();}
@@ -2177,7 +2226,7 @@
 return this.selModel;},getStore:function(){return this.store;},getColumnModel:function(){return this.colModel;},getView:function(){if(!this.view){this.view=new Ext.grid.GridView(this.viewConfig);}
 return this.view;},getDragDropText:function(){var count=this.selModel.getCount();return String.format(this.ddText,count,count==1?'':'s');}});Ext.reg('grid',Ext.grid.GridPanel);
 
-Ext.grid.GridView=function(config){Ext.apply(this,config);this.addEvents("beforerowremoved","beforerowsinserted","beforerefresh","rowremoved","rowsinserted","rowupdated","refresh");Ext.grid.GridView.superclass.constructor.call(this);};Ext.extend(Ext.grid.GridView,Ext.util.Observable,{deferEmptyText:true,scrollOffset:19,autoFill:false,forceFit:false,sortClasses:["sort-asc","sort-desc"],sortAscText:"Sort Ascending",sortDescText:"Sort Descending",columnsText:"Columns",selectedRowClass:"x-grid3-row-selected",borderWidth:2,tdClass:'x-grid3-cell',hdCls:'x-grid3-hd',cellSelectorDepth:4,rowSelectorDepth:10,cellSelector:'td.x-grid3-cell',rowSelector:'div.x-grid3-row',initTemplates:function(){var ts=this.templates||{};if(!ts.master){ts.master=new Ext.Template('<div class="x-grid3" hidefocus="true">','<div class="x-grid3-viewport">','<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset">{header}</div></div><div class="x-clear"></div></div>','<div class="x-grid3-scroller"><div class="x-grid3-body">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>',"</div>",'<div class="x-grid3-resize-marker">&#160;</div>','<div class="x-grid3-resize-proxy">&#160;</div>',"</div>");}
+Ext.grid.GridView=function(config){Ext.apply(this,config);this.addEvents("beforerowremoved","beforerowsinserted","beforerefresh","rowremoved","rowsinserted","rowupdated","refresh");Ext.grid.GridView.superclass.constructor.call(this);};Ext.extend(Ext.grid.GridView,Ext.util.Observable,{deferEmptyText:true,scrollOffset:19,autoFill:false,forceFit:false,sortClasses:["sort-asc","sort-desc"],sortAscText:"Sort Ascending",sortDescText:"Sort Descending",columnsText:"Columns",selectedRowClass:"x-grid3-row-selected",borderWidth:2,tdClass:'x-grid3-cell',hdCls:'x-grid3-hd',markDirty:true,cellSelectorDepth:4,rowSelectorDepth:10,cellSelector:'td.x-grid3-cell',rowSelector:'div.x-grid3-row',initTemplates:function(){var ts=this.templates||{};if(!ts.master){ts.master=new Ext.Template('<div class="x-grid3" hidefocus="true">','<div class="x-grid3-viewport">','<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset">{header}</div></div><div class="x-clear"></div></div>','<div class="x-grid3-scroller"><div class="x-grid3-body">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>',"</div>",'<div class="x-grid3-resize-marker">&#160;</div>','<div class="x-grid3-resize-proxy">&#160;</div>',"</div>");}
 if(!ts.header){ts.header=new Ext.Template('<table border="0" cellspacing="0" cellpadding="0" style="{tstyle}">','<thead><tr class="x-grid3-hd-row">{cells}</tr></thead>',"</table>");}
 if(!ts.hcell){ts.hcell=new Ext.Template('<td class="x-grid3-hd x-grid3-cell x-grid3-td-{id}" style="{style}"><div {tooltip} {attr} class="x-grid3-hd-inner x-grid3-hd-{id}" unselectable="on" style="{istyle}">',this.grid.enableHdMenu?'<a class="x-grid3-hd-btn" href="#"></a>':'','{value}<img class="x-grid3-sort-icon" src="',Ext.BLANK_IMAGE_URL,'" />',"</div></td>");}
 if(!ts.body){ts.body=new Ext.Template('{rows}');}
@@ -2191,13 +2240,13 @@
 return this.fly(el).findParent(this.cellSelector,this.cellSelectorDepth);},findCellIndex:function(el,requiredCls){var cell=this.findCell(el);if(cell&&(!requiredCls||this.fly(cell).hasClass(requiredCls))){return this.getCellIndex(cell);}
 return false;},getCellIndex:function(el){if(el){var m=el.className.match(this.colRe);if(m&&m[1]){return this.cm.getIndexById(m[1]);}}
 return false;},findHeaderCell:function(el){var cell=this.findCell(el);return cell&&this.fly(cell).hasClass(this.hdCls)?cell:null;},findHeaderIndex:function(el){return this.findCellIndex(el,this.hdCls);},findRow:function(el){if(!el){return false;}
-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.focusRow(row);},removeRows:function(firstRow,lastRow){var bd=this.mainBody.dom;for(var rowIndex=firstRow;rowIndex<=lastRow;rowIndex++){Ext.removeNode(bd.childNodes[firstRow]);}
-this.focusRow(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);}
+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;}
-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';}
+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(this.markDirty&&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";}
 if(r.dirty){alt[1]=" x-grid3-dirty-row";}
@@ -2205,35 +2254,39 @@
 rp.alt=alt.join(" ");rp.cells=cb.join("");buf[buf.length]=rt.apply(rp);}
 return buf.join("");},processRows:function(startRow,skipStripe){if(this.ds.getCount()<1){return;}
 skipStripe=skipStripe||!this.grid.stripeRows;startRow=startRow||0;var rows=this.getRows();var cls=' x-grid3-row-alt ';for(var i=startRow,len=rows.length;i<len;i++){var row=rows[i];row.rowIndex=i;if(!skipStripe){var isAlt=((i+1)%2==0);var hasAlt=(' '+row.className+' ').indexOf(cls)!=-1;if(isAlt==hasAlt){continue;}
-if(isAlt){row.className+=" x-grid3-row-alt";}else{row.className=row.className.replace("x-grid3-row-alt","");}}}},afterRender:function(){this.mainBody.dom.innerHTML=this.renderRows();this.processRows(0,true);if(this.deferEmptyText!==true){this.applyEmptyText();}},renderUI:function(){var header=this.renderHeaders();var body=this.templates.body.apply({rows:''});var html=this.templates.master.apply({body:body,header:header});var g=this.grid;g.getGridEl().dom.innerHTML=html;this.initElements();Ext.fly(this.innerHd).on("click",this.handleHdDown,this);this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("mousemove",this.handleHdMove,this);this.scroller.on('scroll',this.syncScroll,this);if(g.enableColumnResize!==false){this.splitone=new Ext.grid.GridView.SplitDragZone(g,this.mainHd.dom);}
+if(isAlt){row.className+=" x-grid3-row-alt";}else{row.className=row.className.replace("x-grid3-row-alt","");}}}},afterRender:function(){if(!this.ds||!this.cm){return;}
+this.mainBody.dom.innerHTML=this.renderRows();this.processRows(0,true);if(this.deferEmptyText!==true){this.applyEmptyText();}},renderUI:function(){var header=this.renderHeaders();var body=this.templates.body.apply({rows:''});var html=this.templates.master.apply({body:body,header:header});var g=this.grid;g.getGridEl().dom.innerHTML=html;this.initElements();Ext.fly(this.innerHd).on("click",this.handleHdDown,this);this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("mousemove",this.handleHdMove,this);this.scroller.on('scroll',this.syncScroll,this);if(g.enableColumnResize!==false){this.splitone=new Ext.grid.GridView.SplitDragZone(g,this.mainHd.dom);}
 if(g.enableColumnMove){this.columnDrag=new Ext.grid.GridView.ColumnDragZone(g,this.innerHd);this.columnDrop=new Ext.grid.HeaderDropZone(g,this.mainHd.dom);}
 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(g.autoHeight){this.scroller.dom.style.overflow='visible';if(Ext.isSafari){this.scroller.dom.style.position='static';}}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){row=Math.min(row,Math.max(0,this.getRows().length-1));var xy=this.ensureVisible(row,col,hscroll);this.focusEl.setXY(xy||this.scroller.getXY());if(Ext.isGecko){this.focusEl.focus();}else{this.focusEl.focus.defer(1,this.focusEl);}},ensureVisible:function(row,col,hscroll){if(typeof row!="number"){row=row.rowIndex;}
-if(!this.ds){return;}
-if(row<0||row>=this.ds.getCount()){return;}
+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;}
+if(!this.ds){return null;}
+if(row<0||row>=this.ds.getCount()){return null;}
 col=(col!==undefined?col:0);var rowEl=this.getRow(row),cellEl;if(!(hscroll===false&&col===0)){while(this.cm.isHidden(col)){col++;}
 cellEl=this.getCell(row,col);}
-if(!rowEl){return;}
-var c=this.scroller.dom;var ctop=0;var p=rowEl,stop=this.el.dom;while(p&&p!=stop){ctop+=p.offsetTop;p=p.offsetParent;}
+return{row:rowEl,cell:cellEl};},getResolvedXY:function(resolved){if(!resolved){return null;}
+var s=this.scroller.dom,c=resolved.cell,r=resolved.row;return c?Ext.fly(c).getXY():[s.scrollLeft+this.el.getX(),Ext.fly(r).getY()];},syncFocusEl:function(row,col,hscroll){var xy=row;if(!Ext.isArray(xy)){row=Math.min(row,Math.max(0,this.getRows().length-1));xy=this.getResolvedXY(this.resolveCell(row,col,hscroll));}
+this.focusEl.setXY(xy||this.scroller.getXY());},ensureVisible:function(row,col,hscroll){var resolved=this.resolveCell(row,col,hscroll);if(!resolved||!resolved.row){return;}
+var rowEl=resolved.row,cellEl=resolved.cell;var c=this.scroller.dom;var ctop=0;var p=rowEl,stop=this.el.dom;while(p&&p!=stop){ctop+=p.offsetTop;p=p.offsetParent;}
 ctop-=this.mainHd.dom.offsetHeight;var cbot=ctop+rowEl.offsetHeight;var ch=c.clientHeight;var stop=parseInt(c.scrollTop,10);var sbot=stop+ch;if(ctop<stop){c.scrollTop=ctop;}else if(cbot>sbot){c.scrollTop=cbot-ch;}
 if(hscroll!==false){var cleft=parseInt(cellEl.offsetLeft,10);var cright=cleft+cellEl.offsetWidth;var sleft=parseInt(c.scrollLeft,10);var sright=sleft+c.clientWidth;if(cleft<sleft){c.scrollLeft=cleft;}else if(cright>sright){c.scrollLeft=cright-c.clientWidth;}}
-return cellEl?Ext.fly(cellEl).getXY():[c.scrollLeft+this.el.getX(),Ext.fly(rowEl).getY()];},insertRows:function(dm,firstRow,lastRow,isUpdate){if(!isUpdate&&firstRow===0&&lastRow>=dm.getCount()-1){this.refresh();}else{if(!isUpdate){this.fireEvent("beforerowsinserted",this,firstRow,lastRow);}
+return this.getResolvedXY(resolved);},insertRows:function(dm,firstRow,lastRow,isUpdate){if(!isUpdate&&firstRow===0&&lastRow>=dm.getCount()-1){this.refresh();}else{if(!isUpdate){this.fireEvent("beforerowsinserted",this,firstRow,lastRow);}
 var html=this.renderRows(firstRow,lastRow);var before=this.getRow(firstRow);if(before){Ext.DomHelper.insertHtml('beforeBegin',before,html);}else{Ext.DomHelper.insertHtml('beforeEnd',this.mainBody.dom,html);}
 if(!isUpdate){this.fireEvent("rowsinserted",this,firstRow,lastRow);this.processRows(firstRow);}}
-this.focusRow(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;';}
+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;}}
@@ -2243,26 +2296,26 @@
 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){this.colMenu.removeAll();Ext.menu.MenuMgr.unregister(this.colMenu);this.colMenu.getEl().remove();delete this.colMenu;}
-if(this.hmenu){this.hmenu.removeAll();Ext.menu.MenuMgr.unregister(this.hmenu);this.hmenu.getEl().remove();delete this.hmenu;}
+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;}
+if(this.hmenu){Ext.menu.MenuMgr.unregister(this.hmenu);this.hmenu.destroy();delete this.hmenu;}
 if(this.grid.enableColumnMove){var dds=Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];if(dds){for(var dd in dds){if(!dds[dd].config.isTarget&&dds[dd].dragElId){var elid=dds[dd].dragElId;dds[dd].unreg();Ext.get(elid).remove();}else if(dds[dd].config.isTarget){dds[dd].proxyTop.remove();dds[dd].proxyBottom.remove();dds[dd].unreg();}
 if(Ext.dd.DDM.locationCache[dd]){delete Ext.dd.DDM.locationCache[dd];}}
 delete Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];}}
-Ext.destroy(this.resizeMarker,this.resizeProxy);if(this.dragZone){this.dragZone.unreg();}
-this.initData(null,null);Ext.EventManager.removeResizeListener(this.onWindowResize,this);},onDenyColumnHide:function(){},render:function(){if(this.autoFill){this.fitColumns(true,true);}else if(this.forceFit){this.fitColumns(true,false);}else if(this.grid.autoExpandColumn){this.autoExpand(true);}
+if(this.dragZone){this.dragZone.unreg();}
+Ext.fly(this.innerHd).removeAllListeners();Ext.removeNode(this.innerHd);Ext.destroy(this.resizeMarker,this.resizeProxy,this.focusEl,this.mainBody,this.scroller,this.mainHd,this.mainWrap,this.dragZone,this.splitone,this.columnDrag,this.columnDrop);this.initData(null,null);Ext.EventManager.removeResizeListener(this.onWindowResize,this);},onDenyColumnHide:function(){},render:function(){if(this.autoFill){this.fitColumns(true,true);}else if(this.forceFit){this.fitColumns(true,false);}else if(this.grid.autoExpandColumn){this.autoExpand(true);}
 this.renderUI();},initData:function(ds,cm){if(this.ds){this.ds.un("load",this.onLoad,this);this.ds.un("datachanged",this.onDataChange,this);this.ds.un("add",this.onAdd,this);this.ds.un("remove",this.onRemove,this);this.ds.un("update",this.onUpdate,this);this.ds.un("clear",this.onClear,this);}
 if(ds){ds.on("load",this.onLoad,this);ds.on("datachanged",this.onDataChange,this);ds.on("add",this.onAdd,this);ds.on("remove",this.onRemove,this);ds.on("update",this.onUpdate,this);ds.on("clear",this.onClear,this);}
 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.focusRow(0);},onClear:function(){this.refresh();this.focusRow(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.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);},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);}});
@@ -2311,11 +2364,9 @@
 return{grid:this.grid,ddel:this.ddel,rowIndex:rowIndex,selections:sm.getSelections()};}
 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){this.defaultWidth=100;this.defaultSortable=false;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,{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.config=config;this.lookup={};for(var i=0,len=config.length;i<len;i++){var c=config[i];if(typeof c.renderer=="string"){c.renderer=Ext.util.Format[c.renderer];}
-if(typeof c.id=="undefined"){c.id='xgc'+i;}
-if(c.editor&&c.editor.isFormField){c.editor=new Ext.grid.GridEditor(c.editor);}
+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;},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;}}
 return-1;},moveColumn:function(oldIndex,newIndex){var c=this.config[oldIndex];this.config.splice(oldIndex,1);this.config.splice(newIndex,0,c);this.dataMap=null;this.fireEvent("columnmoved",this,oldIndex,newIndex);},isLocked:function(colIndex){return this.config[colIndex].locked===true;},setLocked:function(colIndex,value,suppressEvent){if(this.isLocked(colIndex)==value){return;}
@@ -2327,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;}});
@@ -2365,8 +2416,9 @@
 this.on("celldblclick",this.onCellDblClick,this);}
 this.getGridEl().addClass("xedit-grid");},onCellDblClick:function(g,row,col){this.startEditing(row,col);},onAutoEditClick:function(e,t){if(e.button!==0){return;}
 var row=this.view.findRowIndex(t);var col=this.view.findCellIndex(t);if(row!==false&&col!==false){this.stopEditing();if(this.selModel.getSelectedCell){var sc=this.selModel.getSelectedCell();if(sc&&sc.cell[0]===row&&sc.cell[1]===col){this.startEditing(row,col);}}else{if(this.selModel.isSelected(row)){this.startEditing(row,col);}}}},onEditComplete:function(ed,value,startValue){this.editing=false;this.activeEditor=null;ed.un("specialkey",this.selModel.onEditorKey,this.selModel);var r=ed.record;var field=this.colModel.getDataIndex(ed.col);value=this.postEditValue(value,startValue,r,field);if(String(value)!==String(startValue)){var e={grid:this,record:r,field:field,originalValue:startValue,value:value,row:ed.row,column:ed.col,cancel:false};if(this.fireEvent("validateedit",e)!==false&&!e.cancel){r.set(field,e.value);delete e.cancel;this.fireEvent("afteredit",e);}}
-this.view.focusCell(ed.row,ed.col);},startEditing:function(row,col){this.stopEditing();if(this.colModel.isCellEditable(col,row)){this.view.ensureVisible(row,col,true);var r=this.store.getAt(row);var field=this.colModel.getDataIndex(col);var e={grid:this,record:r,field:field,value:r.data[field],row:row,column:col,cancel:false};if(this.fireEvent("beforeedit",e)!==false&&!e.cancel){this.editing=true;var ed=this.colModel.getCellEditor(col,row);if(!ed.rendered){ed.render(this.view.getEditorParent(ed));}
-(function(){ed.row=row;ed.col=col;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);}).defer(50,this);}}},preEditValue:function(r,field){var value=r.data[field];return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlDecode(value):value;},postEditValue:function(value,originalValue,r,field){return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlEncode(value):value;},stopEditing:function(cancel){if(this.activeEditor){this.activeEditor[cancel===true?'cancelEdit':'completeEdit']();}
+this.view.focusCell(ed.row,ed.col);},startEditing:function(row,col){this.stopEditing();if(this.colModel.isCellEditable(col,row)){this.view.ensureVisible(row,col,true);var r=this.store.getAt(row);var field=this.colModel.getDataIndex(col);var e={grid:this,record:r,field:field,value:r.data[field],row:row,column:col,cancel:false};if(this.fireEvent("beforeedit",e)!==false&&!e.cancel){this.editing=true;var ed=this.colModel.getCellEditor(col,row);if(!ed){return;}
+if(!ed.rendered){ed.render(this.view.getEditorParent(ed));}
+(function(){ed.row=row;ed.col=col;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);}).defer(50,this);}}},preEditValue:function(r,field){var value=r.data[field];return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlDecode(value):value;},postEditValue:function(value,originalValue,r,field){return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlEncode(value):value;},stopEditing:function(cancel){if(this.activeEditor){this.activeEditor[cancel===true?'cancelEdit':'completeEdit']();}
 this.activeEditor=null;},onDestroy:function(){if(this.rendered){var cols=this.colModel.config;for(var i=0,len=cols.length;i<len;i++){var c=cols[i];Ext.destroy(c.editor);}}
 Ext.grid.EditorGridPanel.superclass.onDestroy.call(this);}});Ext.reg('editorgrid',Ext.grid.EditorGridPanel);
 
@@ -2379,11 +2431,16 @@
 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&&this.editor.isFormField){this.editor=new Ext.grid.GridEditor(this.editor);}}
-Ext.grid.Column.AUTO_ID=0;Ext.grid.Column.prototype={renderer:function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
-return value;}};
+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;},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,{trueText:'true',falseText:'false',undefinedText:'&#160;',constructor:function(cfg){this.supr().constructor.apply(this,arguments);var t=this.trueText,f=this.falseText,u=this.undefinedText;this.renderer=function(v){if(v===undefined){return u;}
+if(!v||v==='false'){return f;}
+return t;};}});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};
 
 Ext.grid.RowNumberer=function(config){Ext.apply(this,config);if(this.rowspan){this.renderer=this.renderer.createDelegate(this);}};Ext.grid.RowNumberer.prototype={header:"",width:23,sortable:false,fixed:true,menuDisabled:true,dataIndex:'',id:'numberer',rowspan:undefined,renderer:function(v,p,record,rowIndex){if(this.rowspan){p.cellAttr='rowspan="'+this.rowspan+'"';}
 return rowIndex+1;}};
@@ -2518,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);}

Modified: mickael/trunk/ext/v3.0.0-a1/ext-core-debug.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/ext-core-debug.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/ext-core-debug.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,8 +6,6 @@
  * http://extjs.com/license
  */
 
-
-
 
 Ext.DomHelper = function(){
     var tempTableEl = null;
@@ -341,8 +339,6 @@
     };
 }();
 
-
-
 
 Ext.Template = function(html){
     var a = arguments;
@@ -499,8 +495,6 @@
 };
 
 
-
-
 Ext.DomQuery = function(){
     var cache = {}, simpleCache = {}, valueCache = {};
     var nonSpace = /\S/;
@@ -1188,8 +1182,6 @@
 
 Ext.query = Ext.DomQuery.select;
 
-
-
 
 Ext.util.Observable = function(){
     
@@ -1197,18 +1189,36 @@
         this.on(this.listeners);
         delete this.listeners;
     }
+    if(!this.events){
+        this.events = {};
+    }
 };
 Ext.util.Observable.prototype = {
     
     fireEvent : function(){
+        var a = Array.prototype.slice.call(arguments, 0);
+        var ename = a[0];
+        if(ename === true){
+            a.shift();
+            var c = this;
+            while(c){
+                if(c.fireEvent.apply(c, a) === false){
+                    return false;
+                }
+                c = c.getBubbleTarget ? c.getBubbleTarget() : null;
+            }
+            return true;
+        }
         if(this.eventsSuspended === true){
-            if (this.suspendedEventsQueue) {
-                this.suspendedEventsQueue.push(arguments);
+            var q = this.suspendedEventsQueue;
+            if (q) {
+                q[q.length] = a;
             }
         } else {
-            var ce = this.events[arguments[0].toLowerCase()];
+            var ce = this.events[ename.toLowerCase()];
             if(typeof ce == "object"){
-                return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));
+                a.shift();
+                return ce.fire.apply(ce, a);
             }
         }
         return true;
@@ -1451,6 +1461,14 @@
         };
     };
 
+    var createTargeted = function(h, o, scope){
+        return function(){
+            if(o.target == arguments[0]){
+                h.apply(scope, Array.prototype.slice.call(arguments, 0));
+            }
+        };
+    };
+
     Ext.util.Event = function(obj, name){
         this.name = name;
         this.obj = obj;
@@ -1476,6 +1494,9 @@
             scope = scope || this.obj;
             var l = {fn: fn, scope: scope, options: o};
             var h = fn;
+            if(o.target){
+                h = createTargeted(h, o, scope);
+            }
             if(o.delay){
                 h = createDelayed(h, o, scope);
             }
@@ -1541,8 +1562,6 @@
         }
     };
 })();
-
-
 
 Ext.EventManager = function(){
     var docReadyEvent, docReadyProcId, docReadyState = false;
@@ -1704,6 +1723,14 @@
         };
     };
 
+    var createTargeted = function(h, o){
+        return function(){
+            if(o.target == Ext.EventObject.setEvent(arguments[0]).target){
+                h.apply(this, Array.prototype.slice.call(arguments, 0));
+            }
+        };
+    };
+
     var listen = function(element, ename, opt, fn, scope){
         var o = (!opt || typeof opt == "boolean") ? {} : opt;
         fn = fn || o.fn; scope = scope || o.scope;
@@ -1742,6 +1769,9 @@
 
             fn.call(scope || el, e, t, o);
         };
+        if(o.target){
+            h = createTargeted(h, o);
+        }
         if(o.delay){
             h = createDelayed(h, o);
         }
@@ -1808,13 +1838,16 @@
             docReadyEvent.addListener(fn, scope, options);
         },
 
+        // private
+        doResizeEvent: function(){
+            resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
+        },
         
+        
         onWindowResize : function(fn, scope, options){
             if(!resizeEvent){
                 resizeEvent = new Ext.util.Event();
-                resizeTask = new Ext.util.DelayedTask(function(){
-                    resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
-                });
+                resizeTask = new Ext.util.DelayedTask(this.doResizeEvent);
                 E.on(window, "resize", this.fireWindowResize, this);
             }
             resizeEvent.addListener(fn, scope, options);
@@ -1886,10 +1919,11 @@
         var bd = document.body || document.getElementsByTagName('body')[0];
         if(!bd){ return false; }
         var cls = [' ',
-                Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : 'ext-ie7')
+                Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : (Ext.isIE7 ? 'ext-ie7' : 'ext-ie8'))
                 : Ext.isGecko ? "ext-gecko " + (Ext.isGecko2 ? 'ext-gecko2' : 'ext-gecko3')
                 : Ext.isOpera ? "ext-opera"
-                : Ext.isSafari ? "ext-safari" : ""];
+                : Ext.isSafari ? "ext-safari"
+                : Ext.isChrome ? "ext-chrome" : ""];
 
         if(Ext.isMac){
             cls.push("ext-mac");
@@ -2292,8 +2326,6 @@
 
     return new Ext.EventObjectImpl();
 }();
-
-
 
 (function(){
 var D = Ext.lib.Dom;
@@ -2848,13 +2880,13 @@
         var w, h, d = this.dom, s = d.style;
         if(s.width && s.width != 'auto'){
             w = parseInt(s.width, 10);
-            if(Ext.isBorderBox){
+            if(this.isBorderBox()){
                w -= this.getFrameWidth('lr');
             }
         }
         if(s.height && s.height != 'auto'){
             h = parseInt(s.height, 10);
-            if(Ext.isBorderBox){
+            if(this.isBorderBox()){
                h -= this.getFrameWidth('tb');
             }
         }
@@ -3349,7 +3381,7 @@
 
     
     getFrameWidth : function(sides, onlyContentBox){
-        return onlyContentBox && Ext.isBorderBox ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));
+        return onlyContentBox && this.isBorderBox() ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));
     },
 
     
@@ -3420,7 +3452,7 @@
     
     mask : function(msg, msgCls){
         if(this.getStyle("position") == "static"){
-            this.setStyle("position", "relative");
+            this.addClass("x-masked-relative");
         }
         if(this._maskMsg){
             this._maskMsg.remove();
@@ -3457,7 +3489,7 @@
             this._mask.remove();
             delete this._mask;
         }
-        this.removeClass("x-masked");
+        this.removeClass(["x-masked", "x-masked-relative"]);
     },
 
     
@@ -3926,8 +3958,6 @@
 });
 })();
 
-
-
 
 //Notifies Element that fx methods are available
 Ext.enableFx = true;
@@ -4317,14 +4347,17 @@
         var el = this.getFxEl();
         o = o || {};
         el.queueFx(o, function(){
-            arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}},
+            var to = o.endOpacity || 0;
+            arguments.callee.anim = this.fxanim({opacity:{to:to}},
                 o, null, .5, "easeOut", function(){
-                if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){
-                     this.dom.style.display = "none";
-                }else{
-                     this.dom.style.visibility = "hidden";
+                if(to === 0){
+                    if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){
+                         this.dom.style.display = "none";
+                    }else{
+                         this.dom.style.visibility = "hidden";
+                    }
+                    this.clearOpacity();
                 }
-                this.clearOpacity();
                 el.afterFx(o);
             });
         });
@@ -4625,8 +4658,6 @@
 Ext.Element.addMethods(Ext.Fx);
 
 
-
-
 Ext.CompositeElement = function(els){
     this.elements = [];
     this.addElements(els);
@@ -4881,8 +4912,6 @@
 };
 
 Ext.select = Ext.Element.select;
-
-
 
 Ext.data.Connection = function(config){
     Ext.apply(this, config);
@@ -5146,8 +5175,6 @@
         return Ext.lib.Ajax.serializeForm(form);
     }
 });
-
-
 
 Ext.Updater = Ext.extend(Ext.util.Observable, {
     constructor: function(el, forceNew){
@@ -5412,8 +5439,6 @@
 
 Ext.UpdateManager = Ext.Updater;
 
-
-
 
 Ext.util.DelayedTask = function(fn, scope, args){
     var id = null, d, t;

Modified: mickael/trunk/ext/v3.0.0-a1/ext-core.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/ext-core.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/ext-core.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -129,7 +129,11 @@
 return r;},"prev":function(c,ss){var is=Ext.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci;}}
 return r;}}};}();Ext.query=Ext.DomQuery.select;
 
-Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners;}};Ext.util.Observable.prototype={fireEvent:function(){if(this.eventsSuspended===true){if(this.suspendedEventsQueue){this.suspendedEventsQueue.push(arguments);}}else{var ce=this.events[arguments[0].toLowerCase()];if(typeof ce=="object"){return ce.fire.apply(ce,Array.prototype.slice.call(arguments,1));}}
+Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners;}
+if(!this.events){this.events={};}};Ext.util.Observable.prototype={fireEvent:function(){var a=Array.prototype.slice.call(arguments,0);var ename=a[0];if(ename===true){a.shift();var c=this;while(c){if(c.fireEvent.apply(c,a)===false){return false;}
+c=c.getBubbleTarget?c.getBubbleTarget():null;}
+return true;}
+if(this.eventsSuspended===true){var q=this.suspendedEventsQueue;if(q){q[q.length]=a;}}else{var ce=this.events[ename.toLowerCase()];if(typeof ce=="object"){a.shift();return ce.fire.apply(ce,a);}}
 return true;},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(eventName,fn,scope,o){if(typeof eventName=="object"){o=eventName;for(var e in o){if(this.filterOptRe.test(e)){continue;}
 if(typeof o[e]=="function"){this.addListener(e,o[e],o.scope,o);}else{this.addListener(e,o[e].fn,o[e].scope,o[e]);}}
 return;}
@@ -144,7 +148,8 @@
 for(var i=0,len=e.after.length;i<len;i++){makeCall(e.after[i].fn,e.after[i].scope,args);if(cancel){return returnValue;}}
 return returnValue;};}
 return e;},beforeMethod:function(method,fn,scope){var e=this.getMethodEvent(method);e.before.push({fn:fn,scope:scope});},afterMethod:function(method,fn,scope){var e=this.getMethodEvent(method);e.after.push({fn:fn,scope:scope});},removeMethodListener:function(method,fn,scope){var e=this.getMethodEvent(method);for(var i=0,len=e.before.length;i<len;i++){if(e.before[i].fn==fn&&e.before[i].scope==scope){e.before.splice(i,1);return;}}
-for(var i=0,len=e.after.length;i<len;i++){if(e.after[i].fn==fn&&e.after[i].scope==scope){e.after.splice(i,1);return;}}}};Ext.util.Observable.prototype.on=Ext.util.Observable.prototype.addListener;Ext.util.Observable.prototype.un=Ext.util.Observable.prototype.removeListener;Ext.util.Observable.capture=function(o,fn,scope){o.fireEvent=o.fireEvent.createInterceptor(fn,scope);};Ext.util.Observable.releaseCapture=function(o){o.fireEvent=Ext.util.Observable.prototype.fireEvent;};(function(){var createBuffered=function(h,o,scope){var task=new Ext.util.DelayedTask();return function(){task.delay(o.buffer,h,scope,Array.prototype.slice.call(arguments,0));};};var createSingle=function(h,e,fn,scope){return function(){e.removeListener(fn,scope);return h.apply(scope,arguments);};};var createDelayed=function(h,o,scope){return function(){var args=Array.prototype.slice.call(arguments,0);setTimeout(function(){h.apply(scope,args);},o.delay||10);};};Ext.util.Event=function(obj,name){this.name=name;this.obj=obj;this.listeners=[];};Ext.util.Event.prototype={addListener:function(fn,scope,options){scope=scope||this.obj;if(!this.isListening(fn,scope)){var l=this.createListener(fn,scope,options);if(!this.firing){this.listeners.push(l);}else{this.listeners=this.listeners.slice(0);this.listeners.push(l);}}},createListener:function(fn,scope,o){o=o||{};scope=scope||this.obj;var l={fn:fn,scope:scope,options:o};var h=fn;if(o.delay){h=createDelayed(h,o,scope);}
+for(var i=0,len=e.after.length;i<len;i++){if(e.after[i].fn==fn&&e.after[i].scope==scope){e.after.splice(i,1);return;}}}};Ext.util.Observable.prototype.on=Ext.util.Observable.prototype.addListener;Ext.util.Observable.prototype.un=Ext.util.Observable.prototype.removeListener;Ext.util.Observable.capture=function(o,fn,scope){o.fireEvent=o.fireEvent.createInterceptor(fn,scope);};Ext.util.Observable.releaseCapture=function(o){o.fireEvent=Ext.util.Observable.prototype.fireEvent;};(function(){var createBuffered=function(h,o,scope){var task=new Ext.util.DelayedTask();return function(){task.delay(o.buffer,h,scope,Array.prototype.slice.call(arguments,0));};};var createSingle=function(h,e,fn,scope){return function(){e.removeListener(fn,scope);return h.apply(scope,arguments);};};var createDelayed=function(h,o,scope){return function(){var args=Array.prototype.slice.call(arguments,0);setTimeout(function(){h.apply(scope,args);},o.delay||10);};};var createTargeted=function(h,o,scope){return function(){if(o.target==arguments[0]){h.apply(scope,Array.prototype.slice.call(arguments,0));}};};Ext.util.Event=function(obj,name){this.name=name;this.obj=obj;this.listeners=[];};Ext.util.Event.prototype={addListener:function(fn,scope,options){scope=scope||this.obj;if(!this.isListening(fn,scope)){var l=this.createListener(fn,scope,options);if(!this.firing){this.listeners.push(l);}else{this.listeners=this.listeners.slice(0);this.listeners.push(l);}}},createListener:function(fn,scope,o){o=o||{};scope=scope||this.obj;var l={fn:fn,scope:scope,options:o};var h=fn;if(o.target){h=createTargeted(h,o,scope);}
+if(o.delay){h=createDelayed(h,o,scope);}
 if(o.single){h=createSingle(h,this,fn,scope);}
 if(o.buffer){h=createBuffered(h,o,scope);}
 l.fireFn=h;return l;},findListener:function(fn,scope){scope=scope||this.obj;var ls=this.listeners;for(var i=0,len=ls.length;i<len;i++){var l=ls[i];if(l.fn==fn&&l.scope==scope){return i;}}
@@ -168,14 +173,15 @@
 if(Ext.isGecko||Ext.isOpera){document.removeEventListener("DOMContentLoaded",fireDocReady,false);}
 if(Ext.isIE){var defer=document.getElementById("ie-deferred-loader");if(defer){defer.onreadystatechange=null;defer.parentNode.removeChild(defer);}}
 if(docReadyEvent){docReadyEvent.fire();docReadyEvent.clearListeners();}}};var initDocReady=function(){docReadyEvent=new Ext.util.Event();if(Ext.isGecko||Ext.isOpera){document.addEventListener("DOMContentLoaded",fireDocReady,false);}else if(Ext.isIE){document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");var defer=document.getElementById("ie-deferred-loader");defer.onreadystatechange=function(){if(this.readyState=="complete"){fireDocReady();}};}else if(Ext.isSafari){docReadyProcId=setInterval(function(){var rs=document.readyState;if(rs=="complete"){fireDocReady();}},10);}
-E.on(window,"load",fireDocReady);};var createBuffered=function(h,o){var task=new Ext.util.DelayedTask(h);return function(e){e=new Ext.EventObjectImpl(e);task.delay(o.buffer,h,null,[e]);};};var createSingle=function(h,el,ename,fn,scope){return function(e){Ext.EventManager.removeListener(el,ename,fn,scope);h(e);};};var createDelayed=function(h,o){return function(e){e=new Ext.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var listen=function(element,ename,opt,fn,scope){var o=(!opt||typeof opt=="boolean")?{}:opt;fn=fn||o.fn;scope=scope||o.scope;var el=Ext.getDom(element);if(!el){throw"Error listening for \""+ename+'\". Element "'+element+'" doesn\'t exist.';}
+E.on(window,"load",fireDocReady);};var createBuffered=function(h,o){var task=new Ext.util.DelayedTask(h);return function(e){e=new Ext.EventObjectImpl(e);task.delay(o.buffer,h,null,[e]);};};var createSingle=function(h,el,ename,fn,scope){return function(e){Ext.EventManager.removeListener(el,ename,fn,scope);h(e);};};var createDelayed=function(h,o){return function(e){e=new Ext.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var createTargeted=function(h,o){return function(){if(o.target==Ext.EventObject.setEvent(arguments[0]).target){h.apply(this,Array.prototype.slice.call(arguments,0));}};};var listen=function(element,ename,opt,fn,scope){var o=(!opt||typeof opt=="boolean")?{}:opt;fn=fn||o.fn;scope=scope||o.scope;var el=Ext.getDom(element);if(!el){throw"Error listening for \""+ename+'\". Element "'+element+'" doesn\'t exist.';}
 var h=function(e){if(!window[xname]){return;}
 e=Ext.EventObject.setEvent(e);var t;if(o.delegate){t=e.getTarget(o.delegate,el);if(!t){return;}}else{t=e.target;}
 if(o.stopEvent===true){e.stopEvent();}
 if(o.preventDefault===true){e.preventDefault();}
 if(o.stopPropagation===true){e.stopPropagation();}
 if(o.normalized===false){e=e.browserEvent;}
-fn.call(scope||el,e,t,o);};if(o.delay){h=createDelayed(h,o);}
+fn.call(scope||el,e,t,o);};if(o.target){h=createTargeted(h,o);}
+if(o.delay){h=createDelayed(h,o);}
 if(o.single){h=createSingle(h,el,ename,fn,scope);}
 if(o.buffer){h=createBuffered(h,o);}
 addListener(el,ename,fn,h,scope);return h;};var propRe=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;var pub={addListener:function(element,eventName,fn,scope,options){if(typeof eventName=="object"){var o=eventName;for(var e in o){if(propRe.test(e)){continue;}
@@ -184,10 +190,10 @@
 return listen(element,eventName,options,fn,scope);},removeListener:function(element,eventName,fn,scope){return removeListener(element,eventName,fn,scope);},removeAll:function(element){return removeAll(element);},onDocumentReady:function(fn,scope,options){if(docReadyState){docReadyEvent.addListener(fn,scope,options);docReadyEvent.fire();docReadyEvent.clearListeners();return;}
 if(!docReadyEvent){initDocReady();}
 options=options||{};if(!options.delay){options.delay=1;}
-docReadyEvent.addListener(fn,scope,options);},onWindowResize:function(fn,scope,options){if(!resizeEvent){resizeEvent=new Ext.util.Event();resizeTask=new Ext.util.DelayedTask(function(){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());});E.on(window,"resize",this.fireWindowResize,this);}
+docReadyEvent.addListener(fn,scope,options);},doResizeEvent:function(){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());},onWindowResize:function(fn,scope,options){if(!resizeEvent){resizeEvent=new Ext.util.Event();resizeTask=new Ext.util.DelayedTask(this.doResizeEvent);E.on(window,"resize",this.fireWindowResize,this);}
 resizeEvent.addListener(fn,scope,options);},fireWindowResize:function(){if(resizeEvent){if((Ext.isIE||Ext.isAir)&&resizeTask){resizeTask.delay(50);}else{resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}}},onTextResize:function(fn,scope,options){if(!textEvent){textEvent=new Ext.util.Event();var textEl=new Ext.Element(document.createElement('div'));textEl.dom.className='x-text-resize';textEl.dom.innerHTML='X';textEl.appendTo(document.body);textSize=textEl.dom.offsetHeight;setInterval(function(){if(textEl.dom.offsetHeight!=textSize){textEvent.fire(textSize,textSize=textEl.dom.offsetHeight);}},this.textResizeInterval);}
 textEvent.addListener(fn,scope,options);},removeResizeListener:function(fn,scope){if(resizeEvent){resizeEvent.removeListener(fn,scope);}},fireResize:function(){if(resizeEvent){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}},ieDeferSrc:false,textResizeInterval:50};pub.on=pub.addListener;pub.un=pub.removeListener;pub.stoppedMouseDownEvent=new Ext.util.Event();return pub;}();Ext.onReady=Ext.EventManager.onDocumentReady;(function(){var initExtCss=function(){var bd=document.body||document.getElementsByTagName('body')[0];if(!bd){return false;}
-var cls=[' ',Ext.isIE?"ext-ie "+(Ext.isIE6?'ext-ie6':'ext-ie7'):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?'ext-gecko2':'ext-gecko3'):Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":""];if(Ext.isMac){cls.push("ext-mac");}
+var cls=[' ',Ext.isIE?"ext-ie "+(Ext.isIE6?'ext-ie6':(Ext.isIE7?'ext-ie7':'ext-ie8')):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?'ext-gecko2':'ext-gecko3'):Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":Ext.isChrome?"ext-chrome":""];if(Ext.isMac){cls.push("ext-mac");}
 if(Ext.isLinux){cls.push("ext-linux");}
 if(Ext.isBorderBox){cls.push('ext-border-box');}
 if(Ext.isStrict){var p=bd.parentNode;if(p){p.className+=' ext-strict';}}
@@ -243,8 +249,8 @@
 return this;},setLeft:function(left){this.setStyle("left",this.addUnits(left));return this;},setTop:function(top){this.setStyle("top",this.addUnits(top));return this;},setRight:function(right){this.setStyle("right",this.addUnits(right));return this;},setBottom:function(bottom){this.setStyle("bottom",this.addUnits(bottom));return this;},setXY:function(pos,animate){if(!animate||!A){D.setXY(this.dom,pos);}else{this.anim({points:{to:pos}},this.preanim(arguments,1),'motion');}
 return this;},setLocation:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this;},moveTo:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this;},getRegion:function(){return D.getRegion(this.dom);},getHeight:function(contentHeight){var h=this.dom.offsetHeight||0;h=contentHeight!==true?h:h-this.getBorderWidth("tb")-this.getPadding("tb");return h<0?0:h;},getWidth:function(contentWidth){var w=this.dom.offsetWidth||0;w=contentWidth!==true?w:w-this.getBorderWidth("lr")-this.getPadding("lr");return w<0?0:w;},getComputedHeight:function(){var h=Math.max(this.dom.offsetHeight,this.dom.clientHeight);if(!h){h=parseInt(this.getStyle('height'),10)||0;if(!this.isBorderBox()){h+=this.getFrameWidth('tb');}}
 return h;},getComputedWidth:function(){var w=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!w){w=parseInt(this.getStyle('width'),10)||0;if(!this.isBorderBox()){w+=this.getFrameWidth('lr');}}
-return w;},getSize:function(contentSize){return{width:this.getWidth(contentSize),height:this.getHeight(contentSize)};},getStyleSize:function(){var w,h,d=this.dom,s=d.style;if(s.width&&s.width!='auto'){w=parseInt(s.width,10);if(Ext.isBorderBox){w-=this.getFrameWidth('lr');}}
-if(s.height&&s.height!='auto'){h=parseInt(s.height,10);if(Ext.isBorderBox){h-=this.getFrameWidth('tb');}}
+return w;},getSize:function(contentSize){return{width:this.getWidth(contentSize),height:this.getHeight(contentSize)};},getStyleSize:function(){var w,h,d=this.dom,s=d.style;if(s.width&&s.width!='auto'){w=parseInt(s.width,10);if(this.isBorderBox()){w-=this.getFrameWidth('lr');}}
+if(s.height&&s.height!='auto'){h=parseInt(s.height,10);if(this.isBorderBox()){h-=this.getFrameWidth('tb');}}
 return{width:w||this.getWidth(true),height:h||this.getHeight(true)};},getViewSize:function(){var d=this.dom,doc=document,aw=0,ah=0;if(d==doc||d==doc.body){return{width:D.getViewWidth(),height:D.getViewHeight()};}else{return{width:d.clientWidth,height:d.clientHeight};}},getValue:function(asNumber){return asNumber?parseInt(this.dom.value,10):this.dom.value;},adjustWidth:function(width){if(typeof width=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){width-=(this.getBorderWidth("lr")+this.getPadding("lr"));}
 if(width<0){width=0;}}
 return width;},adjustHeight:function(height){if(typeof height=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){height-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
@@ -275,18 +281,18 @@
 if(typeof callback=="function"){callback();}});dom.innerHTML=html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this;},load:function(){var um=this.getUpdater();um.update.apply(um,arguments);return this;},getUpdater:function(){if(!this.updateManager){this.updateManager=new Ext.Updater(this);}
 return this.updateManager;},unselectable:function(){this.dom.unselectable="on";this.swallowEvent("selectstart",true);this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");this.addClass("x-unselectable");return this;},getCenterXY:function(){return this.getAlignToXY(document,'c-c');},center:function(centerIn){this.alignTo(centerIn||document,'c-c');return this;},isBorderBox:function(){return noBoxAdjust[this.dom.tagName.toLowerCase()]||Ext.isBorderBox;},getBox:function(contentBox,local){var xy;if(!local){xy=this.getXY();}else{var left=parseInt(this.getStyle("left"),10)||0;var top=parseInt(this.getStyle("top"),10)||0;xy=[left,top];}
 var el=this.dom,w=el.offsetWidth,h=el.offsetHeight,bx;if(!contentBox){bx={x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h};}else{var l=this.getBorderWidth("l")+this.getPadding("l");var r=this.getBorderWidth("r")+this.getPadding("r");var t=this.getBorderWidth("t")+this.getPadding("t");var b=this.getBorderWidth("b")+this.getPadding("b");bx={x:xy[0]+l,y:xy[1]+t,0:xy[0]+l,1:xy[1]+t,width:w-(l+r),height:h-(t+b)};}
-bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&Ext.isBorderBox?0:(this.getPadding(sides)+this.getBorderWidth(sides));},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
+bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&this.isBorderBox()?0:(this.getPadding(sides)+this.getBorderWidth(sides));},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
 this.setBounds(box.x,box.y,w,h,this.preanim(arguments,2));return this;},repaint:function(){var dom=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.get(dom).removeClass("x-repaint");},1);return this;},getMargins:function(side){if(!side){return{top:parseInt(this.getStyle("margin-top"),10)||0,left:parseInt(this.getStyle("margin-left"),10)||0,bottom:parseInt(this.getStyle("margin-bottom"),10)||0,right:parseInt(this.getStyle("margin-right"),10)||0};}else{return this.addStyles(side,El.margins);}},addStyles:function(sides,styles){var val=0,v,w;for(var i=0,len=sides.length;i<len;i++){v=this.getStyle(styles[sides.charAt(i)]);if(v){w=parseInt(v,10);if(w){val+=(w>=0?w:-1*w);}}}
 return val;},createProxy:function(config,renderTo,matchBox){config=typeof config=="object"?config:{tag:"div",cls:config};var proxy;if(renderTo){proxy=Ext.DomHelper.append(renderTo,config,true);}else{proxy=Ext.DomHelper.insertBefore(this.dom,config,true);}
 if(matchBox){proxy.setBox(this.getBox());}
-return proxy;},mask:function(msg,msgCls){if(this.getStyle("position")=="static"){this.setStyle("position","relative");}
+return proxy;},mask:function(msg,msgCls){if(this.getStyle("position")=="static"){this.addClass("x-masked-relative");}
 if(this._maskMsg){this._maskMsg.remove();}
 if(this._mask){this._mask.remove();}
 this._mask=Ext.DomHelper.append(this.dom,{cls:"ext-el-mask"},true);this.addClass("x-masked");this._mask.setDisplayed(true);if(typeof msg=='string'){this._maskMsg=Ext.DomHelper.append(this.dom,{cls:"ext-el-mask-msg",cn:{tag:'div'}},true);var mm=this._maskMsg;mm.dom.className=msgCls?"ext-el-mask-msg "+msgCls:"ext-el-mask-msg";mm.dom.firstChild.innerHTML=msg;mm.setDisplayed(true);mm.center(this);}
 if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&this.getStyle('height')=='auto'){this._mask.setSize(this.dom.clientWidth,this.getHeight());}
 return this._mask;},unmask:function(){if(this._mask){if(this._maskMsg){this._maskMsg.remove();delete this._maskMsg;}
 this._mask.remove();delete this._mask;}
-this.removeClass("x-masked");},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var el=document.createElement('iframe');el.frameBorder='0';el.className='ext-shim';if(Ext.isIE&&Ext.isSecure){el.src=Ext.SSL_SECURE_URL;}
+this.removeClass(["x-masked","x-masked-relative"]);},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var el=document.createElement('iframe');el.frameBorder='0';el.className='ext-shim';if(Ext.isIE&&Ext.isSecure){el.src=Ext.SSL_SECURE_URL;}
 var shim=Ext.get(this.dom.parentNode.insertBefore(el,this.dom));shim.autoBoxAdjust=false;return shim;},remove:function(){Ext.removeNode(this.dom);delete El.cache[this.dom.id];},hover:function(overFn,outFn,scope){var preOverFn=function(e){if(!e.within(this,true)){overFn.apply(scope||this,arguments);}};var preOutFn=function(e){if(!e.within(this,true)){outFn.apply(scope||this,arguments);}};this.on("mouseover",preOverFn,this.dom);this.on("mouseout",preOutFn,this.dom);return this;},addClassOnOver:function(className){this.hover(function(){Ext.fly(this,'_internal').addClass(className);},function(){Ext.fly(this,'_internal').removeClass(className);});return this;},addClassOnFocus:function(className){this.on("focus",function(){Ext.fly(this,'_internal').addClass(className);},this.dom);this.on("blur",function(){Ext.fly(this,'_internal').removeClass(className);},this.dom);return this;},addClassOnClick:function(className){var dom=this.dom;this.on("mousedown",function(){Ext.fly(dom,'_internal').addClass(className);var d=Ext.getDoc();var fn=function(){Ext.fly(dom,'_internal').removeClass(className);d.removeListener("mouseup",fn);};d.on("mouseup",fn);});return this;},swallowEvent:function(eventName,preventDefault){var fn=function(e){e.stopPropagation();if(preventDefault){e.preventDefault();}};if(Ext.isArray(eventName)){for(var i=0,len=eventName.length;i<len;i++){this.on(eventName[i],fn);}
 return this;}
 this.on(eventName,fn);return this;},parent:function(selector,returnDom){return this.matchNode('parentNode','parentNode',selector,returnDom);},next:function(selector,returnDom){return this.matchNode('nextSibling','nextSibling',selector,returnDom);},prev:function(selector,returnDom){return this.matchNode('previousSibling','previousSibling',selector,returnDom);},first:function(selector,returnDom){return this.matchNode('nextSibling','firstChild',selector,returnDom);},last:function(selector,returnDom){return this.matchNode('previousSibling','lastChild',selector,returnDom);},matchNode:function(dir,start,selector,returnDom){var n=this.dom[start];while(n){if(n.nodeType==1&&(!selector||Ext.DomQuery.is(n,selector))){return!returnDom?Ext.get(n):n;}
@@ -328,8 +334,9 @@
 el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;st.fontSize='';el.afterFx(o);};var width=this.getWidth();var height=this.getHeight();arguments.callee.anim=this.fxanim({width:{to:this.adjustWidth(width*2)},height:{to:this.adjustHeight(height*2)},points:{by:[-(width*.5),-(height*.5)]},opacity:{to:0},fontSize:{to:200,unit:"%"}},o,'motion',.5,"easeOut",after);});return this;},switchOff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.clip();var r=this.getFxRestore();var st=this.dom.style;var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}
 el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};this.fxanim({opacity:{to:0.3}},null,null,.1,null,function(){this.clearOpacity();(function(){this.fxanim({height:{to:1},points:{by:[0,this.getHeight()*.5]}},o,'motion',0.3,'easeIn',after);}).defer(100,this);});});return this;},highlight:function(color,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){color=color||"ffff9c";var attr=o.attr||"backgroundColor";this.clearOpacity();this.show();var origColor=this.getColor(attr);var restoreColor=this.dom.style[attr];var endColor=(o.endColor||origColor)||"ffffff";var after=function(){el.dom.style[attr]=restoreColor;el.afterFx(o);};var a={};a[attr]={from:color,to:endColor};arguments.callee.anim=this.fxanim(a,o,'color',1,'easeIn',after);});return this;},frame:function(color,count,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){color=color||"#C3DAF9";if(color.length==6){color="#"+color;}
 count=count||1;var duration=o.duration||1;this.show();var b=this.getBox();var animFn=function(){var proxy=Ext.getBody().createChild({style:{visbility:"hidden",position:"absolute","z-index":"35000",border:"0px solid "+color}});var scale=Ext.isBorderBox?2:1;proxy.animate({top:{from:b.y,to:b.y-20},left:{from:b.x,to:b.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:b.height,to:(b.height+(20*scale))},width:{from:b.width,to:(b.width+(20*scale))}},duration,function(){proxy.remove();if(--count>0){animFn();}else{el.afterFx(o);}});};animFn.call(this);});return this;},pause:function(seconds){var el=this.getFxEl();var o={};el.queueFx(o,function(){setTimeout(function(){el.afterFx(o);},seconds*1000);});return this;},fadeIn:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.setOpacity(0);this.fixDisplay();this.dom.style.visibility='visible';var to=o.endOpacity||1;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to==1){this.clearOpacity();}
-el.afterFx(o);});});return this;},fadeOut:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){arguments.callee.anim=this.fxanim({opacity:{to:o.endOpacity||0}},o,null,.5,"easeOut",function(){if(this.visibilityMode==Ext.Element.DISPLAY||o.useDisplay){this.dom.style.display="none";}else{this.dom.style.visibility="hidden";}
-this.clearOpacity();el.afterFx(o);});});return this;},scale:function(w,h,o){this.shift(Ext.apply({},o,{width:w,height:h}));return this;},shift:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var a={},w=o.width,h=o.height,x=o.x,y=o.y,op=o.opacity;if(w!==undefined){a.width={to:this.adjustWidth(w)};}
+el.afterFx(o);});});return this;},fadeOut:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var to=o.endOpacity||0;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to===0){if(this.visibilityMode==Ext.Element.DISPLAY||o.useDisplay){this.dom.style.display="none";}else{this.dom.style.visibility="hidden";}
+this.clearOpacity();}
+el.afterFx(o);});});return this;},scale:function(w,h,o){this.shift(Ext.apply({},o,{width:w,height:h}));return this;},shift:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var a={},w=o.width,h=o.height,x=o.x,y=o.y,op=o.opacity;if(w!==undefined){a.width={to:this.adjustWidth(w)};}
 if(h!==undefined){a.height={to:this.adjustHeight(h)};}
 if(o.left!==undefined){a.left={to:o.left};}
 if(o.top!==undefined){a.top={to:o.top};}

Modified: mickael/trunk/ext/v3.0.0-a1/learn/desktop/controller.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/learn/desktop/controller.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/learn/desktop/controller.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -11,16 +11,6 @@
 Ext.app.controller = new Ext.ux.App({
     
     /**
-     * @cfg {Object} Start Menu configuration
-     */        
-    startConfig: {
-        // iconCls: 'user',
-        // title: get_cookie('memberName'),
-        toolPanelWidth: 200,
-        scope: this
-    },
-    
-    /**
      * @cfg {Object} Start Menu's logout button configuration
      */        
     logoutConfig: {
@@ -33,11 +23,6 @@
     },
 
     /**
-     * @cfg {Boolean}
-     */        
-    remoteLoad: true,
-    
-    /**
      * @cfg {String} processRemoteFile
      * the method used to include remotely loaded javascript resources ('eval' or 'head').
      * 'eval' will eval the remote resource upon retrieval, 'head' will include that
@@ -45,29 +30,27 @@
      */        
     processRemoteFile: 'head',//'head' or 'eval'
     
-    urlConnect: 'connect.php',
-
     /**
-     * @cfg {String} urlLoad
+     * Configuration object to use for loading the platform.  Specify the url,
+     * params, etc.
+     * @cfg {Object} Platform load configuration
      */        
-    urlLoad: 'modules-preload.txt',//'loader.php',
+    platformConfig: {
+        url: 'modules-preload.txt',
+        params: 'foo'
+    },
 
     /**
-     * @cfg {String} paramsLoad
+     * @cfg {Object} Start Menu configuration
      */        
-    paramsLoad: {
-        testing: 'Testing params'
+    startConfig: {
+        // iconCls: 'user',
+        // title: get_cookie('memberName'),
+        toolPanelWidth: 200,
+        scope: this
     },
-
+    
     /**
-     * this method called as last step in initPlatform()
-     */    
-    init: function () {
-        this.preventBackspace();
-        Ext.QuickTips.init();
-    },
-
-    /**
      * getPlatform is an interface method that has one requirement:
      * 1. set this.platformLoaded = true;
      * Can optionally specify additional platform configs, but the
@@ -79,9 +62,9 @@
     getPlatform: function () {
         Ext.ux.RemoteLoader.load({
             callback: this.handlePlatform,
-            url:    this.urlLoad,
+            url:    this.platformConfig.url,
             root:   'platform',
-            params: this.paramsLoad,
+            params: this.platformConfig.params,
             scope:  this
         });
     },
@@ -125,4 +108,11 @@
         ];
     }
 */
+    /**
+     * This method called as last step in initPlatform().
+     */    
+    init: function () {
+        this.preventBackspace();
+    }
+
 });
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/learn/desktop/desktop.html
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/learn/desktop/desktop.html	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/learn/desktop/desktop.html	2008-12-03 04:14:23 UTC (rev 36)
@@ -17,7 +17,7 @@
 <!--
     <script type="text/javascript" src="../../ext-all.js"></script>
 -->    
-    <script type="text/javascript" src="../../ext-all-debug.js"></script>
+    <script type="text/javascript" src="../../ext-all-detail.js"></script>
 
  	<!-- OVERRIDES -->       <!-- Destroy context menus -->
     <script type="text/javascript" src="override.js"></script>

Modified: mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/App.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/App.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/App.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -151,6 +151,7 @@
 
     /* @private */
     initApp: function () {
+        Ext.QuickTips.init();
         // This method is called from onReady.
         // Only initialize the platform if it is loaded (the call to getPlatform()
         // is expected to set platformLoaded to true).
@@ -229,7 +230,8 @@
             
             // give each module a reference to this app
             m.app = this;
-            // initialize array to track module instances
+            // initialize array to track module instances (used to limit
+            // instances to the configured 'limit')
             m.instances = [];
             // Initialize launchers for the module
             this.initLaunchers(m);
@@ -249,10 +251,6 @@
         
         // generalized view class 
         this.initView();
-        
-        // Set any styles if defined (background color, wallpaper, fontcolor, etc.)
-        // initStyles() uses this.desktop, so this.desktop must be instanciated already        
-        this.view.initStyles.createDelegate(this.view, [this.styles, this]);
 
         this.init();
         

Modified: mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/Desktop.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/Desktop.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/Desktop.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -8,28 +8,37 @@
 Ext.ux.gui.Desktop = Ext.extend(Ext.ux.View, {
 
     activeWindow: null,
+    
+    xTickSize: 1,
+    yTickSize: 1,
 
     initComponent: function () {
 
         // window manager
         this.windows = new Ext.WindowGroup();
         
-        var desktopBody = {
+        this.desktopBody = new Ext.Panel({
             region: 'center',
             id: 'x-desktop',
-            xtype: 'panel',
+            //xtype: 'panel',
             //bodyStyle: "background-image:url(eos.jpg) !important",
             autoEl: {}
-        };
+        });
 
-        var taskbar = {
-            xtype: 'taskbar',
+        this.taskbar = new Ext.ux.TaskBar({
+            //xtype: 'taskbar',
             region: 'south',//if make this north, need to change the origin of menus so they don't go off the page
             collapsible: true,
             collapseMode: 'mini',
             split: true,
+            listeners: {
+                // Set any styles if defined (background color, wallpaper, fontcolor, etc.)
+                // initStyles() uses desktop elements so they must be rendered already        
+                afterRender: this.initStyles,
+                scope: this
+            },
             view: this
-        };
+        });
         
         Ext.apply(this, {
             id: 'app-viewport',
@@ -40,7 +49,7 @@
                 cmargins: '0 0 0 0', // only used by border layout
                 margins: '0 0 0 0'
             },
-            items: [desktopBody, taskbar]
+            items: [this.desktopBody, this.taskbar]
         });
         
         Ext.ux.gui.Desktop.superclass.initComponent.call(this);
@@ -69,7 +78,7 @@
         }, this);
     },
 
-    cascade: function () {
+    cascade: function (btn, e) {
         var x, y, xTick, yTick;
         xTick = Math.max(this.xTickSize, 20);
         yTick = Math.max(this.yTickSize, 20);
@@ -84,7 +93,7 @@
         }, this);
     },
 
-    tile: function () {
+    tile: function (btn, e) {
         var availWidth, nextY, w, x, y;
         availWidth = this.getEl().getWidth(true);
         x = this.xTickSize;
@@ -94,7 +103,7 @@
             if (win.isVisible() && !win.maximized) {
                 w = win.el.getWidth();
 
-//              Wrap to next row if we are not at the line start and this Window will go off the end
+                // Wrap to next row if we are not at the line start and this Window will go off the end
                 if ((x > this.xTickSize) && (x + w > availWidth)) {
                     x = this.xTickSize;
                     y = nextY;
@@ -105,8 +114,92 @@
                 nextY = Math.max(nextY, y + win.el.getHeight() + this.yTickSize);
             }
         }, this);
-    }
+    },
+//////////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////////
+// below here not implemented
+
+    // Private
+    addContextMenuItem: function (item) {
+/*
+        var m = app.getModule(id);
+        if (m && !m.contextMenuItem) {
+            / * if (m.moduleType === 'menu') { // handle menu modules
+                var items = m.items;
+                for (var i = 0, len = items.length; i < len; i++) {
+                    m.launcher.menu.items.push(app.getModule(items[i]).launcher);
+                }
+            } * /
+            this.cmenu.add(m.launcher);
+        }
+*/
+        if (Ext.isArray(item)) {
+            for (var i = 0, len = item.length; i < len; i++) {
+                this.addContextMenuItem(item[i]);
+            }
+            return;
+        }
+        this.cmenu.add(item);
+    },
+
+    onContextmenu: function (e) {
+//      if (e.target.id === desktopEl.id) {
+        e.stopEvent();
+        if (!this.cmenu.el) {
+            this.cmenu.render();
+        }
+        var xy = e.getXY();
+        xy[1] -= this.cmenu.el.getHeight();
+        this.cmenu.showAt(xy);
+//      }
+//      this.fireEvent('contextmenu', this, e.target.id, e);
+    },
+    //TODO: the names here should be generalized to adding 'shortcuts' to any menu
+    //in case the GUI is not a "desktop"
     
+    addShortcut: function (id, updateConfig) {
+//        var m = this.app.getModule(id);
+        var c, m = Ext.getCmp(id);
+        
+        if (m && !m.shortcut) {
+            c = m.launcher;
+            
+            m.shortcut = this.shortcuts.addShortcut({
+                handler: c.handler,
+                iconCls: c.shortcutIconCls,
+                scope: c.scope,
+                text: c.text,
+                tooltip: c.tooltip || ''
+            });
+            
+            if (updateConfig) {
+                this.app.launchers.shortcut.push(id);
+            }
+        }
+        
+    },
+
+    removeShortcut: function (id, updateConfig) {
+        var i, sc, m = this.app.getModule(id);
+        
+        if (m && m.shortcut) {
+            this.shortcuts.removeShortcut(m.shortcut);
+            m.shortcut = null;
+            
+            if (updateConfig) {
+                sc = this.app.launchers.shortcut;
+                i = 0;
+                while (i < sc.length) {
+                    if (sc[i] === id) {
+                        sc.splice(i, 1);
+                    } else {
+                        i++;
+                    }
+                }
+            }
+        }
+    }    
+    
 });
 
 Ext.ux.View.GUIS['desktop'] = Ext.ux.gui.Desktop;
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/TaskButton.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/TaskButton.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/TaskButton.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -25,7 +25,28 @@
 
     onRender: function (ct, position) {
         Ext.ux.TaskBar.TaskButton.superclass.onRender.apply(this, arguments);
-
+        var view = this.win.app.view
+        // context menu to arrange windows
+        var arrange = {
+            items: [
+                // stick any markup in a menu
+                '<b class="menu-title">Choose an Arrangement</b>',
+                {
+                    text: 'Tile',
+                    handler: view.tile,
+                    scope: view
+                }, {
+                    text: 'Cascade',
+                    handler: view.cascade,
+                    scope: view
+                }, {
+                    //TODO: add checkbox menu for selecting which items will be included in the arrangement selected
+                    text: 'Items',
+                    scope: this
+                }
+            ]
+        };
+        
         this.cmenu = new Ext.menu.Menu({
             items: [{
                 text: 'Restore',
@@ -45,12 +66,16 @@
                 text: 'Maximize',
                 handler: this.win.maximize,
                 scope: this.win
+            }, {
+                text: 'Arrange',
+                menu: arrange
             }, '-', {
                 text: 'Close',
                 handler: this.closeWin.createDelegate(this, this.win, true),
                 scope: this.win
             }]
         });
+        this.cmenu = new Ext.menu.Menu();
 
         this.cmenu.on('beforeshow', function () {
             var w, items = this.cmenu.items.items;

Modified: mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/View.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/View.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/learn/desktop/js/View.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -18,48 +18,8 @@
 
     // private
     initComponent : function () {
-
         Ext.ux.View.superclass.initComponent.apply(this, arguments);
 
-        this.cmenu = new Ext.menu.Menu();
-
-/*
-        // manipulate the context menu:
-        this.cmenu.on('beforeshow', function () {
-            var items = this.cmenu.items.items;
-            var w = this.win;
-            items[0].setDisabled(w.maximized !== true && w.hidden !== true);
-            items[1].setDisabled(w.minimized === true);
-            items[2].setDisabled(w.maximized === true || w.hidden === true);
-        }, this);
-*/
-//TODO:
-        // Add a bunch of items at once using different methods.
-        // Only the last item added will be returned.
-        this.cmenu.add(
-            'Some Item', // new TextItem
-            '-'             // new separator
-        );
-/*
-        var shortcuts = false;
-        if (shortcuts) {
-            shortcuts.on('click', function (e, t) {
-                var target = e.getTarget('dt', shortcuts);
-                if (target) {
-//                if (t = e.getTarget('dt', shortcuts)) {
-                    e.stopEvent();
-                    var module = app.getModule(target.id.replace('-shortcut', ''));
-                    if (module) {
-//                      module.createWindow();
-                        //refactor to have show check if exists and
-                        //then do createWindow (less repetitive coding)
-                        module.show();
-                    }
-                }
-            });
-        }
-*/
-
         this.on({
             beforechange: this.onBeforeChange,
             afterchange:  this.onAfterChange,
@@ -67,16 +27,6 @@
         });
     },
 
-    onRender: function () {
-        Ext.ux.View.superclass.onRender.apply(this, arguments);
-        this.el.on({
-            'contextmenu': this.onContextmenu,
-            scope: this
-        });
-    },
-
-    initLogout: Ext.emptyFn,
-
     /**
      * return false to prevent the change 
      * @param {Object} o scope
@@ -107,42 +57,6 @@
 */
     },
 
-    // Private
-    addContextMenuItem: function (item) {
-/*
-        var m = app.getModule(id);
-        if (m && !m.contextMenuItem) {
-            / * if (m.moduleType === 'menu') { // handle menu modules
-                var items = m.items;
-                for (var i = 0, len = items.length; i < len; i++) {
-                    m.launcher.menu.items.push(app.getModule(items[i]).launcher);
-                }
-            } * /
-            this.cmenu.add(m.launcher);
-        }
-*/
-        if (Ext.isArray(item)) {
-            for (var i = 0, len = item.length; i < len; i++) {
-                this.addContextMenuItem(item[i]);
-            }
-            return;
-        }
-        this.cmenu.add(item);
-    },
-
-    onContextmenu: function (e) {
-//      if (e.target.id === desktopEl.id) {
-        e.stopEvent();
-        if (!this.cmenu.el) {
-            this.cmenu.render();
-        }
-        var xy = e.getXY();
-        xy[1] -= this.cmenu.el.getHeight();
-        this.cmenu.showAt(xy);
-//      }
-//      this.fireEvent('contextmenu', this, e.target.id, e);
-    },
-
     /**
      * Styles config object:
      *
@@ -165,150 +79,94 @@
      *		wallpaperposition: 'tile'
      *	}
      */
-    initStyles: function (s, app) {
-        if (!s) {
+    initStyles: function () {
+        if (!this.styles) {
             return false;
         }
-        this.setBackgroundColor(s.backgroundcolor);
-        this.setFontColor(s.fontcolor);
-        this.setTheme(s.theme);
-        this.setTransparency(s.transparency, this.taskbar.el);
-        this.setBackground(s.wallpaper);
-        this.setBackgroundPosition(s.wallpaperposition);
+        this.setBackgroundColor();
+        this.setFontColor();
+        this.setTheme();
+        this.setTransparency();
+        this.setWallpaper();
+        this.setWallpaperPosition();
         return true;
     },
 
-    setBackground: function (o) {
-        var task, wp, verify;
-        if (o && o.id && o.name && o.pathtofile) {
-            if (this.fireEvent("beforechange", this, 'background', o) !== false) {
-                wp = new Image();
-                wp.src = o.pathtofile;
-                
-                task = new Ext.util.DelayedTask(verify, this);
-                task.delay(200);
-                
-                //app.styles.wallpaper = o;
-            }
-        } else {
-//            console.warn('background configured wrong');
+    setBackgroundColor: function (v) {
+        v = v || this.styles.backgroundcolor;
+        if (v) {
+            Ext.get(document.body).setStyle('background-color', '#' + v);
         }
-
-        verify = function () {
-            if (wp.complete) {
-                task.cancel();
-                this.fireEvent("afterchange", this, 'background', o);
-                document.body.background = wp.src;
-            } else {
-                //TODO: will this run forever if not found?
-                //need timeout or counter if so
-                task.delay(200);
-            }
-        };
     },
     
-    setBackgroundPosition: function (pos) {
-        if (pos) {
-            var b;
-            if (pos === "center") {
-                b = Ext.get(document.body);
-                b.removeClass('wallpaper-tile');
-                b.addClass('wallpaper-center');
-            } else if (pos === "tile") {
-                b = Ext.get(document.body);
-                b.removeClass('wallpaper-center');
-                b.addClass('wallpaper-tile');
-            }			
-            //app.styles.wallpaperposition = pos;
+    setFontColor: function (v) {
+        v = v || this.styles.fontcolor;
+        if (v) {
+            Ext.util.CSS.updateRule('.ux-shortcut-btn-text', 'color', '#' + v);
         }
-    },    
+    },
 
-    setTransparency: function (v, el) {
+    setTheme: function (o) {
+        o = o || this.styles.theme;
+        if (o && o.id && o.name && o.pathtofile) {
+            Ext.util.CSS.swapStyleSheet('theme', o.pathtofile);
+        }
+    },
+
+    setTransparency: function (v) {
+        v = v || this.styles.transparency;
         if (v >= 0 && v <= 100) {
-            //taskbarEl.addClass("transparent");
-            el.addClass("transparent");
+            this.taskbar.el.addClass("transparent");
             Ext.util.CSS.updateRule('.transparent', 'opacity', v / 100);
             Ext.util.CSS.updateRule('.transparent', '-moz-opacity', v / 100);
             Ext.util.CSS.updateRule('.transparent', 'filter', 'alpha(opacity=' + v + ')');
-            
-            //app.styles.transparency = v;
         }
     },
 
-    addAutoRun: function (id) {
-        var m = this.app.getModule(id),
-        c = this.app.launchers.autorun;
-        
-        if (m && !m.autorun) {
-            m.autorun = true;
-            c.push(id);
-        }
-    },
-    
-    removeAutoRun: function (id) {
-        var i, m = this.app.getModule(id),
-            c = this.app.launchers.autorun;
-            
-        if (m && m.autorun) {
-            i = 0;
-                
-            while (i < c.length) {
-                if (c[i] === id) {
-                    c.splice(i, 1);
-                } else {
-                    i++;
-                }
+    setWallpaper: function (o) {
+        var s = this.styles;
+        o = o || s.wallpaper;
+        if (o && o.id && o.name && o.pathtofile) {
+            if (this.fireEvent("beforechange", this, 'background', o) !== false) {
+                s.image = new Image();
+                s.task = new Ext.util.DelayedTask(this.verify, this);
+                s.task.delay(200);
             }
-            
-            m.autorun = null;
+        } else {
+            //console.warn('background configured wrong');
         }
     },
 
-    //TODO: the names here should be generalized to adding 'shortcuts' to any menu
-    //in case the GUI is not a "desktop"
-    
-    addShortcut: function (id, updateConfig) {
-//        var m = this.app.getModule(id);
-        var c, m = Ext.getCmp(id);
-        
-        if (m && !m.shortcut) {
-            c = m.launcher;
-            
-            m.shortcut = this.shortcuts.addShortcut({
-                handler: c.handler,
-                iconCls: c.shortcutIconCls,
-                scope: c.scope,
-                text: c.text,
-                tooltip: c.tooltip || ''
-            });
-            
-            if (updateConfig) {
-                this.app.launchers.shortcut.push(id);
-            }
+    verify: function () {
+        var s = this.styles;
+        if (s.image.complete) {
+            s.task.cancel();
+            this.fireEvent("afterchange", this, 'background', s.wallpaper);
+//            document.body.background = s.wallpaper.pathtofile;
+            this.desktopBody.el.setStyle('background-image', 'url(' + s.wallpaper.pathtofile + ')');
+        } else {
+            //TODO: will this run forever if not found?
+            //need timeout or counter if so
+            s.task.delay(200);
         }
-        
     },
 
-    removeShortcut: function (id, updateConfig) {
-        var i, sc, m = this.app.getModule(id);
-        
-        if (m && m.shortcut) {
-            this.shortcuts.removeShortcut(m.shortcut);
-            m.shortcut = null;
-            
-            if (updateConfig) {
-                sc = this.app.launchers.shortcut;
-                i = 0;
-                while (i < sc.length) {
-                    if (sc[i] === id) {
-                        sc.splice(i, 1);
-                    } else {
-                        i++;
-                    }
-                }
-            }
+    setWallpaperPosition: function (pos) {
+        pos = pos || this.styles.wallpaperposition;
+        if (pos) {
+            //var b = Ext.get(document.body);
+            var b = this.desktopBody.el,
+            t = 'wallpaper-tile',
+            c = 'wallpaper-center';
+            if (pos === "tile") {
+                b.removeClass(c);
+                b.addClass(t);
+            } else {
+                b.removeClass(t);
+                b.addClass(c);
+            }			
         }
-    }    
+    }
 });
 
 Ext.ux.View.GUIS = {};

Modified: mickael/trunk/ext/v3.0.0-a1/learn/desktop/modules-preload.txt
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/learn/desktop/modules-preload.txt	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/learn/desktop/modules-preload.txt	2008-12-03 04:14:23 UTC (rev 36)
@@ -51,11 +51,11 @@
 	            "theme": {
 	                "id": "3",
 	                "name": "Vista Glass",
-	                "pathtofile": "..\/modules\/qwikioffice\/resources\/themes\/xtheme-vistaglass\/css\/xtheme-vistaglass.css"},
+	                "pathtofile": "..\/desktop\/resources\/themes\/xtheme-vistaglass\/css\/xtheme-vistaglass.css"},
 	                "wallpaper": {
 	                    "id": "11",
 	                    "name": "Blue Psychedelic",
-	                    "pathtofile": "..\/modules\/qwikioffice\/resources\/wallpapers\/blue-psychedelic.jpg"
+	                    "pathtofile": "..\/desktop\/resources\/wallpapers\/blue-psychedelic.jpg"
 	                },
 	            "wallpaperposition":"tile"
 	        } // end of styles

Modified: mickael/trunk/ext/v3.0.0-a1/package/button/button-debug.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/button/button-debug.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/button/button-debug.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,8 +6,6 @@
  * http://extjs.com/license
  */
 
-
-
 
 
 Ext.Button = Ext.extend(Ext.BoxComponent, {
@@ -134,6 +132,9 @@
     initButtonEl : function(btn, btnEl){
         this.el = btn;
 
+        if(this.id){
+            this.el.dom.id = this.el.id = this.id;
+        }
         if(this.icon){
             btnEl.setStyle('background-image', 'url(' +this.icon +')');
         }
@@ -162,10 +163,6 @@
             this.menu.on("hide", this.onMenuHide, this);
         }
 
-        if(this.id){
-            this.el.dom.id = this.el.id = this.id;
-        }
-
         if(this.repeat){
             var repeater = new Ext.util.ClickRepeater(btn,
                 typeof this.repeat == "object" ? this.repeat : {}
@@ -197,9 +194,12 @@
     // private
     beforeDestroy: function(){
     	if(this.rendered){
-	        var btn = this.el.child(this.buttonSelector);
-	        if(btn){
-	            btn.removeAllListeners();
+	        var btnEl = this.el.child(this.buttonSelector);
+	        if(btnEl){
+                if(this.tooltip){
+                    Ext.QuickTips.unregister(btnEl);
+                }
+	            btnEl.removeAllListeners();
 	        }
 	    }
         if(this.menu){
@@ -499,8 +499,6 @@
    };
 }();
 
-
-
 Ext.SplitButton = Ext.extend(Ext.Button, {
 	// private
     arrowSelector : 'em',

Modified: mickael/trunk/ext/v3.0.0-a1/package/button/button.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/button/button.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/button/button.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -12,15 +12,16 @@
 return[this.text||'&#160;',this.type,this.iconCls||'',cls,'x-btn-'+this.scale+' x-btn-icon-'+this.scale+'-'+this.iconAlign,this.getMenuClass()];},getMenuClass:function(){return this.menu?(this.arrowAlign!='bottom'?'x-btn-arrow':'x-btn-arrow-bottom'):'';},onRender:function(ct,position){if(!this.template){if(!Ext.Button.buttonTemplate){Ext.Button.buttonTemplate=new Ext.Template('<table cellspacing="0" class="x-btn {3}"><tbody class="{4}">','<tr><td class="x-btn-tl"><i>&#160;</i></td><td class="x-btn-tc"></td><td class="x-btn-tr"><i>&#160;</i></td></tr>','<tr><td class="x-btn-ml"><i>&#160;</i></td><td class="x-btn-mc"><em class="{5}" unselectable="on"><button class="x-btn-text {2}" type="{1}">{0}</button></em></td><td class="x-btn-mr"><i>&#160;</i></td></tr>','<tr><td class="x-btn-bl"><i>&#160;</i></td><td class="x-btn-bc"></td><td class="x-btn-br"><i>&#160;</i></td></tr>',"</tbody></table>");Ext.Button.buttonTemplate.compile();}
 this.template=Ext.Button.buttonTemplate;}
 var btn,targs=this.getTemplateArgs();if(position){btn=this.template.insertBefore(position,targs,true);}else{btn=this.template.append(ct,targs,true);}
-var btnEl=btn.child(this.buttonSelector);btnEl.on('focus',this.onFocus,this);btnEl.on('blur',this.onBlur,this);this.initButtonEl(btn,btnEl);Ext.ButtonToggleMgr.register(this);},initButtonEl:function(btn,btnEl){this.el=btn;if(this.icon){btnEl.setStyle('background-image','url('+this.icon+')');}
+var btnEl=btn.child(this.buttonSelector);btnEl.on('focus',this.onFocus,this);btnEl.on('blur',this.onBlur,this);this.initButtonEl(btn,btnEl);Ext.ButtonToggleMgr.register(this);},initButtonEl:function(btn,btnEl){this.el=btn;if(this.id){this.el.dom.id=this.el.id=this.id;}
+if(this.icon){btnEl.setStyle('background-image','url('+this.icon+')');}
 if(this.tabIndex!==undefined){btnEl.dom.tabIndex=this.tabIndex;}
 if(this.tooltip){if(typeof this.tooltip=='object'){Ext.QuickTips.register(Ext.apply({target:btnEl.id},this.tooltip));}else{btnEl.dom[this.tooltipType]=this.tooltip;}}
 if(this.handleMouseEvents){btn.on("mouseover",this.onMouseOver,this);btn.on("mousedown",this.onMouseDown,this);}
 if(this.menu){this.menu.on("show",this.onMenuShow,this);this.menu.on("hide",this.onMenuHide,this);}
-if(this.id){this.el.dom.id=this.el.id=this.id;}
 if(this.repeat){var repeater=new Ext.util.ClickRepeater(btn,typeof this.repeat=="object"?this.repeat:{});repeater.on("click",this.onClick,this);}
 btn.on(this.clickEvent,this.onClick,this);},afterRender:function(){Ext.Button.superclass.afterRender.call(this);if(Ext.isIE6){this.doAutoWidth.defer(1,this);}else{this.doAutoWidth();}},setIconClass:function(cls){if(this.el){this.el.child(this.buttonSelector).replaceClass(this.iconCls,cls);}
-this.iconCls=cls;},beforeDestroy:function(){if(this.rendered){var btn=this.el.child(this.buttonSelector);if(btn){btn.removeAllListeners();}}
+this.iconCls=cls;},beforeDestroy:function(){if(this.rendered){var btnEl=this.el.child(this.buttonSelector);if(btnEl){if(this.tooltip){Ext.QuickTips.unregister(btnEl);}
+btnEl.removeAllListeners();}}
 if(this.menu){Ext.destroy(this.menu);}},onDestroy:function(){if(this.rendered){Ext.ButtonToggleMgr.unregister(this);}},doAutoWidth:function(){if(this.el&&this.text&&typeof this.width=='undefined'){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var ib=this.el.child(this.buttonSelector);if(ib&&ib.getWidth()>20){ib.clip();ib.setWidth(Ext.util.TextMetrics.measure(ib,this.text).width+ib.getFrameWidth('lr'));}}
 if(this.minWidth){if(this.el.getWidth()<this.minWidth){this.el.setWidth(this.minWidth);}}}},setHandler:function(handler,scope){this.handler=handler;this.scope=scope;},setText:function(text){this.text=text;if(this.el){this.el.child("td.x-btn-mc "+this.buttonSelector).update(text);}
 this.doAutoWidth();},getText:function(){return this.text;},toggle:function(state){state=state===undefined?!this.pressed:state;if(state!=this.pressed){if(state){this.el.addClass("x-btn-pressed");this.pressed=true;this.fireEvent("toggle",this,true);}else{this.el.removeClass("x-btn-pressed");this.pressed=false;this.fireEvent("toggle",this,false);}

Modified: mickael/trunk/ext/v3.0.0-a1/package/color-palette.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/color-palette.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/color-palette.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,5 +7,5 @@
  */
 
 
-Ext.ColorPalette=function(config){Ext.ColorPalette.superclass.constructor.call(this,config);this.addEvents('select');if(this.handler){this.on("select",this.handler,this.scope,true);}};Ext.extend(Ext.ColorPalette,Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:'click',ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],onRender:function(container,position){var t=this.tpl||new Ext.XTemplate('<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>');var el=document.createElement("div");el.className=this.itemCls;t.overwrite(el,this.colors);container.dom.insertBefore(el,position);this.el=Ext.get(el);this.el.on(this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!='click'){this.el.on('click',Ext.emptyFn,this,{delegate:"a",preventDefault:true});}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var s=this.value;this.value=null;this.select(s);}},handleClick:function(e,t){e.preventDefault();if(!this.disabled){var c=t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(c.toUpperCase());}},select:function(color){color=color.replace("#","");if(color!=this.value||this.allowReselect){var el=this.el;if(this.value){el.child("a.color-"+this.value).removeClass("x-color-palette-sel");}
+Ext.ColorPalette=function(config){Ext.ColorPalette.superclass.constructor.call(this,config);this.addEvents('select');if(this.handler){this.on("select",this.handler,this.scope,true);}};Ext.extend(Ext.ColorPalette,Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:'click',ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],onRender:function(container,position){var t=this.tpl||new Ext.XTemplate('<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>');var el=document.createElement("div");el.id=this.getId();el.className=this.itemCls;t.overwrite(el,this.colors);container.dom.insertBefore(el,position);this.el=Ext.get(el);this.el.on(this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!='click'){this.el.on('click',Ext.emptyFn,this,{delegate:"a",preventDefault:true});}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var s=this.value;this.value=null;this.select(s);}},handleClick:function(e,t){e.preventDefault();if(!this.disabled){var c=t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(c.toUpperCase());}},select:function(color){color=color.replace("#","");if(color!=this.value||this.allowReselect){var el=this.el;if(this.value){el.child("a.color-"+this.value).removeClass("x-color-palette-sel");}
 el.child("a.color-"+color).addClass("x-color-palette-sel");this.value=color;this.fireEvent("select",this,color);}}});Ext.reg('colorpalette',Ext.ColorPalette);

Modified: mickael/trunk/ext/v3.0.0-a1/package/data/data.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/data/data.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/data/data.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -15,11 +15,11 @@
 f.getField=function(name){return p.fields.get(name);};return f;};Ext.data.Record.AUTO_ID=1000;Ext.data.Record.EDIT='edit';Ext.data.Record.REJECT='reject';Ext.data.Record.COMMIT='commit';Ext.data.Record.prototype={dirty:false,editing:false,error:null,modified:null,join:function(store){this.store=store;},set:function(name,value){if(String(this.data[name])==String(value)){return;}
 this.dirty=true;if(!this.modified){this.modified={};}
 if(typeof this.modified[name]=='undefined'){this.modified[name]=this.data[name];}
-this.data[name]=value;if(!this.editing&&this.store){this.store.afterEdit(this);}},get:function(name){return this.data[name];},beginEdit:function(){this.editing=true;this.modified={};},cancelEdit:function(){this.editing=false;delete this.modified;},endEdit:function(){this.editing=false;if(this.dirty&&this.store){this.store.afterEdit(this);}},reject:function(silent){var m=this.modified;for(var n in m){if(typeof m[n]!="function"){this.data[n]=m[n];}}
+this.data[name]=value;if(!this.editing&&this.store){this.store.afterEdit(this);}},get:function(name){return this.data[name];},beginEdit:function(){this.editing=true;this.modified=this.modified||{};},cancelEdit:function(){this.editing=false;delete this.modified;},endEdit:function(){this.editing=false;if(this.dirty&&this.store){this.store.afterEdit(this);}},reject:function(silent){var m=this.modified;for(var n in m){if(typeof m[n]!="function"){this.data[n]=m[n];}}
 this.dirty=false;delete this.modified;this.editing=false;if(this.store&&silent!==true){this.store.afterReject(this);}},commit:function(silent){this.dirty=false;delete this.modified;this.editing=false;if(this.store&&silent!==true){this.store.afterCommit(this);}},getChanges:function(){var m=this.modified,cs={};for(var n in m){if(m.hasOwnProperty(n)){cs[n]=this.data[n];}}
 return cs;},hasError:function(){return this.error!=null;},clearError:function(){this.error=null;},copy:function(newId){return new this.constructor(Ext.apply({},this.data),newId||this.id);},isModified:function(fieldName){return!!(this.modified&&this.modified.hasOwnProperty(fieldName));}};
 
-Ext.StoreMgr=Ext.apply(new Ext.util.MixedCollection(),{register:function(){for(var i=0,s;s=arguments[i];i++){this.add(s);}},unregister:function(){for(var i=0,s;s=arguments[i];i++){this.remove(this.lookup(s));}},lookup:function(id){return typeof id=="object"?id:this.get(id);},getKey:function(o){return o.storeId||o.id;}});
+Ext.StoreMgr=Ext.apply(new Ext.util.MixedCollection(),{register:function(){for(var i=0,s;s=arguments[i];i++){this.add(s);}},unregister:function(){for(var i=0,s;s=arguments[i];i++){this.remove(this.lookup(s));}},lookup:function(id){return typeof id=="object"?(id.events?id:Ext.create(id,'store')):this.get(id);},getKey:function(o){return o.storeId||o.id;}});
 
 Ext.data.Store=function(config){this.data=new Ext.util.MixedCollection(false);this.data.getKey=function(o){return o.id;};this.baseParams={};this.paramNames={"start":"start","limit":"limit","sort":"sort","dir":"dir"};if(config&&config.data){this.inlineData=config.data;delete config.data;}
 Ext.apply(this,config);if(this.url&&!this.proxy){this.proxy=new Ext.data.HttpProxy({url:this.url});}
@@ -27,7 +27,7 @@
 if(this.reader.onMetaChange){this.reader.onMetaChange=this.onMetaChange.createDelegate(this);}}
 if(this.recordType){this.fields=this.recordType.prototype.fields;}
 this.modified=[];this.addEvents('datachanged','metachange','add','remove','update','clear','beforeload','load','loadexception');if(this.proxy){this.relayEvents(this.proxy,["loadexception"]);}
-this.sortToggle={};if(this.sortInfo){this.setDefaultSort(this.sortInfo.field,this.sortInfo.direction);}
+this.sortToggle={};if(this.sortField){this.setDefaultSort(this.sortField,this.sortDir);}else if(this.sortInfo){this.setDefaultSort(this.sortInfo.field,this.sortInfo.direction);}
 Ext.data.Store.superclass.constructor.call(this);if(this.storeId||this.id){Ext.StoreMgr.register(this);}
 if(this.inlineData){this.loadData(this.inlineData);delete this.inlineData;}else if(this.autoLoad){this.load.defer(10,this,[typeof this.autoLoad=='object'?this.autoLoad:undefined]);}};Ext.extend(Ext.data.Store,Ext.util.Observable,{remoteSort:false,pruneModifiedRecords:false,lastOptions:null,destroy:function(){if(this.id){Ext.StoreMgr.unregister(this);}
 this.data=null;this.purgeListeners();},add:function(records){records=[].concat(records);if(records.length<1){return;}
@@ -53,12 +53,8 @@
 value=this.data.createValueMatcher(value,anyMatch,caseSensitive);return function(r){return value.test(r.data[property]);};},sum:function(property,start,end){var rs=this.data.items,v=0;start=start||0;end=(end||end===0)?end:rs.length-1;for(var i=start;i<=end;i++){v+=(rs[i].data[property]||0);}
 return v;},filter:function(property,value,anyMatch,caseSensitive){var fn=this.createFilterFn(property,value,anyMatch,caseSensitive);return fn?this.filterBy(fn):this.clearFilter();},filterBy:function(fn,scope){this.snapshot=this.snapshot||this.data;this.data=this.queryBy(fn,scope||this);this.fireEvent("datachanged",this);},query:function(property,value,anyMatch,caseSensitive){var fn=this.createFilterFn(property,value,anyMatch,caseSensitive);return fn?this.queryBy(fn):this.data.clone();},queryBy:function(fn,scope){var data=this.snapshot||this.data;return data.filterBy(fn,scope||this);},find:function(property,value,start,anyMatch,caseSensitive){var fn=this.createFilterFn(property,value,anyMatch,caseSensitive);return fn?this.data.findIndexBy(fn,null,start):-1;},findBy:function(fn,scope,start){return this.data.findIndexBy(fn,scope,start);},collect:function(dataIndex,allowNull,bypassFilter){var d=(bypassFilter===true&&this.snapshot)?this.snapshot.items:this.data.items;var v,sv,r=[],l={};for(var i=0,len=d.length;i<len;i++){v=d[i].data[dataIndex];sv=String(v);if((allowNull||!Ext.isEmpty(v))&&!l[sv]){l[sv]=true;r[r.length]=v;}}
 return r;},clearFilter:function(suppressEvent){if(this.isFiltered()){this.data=this.snapshot;delete this.snapshot;if(suppressEvent!==true){this.fireEvent("datachanged",this);}}},isFiltered:function(){return this.snapshot&&this.snapshot!=this.data;},afterEdit:function(record){if(this.modified.indexOf(record)==-1){this.modified.push(record);}
-this.fireEvent("update",this,record,Ext.data.Record.EDIT);},afterReject:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.REJECT);},afterCommit:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.COMMIT);},commitChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].commit();}},rejectChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].reject();}},onMetaChange:function(meta,rtype,o){this.recordType=rtype;this.fields=rtype.prototype.fields;delete this.snapshot;this.sortInfo=meta.sortInfo;this.modified=[];this.fireEvent('metachange',this,this.reader.meta);},findInsertIndex:function(record){this.suspendEvents();var data=this.data.clone();this.data.add(record);this.applySort();var index=this.data.indexOf(record);this.data=data;this.resumeEvents();return index;},setBaseParam:function(name,value){this.baseParams=this.baseParams||{};this.baseParams[name]=value;}});
+this.fireEvent("update",this,record,Ext.data.Record.EDIT);},afterReject:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.REJECT);},afterCommit:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.COMMIT);},commitChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].commit();}},rejectChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].reject();}},onMetaChange:function(meta,rtype,o){this.recordType=rtype;this.fields=rtype.prototype.fields;delete this.snapshot;this.sortInfo=meta.sortInfo;this.modified=[];this.fireEvent('metachange',this,this.reader.meta);},findInsertIndex:function(record){this.suspendEvents();var data=this.data.clone();this.data.add(record);this.applySort();var index=this.data.indexOf(record);this.data=data;this.resumeEvents();return index;},setBaseParam:function(name,value){this.baseParams=this.baseParams||{};this.baseParams[name]=value;}});Ext.reg('store',Ext.data.Store);
 
-Ext.data.SimpleStore=function(config){Ext.data.SimpleStore.superclass.constructor.call(this,Ext.apply(config,{reader:new Ext.data.ArrayReader({id:config.id},Ext.data.Record.create(config.fields))}));};Ext.extend(Ext.data.SimpleStore,Ext.data.Store,{loadData:function(data,append){if(this.expandData===true){var r=[];for(var i=0,len=data.length;i<len;i++){r[r.length]=[data[i]];}
-data=r;}
-Ext.data.SimpleStore.superclass.loadData.call(this,data,append);}});
-
 Ext.data.Connection=function(config){Ext.apply(this,config);this.addEvents("beforerequest","requestcomplete","requestexception");Ext.data.Connection.superclass.constructor.call(this);};Ext.extend(Ext.data.Connection,Ext.util.Observable,{timeout:30000,autoAbort:false,disableCaching:true,disableCachingParam:'_dc',request:function(o){if(this.fireEvent("beforerequest",this,o)!==false){var p=o.params;if(typeof p=="function"){p=p.call(o.scope||window,o);}
 if(typeof p=="object"){p=Ext.urlEncode(p);}
 if(this.extraParams){var extras=Ext.urlEncode(this.extraParams);p=p?(p+'&'+extras):extras;}
@@ -123,12 +119,14 @@
 return{success:success,records:records,totalRecords:totalRecords};}});
 
 Ext.data.XmlReader=function(meta,recordType){meta=meta||{};Ext.data.XmlReader.superclass.constructor.call(this,meta,recordType||meta.fields);};Ext.extend(Ext.data.XmlReader,Ext.data.DataReader,{read:function(response){var doc=response.responseXML;if(!doc){throw{message:"XmlReader.read: XML Document not available"};}
-return this.readRecords(doc);},readRecords:function(doc){this.xmlData=doc;var root=doc.documentElement||doc;var q=Ext.DomQuery;var recordType=this.recordType,fields=recordType.prototype.fields;var sid=this.meta.id;var totalRecords=0,success=true;if(this.meta.totalRecords){totalRecords=q.selectNumber(this.meta.totalRecords,root,0);}
+return this.readRecords(doc);},readRecords:function(doc){this.xmlData=doc;var root=doc.documentElement||doc;var q=Ext.DomQuery;var recordType=this.recordType,fields=recordType.prototype.fields;var sid=this.meta.idPath||this.meta.id;var totalRecords=0,success=true;if(this.meta.totalRecords){totalRecords=q.selectNumber(this.meta.totalRecords,root,0);}
 if(this.meta.success){var sv=q.selectValue(this.meta.success,root,true);success=sv!==false&&sv!=='false';}
 var records=[];var ns=q.select(this.meta.record,root);for(var i=0,len=ns.length;i<len;i++){var n=ns[i];var values={};var id=sid?q.selectValue(sid,n):undefined;for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var v=q.selectValue(f.mapping||f.name,n,f.defaultValue);v=f.convert(v,n);values[f.name]=v;}
 var record=new recordType(values,id);record.node=n;records[records.length]=record;}
 return{success:success,records:records,totalRecords:totalRecords||records.length};}});
 
-Ext.data.ArrayReader=Ext.extend(Ext.data.JsonReader,{readRecords:function(o){var sid=this.meta?this.meta.id:null;var recordType=this.recordType,fields=recordType.prototype.fields;var records=[];var root=o;for(var i=0;i<root.length;i++){var n=root[i];var values={};var id=((sid||sid===0)&&n[sid]!==undefined&&n[sid]!==""?n[sid]:null);for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var k=f.mapping!==undefined&&f.mapping!==null?f.mapping:j;var v=n[k]!==undefined?n[k]:f.defaultValue;v=f.convert(v,n);values[f.name]=v;}
+Ext.data.ArrayReader=Ext.extend(Ext.data.JsonReader,{readRecords:function(o){this.arrayData=o;var s=this.meta;var sid=s?(s.idIndex||s.id):null;var recordType=this.recordType,fields=recordType.prototype.fields;var records=[];if(!this.getRoot){this.getRoot=s.root?this.getJsonAccessor(s.root):function(p){return p;};if(s.totalProperty){this.getTotal=this.getJsonAccessor(s.totalProperty);}}
+var root=this.getRoot(o);for(var i=0;i<root.length;i++){var n=root[i];var values={};var id=((sid||sid===0)&&n[sid]!==undefined&&n[sid]!==""?n[sid]:null);for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var k=f.mapping!==undefined&&f.mapping!==null?f.mapping:j;var v=n[k]!==undefined?n[k]:f.defaultValue;v=f.convert(v,n);values[f.name]=v;}
 var record=new recordType(values,id);record.json=n;records[records.length]=record;}
-return{records:records,totalRecords:records.length};}});
+var totalRecords=records.length;if(s.totalProperty){var v=parseInt(this.getTotal(o),10);if(!isNaN(v)){totalRecords=v;}}
+return{records:records,totalRecords:totalRecords};}});

Modified: mickael/trunk/ext/v3.0.0-a1/package/date.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/date.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/date.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,59 +7,35 @@
  */
 
 
-(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++;Date.formatFunctions[format]=funcName;var code="Date.prototype."+funcName+" = function(){return ";var special=false;var ch='';for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
+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++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code="Date."+funcName+" = function(input){\n"
-+"var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;\n"
-+"input = String(input);\n"
-+"d = new Date();\n"
-+"y = d.getFullYear();\n"
-+"m = d.getMonth();\n"
-+"d = d.getDate();\n"
-+"var results = input.match(Date.parseRegexes["+regexNum+"]);\n"
-+"if (results && results.length > 0) {";var regex="";var special=false;var ch='';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){\n"
-+"v = new Date(u * 1000);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){\n"
-+"v = new Date(y, m, d, h, i, s, ms);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){\n"
-+"v = new Date(y, m, d, h, i, s);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){\n"
-+"v = new Date(y, m, d, h, i);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){\n"
-+"v = new Date(y, m, d, h);\n"
-+"}else if (y >= 0 && m >= 0 && d > 0){\n"
-+"v = new Date(y, m, d);\n"
-+"}else if (y >= 0 && m >= 0){\n"
-+"v = new Date(y, m);\n"
-+"}else if (y >= 0){\n"
-+"v = new Date(y);\n"
-+"}\n}\nreturn (v && (z || o))?"
+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;\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"
++" 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=$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"
 +"if (h == 12) { h = 0; }\n"
 +"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"},g:function(){return $f("G");},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{1,2})"},h:function(){return $f("H");},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"(\\d{2})"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1);","var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);","var mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+\-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1);","var hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60);","var mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+\-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,4}"},Z:{g:1,c:"z = results[{0}] * 1;\n"
-+"z = (-43200 <= z && z <= 50400)? z : null;\n",s:"([+\-]?\\d{1,5})"},c:function(){var calc=[];var arr=[$f("Y",1),$f("m",2),$f("d",3),$f("h",4),$f("i",5),$f("s",6),{c:"ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:"if(results[9] == 'Z'){\no = 0;\n}else{\n"+$f("P",9).c+"\n}"}];for(var i=0,l=arr.length;i<l;++i){calc.push(arr[i].c);}
++"z = (-43200 <= z && z <= 50400)? z : null;\n",s:"([+\-]?\\d{1,5})"},c:function(){var calc=[],arr=[$f("Y",1),$f("m",2),$f("d",3),$f("h",4),$f("i",5),$f("s",6),{c:"ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[9] == 'Z'){","z = 0;","}else{",$f("P",9).c,"}"].join('\n')}];for(var i=0,l=arr.length;i<l;++i){calc.push(arr[i].c);}
 return{g:1,c:calc.join(""),s:arr[0].s+"-"+arr[1].s+"-"+arr[2].s+"T"+arr[3].s+":"+arr[4].s+":"+arr[5].s
 +"((\.|,)\\d+)?"
-+"("+$f("P",null).s+"|Z)"}},U:{g:1,c:"u = parseInt(results[{0}], 10);\n",s:"(-?\\d+)"}}});}());Ext.override(Date,{dateFormat:function(format){if(Date.formatFunctions[format]==null){Date.createNewFormat(format);}
++"(Z|([+\-]\\d{2}:\\d{2}))"}},U:{g:1,c:"u = parseInt(results[{0}], 10);\n",s:"(-?\\d+)"}}});}());Ext.override(Date,{dateFormat:function(format){if(Date.formatFunctions[format]==null){Date.createNewFormat(format);}
 var func=Date.formatFunctions[format];return this[func]();},getTimezone:function(){return this.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/,"$1$2").replace(/[^A-Z]/g,"");},getGMTOffset:function(colon){return(this.getTimezoneOffset()>0?"-":"+")
-+String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset()/60)),2,"0")
++String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")
 +(colon?":":"")
 +String.leftPad(Math.abs(this.getTimezoneOffset()%60),2,"0");},getDayOfYear:function(){var num=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var i=0;i<this.getMonth();++i){num+=Date.daysInMonth[i];}
-return num+this.getDate()-1;},getWeekOfYear:function(){var ms1d=864e5;var ms7d=7*ms1d;var DC3=Date.UTC(this.getFullYear(),this.getMonth(),this.getDate()+3)/ms1d;var AWN=Math.floor(DC3/7);var Wyr=new Date(AWN*ms7d).getUTCFullYear();return AWN-Math.floor(Date.UTC(Wyr,0,7)/ms7d)+1;},isLeapYear:function(){var year=this.getFullYear();return!!((year&3)==0&&(year%100||(year%400==0&&year)));},getFirstDayOfMonth:function(){var day=(this.getDay()-(this.getDate()-1))%7;return(day<0)?(day+7):day;},getLastDayOfMonth:function(){var day=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(day<0)?(day+7):day;},getFirstDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),1);},getLastDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth());},getDaysInMonth:function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];},getSuffix:function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}},clone:function(){return new Date(this.getTime());},clearTime:function(clone){if(clone){return this.clone().clearTime();}
+return num+this.getDate()-1;},getWeekOfYear:function(){var ms1d=864e5,ms7d=7*ms1d;return function(){var DC3=Date.UTC(this.getFullYear(),this.getMonth(),this.getDate()+3)/ms1d,AWN=Math.floor(DC3/7),Wyr=new Date(AWN*ms7d).getUTCFullYear();return AWN-Math.floor(Date.UTC(Wyr,0,7)/ms7d)+1;}}(),isLeapYear:function(){var year=this.getFullYear();return!!((year&3)==0&&(year%100||(year%400==0&&year)));},getFirstDayOfMonth:function(){var day=(this.getDay()-(this.getDate()-1))%7;return(day<0)?(day+7):day;},getLastDayOfMonth:function(){var day=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(day<0)?(day+7):day;},getFirstDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),1);},getLastDateOfMonth:function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth());},getDaysInMonth:function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];},getSuffix:function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}},clone:function(){return new Date(this.getTime());},clearTime:function(clone){if(clone){return this.clone().clearTime();}
 this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;},add:function(interval,value){var d=this.clone();if(!interval||value===0)return d;switch(interval.toLowerCase()){case Date.MILLI:d.setMilliseconds(this.getMilliseconds()+value);break;case Date.SECOND:d.setSeconds(this.getSeconds()+value);break;case Date.MINUTE:d.setMinutes(this.getMinutes()+value);break;case Date.HOUR:d.setHours(this.getHours()+value);break;case Date.DAY:d.setDate(this.getDate()+value);break;case Date.MONTH:var day=this.getDate();if(day>28){day=Math.min(day,this.getFirstDateOfMonth().add('mo',value).getLastDateOfMonth().getDate());}
 d.setDate(day);d.setMonth(this.getMonth()+value);break;case Date.YEAR:d.setFullYear(this.getFullYear()+value);break;}
 return d;},between:function(start,end){var t=this.getTime();return start.getTime()<=t&&t<=end.getTime();}});Date.prototype.format=Date.prototype.dateFormat;if(Ext.isSafari){Date.brokenSetMonth=Date.prototype.setMonth;Date.prototype.setMonth=function(num){if(num<=-1){var n=Math.ceil(-num);var back_year=Math.ceil(n/12);var month=(n%12)?12-n%12:0;this.setFullYear(this.getFullYear()-back_year);return Date.brokenSetMonth.call(this,month);}else{return Date.brokenSetMonth.apply(this,arguments);}};}

Modified: mickael/trunk/ext/v3.0.0-a1/package/datepicker/datepicker.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/datepicker/datepicker.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/datepicker/datepicker.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -36,4 +36,4 @@
 if(ddMatch&&format){var fvalue=d.dateFormat(format);if(ddMatch.test(fvalue)){cell.title=ddText.replace("%0",fvalue);cell.className=" x-date-disabled";}}};var i=0;for(;i<startingPos;i++){textEls[i].innerHTML=(++prevStart);d.setDate(d.getDate()+1);cells[i].className="x-date-prevday";setCellClass(this,cells[i]);}
 for(;i<days;i++){var intDay=i-startingPos+1;textEls[i].innerHTML=(intDay);d.setDate(d.getDate()+1);cells[i].className="x-date-active";setCellClass(this,cells[i]);}
 var extraDays=0;for(;i<42;i++){textEls[i].innerHTML=(++extraDays);d.setDate(d.getDate()+1);cells[i].className="x-date-nextday";setCellClass(this,cells[i]);}
-this.mbtn.setText(this.monthNames[date.getMonth()]+" "+date.getFullYear());if(!this.internalRender){var main=this.el.dom.firstChild;var w=main.offsetWidth;this.el.setWidth(w+this.el.getBorderWidth("lr"));Ext.fly(main).setWidth(w);this.internalRender=true;if(Ext.isOpera&&!this.secondPass){main.rows[0].cells[1].style.width=(w-(main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth))+"px";this.secondPass=true;this.update.defer(10,this,[date]);}}},beforeDestroy:function(){if(this.rendered){Ext.destroy(this.mbtn,this.todayBtn);}}});Ext.reg('datepicker',Ext.DatePicker);
+this.mbtn.setText(this.monthNames[date.getMonth()]+" "+date.getFullYear());if(!this.internalRender){var main=this.el.dom.firstChild;var w=main.offsetWidth;this.el.setWidth(w+this.el.getBorderWidth("lr"));Ext.fly(main).setWidth(w);this.internalRender=true;if(Ext.isOpera&&!this.secondPass){main.rows[0].cells[1].style.width=(w-(main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth))+"px";this.secondPass=true;this.update.defer(10,this,[date]);}}},beforeDestroy:function(){if(this.rendered){Ext.destroy(this.leftClickRpt,this.rightClickRpt,this.monthPicker,this.eventEl,this.mbtn,this.todayBtn);}}});Ext.reg('datepicker',Ext.DatePicker);

Modified: mickael/trunk/ext/v3.0.0-a1/package/dialog/dialogs-debug.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/dialog/dialogs-debug.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/dialog/dialogs-debug.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,8 +6,6 @@
  * http://extjs.com/license
  */
 
-
-
 
 Ext.MessageBox = function(){
     var dlg, opt, mask, waitTimer;

Modified: mickael/trunk/ext/v3.0.0-a1/package/dragdrop/dragdrop.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/dragdrop/dragdrop.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/dragdrop/dragdrop.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,7 +7,7 @@
  */
 
 
-(function(){var Event=Ext.EventManager;var Dom=Ext.lib.Dom;Ext.dd.DragDrop=function(id,sGroup,config){if(id){this.init(id,sGroup,config);}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(x,y){},startDrag:function(x,y){},b4Drag:function(e){},onDrag:function(e){},onDragEnter:function(e,id){},b4DragOver:function(e){},onDragOver:function(e,id){},b4DragOut:function(e){},onDragOut:function(e,id){},b4DragDrop:function(e){},onDragDrop:function(e,id){},onInvalidDrop:function(e){},b4EndDrag:function(e){},endDrag:function(e){},b4MouseDown:function(e){},onMouseDown:function(e){},onMouseUp:function(e){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(constrainTo,pad,inContent){if(typeof pad=="number"){pad={left:pad,right:pad,top:pad,bottom:pad};}
+(function(){var Event=Ext.EventManager;var Dom=Ext.lib.Dom;Ext.dd.DragDrop=function(id,sGroup,config){if(id){this.init(id,sGroup,config);}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},moveOnly:false,unlock:function(){this.locked=false;},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(x,y){},startDrag:function(x,y){},b4Drag:function(e){},onDrag:function(e){},onDragEnter:function(e,id){},b4DragOver:function(e){},onDragOver:function(e,id){},b4DragOut:function(e){},onDragOut:function(e,id){},b4DragDrop:function(e){},onDragDrop:function(e,id){},onInvalidDrop:function(e){},b4EndDrag:function(e){},endDrag:function(e){},b4MouseDown:function(e){},onMouseDown:function(e){},onMouseUp:function(e){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(constrainTo,pad,inContent){if(typeof pad=="number"){pad={left:pad,right:pad,top:pad,bottom:pad};}
 pad=pad||this.defaultPadding;var b=Ext.get(this.getEl()).getBox();var ce=Ext.get(constrainTo);var s=ce.getScroll();var c,cd=ce.dom;if(cd==document.body){c={x:s.left,y:s.top,width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()};}else{var xy=ce.getXY();c={x:xy[0]+s.left,y:xy[1]+s.top,width:cd.clientWidth,height:cd.clientHeight};}
 var topSpace=b.y-c.y;var leftSpace=b.x-c.x;this.resetConstraints();this.setXConstraint(leftSpace-(pad.left||0),c.width-leftSpace-b.width-(pad.right||0),this.xTickSize);this.setYConstraint(topSpace-(pad.top||0),c.height-topSpace-b.height-(pad.bottom||0),this.yTickSize);},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id);}
 return this._domRef;},getDragEl:function(){return Ext.getDom(this.dragElId);},init:function(id,sGroup,config){this.initTarget(id,sGroup,config);Event.on(this.id,"mousedown",this.handleMouseDown,this);},initTarget:function(id,sGroup,config){this.config=config||{};this.DDM=Ext.dd.DDM;this.groups={};if(typeof id!=="string"){id=Ext.id(id);}
@@ -34,13 +34,14 @@
 oDD[sMethod].apply(oDD,args);}}},_onLoad:function(){this.init();Event.on(document,"mouseup",this.handleMouseUp,this,true);Event.on(document,"mousemove",this.handleMouseMove,this,true);Event.on(window,"unload",this._onUnload,this,true);Event.on(window,"resize",this._onResize,this,true);},_onResize:function(e){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(oDD,sGroup){if(!this.initialized){this.init();}
 if(!this.ids[sGroup]){this.ids[sGroup]={};}
 this.ids[sGroup][oDD.id]=oDD;},removeDDFromGroup:function(oDD,sGroup){if(!this.ids[sGroup]){this.ids[sGroup]={};}
-var obj=this.ids[sGroup];if(obj&&obj[oDD.id]){delete obj[oDD.id];}},_remove:function(oDD){for(var g in oDD.groups){if(g&&this.ids[g][oDD.id]){delete this.ids[g][oDD.id];}}
+var obj=this.ids[sGroup];if(obj&&obj[oDD.id]){delete obj[oDD.id];}},_remove:function(oDD){for(var g in oDD.groups){if(g&&this.ids[g]&&this.ids[g][oDD.id]){delete this.ids[g][oDD.id];}}
 delete this.handleIds[oDD.id];},regHandle:function(sDDId,sHandleId){if(!this.handleIds[sDDId]){this.handleIds[sDDId]={};}
 this.handleIds[sDDId][sHandleId]=sHandleId;},isDragDrop:function(id){return(this.getDDById(id))?true:false;},getRelated:function(p_oDD,bTargetsOnly){var oDDs=[];for(var i in p_oDD.groups){for(j in this.ids[i]){var dd=this.ids[i][j];if(!this.isTypeOfDD(dd)){continue;}
 if(!bTargetsOnly||dd.isTarget){oDDs[oDDs.length]=dd;}}}
 return oDDs;},isLegalTarget:function(oDD,oTargetDD){var targets=this.getRelated(oDD,true);for(var i=0,len=targets.length;i<len;++i){if(targets[i].id==oTargetDD.id){return true;}}
 return false;},isTypeOfDD:function(oDD){return(oDD&&oDD.__ygDragDrop);},isHandle:function(sDDId,sHandleId){return(this.handleIds[sDDId]&&this.handleIds[sDDId][sHandleId]);},getDDById:function(id){for(var i in this.ids){if(this.ids[i][id]){return this.ids[i][id];}}
 return null;},handleMouseDown:function(e,oDD){if(Ext.QuickTips){Ext.QuickTips.disable();}
+if(this.dragCurrent){this.handleMouseUp(e);}
 this.currentTarget=e.getTarget();this.dragCurrent=oDD;var el=oDD.getEl();this.startX=e.getPageX();this.startY=e.getPageY();this.deltaX=this.startX-el.offsetLeft;this.deltaY=this.startY-el.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var DDM=Ext.dd.DDM;DDM.startDrag(DDM.startX,DDM.startY);},this.clickTimeThresh);},startDrag:function(x,y){clearTimeout(this.clickTimeout);if(this.dragCurrent){this.dragCurrent.b4StartDrag(x,y);this.dragCurrent.startDrag(x,y);}
 this.dragThreshMet=true;},handleMouseUp:function(e){if(Ext.QuickTips){Ext.QuickTips.enable();}
 if(!this.dragCurrent){return;}

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/form/form-debug.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,8 +6,6 @@
  * http://extjs.com/license
  */
 
-
-
 
 Ext.form.Field = Ext.extend(Ext.BoxComponent,  {
     
@@ -17,6 +15,7 @@
     
     
     
+    
     invalidClass : "x-form-invalid",
     
     invalidText : "The value in this field is invalid",
@@ -110,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
@@ -311,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);
@@ -326,7 +330,7 @@
     // private
     adjustWidth : function(tag, w){
         tag = tag.toLowerCase();
-        if(typeof w == 'number' && !Ext.isSafari){
+        if(typeof w == 'number' && !Ext.isSafari && !this.normalWidth){
             if(Ext.isIE && (tag == 'input' || tag == 'textarea')){
                 if(tag == 'input' && !Ext.isStrict){
                     return this.inEditor ? w : w - 3;
@@ -470,12 +474,11 @@
 };
 Ext.reg('field', Ext.form.Field);
 
-
-
 
 Ext.form.TextField = Ext.extend(Ext.form.Field,  {
     
     
+    
     grow : false,
     
     growMin : 30,
@@ -613,7 +616,7 @@
     },
 
     applyEmptyText : function(){
-        if(this.rendered && this.emptyText && this.getRawValue().length < 1){
+        if(this.rendered && this.emptyText && this.getRawValue().length < 1 && !this.hasFocus){
             this.setRawValue(this.emptyText);
             this.el.addClass(this.emptyClass);
         }
@@ -744,8 +747,6 @@
 });
 Ext.reg('textfield', Ext.form.TextField);
 
-
-
 
 Ext.form.TriggerField = Ext.extend(Ext.form.TextField,  {
     
@@ -871,11 +872,13 @@
     triggerBlur : function(){
         this.mimicing = false;
         Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur, this);
-        if(this.monitorTab){
+        if(this.monitorTab && this.el){
             this.el.un("keydown", this.checkTab, this);
         }
         this.beforeBlur();
-        this.wrap.removeClass('x-trigger-wrap-focus');
+        if(this.wrap){
+            this.wrap.removeClass('x-trigger-wrap-focus');
+        }
         Ext.form.TriggerField.superclass.onBlur.call(this);
     },
 
@@ -974,8 +977,6 @@
     onTrigger2Click : Ext.emptyFn
 });
 Ext.reg('trigger', Ext.form.TriggerField);
-
-
 
 Ext.form.TextArea = Ext.extend(Ext.form.TextField,  {
     
@@ -1064,11 +1065,10 @@
     }
 });
 Ext.reg('textarea', Ext.form.TextArea);
-
-
 
 Ext.form.NumberField = Ext.extend(Ext.form.TextField,  {
     
+    
     fieldClass: "x-form-field x-form-num-field",
     
     allowDecimals : true,
@@ -1173,8 +1173,6 @@
     }
 });
 Ext.reg('numberfield', Ext.form.NumberField);
-
-
 
 Ext.form.Label = Ext.extend(Ext.BoxComponent, {
     
@@ -1205,8 +1203,6 @@
 });
 
 Ext.reg('label', Ext.form.Label);
-
-
 
 Ext.form.DateField = Ext.extend(Ext.form.TriggerField,  {
     
@@ -1244,7 +1240,7 @@
         if(typeof this.maxValue == "string"){
             this.maxValue = this.parseDate(this.maxValue);
         }
-        this.ddMatch = null;
+        this.disabledDatesRE = null;
         this.initDisabledDays();
     },
 
@@ -1328,7 +1324,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;
         }
@@ -1414,7 +1410,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,
@@ -1444,32 +1440,20 @@
     
 });
 Ext.reg('datefield', Ext.form.DateField);
-
-
 
 Ext.form.Checkbox = Ext.extend(Ext.form.Field,  {
     
-    checkedCls: 'x-form-check-checked',
+    focusClass : undefined,
     
-    focusCls: 'x-form-check-focus',
+    fieldClass: "x-form-field",
     
-    overCls: 'x-form-check-over',
-    
-    mouseDownCls: 'x-form-check-down',
-    
-    tabIndex: 0,
-    
     checked: false,
     
-    defaultAutoCreate: {tag: 'input', type: 'checkbox', autocomplete: 'off'},
+    defaultAutoCreate : { tag: "input", type: 'checkbox', autocomplete: "off"},
     
     
-    
 
-    // private
-    baseCls: 'x-form-check',
-
-    // private
+	// private
     initComponent : function(){
         Ext.form.Checkbox.superclass.initComponent.call(this);
         this.addEvents(
@@ -1479,140 +1463,61 @@
     },
 
     // private
+    onResize : function(){
+        Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
+        if(!this.boxLabel){
+            this.el.alignTo(this.wrap, 'c-c');
+        }
+    },
+
+    // private
     initEvents : function(){
         Ext.form.Checkbox.superclass.initEvents.call(this);
-        this.initCheckEvents();
+        this.el.on("click", this.onClick,  this);
+        this.el.on("change", this.onClick,  this);
     },
 
+	// private
+    getResizeEl : function(){
+        return this.wrap;
+    },
+
     // private
-    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);
+    getPositionEl : function(){
+        return this.wrap;
     },
 
+    
+    markInvalid : Ext.emptyFn,
+    
+    clearInvalid : Ext.emptyFn,
+
     // private
     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'});
-
+        this.wrap = this.el.wrap({cls: "x-form-check-wrap"});
         if(this.boxLabel){
-            this.labelEl = this.innerWrap.createChild({
-                tag: 'label',
-                htmlFor: this.el.id,
-                cls: 'x-form-cb-label',
-                html: this.boxLabel
-            });
+            this.wrap.createChild({tag: 'label', htmlFor: this.el.id, cls: 'x-form-cb-label', html: this.boxLabel});
         }
-
-        this.imageEl = this.innerWrap.createChild({
-            tag: 'img',
-            src: Ext.BLANK_IMAGE_URL,
-            cls: this.baseCls
-        }, this.el);
-
         if(this.checked){
             this.setValue(true);
         }else{
             this.checked = this.el.dom.checked;
         }
-        this.originalValue = this.checked;
     },
 
     // private
     onDestroy : function(){
-        if(this.rendered){
-            Ext.destroy(this.imageEl, this.labelEl, this.innerWrap, this.wrap);
+        if(this.wrap){
+            this.wrap.remove();
         }
         Ext.form.Checkbox.superclass.onDestroy.call(this);
     },
 
     // private
-    onFocus: function(e) {
-        Ext.form.Checkbox.superclass.onFocus.call(this, e);
-        this.el.addClass(this.focusCls);
-    },
-
-    // private
-    onBlur: function(e) {
-        Ext.form.Checkbox.superclass.onBlur.call(this, e);
-        this.el.removeClass(this.focusCls);
-    },
-
-    // private
-    onResize : function(){
-        Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
-        if(!this.boxLabel && !this.fieldLabel){
-            this.el.alignTo(this.wrap, 'c-c');
-        }
-    },
-
-    // private
-    onKeyUp : function(e){
-        if(e.getKey() == Ext.EventObject.SPACE){
-            this.onClick(e);
-        }
-    },
-
-    // private
-    onClick : function(e){
-        if (!this.disabled && !this.readOnly) {
-            this.toggleValue();
-        }
-        e.stopEvent();
-    },
-
-    // private
-    onEnable : function(){
-        Ext.form.Checkbox.superclass.onEnable.call(this);
-        this.initCheckEvents();
-    },
-
-    // private
-    onDisable : function(){
-        Ext.form.Checkbox.superclass.onDisable.call(this);
-        this.innerWrap.removeAllListeners();
-    },
-
-    toggleValue : function(){
-        this.setValue(!this.checked);
-    },
-
-    // private
-    getResizeEl : function(){
-        if(!this.resizeEl){
-            this.resizeEl = Ext.isSafari ? this.wrap : (this.wrap.up('.x-form-element', 5) || this.wrap);
-        }
-        return this.resizeEl;
-    },
-
-    // private
-    getPositionEl : function(){
-        return this.wrap;
-    },
-
-    // private
-    getActionEl : function(){
-        return this.wrap;
-    },
-
-    
-    markInvalid : Ext.emptyFn,
-    
-    clearInvalid : Ext.emptyFn,
-
-    // private
     initValue : Ext.emptyFn,
 
     
@@ -1620,90 +1525,72 @@
         if(this.rendered){
             return this.el.dom.checked;
         }
-        return this.checked;
+        return false;
     },
 
+	// private
+    onClick : function(){
+        if(this.el.dom.checked != this.checked){
+            this.setValue(this.el.dom.checked);
+        }
+    },
+
     
-    setValue : function(v) {
-        var checked = this.checked;
+    setValue : function(v){
         this.checked = (v === true || v === 'true' || v == '1' || String(v).toLowerCase() == 'on');
-        
-        if(this.rendered){
+        if(this.el && this.el.dom){
             this.el.dom.checked = this.checked;
             this.el.dom.defaultChecked = this.checked;
-            this.wrap[this.checked? 'addClass' : 'removeClass'](this.checkedCls);
         }
-        
-        if(checked != this.checked){
-            this.fireEvent("check", this, this.checked);
-            if(this.handler){
-                this.handler.call(this.scope || this, this, this.checked);
-            }
-        }
+        this.fireEvent("check", this, this.checked);
     }
-
-    
-    
-    
 });
 Ext.reg('checkbox', Ext.form.Checkbox);
 
-
-
-
 Ext.form.Radio = Ext.extend(Ext.form.Checkbox, {
-    // private
     inputType: 'radio',
-    // private
-    baseCls: 'x-form-radio',
+
     
+    markInvalid : Ext.emptyFn,
     
+    clearInvalid : Ext.emptyFn,
+
+    
     getGroupValue : function(){
-        var c = this.getParent().child('input[name='+this.el.dom.name+']:checked', true);
+    	var p = this.el.up('form') || Ext.getBody();
+        var c = p.child('input[name='+this.el.dom.name+']:checked', true);
         return c ? c.value : null;
     },
-    
-    // private
-    getParent : function(){
-        return this.el.up('form') || Ext.getBody();
-    },
 
     // private
-    toggleValue : function() {
-        if(!this.checked){
-            var els = this.getParent().select('input[name='+this.el.dom.name+']');
-            els.each(function(el){
-                if(el.dom.id == this.id){
-                    this.setValue(true);
-                }else{
-                    Ext.getCmp(el.dom.id).setValue(false);
-                }
-            }, this);
-        }
+    onClick : function(){
+    	if(this.el.dom.checked != this.checked){
+    		var p = this.el.up('form') || Ext.getBody();
+			var els = p.select('input[name='+this.el.dom.name+']');
+			els.each(function(el){
+				if(el.dom.id == this.id){
+					this.setValue(true);
+				}else{
+					Ext.getCmp(el.dom.id).setValue(false);
+				}
+			}, this);
+		}
     },
+
     
-    
     setValue : function(v){
-        if(typeof v=='boolean') {
+    	if (typeof v == 'boolean') {
             Ext.form.Radio.superclass.setValue.call(this, v);
-        }else{
-            var r = this.getParent().child('input[name='+this.el.dom.name+'][value='+v+']', true);
-            if(r && !r.checked){
-                Ext.getCmp(r.id).toggleValue();
+        } else {
+            var r = this.el.up('form').child('input[name='+this.el.dom.name+'][value='+v+']', true);
+            if (r){
+                r.checked = true;
             };
         }
-    },
-    
-    
-    markInvalid : Ext.emptyFn,
-    
-    clearInvalid : Ext.emptyFn
-    
+    }
 });
 Ext.reg('radio', Ext.form.Radio);
 
-
-
 
 Ext.form.ComboBox = Ext.extend(Ext.form.TriggerField, {
     
@@ -1803,7 +1690,7 @@
                     }
                     d.push([value, o.text]);
                 }
-                this.store = new Ext.data.SimpleStore({
+                this.store = new Ext.data.ArrayStore({
                     'id': 0,
                     fields: ['value', 'text'],
                     data : d
@@ -1824,13 +1711,13 @@
         //auto-configure store from local array data
         else if(Ext.isArray(this.store)){
 			if (Ext.isArray(this.store[0])){
-				this.store = new Ext.data.SimpleStore({
+				this.store = new Ext.data.ArrayStore({
 				    fields: ['value','text'],
 				    data: this.store
 				});
 		        this.valueField = 'value';
 			}else{
-				this.store = new Ext.data.SimpleStore({
+				this.store = new Ext.data.ArrayStore({
 				    fields: ['text'],
 				    data: this.store,
 				    expandData: true
@@ -1901,7 +1788,9 @@
             this.list.setWidth(lw);
             this.list.swallowEvent('mousewheel');
             this.assetHeight = 0;
-
+            if(this.syncFont !== false){
+                this.list.setStyle('font-size', this.el.getStyle('font-size'));
+            }
             if(this.title){
                 this.header = this.list.createChild({cls:cls+'-hd', html: this.title});
                 this.assetHeight += this.header.getHeight();
@@ -2044,11 +1933,13 @@
     // private
     onDestroy : function(){
         if(this.view){
-            this.view.el.removeAllListeners();
-            this.view.el.remove();
-            this.view.purgeListeners();
+            Ext.destroy(this.view);
         }
         if(this.list){
+            if(this.innerList){
+                this.innerList.un('mouseover', this.onViewOver, this);
+                this.innerList.un('mousemove', this.onViewMove, this);
+            }
             this.list.destroy();
         }
         this.bindStore(null);
@@ -2467,11 +2358,15 @@
 
 });
 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);
 };
 
@@ -2481,6 +2376,7 @@
     
     
     
+    
     value : "",
     
     alignment: "c-c?",
@@ -2522,10 +2418,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';
@@ -2713,13 +2612,11 @@
     },
 
     beforeDestroy : function(){
-        this.field.destroy();
+        Ext.destroy(this.field);
         this.field = null;
     }
 });
 Ext.reg('editor', Ext.Editor);
-
-
 
 Ext.form.BasicForm = function(el, config){
     Ext.apply(this, config);
@@ -2782,16 +2679,16 @@
     },
 
     // private
-	destroy: function() {
+    destroy: function() {
         this.items.each(function(f){
             Ext.destroy(f);
         });
         if(this.el){
-			this.el.removeAllListeners();
-			this.el.remove();
+            this.el.removeAllListeners();
+            this.el.remove();
         }
-		this.purgeListeners();
-	},
+        this.purgeListeners();
+    },
 
     
     isValid : function(){
@@ -3056,14 +2953,13 @@
 
 // back compat
 Ext.BasicForm = Ext.form.BasicForm;
-
-
 
 Ext.FormPanel = Ext.extend(Ext.Panel, {
 	
     
     
     
+    
     buttonAlign:'center',
 
     
@@ -3078,9 +2974,13 @@
     
     monitorPoll : 200,
 
+    layout:'form',
+
     // private
     initComponent :function(){
         this.form = this.createForm();
+        Ext.FormPanel.superclass.initComponent.call(this);
+
         this.bodyCfg = {
             tag: 'form',
             cls: this.baseCls + '-body',
@@ -3090,9 +2990,8 @@
         if(this.fileUpload) {
             this.bodyCfg.enctype = 'multipart/form-data';
         }
-
-        Ext.FormPanel.superclass.initComponent.call(this);
-
+        this.initItems();
+        
         this.addEvents(
             
             'clientvalidation'
@@ -3238,9 +3137,10 @@
                 return false;
             }
         });
-        if(this.buttons){
-            for(var i = 0, len = this.buttons.length; i < len; i++){
-                var btn = this.buttons[i];
+        if(this.fbar){
+            var fitems = this.fbar.items.items;
+            for(var i = 0, len = fitems.length; i < len; i++){
+                var btn = fitems[i];
                 if(btn.formBind === true && btn.disabled === valid){
                     btn.setDisabled(!valid);
                 }
@@ -3254,8 +3154,6 @@
 Ext.form.FormPanel = Ext.FormPanel;
 
 
-
-
 
 Ext.form.Action = function(form, options){
     this.form = form;
@@ -3488,8 +3386,6 @@
     'submit' : Ext.form.Action.Submit
 };
 
-
-
 
 Ext.form.VTypes = function(){
     // closure these in so they are only created once.

Modified: mickael/trunk/ext/v3.0.0-a1/package/form/form.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/form/form.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/form/form.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -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,8 +29,8 @@
 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 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;}
+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&&!this.normalWidth){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;}
 if(tag=='textarea'){return w-2;}}}
@@ -46,7 +46,7 @@
 if(this.maskRe||(this.vtype&&this.disableKeyFilter!==true&&(this.maskRe=Ext.form.VTypes[this.vtype+'Mask']))){this.el.on("keypress",this.filterKeys,this);}
 if(this.grow){this.el.on("keyup",this.onKeyUpBuffered,this,{buffer:50});this.el.on("click",this.autoSize,this);}
 if(this.enableKeyEvents){this.el.on("keyup",this.onKeyUp,this);this.el.on("keydown",this.onKeyDown,this);this.el.on("keypress",this.onKeyPress,this);}},processValue:function(value){if(this.stripCharsRe){var newValue=value.replace(this.stripCharsRe,'');if(newValue!==value){this.setRawValue(newValue);return newValue;}}
-return value;},filterValidation:function(e){if(!e.isNavKeyPress()){this.validationTask.delay(this.validationDelay);}},onKeyUpBuffered:function(e){if(!e.isNavKeyPress()){this.autoSize();}},onKeyUp:function(e){this.fireEvent('keyup',this,e);},onKeyDown:function(e){this.fireEvent('keydown',this,e);},onKeyPress:function(e){this.fireEvent('keypress',this,e);},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText();},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass);}},preFocus:function(){if(this.emptyText){if(this.el.dom.value==this.emptyText){this.setRawValue('');}
+return value;},filterValidation:function(e){if(!e.isNavKeyPress()){this.validationTask.delay(this.validationDelay);}},onKeyUpBuffered:function(e){if(!e.isNavKeyPress()){this.autoSize();}},onKeyUp:function(e){this.fireEvent('keyup',this,e);},onKeyDown:function(e){this.fireEvent('keydown',this,e);},onKeyPress:function(e){this.fireEvent('keypress',this,e);},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText();},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1&&!this.hasFocus){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass);}},preFocus:function(){if(this.emptyText){if(this.el.dom.value==this.emptyText){this.setRawValue('');}
 this.el.removeClass(this.emptyClass);}
 if(this.selectOnFocus){this.el.dom.select();}},postBlur:function(){this.applyEmptyText();},filterKeys:function(e){if(e.ctrlKey){return;}
 var k=e.getKey();if(Ext.isGecko&&(e.isNavKeyPress()||k==e.BACKSPACE||(k==e.DELETE&&e.button==-1))){return;}
@@ -66,8 +66,9 @@
 this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},alignErrorIcon:function(){if(this.wrap){this.errorIcon.alignTo(this.wrap,'tl-tr',[2,0]);}},onRender:function(ct,position){Ext.form.TriggerField.superclass.onRender.call(this,ct,position);this.wrap=this.el.wrap({cls:"x-form-field-wrap"});this.trigger=this.wrap.createChild(this.triggerConfig||{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.triggerClass});if(this.hideTrigger){this.trigger.setDisplayed(false);}
 this.initTrigger();if(!this.width){this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());}},afterRender:function(){Ext.form.TriggerField.superclass.afterRender.call(this);var y;if(Ext.isIE&&!this.hideTrigger&&this.el.getY()!=(y=this.trigger.getY())){this.el.position();this.el.setY(y);}},initTrigger:function(){this.trigger.on("click",this.onTriggerClick,this,{preventDefault:true});this.trigger.addClassOnOver('x-form-trigger-over');this.trigger.addClassOnClick('x-form-trigger-click');},onDestroy:function(){if(this.trigger){this.trigger.removeAllListeners();this.trigger.remove();}
 if(this.wrap){this.wrap.remove();}
-Ext.form.TriggerField.superclass.onDestroy.call(this);},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass('x-trigger-wrap-focus');this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this,{delay:10});if(this.monitorTab){this.el.on("keydown",this.checkTab,this);}}},checkTab:function(e){if(e.getKey()==e.TAB){this.triggerBlur();}},onBlur:function(){},mimicBlur:function(e){if(!this.wrap.contains(e.target)&&this.validateBlur(e)){this.triggerBlur();}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);if(this.monitorTab){this.el.un("keydown",this.checkTab,this);}
-this.beforeBlur();this.wrap.removeClass('x-trigger-wrap-focus');Ext.form.TriggerField.superclass.onBlur.call(this);},beforeBlur:Ext.emptyFn,validateBlur:function(e){return true;},onDisable:function(){Ext.form.TriggerField.superclass.onDisable.call(this);if(this.wrap){this.wrap.addClass(this.disabledClass);this.el.removeClass(this.disabledClass);}},onEnable:function(){Ext.form.TriggerField.superclass.onEnable.call(this);if(this.wrap){this.wrap.removeClass(this.disabledClass);}},onShow:function(){if(this.wrap){this.wrap.dom.style.display='';this.wrap.dom.style.visibility='visible';}},onHide:function(){this.wrap.dom.style.display='none';},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:'span',cls:'x-form-twin-triggers',cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger2Class}]};},getTrigger:function(index){return this.triggers[index];},initTrigger:function(){var ts=this.trigger.select('.x-form-trigger',true);this.wrap.setStyle('overflow','hidden');var triggerField=this;ts.each(function(t,all,index){t.hide=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='none';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};t.show=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};var triggerIndex='Trigger'+(index+1);if(this['hide'+triggerIndex]){t.dom.style.display='none';}
+Ext.form.TriggerField.superclass.onDestroy.call(this);},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass('x-trigger-wrap-focus');this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this,{delay:10});if(this.monitorTab){this.el.on("keydown",this.checkTab,this);}}},checkTab:function(e){if(e.getKey()==e.TAB){this.triggerBlur();}},onBlur:function(){},mimicBlur:function(e){if(!this.wrap.contains(e.target)&&this.validateBlur(e)){this.triggerBlur();}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur,this);if(this.monitorTab&&this.el){this.el.un("keydown",this.checkTab,this);}
+this.beforeBlur();if(this.wrap){this.wrap.removeClass('x-trigger-wrap-focus');}
+Ext.form.TriggerField.superclass.onBlur.call(this);},beforeBlur:Ext.emptyFn,validateBlur:function(e){return true;},onDisable:function(){Ext.form.TriggerField.superclass.onDisable.call(this);if(this.wrap){this.wrap.addClass(this.disabledClass);this.el.removeClass(this.disabledClass);}},onEnable:function(){Ext.form.TriggerField.superclass.onEnable.call(this);if(this.wrap){this.wrap.removeClass(this.disabledClass);}},onShow:function(){if(this.wrap){this.wrap.dom.style.display='';this.wrap.dom.style.visibility='visible';}},onHide:function(){this.wrap.dom.style.display='none';},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:'span',cls:'x-form-twin-triggers',cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger2Class}]};},getTrigger:function(index){return this.triggers[index];},initTrigger:function(){var ts=this.trigger.select('.x-form-trigger',true);this.wrap.setStyle('overflow','hidden');var triggerField=this;ts.each(function(t,all,index){t.hide=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='none';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};t.show=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};var triggerIndex='Trigger'+(index+1);if(this['hide'+triggerIndex]){t.dom.style.display='none';}
 t.on("click",this['on'+triggerIndex+'Click'],this,{preventDefault:true});t.addClassOnOver('x-form-trigger-over');t.addClassOnClick('x-form-trigger-click');},this);this.triggers=ts.elements;},onTrigger1Click:Ext.emptyFn,onTrigger2Click:Ext.emptyFn});Ext.reg('trigger',Ext.form.TriggerField);
 
 Ext.form.TextArea=Ext.extend(Ext.form.TextField,{growMin:60,growMax:1000,growAppend:'&#160;\n&#160;',growPad:0,enterIsSpecial:false,preventScrollbars:false,onRender:function(ct,position){if(!this.el){this.defaultAutoCreate={tag:"textarea",style:"width:100px;height:60px;",autocomplete:"off"};}
@@ -96,14 +97,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,40 +112,39 @@
 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});}
-this.imageEl=this.innerWrap.createChild({tag:'img',src:Ext.BLANK_IMAGE_URL,cls:this.baseCls},this.el);if(this.checked){this.setValue(true);}else{this.checked=this.el.dom.checked;}
-this.originalValue=this.checked;},onDestroy:function(){if(this.rendered){Ext.destroy(this.imageEl,this.labelEl,this.innerWrap,this.wrap);}
-Ext.form.Checkbox.superclass.onDestroy.call(this);},onFocus:function(e){Ext.form.Checkbox.superclass.onFocus.call(this,e);this.el.addClass(this.focusCls);},onBlur:function(e){Ext.form.Checkbox.superclass.onBlur.call(this,e);this.el.removeClass(this.focusCls);},onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel&&!this.fieldLabel){this.el.alignTo(this.wrap,'c-c');}},onKeyUp:function(e){if(e.getKey()==Ext.EventObject.SPACE){this.onClick(e);}},onClick:function(e){if(!this.disabled&&!this.readOnly){this.toggleValue();}
-e.stopEvent();},onEnable:function(){Ext.form.Checkbox.superclass.onEnable.call(this);this.initCheckEvents();},onDisable:function(){Ext.form.Checkbox.superclass.onDisable.call(this);this.innerWrap.removeAllListeners();},toggleValue:function(){this.setValue(!this.checked);},getResizeEl:function(){if(!this.resizeEl){this.resizeEl=Ext.isSafari?this.wrap:(this.wrap.up('.x-form-element',5)||this.wrap);}
-return this.resizeEl;},getPositionEl:function(){return this.wrap;},getActionEl:function(){return this.wrap;},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,initValue:Ext.emptyFn,getValue:function(){if(this.rendered){return this.el.dom.checked;}
-return this.checked;},setValue:function(v){var checked=this.checked;this.checked=(v===true||v==='true'||v=='1'||String(v).toLowerCase()=='on');if(this.rendered){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked;this.wrap[this.checked?'addClass':'removeClass'](this.checkedCls);}
-if(checked!=this.checked){this.fireEvent("check",this,this.checked);if(this.handler){this.handler.call(this.scope||this,this,this.checked);}}}});Ext.reg('checkbox',Ext.form.Checkbox);
+Ext.form.Checkbox=Ext.extend(Ext.form.Field,{focusClass:undefined,fieldClass:"x-form-field",checked:false,defaultAutoCreate:{tag:"input",type:'checkbox',autocomplete:"off"},initComponent:function(){Ext.form.Checkbox.superclass.initComponent.call(this);this.addEvents('check');},onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel){this.el.alignTo(this.wrap,'c-c');}},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.el.on("click",this.onClick,this);this.el.on("change",this.onClick,this);},getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,onRender:function(ct,position){Ext.form.Checkbox.superclass.onRender.call(this,ct,position);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue;}
+this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:'label',htmlFor:this.el.id,cls:'x-form-cb-label',html:this.boxLabel});}
+if(this.checked){this.setValue(true);}else{this.checked=this.el.dom.checked;}},onDestroy:function(){if(this.wrap){this.wrap.remove();}
+Ext.form.Checkbox.superclass.onDestroy.call(this);},initValue:Ext.emptyFn,getValue:function(){if(this.rendered){return this.el.dom.checked;}
+return false;},onClick:function(){if(this.el.dom.checked!=this.checked){this.setValue(this.el.dom.checked);}},setValue:function(v){this.checked=(v===true||v==='true'||v=='1'||String(v).toLowerCase()=='on');if(this.el&&this.el.dom){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked;}
+this.fireEvent("check",this,this.checked);}});Ext.reg('checkbox',Ext.form.Checkbox);
 
-Ext.form.Radio=Ext.extend(Ext.form.Checkbox,{inputType:'radio',baseCls:'x-form-radio',getGroupValue:function(){var c=this.getParent().child('input[name='+this.el.dom.name+']:checked',true);return c?c.value:null;},getParent:function(){return this.el.up('form')||Ext.getBody();},toggleValue:function(){if(!this.checked){var els=this.getParent().select('input[name='+this.el.dom.name+']');els.each(function(el){if(el.dom.id==this.id){this.setValue(true);}else{Ext.getCmp(el.dom.id).setValue(false);}},this);}},setValue:function(v){if(typeof v=='boolean'){Ext.form.Radio.superclass.setValue.call(this,v);}else{var r=this.getParent().child('input[name='+this.el.dom.name+'][value='+v+']',true);if(r&&!r.checked){Ext.getCmp(r.id).toggleValue();};}},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn});Ext.reg('radio',Ext.form.Radio);
+Ext.form.Radio=Ext.extend(Ext.form.Checkbox,{inputType:'radio',markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,getGroupValue:function(){var p=this.el.up('form')||Ext.getBody();var c=p.child('input[name='+this.el.dom.name+']:checked',true);return c?c.value:null;},onClick:function(){if(this.el.dom.checked!=this.checked){var p=this.el.up('form')||Ext.getBody();var els=p.select('input[name='+this.el.dom.name+']');els.each(function(el){if(el.dom.id==this.id){this.setValue(true);}else{Ext.getCmp(el.dom.id).setValue(false);}},this);}},setValue:function(v){if(typeof v=='boolean'){Ext.form.Radio.superclass.setValue.call(this,v);}else{var r=this.el.up('form').child('input[name='+this.el.dom.name+'][value='+v+']',true);if(r){r.checked=true;};}}});Ext.reg('radio',Ext.form.Radio);
 
 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]);}
-this.store=new Ext.data.SimpleStore({'id':0,fields:['value','text'],data:d});this.valueField='value';this.displayField='text';}
+this.store=new Ext.data.ArrayStore({'id':0,fields:['value','text'],data:d});this.valueField='value';this.displayField='text';}
 s.name=Ext.id();if(!this.lazyRender){this.target=true;this.el=Ext.DomHelper.insertBefore(s,this.autoCreate||this.defaultAutoCreate);Ext.removeNode(s);this.render(this.el.parentNode);}else{Ext.removeNode(s);}}
-else if(Ext.isArray(this.store)){if(Ext.isArray(this.store[0])){this.store=new Ext.data.SimpleStore({fields:['value','text'],data:this.store});this.valueField='value';}else{this.store=new Ext.data.SimpleStore({fields:['text'],data:this.store,expandData:true});this.valueField='text';}
+else if(Ext.isArray(this.store)){if(Ext.isArray(this.store[0])){this.store=new Ext.data.ArrayStore({fields:['value','text'],data:this.store});this.valueField='value';}else{this.store=new Ext.data.ArrayStore({fields:['text'],data:this.store,expandData:true});this.valueField='text';}
 this.displayField='text';this.mode='local';}
 this.selectedIndex=-1;if(this.mode=='local'){if(this.initialConfig.queryDelay===undefined){this.queryDelay=10;}
 if(this.initialConfig.minChars===undefined){this.minChars=0;}}},onRender:function(ct,position){Ext.form.ComboBox.superclass.onRender.call(this,ct,position);if(this.hiddenName){this.hiddenField=this.el.insertSibling({tag:'input',type:'hidden',name:this.hiddenName,id:(this.hiddenId||this.hiddenName)},'before',true);this.el.dom.removeAttribute('name');}
 if(Ext.isGecko){this.el.dom.setAttribute('autocomplete','off');}
 if(!this.lazyInit){this.initList();}else{this.on('focus',this.initList,this,{single:true});}
-if(!this.editable){this.editable=true;this.setEditable(false);}},initValue:function(){Ext.form.ComboBox.superclass.initValue.call(this);if(this.hiddenField){this.hiddenField.value=this.hiddenValue!==undefined?this.hiddenValue:this.value!==undefined?this.value:'';}},initList:function(){if(!this.list){var cls='x-combo-list';this.list=new Ext.Layer({shadow:this.shadow,cls:[cls,this.listClass].join(' '),constrain:false});var lw=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth);this.list.setWidth(lw);this.list.swallowEvent('mousewheel');this.assetHeight=0;if(this.title){this.header=this.list.createChild({cls:cls+'-hd',html:this.title});this.assetHeight+=this.header.getHeight();}
+if(!this.editable){this.editable=true;this.setEditable(false);}},initValue:function(){Ext.form.ComboBox.superclass.initValue.call(this);if(this.hiddenField){this.hiddenField.value=this.hiddenValue!==undefined?this.hiddenValue:this.value!==undefined?this.value:'';}},initList:function(){if(!this.list){var cls='x-combo-list';this.list=new Ext.Layer({shadow:this.shadow,cls:[cls,this.listClass].join(' '),constrain:false});var lw=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth);this.list.setWidth(lw);this.list.swallowEvent('mousewheel');this.assetHeight=0;if(this.syncFont!==false){this.list.setStyle('font-size',this.el.getStyle('font-size'));}
+if(this.title){this.header=this.list.createChild({cls:cls+'-hd',html:this.title});this.assetHeight+=this.header.getHeight();}
 this.innerList=this.list.createChild({cls:cls+'-inner'});this.innerList.on('mouseover',this.onViewOver,this);this.innerList.on('mousemove',this.onViewMove,this);this.innerList.setWidth(lw-this.list.getFrameWidth('lr'));if(this.pageSize){this.footer=this.list.createChild({cls:cls+'-ft'});this.pageTb=new Ext.PagingToolbar({store:this.store,pageSize:this.pageSize,renderTo:this.footer});this.assetHeight+=this.footer.getHeight();}
 if(!this.tpl){this.tpl='<tpl for="."><div class="'+cls+'-item">{'+this.displayField+'}</div></tpl>';}
 this.view=new Ext.DataView({applyTo:this.innerList,tpl:this.tpl,singleSelect:true,selectedClass:this.selectedClass,itemSelector:this.itemSelector||'.'+cls+'-item'});this.view.on('click',this.onViewClick,this);this.bindStore(this.store,true);if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:'se'});this.resizer.on('resize',function(r,w,h){this.maxHeight=h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;this.listWidth=w;this.innerList.setWidth(w-this.list.getFrameWidth('lr'));this.restrictHeight();},this);this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom',this.handleHeight+'px');}}},bindStore:function(store,initial){if(this.store&&!initial){this.store.un('beforeload',this.onBeforeLoad,this);this.store.un('load',this.onLoad,this);this.store.un('loadexception',this.collapse,this);if(!store){this.store=null;if(this.view){this.view.setStore(null);}}}
 if(store){this.store=Ext.StoreMgr.lookup(store);this.store.on('beforeload',this.onBeforeLoad,this);this.store.on('load',this.onLoad,this);this.store.on('loadexception',this.collapse,this);if(this.view){this.view.setStore(store);}}},initEvents:function(){Ext.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{"up":function(e){this.inKeyMode=true;this.selectPrev();},"down":function(e){if(!this.isExpanded()){this.onTriggerClick();}else{this.inKeyMode=true;this.selectNext();}},"enter":function(e){this.onViewClick();this.delayedCheck=true;this.unsetDelayCheck.defer(10,this);},"esc":function(e){this.collapse();},"tab":function(e){this.onViewClick(false);return true;},scope:this,doRelay:function(foo,bar,hname){if(hname=='down'||this.scope.isExpanded()){return Ext.KeyNav.prototype.doRelay.apply(this,arguments);}
 return true;},forceKeyDown:true});this.queryDelay=Math.max(this.queryDelay||10,this.mode=='local'?10:250);this.dqTask=new Ext.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Ext.util.DelayedTask(this.onTypeAhead,this);}
 if(this.editable!==false){this.el.on("keyup",this.onKeyUp,this);}
-if(this.forceSelection){this.on('blur',this.doForce,this);}},onDestroy:function(){if(this.view){this.view.el.removeAllListeners();this.view.el.remove();this.view.purgeListeners();}
-if(this.list){this.list.destroy();}
+if(this.forceSelection){this.on('blur',this.doForce,this);}},onDestroy:function(){if(this.view){Ext.destroy(this.view);}
+if(this.list){if(this.innerList){this.innerList.un('mouseover',this.onViewOver,this);this.innerList.un('mousemove',this.onViewMove,this);}
+this.list.destroy();}
 this.bindStore(null);Ext.form.ComboBox.superclass.onDestroy.call(this);},unsetDelayCheck:function(){delete this.delayedCheck;},fireKey:function(e){if(e.isNavKeyPress()&&!this.isExpanded()&&!this.delayedCheck){this.fireEvent("specialkey",this,e);}},onResize:function(w,h){Ext.form.ComboBox.superclass.onResize.apply(this,arguments);if(this.list&&this.listWidth===undefined){var lw=Math.max(w,this.minListWidth);this.list.setWidth(lw);this.innerList.setWidth(lw-this.list.getFrameWidth('lr'));}},onEnable:function(){Ext.form.ComboBox.superclass.onEnable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=false;}},onDisable:function(){Ext.form.ComboBox.superclass.onDisable.apply(this,arguments);if(this.hiddenField){this.hiddenField.disabled=true;}},setEditable:function(value){if(value==this.editable){return;}
 this.editable=value;if(!value){this.el.dom.setAttribute('readOnly',true);this.el.on('mousedown',this.onTriggerClick,this);this.el.addClass('x-combo-noedit');}else{this.el.dom.setAttribute('readOnly',false);this.el.un('mousedown',this.onTriggerClick,this);this.el.removeClass('x-combo-noedit');}},onBeforeLoad:function(){if(!this.hasFocus){return;}
 this.innerList.update(this.loadingText?'<div class="loading-indicator">'+this.loadingText+'</div>':'');this.restrictHeight();this.selectedIndex=-1;},onLoad:function(){if(!this.hasFocus){return;}
@@ -166,7 +166,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);}
@@ -184,7 +186,7 @@
 this.fireEvent("startedit",this.boundEl,this.startValue);},deferredFocus:function(){if(this.editing){this.field.focus();}},cancelEdit:function(remainVisible){if(this.editing){var v=this.getValue();this.setValue(this.startValue);if(remainVisible!==true){this.hide();}
 this.fireEvent("canceledit",this,v,this.startValue);}},onBlur:function(){if(this.allowBlur!==true&&this.editing){this.completeEdit();}},onHide:function(){if(this.editing){this.completeEdit();return;}
 this.field.blur();if(this.field.collapse){this.field.collapse();}
-this.el.hide();if(this.hideEl!==false){this.boundEl.show();}},setValue:function(v){this.field.setValue(v);},getValue:function(){return this.field.getValue();},beforeDestroy:function(){this.field.destroy();this.field=null;}});Ext.reg('editor',Ext.Editor);
+this.el.hide();if(this.hideEl!==false){this.boundEl.show();}},setValue:function(v){this.field.setValue(v);},getValue:function(){return this.field.getValue();},beforeDestroy:function(){Ext.destroy(this.field);this.field=null;}});Ext.reg('editor',Ext.Editor);
 
 Ext.form.BasicForm=function(el,config){Ext.apply(this,config);this.items=new Ext.util.MixedCollection(false,function(o){return o.id||(o.id=Ext.id());});this.addEvents('beforeaction','actionfailed','actioncomplete');if(el){this.initEl(el);}
 Ext.form.BasicForm.superclass.constructor.call(this);};Ext.extend(Ext.form.BasicForm,Ext.util.Observable,{timeout:30,activeAction:null,trackResetOnLoad:false,initEl:function(el){this.el=Ext.get(el);this.id=this.el.id||Ext.id();if(!this.standardSubmit){this.el.on('submit',this.onSubmit,this);}
@@ -201,10 +203,10 @@
 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,initComponent:function(){this.form=this.createForm();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';}
-Ext.FormPanel.superclass.initComponent.call(this);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);}}}
+var valid=true;this.form.items.each(function(f){if(!f.isValid(true)){valid=false;return false;}});if(this.fbar){var fitems=this.fbar.items.items;for(var i=0,len=fitems.length;i<len;i++){var btn=fitems[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;
 
 Ext.form.Action=function(form,options){this.form=form;this.options=options||{};};Ext.form.Action.CLIENT_INVALID='client';Ext.form.Action.SERVER_INVALID='server';Ext.form.Action.CONNECT_FAILURE='connect';Ext.form.Action.LOAD_FAILURE='load';Ext.form.Action.prototype={type:'default',run:function(options){},success:function(response){},handleResponse:function(response){},failure:function(response){this.response=response;this.failureType=Ext.form.Action.CONNECT_FAILURE;this.form.afterAction(this,false);},processResponse:function(response){this.response=response;if(!response.responseText){return true;}

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/grid/edit-grid-debug.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,8 +6,6 @@
  * http://extjs.com/license
  */
 
-
-
 
 Ext.grid.EditorGridPanel = Ext.extend(Ext.grid.GridPanel, {
     
@@ -24,7 +22,7 @@
 	
     // private
     trackMouseOver: false, // causes very odd FF errors
-    
+
     // private
     initComponent : function(){
         Ext.grid.EditorGridPanel.superclass.initComponent.call(this);
@@ -49,7 +47,7 @@
     // private
     initEvents : function(){
         Ext.grid.EditorGridPanel.superclass.initEvents.call(this);
-        
+
         this.on("bodyscroll", this.stopEditing, this, [true]);
 
         if(this.clicksToEdit == 1){
@@ -137,6 +135,9 @@
             if(this.fireEvent("beforeedit", e) !== false && !e.cancel){
                 this.editing = true;
                 var ed = this.colModel.getCellEditor(col, row);
+                if(!ed){
+                    return;
+                }
                 if(!ed.rendered){
                     ed.render(this.view.getEditorParent(ed));
                 }
@@ -146,25 +147,26 @@
                     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);
+                    ed.startEdit(this.view.getCell(row, col).firstChild, v === undefined ? '' : v);
                 }).defer(50, this);
             }
         }
     },
-    
+
     // private
     preEditValue : function(r, field){
         var value = r.data[field];
         return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlDecode(value) : value;
     },
-    
+
     // private
 	postEditValue : function(value, originalValue, r, field){
 		return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlEncode(value) : value;
 	},
-	    
+
     
     stopEditing : function(cancel){
         if(this.activeEditor){
@@ -172,7 +174,7 @@
         }
         this.activeEditor = null;
     },
-    
+
     // private
     onDestroy: function() {
         if(this.rendered){
@@ -186,8 +188,6 @@
     }
 });
 Ext.reg('editorgrid', Ext.grid.EditorGridPanel);
-
-
 // private
 // This is a support class used internally by the Grid components
 Ext.grid.GridEditor = function(field, config){
@@ -203,8 +203,6 @@
     shim:false,
     shadow:false
 });
-
-
 
 Ext.grid.PropertyRecord = Ext.data.Record.create([
     {name:'name',type:'string'}, 'value'

Modified: mickael/trunk/ext/v3.0.0-a1/package/grid/edit-grid.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/grid/edit-grid.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/grid/edit-grid.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -12,8 +12,9 @@
 this.on("celldblclick",this.onCellDblClick,this);}
 this.getGridEl().addClass("xedit-grid");},onCellDblClick:function(g,row,col){this.startEditing(row,col);},onAutoEditClick:function(e,t){if(e.button!==0){return;}
 var row=this.view.findRowIndex(t);var col=this.view.findCellIndex(t);if(row!==false&&col!==false){this.stopEditing();if(this.selModel.getSelectedCell){var sc=this.selModel.getSelectedCell();if(sc&&sc.cell[0]===row&&sc.cell[1]===col){this.startEditing(row,col);}}else{if(this.selModel.isSelected(row)){this.startEditing(row,col);}}}},onEditComplete:function(ed,value,startValue){this.editing=false;this.activeEditor=null;ed.un("specialkey",this.selModel.onEditorKey,this.selModel);var r=ed.record;var field=this.colModel.getDataIndex(ed.col);value=this.postEditValue(value,startValue,r,field);if(String(value)!==String(startValue)){var e={grid:this,record:r,field:field,originalValue:startValue,value:value,row:ed.row,column:ed.col,cancel:false};if(this.fireEvent("validateedit",e)!==false&&!e.cancel){r.set(field,e.value);delete e.cancel;this.fireEvent("afteredit",e);}}
-this.view.focusCell(ed.row,ed.col);},startEditing:function(row,col){this.stopEditing();if(this.colModel.isCellEditable(col,row)){this.view.ensureVisible(row,col,true);var r=this.store.getAt(row);var field=this.colModel.getDataIndex(col);var e={grid:this,record:r,field:field,value:r.data[field],row:row,column:col,cancel:false};if(this.fireEvent("beforeedit",e)!==false&&!e.cancel){this.editing=true;var ed=this.colModel.getCellEditor(col,row);if(!ed.rendered){ed.render(this.view.getEditorParent(ed));}
-(function(){ed.row=row;ed.col=col;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);}).defer(50,this);}}},preEditValue:function(r,field){var value=r.data[field];return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlDecode(value):value;},postEditValue:function(value,originalValue,r,field){return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlEncode(value):value;},stopEditing:function(cancel){if(this.activeEditor){this.activeEditor[cancel===true?'cancelEdit':'completeEdit']();}
+this.view.focusCell(ed.row,ed.col);},startEditing:function(row,col){this.stopEditing();if(this.colModel.isCellEditable(col,row)){this.view.ensureVisible(row,col,true);var r=this.store.getAt(row);var field=this.colModel.getDataIndex(col);var e={grid:this,record:r,field:field,value:r.data[field],row:row,column:col,cancel:false};if(this.fireEvent("beforeedit",e)!==false&&!e.cancel){this.editing=true;var ed=this.colModel.getCellEditor(col,row);if(!ed){return;}
+if(!ed.rendered){ed.render(this.view.getEditorParent(ed));}
+(function(){ed.row=row;ed.col=col;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);}).defer(50,this);}}},preEditValue:function(r,field){var value=r.data[field];return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlDecode(value):value;},postEditValue:function(value,originalValue,r,field){return this.autoEncode&&typeof value=='string'?Ext.util.Format.htmlEncode(value):value;},stopEditing:function(cancel){if(this.activeEditor){this.activeEditor[cancel===true?'cancelEdit':'completeEdit']();}
 this.activeEditor=null;},onDestroy:function(){if(this.rendered){var cols=this.colModel.config;for(var i=0,len=cols.length;i<len;i++){var c=cols[i];Ext.destroy(c.editor);}}
 Ext.grid.EditorGridPanel.superclass.onDestroy.call(this);}});Ext.reg('editorgrid',Ext.grid.EditorGridPanel);
 

Modified: mickael/trunk/ext/v3.0.0-a1/package/grid/grid.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/grid/grid.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/grid/grid.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,7 +7,7 @@
  */
 
 
-Ext.grid.GridView=function(config){Ext.apply(this,config);this.addEvents("beforerowremoved","beforerowsinserted","beforerefresh","rowremoved","rowsinserted","rowupdated","refresh");Ext.grid.GridView.superclass.constructor.call(this);};Ext.extend(Ext.grid.GridView,Ext.util.Observable,{deferEmptyText:true,scrollOffset:19,autoFill:false,forceFit:false,sortClasses:["sort-asc","sort-desc"],sortAscText:"Sort Ascending",sortDescText:"Sort Descending",columnsText:"Columns",selectedRowClass:"x-grid3-row-selected",borderWidth:2,tdClass:'x-grid3-cell',hdCls:'x-grid3-hd',cellSelectorDepth:4,rowSelectorDepth:10,cellSelector:'td.x-grid3-cell',rowSelector:'div.x-grid3-row',initTemplates:function(){var ts=this.templates||{};if(!ts.master){ts.master=new Ext.Template('<div class="x-grid3" hidefocus="true">','<div class="x-grid3-viewport">','<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset">{header}</div></div><div class="x-clear"></div></div>','<div class="x-grid3-scroller"><div class="x-grid3-body">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>',"</div>",'<div class="x-grid3-resize-marker">&#160;</div>','<div class="x-grid3-resize-proxy">&#160;</div>',"</div>");}
+Ext.grid.GridView=function(config){Ext.apply(this,config);this.addEvents("beforerowremoved","beforerowsinserted","beforerefresh","rowremoved","rowsinserted","rowupdated","refresh");Ext.grid.GridView.superclass.constructor.call(this);};Ext.extend(Ext.grid.GridView,Ext.util.Observable,{deferEmptyText:true,scrollOffset:19,autoFill:false,forceFit:false,sortClasses:["sort-asc","sort-desc"],sortAscText:"Sort Ascending",sortDescText:"Sort Descending",columnsText:"Columns",selectedRowClass:"x-grid3-row-selected",borderWidth:2,tdClass:'x-grid3-cell',hdCls:'x-grid3-hd',markDirty:true,cellSelectorDepth:4,rowSelectorDepth:10,cellSelector:'td.x-grid3-cell',rowSelector:'div.x-grid3-row',initTemplates:function(){var ts=this.templates||{};if(!ts.master){ts.master=new Ext.Template('<div class="x-grid3" hidefocus="true">','<div class="x-grid3-viewport">','<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset">{header}</div></div><div class="x-clear"></div></div>','<div class="x-grid3-scroller"><div class="x-grid3-body">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>',"</div>",'<div class="x-grid3-resize-marker">&#160;</div>','<div class="x-grid3-resize-proxy">&#160;</div>',"</div>");}
 if(!ts.header){ts.header=new Ext.Template('<table border="0" cellspacing="0" cellpadding="0" style="{tstyle}">','<thead><tr class="x-grid3-hd-row">{cells}</tr></thead>',"</table>");}
 if(!ts.hcell){ts.hcell=new Ext.Template('<td class="x-grid3-hd x-grid3-cell x-grid3-td-{id}" style="{style}"><div {tooltip} {attr} class="x-grid3-hd-inner x-grid3-hd-{id}" unselectable="on" style="{istyle}">',this.grid.enableHdMenu?'<a class="x-grid3-hd-btn" href="#"></a>':'','{value}<img class="x-grid3-sort-icon" src="',Ext.BLANK_IMAGE_URL,'" />',"</div></td>");}
 if(!ts.body){ts.body=new Ext.Template('{rows}');}
@@ -21,13 +21,13 @@
 return this.fly(el).findParent(this.cellSelector,this.cellSelectorDepth);},findCellIndex:function(el,requiredCls){var cell=this.findCell(el);if(cell&&(!requiredCls||this.fly(cell).hasClass(requiredCls))){return this.getCellIndex(cell);}
 return false;},getCellIndex:function(el){if(el){var m=el.className.match(this.colRe);if(m&&m[1]){return this.cm.getIndexById(m[1]);}}
 return false;},findHeaderCell:function(el){var cell=this.findCell(el);return cell&&this.fly(cell).hasClass(this.hdCls)?cell:null;},findHeaderIndex:function(el){return this.findCellIndex(el,this.hdCls);},findRow:function(el){if(!el){return false;}
-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.focusRow(row);},removeRows:function(firstRow,lastRow){var bd=this.mainBody.dom;for(var rowIndex=firstRow;rowIndex<=lastRow;rowIndex++){Ext.removeNode(bd.childNodes[firstRow]);}
-this.focusRow(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);}
+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;}
-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';}
+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(this.markDirty&&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";}
 if(r.dirty){alt[1]=" x-grid3-dirty-row";}
@@ -35,35 +35,39 @@
 rp.alt=alt.join(" ");rp.cells=cb.join("");buf[buf.length]=rt.apply(rp);}
 return buf.join("");},processRows:function(startRow,skipStripe){if(this.ds.getCount()<1){return;}
 skipStripe=skipStripe||!this.grid.stripeRows;startRow=startRow||0;var rows=this.getRows();var cls=' x-grid3-row-alt ';for(var i=startRow,len=rows.length;i<len;i++){var row=rows[i];row.rowIndex=i;if(!skipStripe){var isAlt=((i+1)%2==0);var hasAlt=(' '+row.className+' ').indexOf(cls)!=-1;if(isAlt==hasAlt){continue;}
-if(isAlt){row.className+=" x-grid3-row-alt";}else{row.className=row.className.replace("x-grid3-row-alt","");}}}},afterRender:function(){this.mainBody.dom.innerHTML=this.renderRows();this.processRows(0,true);if(this.deferEmptyText!==true){this.applyEmptyText();}},renderUI:function(){var header=this.renderHeaders();var body=this.templates.body.apply({rows:''});var html=this.templates.master.apply({body:body,header:header});var g=this.grid;g.getGridEl().dom.innerHTML=html;this.initElements();Ext.fly(this.innerHd).on("click",this.handleHdDown,this);this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("mousemove",this.handleHdMove,this);this.scroller.on('scroll',this.syncScroll,this);if(g.enableColumnResize!==false){this.splitone=new Ext.grid.GridView.SplitDragZone(g,this.mainHd.dom);}
+if(isAlt){row.className+=" x-grid3-row-alt";}else{row.className=row.className.replace("x-grid3-row-alt","");}}}},afterRender:function(){if(!this.ds||!this.cm){return;}
+this.mainBody.dom.innerHTML=this.renderRows();this.processRows(0,true);if(this.deferEmptyText!==true){this.applyEmptyText();}},renderUI:function(){var header=this.renderHeaders();var body=this.templates.body.apply({rows:''});var html=this.templates.master.apply({body:body,header:header});var g=this.grid;g.getGridEl().dom.innerHTML=html;this.initElements();Ext.fly(this.innerHd).on("click",this.handleHdDown,this);this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("mousemove",this.handleHdMove,this);this.scroller.on('scroll',this.syncScroll,this);if(g.enableColumnResize!==false){this.splitone=new Ext.grid.GridView.SplitDragZone(g,this.mainHd.dom);}
 if(g.enableColumnMove){this.columnDrag=new Ext.grid.GridView.ColumnDragZone(g,this.innerHd);this.columnDrop=new Ext.grid.HeaderDropZone(g,this.mainHd.dom);}
 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(g.autoHeight){this.scroller.dom.style.overflow='visible';if(Ext.isSafari){this.scroller.dom.style.position='static';}}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){row=Math.min(row,Math.max(0,this.getRows().length-1));var xy=this.ensureVisible(row,col,hscroll);this.focusEl.setXY(xy||this.scroller.getXY());if(Ext.isGecko){this.focusEl.focus();}else{this.focusEl.focus.defer(1,this.focusEl);}},ensureVisible:function(row,col,hscroll){if(typeof row!="number"){row=row.rowIndex;}
-if(!this.ds){return;}
-if(row<0||row>=this.ds.getCount()){return;}
+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;}
+if(!this.ds){return null;}
+if(row<0||row>=this.ds.getCount()){return null;}
 col=(col!==undefined?col:0);var rowEl=this.getRow(row),cellEl;if(!(hscroll===false&&col===0)){while(this.cm.isHidden(col)){col++;}
 cellEl=this.getCell(row,col);}
-if(!rowEl){return;}
-var c=this.scroller.dom;var ctop=0;var p=rowEl,stop=this.el.dom;while(p&&p!=stop){ctop+=p.offsetTop;p=p.offsetParent;}
+return{row:rowEl,cell:cellEl};},getResolvedXY:function(resolved){if(!resolved){return null;}
+var s=this.scroller.dom,c=resolved.cell,r=resolved.row;return c?Ext.fly(c).getXY():[s.scrollLeft+this.el.getX(),Ext.fly(r).getY()];},syncFocusEl:function(row,col,hscroll){var xy=row;if(!Ext.isArray(xy)){row=Math.min(row,Math.max(0,this.getRows().length-1));xy=this.getResolvedXY(this.resolveCell(row,col,hscroll));}
+this.focusEl.setXY(xy||this.scroller.getXY());},ensureVisible:function(row,col,hscroll){var resolved=this.resolveCell(row,col,hscroll);if(!resolved||!resolved.row){return;}
+var rowEl=resolved.row,cellEl=resolved.cell;var c=this.scroller.dom;var ctop=0;var p=rowEl,stop=this.el.dom;while(p&&p!=stop){ctop+=p.offsetTop;p=p.offsetParent;}
 ctop-=this.mainHd.dom.offsetHeight;var cbot=ctop+rowEl.offsetHeight;var ch=c.clientHeight;var stop=parseInt(c.scrollTop,10);var sbot=stop+ch;if(ctop<stop){c.scrollTop=ctop;}else if(cbot>sbot){c.scrollTop=cbot-ch;}
 if(hscroll!==false){var cleft=parseInt(cellEl.offsetLeft,10);var cright=cleft+cellEl.offsetWidth;var sleft=parseInt(c.scrollLeft,10);var sright=sleft+c.clientWidth;if(cleft<sleft){c.scrollLeft=cleft;}else if(cright>sright){c.scrollLeft=cright-c.clientWidth;}}
-return cellEl?Ext.fly(cellEl).getXY():[c.scrollLeft+this.el.getX(),Ext.fly(rowEl).getY()];},insertRows:function(dm,firstRow,lastRow,isUpdate){if(!isUpdate&&firstRow===0&&lastRow>=dm.getCount()-1){this.refresh();}else{if(!isUpdate){this.fireEvent("beforerowsinserted",this,firstRow,lastRow);}
+return this.getResolvedXY(resolved);},insertRows:function(dm,firstRow,lastRow,isUpdate){if(!isUpdate&&firstRow===0&&lastRow>=dm.getCount()-1){this.refresh();}else{if(!isUpdate){this.fireEvent("beforerowsinserted",this,firstRow,lastRow);}
 var html=this.renderRows(firstRow,lastRow);var before=this.getRow(firstRow);if(before){Ext.DomHelper.insertHtml('beforeBegin',before,html);}else{Ext.DomHelper.insertHtml('beforeEnd',this.mainBody.dom,html);}
 if(!isUpdate){this.fireEvent("rowsinserted",this,firstRow,lastRow);this.processRows(firstRow);}}
-this.focusRow(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;';}
+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;}}
@@ -73,35 +77,33 @@
 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){this.colMenu.removeAll();Ext.menu.MenuMgr.unregister(this.colMenu);this.colMenu.getEl().remove();delete this.colMenu;}
-if(this.hmenu){this.hmenu.removeAll();Ext.menu.MenuMgr.unregister(this.hmenu);this.hmenu.getEl().remove();delete this.hmenu;}
+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;}
+if(this.hmenu){Ext.menu.MenuMgr.unregister(this.hmenu);this.hmenu.destroy();delete this.hmenu;}
 if(this.grid.enableColumnMove){var dds=Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];if(dds){for(var dd in dds){if(!dds[dd].config.isTarget&&dds[dd].dragElId){var elid=dds[dd].dragElId;dds[dd].unreg();Ext.get(elid).remove();}else if(dds[dd].config.isTarget){dds[dd].proxyTop.remove();dds[dd].proxyBottom.remove();dds[dd].unreg();}
 if(Ext.dd.DDM.locationCache[dd]){delete Ext.dd.DDM.locationCache[dd];}}
 delete Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];}}
-Ext.destroy(this.resizeMarker,this.resizeProxy);if(this.dragZone){this.dragZone.unreg();}
-this.initData(null,null);Ext.EventManager.removeResizeListener(this.onWindowResize,this);},onDenyColumnHide:function(){},render:function(){if(this.autoFill){this.fitColumns(true,true);}else if(this.forceFit){this.fitColumns(true,false);}else if(this.grid.autoExpandColumn){this.autoExpand(true);}
+if(this.dragZone){this.dragZone.unreg();}
+Ext.fly(this.innerHd).removeAllListeners();Ext.removeNode(this.innerHd);Ext.destroy(this.resizeMarker,this.resizeProxy,this.focusEl,this.mainBody,this.scroller,this.mainHd,this.mainWrap,this.dragZone,this.splitone,this.columnDrag,this.columnDrop);this.initData(null,null);Ext.EventManager.removeResizeListener(this.onWindowResize,this);},onDenyColumnHide:function(){},render:function(){if(this.autoFill){this.fitColumns(true,true);}else if(this.forceFit){this.fitColumns(true,false);}else if(this.grid.autoExpandColumn){this.autoExpand(true);}
 this.renderUI();},initData:function(ds,cm){if(this.ds){this.ds.un("load",this.onLoad,this);this.ds.un("datachanged",this.onDataChange,this);this.ds.un("add",this.onAdd,this);this.ds.un("remove",this.onRemove,this);this.ds.un("update",this.onUpdate,this);this.ds.un("clear",this.onClear,this);}
 if(ds){ds.on("load",this.onLoad,this);ds.on("datachanged",this.onDataChange,this);ds.on("add",this.onAdd,this);ds.on("remove",this.onRemove,this);ds.on("update",this.onUpdate,this);ds.on("clear",this.onClear,this);}
 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.focusRow(0);},onClear:function(){this.refresh();this.focusRow(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.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);},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){this.defaultWidth=100;this.defaultSortable=false;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,{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.config=config;this.lookup={};for(var i=0,len=config.length;i<len;i++){var c=config[i];if(typeof c.renderer=="string"){c.renderer=Ext.util.Format[c.renderer];}
-if(typeof c.id=="undefined"){c.id='xgc'+i;}
-if(c.editor&&c.editor.isFormField){c.editor=new Ext.grid.GridEditor(c.editor);}
+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;},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;}}
 return-1;},moveColumn:function(oldIndex,newIndex){var c=this.config[oldIndex];this.config.splice(oldIndex,1);this.config.splice(newIndex,0,c);this.dataMap=null;this.fireEvent("columnmoved",this,oldIndex,newIndex);},isLocked:function(colIndex){return this.config[colIndex].locked===true;},setLocked:function(colIndex,value,suppressEvent){if(this.isLocked(colIndex)==value){return;}
@@ -113,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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/menu/menus.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -8,7 +8,7 @@
 
 
 Ext.menu.Menu=function(config){if(Ext.isArray(config)){config={items:config};}
-Ext.apply(this,config);this.id=this.id||Ext.id();this.addEvents('beforeshow','beforehide','show','hide','click','mouseover','mouseout','itemclick');Ext.menu.MenuMgr.register(this);Ext.menu.Menu.superclass.constructor.call(this);var mis=this.items;this.items=new Ext.util.MixedCollection();if(mis){this.add.apply(this,mis);}};Ext.extend(Ext.menu.Menu,Ext.util.Observable,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,ignoreParentClicks:false,hidden:true,createEl:function(){return new Ext.Layer({cls:"x-menu",shadow:this.shadow,constrain:false,parentEl:this.parentEl||document.body,zindex:15000});},render:function(){if(this.el){return;}
+Ext.apply(this,config);this.id=this.id||Ext.id();this.addEvents('beforeshow','beforehide','show','hide','click','mouseover','mouseout','itemclick');Ext.menu.MenuMgr.register(this);Ext.menu.Menu.superclass.constructor.call(this);var mis=this.items;this.items=new Ext.util.MixedCollection(false,Ext.Container.prototype.getComponentId);if(mis){this.add.apply(this,mis);}};Ext.extend(Ext.menu.Menu,Ext.util.Observable,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,ignoreParentClicks:false,hidden:true,createEl:function(){return new Ext.Layer({cls:"x-menu",shadow:this.shadow,constrain:false,parentEl:this.parentEl||document.body,zindex:this.zIndex||15000});},render:function(){if(this.el){return;}
 var el=this.el=this.createEl();if(!this.keyNav){this.keyNav=new Ext.menu.MenuNav(this);}
 if(this.plain){el.addClass("x-menu-plain");}
 if(this.cls){el.addClass(this.cls);}
@@ -28,7 +28,7 @@
 return this.el;},addSeparator:function(){return this.addItem(new Ext.menu.Separator());},addElement:function(el){return this.addItem(new Ext.menu.BaseItem(el));},addItem:function(item){this.items.add(item);if(this.ul){var li=document.createElement("li");li.className="x-menu-list-item";this.ul.dom.appendChild(li);item.render(li,this);this.delayAutoWidth();}
 return item;},addMenuItem:function(config){if(!(config instanceof Ext.menu.Item)){if(typeof config.checked=="boolean"){config=new Ext.menu.CheckItem(config);}else{config=new Ext.menu.Item(config);}}
 return this.addItem(config);},addText:function(text){return this.addItem(new Ext.menu.TextItem(text));},insert:function(index,item){this.items.insert(index,item);if(this.ul){var li=document.createElement("li");li.className="x-menu-list-item";this.ul.dom.insertBefore(li,this.ul.dom.childNodes[index]);item.render(li,this);this.delayAutoWidth();}
-return item;},remove:function(item){this.items.removeKey(item.id);item.destroy();},removeAll:function(){if(this.items){var f;while(f=this.items.first()){this.remove(f);}}},destroy:function(){this.beforeDestroy();Ext.menu.MenuMgr.unregister(this);if(this.keyNav){this.keyNav.disable();}
+return item;},remove:function(item){this.items.remove(item);item.destroy();},removeAll:function(){if(this.items){var f;while(f=this.items.first()){this.remove(f);}}},destroy:function(){this.beforeDestroy();Ext.menu.MenuMgr.unregister(this);if(this.keyNav){this.keyNav.disable();}
 this.removeAll();if(this.ul){this.ul.removeAllListeners();}
 if(this.el){this.el.destroy();}},beforeDestroy:Ext.emptyFn});Ext.menu.MenuNav=function(menu){Ext.menu.MenuNav.superclass.constructor.call(this,menu.el);this.scope=this.menu=menu;};Ext.extend(Ext.menu.MenuNav,Ext.KeyNav,{doRelay:function(e,h){var k=e.getKey();if(!this.menu.activeItem&&e.isNavKeyPress()&&k!=e.SPACE&&k!=e.RETURN){this.menu.tryActivate(0,1);return false;}
 return h.call(this.scope||this,e,this.menu);},up:function(e,m){if(!m.tryActivate(m.items.indexOf(m.activeItem)-1,-1)){m.tryActivate(m.items.length-1,-1);}},down:function(e,m){if(!m.tryActivate(m.items.indexOf(m.activeItem)+1,1)){m.tryActivate(0,1);}},right:function(e,m){if(m.activeItem){m.activeItem.expandMenu(true);}},left:function(e,m){m.hide();if(m.parentMenu&&m.parentMenu.activeItem){m.parentMenu.activeItem.activate();}},enter:function(e,m){if(m.activeItem){e.stopPropagation();m.activeItem.onClick(e);m.fireEvent("click",this,m.activeItem);return true;}}});
@@ -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.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/package/qtips/qtips.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/qtips/qtips.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/qtips/qtips.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,7 +7,7 @@
  */
 
 
-Ext.Tip=Ext.extend(Ext.Panel,{minWidth:40,maxWidth:300,shadow:"sides",defaultAlign:"tl-bl?",autoRender:true,quickShowInterval:250,frame:true,hidden:true,baseCls:'x-tip',floating:{shadow:true,shim:true,useDisplay:true,constrain:false},autoHeight:true,initComponent:function(){Ext.Tip.superclass.initComponent.call(this);if(this.closable&&!this.title){this.elements+=',header';}},afterRender:function(){Ext.Tip.superclass.afterRender.call(this);if(this.closable){this.addTool({id:'close',handler:this.hide,scope:this});}},showAt:function(xy){Ext.Tip.superclass.show.call(this);if(this.measureWidth!==false&&(!this.initialConfig||typeof this.initialConfig.width!='number')){this.doAutoWidth();}
+Ext.Tip=Ext.extend(Ext.Panel,{minWidth:40,maxWidth:300,shadow:"sides",defaultAlign:"tl-bl?",autoRender:true,quickShowInterval:250,frame:true,hidden:true,baseCls:'x-tip',floating:{shadow:true,shim:true,useDisplay:true,constrain:false},autoHeight:true,closeAction:'hide',initComponent:function(){Ext.Tip.superclass.initComponent.call(this);if(this.closable&&!this.title){this.elements+=',header';}},afterRender:function(){Ext.Tip.superclass.afterRender.call(this);if(this.closable){this.addTool({id:'close',handler:this[this.closeAction],scope:this});}},showAt:function(xy){Ext.Tip.superclass.show.call(this);if(this.measureWidth!==false&&(!this.initialConfig||typeof this.initialConfig.width!='number')){this.doAutoWidth();}
 if(this.constrainPosition){xy=this.el.adjustForConstraints(xy);}
 this.setPagePosition(xy[0],xy[1]);},doAutoWidth:function(){var bw=this.body.getTextWidth();if(this.title){bw=Math.max(bw,this.header.child('span').getTextWidth(this.title));}
 bw+=this.getFrameWidth()+(this.closable?20:0)+this.body.getPadding("lr");this.setWidth(bw.constrain(this.minWidth,this.maxWidth));if(Ext.isIE7&&!this.repainted){this.el.repaint();this.repainted=true;}},showBy:function(el,pos){if(!this.rendered){this.render(Ext.getBody());}

Modified: mickael/trunk/ext/v3.0.0-a1/package/resizable.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/resizable.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/resizable.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -33,9 +33,10 @@
 var sw=this.snap(w,wi,mw);var sh=this.snap(h,hi,mh);if(sw!=w||sh!=h){switch(pos){case"northeast":y-=sh-h;break;case"north":y-=sh-h;break;case"southwest":x-=sw-w;break;case"west":x-=sw-w;break;case"northwest":x-=sw-w;y-=sh-h;break;}
 w=sw;h=sh;}
 if(this.preserveRatio){switch(pos){case"southeast":case"east":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);break;case"south":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"northeast":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"north":var tw=w;w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);x+=(tw-w)/2;break;case"southwest":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);var tw=w;w=ow*(h/oh);x+=tw-w;break;case"west":var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);y+=(th-h)/2;var tw=w;w=ow*(h/oh);x+=tw-w;break;case"northwest":var tw=w;var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);y+=th-h;x+=tw-w;break;}}
-this.proxy.setBounds(x,y,w,h);if(this.dynamic){this.resizeElement();}}catch(e){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over");}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over");}},getEl:function(){return this.el;},getResizeChild:function(){return this.resizeChild;},destroy:function(removeEl){this.proxy.remove();if(this.overlay){this.overlay.removeAllListeners();this.overlay.remove();}
-var ps=Ext.Resizable.positions;for(var k in ps){if(typeof ps[k]!="function"&&this[ps[k]]){var h=this[ps[k]];h.el.removeAllListeners();h.el.remove();}}
-if(removeEl){this.el.update("");this.el.remove();}},syncHandleHeight:function(){var h=this.el.getHeight(true);if(this.west){this.west.el.setHeight(h);}
+this.proxy.setBounds(x,y,w,h);if(this.dynamic){this.resizeElement();}}catch(e){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over");}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over");}},getEl:function(){return this.el;},getResizeChild:function(){return this.resizeChild;},destroy:function(removeEl){if(this.dd){this.dd.destroy();}
+if(this.overlay){Ext.destroy(this.overlay);this.overlay=null;}
+Ext.destroy(this.proxy);this.proxy=null;var ps=Ext.Resizable.positions;for(var k in ps){if(typeof ps[k]!="function"&&this[ps[k]]){this[ps[k]].destroy();}}
+if(removeEl){this.el.update("");Ext.destroy(this.el);this.el=null;}},syncHandleHeight:function(){var h=this.el.getHeight(true);if(this.west){this.west.el.setHeight(h);}
 if(this.east){this.east.el.setHeight(h);}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=function(rz,pos,disableTrackOver,transparent){if(!this.tpl){var tpl=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});tpl.compile();Ext.Resizable.Handle.prototype.tpl=tpl;}
 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);}};
+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;}};

Modified: mickael/trunk/ext/v3.0.0-a1/package/splitbar.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/splitbar.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/splitbar.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -9,10 +9,10 @@
 
 Ext.SplitBar=function(dragElement,resizingElement,orientation,placement,existingProxy){this.el=Ext.get(dragElement,true);this.el.dom.unselectable="on";this.resizingEl=Ext.get(resizingElement,true);this.orientation=orientation||Ext.SplitBar.HORIZONTAL;this.minSize=0;this.maxSize=2000;this.animate=false;this.useShim=false;this.shim=null;if(!existingProxy){this.proxy=Ext.SplitBar.createProxy(this.orientation);}else{this.proxy=Ext.get(existingProxy).dom;}
 this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{dragElId:this.proxy.id});this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);this.dragSpecs={};this.adapter=new Ext.SplitBar.BasicLayoutAdapter();this.adapter.init(this);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.placement=placement||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);this.el.addClass("x-splitbar-h");}else{this.placement=placement||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);this.el.addClass("x-splitbar-v");}
-this.addEvents("resize","moved","beforeresize","beforeapply");Ext.SplitBar.superclass.constructor.call(this);};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(x,y){this.fireEvent("beforeresize",this);this.overlay=Ext.DomHelper.append(document.body,{cls:"x-drag-overlay",html:"&#160;"},true);this.overlay.unselectable();this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var size=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();;this.activeMaxSize=this.getMaximumSize();;var c1=size-this.activeMinSize;var c2=Math.max(this.activeMaxSize-size,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?c1:c2,this.placement==Ext.SplitBar.LEFT?c2:c1);this.dd.setYConstraint(0,0);}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?c1:c2,this.placement==Ext.SplitBar.TOP?c2:c1);}
-this.dragSpecs.startSize=size;this.dragSpecs.startPoint=[x,y];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,x,y);},onEndProxyDrag:function(e){Ext.get(this.proxy).setDisplayed(false);var endPoint=Ext.lib.Event.getXY(e);if(this.overlay){this.overlay.remove();delete this.overlay;}
+this.addEvents("resize","moved","beforeresize","beforeapply");Ext.SplitBar.superclass.constructor.call(this);};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(x,y){this.fireEvent("beforeresize",this);this.overlay=Ext.DomHelper.append(document.body,{cls:"x-drag-overlay",html:"&#160;"},true);this.overlay.unselectable();this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var size=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();this.activeMaxSize=this.getMaximumSize();var c1=size-this.activeMinSize;var c2=Math.max(this.activeMaxSize-size,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?c1:c2,this.placement==Ext.SplitBar.LEFT?c2:c1);this.dd.setYConstraint(0,0);}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?c1:c2,this.placement==Ext.SplitBar.TOP?c2:c1);}
+this.dragSpecs.startSize=size;this.dragSpecs.startPoint=[x,y];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,x,y);},onEndProxyDrag:function(e){Ext.get(this.proxy).setDisplayed(false);var endPoint=Ext.lib.Event.getXY(e);if(this.overlay){Ext.destroy(this.overlay);delete this.overlay;}
 var newSize;if(this.orientation==Ext.SplitBar.HORIZONTAL){newSize=this.dragSpecs.startSize+
 (this.placement==Ext.SplitBar.LEFT?endPoint[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-endPoint[0]);}else{newSize=this.dragSpecs.startSize+
 (this.placement==Ext.SplitBar.TOP?endPoint[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-endPoint[1]);}
 newSize=Math.min(Math.max(newSize,this.activeMinSize),this.activeMaxSize);if(newSize!=this.dragSpecs.startSize){if(this.fireEvent('beforeapply',this,newSize)!==false){this.adapter.setElementSize(this,newSize);this.fireEvent("moved",this,newSize);this.fireEvent("resize",this,newSize);}}},getAdapter:function(){return this.adapter;},setAdapter:function(adapter){this.adapter=adapter;this.adapter.init(this);},getMinimumSize:function(){return this.minSize;},setMinimumSize:function(minSize){this.minSize=minSize;},getMaximumSize:function(){return this.maxSize;},setMaximumSize:function(maxSize){this.maxSize=maxSize;},setCurrentSize:function(size){var oldAnimate=this.animate;this.animate=false;this.adapter.setElementSize(this,size);this.animate=oldAnimate;},destroy:function(removeEl){if(this.shim){this.shim.remove();}
-this.dd.unreg();Ext.removeNode(this.proxy);if(removeEl){this.el.remove();}}});Ext.SplitBar.createProxy=function(dir){var proxy=new Ext.Element(document.createElement("div"));proxy.unselectable();var cls='x-splitbar-proxy';proxy.addClass(cls+' '+(dir==Ext.SplitBar.HORIZONTAL?cls+'-h':cls+'-v'));document.body.appendChild(proxy.dom);return proxy.dom;};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(s){},getElementSize:function(s){if(s.orientation==Ext.SplitBar.HORIZONTAL){return s.resizingEl.getWidth();}else{return s.resizingEl.getHeight();}},setElementSize:function(s,newSize,onComplete){if(s.orientation==Ext.SplitBar.HORIZONTAL){if(!s.animate){s.resizingEl.setWidth(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setWidth(newSize,true,.1,onComplete,'easeOut');}}else{if(!s.animate){s.resizingEl.setHeight(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setHeight(newSize,true,.1,onComplete,'easeOut');}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(container){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(container);};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(s){this.basic.init(s);},getElementSize:function(s){return this.basic.getElementSize(s);},setElementSize:function(s,newSize,onComplete){this.basic.setElementSize(s,newSize,this.moveSplitter.createDelegate(this,[s]));},moveSplitter:function(s){var yes=Ext.SplitBar;switch(s.placement){case yes.LEFT:s.el.setX(s.resizingEl.getRight());break;case yes.RIGHT:s.el.setStyle("right",(this.container.getWidth()-s.resizingEl.getLeft())+"px");break;case yes.TOP:s.el.setY(s.resizingEl.getBottom());break;case yes.BOTTOM:s.el.setY(s.resizingEl.getTop()-s.el.getHeight());break;}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;
+this.dd.unreg();Ext.destroy(Ext.get(this.proxy));if(removeEl){this.el.remove();}}});Ext.SplitBar.createProxy=function(dir){var proxy=new Ext.Element(document.createElement("div"));proxy.unselectable();var cls='x-splitbar-proxy';proxy.addClass(cls+' '+(dir==Ext.SplitBar.HORIZONTAL?cls+'-h':cls+'-v'));document.body.appendChild(proxy.dom);return proxy.dom;};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(s){},getElementSize:function(s){if(s.orientation==Ext.SplitBar.HORIZONTAL){return s.resizingEl.getWidth();}else{return s.resizingEl.getHeight();}},setElementSize:function(s,newSize,onComplete){if(s.orientation==Ext.SplitBar.HORIZONTAL){if(!s.animate){s.resizingEl.setWidth(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setWidth(newSize,true,.1,onComplete,'easeOut');}}else{if(!s.animate){s.resizingEl.setHeight(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setHeight(newSize,true,.1,onComplete,'easeOut');}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(container){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(container);};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(s){this.basic.init(s);},getElementSize:function(s){return this.basic.getElementSize(s);},setElementSize:function(s,newSize,onComplete){this.basic.setElementSize(s,newSize,this.moveSplitter.createDelegate(this,[s]));},moveSplitter:function(s){var yes=Ext.SplitBar;switch(s.placement){case yes.LEFT:s.el.setX(s.resizingEl.getRight());break;case yes.RIGHT:s.el.setStyle("right",(this.container.getWidth()-s.resizingEl.getLeft())+"px");break;case yes.TOP:s.el.setY(s.resizingEl.getBottom());break;case yes.BOTTOM:s.el.setY(s.resizingEl.getTop()-s.el.getHeight());break;}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;

Modified: mickael/trunk/ext/v3.0.0-a1/package/tabs/tabs.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/tabs/tabs.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/tabs/tabs.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -9,9 +9,9 @@
 
 Ext.TabPanel=Ext.extend(Ext.Panel,{monitorResize:true,deferredRender:true,tabWidth:120,minTabWidth:30,resizeTabs:false,enableTabScroll:false,scrollIncrement:0,scrollRepeatInterval:400,scrollDuration:.35,animScroll:true,tabPosition:'top',baseCls:'x-tab-panel',autoTabs:false,autoTabSelector:'div.x-tab',activeTab:null,tabMargin:2,plain:false,wheelIncrement:20,idDelimiter:'__',itemCls:'x-tab-item',elements:'body',headerAsText:false,frame:false,hideBorders:true,initComponent:function(){this.frame=false;Ext.TabPanel.superclass.initComponent.call(this);this.addEvents('beforetabchange','tabchange','contextmenu');this.setLayout(new Ext.layout.CardLayout({deferredRender:this.deferredRender}));if(this.tabPosition=='top'){this.elements+=',header';this.stripTarget='header';}else{this.elements+=',footer';this.stripTarget='footer';}
 if(!this.stack){this.stack=Ext.TabPanel.AccessStack();}
-this.initItems();},render:function(){Ext.TabPanel.superclass.render.apply(this,arguments);if(this.activeTab!==undefined){var item=this.activeTab;delete this.activeTab;this.setActiveTab(item);}},onRender:function(ct,position){Ext.TabPanel.superclass.onRender.call(this,ct,position);if(this.plain){var pos=this.tabPosition=='top'?'header':'footer';this[pos].addClass('x-tab-panel-'+pos+'-plain');}
+this.initItems();if(this.activeTab!==undefined&&typeof this.activeTab!='object'){this.activeTab=this.items.get(this.activeTab);}},render:function(){Ext.TabPanel.superclass.render.apply(this,arguments);if(this.activeTab!==undefined){var item=this.activeTab;delete this.activeTab;this.setActiveTab(item);}},onRender:function(ct,position){Ext.TabPanel.superclass.onRender.call(this,ct,position);if(this.plain){var pos=this.tabPosition=='top'?'header':'footer';this[pos].addClass('x-tab-panel-'+pos+'-plain');}
 var st=this[this.stripTarget];this.stripWrap=st.createChild({cls:'x-tab-strip-wrap',cn:{tag:'ul',cls:'x-tab-strip x-tab-strip-'+this.tabPosition}});var beforeEl=(this.tabPosition=='bottom'?this.stripWrap:null);this.stripSpacer=st.createChild({cls:'x-tab-strip-spacer'},beforeEl);this.strip=new Ext.Element(this.stripWrap.dom.firstChild);this.edge=this.strip.createChild({tag:'li',cls:'x-tab-edge'});this.strip.createChild({cls:'x-clear'});this.body.addClass('x-tab-panel-body-'+this.tabPosition);if(!this.itemTpl){var tt=new Ext.Template('<li class="{cls}" id="{id}"><a class="x-tab-strip-close" onclick="return false;"></a>','<a class="x-tab-right" href="#" onclick="return false;"><em class="x-tab-left">','<span class="x-tab-strip-inner"><span class="x-tab-strip-text {iconCls}">{text}</span></span>','</em></a></li>');tt.disableFormats=true;tt.compile();Ext.TabPanel.prototype.itemTpl=tt;}
-this.items.each(this.initTab,this);},afterRender:function(){Ext.TabPanel.superclass.afterRender.call(this);if(this.autoTabs){this.readTabs(false);}},initEvents:function(){Ext.TabPanel.superclass.initEvents.call(this);this.on('add',this.onAdd,this);this.on('remove',this.onRemove,this);this.strip.on('mousedown',this.onStripMouseDown,this);this.strip.on('contextmenu',this.onStripContextMenu,this);if(this.enableTabScroll){this.strip.on('mousewheel',this.onWheel,this);}},findTargets:function(e){var item=null;var itemEl=e.getTarget('li',this.strip);if(itemEl){item=this.getComponent(itemEl.id.split(this.idDelimiter)[1]);if(item.disabled){return{close:null,item:null,el:null};}}
+this.items.each(this.initTab,this);},afterRender:function(){Ext.TabPanel.superclass.afterRender.call(this);if(this.autoTabs){this.readTabs(false);}},initEvents:function(){Ext.TabPanel.superclass.initEvents.call(this);this.on('add',this.onAdd,this,{target:this});this.on('remove',this.onRemove,this,{target:this});this.strip.on('mousedown',this.onStripMouseDown,this);this.strip.on('contextmenu',this.onStripContextMenu,this);if(this.enableTabScroll){this.strip.on('mousewheel',this.onWheel,this);}},findTargets:function(e){var item=null;var itemEl=e.getTarget('li',this.strip);if(itemEl){item=this.getComponent(itemEl.id.split(this.idDelimiter)[1]);if(item.disabled){return{close:null,item:null,el:null};}}
 return{close:e.getTarget('.x-tab-strip-close',this.strip),item:item,el:itemEl};},onStripMouseDown:function(e){if(e.button!=0){return;}
 e.preventDefault();var t=this.findTargets(e);if(t.close){if(t.item.fireEvent('close',t.item)!==false){this.remove(t.item);}
 return;}
@@ -20,9 +20,9 @@
 if(item.iconCls){cls+=' x-tab-with-icon';}
 if(item.tabCls){cls+=' '+item.tabCls;}
 var p={id:this.id+this.idDelimiter+item.getItemId(),text:item.title,cls:cls,iconCls:item.iconCls||''};var el=before?this.itemTpl.insertBefore(before,p):this.itemTpl.append(this.strip,p);Ext.fly(el).addClassOnOver('x-tab-strip-over');if(item.tabTip){Ext.fly(el).child('span.x-tab-strip-text',true).qtip=item.tabTip;}
-item.on('disable',this.onItemDisabled,this);item.on('enable',this.onItemEnabled,this);item.on('titlechange',this.onItemTitleChanged,this);item.on('beforeshow',this.onBeforeShowItem,this);},onAdd:function(tp,item,index){this.initTab(item,index);if(this.items.getCount()==1){this.syncSize();}
+item.tabEl=el;item.on('disable',this.onItemDisabled,this);item.on('enable',this.onItemEnabled,this);item.on('titlechange',this.onItemTitleChanged,this);item.on('beforeshow',this.onBeforeShowItem,this);},onAdd:function(tp,item,index){this.initTab(item,index);if(this.items.getCount()==1){this.syncSize();}
 this.delegateUpdates();},onBeforeAdd:function(item){var existing=item.events?(this.items.containsKey(item.getItemId())?item:null):this.items.get(item);if(existing){this.setActiveTab(item);return false;}
-Ext.TabPanel.superclass.onBeforeAdd.apply(this,arguments);var es=item.elements;item.elements=es?es.replace(',header',''):es;item.border=(item.border===true);},onRemove:function(tp,item){Ext.removeNode(this.getTabEl(item));this.stack.remove(item);item.un('disable',this.onItemDisabled,this);item.un('enable',this.onItemEnabled,this);item.un('titlechange',this.onItemTitleChanged,this);item.un('beforeshow',this.onBeforeShowItem,this);if(item==this.activeTab){var next=this.stack.next();if(next){this.setActiveTab(next);}else{this.setActiveTab(0);}}
+Ext.TabPanel.superclass.onBeforeAdd.apply(this,arguments);var es=item.elements;item.elements=es?es.replace(',header',''):es;item.border=(item.border===true);},onRemove:function(tp,item){Ext.destroy(Ext.get(this.getTabEl(item)));this.stack.remove(item);item.un('disable',this.onItemDisabled,this);item.un('enable',this.onItemEnabled,this);item.un('titlechange',this.onItemTitleChanged,this);item.un('beforeshow',this.onBeforeShowItem,this);if(item==this.activeTab){var next=this.stack.next();if(next){this.setActiveTab(next);}else{this.setActiveTab(0);}}
 this.delegateUpdates();},onBeforeShowItem:function(item){if(item!=this.activeTab){this.setActiveTab(item);return false;}},onItemDisabled:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).addClass('x-item-disabled');}
 this.stack.remove(item);},onItemEnabled:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).removeClass('x-item-disabled');}},onItemTitleChanged:function(item){var el=this.getTabEl(item);if(el){Ext.fly(el).child('span.x-tab-strip-text',true).innerHTML=item.title;}},getTabEl:function(item){var itemId=(typeof item==='number')?this.items.items[item].getItemId():item.getItemId();return document.getElementById(this.id+this.idDelimiter+itemId);},onResize:function(){Ext.TabPanel.superclass.onResize.apply(this,arguments);this.delegateUpdates();},beginUpdate:function(){this.suspendUpdates=true;},endUpdate:function(){this.suspendUpdates=false;this.delegateUpdates();},hideTabStripItem:function(item){item=this.getComponent(item);var el=this.getTabEl(item);if(el){el.style.display='none';this.delegateUpdates();}
 this.stack.remove(item);},unhideTabStripItem:function(item){item=this.getComponent(item);var el=this.getTabEl(item);if(el){el.style.display='';this.delegateUpdates();}},delegateUpdates:function(){if(this.suspendUpdates){return;}
@@ -41,5 +41,7 @@
 tw-=wrap.getMargins('lr');wrap.setWidth(tw>20?tw:20);if(!this.scrolling){if(!this.scrollLeft){this.createScrollers();}else{this.scrollLeft.show();this.scrollRight.show();}}
 this.scrolling=true;if(pos>(l-tw)){wd.scrollLeft=l-tw;}else{this.scrollToTab(this.activeTab,false);}
 this.updateScrollButtons();}},createScrollers:function(){var h=this.stripWrap.dom.offsetHeight;var sl=this.header.insertFirst({cls:'x-tab-scroller-left'});sl.setHeight(h);sl.addClassOnOver('x-tab-scroller-left-over');this.leftRepeater=new Ext.util.ClickRepeater(sl,{interval:this.scrollRepeatInterval,handler:this.onScrollLeft,scope:this});this.scrollLeft=sl;var sr=this.header.insertFirst({cls:'x-tab-scroller-right'});sr.setHeight(h);sr.addClassOnOver('x-tab-scroller-right-over');this.rightRepeater=new Ext.util.ClickRepeater(sr,{interval:this.scrollRepeatInterval,handler:this.onScrollRight,scope:this});this.scrollRight=sr;},getScrollWidth:function(){return this.edge.getOffsetsTo(this.stripWrap)[0]+this.getScrollPos();},getScrollPos:function(){return parseInt(this.stripWrap.dom.scrollLeft,10)||0;},getScrollArea:function(){return parseInt(this.stripWrap.dom.clientWidth,10)||0;},getScrollAnim:function(){return{duration:this.scrollDuration,callback:this.updateScrollButtons,scope:this};},getScrollIncrement:function(){return this.scrollIncrement||(this.resizeTabs?this.lastTabWidth+2:100);},scrollToTab:function(item,animate){if(!item){return;}
-var el=this.getTabEl(item);var pos=this.getScrollPos(),area=this.getScrollArea();var left=Ext.fly(el).getOffsetsTo(this.stripWrap)[0]+pos;var right=left+el.offsetWidth;if(left<pos){this.scrollTo(left,animate);}else if(right>(pos+area)){this.scrollTo(right-area,animate);}},scrollTo:function(pos,animate){this.stripWrap.scrollTo('left',pos,animate?this.getScrollAnim():false);if(!animate){this.updateScrollButtons();}},onWheel:function(e){var d=e.getWheelDelta()*this.wheelIncrement*-1;e.stopEvent();var pos=this.getScrollPos();var newpos=pos+d;var sw=this.getScrollWidth()-this.getScrollArea();var s=Math.max(0,Math.min(sw,newpos));if(s!=pos){this.scrollTo(s,false);}},onScrollRight:function(){var sw=this.getScrollWidth()-this.getScrollArea();var pos=this.getScrollPos();var s=Math.min(sw,pos+this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},onScrollLeft:function(){var pos=this.getScrollPos();var s=Math.max(0,pos-this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},updateScrollButtons:function(){var pos=this.getScrollPos();this.scrollLeft[pos==0?'addClass':'removeClass']('x-tab-scroller-left-disabled');this.scrollRight[pos>=(this.getScrollWidth()-this.getScrollArea())?'addClass':'removeClass']('x-tab-scroller-right-disabled');}});Ext.reg('tabpanel',Ext.TabPanel);Ext.TabPanel.prototype.activate=Ext.TabPanel.prototype.setActiveTab;Ext.TabPanel.AccessStack=function(){var items=[];return{add:function(item){items.push(item);if(items.length>10){items.shift();}},remove:function(item){var s=[];for(var i=0,len=items.length;i<len;i++){if(items[i]!=item){s.push(items[i]);}}
+var el=this.getTabEl(item);var pos=this.getScrollPos(),area=this.getScrollArea();var left=Ext.fly(el).getOffsetsTo(this.stripWrap)[0]+pos;var right=left+el.offsetWidth;if(left<pos){this.scrollTo(left,animate);}else if(right>(pos+area)){this.scrollTo(right-area,animate);}},scrollTo:function(pos,animate){this.stripWrap.scrollTo('left',pos,animate?this.getScrollAnim():false);if(!animate){this.updateScrollButtons();}},onWheel:function(e){var d=e.getWheelDelta()*this.wheelIncrement*-1;e.stopEvent();var pos=this.getScrollPos();var newpos=pos+d;var sw=this.getScrollWidth()-this.getScrollArea();var s=Math.max(0,Math.min(sw,newpos));if(s!=pos){this.scrollTo(s,false);}},onScrollRight:function(){var sw=this.getScrollWidth()-this.getScrollArea();var pos=this.getScrollPos();var s=Math.min(sw,pos+this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},onScrollLeft:function(){var pos=this.getScrollPos();var s=Math.max(0,pos-this.getScrollIncrement());if(s!=pos){this.scrollTo(s,this.animScroll);}},updateScrollButtons:function(){var pos=this.getScrollPos();this.scrollLeft[pos==0?'addClass':'removeClass']('x-tab-scroller-left-disabled');this.scrollRight[pos>=(this.getScrollWidth()-this.getScrollArea())?'addClass':'removeClass']('x-tab-scroller-right-disabled');},beforeDestroy:function(){if(this.items){this.items.each(function(item){if(item&&item.tabEl){Ext.get(item.tabEl).removeAllListeners();item.tabEl=null;}},this);}
+if(this.strip){this.strip.removeAllListeners();}
+Ext.TabPanel.superclass.beforeDestroy.apply(this);}});Ext.reg('tabpanel',Ext.TabPanel);Ext.TabPanel.prototype.activate=Ext.TabPanel.prototype.setActiveTab;Ext.TabPanel.AccessStack=function(){var items=[];return{add:function(item){items.push(item);if(items.length>10){items.shift();}},remove:function(item){var s=[];for(var i=0,len=items.length;i<len;i++){if(items[i]!=item){s.push(items[i]);}}
 items=s;},next:function(){return items.pop();}};};

Modified: mickael/trunk/ext/v3.0.0-a1/package/toolbar/toolbar.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/toolbar/toolbar.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/toolbar/toolbar.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -9,17 +9,19 @@
 
 Ext.layout.ToolbarLayout=Ext.extend(Ext.layout.ContainerLayout,{monitorResize:true,triggerWidth:16,lastOverflow:false,noItemsMenuText:'<div class="x-toolbar-no-items">(None)</div>',onLayout:function(ct,target){if(!this.leftTr){target.addClass('x-toolbar-layout-ct');target.insertHtml('beforeEnd','<table cellspacing="0" class="x-toolbar-ct"><tbody><tr><td class="x-toolbar-left" align="left"><table cellspacing="0"><tbody><tr class="x-toolbar-left-row"></tr></tbody></table></td><td class="x-toolbar-right" align="right"><table cellspacing="0" class="x-toolbar-right-ct"><tbody><tr><td><table cellspacing="0"><tbody><tr class="x-toolbar-right-row"></tr></tbody></table></td><td><table cellspacing="0"><tbody><tr class="x-toolbar-extras-row"></tr></tbody></table></td></tr></tbody></td></tr></tbody></table>');this.leftTr=target.child('tr.x-toolbar-left-row',true);this.rightTr=target.child('tr.x-toolbar-right-row',true);this.extrasTr=target.child('tr.x-toolbar-extras-row',true);}
 var side=this.leftTr;var pos=0;var items=ct.items.items;for(var i=0,len=items.length,c;i<len;i++,pos++){c=items[i];if(c.isFill){side=this.rightTr;pos=0;}else if(!c.rendered){c.render(this.insertCell(c,side,pos));}else{if(!c.xtbHidden&&!this.isValidParent(c,side.childNodes[pos])){var td=this.insertCell(c,side,pos);td.appendChild(c.getDomPositionEl().dom);c.container=Ext.get(td);}}}
-this.cleanup(this.leftTr);this.cleanup(this.rightTr);this.cleanup(this.extrasTr);this.fitToSize(target);},cleanup:function(row){var cn=row.childNodes;for(var i=cn.length-1,c;i>=0&&(c=cn[i]);i--){if(!c.firstChild){row.removeChild(c);}}},insertCell:function(c,side,pos){var td=document.createElement('td');td.className='x-toolbar-cell';side.insertBefore(td,side.childNodes[pos]||null);return td;},hideItem:function(item){var h=(this.hiddens=this.hiddens||[]);h.push(item);item.xtbHidden=true;item.xtbWidth=item.getDomPositionEl().dom.parentNode.offsetWidth;item.hide();},unhideItem:function(item){item.show();item.xtbHidden=false;this.hiddens.remove(item);if(this.hiddens.length<1){delete this.hiddens;}},getItemWidth:function(c){return c.hidden?(c.xtbWidth||0):c.getDomPositionEl().dom.parentNode.offsetWidth;},fitToSize:function(t){var w=t.dom.clientWidth;var lw=this.lastWidth||0;this.lastWidth=w;var iw=t.dom.firstChild.offsetWidth;var clipWidth=w-this.triggerWidth;var hideIndex=-1;if(iw>w||(this.hiddens&&w>lw)){var i,items=this.container.items.items,len=items.length,c;var loopWidth=0;for(i=0;i<len;i++){c=items[i];if(!c.isFill){loopWidth+=this.getItemWidth(c);if(loopWidth>clipWidth){if(!c.xtbHidden){this.hideItem(c);}}else{if(c.xtbHidden){this.unhideItem(c);}}}}}
+this.cleanup(this.leftTr);this.cleanup(this.rightTr);this.cleanup(this.extrasTr);this.fitToSize(target);},cleanup:function(row){var cn=row.childNodes;for(var i=cn.length-1,c;i>=0&&(c=cn[i]);i--){if(!c.firstChild){row.removeChild(c);}}},insertCell:function(c,side,pos){var td=document.createElement('td');td.className='x-toolbar-cell';side.insertBefore(td,side.childNodes[pos]||null);return td;},hideItem:function(item){var h=(this.hiddens=this.hiddens||[]);h.push(item);item.xtbHidden=true;item.xtbWidth=item.getDomPositionEl().dom.parentNode.offsetWidth;item.hide();},unhideItem:function(item){item.show();item.xtbHidden=false;this.hiddens.remove(item);if(this.hiddens.length<1){delete this.hiddens;}},getItemWidth:function(c){return c.hidden?(c.xtbWidth||0):c.getDomPositionEl().dom.parentNode.offsetWidth;},fitToSize:function(t){if(this.container.enableOverflow===false){return;}
+var w=t.dom.clientWidth;var lw=this.lastWidth||0;this.lastWidth=w;var iw=t.dom.firstChild.offsetWidth;var clipWidth=w-this.triggerWidth;var hideIndex=-1;if(iw>w||(this.hiddens&&w>lw)){var i,items=this.container.items.items,len=items.length,c;var loopWidth=0;for(i=0;i<len;i++){c=items[i];if(!c.isFill){loopWidth+=this.getItemWidth(c);if(loopWidth>clipWidth){if(!c.xtbHidden){this.hideItem(c);}}else{if(c.xtbHidden){this.unhideItem(c);}}}}}
 if(this.hiddens){this.initMore();if(!this.lastOverflow){this.container.fireEvent('overflowchange',this.container,true);this.lastOverflow=true;}}else if(this.more){this.more.destroy();delete this.more;if(this.lastOverflow){this.container.fireEvent('overflowchange',this.container,false);this.lastOverflow=false;}}},createMenuConfig:function(c,hideOnClick){var cfg=Ext.apply({},c.initialConfig);cfg.hideOnClick=hideOnClick;delete cfg.xtype;return cfg;},addComponentToMenu:function(m,c){if(c instanceof Ext.Toolbar.Separator){m.add('-');}else if(typeof c.isXType=='function'){if(c.isXType('splitbutton')){m.add(this.createMenuConfig(c,true));}else if(c.isXType('button')){m.add(this.createMenuConfig(c,!c.menu));}else if(c.isXType('buttongroup')){m.add('-');c.items.each(function(item){this.addComponentToMenu(m,item);},this);m.add('-');}}},beforeMoreShow:function(m){m.removeAll();for(var i=0,h=this.container.items.items,len=h.length,c;i<len;i++){c=h[i];if(c.xtbHidden){this.addComponentToMenu(m,c);}}
 if(m.items.length<1){m.add(this.noItemsMenuText);}},initMore:function(){if(!this.more){this.moreMenu=new Ext.menu.Menu({listeners:{beforeshow:this.beforeMoreShow,scope:this}});this.more=new Ext.Button({iconCls:'x-toolbar-more-icon',cls:'x-toolbar-more',menu:this.moreMenu});var td=this.insertCell(this.more,this.extrasTr,100);this.more.render(td);}}});Ext.Container.LAYOUTS['toolbar']=Ext.layout.ToolbarLayout;Ext.Toolbar=function(config){if(Ext.isArray(config)){config={items:config,layout:'toolbar'};}else{config=Ext.apply({layout:'toolbar'},config);if(config.buttons){config.items=config.buttons;}}
-Ext.Toolbar.superclass.constructor.call(this,config);};(function(){var T=Ext.Toolbar;Ext.extend(T,Ext.Container,{defaultType:'button',trackMenus:true,internalDefaults:{removeMode:'container',hideParent:true},autoCreate:{cls:'x-toolbar x-small-editor'},initComponent:function(){T.superclass.initComponent.call(this);this.addEvents('overflowchange');},onRender:function(ct,position){this.el=ct.createChild(Ext.apply({id:this.id},this.autoCreate),position);},add:function(){var a=arguments,l=a.length;for(var i=0;i<l;i++){var el=a[i];if(el.isFormField){this.addField(el);}else if(el.render){this.addItem(el);}else if(typeof el=="string"){if(el=="separator"||el=="-"){this.addSeparator();}else if(el==" "){this.addSpacer();}else if(el=="->"){this.addFill();}else{this.addText(el);}}else if(el.tag){this.addDom(el);}else if(el.tagName){this.addElement(el);}else if(typeof el=="object"){if(el.xtype){this.addItem(Ext.ComponentMgr.create(el,'button'));}else{this.addButton(el);}}}},addSeparator:function(){return this.addItem(new T.Separator());},addSpacer:function(){return this.addItem(new T.Spacer());},addFill:function(){this.addItem(new T.Fill());},addElement:function(el){var item=new T.Item({el:el});this.addItem(item);return item;},addItem:function(item){Ext.Toolbar.superclass.add.apply(this,arguments);return item;},addButton:function(config){if(Ext.isArray(config)){var buttons=[];for(var i=0,len=config.length;i<len;i++){buttons.push(this.addButton(config[i]));}
+Ext.Toolbar.superclass.constructor.call(this,config);};(function(){var T=Ext.Toolbar;Ext.extend(T,Ext.Container,{defaultType:'button',trackMenus:true,internalDefaults:{removeMode:'container',hideParent:true},toolbarCls:'x-toolbar',initComponent:function(){T.superclass.initComponent.call(this);this.addEvents('overflowchange');},onRender:function(ct,position){if(!this.el){if(!this.autoCreate){this.autoCreate={cls:this.toolbarCls+' x-small-editor'}}
+this.el=ct.createChild(Ext.apply({id:this.id},this.autoCreate),position);}},add:function(){var a=arguments,l=a.length;for(var i=0;i<l;i++){var el=a[i];if(el.isFormField){this.addField(el);}else if(el.render){this.addItem(el);}else if(typeof el=="string"){if(el=="separator"||el=="-"){this.addSeparator();}else if(el==" "){this.addSpacer();}else if(el=="->"){this.addFill();}else{this.addText(el);}}else if(el.tag){this.addDom(el);}else if(el.tagName){this.addElement(el);}else if(typeof el=="object"){if(el.xtype){this.addItem(Ext.create(el,'button'));}else{this.addButton(el);}}}},addSeparator:function(){return this.addItem(new T.Separator());},addSpacer:function(){return this.addItem(new T.Spacer());},addFill:function(){this.addItem(new T.Fill());},addElement:function(el){var item=new T.Item({el:el});this.addItem(item);return item;},addItem:function(item){Ext.Toolbar.superclass.add.apply(this,arguments);return item;},addButton:function(config){if(Ext.isArray(config)){var buttons=[];for(var i=0,len=config.length;i<len;i++){buttons.push(this.addButton(config[i]));}
 return buttons;}
 var b=config;if(!b.events){b=config.split?new T.SplitButton(config):new T.Button(config);}
 this.initMenuTracking(b);this.addItem(b);return b;},initMenuTracking:function(item){if(this.trackMenus&&item.menu){item.on({'menutriggerover':this.onButtonTriggerOver,'menushow':this.onButtonMenuShow,'menuhide':this.onButtonMenuHide,scope:this});}},addText:function(text){var t=new T.TextItem(text);this.addItem(t);return t;},insertButton:function(index,item){if(Ext.isArray(item)){var buttons=[];for(var i=0,len=item.length;i<len;i++){buttons.push(this.insertButton(index+i,item[i]));}
 return buttons;}
 if(!(item instanceof T.Button)){item=new T.Button(item);}
 Ext.Toolbar.superclass.insert.call(this,index,item);return item;},addDom:function(config){var item=new T.Item({autoEl:config});this.addItem(item);return item;},addField:function(field){this.addItem(field);return field;},applyDefaults:function(c){c=Ext.Toolbar.superclass.applyDefaults.call(this,c);var d=this.internalDefaults;if(c.events){Ext.applyIf(c.initialConfig,d);Ext.apply(c,d);}else{Ext.applyIf(c,d);}
-return c;},onDisable:function(){this.items.each(function(item){if(item.disable){item.disable();}});},onEnable:function(){this.items.each(function(item){if(item.enable){item.enable();}});},onButtonTriggerOver:function(btn){if(this.activeMenuBtn&&this.activeMenuBtn!=btn){this.activeMenuBtn.hideMenu();btn.showMenu();this.activeMenuBtn=btn;}},onButtonMenuShow:function(btn){this.activeMenuBtn=btn;},onButtonMenuHide:function(btn){delete this.activeMenuBtn;}});Ext.reg('toolbar',Ext.Toolbar);T.Item=Ext.extend(Ext.BoxComponent,{hideParent:true,enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.reg('tbitem',T.Item);T.Separator=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'span',cls:'ytb-sep'},position);}});Ext.reg('tbseparator',T.Separator);T.Spacer=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'div',cls:'ytb-spacer'},position);}});Ext.reg('tbspacer',T.Spacer);T.Fill=Ext.extend(T.Item,{render:Ext.emptyFn,isFill:true});Ext.reg('tbfill',T.Fill);T.TextItem=Ext.extend(T.Item,{constructor:function(config){if(typeof config=='string'){config={autoEl:{cls:'xtb-text',html:config}};}else{config.autoEl={cls:'xtb-text',html:config.text||''};}
+return c;},onDisable:function(){this.items.each(function(item){if(item.disable){item.disable();}});},onEnable:function(){this.items.each(function(item){if(item.enable){item.enable();}});},onButtonTriggerOver:function(btn){if(this.activeMenuBtn&&this.activeMenuBtn!=btn){this.activeMenuBtn.hideMenu();btn.showMenu();this.activeMenuBtn=btn;}},onButtonMenuShow:function(btn){this.activeMenuBtn=btn;},onButtonMenuHide:function(btn){delete this.activeMenuBtn;}});Ext.reg('toolbar',Ext.Toolbar);T.Item=Ext.extend(Ext.BoxComponent,{hideParent:true,enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.reg('tbitem',T.Item);T.Separator=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'span',cls:'xtb-sep'},position);}});Ext.reg('tbseparator',T.Separator);T.Spacer=Ext.extend(T.Item,{onRender:function(ct,position){this.el=ct.createChild({tag:'div',cls:'xtb-spacer',style:this.width?'width:'+this.width+'px':''},position);}});Ext.reg('tbspacer',T.Spacer);T.Fill=Ext.extend(T.Item,{render:Ext.emptyFn,isFill:true});Ext.reg('tbfill',T.Fill);T.TextItem=Ext.extend(T.Item,{constructor:function(config){if(typeof config=='string'){config={autoEl:{cls:'xtb-text',html:config}};}else{config.autoEl={cls:'xtb-text',html:config.text||''};}
 T.TextItem.superclass.constructor.call(this,config);},setText:function(t){if(this.rendered){this.el.dom.innerHTML=t;}else{this.autoEl.html=t;}}});Ext.reg('tbtext',T.TextItem);T.Button=Ext.extend(Ext.Button,{});T.SplitButton=Ext.extend(Ext.SplitButton,{});Ext.reg('tbbutton',T.Button);Ext.reg('tbsplit',T.SplitButton);})();Ext.ButtonGroup=Ext.extend(Ext.Panel,{baseCls:'x-btn-group',layout:'table',defaultType:'button',frame:true,internalDefaults:{removeMode:'container',hideParent:true},initComponent:function(){this.layoutConfig=this.layoutConfig||{};Ext.applyIf(this.layoutConfig,{columns:this.columns});if(!this.title){this.addClass('x-btn-group-notitle');}
 this.on('afterlayout',this.onAfterLayout,this);Ext.ButtonGroup.superclass.initComponent.call(this);},applyDefaults:function(c){c=Ext.ButtonGroup.superclass.applyDefaults.call(this,c);var d=this.internalDefaults;if(c.events){Ext.applyIf(c.initialConfig,d);Ext.apply(c,d);}else{Ext.applyIf(c,d);}
 return c;},onAfterLayout:function(){var bodyWidth=this.body.getFrameWidth('lr')+this.body.dom.firstChild.offsetWidth;this.body.setWidth(bodyWidth);this.el.setWidth(bodyWidth+this.getFrameWidth());}});Ext.reg('buttongroup',Ext.ButtonGroup);
@@ -30,4 +32,5 @@
 this.cursor=(o.params&&o.params[this.paramNames.start])?o.params[this.paramNames.start]:0;var d=this.getPageData(),ap=d.activePage,ps=d.pages;this.afterTextItem.setText(String.format(this.afterPageText,d.pages));this.field.value=ap;this.first.setDisabled(ap==1);this.prev.setDisabled(ap==1);this.next.setDisabled(ap==ps);this.last.setDisabled(ap==ps);this.refresh.enable();this.updateInfo();this.fireEvent('change',this,d);},getPageData:function(){var total=this.store.getTotalCount();return{total:total,activePage:Math.ceil((this.cursor+this.pageSize)/this.pageSize),pages:total<this.pageSize?1:Math.ceil(total/this.pageSize)};},changePage:function(page){this.doLoad(((page-1)*this.pageSize).constrain(0,this.store.getTotalCount()));},onLoadError:function(){if(!this.rendered){return;}
 this.refresh.enable();},readPage:function(d){var v=this.field.value,pageNum;if(!v||isNaN(pageNum=parseInt(v,10))){this.field.value=d.activePage;return false;}
 return pageNum;},onPagingKeydown:function(e){var k=e.getKey(),d=this.getPageData(),pageNum;if(k==e.RETURN){e.stopEvent();pageNum=this.readPage(d);if(pageNum!==false){pageNum=Math.min(Math.max(1,pageNum),d.pages)-1;this.doLoad(pageNum*this.pageSize);}}else if(k==e.HOME||k==e.END){e.stopEvent();pageNum=k==e.HOME?1:d.pages;this.field.value=pageNum;}else if(k==e.UP||k==e.PAGEUP||k==e.DOWN||k==e.PAGEDOWN){e.stopEvent();if(pageNum=this.readPage(d)){var increment=e.shiftKey?10:1;if(k==e.DOWN||k==e.PAGEDOWN){increment*=-1;}
-pageNum+=increment;if(pageNum>=1&pageNum<=d.pages){this.field.value=pageNum;}}}},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable();}},doLoad:function(start){var o={},pn=this.paramNames;o[pn.start]=start;o[pn.limit]=this.pageSize;if(this.fireEvent('beforechange',this,o)!==false){this.store.load({params:o});}},onClick:function(button){var store=this.store;switch(button){case this.first:this.doLoad(0);break;case this.prev:this.doLoad(Math.max(0,this.cursor-this.pageSize));break;case this.next:this.doLoad(this.cursor+this.pageSize);break;case this.last:var total=store.getTotalCount();var extra=total%this.pageSize;var lastStart=extra?(total-extra):total-this.pageSize;this.doLoad(lastStart);break;case this.refresh:this.doLoad(this.cursor);break;}},unbind:function(store){store=Ext.StoreMgr.lookup(store);store.un("beforeload",this.beforeLoad,this);store.un("load",this.onLoad,this);store.un("loadexception",this.onLoadError,this);this.store=undefined;},bind:function(store){store=Ext.StoreMgr.lookup(store);store.on("beforeload",this.beforeLoad,this);store.on("load",this.onLoad,this);store.on("loadexception",this.onLoadError,this);this.store=store;this.paramNames.start=store.paramNames.start;this.paramNames.limit=store.paramNames.limit;}});})();Ext.reg('paging',Ext.PagingToolbar);
+pageNum+=increment;if(pageNum>=1&pageNum<=d.pages){this.field.value=pageNum;}}}},beforeLoad:function(){if(this.rendered&&this.refresh){this.refresh.disable();}},doLoad:function(start){var o={},pn=this.paramNames;o[pn.start]=start;o[pn.limit]=this.pageSize;if(this.fireEvent('beforechange',this,o)!==false){this.store.load({params:o});}},onClick:function(button){var store=this.store;switch(button){case this.first:this.doLoad(0);break;case this.prev:this.doLoad(Math.max(0,this.cursor-this.pageSize));break;case this.next:this.doLoad(this.cursor+this.pageSize);break;case this.last:var total=store.getTotalCount();var extra=total%this.pageSize;var lastStart=extra?(total-extra):total-this.pageSize;this.doLoad(lastStart);break;case this.refresh:this.doLoad(this.cursor);break;}},unbind:function(store){store=Ext.StoreMgr.lookup(store);store.un("beforeload",this.beforeLoad,this);store.un("load",this.onLoad,this);store.un("loadexception",this.onLoadError,this);this.store=undefined;},bind:function(store){store=Ext.StoreMgr.lookup(store);store.on("beforeload",this.beforeLoad,this);store.on("load",this.onLoad,this);store.on("loadexception",this.onLoadError,this);this.store=store;this.paramNames.start=store.paramNames.start;this.paramNames.limit=store.paramNames.limit;},onDestroy:function(){if(this.store){this.unbind(this.store);}
+Ext.PagingToolbar.superclass.onDestroy.call(this);}});})();Ext.reg('paging',Ext.PagingToolbar);

Modified: mickael/trunk/ext/v3.0.0-a1/package/tree/tree.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/tree/tree.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/tree/tree.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -56,12 +56,13 @@
 return t;},delegateOut:function(e,t){if(!this.beforeEvent(e)){return;}
 if(e.getTarget('.x-tree-ec-icon',1)){var n=this.getNode(e);this.onIconOut(e,n);if(n==this.lastEcOver){delete this.lastEcOver;}}
 if((t=this.getNodeTarget(e))&&!e.within(t,true)){this.onNodeOut(e,this.getNode(e));}},delegateOver:function(e,t){if(!this.beforeEvent(e)){return;}
+if(Ext.isGecko&&!this.trackingDoc){Ext.getBody().on('mouseover',this.trackExit,this);this.trackingDoc=true;}
 if(this.lastEcOver){this.onIconOut(e,this.lastEcOver);delete this.lastEcOver;}
 if(e.getTarget('.x-tree-ec-icon',1)){this.lastEcOver=this.getNode(e);this.onIconOver(e,this.lastEcOver);}
-if(t=this.getNodeTarget(e)){this.onNodeOver(e,this.getNode(e));}},delegateClick:function(e,t){if(!this.beforeEvent(e)){return;}
+if(t=this.getNodeTarget(e)){this.onNodeOver(e,this.getNode(e));}},trackExit:function(e){if(this.lastOverNode&&!e.within(this.lastOverNode.ui.getEl())){this.onNodeOut(e,this.lastOverNode);delete this.lastOverNode;Ext.getBody().un('mouseover',this.trackExit,this);this.trackingDoc=false;}},delegateClick:function(e,t){if(!this.beforeEvent(e)){return;}
 if(e.getTarget('input[type=checkbox]',1)){this.onCheckboxClick(e,this.getNode(e));}
 else if(e.getTarget('.x-tree-ec-icon',1)){this.onIconClick(e,this.getNode(e));}
-else if(this.getNodeTarget(e)){this.onNodeClick(e,this.getNode(e));}},delegateDblClick:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeDblClick(e,this.getNode(e));}},delegateContextMenu:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeContextMenu(e,this.getNode(e));}},onNodeClick:function(e,node){node.ui.onClick(e);},onNodeOver:function(e,node){node.ui.onOver(e);},onNodeOut:function(e,node){node.ui.onOut(e);},onIconOver:function(e,node){node.ui.addClass('x-tree-ec-over');},onIconOut:function(e,node){node.ui.removeClass('x-tree-ec-over');},onIconClick:function(e,node){node.ui.ecClick(e);},onCheckboxClick:function(e,node){node.ui.onCheckChange(e);},onNodeDblClick:function(e,node){node.ui.onDblClick(e);},onNodeContextMenu:function(e,node){node.ui.onContextMenu(e);},beforeEvent:function(e){if(this.disabled){e.stopEvent();return false;}
+else if(this.getNodeTarget(e)){this.onNodeClick(e,this.getNode(e));}},delegateDblClick:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeDblClick(e,this.getNode(e));}},delegateContextMenu:function(e,t){if(this.beforeEvent(e)&&this.getNodeTarget(e)){this.onNodeContextMenu(e,this.getNode(e));}},onNodeClick:function(e,node){node.ui.onClick(e);},onNodeOver:function(e,node){this.lastOverNode=node;node.ui.onOver(e);},onNodeOut:function(e,node){node.ui.onOut(e);},onIconOver:function(e,node){node.ui.addClass('x-tree-ec-over');},onIconOut:function(e,node){node.ui.removeClass('x-tree-ec-over');},onIconClick:function(e,node){node.ui.ecClick(e);},onCheckboxClick:function(e,node){node.ui.onCheckChange(e);},onNodeDblClick:function(e,node){node.ui.onDblClick(e);},onNodeContextMenu:function(e,node){node.ui.onContextMenu(e);},beforeEvent:function(e){if(this.disabled){e.stopEvent();return false;}
 return true;},disable:function(){this.disabled=true;},enable:function(){this.disabled=false;}};
 
 Ext.tree.TreePanel=Ext.extend(Ext.Panel,{rootVisible:true,animate:Ext.enableFx,lines:true,enableDD:false,hlDrop:Ext.enableFx,pathSeparator:"/",initComponent:function(){Ext.tree.TreePanel.superclass.initComponent.call(this);if(!this.eventModel){this.eventModel=new Ext.tree.TreeEventModel(this);}
@@ -122,7 +123,7 @@
 if(deep===true){this.expandChildNodes(true);}},isHiddenRoot:function(){return this.isRoot&&!this.getOwnerTree().rootVisible;},collapse:function(deep,anim){if(this.expanded&&!this.isHiddenRoot()){if(this.fireEvent("beforecollapse",this,deep,anim)===false){return;}
 this.expanded=false;if((this.getOwnerTree().animate&&anim!==false)||anim){this.ui.animCollapse(function(){this.fireEvent("collapse",this);if(deep===true){this.collapseChildNodes(true);}}.createDelegate(this));return;}else{this.ui.collapse();this.fireEvent("collapse",this);}}
 if(deep===true){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(true,false);}}},delayedExpand:function(delay){if(!this.expandProcId){this.expandProcId=this.expand.defer(delay,this);}},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);}
-this.expandProcId=false;},toggle:function(){if(this.expanded){this.collapse();}else{this.expand();}},ensureVisible:function(callback){var tree=this.getOwnerTree();tree.expandPath(this.parentNode.getPath(),false,function(){var node=tree.getNodeById(this.id);tree.getTreeEl().scrollChildIntoView(node.ui.anchor);Ext.callback(callback);}.createDelegate(this));},expandChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].expand(deep);}},collapseChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(deep);}},disable:function(){this.disabled=true;this.unselect();if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,true);}
+this.expandProcId=false;},toggle:function(){if(this.expanded){this.collapse();}else{this.expand();}},ensureVisible:function(callback){var tree=this.getOwnerTree();tree.expandPath(this.parentNode?this.parentNode.getPath():this.getPath(),false,function(){var node=tree.getNodeById(this.id);tree.getTreeEl().scrollChildIntoView(node.ui.anchor);Ext.callback(callback);}.createDelegate(this));},expandChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].expand(deep);}},collapseChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(deep);}},disable:function(){this.disabled=true;this.unselect();if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,true);}
 this.fireEvent("disabledchange",this,true);},enable:function(){this.disabled=false;if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,false);}
 this.fireEvent("disabledchange",this,false);},renderChildren:function(suppressEvent){if(suppressEvent!==false){this.fireEvent("beforechildrenrendered",this);}
 var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].render(true);}

Modified: mickael/trunk/ext/v3.0.0-a1/package/util.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/util.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/util.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -59,12 +59,13 @@
 return v.dateFormat(format||"m/d/Y");},dateRenderer:function(format){return function(v){return Ext.util.Format.date(v,format);};},stripTagsRE:/<\/?[^>]+>/gi,stripTags:function(v){return!v?v:String(v).replace(this.stripTagsRE,"");},stripScriptsRe:/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,stripScripts:function(v){return!v?v:String(v).replace(this.stripScriptsRe,"");},fileSize:function(size){if(size<1024){return size+" bytes";}else if(size<1048576){return(Math.round(((size*10)/1024))/10)+" KB";}else{return(Math.round(((size*10)/1048576))/10)+" MB";}},math:function(){var fns={};return function(v,a){if(!fns[a]){fns[a]=new Function('v','return v '+a+';');}
 return fns[a](v);}}(),number:function(v,format){if(!format){return v;}
 v*=1;if(typeof v!='number'||isNaN(v)){return'';}
-var hasComma=-1<format.indexOf(','),psplit=format.replace(/[^\d\.]/g,'').split('.');if(1<psplit.length){v=v.toFixed(psplit[1].length);}
+var comma=',';var dec='.';var i18n=false;if(format.substr(format.length-2)=='/i'){format=format.substr(0,format.length-2);i18n=true;comma='.';dec=',';}
+var hasComma=format.indexOf(comma)!=-1,psplit=(i18n?format.replace(/[^\d\,]/g,''):format.replace(/[^\d\.]/g,'')).split(dec);if(1<psplit.length){v=v.toFixed(psplit[1].length);}
 else if(2<psplit.length){throw('NumberFormatException: invalid format, formats should have no more than 1 period: '+format);}
 else{v=v.toFixed(0);}
 var fnum=v.toString();if(hasComma){psplit=fnum.split('.');var cnum=psplit[0],parr=[],j=cnum.length,m=Math.floor(j/3),n=cnum.length%3||3;for(var i=0;i<j;i+=n){if(i!=0){n=3;}
 parr[parr.length]=cnum.substr(i,n);m-=1;}
-fnum=parr.join(',');if(psplit[1]){fnum+='.'+psplit[1];}}
+fnum=parr.join(comma);if(psplit[1]){fnum+=dec+psplit[1];}}
 return format.replace(/[\d,?\.?]+/,fnum);},numberRenderer:function(format){return function(v){return Ext.util.Format.number(v,format);};},plural:function(v,s,p){return v+' '+(v==1?s:(p?p:s+'s'));}}}();
 
 Ext.util.CSS=function(){var rules=null;var doc=document;var camelRe=/(-[a-z])/gi;var camelFn=function(m,a){return a.charAt(1).toUpperCase();};return{createStyleSheet:function(cssText,id){var ss;var head=doc.getElementsByTagName("head")[0];var rules=doc.createElement("style");rules.setAttribute("type","text/css");if(id){rules.setAttribute("id",id);}
@@ -81,7 +82,7 @@
 {this.el=Ext.get(el);this.el.unselectable();Ext.apply(this,config);this.addEvents("mousedown","click","mouseup");this.el.on("mousedown",this.handleMouseDown,this);if(this.preventDefault||this.stopDefault){this.el.on("click",function(e){if(this.preventDefault){e.preventDefault();}
 if(this.stopDefault){e.stopEvent();}},this);}
 if(this.handler){this.on("click",this.handler,this.scope||this);}
-Ext.util.ClickRepeater.superclass.constructor.call(this);};Ext.extend(Ext.util.ClickRepeater,Ext.util.Observable,{interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,handleMouseDown:function(){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass);}
+Ext.util.ClickRepeater.superclass.constructor.call(this);};Ext.extend(Ext.util.ClickRepeater,Ext.util.Observable,{interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,destroy:function(){Ext.destroy(this.el);this.purgeListeners();},handleMouseDown:function(){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass);}
 this.mousedownTime=new Date();Ext.getDoc().on("mouseup",this.handleMouseUp,this);this.el.on("mouseout",this.handleMouseOut,this);this.fireEvent("mousedown",this);this.fireEvent("click",this);if(this.accelerate){this.delay=400;}
 this.timer=this.click.defer(this.delay||this.interval,this);},click:function(){this.fireEvent("click",this);this.timer=this.click.defer(this.accelerate?this.easeOutExpo(this.mousedownTime.getElapsed(),400,-390,12000):this.interval,this);},easeOutExpo:function(t,b,c,d){return(t==d)?b+c:c*(-Math.pow(2,-10*t/d)+1)+b;},handleMouseOut:function(){clearTimeout(this.timer);if(this.pressClass){this.el.removeClass(this.pressClass);}
 this.el.on("mouseover",this.handleMouseReturn,this);},handleMouseReturn:function(){this.el.un("mouseover",this.handleMouseReturn,this);if(this.pressClass){this.el.addClass(this.pressClass);}

Modified: mickael/trunk/ext/v3.0.0-a1/package/widget-core.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/package/widget-core.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/package/widget-core.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,11 +7,11 @@
  */
 
 
-Ext.ComponentMgr=function(){var all=new Ext.util.MixedCollection();var types={};var ptypes={};return{register:function(c){all.add(c);},unregister:function(c){all.remove(c);},get:function(id){return all.get(id);},onAvailable:function(id,fn,scope){all.on("add",function(index,o){if(o.id==id){fn.call(scope||o,o);all.un("add",fn,scope);}});},all:all,registerType:function(xtype,cls){types[xtype]=cls;cls.xtype=xtype;},create:function(config,defaultType){return new types[config.xtype||defaultType](config);},registerPlugin:function(ptype,cls){ptypes[ptype]=cls;cls.ptype=ptype;},createPlugin:function(config,defaultType){return new ptypes[config.ptype||defaultType](config);}};}();Ext.reg=Ext.ComponentMgr.registerType;Ext.preg=Ext.ComponentMgr.registerPlugin;
+Ext.ComponentMgr=function(){var all=new Ext.util.MixedCollection();var types={};var ptypes={};return{register:function(c){all.add(c);},unregister:function(c){all.remove(c);},get:function(id){return all.get(id);},onAvailable:function(id,fn,scope){all.on("add",function(index,o){if(o.id==id){fn.call(scope||o,o);all.un("add",fn,scope);}});},all:all,registerType:function(xtype,cls){types[xtype]=cls;cls.xtype=xtype;},create:function(config,defaultType){return config.render?config:new types[config.xtype||defaultType](config);},registerPlugin:function(ptype,cls){ptypes[ptype]=cls;cls.ptype=ptype;},createPlugin:function(config,defaultType){return new ptypes[config.ptype||defaultType](config);}};}();Ext.reg=Ext.ComponentMgr.registerType;Ext.preg=Ext.ComponentMgr.registerPlugin;Ext.create=Ext.ComponentMgr.create;
 
 Ext.Component=function(config){config=config||{};if(config.initialConfig){if(config.isAction){this.baseAction=config;}
 config=config.initialConfig;}else if(config.tagName||config.dom||typeof config=="string"){config={applyTo:config,id:config.id||config};}
-this.initialConfig=config;Ext.apply(this,config);this.addEvents('disable','enable','beforeshow','show','beforehide','hide','beforerender','render','beforedestroy','destroy','beforestaterestore','staterestore','beforestatesave','statesave');this.getId();Ext.ComponentMgr.register(this);Ext.Component.superclass.constructor.call(this);if(this.baseAction){this.baseAction.addComponent(this);}
+this.initialConfig=config;Ext.apply(this,config);this.addEvents('disable','enable','beforeshow','show','beforehide','hide','beforerender','render','afterrender','beforedestroy','destroy','beforestaterestore','staterestore','beforestatesave','statesave');this.getId();Ext.ComponentMgr.register(this);Ext.Component.superclass.constructor.call(this);if(this.baseAction){this.baseAction.addComponent(this);}
 this.initComponent();if(this.plugins){if(Ext.isArray(this.plugins)){for(var i=0,len=this.plugins.length;i<len;i++){this.plugins[i]=this.initPlugin(this.plugins[i]);}}else{this.plugins=this.initPlugin(this.plugins);}}
 if(this.stateful!==false){this.initState(config);}
 if(this.applyTo){this.applyToMarkup(this.applyTo);delete this.applyTo;}else if(this.renderTo){this.render(this.renderTo);delete this.renderTo;}};Ext.Component.AUTO_ID=1000;Ext.extend(Ext.Component,Ext.util.Observable,{disabledClass:"x-item-disabled",allowDomMove:true,autoShow:false,hideMode:'display',hideParent:false,hidden:false,disabled:false,rendered:false,ctype:"Ext.Component",actionMode:"el",getActionEl:function(){return this[this.actionMode];},initPlugin:function(p){if(p.ptype&&typeof p.init!='function'){p=Ext.ComponentMgr.createPlugin(p);}else if(typeof p=='string'){p=Ext.ComponentMgr.createPlugin({ptype:p});}
@@ -23,8 +23,11 @@
 if(this.style){this.el.applyStyles(this.style);delete this.style;}
 this.fireEvent("render",this);this.afterRender(this.container);if(this.hidden){this.hide();}
 if(this.disabled){this.disable();}
-if(this.stateful!==false){this.initStateEvents();}}
-return this;},initState:function(config){if(Ext.state.Manager){var state=Ext.state.Manager.get(this.stateId||this.id);if(state){if(this.fireEvent('beforestaterestore',this,state)!==false){this.applyState(state);this.fireEvent('staterestore',this,state);}}}},initStateEvents:function(){if(this.stateEvents){for(var i=0,e;e=this.stateEvents[i];i++){this.on(e,this.saveState,this,{delay:100});}}},applyState:function(state,config){if(state){Ext.apply(this,state);}},getState:function(){return null;},saveState:function(){if(Ext.state.Manager){var state=this.getState();if(this.fireEvent('beforestatesave',this,state)!==false){Ext.state.Manager.set(this.stateId||this.id,state);this.fireEvent('statesave',this,state);}}},applyToMarkup:function(el){this.allowDomMove=false;this.el=Ext.get(el);this.render(this.el.dom.parentNode);},addClass:function(cls){if(this.el){this.el.addClass(cls);}else{this.cls=this.cls?this.cls+' '+cls:cls;}},removeClass:function(cls){if(this.el){this.el.removeClass(cls);}else if(this.cls){this.cls=this.cls.split(' ').remove(cls).join(' ');}},onRender:function(ct,position){if(this.autoEl){if(typeof this.autoEl=='string'){this.el=document.createElement(this.autoEl);}else{var div=document.createElement('div');Ext.DomHelper.overwrite(div,this.autoEl);this.el=div.firstChild;}
+if(this.stateful!==false){this.initStateEvents();}
+this.initRef();this.fireEvent("afterrender",this);}
+return this;},initRef:function(){if(this.ref){var levels=this.ref.split('/');var last=levels.length,i=0;var t=this;while(i<last){if(t.ownerCt){t=t.ownerCt;}
+i++;}
+t[levels[--i]]=this;}},initState:function(config){if(Ext.state.Manager){var id=this.getStateId();if(id){var state=Ext.state.Manager.get(id);if(state){if(this.fireEvent('beforestaterestore',this,state)!==false){this.applyState(state);this.fireEvent('staterestore',this,state);}}}}},getStateId:function(){return this.stateId||((this.id.indexOf('ext-comp-')==0||this.id.indexOf('ext-gen')==0)?null:this.id);},initStateEvents:function(){if(this.stateEvents){for(var i=0,e;e=this.stateEvents[i];i++){this.on(e,this.saveState,this,{delay:100});}}},applyState:function(state,config){if(state){Ext.apply(this,state);}},getState:function(){return null;},saveState:function(){if(Ext.state.Manager){var id=this.getStateId();if(id){var state=this.getState();if(this.fireEvent('beforestatesave',this,state)!==false){Ext.state.Manager.set(id,state);this.fireEvent('statesave',this,state);}}}},applyToMarkup:function(el){this.allowDomMove=false;this.el=Ext.get(el);this.render(this.el.dom.parentNode);},addClass:function(cls){if(this.el){this.el.addClass(cls);}else{this.cls=this.cls?this.cls+' '+cls:cls;}},removeClass:function(cls){if(this.el){this.el.removeClass(cls);}else if(this.cls){this.cls=this.cls.split(' ').remove(cls).join(' ');}},onRender:function(ct,position){if(this.autoEl){if(typeof this.autoEl=='string'){this.el=document.createElement(this.autoEl);}else{var div=document.createElement('div');Ext.DomHelper.overwrite(div,this.autoEl);this.el=div.firstChild;}
 if(!this.el.id){this.el.id=this.getId();}}
 if(this.el){this.el=Ext.get(this.el);if(this.allowDomMove!==false){ct.dom.insertBefore(this.el.dom,position);}
 if(this.overCls){this.el.addClassOnOver(this.overCls);}}},getAutoCreate:function(){var cfg=typeof this.autoCreate=="object"?this.autoCreate:Ext.apply({},this.defaultAutoCreate);if(this.id&&!cfg.id){cfg.id=this.id;}
@@ -45,7 +48,7 @@
 return tc.xtypes;},findParentBy:function(fn){for(var p=this.ownerCt;(p!=null)&&!fn(p,this);p=p.ownerCt);return p||null;},findParentByType:function(xtype){return typeof xtype=='function'?this.findParentBy(function(p){return p.constructor===xtype;}):this.findParentBy(function(p){return p.constructor.xtype===xtype;});},getDomPositionEl:function(){return this.getPositionEl?this.getPositionEl():this.getEl();},mon:function(item,ename,fn,scope,opt){if(!this.mons){this.mons=[];this.on('beforedestroy',function(){for(var i=0,len=this.mons.length;i<len;i++){var m=this.mons[i];m.item.un(m.ename,m.fn,m.scope);}},this);}
 this.mons.push({item:item,ename:ename,fn:fn,scope:scope});item.on(ename,fn,scope,opt);},nextSibling:function(){if(this.ownerCt){var index=this.ownerCt.items.indexOf(this);if(index!=-1&&index+1<this.ownerCt.items.getCount()){return this.ownerCt.items.itemAt(index+1);}}
 return null;},previousSibling:function(){if(this.ownerCt){var index=this.ownerCt.items.indexOf(this);if(index>0){return this.ownerCt.items.itemAt(index-1);}}
-return null;}});Ext.reg('component',Ext.Component);
+return null;},getBubbleTarget:function(){return this.ownerCt;}});Ext.reg('component',Ext.Component);
 
 Ext.BoxComponent=Ext.extend(Ext.Component,{initComponent:function(){Ext.BoxComponent.superclass.initComponent.call(this);this.addEvents('resize','move');},boxReady:false,deferHeight:false,setSize:function(w,h){if(typeof w=='object'){h=w.height;w=w.width;}
 if(!this.boxReady){this.width=w;this.height=h;return this;}

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/borders.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/borders.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/borders.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,46 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-panel-noborder .x-panel-body-noborder {
     border-width:0;
 }

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/box.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/box.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/box.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,46 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  Creates rounded, raised boxes like on the Ext website - the markup isn't pretty:
   <div class="x-box-blue">

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/button.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/button.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/button.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,70 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-btn{
 	font:normal 11px tahoma, verdana, helvetica;
 	cursor:pointer;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/combo.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/combo.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/combo.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,46 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-combo-list {
     border:1px solid #98c0f4;
     background:#ddecfe;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/core.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/core.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/core.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,70 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .ext-el-mask {
     z-index: 100;
     position: absolute;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/date-picker.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/date-picker.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/date-picker.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,46 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-date-picker {
     border: 1px solid #1b376c;
     border-top:0 none;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/dd.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/dd.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/dd.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,70 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-dd-drag-proxy{
 	position:absolute;
 	left:0;top:0;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/debug.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/debug.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/debug.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,46 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 #x-debug-browser .x-tree .x-tree-node a span {
     color:#222297;
     font-size:11px;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/dialog.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/dialog.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/dialog.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,46 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-window-dlg .x-window-body {
     border:0 none !important;
     padding:5px 10px;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/editor.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/editor.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/editor.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,46 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-html-editor-wrap {
     border:1px solid #a9bfd3;
     background:white;

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/ext-all.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,25 +6,7 @@
  * http://extjs.com/license
  */
 
-
-
 html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 .ext-el-mask {
     z-index: 100;
     position: absolute;
@@ -353,14 +335,6 @@
     visibility:hidden;
 }
 
-
-
-
-
-
-
-
-
 .x-tab-panel {
     overflow:hidden;
 }
@@ -710,16 +684,6 @@
     overflow:hidden;
     padding:2px;
 }
-
-
-
-
-
-
-
-
-
-
 
 .x-form-field{
     margin: 0 0 0 0;
@@ -1226,22 +1190,6 @@
     overflow:hidden;
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 .x-btn{
 	font:normal 11px tahoma, verdana, helvetica;
 	cursor:pointer;
@@ -1644,14 +1592,6 @@
 	overflow:hidden;
     height:2px;
 }
-
-
-
-
-
-
-
-
 .x-toolbar{
 	border-color:#a9bfd3;
     border-style:solid;
@@ -1939,14 +1879,6 @@
     border-left: 1px solid #99BBE8;
     padding: 2px 8px 2px 5px;
 }
-
-
-
-
-
-
-
-
 .x-resizable-handle {
     position:absolute;
     z-index:100;
@@ -2084,22 +2016,6 @@
 }
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 .x-grid3 {
 	position:relative;
 	overflow:hidden;
@@ -2677,22 +2593,6 @@
 	border-top-color:#a3bae9;
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 .x-dd-drag-proxy{
 	position:absolute;
 	left:0;top:0;
@@ -2760,14 +2660,6 @@
     filter:alpha(opacity=50);
     zoom:1;
 }
-
-
-
-
-
-
-
-
 .x-tree .x-panel-body{
     background-color:#fff;
 }
@@ -3015,16 +2907,6 @@
     zoom:1;
 }
 
-
-
-
-
-
-
-
-
-
-
 .x-date-picker {
     border: 1px solid #1b376c;
     border-top:0 none;
@@ -3266,22 +3148,6 @@
 td.x-date-mp-sep {
    border-right:1px solid #c5d2df;
 }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 .x-tip{
 	position: absolute;
 	top: 0;
@@ -3407,22 +3273,6 @@
     padding-left:24px;
     background:transparent url(../images/default/form/exclamation.gif) no-repeat 2px 2px;
 }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 .x-menu {
 	border: 1px solid #718bb7;
 	z-index: 15000;
@@ -3575,16 +3425,6 @@
 	padding:0;
 }
 
-
-
-
-
-
-
-
-
-
-
 
 
 .x-box-tl {
@@ -3678,16 +3518,6 @@
 .x-box-blue .x-box-mr {
 	background-image: url(../images/default/box/r-blue.gif);
 }
-
-
-
-
-
-
-
-
-
-
 #x-debug-browser .x-tree .x-tree-node a span {
     color:#222297;
     font-size:11px;
@@ -3717,16 +3547,6 @@
 #x-debug-browser.x-panel-collapsed .x-tool-toggle-over {
     background-position:-15px -60px;
 }
-
-
-
-
-
-
-
-
-
-
 .x-combo-list {
     border:1px solid #98c0f4;
     background:#ddecfe;
@@ -3774,16 +3594,6 @@
 .x-combo-list-small {
     font:normal 11px tahoma, arial, helvetica, sans-serif;
 }
-
-
-
-
-
-
-
-
-
-
 .x-panel {
     border-style: solid;
     border-color: #99bbe8;
@@ -4200,8 +4010,6 @@
     font:normal 11px arial,tahoma, helvetica, sans-serif;
 }
 
-
-
 .x-window {
     zoom:1;
 }
@@ -4402,16 +4210,6 @@
 body.x-body-masked .x-window-plain .x-window-mc {
     background: #ccd9e8;
 }
-
-
-
-
-
-
-
-
-
-
 .x-html-editor-wrap {
     border:1px solid #a9bfd3;
     background:white;
@@ -4470,16 +4268,6 @@
 .x-html-editor-tb .x-toolbar {
     position:static !important;
 }
-
-
-
-
-
-
-
-
-
-
 .x-panel-noborder .x-panel-body-noborder {
     border-width:0;
 }
@@ -4533,22 +4321,6 @@
     border-width:0;
     border-bottom:1px solid #99bbe8;
 }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 .x-border-layout-ct {
     background:#dfe8f6;
 }
@@ -4836,16 +4608,6 @@
     left:0;
     top:0;
 }
-
-
-
-
-
-
-
-
-
-
 .x-progress-wrap {
     border:1px solid #6593cf;
     overflow:hidden;
@@ -4881,16 +4643,6 @@
 .ext-ie .x-progress-text-back {
     line-height:15px;
 }
-
-
-
-
-
-
-
-
-
-
 .x-list-header{
 	background: #f9f9f9 url(../images/default/grid/grid3-hrow.gif) repeat-x 0 bottom;
 	cursor:default;
@@ -4974,8 +4726,6 @@
 }
 
 
-
-
 .x-slider {
     zoom:1;
 }
@@ -5059,16 +4809,6 @@
 .x-slider-vert .x-slider-thumb-drag {
     background-position: -30px -28px;
 }
-
-
-
-
-
-
-
-
-
-
 .x-window-dlg .x-window-body {
     border:0 none !important;
     padding:5px 10px;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/form.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/form.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/form.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,46 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /* all fields */
 .x-form-field{
     margin: 0 0 0 0;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/grid.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/grid.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/grid.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,70 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /* Grid3 styles */
 .x-grid3 {
 	position:relative;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/layout.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/layout.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/layout.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,70 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-border-layout-ct {
     background:#dfe8f6;
 }

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/list-view.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/list-view.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/list-view.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,46 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-list-header{
 	background: #f9f9f9 url(../images/default/grid/grid3-hrow.gif) repeat-x 0 bottom;
 	cursor:default;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/menu.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/menu.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/menu.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,70 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-menu {
 	border: 1px solid #718bb7;
 	z-index: 15000;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/panel.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/panel.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/panel.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,46 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-panel {
     border-style: solid;
     border-color: #99bbe8;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/progress.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/progress.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/progress.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,46 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-progress-wrap {
     border:1px solid #6593cf;
     overflow:hidden;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/qtips.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/qtips.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/qtips.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,70 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-tip{
 	position: absolute;
 	top: 0;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/reset-min.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/reset-min.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/reset-min.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,36 +6,4 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/reset.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/reset.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/reset.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,12 +6,4 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/resizable.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/resizable.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/resizable.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,38 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-resizable-handle {
     position:absolute;
     z-index:100;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/slider.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/slider.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/slider.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /* Shared styles */
 .x-slider {
     zoom:1;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/tabs.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/tabs.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/tabs.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,38 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-tab-panel {
     overflow:hidden;
 }

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/toolbar.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/toolbar.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/toolbar.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,38 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-toolbar{
 	border-color:#a9bfd3;
     border-style:solid;

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/tree.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/tree.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/tree.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,38 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-tree .x-panel-body{
     background-color:#fff;
 }

Modified: mickael/trunk/ext/v3.0.0-a1/resources/css/window.css
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/resources/css/window.css	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/window.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-window {
     zoom:1;
 }

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/resources/css/xtheme-gray.css	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 .x-panel {
     border-style: solid;
     border-color: #d0d0d0;

Modified: mickael/trunk/ext/v3.0.0-a1/source/adapter/ext-base.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/adapter/ext-base.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/adapter/ext-base.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * 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 libFlyweight;
 
@@ -238,11 +230,6 @@
                     return true;
                 }
 
-                // prevent unload errors with simple check
-                //var wrappedFn = function(e) {
-                //    return typeof Ext != 'undefined' ? fn(Ext.lib.Event.getEvent(e)) : false;
-                //};
-
                 var li = [el, eventName, fn, fn];
 
                 var index = listeners.length;

Modified: mickael/trunk/ext/v3.0.0-a1/source/adapter/jquery-bridge.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/adapter/jquery-bridge.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/adapter/jquery-bridge.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 if(typeof jQuery == "undefined"){
     throw "Unable to load Ext, jQuery not found.";
 }

Modified: mickael/trunk/ext/v3.0.0-a1/source/adapter/prototype-bridge.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/adapter/prototype-bridge.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/adapter/prototype-bridge.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * 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 libFlyweight;

Modified: mickael/trunk/ext/v3.0.0-a1/source/adapter/yui-bridge.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/adapter/yui-bridge.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/adapter/yui-bridge.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 if(typeof YAHOO == "undefined"){
     throw "Unable to load Ext, core YUI utilities (yahoo, dom, event) not found.";
 }

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/CompositeElement.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/CompositeElement.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/CompositeElement.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.CompositeElement
  * Standard composite class. Creates a Ext.Element for every element in the collection.

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/DomHelper.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/DomHelper.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/DomHelper.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.DomHelper
  * Utility class for working with DOM and/or Templates. It transparently supports using HTML fragments or DOM.<br>

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/DomQuery.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/DomQuery.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/DomQuery.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,14 +7,6 @@
  */
 
 /*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
  * This is code is also distributed under MIT license for use
  * with jQuery and prototype JavaScript libraries.
  */
@@ -469,7 +461,8 @@
          * Selects a group of elements.
          * @param {String} selector The selector/xpath query (can be a comma separated list of selectors)
          * @param {Node} root (optional) The start of the query (defaults to document).
-         * @return {Array}
+         * @return {Array} An Array of DOM elements which match the selector. If there are
+         * no matches, and empty Array is returned.
          */
         select : function(path, root, type){
             if(!root || root == document){
@@ -503,7 +496,7 @@
          * Selects a single element.
          * @param {String} selector The selector/xpath query
          * @param {Node} root (optional) The start of the query (defaults to document).
-         * @return {Element}
+         * @return {Element} The DOM element which matched the selector.
          */
         selectNode : function(path, root){
             return Ext.DomQuery.select(path, root)[0];
@@ -560,7 +553,8 @@
          * @param {String} selector The simple selector to test
          * @param {Boolean} nonMatches If true, it returns the elements that DON'T match
          * the selector instead of the ones that match
-         * @return {Array}
+         * @return {Array} An Array of DOM elements which match the selector. If there are
+         * no matches, and empty Array is returned.
          */
         filter : function(els, ss, nonMatches){
             ss = ss.replace(trimRe, "");

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/Element.alignment.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/Element.alignment.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/Element.alignment.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.Element.addMethods({
     /**
      * Gets the x,y coordinates specified by the anchor position on the element.

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/Element.dd.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/Element.dd.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/Element.dd.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.Element.addMethods({
     /**
      * Initializes a {@link Ext.dd.DD} drag drop object for this element.

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/Element.insertion.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/Element.insertion.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/Element.insertion.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.Element.addMethods({
     /**
      * Appends the passed element(s) to this element
@@ -135,7 +127,7 @@
             this.dom.parentNode.insertBefore(el, this.dom);
         }
         El.uncache(this.id);
-        this.dom.parentNode.removeChild(this.dom);
+        Ext.removeNode(this.dom);
         this.dom = el;
         this.id = Ext.id(el);
         El.cache[this.id] = this;

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/Element.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/Element.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/Element.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Element
  * Represents an Element in the DOM.<br><br>
@@ -871,13 +863,13 @@
         var w, h, d = this.dom, s = d.style;
         if(s.width && s.width != 'auto'){
             w = parseInt(s.width, 10);
-            if(Ext.isBorderBox){
+            if(this.isBorderBox()){
                w -= this.getFrameWidth('lr');
             }
         }
         if(s.height && s.height != 'auto'){
             h = parseInt(s.height, 10);
-            if(Ext.isBorderBox){
+            if(this.isBorderBox()){
                h -= this.getFrameWidth('tb');
             }
         }
@@ -1616,7 +1608,7 @@
      * @return {Number}
      */
     getFrameWidth : function(sides, onlyContentBox){
-        return onlyContentBox && Ext.isBorderBox ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));
+        return onlyContentBox && this.isBorderBox() ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));
     },
 
     /**
@@ -1713,7 +1705,7 @@
      */
     mask : function(msg, msgCls){
         if(this.getStyle("position") == "static"){
-            this.setStyle("position", "relative");
+            this.addClass("x-masked-relative");
         }
         if(this._maskMsg){
             this._maskMsg.remove();
@@ -1752,7 +1744,7 @@
             this._mask.remove();
             delete this._mask;
         }
-        this.removeClass("x-masked");
+        this.removeClass(["x-masked", "x-masked-relative"]);
     },
 
     /**

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/Element.keys.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/Element.keys.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/Element.keys.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.Element.addMethods({
     /**
      * Convenience method for constructing a KeyMap

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/Element.legacy.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/Element.legacy.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/Element.legacy.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.Element.addMethods({
     /**
      * Measures the element's content height and updates height to match. Note: this function uses setTimeout so

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/Element.scroll.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/Element.scroll.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/Element.scroll.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.Element.addMethods({
     /**
      * Scrolls this element into view within the passed container.
@@ -79,7 +71,7 @@
      */
     scrollTo : function(side, value, animate){
         var prop = side.toLowerCase() == "left" ? "scrollLeft" : "scrollTop";
-        if(!animate || !A){
+        if(!animate){
             this.dom[prop] = value;
         }else{
             var to = prop == "scrollLeft" ? [value, this.dom.scrollTop] : [this.dom.scrollLeft, value];

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/EventManager.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/EventManager.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/EventManager.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.EventManager
  * Registers event handlers that want to receive a normalized EventObject instead of the standard browser event and provides
@@ -181,6 +173,14 @@
         };
     };
 
+    var createTargeted = function(h, o){
+        return function(){
+            if(o.target == Ext.EventObject.setEvent(arguments[0]).target){
+                h.apply(this, Array.prototype.slice.call(arguments, 0));
+            }
+        };
+    };
+
     var listen = function(element, ename, opt, fn, scope){
         var o = (!opt || typeof opt == "boolean") ? {} : opt;
         fn = fn || o.fn; scope = scope || o.scope;
@@ -219,6 +219,9 @@
 
             fn.call(scope || el, e, t, o);
         };
+        if(o.target){
+            h = createTargeted(h, o);
+        }
         if(o.delay){
             h = createDelayed(h, o);
         }
@@ -263,6 +266,8 @@
      * <li>buffer {Number} : Causes the handler to be scheduled to run in an {@link Ext.util.DelayedTask} delayed
      * by the specified number of milliseconds. If the event fires again within that time, the original
      * handler is <em>not</em> invoked, but the new handler is scheduled in its place.</li>
+     * <li>target {Element} : Only call the handler if the event was fired on the target Element, <i>not</i>
+     * if the event was bubbled up from a child node.</li>
      * </ul><br>
      * <p>See {@link Ext.Element#addListener} for examples of how to use these options.</p>
      */
@@ -330,6 +335,11 @@
             docReadyEvent.addListener(fn, scope, options);
         },
 
+        // private
+        doResizeEvent: function(){
+            resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
+        },
+        
         /**
          * Fires when the window is resized and provides resize event buffering (50 milliseconds), passes new viewport width and height to handlers.
          * @param {Function} fn        The method the event invokes
@@ -339,9 +349,7 @@
         onWindowResize : function(fn, scope, options){
             if(!resizeEvent){
                 resizeEvent = new Ext.util.Event();
-                resizeTask = new Ext.util.DelayedTask(function(){
-                    resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
-                });
+                resizeTask = new Ext.util.DelayedTask(this.doResizeEvent);
                 E.on(window, "resize", this.fireWindowResize, this);
             }
             resizeEvent.addListener(fn, scope, options);
@@ -435,10 +443,9 @@
 }();
 /**
   * Fires when the document is ready (before onload and before images are loaded).  Shorthand of {@link Ext.EventManager#onDocumentReady}.
-  * @param {Function} fn        The method the event invokes
-  * @param {Object}   scope    An  object that becomes the scope of the handler
-  * @param {boolean}  override If true, the obj passed in becomes
-  *                             the execution scope of the listener
+  * @param {Function} fn The method the event invokes
+  * @param {Object} scope An object that becomes the scope of the handler
+  * @param {boolean} options (optional) An object containing standard {@link #addListener} options
   * @member Ext
   * @method onReady
  */
@@ -452,10 +459,11 @@
         var bd = document.body || document.getElementsByTagName('body')[0];
         if(!bd){ return false; }
         var cls = [' ',
-                Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : 'ext-ie7')
+                Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : (Ext.isIE7 ? 'ext-ie7' : 'ext-ie8'))
                 : Ext.isGecko ? "ext-gecko " + (Ext.isGecko2 ? 'ext-gecko2' : 'ext-gecko3')
                 : Ext.isOpera ? "ext-opera"
-                : Ext.isSafari ? "ext-safari" : ""];
+                : Ext.isSafari ? "ext-safari"
+                : Ext.isChrome ? "ext-chrome" : ""];
 
         if(Ext.isMac){
             cls.push("ext-mac");

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/Ext.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/Ext.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/Ext.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 
 Ext = {version: '3.0'};
 
@@ -53,12 +45,14 @@
 
     var isStrict = document.compatMode == "CSS1Compat",
         isOpera = ua.indexOf("opera") > -1,
-        isSafari = (/webkit|khtml/).test(ua),
+        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,
-        isGecko = !isSafari && ua.indexOf("gecko") > -1,
-        isGecko3 = !isSafari && ua.indexOf("rv:1.9") > -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),
@@ -67,7 +61,7 @@
         isSecure = window.location.href.toLowerCase().indexOf("https") === 0;
 
     // remove css image flicker
-	if(isIE && !isIE7){
+    if(isIE && !isIE7){
         try{
             document.execCommand("BackgroundImageCache", false, true);
         }catch(e){}
@@ -215,7 +209,7 @@
     MyGridPanel = Ext.extend(Ext.grid.GridPanel, {
         constructor: function(config) {
             // Your preprocessing here
-        	MyGridPanel.superclass.constructor.apply(this, arguments);
+            MyGridPanel.superclass.constructor.apply(this, arguments);
             // Your postprocessing here
         },
 
@@ -258,6 +252,9 @@
                 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);};
@@ -265,6 +262,10 @@
             };
         }(),
 
+        extendX : function(supr, fn){
+            return Ext.extend(supr, fn(supr.prototype));
+        },
+
         /**
          * Adds a list of functions to the prototype of an existing class, overwriting any existing methods with the same name.
          * Usage:<pre><code>
@@ -335,12 +336,12 @@
                     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, "=&");
-	                }
+                        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();
@@ -348,7 +349,8 @@
         },
 
         /**
-         * Takes an encoded URL and and converts it to an object. e.g. Ext.urlDecode("foo=1&bar=2"); would return {foo: 1, bar: 2} or Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", true); would return {foo: 1, bar: [2, 3, 4]}.
+         * Takes an encoded URL and and converts it to an object. e.g. Ext.urlDecode("foo=1&bar=2"); would return {foo: "1", bar: "2"}
+         * or Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false); would return {foo: "1", bar: ["2", "3", "4"]}.
          * @param {String} string
          * @param {Boolean} overwrite (optional) Items of the same name will overwrite previous values instead of creating an an array (Defaults to false).
          * @return {Object} A literal with members
@@ -477,7 +479,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;
@@ -497,13 +499,13 @@
             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();
-		            }
+                    if(typeof as.destroy == 'function'){
+                        as.destroy();
+                    }
+                    else if(as.dom){
+                        as.removeAllListeners();
+                        as.remove();
+                    }
                 }
             }
         },
@@ -585,15 +587,23 @@
         },
 
         /**
-         * Returns true if the passed value is null, undefined or an empty string (optional).
+         * Returns true if the passed value is null, undefined or an empty string.
          * @param {Mixed} value The value to test
-         * @param {Boolean} allowBlank (optional) Pass true if an empty string is not considered empty
+         * @param {Boolean} allowBlank (optional) true to allow empty strings (defaults to false)
          * @return {Boolean}
          */
         isEmpty : function(v, allowBlank){
             return v === null || v === undefined || (!allowBlank ? v === '' : false);
         },
 
+        /**
+         * Utility method for validating that a value is non-empty (i.e. i) not null, ii) not undefined, and iii) not an empty string), 
+         * returning the specified default value if it is.
+         * @param {Mixed} value The value to test
+         * @param {Mixed} defaultValue The value to return if the original value is empty
+         * @param {Boolean} allowBlank (optional) true to allow empty strings (defaults to false)
+         * @return {Mixed} value, if non-empty, else defaultValue
+         */
         value : function(v, defaultValue, allowBlank){
             return Ext.isEmpty(v, allowBlank) ? defaultValue : v;
         },
@@ -603,19 +613,36 @@
          * @param {Object} The object to test
          * @return {Boolean}
          */
-		isArray : function(v){
-			return v && typeof v.length == 'number' && typeof v.splice == 'function';
-		},
+        isArray : function(v){
+            return v && typeof v.length == 'number' && typeof v.splice == 'function';
+        },
 
-		/**
+        /**
          * Returns true if the passed object is a JavaScript date object, otherwise false.
          * @param {Object} The object to test
          * @return {Boolean}
          */
-		isDate : function(v){
-			return v && typeof v.getFullYear == 'function';
-		},
+        isDate : function(v){
+            return v && typeof v.getFullYear == 'function';
+        },
 
+        /**
+         * Copies a set of named properties fom the source object to the destination object.
+         * @param {Object} The destination object.
+         * @param {Object} The source object.
+         * @param {Array/String} Either an Array of property names, or a comma-delimited list
+         * of property names to copy.
+         * @return {Object} The modified object.
+         * <p>example:<pre><code>
+ImageComponent = Ext.extend(Ext.BoxComponent, {
+    initComponent: function() {
+        this.autoEl = { tag: 'img' };
+        MyComponent.superclass.initComponent.apply(this, arguments);
+        this.initialBox = Ext.copyTo({}, this.initialConfig, 'x,y,width,height');
+    }
+});
+</code></pre>
+         */
         copyTo: function(dest, source, names){
             if(typeof names == 'string'){
                 names = names.split(/[,;\s]/);
@@ -629,12 +656,25 @@
             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);
+        },
+
         /**
          * True if the detected browser is Opera.
          * @type Boolean
          */
         isOpera : isOpera,
         /**
+         * True if the detected browser is Chrome.
+         * @type Boolean
+         */
+        isChrome : isChrome,
+        /**
          * True if the detected browser is Safari.
          * @type Boolean
          */
@@ -658,13 +698,18 @@
          * True if the detected browser is Internet Explorer 6.x.
          * @type Boolean
          */
-        isIE6 : isIE && !isIE7,
+        isIE6 : isIE && !isIE7 && !isIE8,
         /**
          * True if the detected browser is Internet Explorer 7.x.
          * @type Boolean
          */
         isIE7 : isIE7,
         /**
+         * True if the detected browser is Internet Explorer 8.x.
+         * @type Boolean
+         */
+        isIE8 : isIE8,
+        /**
          * True if the detected browser uses the Gecko layout engine (e.g. Mozilla, Firefox).
          * @type Boolean
          */
@@ -705,11 +750,11 @@
          */
         isAir : isAir,
 
-	    /**
-	     * By default, Ext intelligently decides whether floating elements should be shimmed. If you are using flash,
-	     * you may want to set this to true.
-	     * @type Boolean
-	     */
+        /**
+         * By default, Ext intelligently decides whether floating elements should be shimmed. If you are using flash,
+         * you may want to set this to true.
+         * @type Boolean
+         */
         useShims : ((isIE && !isIE7) || (isMac && isGecko && !isGecko3))
     });
 
@@ -718,7 +763,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");
 
 
 /**
@@ -1035,9 +1080,9 @@
      */
     indexOf : function(o){
        for (var i = 0, len = this.length; i < len; i++){
- 	      if(this[i] == o) return i;
+           if(this[i] == o) return i;
        }
- 	   return -1;
+        return -1;
     },
 
     /**
@@ -1062,5 +1107,5 @@
  @member Date getElapsed
  */
 Date.prototype.getElapsed = function(date) {
-	return Math.abs((date || new Date()).getTime()-this.getTime());
+    return Math.abs((date || new Date()).getTime()-this.getTime());
 };

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/Fx.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/Fx.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/Fx.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 
 //Notifies Element that fx methods are available
 Ext.enableFx = true;
@@ -64,7 +56,7 @@
  * a function which returns such a specification that will be applied to the Element after the effect finishes
  * @cfg {Boolean} block Whether the effect should block other effects from queueing while it runs
  * @cfg {Boolean} concurrent Whether to allow subsequently-queued effects to run at the same time as the current effect, or to ensure that they run in sequence
- * @cfg {Boolean} stopFx Whether subsequent effects should be stopped and removed after the current effect finishes
+ * @cfg {Boolean} stopFx Whether preceding effects should be stopped and removed before running current effect (only applies to non blocking effects)
  */
 Ext.Fx = {
 	/**
@@ -485,7 +477,7 @@
 
 // common config options shown with default values
 el.frame("C3DAF9", 1, {
-    duration: 1 //duration of entire animation (not each individual ripple)
+    duration: 1 //duration of each individual ripple.
     // Note: Easing is not configurable and will be ignored if included
 });
 </code></pre>
@@ -629,14 +621,17 @@
         var el = this.getFxEl();
         o = o || {};
         el.queueFx(o, function(){
-            arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}},
+            var to = o.endOpacity || 0;
+            arguments.callee.anim = this.fxanim({opacity:{to:to}},
                 o, null, .5, "easeOut", function(){
-                if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){
-                     this.dom.style.display = "none";
-                }else{
-                     this.dom.style.visibility = "hidden";
+                if(to === 0){
+                    if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){
+                         this.dom.style.display = "none";
+                    }else{
+                         this.dom.style.visibility = "hidden";
+                    }
+                    this.clearOpacity();
                 }
-                this.clearOpacity();
                 el.afterFx(o);
             });
         });

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/Template.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/Template.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/Template.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
 * @class Ext.Template
 * Represents an HTML fragment template. Templates can be precompiled for greater performance.

Modified: mickael/trunk/ext/v3.0.0-a1/source/core/UpdateManager.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/core/UpdateManager.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/core/UpdateManager.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Updater
  * @extends Ext.util.Observable

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/ArrayReader.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/ArrayReader.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/ArrayReader.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.ArrayReader
  * @extends Ext.data.JsonReader
@@ -54,11 +46,22 @@
      * a cache of Ext.data.Records.
      */
     readRecords : function(o){
-        var sid = this.meta ? this.meta.id : null;
+        this.arrayData = o;
+        var s = this.meta;
+        var sid = s ? (s.idIndex || s.id) : null;
     	var recordType = this.recordType, fields = recordType.prototype.fields;
     	var records = [];
-    	var root = o;
-	    for(var i = 0; i < root.length; i++){
+
+        if(!this.getRoot){
+            this.getRoot = s.root ? this.getJsonAccessor(s.root) : function(p){return p;};
+            if(s.totalProperty) {
+                this.getTotal = this.getJsonAccessor(s.totalProperty);
+            }
+        }
+
+        var root = this.getRoot(o);
+
+        for(var i = 0; i < root.length; i++){
 		    var n = root[i];
 	        var values = {};
 	        var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);
@@ -73,9 +76,19 @@
 	        record.json = n;
 	        records[records.length] = record;
 	    }
-	    return {
+
+        var totalRecords = records.length;
+
+        if(s.totalProperty){
+            var v = parseInt(this.getTotal(o), 10);
+            if(!isNaN(v)){
+                totalRecords = v;
+            }
+        }
+
+        return {
 	        records : records,
-	        totalRecords : records.length
+	        totalRecords : totalRecords
 	    };
     }
 });
\ No newline at end of file

Added: mickael/trunk/ext/v3.0.0-a1/source/data/ArrayStore.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/ArrayStore.js	                        (rev 0)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/ArrayStore.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -0,0 +1,41 @@
+/*
+ * Ext JS Library 3.0 Pre-alpha
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@xxxxxxxxx
+ * 
+ * http://extjs.com/license
+ */
+
+/**
+ * @class Ext.data.ArrayStore
+ * @extends Ext.data.Store
+ * Small helper class to make creating Stores from Array data easier.
+ * @cfg {Number} id The array index of the record id. Leave blank to auto generate ids.
+ * @cfg {Array} fields An array of field definition objects, or field name strings.
+ * @cfg {Array} data The multi-dimensional array of data
+ * @constructor
+ * @param {Object} config
+ */
+Ext.data.ArrayStore = Ext.extend(Ext.data.Store, {
+    constructor: function(config){
+        Ext.data.ArrayStore.superclass.constructor.call(this, Ext.apply(config, {
+            reader: new Ext.data.ArrayReader(config)
+        }));
+    },
+
+    loadData : function(data, append){
+        if(this.expandData === true){
+            var r = [];
+            for(var i = 0, len = data.length; i < len; i++){
+                r[r.length] = [data[i]];
+            }
+            data = r;
+        }
+        Ext.data.ArrayStore.superclass.loadData.call(this, data, append);
+    }
+});
+Ext.reg('arraystore', Ext.data.ArrayStore);
+
+// backwards compat
+Ext.data.SimpleStore = Ext.data.ArrayStore;
+Ext.reg('simplestore', Ext.data.SimpleStore);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/Connection.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/Connection.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/Connection.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.Connection
  * @extends Ext.util.Observable
@@ -25,7 +17,7 @@
  * <a href="#request-option-success" ext:member="request-option-success" ext:cls="Ext.data.Connection">success callback</a>
  * in the request options object,
  * or an {@link #requestcomplete event listener}.</p>
- * <p><a href="#request-option-isUpload" ext:member="request-option-isUpload" ext:cls="Ext.data.Connection">File uploads</a> are not performed using normal "Ajax" techniques, that
+ * <p><h3>File Uploads</h3><a href="#request-option-isUpload" ext:member="request-option-isUpload" ext:cls="Ext.data.Connection">File uploads</a> are not performed using normal "Ajax" techniques, that
  * is they are <b>not</b> performed using XMLHttpRequests. Instead the form is submitted in the standard
  * manner with the DOM <tt>&lt;form></tt> element temporarily modified to have its
  * <a href="http://www.w3.org/TR/REC-html40/present/frames.html#adef-target";>target</a> set to refer
@@ -35,6 +27,8 @@
  * server is using JSON to send the return object, then the
  * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17";>Content-Type</a> header
  * must be set to "text/html" in order to tell the browser to insert the text unchanged into the document body.</p>
+ * <p>Characters which are significant to an HTML parser must be sent as HTML entities, so encode
+ * "&lt;" as "&amp;lt;", "&amp;" as "&amp;amp;" etc.</p>
  * <p>The response text is retrieved from the document, and a fake XMLHttpRequest object
  * is created containing a <tt>responseText</tt> property in order to conform to the
  * requirements of event handlers and callbacks.</p>
@@ -166,8 +160,10 @@
      * Defaults to the browser window.</div></li>
      * <li><b>form</b> : Element/HTMLElement/String (Optional)<div class="sub-desc">The <tt>&lt;form&gt;</tt>
      * Element or the id of the <tt>&lt;form&gt;</tt> to pull parameters from.</div></li>
-     * <li><a id="request-option-isUpload"></a><b>isUpload</b> : Boolean (Optional)<div class="sub-desc">True if the form object is a
-     * file upload (will usually be automatically detected).
+     * <li><a id="request-option-isUpload"></a><b>isUpload</b> : Boolean (Optional)<div class="sub-desc"><b>Only meaningful when used 
+     * with the <tt>form</tt> option</b>.
+     * <p>True if the form object is a file upload (will be set automatically if the form was
+     * configured with <b><tt>enctype</tt></b> "multipart/form-data").</p>
      * <p>File uploads are not performed using normal "Ajax" techniques, that is they are <b>not</b>
      * performed using XMLHttpRequests. Instead the form is submitted in the standard manner with the
      * DOM <tt>&lt;form></tt> element temporarily modified to have its

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/DataField.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/DataField.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/DataField.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 // 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.

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/DataProxy.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/DataProxy.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/DataProxy.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.DataProxy
  * @extends Ext.util.Observable

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/DataReader.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/DataReader.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/DataReader.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.DataReader
  * Abstract base class for reading structured data from a data source and converting

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/Direct.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/Direct.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/Direct.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -14,6 +14,14 @@
  * 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;

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/DirectProvider.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/DirectProvider.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/DirectProvider.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,6 +6,14 @@
  * http://extjs.com/license
  */
 
+/*
+ * Ext JS Library 3.0 Pre-alpha
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@xxxxxxxxx
+ * 
+ * http://extjs.com/license
+ */
+
 Ext.data.DirectProvider = Ext.extend(Ext.util.Observable, {
     priority: 1, // lower is higher priority, 0 mens "duplex", aka always on
     constructor : function(config){

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/DirectProxy.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/DirectProxy.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/DirectProxy.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.data.DirectProxy = function(config){
 	Ext.apply(this, config);
     if(typeof this.paramOrder == 'string'){
@@ -27,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 = [];
@@ -40,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/data/DirectStore.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/DirectStore.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/DirectStore.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.data.DirectStore = function(c){
 	var pcfg = Ext.copyTo({}, c, 'paramOrder,paramsAsHash,directFn');
 	Ext.data.DirectStore.superclass.constructor.call(this, Ext.apply(c, {

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/GroupingStore.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/GroupingStore.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/GroupingStore.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,18 +6,12 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.GroupingStore
  * @extends Ext.data.Store
- * A specialized store implementation that provides for grouping records by one of the available fields.
+ * A specialized store implementation that provides for grouping records by one of the available fields. This
+ * is usually used in conjunction with an {@link Ext.grid.GroupingView} to proved the data model for
+ * a grouped GridPanel.
  * @constructor
  * Creates a new GroupingStore.
  * @param {Object} config A config object containing the objects needed for the Store to access data,

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/HttpProxy.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/HttpProxy.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/HttpProxy.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.HttpProxy
  * @extends Ext.data.DataProxy

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/JsonReader.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/JsonReader.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/JsonReader.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.JsonReader
  * @extends Ext.data.DataReader
@@ -45,8 +37,13 @@
 </code></pre>
  * <p>It is possible to change a JsonReader's metadata at any time by including a
  * <b><tt>metaData</tt></b> property in the data object. If this is detected in the
- * object, a {@link Ext.data.Store Store} object using this Reader will fire its
- * {@link Ext.data.Store#metachange metachange} event.</p>
+ * object, a {@link Ext.data.Store Store} object using this Reader will reconfigure
+ * itself to use the newly provided field definition and fire its
+ * {@link Ext.data.Store#metachange metachange} event. In
+ * undergoing this change, the Store sets its {@link Ext.data.Store#sortInfo sortInfo} property
+ * from the <tt>sortInfo</tt> property in the new metadata. Note that reconfiguring a Store
+ * potentially invalidates objects which may refer to Fields or Records which no longer exist.</p>
+ *
  * <p>The <b><tt>metaData</tt></b> property may contain any of the configuration
  * options for this class. Additionally, it may contain a <b><tt>fields</tt></b>
  * property which the JsonReader will use as an argument to {@link Ext.data.Record#create}
@@ -56,6 +53,7 @@
  * event handler may interrogate the <b><tt>metaData</tt></b> property (which
  * may contain any user-defined properties needed) and the <b><tt>metaData.fields</tt></b>
  * property to perform any configuration required.</p>
+ *
  * <p>To use this facility to send the same data as the above example without
  * having to code the creation of the Record constructor, you would create the
  * JsonReader like this:</p><pre><code>

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/JsonStore.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/JsonStore.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/JsonStore.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.JsonStore
  * @extends Ext.data.Store
@@ -44,20 +36,23 @@
  * @cfg {Object} data  A data object readable by this object's JsonReader. Either this
  * option, or the {@link #url} option must be specified.
  * @cfg {Array} fields  Either an Array of field definition objects as passed to
- * {@link Ext.data.Record#create}, or a {@link Ext.data.Record Record} constructor created using {@link Ext.data.Record#create}.
+ * {@link Ext.data.Record#create}, or a {@link Ext.data.Record Record} constructor created using {@link Ext.data.Record#create}.<br>
+ * <p>This config is used to create the <tt>recordType</tt> parameter to the {@link Ext.data.JsonReader#JsonReader JsonReader}
+ * constructor that is implicitly called, and creates the {@link Ext.data.Record Record definition} used by the Store.
  * @constructor
  * @param {Object} config
  */
-Ext.data.JsonStore = function(c){
+Ext.data.JsonStore = Ext.extend(Ext.data.Store, {
+    constructor: function(config){
+        Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(config, {
+            reader: new Ext.data.JsonReader(config)
+        }));
+    }
     /**
      * @cfg {Ext.data.DataReader} reader @hide
      */
     /**
      * @cfg {Ext.data.DataProxy} proxy @hide
      */
-    Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(c, {
-        proxy: c.proxy || (!c.data ? new Ext.data.HttpProxy({url: c.url}) : undefined),
-        reader: new Ext.data.JsonReader(c, c.fields)
-    }));
-};
-Ext.extend(Ext.data.JsonStore, Ext.data.Store);
\ No newline at end of file
+});
+Ext.reg('jsonstore', Ext.data.JsonStore);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/MemoryProxy.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/MemoryProxy.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/MemoryProxy.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.MemoryProxy
  * @extends Ext.data.DataProxy
@@ -44,7 +36,7 @@
      * a block of Ext.data.Records using the passed Ext.data.DataReader implementation, and
      * process that block using the passed callback.
      * @param {Object} params This parameter is not used by the MemoryProxy class.
-     * @param {Ext.data.DataReader) reader The Reader object which converts the data
+     * @param {Ext.data.DataReader} reader The Reader object which converts the data
      * object into a block of Ext.data.Records.
      * @param {Function} callback The function into which to pass the block of Ext.data.records.
      * The function must be passed <ul>

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/Record.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/Record.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/Record.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
 * @class Ext.data.Record
  * Instances of this class encapsulate both Record <em>definition</em> information, and Record
@@ -58,7 +50,8 @@
  * <li>float</li>
  * <li>boolean</li>
  * <li>date</li></ul></div></li>
- * <li><b>sortType</b> : Mixed<div class="sub-desc">(Optional) A member of {@link Ext.data.SortTypes}.</div></li>
+ * <li><b>sortType</b> : Function<div class="sub-desc">(Optional) A function which converts a Field's value to a comparable value
+ * in order to ensure correct sort ordering. Predefined functions are provided in {@link Ext.data.SortTypes}.</div></li>
  * <li><b>sortDir</b> : String<div class="sub-desc">(Optional) Initial direction to sort. "ASC" or "DESC"</div></li>
  * <li><b>convert</b> : Function<div class="sub-desc">(Optional) A function which converts the value provided
  * by the Reader into an object that will be stored in the Record. It is passed the
@@ -70,8 +63,9 @@
  * <li><b>dateFormat</b> : String<div class="sub-desc">(Optional) A format string for the {@link Date#parseDate Date.parseDate} function,
  * or "timestamp" if the value provided by the Reader is a UNIX timestamp, or "time" if the value provided by the Reader is a 
  * javascript millisecond timestamp.</div></li>
- * <li><b>defaultValue</b> : Mixed<div class="sub-desc">(Optional) The default value passed to the Reader when the field does
- * not exist in the data object (i.e. undefined). (defaults to "")</div></li>
+ * <li><b>defaultValue</b> : Mixed<div class="sub-desc">(Optional) The default value used <b>when a Record is being created by a
+ * {@link Ext.data.Reader Reader}</b> when the item referenced by the <b><tt>mapping</tt></b> does not exist in the data object
+ * (i.e. undefined). (defaults to "")</div></li>
  * </ul>
  * The constructor generated by this method may be used to create new Record instances. The data object must contain properties
  * named after the field <b>names</b>. 
@@ -193,7 +187,7 @@
      */
     beginEdit : function(){
         this.editing = true;
-        this.modified = {};
+        this.modified = this.modified || {};
     },
 
     /**

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/ScriptTagProxy.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/ScriptTagProxy.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/ScriptTagProxy.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.ScriptTagProxy
  * @extends Ext.data.DataProxy

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/SimpleStore.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/SimpleStore.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/SimpleStore.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -14,6 +14,14 @@
  * http://extjs.com/license
  */
 
+/*
+ * Ext JS Library 3.0 Pre-alpha
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@xxxxxxxxx
+ * 
+ * http://extjs.com/license
+ */
+
 /**
  * @class Ext.data.SimpleStore
  * @extends Ext.data.Store

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/SortTypes.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/SortTypes.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/SortTypes.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,15 +6,7 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
 
-
 /**
  * @class Ext.data.SortTypes
  * @singleton

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/Store.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/Store.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/Store.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.Store
  * @extends Ext.util.Observable
@@ -41,7 +33,24 @@
      * @property
      */
     this.baseParams = {};
-    // private
+    /**
+     * <p>An object containing properties which specify the names of the paging and
+     * sorting parameters passed to remote servers when loading blocks of data. By default, this
+     * object takes the following form:</p><pre><code>
+{
+    start : "start",    // The parameter name which specifies the start row
+    limit : "limit",    // The parameter name which specifies number of rows to return
+    sort : "sort",      // The parameter name which specifies the column to sort on
+    dir : "dir"         // The parameter name which specifies the sort direction
+}
+</code></pre>
+     * <p>The server must produce the requested data block upon receipt of these parameter names.
+     * If different parameter names are required, this property can be overriden using a configuration
+     * property.</p>
+     * <p>A {@link Ext.PagingToolbar PagingToolbar} bound to this grid uses this property to determine
+     * the parameter names to use in its requests.
+     * @property
+     */
     this.paramNames = {
         "start" : "start",
         "limit" : "limit",
@@ -77,8 +86,8 @@
     this.addEvents(
         /**
          * @event datachanged
-         * Fires when the data cache has changed, and a widget which is using this Store
-         * as a Record cache should refresh its view.
+         * Fires when the data cache has changed in a bulk manner (e.g., it has been sorted, filtered, etc.) and a 
+         * widget that is using this Store as a Record cache should refresh its view.
          * @param {Store} this
          */
         'datachanged',
@@ -153,7 +162,9 @@
     }
 
     this.sortToggle = {};
-	if(this.sortInfo){
+    if(this.sortField){
+        this.setDefaultSort(this.sortField, this.sortDir);
+    }else if(this.sortInfo){
 		this.setDefaultSort(this.sortInfo.field, this.sortInfo.direction);
 	}
 
@@ -196,8 +207,9 @@
     * on any HTTP request
     */
     /**
-    * @cfg {Object} sortInfo A config object in the format: {field: "fieldName", direction: "ASC|DESC"}.  The direction
-    * property is case-sensitive.
+    * @cfg {Object} sortInfo A config object in the format: {field: "fieldName", direction: "ASC|DESC"} to 
+    * specify the sort order in the request of a remote Store's {@link #load} operation.  Note that for
+    * local sorting, the direction property is case-sensitive.
     */
     /**
     * @cfg {boolean} remoteSort True if sorting is to be handled by requesting the
@@ -402,9 +414,12 @@
     },
 
     /**
-     * Reloads the Record cache from the configured Proxy using the configured Reader and
-     * the options from the last load operation performed.
-     * @param {Object} options (optional) An object containing properties which may override the options
+     * <p>Reloads the Record cache from the configured Proxy using the configured Reader and
+     * the options from the last load operation performed.</p>
+     * <p><b>It is important to note that for remote data sources, loading is asynchronous,
+     * and this call will return before the new data has been loaded. Perform any post-processing
+     * in a callback function, or in a "load" event handler.</b></p>
+     * @param {Object} options (optional) An object containing loading options which may override the options
      * used in the last load operation. See {@link #load} for details (defaults to null, in which case
      * the most recently used options are reused).
      */
@@ -824,4 +839,6 @@
         this.baseParams = this.baseParams || {};
         this.baseParams[name] = value;
     }
-});
\ No newline at end of file
+});
+
+Ext.reg('store', Ext.data.Store);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/StoreMgr.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/StoreMgr.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/StoreMgr.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.StoreMgr
  * @extends Ext.util.MixedCollection
@@ -56,7 +48,7 @@
      * @return {Ext.data.Store}
      */
     lookup : function(id){
-        return typeof id == "object" ? id : this.get(id);
+        return typeof id == "object" ? (id.events ? id : Ext.create(id, 'store')) : this.get(id);
     },
 
     // getKey implementation for MixedCollection

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/Tree.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/Tree.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/Tree.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.Tree
  * @extends Ext.util.Observable

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/XmlReader.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/XmlReader.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/XmlReader.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.data.XmlReader
  * @extends Ext.data.DataReader
@@ -58,7 +50,7 @@
  * paged from the remote server.
  * @cfg {String} record The DomQuery path to the repeated element which contains record information.
  * @cfg {String} success The DomQuery path to the success attribute used by forms.
- * @cfg {String} id The DomQuery path relative from the record element to the element that contains
+ * @cfg {String} idPath The DomQuery path relative from the record element to the element that contains
  * a record identifier value.
  * @constructor
  * Create a new XmlReader.
@@ -101,7 +93,7 @@
         var root = doc.documentElement || doc;
     	var q = Ext.DomQuery;
     	var recordType = this.recordType, fields = recordType.prototype.fields;
-    	var sid = this.meta.id;
+    	var sid = this.meta.idPath || this.meta.id;
     	var totalRecords = 0, success = true;
     	if(this.meta.totalRecords){
     	    totalRecords = q.selectNumber(this.meta.totalRecords, root, 0);

Modified: mickael/trunk/ext/v3.0.0-a1/source/data/XmlStore.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/data/XmlStore.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/data/XmlStore.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,18 +6,17 @@
  * http://extjs.com/license
  */
 
-Ext.data.XmlStore = function(c){
+Ext.data.XmlStore = Ext.extend(Ext.data.Store, {
+    constructor: function(config){
+        Ext.data.XmlStore.superclass.constructor.call(this, Ext.apply(config, {
+            reader: new Ext.data.XmlReader(config)
+        }));
+    }
     /**
      * @cfg {Ext.data.DataReader} reader @hide
      */
     /**
      * @cfg {Ext.data.DataProxy} proxy @hide
      */
-    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);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/source/dd/DDCore.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/dd/DDCore.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/dd/DDCore.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * These classes are derivatives of the similarly named classes in the YUI Library.
  * The original license:
@@ -192,6 +184,14 @@
     lock: function() { this.locked = true; },
 
     /**
+     * When set to true, other DD objects in cooperating DDGroups do not receive
+     * notification events when this DD object is dragged over them. Defaults to false.
+     * @property moveOnly
+     * @type boolean
+     */
+    moveOnly: false,
+
+    /**
      * Unlock this instace
      * @method unlock
      */
@@ -1520,7 +1520,7 @@
          */
         _remove: function(oDD) {
             for (var g in oDD.groups) {
-                if (g && this.ids[g][oDD.id]) {
+                if (g && this.ids[g] && this.ids[g][oDD.id]) {
                     delete this.ids[g][oDD.id];
                 }
             }
@@ -1661,8 +1661,13 @@
             if(Ext.QuickTips){
                 Ext.QuickTips.disable();
             }
+            if(this.dragCurrent){
+                // the original browser mouseup wasn't handled (e.g. outside FF browser window)
+                // so clean up first to avoid breaking the next drag
+                this.handleMouseUp(e);
+            }
+            
             this.currentTarget = e.getTarget();
-
             this.dragCurrent = oDD;
 
             var el = oDD.getEl();
@@ -1788,7 +1793,6 @@
             if (! this.dragCurrent) {
                 return true;
             }
-
             // var button = e.which || e.button;
 
             // check for IE mouseup outside of page boundary

Modified: mickael/trunk/ext/v3.0.0-a1/source/dd/DragSource.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/dd/DragSource.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/dd/DragSource.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.dd.DragSource
  * @extends Ext.dd.DDProxy

Modified: mickael/trunk/ext/v3.0.0-a1/source/dd/DragTracker.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/dd/DragTracker.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/dd/DragTracker.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.dd.DragTracker = function(config){
     Ext.apply(this, config);
     this.addEvents(
@@ -51,7 +43,9 @@
         if(this.fireEvent('mousedown', this, e) !== false && this.onBeforeStart(e) !== false){
             this.startXY = this.lastXY = e.getXY();
             this.dragTarget = this.delegate ? target : this.el.dom;
-            e.preventDefault();
+            if(this.preventDefault !== false){
+                e.preventDefault();
+            }
             var doc = Ext.getDoc();
             doc.on('mouseup', this.onMouseUp, this);
             doc.on('mousemove', this.onMouseMove, this);
@@ -85,11 +79,14 @@
         doc.un('selectstart', this.stopSelect, this);
         e.preventDefault();
         this.clearStart();
+        var wasActive = this.active;
         this.active = false;
         delete this.elRegion;
         this.fireEvent('mouseup', this, e);
-        this.onEnd(e);
-        this.fireEvent('dragend', this, e);
+        if(wasActive){
+            this.onEnd(e);
+            this.fireEvent('dragend', this, e);
+        }
     },
 
     triggerStart: function(isTimer){

Modified: mickael/trunk/ext/v3.0.0-a1/source/dd/DragZone.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/dd/DragZone.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/dd/DragZone.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.dd.DragZone
  * @extends Ext.dd.DragSource

Modified: mickael/trunk/ext/v3.0.0-a1/source/dd/DropTarget.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/dd/DropTarget.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/dd/DropTarget.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.dd.DropTarget
  * @extends Ext.dd.DDTarget

Modified: mickael/trunk/ext/v3.0.0-a1/source/dd/DropZone.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/dd/DropZone.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/dd/DropZone.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.dd.DropZone
  * @extends Ext.dd.DropTarget

Modified: mickael/trunk/ext/v3.0.0-a1/source/dd/Registry.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/dd/Registry.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/dd/Registry.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.dd.Registry
  * Provides easy access to all drag drop components that are registered on a page.  Items can be retrieved either

Modified: mickael/trunk/ext/v3.0.0-a1/source/dd/ScrollManager.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/dd/ScrollManager.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/dd/ScrollManager.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.dd.ScrollManager
  * <p>Provides automatic scrolling of overflow regions in the page during drag operations.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/source/dd/StatusProxy.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/dd/StatusProxy.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/dd/StatusProxy.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.dd.StatusProxy
  * A specialized drag proxy that supports a drop status icon, {@link Ext.Layer} styles and auto-repair.  This is the

Modified: mickael/trunk/ext/v3.0.0-a1/source/debug.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/debug.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/debug.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.debug = {};
 
 (function(){

Modified: mickael/trunk/ext/v3.0.0-a1/source/ext.jsb
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/ext.jsb	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/ext.jsb	2008-12-03 04:14:23 UTC (rev 36)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<project path="" name="Ext - JS Lib" author="Ext JS, LLC" version="3.0 Pre-alpha" copyright="Ext JS Library $version&#xD;&#xA;Copyright(c) 2006-2008, $author.&#xD;&#xA;licensing@xxxxxxxxx&#xD;&#xA;&#xD;&#xA;http://extjs.com/license"; output="C:\apps\www\deploy\ext-3.0-dev\" source="True" source-dir="$output\source" minify="True" min-dir="$output\build" doc="True" doc-dir="$output\ExtJSdocs" min-dair="$output\build">
+<project path="" name="Ext - JS Lib" author="Ext JS, LLC" version="3.0 Pre-alpha" copyright="Ext JS Library $version&#xD;&#xA;Copyright(c) 2006-2008, $author.&#xD;&#xA;licensing@xxxxxxxxx&#xD;&#xA;&#xD;&#xA;http://extjs.com/license"; output="C:\apps\www\deploy\ext-3.0-dev\" source="True" source-dir="$output\source" minify="True" min-dir="$output\build" doc="False" doc-dir="$output\docs" min-dair="$output\build">
   <directory name="" />
   <target name="Core" file="$output\ext-core.js" debug="True" shorthand="False" shorthand-list="YAHOO.util.Dom.setStyle&#xD;&#xA;YAHOO.util.Dom.getStyle&#xD;&#xA;YAHOO.util.Dom.getRegion&#xD;&#xA;YAHOO.util.Dom.getViewportHeight&#xD;&#xA;YAHOO.util.Dom.getViewportWidth&#xD;&#xA;YAHOO.util.Dom.get&#xD;&#xA;YAHOO.util.Dom.getXY&#xD;&#xA;YAHOO.util.Dom.setXY&#xD;&#xA;YAHOO.util.CustomEvent&#xD;&#xA;YAHOO.util.Event.addListener&#xD;&#xA;YAHOO.util.Event.getEvent&#xD;&#xA;YAHOO.util.Event.getTarget&#xD;&#xA;YAHOO.util.Event.preventDefault&#xD;&#xA;YAHOO.util.Event.stopEvent&#xD;&#xA;YAHOO.util.Event.stopPropagation&#xD;&#xA;YAHOO.util.Event.stopEvent&#xD;&#xA;YAHOO.util.Anim&#xD;&#xA;YAHOO.util.Motion&#xD;&#xA;YAHOO.util.Connect.asyncRequest&#xD;&#xA;YAHOO.util.Connect.setForm&#xD;&#xA;YAHOO.util.Dom&#xD;&#xA;YAHOO.util.Event">
     <include name="core\DomHelper.js" />
@@ -29,12 +29,12 @@
     <include name="core\Fx.js" />
     <include name="core\CompositeElement.js" />
     <include name="data\Connection.js" />
-    <include name="data\Direct.js" />
     <include name="core\UpdateManager.js" />
     <include name="util\Date.js" />
     <include name="util\DelayedTask.js" />
     <include name="util\TaskMgr.js" />
     <include name="util\MixedCollection.js" />
+    <include name="widgets\ComponentMgr.js" />
     <include name="util\JSON.js" />
     <include name="util\Format.js" />
     <include name="util\XTemplate.js" />
@@ -56,22 +56,29 @@
     <include name="data\Record.js" />
     <include name="data\StoreMgr.js" />
     <include name="data\Store.js" />
-    <include name="data\SimpleStore.js" />
     <include name="data\JsonStore.js" />
-    <include name="data\DirectStore.js" />
+    <include name="data\XmlStore.js" />
+    <include name="data\ArrayStore.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\ComponentMgr.js" />
     <include name="widgets\Component.js" />
     <include name="widgets\Action.js" />
     <include name="widgets\Layer.js" />
@@ -90,6 +97,7 @@
     <include name="widgets\layout\TableLayout.js" />
     <include name="widgets\layout\AbsoluteLayout.js" />
     <include name="widgets\Viewport.js" />
+    <include name="widgets\layout\BoxLayout.js" />
     <include name="widgets\Panel.js" />
     <include name="widgets\Window.js" />
     <include name="widgets\WindowManager.js" />
@@ -146,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" />
@@ -547,9 +556,12 @@
   <file name="legacy\MasterTemplate.js" path="legacy" />
   <file name="legacy\View.js" path="legacy" />
   <file name="widgets\chart\FlashPanel.js" path="widgets\chart" />
+  <file name="widgets\ListView.js" path="widgets" />
   <file name="ext.jsb" path="" />
   <file name="license.txt" path="" />
-  <file name="widgets\ListView.js" path="widgets" />
+  <file name="data\Direct.js" path="data" />
+  <file name="data\DirectProvider.js" path="data" />
+  <file name="data\SimpleStore.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" />
@@ -570,11 +582,11 @@
   <file name="core\Template.js" path="core" />
   <file name="core\UpdateManager.js" path="core" />
   <file name="data\ArrayReader.js" path="data" />
+  <file name="data\ArrayStore.js" path="data" />
   <file name="data\Connection.js" path="data" />
   <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\DirectProxy.js" path="data" />
   <file name="data\DirectStore.js" path="data" />
   <file name="data\GroupingStore.js" path="data" />
@@ -584,12 +596,12 @@
   <file name="data\MemoryProxy.js" path="data" />
   <file name="data\Record.js" path="data" />
   <file name="data\ScriptTagProxy.js" path="data" />
-  <file name="data\SimpleStore.js" path="data" />
   <file name="data\SortTypes.js" path="data" />
   <file name="data\Store.js" path="data" />
   <file name="data\StoreMgr.js" path="data" />
   <file name="data\Tree.js" path="data" />
   <file name="data\XmlReader.js" path="data" />
+  <file name="data\XmlStore.js" path="data" />
   <file name="dd\DDCore.js" path="dd" />
   <file name="dd\DragSource.js" path="dd" />
   <file name="dd\DragTracker.js" path="dd" />
@@ -599,6 +611,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" />
@@ -607,9 +626,10 @@
   <file name="locale\ext-lang-de.js" path="locale" />
   <file name="locale\ext-lang-el_GR.js" path="locale" />
   <file name="locale\ext-lang-en.js" path="locale" />
-  <file name="locale\ext-lang-en_UK.js" path="locale" />
+  <file name="locale\ext-lang-en_GB.js" path="locale" />
   <file name="locale\ext-lang-es.js" path="locale" />
   <file name="locale\ext-lang-fa.js" path="locale" />
+  <file name="locale\ext-lang-fi.js" path="locale" />
   <file name="locale\ext-lang-fr.js" path="locale" />
   <file name="locale\ext-lang-fr_CA.js" path="locale" />
   <file name="locale\ext-lang-gr.js" path="locale" />
@@ -629,6 +649,7 @@
   <file name="locale\ext-lang-pl.js" path="locale" />
   <file name="locale\ext-lang-pt.js" path="locale" />
   <file name="locale\ext-lang-pt_BR.js" path="locale" />
+  <file name="locale\ext-lang-pt_PT.js" path="locale" />
   <file name="locale\ext-lang-ro.js" path="locale" />
   <file name="locale\ext-lang-ru.js" path="locale" />
   <file name="locale\ext-lang-sk.js" path="locale" />
@@ -670,6 +691,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" />
@@ -704,6 +726,7 @@
   <file name="widgets\layout\AccordionLayout.js" path="widgets\layout" />
   <file name="widgets\layout\AnchorLayout.js" path="widgets\layout" />
   <file name="widgets\layout\BorderLayout.js" path="widgets\layout" />
+  <file name="widgets\layout\BoxLayout.js" path="widgets\layout" />
   <file name="widgets\layout\CardLayout.js" path="widgets\layout" />
   <file name="widgets\layout\ColumnLayout.js" path="widgets\layout" />
   <file name="widgets\layout\ContainerLayout.js" path="widgets\layout" />

Modified: mickael/trunk/ext/v3.0.0-a1/source/license.txt
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/license.txt	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/license.txt	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,27 +7,31 @@
 
 Open Source License
 ------------------------------------------------------------------------------------------
-Ext is licensed under the terms of the Open Source GPL 3.0 license. You may wish to use
-our open source license if you:
- * Want to use Ext in an open source project that is compatible with the GPL
- * Plan to use Ext in a personal, educational or non-profit manner
+Ext is licensed under the terms of the Open Source GPL 3.0 license. 
 
 http://www.gnu.org/licenses/gpl.html
 
+There are several FLOSS exceptions available for use with this release for
+open source applications that are distributed under a license other than the GPL.
 
+* Open Source License Exception for Applications
+
+  http://extjs.com/products/floss-exception.php
+
+* Open Source License Exception for Development
+
+  http://extjs.com/products/ux-exception.php
+
+
 Commercial License
 ------------------------------------------------------------------------------------------
-If you are using this library for commercial purposes, we encourage you to purchase
-a commercial license. Please visit http://extjs.com/license for more details.
+This is the appropriate option if you are creating proprietary applications and you are 
+not prepared to distribute and share the source code of your application under the 
+GPL v3 license. Please visit http://extjs.com/license for more details.
 
 
 OEM / Reseller License
 ------------------------------------------------------------------------------------------
-If you plan to distribute Ext in a product that will be packaged or sold as a software
-development library, toolkit or plug-in-based framework ("LIBRARY"), we require that you
-work with us to establish a specific license that is appropriate. Use of the open source
-license in a LIBRARY is not permitted without explicit permission from Ext JS, LLC.
-
 For more details, please visit: http://extjs.com/license.
 
 --
@@ -35,4 +39,4 @@
 This library is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Lesser General Public License for more details.
\ No newline at end of file
+General Public License for more details.
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-af.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-af.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-af.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * List compiled by mystix on the extjs.com forums.
  * Thank you Mystix!

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-bg.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-bg.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-bg.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Bulgarian Translation
  *

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ca.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ca.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ca.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Catalonian Translation by halkon_polako 6-12-2007
  * December correction halkon_polako 11-12-2007

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-cs.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-cs.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-cs.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Czech Translations
  * Translated by Tomáš Korčák (72)

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-da.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-da.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-da.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Danish translation
  * By JohnF

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-de.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-de.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-de.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * German translation
  * By schmidetzki and humpdi

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-el_GR.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-el_GR.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-el_GR.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Ext JS Library 2.1
  * Copyright(c) 2006-2008, Ext JS, LLC.

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-en.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-en.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-en.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * List compiled by mystix on the extjs.com forums.
  * Thank you Mystix!

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-en_UK.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-en_UK.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-en_UK.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -22,6 +22,14 @@
  * http://extjs.com/license
  */
 
+/*
+ * Ext JS Library 3.0 Pre-alpha
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@xxxxxxxxx
+ * 
+ * http://extjs.com/license
+ */
+
 /**
  * List compiled by mystix on the extjs.com forums.
  * Thank you Mystix!

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-es.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-es.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-es.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Spanish/Latin American Translation by genius551v 04-08-2007
  * Revised by efege, 2007-04-15.

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fa.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fa.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fa.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Farsi (Persian) translation
  * By Mohaqa

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fr.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fr.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fr.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,38 +6,23 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * France (France) translation
  * By Thylia
  * 09-11-2007, 02:22 PM
+ * updated to 2.2 by disizben (22 Sep 2008)
  */
 
 Ext.UpdateManager.defaults.indicatorText = '<div class="loading-indicator">En cours de chargement...</div>';
 
-if(Ext.View){
-   Ext.View.prototype.emptyText = "";
+if(Ext.DataView){
+   Ext.DataView.prototype.emptyText = "";
 }
 
 if(Ext.grid.GridPanel){
-   Ext.grid.GridPanel.prototype.ddText = "{0} ligne(s) sélectionnée(s)";
+   Ext.grid.GridPanel.prototype.ddText = "{0} ligne{1} sélectionnée{1}";
 }
 
-if(Ext.TabPanelItem){
-   Ext.TabPanelItem.prototype.closeText = "Fermer cet onglet";
-}
-
-if(Ext.form.Field){
-   Ext.form.Field.prototype.invalidText = "La valeur de ce champ est invalide";
-}
-
 if(Ext.LoadMask){
     Ext.LoadMask.prototype.msg = "En cours de chargement...";
 }
@@ -109,6 +94,14 @@
   return Date.dayNames[day].substring(0, 3);
 };
 
+Date.parseCodes.S.s = "(?:er)";
+
+Ext.override(Date, {
+	getSuffix : function() {
+		return (this.getDate() == 1) ? "er" : "";
+	}
+});
+
 if(Ext.MessageBox){
    Ext.MessageBox.buttonText = {
       ok     : "OK",
@@ -160,6 +153,10 @@
    });
 }
 
+if(Ext.form.Field){
+   Ext.form.Field.prototype.invalidText = "La valeur de ce champ est invalide";
+}
+
 if(Ext.form.TextField){
    Ext.apply(Ext.form.TextField.prototype, {
       minLengthText : "La longueur minimum de ce champ est de {0} caractères",
@@ -172,6 +169,8 @@
 
 if(Ext.form.NumberField){
    Ext.apply(Ext.form.NumberField.prototype, {
+      decimalSeparator : ",",
+      decimalPrecision : 2,
       minText : "La valeur minimum de ce champ doit être de {0}",
       maxText : "La valeur maximum de ce champ doit être de {0}",
       nanText : "{0} n'est pas un nombre valide"
@@ -284,38 +283,10 @@
    });
 }
 
-if(Ext.form.TimeField){
-   Ext.apply(Ext.form.TimeField.prototype, {
-      minText     : "L'heure de ce champ ne peut être antérieure au {0}",
-      maxText     : "L'heure de ce champ ne peut être postérieure au {0}",
-      invalidText : "{0} n'est pas une heure valide",
-      format      : "H:i",
-      altFormats  : "g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|h a|g a|g A|gi|hi|Hi|gia|hia|g|H"
-   });
-}
-
-if(Ext.form.CheckboxGroup){
-   Ext.apply(Ext.form.TextField.prototype, {
-      blankText : "Vous devez sélectionner au moins un item du groupe"
-   });
-}
-
-if(Ext.form.RadioGroup){
-   Ext.apply(Ext.form.RadioGroup.prototype, {
-      blankText : "Vous devez sélectionner un choix"
-   });
-}
-
-if(Ext.form.BasicForm){
-   Ext.form.BasicForm.prototype.waitTitle = "Veuillez patienter...";
-}
-
 if(Ext.grid.GridView){
    Ext.apply(Ext.grid.GridView.prototype, {
       sortAscText  : "Tri croissant",
       sortDescText : "Tri décroissant",
-      lockText     : "Verrouiller la colonne",
-      unlockText   : "Déverrouiller la colonne",
       columnsText  : "Colonnes"
    });
 }
@@ -342,3 +313,25 @@
       collapsibleSplitTip : "Cliquer et glisser pour redimensionner le panneau. Double-cliquer pour le cacher."
    });
 }
+
+if(Ext.form.TimeField){
+   Ext.apply(Ext.form.TimeField.prototype, {
+      minText     : "L'heure de ce champ ne peut être antérieure à {0}",
+      maxText     : "L'heure de ce champ ne peut être postérieure à {0}",
+      invalidText : "{0} n'est pas une heure valide",
+      format      : "H:i",
+      altFormats  : "g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|h a|g a|g A|gi|hi|Hi|gia|hia|g|H"
+   });
+}
+
+if(Ext.form.CheckboxGroup){
+  Ext.apply(Ext.form.CheckboxGroup.prototype, {
+    blankText : "Vous devez sélectionner au moins un élément dans ce groupe"
+  });
+}
+
+if(Ext.form.RadioGroup){
+  Ext.apply(Ext.form.RadioGroup.prototype, {
+    blankText : "Vous devez sélectionner au moins un élément dans ce groupe"
+  });
+}

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fr_CA.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fr_CA.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-fr_CA.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * France (Canadian) translation
  * By BernardChhun

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-gr.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-gr.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-gr.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Greek (Old Version) Translations by Vagelis
  * 03-June-2007

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-he.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-he.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-he.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Hebrew Translations
  * By spartacus (from forums) 06-12-2007

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-hr.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-hr.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-hr.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -7,14 +7,6 @@
  */
 
 /*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
-/*
  * Ext JS Library 2.1
  * Copyright(c) 2006-2008, Ext JS, LLC.
  * licensing@xxxxxxxxx

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-hu.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-hu.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-hu.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Ext JS Library 2.1
  * Copyright(c) 2006-2008, Ext JS, LLC.

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-id.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-id.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-id.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Pedoman translasi:
  * http://id.wikisource.org/wiki/Panduan_Pembakuan_Istilah,_Pelaksanaan_Instruksi_Presiden_Nomor_2_Tahun_2001_Tentang_Penggunaan_Komputer_Dengan_Aplikasi_Komputer_Berbahasa_Indonesia

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-it.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-it.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-it.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Italian translation
  * By eric_void

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ja.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ja.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ja.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Japanese translation
  * By tyama

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ko.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ko.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ko.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Korean Translations By nicetip
  * 05 September 2007

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-lt.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-lt.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-lt.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Lithuanian Translations (UTF-8)
  * By Vladas Saulis, October 18, 2007

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-lv.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-lv.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-lv.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Latvian Translations
  * By salix 17 April 2007

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-mk.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-mk.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-mk.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Macedonia translation
  * By PetarD petar.dimitrijevic@xxxxxxxxxxxxxxxx (utf8 encoding)

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-nl.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-nl.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-nl.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * List compiled by mystix on the extjs.com forums.
  * Thank you Mystix!

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-no_NB.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-no_NB.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-no_NB.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  *
  * Norwegian translation (Bokmål: no-NB)

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-no_NN.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-no_NN.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-no_NN.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  *
  * Norwegian translation (Nynorsk: no-NN)

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pl.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pl.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pl.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Polish Translations
  * By vbert 17-April-2007

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Portuguese/Brazil Translation by Weber Souza
  * 08 April 2007

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt_BR.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt_BR.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt_BR.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Ext JS Library 2.1
  * Copyright(c) 2006-2008, Ext JS, LLC.

Added: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt_PT.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt_PT.js	                        (rev 0)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-pt_PT.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -0,0 +1,300 @@
+/*
+ * Ext JS Library 3.0 Pre-alpha
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@xxxxxxxxx
+ * 
+ * http://extjs.com/license
+ */
+
+/**
+ * Ext 2.2.0 - Portuguese/Portugal (pt_PT) Translation
+ * by Nuno Franco da Costa - francodacosta.com
+ * translated from ext-lang-en.js
+ * 11 Nov 2008
+ */
+
+Ext.UpdateManager.defaults.indicatorText = '<div class="loading-indicator">A carregar...</div>';
+
+if(Ext.View){
+  Ext.View.prototype.emptyText = "";
+}
+
+if(Ext.grid.GridPanel){
+  Ext.grid.GridPanel.prototype.ddText = "{0} linha(s) seleccionada(s)";
+}
+
+if(Ext.TabPanelItem){
+  Ext.TabPanelItem.prototype.closeText = "Fechar aba";
+}
+
+if(Ext.LoadMask){
+  Ext.LoadMask.prototype.msg = "A carregar...";
+}
+
+Date.monthNames = [
+  "Janeiro",
+  "Fevereiro",
+  "Mar&ccedil;o",
+  "Abril",
+  "Maio",
+  "Junho",
+  "Julho",
+  "Agosto",
+  "Setembro",
+  "Outubro",
+  "Novembro",
+  "Dezembro"
+];
+
+Date.getShortMonthName = function(month) {
+  return Date.monthNames[month].substring(0, 3);
+};
+
+Date.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
+};
+
+Date.getMonthNumber = function(name) {
+  return Date.monthNumbers[name.substring(0, 1).toUpperCase() + name.substring(1, 3).toLowerCase()];
+};
+
+Date.dayNames = [
+  "Domingo",
+  "Segunda",
+  "Ter&ccedil;a",
+  "Quarta",
+  "Quinta",
+  "Sexta",
+  "Sabado"
+];
+
+Date.getShortDayName = function(day) {
+  return Date.dayNames[day].substring(0, 3);
+};
+
+if(Ext.MessageBox){
+  Ext.MessageBox.buttonText = {
+    ok     : "OK",
+    cancel : "Cancelar",
+    yes    : "Sim",
+    no     : "N&atilde;o"
+  };
+}
+
+if(Ext.util.Format){
+  Ext.util.Format.date = function(v, format){
+    if(!v) return "";
+    if(!(v instanceof Date)) v = new Date(Date.parse(v));
+    return v.dateFormat(format || "Y/m/d");
+  };
+}
+
+if(Ext.DatePicker){
+  Ext.apply(Ext.DatePicker.prototype, {
+    todayText         : "Hoje",
+    minText           : "A data &eacute; anterior ao m&iacute;nimo definido",
+    maxText           : "A data &eacute; posterior ao m�ximo definido",
+    disabledDaysText  : "",
+    disabledDatesText : "",
+    monthNames        : Date.monthNames,
+    dayNames          : Date.dayNames,
+    nextText          : 'M&ecirc;s Seguinte (Control+Right)',
+    prevText          : 'M&ecirc;s Anterior (Control+Left)',
+    monthYearText     : 'Escolha um m&ecirc;s (Control+Up/Down ava&ccedil;ar/recuar anos)',
+    todayTip          : "{0} (barra de espa�o)",
+    format            : "y/m/d",
+    okText            : "*OK*",
+    cancelText        : "Cancelar",
+    startDay          : 0
+  });
+}
+
+if(Ext.PagingToolbar){
+  Ext.apply(Ext.PagingToolbar.prototype, {
+    beforePageText : "P&aacute;gina",
+    afterPageText  : "de {0}",
+    firstText      : "Primeira P&aacute;gina",
+    prevText       : "P&aacute;gina Anterior",
+    nextText       : "Pr%oacute;xima P&aacute;gina",
+    lastText       : "&Uacute;ltima P&aacute;gina",
+    refreshText    : "Recaregar",
+    displayMsg     : "A mostrar {0} - {1} de {2}",
+    emptyMsg       : 'Sem dados para mostrar'
+  });
+}
+
+if(Ext.form.Field){
+  Ext.form.Field.prototype.invalidText = "O valor deste campo &eacute; inv&aacute;lido";
+}
+
+if(Ext.form.TextField){
+  Ext.apply(Ext.form.TextField.prototype, {
+    minLengthText : "O comprimento m&iacute;nimo deste campo &eaute; {0}",
+    maxLengthText : "O comprimento m&aacute;ximo deste campo &eaute; {0}",
+    blankText     : "Este campo &eacute; de preenchimento obrigat&oacute;rio",
+    regexText     : "",
+    emptyText     : null
+  });
+}
+
+if(Ext.form.NumberField){
+  Ext.apply(Ext.form.NumberField.prototype, {
+    minText : "O valor m&iacute;nimo deste campo &eaute; {0}",
+    maxText : "O valor m&aacute;ximo deste campo &eaute; {0}",
+    nanText : "{0} n&atilde;o &eacute; um numero"
+  });
+}
+
+if(Ext.form.DateField){
+  Ext.apply(Ext.form.DateField.prototype, {
+    disabledDaysText  : "Desabilitado",
+    disabledDatesText : "Desabilitado",
+    minText           : "A data deste campo deve ser posterior a {0}",
+    maxText           : "A data deste campo deve ser anterior a {0}",
+    invalidText       : "{0} n&atilde;o &eacute; uma data v&aacute;lida - deve estar no seguinte formato{1}",
+    format            : "y/m/d",
+    altFormats        : "m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d"
+  });
+}
+
+if(Ext.form.ComboBox){
+  Ext.apply(Ext.form.ComboBox.prototype, {
+    loadingText       : "A Carregar...",
+    valueNotFoundText : undefined
+  });
+}
+
+if(Ext.form.VTypes){
+  Ext.apply(Ext.form.VTypes, {
+    emailText    : 'Este campo deve ser um endere&ccedil;o de email no formato "utilizaor@xxxxxxxxxxx"',
+    urlText      : 'Este campo deve ser um URL no formato "http:/'+'/www.dominio.com"',
+    alphaText    : 'Este campo deve conter apenas letras e _',
+    alphanumText : 'Este campo deve conter apenas letras, numeros e _'
+  });
+}
+
+if(Ext.form.HtmlEditor){
+  Ext.apply(Ext.form.HtmlEditor.prototype, {
+    createLinkText : 'Indique o endere&ccedil;o do link:',
+    buttonTips : {
+      bold : {
+        title: 'Negrito (Ctrl+B)',
+        text: 'Transforma o texto em Negrito.',
+        cls: 'x-html-editor-tip'
+      },
+      italic : {
+        title: 'Italico (Ctrl+I)',
+        text: 'Transforma o texto em italico.',
+        cls: 'x-html-editor-tip'
+      },
+      underline : {
+        title: 'SUblinhar (Ctrl+U)',
+        text: 'Sublinha o texto.',
+        cls: 'x-html-editor-tip'
+      },
+      increasefontsize : {
+        title: 'Aumentar texto',
+        text: 'Aumenta o tamanho da fonte.',
+        cls: 'x-html-editor-tip'
+      },
+      decreasefontsize : {
+        title: 'Encolher texto',
+        text: 'Diminui o tamanho da fonte.',
+        cls: 'x-html-editor-tip'
+      },
+      backcolor : {
+        title: 'C&ocirc;r de fundo do texto',
+        text: 'Altera a c&ocirc;r de fundo do texto.',
+        cls: 'x-html-editor-tip'
+      },
+      forecolor : {
+        title: 'C&ocirc;r do texo',
+        text: 'Altera a a&ocirc;r do texo.',
+        cls: 'x-html-editor-tip'
+      },
+      justifyleft : {
+        title: 'ALinhar &agrave; esquerda',
+        text: 'ALinha o texto &agrave; esquerda.',
+        cls: 'x-html-editor-tip'
+      },
+      justifycenter : {
+        title: 'Centrar',
+        text: 'Centra o texto.',
+        cls: 'x-html-editor-tip'
+      },
+      justifyright : {
+        title: 'ALinhar &agrave; direita',
+        text: 'ALinha o texto &agravce; direita.',
+        cls: 'x-html-editor-tip'
+      },
+      insertunorderedlist : {
+        title: 'Lista',
+        text: 'Inicia uma lista.',
+        cls: 'x-html-editor-tip'
+      },
+      insertorderedlist : {
+        title: 'Lista Numerada',
+        text: 'Inicia uma lista numerada.',
+        cls: 'x-html-editor-tip'
+      },
+      createlink : {
+        title: 'Hyperlink',
+        text: 'Transforma o texto num hyperlink.',
+        cls: 'x-html-editor-tip'
+      },
+      sourceedit : {
+        title: 'Editar c&oacute;digo',
+        text: 'Alterar para o modo de edi&ccedil;&atilde;o de c&oacute;digo.',
+        cls: 'x-html-editor-tip'
+      }
+    }
+  });
+}
+
+if(Ext.form.BasicForm){
+  Ext.form.BasicForm.prototype.waitTitle = "Por favor espere...";
+}
+
+if(Ext.grid.GridView){
+  Ext.apply(Ext.grid.GridView.prototype, {
+    sortAscText  : "Ordena&ccedil;&atilde;o Crescente",
+    sortDescText : "Ordena&ccedil;&atilde;o Decrescente",
+    lockText     : "Fixar Coluna",
+    unlockText   : "Libertar Coluna",
+    columnsText  : "Colunas"
+  });
+}
+
+if(Ext.grid.GroupingView){
+  Ext.apply(Ext.grid.GroupingView.prototype, {
+    emptyGroupText : '(Nenhum)',
+    groupByText    : 'Agrupar por este campo',
+    showGroupsText : 'Mostrar nos Grupos'
+  });
+}
+
+if(Ext.grid.PropertyColumnModel){
+  Ext.apply(Ext.grid.PropertyColumnModel.prototype, {
+    nameText   : "Nome",
+    valueText  : "Valor",
+    dateFormat : "Y/j/m"
+  });
+}
+
+if(Ext.layout.BorderLayout && Ext.layout.BorderLayout.SplitRegion){
+  Ext.apply(Ext.layout.BorderLayout.SplitRegion.prototype, {
+    splitTip            : "Arastar para redimensionar.",
+    collapsibleSplitTip : "Arastar para redimensionar. DUplo clique para esconder"
+  });
+}

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ro.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ro.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ro.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Romanian translations for ExtJS 2.1
  * First released by Lucian Lature on 2007-04-24

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ru.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ru.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ru.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Russian translation
  * By ZooKeeper (utf-8 encoding)

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sk.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sk.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sk.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * List compiled by mystix on the extjs.com forums.
  * Thank you Mystix!

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sl.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sl.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sl.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Slovenian translation by Matjaž (UTF-8 encoding)
  * 25 April 2007

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sr.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sr.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sr.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Serbian Latin Translation
  * by Atila Hajnal (latin, utf8 encoding)

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sr_RS.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sr_RS.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sr_RS.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Serbian Cyrillic Translation
  * by Čolovic Vladan (cyrillic, utf8 encoding)

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sv_SE.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sv_SE.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-sv_SE.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * Swedish translation (utf8-encoding)
  * By Erik Andersson, Monator Technologies

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-th.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-th.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-th.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * List compiled by KillerNay on the extjs.com forums.
  * Thank you KillerNay!

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-tr.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-tr.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-tr.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,21 +6,16 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * List compiled by mystix on the extjs.com forums.
  * Thank you Mystix!
  *
  * Turkish translation by Alper YAZGAN
- * 2008-01-24 , 10:29 AM 
-*/
+ * 2008-01-24, 10:29 AM 
+ * 
+ * Updated to 2.2 by YargicX
+ * 2008-10-05, 06:22 PM
+ */
 
 Ext.UpdateManager.defaults.indicatorText = '<div class="loading-indicator">Yükleniyor ...</div>';
 
@@ -28,8 +23,8 @@
   Ext.View.prototype.emptyText = "";
 }
 
-if(Ext.grid.GridPanel){
-  Ext.grid.GridPanel.prototype.ddText = "Şeçili satır sayısı : {0}";
+if(Ext.grid.Grid){
+  Ext.grid.Grid.prototype.ddText = "Seçili satýr sayýsý : {0}";
 }
 
 if(Ext.TabPanelItem){
@@ -37,7 +32,7 @@
 }
 
 if(Ext.form.Field){
-  Ext.form.Field.prototype.invalidText = "Bu alandaki değer geçersiz";
+  Ext.form.Field.prototype.invalidText = "Bu alandaki deðer geçersiz";
 }
 
 if(Ext.LoadMask){
@@ -46,17 +41,17 @@
 
 Date.monthNames = [
   "Ocak",
-  "Şubat",
+  "Þžubat",
   "Mart",
   "Nisan",
-  "Mayıs",
+  "Mayýs",
   "Haziran",
   "Temmuz",
-  "Ağustos",
+  "Aðustos",
   "Eylül",
   "Ekim",
-  "Kasım",
-  "Aralık"
+  "Kasým",
+  "Aralýk"
 ];
 
 Date.getShortMonthName = function(month) {
@@ -85,9 +80,9 @@
 Date.dayNames = [
   "Pazar",
   "Pazartesi",
-  "Salı",
-  "Çarşamba",
-  "Perşembe",
+  "Salý",
+  "LJarþŸamba",
+  "PerþŸembe",
   "Cuma",
   "Cumartesi"
 ];
@@ -96,8 +91,8 @@
   "Paz",
   "Pzt",
   "Sal",
-  "Çrş",
-  "Prş",
+  "ÇrþŸ",
+  "Prþ",
   "Cum",
   "Cmt"
 ];
@@ -109,9 +104,9 @@
 if(Ext.MessageBox){
   Ext.MessageBox.buttonText = {
     ok     : "Tamam",
-    cancel : "İptal",
+    cancel : "Ä°ptal",
     yes    : "Evet",
-    no     : "Hayır"
+    no     : "Hayýr"
   };
 }
 
@@ -133,12 +128,12 @@
     monthNames        : Date.monthNames,
     dayNames          : Date.dayNames,
     nextText          : 'Gelecek Ay (Control+Right)',
-    prevText          : 'Önceki Ay (Control+Left)',
-    monthYearText     : 'Bir ay şeçiniz (Yılı artırmak/azaltmak için Control+Up/Down)',
-    todayTip          : "{0} (Boşluk Tuşu - Spacebar)",
+    prevText          : 'Önceki Ay (Control+Left)',
+    monthYearText     : 'Bir ay sŸeçiniz (Yýlý artýrmak/azaltmak için Control+Up/Down)',
+    todayTip          : "{0} (BoþŸluk TuþŸu - Spacebar)",
     format            : "d/m/Y",
     okText            : "&#160;Tamam&#160;",
-    cancelText        : "İptal",
+    cancelText        : "Ä°ptal",
     startDay          : 1
   });
 }
@@ -147,8 +142,8 @@
   Ext.apply(Ext.PagingToolbar.prototype, {
     beforePageText : "Sayfa",
     afterPageText  : " / {0}",
-    firstText      : "İlk Sayfa",
-    prevText       : "Önceki Sayfa",
+    firstText      : "Ä°lk Sayfa",
+    prevText       : "Önceki Sayfa",
     nextText       : "Sonraki Sayfa",
     lastText       : "Son Sayfa",
     refreshText    : "Yenile",
@@ -159,9 +154,9 @@
 
 if(Ext.form.TextField){
   Ext.apply(Ext.form.TextField.prototype, {
-    minLengthText : "Girilen verinin uzunluğu en az {0} olabilir",
-    maxLengthText : "Girilen verinin uzunluğu en fazla {0} olabilir",
-    blankText     : "Bu alan boş bırakılamaz",
+    minLengthText : "Girilen verinin uzunluðu en az {0} olabilir",
+    maxLengthText : "Girilen verinin uzunluðu en fazla {0} olabilir",
+    blankText     : "Bu alan boþŸ býrakýlamaz",
     regexText     : "",
     emptyText     : null
   });
@@ -171,7 +166,7 @@
   Ext.apply(Ext.form.NumberField.prototype, {
     minText : "En az {0} girilebilir",
     maxText : "En çok {0} girilebilir",
-    nanText : "{0} geçersiz bir sayıdır"
+    nanText : "{0} geçersiz bir sayýdýr"
   });
 }
 
@@ -179,9 +174,9 @@
   Ext.apply(Ext.form.DateField.prototype, {
     disabledDaysText  : "Disabled",
     disabledDatesText : "Disabled",
-    minText           : "Bu tarih, {0} tarihinden daha sonra olmalıdır", 
-    maxText           : "Bu tarih, {0} tarihinden daha önce olmalıdır",
-    invalidText       : "{0} geçersiz bir tarihdir - tarih formatı {1} şeklinde olmalıdır",
+    minText           : "Bu tarih, {0} tarihinden daha sonra olmalýdýr", 
+    maxText           : "Bu tarih, {0} tarihinden daha önce olmalýdýr",
+    invalidText       : "{0} geçersiz bir tarihdir - tarih formatý {1} þŸeklinde olmalýdýr",
     format            : "d/m/Y",
     altFormats        : "d.m.y|d.m.Y|d/m/y|d-m-Y|d-m-y|d.m|d/m|d-m|dm|dmY|dmy|d|Y.m.d|Y-m-d|Y/m/d"
   });
@@ -195,81 +190,79 @@
 }
 
 if(Ext.form.VTypes){
-  Ext.apply(Ext.form.VTypes, {
-    emailText    : 'Bu alan "user@xxxxxxxxxx" şeklinde elektronik posta formatında olmalıdır',
-    urlText      : 'Bu alan "http://www.domain.com"; şeklinde URL adres formatında olmalıdır',
-    alphaText    : 'Bu alan sadece harf ve _ içermeli',
-    alphanumText : 'Bu alan sadece harf, sayı ve _ içermeli'
-  });
+	Ext.form.VTypes["emailText"]='Bu alan "user@xxxxxxxxxx" þŸeklinde elektronik posta formatýnda olmalýdýr';
+	Ext.form.VTypes["urlText"]='Bu alan "http://www.domain.com"; þŸeklinde URL adres formatýnda olmalýdýr';
+	Ext.form.VTypes["alphaText"]='Bu alan sadece harf ve _ içermeli';
+	Ext.form.VTypes["alphanumText"]='Bu alan sadece harf, sayý ve _ içermeli';
 }
 
 if(Ext.form.HtmlEditor){
   Ext.apply(Ext.form.HtmlEditor.prototype, {
-    createLinkText : 'Lütfen bu bağlantı için gerekli URL adresini giriniz:',
+    createLinkText : 'Lütfen bu baðlantý için gerekli URL adresini giriniz:',
     buttonTips : {
       bold : {
-        title: 'Kalın(Bold) (Ctrl+B)',
-        text: 'Şeçili yazıyı kalın yapar.',
+        title: 'Kalýn(Bold) (Ctrl+B)',
+        text: 'Þžeçili yazýyý kalýn yapar.',
         cls: 'x-html-editor-tip'
       },
       italic : {
-        title: 'İtalik(Italic) (Ctrl+I)',
-        text: 'Şeçili yazıyı italik yapar.',
+        title: 'Ä°talik(Italic) (Ctrl+I)',
+        text: 'Þžeçili yazýyý italik yapar.',
         cls: 'x-html-editor-tip'
       },
       underline : {
-        title: 'Alt Çizgi(Underline) (Ctrl+U)',
-        text: 'Şeçili yazının altını çizer.',
+        title: 'Alt Çizgi(Underline) (Ctrl+U)',
+        text: 'Þžeçili yazýnýn altýný çizer.',
         cls: 'x-html-editor-tip'
       },
       increasefontsize : {
         title: 'Fontu büyült',
-        text: 'Yazı fontunu büyütür.',
+        text: 'Yazý fontunu büyütür.',
         cls: 'x-html-editor-tip'
       },
       decreasefontsize : {
         title: 'Fontu küçült',
-        text: 'Yazı fontunu küçültür.',
+        text: 'Yazý fontunu küçültür.',
         cls: 'x-html-editor-tip'
       },
       backcolor : {
         title: 'Arka Plan Rengi',
-        text: 'Seçili yazının arka plan rengini değiştir.',
+        text: 'Seçili yazýnýn arka plan rengini deðiþŸtir.',
         cls: 'x-html-editor-tip'
       },
       forecolor : {
-        title: 'Yazı Rengi',
-        text: 'Seçili yazının rengini değiştir.',
+        title: 'Yazý Rengi',
+        text: 'Seçili yazýnýn rengini deðiþŸtir.',
         cls: 'x-html-editor-tip'
       },
       justifyleft : {
         title: 'Sola Daya',
-        text: 'Yazıyı sola daya.',
+        text: 'Yazýyý sola daya.',
         cls: 'x-html-editor-tip'
       },
       justifycenter : {
         title: 'Ortala',
-        text: 'Yazıyı editörde ortala.',
+        text: 'Yazýyý editörde ortala.',
         cls: 'x-html-editor-tip'
       },
       justifyright : {
-        title: 'Sağa daya',
-        text: 'Yazıyı sağa daya.',
+        title: 'Saða daya',
+        text: 'Yazýyý saða daya.',
         cls: 'x-html-editor-tip'
       },
       insertunorderedlist : {
-        title: 'Noktalı Liste',
-        text: 'Noktalı listeye başla.',
+        title: 'Noktalý Liste',
+        text: 'Noktalý listeye baþŸla.',
         cls: 'x-html-editor-tip'
       },
       insertorderedlist : {
-        title: 'Numaralı Liste',
-        text: 'Numaralı lisyeye başla.',
+        title: 'Numaralý Liste',
+        text: 'Numaralý lisyeye baþŸla.',
         cls: 'x-html-editor-tip'
       },
       createlink : {
         title: 'Web Adresi(Hyperlink)',
-        text: 'Seçili yazıyı web adresi(hyperlink) yap.',
+        text: 'Seçili yazýyý web adresi(hyperlink) yap.',
         cls: 'x-html-editor-tip'
       },
       sourceedit : {
@@ -283,10 +276,10 @@
 
 if(Ext.grid.GridView){
   Ext.apply(Ext.grid.GridView.prototype, {
-    sortAscText  : "Artan sırada sırala",
-    sortDescText : "Azalan sırada sırala",
+    sortAscText  : "Artan sýrada sýrala",
+    sortDescText : "Azalan sýrada sýrala",
     lockText     : "Kolonu kilitle",
-    unlockText   : "Kolon kilidini kaldır",
+    unlockText   : "Kolon kilidini kaldýr",
     columnsText  : "Kolonlar"
   });
 }
@@ -302,14 +295,14 @@
 if(Ext.grid.PropertyColumnModel){
   Ext.apply(Ext.grid.PropertyColumnModel.prototype, {
     nameText   : "Ad",
-    valueText  : "Değer",
+    valueText  : "Deðer",
     dateFormat : "d/m/Y"
   });
 }
 
-if(Ext.layout.BorderLayout && Ext.layout.BorderLayout.SplitRegion){
+if(Ext.layout.BorderLayout.SplitRegion){
   Ext.apply(Ext.layout.BorderLayout.SplitRegion.prototype, {
-    splitTip            : "Yeniden boyutlandırmak için sürükle.",
-    collapsibleSplitTip : "Yeniden boyutlandırmak için sürükle. Saklamak için çift tıkla."
+    splitTip            : "Yeniden boyutlandýrmak için sürükle.",
+    collapsibleSplitTip : "Yeniden boyutlandýrmak için sürükle. Saklamak için çift týkla."
   });
 }

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ukr.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ukr.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-ukr.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Ukrainian translation
  * By zlatko (utf-8 encoding)

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-vn.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-vn.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-vn.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * List compiled by mystix on the extjs.com forums.
  * Thank you Mystix!

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-zh_CN.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-zh_CN.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-zh_CN.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Simplified Chinese translation
  * By DavidHu

Modified: mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-zh_TW.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-zh_TW.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/locale/ext-lang-zh_TW.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*
  * Traditional Chinese translation
  * By hata1234

Modified: mickael/trunk/ext/v3.0.0-a1/source/state/CookieProvider.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/state/CookieProvider.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/state/CookieProvider.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,15 +6,7 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
 
-
 /**
  * @class Ext.state.CookieProvider
  * @extends Ext.state.Provider

Modified: mickael/trunk/ext/v3.0.0-a1/source/state/Provider.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/state/Provider.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/state/Provider.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.state.Provider
  * Abstract base class for state provider implementations. This class provides methods

Modified: mickael/trunk/ext/v3.0.0-a1/source/state/StateManager.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/state/StateManager.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/state/StateManager.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.state.Manager
  * This is the global state manager. By default all components that are "state aware" check this class

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/CSS.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/CSS.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/CSS.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.util.CSS
  * Utility class for manipulating CSS rules

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/ClickRepeater.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/ClickRepeater.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/ClickRepeater.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  @class Ext.util.ClickRepeater
  @extends Ext.util.Observable
@@ -99,6 +91,12 @@
     timer : 0,
 
     // private
+    destroy : function() {
+        Ext.destroy(this.el);
+        this.purgeListeners();
+    },
+    
+    // private
     handleMouseDown : function(){
         clearTimeout(this.timer);
         this.el.blur();

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/Cookies.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/Cookies.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/Cookies.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.util.Cookies = {
     set : function(name, value){
         var argv = arguments;

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/Date.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/Date.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/Date.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Date
  *
@@ -52,18 +44,18 @@
   H     24-hour format of an hour with leading zeros                              00 to 23
   i     Minutes, with leading zeros                                               00 to 59
   s     Seconds, with leading zeros                                               00 to 59
-  u     Milliseconds, with leading zeroes (arbitrary number of digits allowed)    Examples:
-                                                                                  001 (i.e. 1ms) or
-                                                                                  100 (i.e. 100ms) or
-                                                                                  999 (i.e. 999ms) or
-                                                                                  999876543210 (i.e. 999.876543210ms)
+  u     Decimal fraction of a second                                              Examples:
+        (minimum 1 digit, arbitrary number of digits allowed)                     001 (i.e. 0.001s) or
+                                                                                  100 (i.e. 0.100s) or
+                                                                                  999 (i.e. 0.999s) or
+                                                                                  999876543210 (i.e. 0.999876543210s)
   O     Difference to Greenwich time (GMT) in hours and minutes                   Example: +1030
   P     Difference to Greenwich time (GMT) with colon between hours and minutes   Example: -08:00
   T     Timezone abbreviation of the machine running the code                     Examples: EST, MDT, PDT ...
   Z     Timezone offset in seconds (negative if west of UTC, positive if east)    -43200 to 50400
-  c     ISO 8601 date (note: milliseconds, if present, must be specified with     Examples:
-        at least 1 digit. There is no limit to how many digits the millisecond    2007-04-17T15:19:21+08:00 or
-        value may contain. see http://www.w3.org/TR/NOTE-datetime for more info)  2008-03-16T16:18:22Z or
+  c     ISO 8601 date (note: the decimal fraction of a second, if specified,      Examples:
+        must contain at least 1 digit. There is no limit on the maximum number    2007-04-17T15:19:21+08:00 or
+        of digits allowed. see http://www.w3.org/TR/NOTE-datetime for more info)  2008-03-16T16:18:22Z or
                                                                                   2009-02-15T17:17:23.9+01:00 or
                                                                                   2010-01-14T18:16:24,999876543-07:00
   U     Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)                1193432466 or -2138434463
@@ -116,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)
@@ -127,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,
@@ -430,11 +434,13 @@
 
     // private
     createNewFormat : function(format) {
-        var funcName = "format" + Date.formatFunctions.count++;
+        var funcName = "format" + Date.formatFunctions.count++,
+            code = "Date.prototype." + funcName + " = function(){return ",
+            special = false,
+            ch = '';
+
         Date.formatFunctions[format] = funcName;
-        var code = "Date.prototype." + funcName + " = function(){return ";
-        var special = false;
-        var ch = '';
+
         for (var i = 0; i < format.length; ++i) {
             ch = format.charAt(i);
             if (!special && ch == "\\") {
@@ -452,69 +458,77 @@
     },
 
     // private
-    createParser : function(format) {
-        var funcName = "parse" + Date.parseFunctions.count++;
-        var regexNum = Date.parseRegexes.length;
-        var currentGroup = 1;
-        Date.parseFunctions[format] = funcName;
+    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);",
+                    "}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))?" // favour UTC offset over GMT offset
+                    + " (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :" // reset to UTC, then add offset
+                    + " v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;", // reset to GMT, then add offset
+            "}"
+        ].join('\n');
 
-        var code = "Date." + funcName + " = function(input){\n"
-            + "var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;\n"
-            + "input = String(input);\n"
-            + "d = new Date();\n"
-            + "y = d.getFullYear();\n"
-            + "m = d.getMonth();\n"
-            + "d = d.getDate();\n"
-            + "var results = input.match(Date.parseRegexes[" + regexNum + "]);\n"
-            + "if (results && results.length > 0) {";
-        var regex = "";
+        return function(format) {
+            var funcName = "parse" + Date.parseFunctions.count++,
+                regexNum = Date.parseRegexes.length,
+                currentGroup = 1,
+                calc = "",
+                regex = "",
+                special = false,
+                ch = "";
 
-        var special = false;
-        var ch = '';
-        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;
+            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));
         }
+    }(),
 
-        code += "if (u){\n"
-            + "v = new Date(u * 1000);\n" // give top priority to UNIX time
-            + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){\n"
-            + "v = new Date(y, m, d, h, i, s, ms);\n"
-            + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){\n"
-            + "v = new Date(y, m, d, h, i, s);\n"
-            + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){\n"
-            + "v = new Date(y, m, d, h, i);\n"
-            + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){\n"
-            + "v = new Date(y, m, d, h);\n"
-            + "}else if (y >= 0 && m >= 0 && d > 0){\n"
-            + "v = new Date(y, m, d);\n"
-            + "}else if (y >= 0 && m >= 0){\n"
-            + "v = new Date(y, m);\n"
-            + "}else if (y >= 0){\n"
-            + "v = new Date(y);\n"
-            + "}\n}\nreturn (v && (z || o))?" // favour UTC offset over GMT offset
-            +     " (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :" // reset to UTC, then add offset
-            +         " v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;\n" // reset to GMT, then add offset
-            + "}";
-
-        Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$", "i");
-        eval(code);
-    },
-
     // 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,
@@ -663,7 +677,7 @@
         u: {
             g:1,
             c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",
-            s:"(\\d+)" // milliseconds with leading zeroes (arbitrary number of digits allowed) e.g. 001, 100, 999, 999876543210
+            s:"(\\d+)" // decimal fraction of a second (minimum = 1 digit, maximum = unlimited)
         },
         O: {
             g:1,
@@ -699,17 +713,24 @@
             s:"([+\-]?\\d{1,5})" // leading '+' sign is optional for UTC offset
         },
         c: function() {
-            var calc = [];
-            var arr = [
-                $f("Y", 1), // year
-                $f("m", 2), // month
-                $f("d", 3), // day
-                $f("h", 4), // hour
-                $f("i", 5), // minute
-                $f("s", 6), // second
-                {c:"ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"}, // millisecond decimal fraction (with leading zeroes + arbitrary no. of digits)
-                {c:"if(results[9] == 'Z'){\no = 0;\n}else{\n" + $f("P", 9).c + "\n}"} // allow both "Z" (i.e. UTC) and "+08:00" (i.e. GMT) time zone delimiters
-            ];
+            var calc = [],
+                arr = [
+                    $f("Y", 1), // year
+                    $f("m", 2), // month
+                    $f("d", 3), // day
+                    $f("h", 4), // hour
+                    $f("i", 5), // minute
+                    $f("s", 6), // second
+                    {c:"ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"}, // decimal fraction of a second (minimum = 1 digit, maximum = unlimited)
+                    {c:[ // allow both "Z" (i.e. UTC) and "+08:00" (i.e. UTC offset) time zone delimiters
+                        "if(results[9] == 'Z'){",
+                            "z = 0;",
+                        "}else{",
+                            $f("P", 9).c,
+                        "}"
+                    ].join('\n')}
+                ];
+
             for (var i = 0, l = arr.length; i < l; ++i) {
                 calc.push(arr[i].c);
             }
@@ -718,8 +739,8 @@
                 g:1,
                 c:calc.join(""),
                 s:arr[0].s + "-" + arr[1].s + "-" + arr[2].s + "T" + arr[3].s + ":" + arr[4].s + ":" + arr[5].s
-                      + "((\.|,)\\d+)?" // ",998465" or ".998465" millisecond decimal fraction
-                      + "(" + $f("P", null).s + "|Z)" // "Z" (UTC) or "GMT+08:00" (GMT offset)
+                      + "((\.|,)\\d+)?" // decimal fraction of a second (e.g. ",998465" or ".998465")
+                      + "(Z|([+\-]\\d{2}:\\d{2}))" // "Z" (UTC) or "+08:00" (UTC offset)
             }
         },
         U: {
@@ -776,7 +797,7 @@
      */
     getGMTOffset : function(colon) {
         return (this.getTimezoneOffset() > 0 ? "-" : "+")
-            + String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset() / 60)), 2, "0")
+            + String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset()) / 60), 2, "0")
             + (colon ? ":" : "")
             + String.leftPad(Math.abs(this.getTimezoneOffset() % 60), 2, "0");
     },
@@ -801,14 +822,18 @@
      */
     getWeekOfYear : function() {
         // adapted from http://www.merlyn.demon.co.uk/weekcalc.htm
-        var ms1d = 864e5; // milliseconds in a day
-        var ms7d = 7 * ms1d; // milliseconds in a week
-        var DC3 = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate() + 3) / ms1d; // an Absolute Day Number
-        var AWN = Math.floor(DC3 / 7); // an Absolute Week Number
-        var Wyr = new Date(AWN * ms7d).getUTCFullYear();
-        return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1;
-    },
+        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
+                Wyr = new Date(AWN * ms7d).getUTCFullYear();
+
+            return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1;
+        }
+    }(),
+
     /**
      * Whether or not the current date is in a leap year.
      * @return {Boolean} True if the current date is in a leap year, else false.

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/DelayedTask.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/DelayedTask.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/DelayedTask.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.util.DelayedTask
  * Provides a convenient method of performing setTimeout where a new

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/Format.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/Format.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/Format.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.util.Format
  * Reusable data formatting functions
@@ -239,19 +231,19 @@
             }
         }(),
 
+
         /**
-         * Formats the number according to the format string; adheres to the american number standard
-         * where a comma is inserted after every 3 digits. note: there should be only 1 contiguous number
-         * in the format, where a number consists of digits, period, and commas
-         * any other characters can be wrapped around this number, including ?$?, ?%?, or text
+         * Formats the number according to the format string.
          * <div style="margin-left:40px">examples (123456.789):
          * <div style="margin-left:10px">
-         * ?0? - (123456) show only digits, no precision<br>
-         * ?0.00? - (123456.78) show only digits, 2 precision<br>
-         * ?0.0000? - (123456.7890) show only digits, 4 precision<br>
-         * ?0,000? - (123,456) show comma and digits, no precision<br>
-         * ?0,000.00? - (123,456.78) show comma and digits, 2 precision<br>
-         * ?0,0.00? - (123,456.78) shortcut method, show comma and digits, 2 precision<br>
+         * 0 - (123456) show only digits, no precision<br>
+         * 0.00 - (123456.78) show only digits, 2 precision<br>
+         * 0.0000 - (123456.7890) show only digits, 4 precision<br>
+         * 0,000 - (123,456) show comma and digits, no precision<br>
+         * 0,000.00 - (123,456.78) show comma and digits, 2 precision<br>
+         * 0,0.00 - (123,456.78) shortcut method, show comma and digits, 2 precision<br>
+         * To reverse the grouping (,) and decimal (.) for international numbers, add /i to the end.
+          * For example: 0.000,00/i
          * </div</div>
          *
          * @method format
@@ -268,52 +260,52 @@
             if(typeof v != 'number' || isNaN(v)){
                 return '';
             }
-            var hasComma = -1 < format.indexOf(','),
-                psplit = format.replace(/[^\d\.]/g,'').split('.');
+            var comma = ',';
+            var dec = '.';
+            var i18n = false;
+            
+            if(format.substr(format.length - 2) == '/i'){
+                format = format.substr(0, format.length-2);
+                i18n = true;
+                comma = '.';
+                dec = ',';
+            }
 
-            // compute precision
+            var hasComma = format.indexOf(comma) != -1,
+                psplit = (i18n ? format.replace(/[^\d\,]/g,'') : format.replace(/[^\d\.]/g,'')).split(dec);
+
             if (1 < psplit.length) {
-                // fix number precision
                 v = v.toFixed(psplit[1].length);
             }
-            // error: too many periods
             else if (2 < psplit.length) {
                 throw('NumberFormatException: invalid format, formats should have no more than 1 period: ' + format);
             }
-            // remove precision
             else {
                 v = v.toFixed(0);
             }
 
-            // get the string now that precision is correct
             var fnum = v.toString();
 
-            // format has comma, then compute commas
             if (hasComma) {
-                // remove precision for computation
                 psplit = fnum.split('.');
 
                 var cnum = psplit[0],
                     parr = [],
                     j = cnum.length,
                     m = Math.floor(j / 3),
-                    n = cnum.length % 3 || 3; // n cannot be ZERO or causes infinite loop
+                    n = cnum.length % 3 || 3;
 
-                // break the number into chunks of 3 digits; first chunk may be less than 3
                 for (var i = 0; i < j; i += n) {
                     if (i != 0) {n = 3;}
                     parr[parr.length] = cnum.substr(i, n);
                     m -= 1;
                 }
-
-                // put chunks back together, separated by comma
-                fnum = parr.join(',');
-
-                // add the precision back in
-                if (psplit[1]) {fnum += '.' + psplit[1];}
+                fnum = parr.join(comma);
+                if (psplit[1]) {
+                    fnum += dec + psplit[1];
+                }
             }
 
-            // replace the number portion of the format with fnum
             return format.replace(/[\d,?\.?]+/, fnum);
         },
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/History.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/History.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/History.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.History
  * @extends Ext.util.Observable
@@ -95,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/JSON.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/JSON.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/JSON.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.util.JSON
  * Modified version of Douglas Crockford"s json.js that doesn"t

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/KeyMap.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/KeyMap.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/KeyMap.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.KeyMap
  * Handles mapping keys to actions for an element. One key map can be used for multiple actions.

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/KeyNav.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/KeyNav.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/KeyNav.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.KeyNav
  * <p>Provides a convenient wrapper for normalized keyboard navigation.  KeyNav allows you to bind

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/MixedCollection.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/MixedCollection.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/MixedCollection.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.util.MixedCollection
  * @extends Ext.util.Observable
@@ -308,7 +300,7 @@
 /**
  * Returns index within the collection of the passed Object.
  * @param {Object} o The item to find the index of.
- * @return {Number} index of the item.
+ * @return {Number} index of the item. Returns -1 if not found.
  */
     indexOf : function(o){
         return this.items.indexOf(o);
@@ -562,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/util/Observable.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/Observable.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/Observable.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.util.Observable
  * Abstract base class that provides a common interface for publishing events. Subclasses are expected to
@@ -32,7 +24,7 @@
  */
 Ext.util.Observable = function(){
     /**
-     * @cfg {Object} listeners A config object containing one or more event handlers to be added to this
+     * @cfg {Object} listeners (optional) A config object containing one or more event handlers to be added to this
      * object during initialization.  This should be a valid listeners config object as specified in the
      * {@link #addListener} example for attaching multiple handlers at once.
      */
@@ -40,23 +32,44 @@
         this.on(this.listeners);
         delete this.listeners;
     }
+    if(!this.events){
+        this.events = {};
+    }
 };
 Ext.util.Observable.prototype = {
     /**
      * Fires the specified event with the passed parameters (minus the event name).
-     * @param {String} eventName
+     * @param {String} eventName The name of the event to fire. If the event is to bubble
+     * up an Observable parent hierarchy (See {@link Ext.Component#getBubbleTarget}) then
+     * the first argument must be passed as <tt>true</tt>, and the event name is passed
+     * as the second argument.
      * @param {Object...} args Variable number of parameters are passed to handlers
      * @return {Boolean} returns false if any of the handlers return false otherwise it returns true
      */
     fireEvent : function(){
+        var a = Array.prototype.slice.call(arguments, 0);
+        var ename = a[0];
+        if(ename === true){
+            a.shift();
+            var c = this;
+            while(c){
+                if(c.fireEvent.apply(c, a) === false){
+                    return false;
+                }
+                c = c.getBubbleTarget ? c.getBubbleTarget() : null;
+            }
+            return true;
+        }
         if(this.eventsSuspended === true){
-            if (this.suspendedEventsQueue) {
-                this.suspendedEventsQueue.push(arguments);
+            var q = this.suspendedEventsQueue;
+            if (q) {
+                q[q.length] = a;
             }
         } else {
-            var ce = this.events[arguments[0].toLowerCase()];
+            var ce = this.events[ename.toLowerCase()];
             if(typeof ce == "object"){
-                return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));
+                a.shift();
+                return ce.fire.apply(ce, a);
             }
         }
         return true;
@@ -79,6 +92,8 @@
      * <li><b>buffer</b> : Number<p class="sub-desc">Causes the handler to be scheduled to run in an {@link Ext.util.DelayedTask} delayed
      * by the specified number of milliseconds. If the event fires again within that time, the original
      * handler is <em>not</em> invoked, but the new handler is scheduled in its place.</p></li>
+     * <li>target {Observable} : Only call the handler if the event was fired on the target Observable, <i>not</i>
+     * if the event was bubbled up from a child Observable.</li>
      * </ul><br>
      * <p>
      * <b>Combining Options</b><br>
@@ -408,6 +423,14 @@
         };
     };
 
+    var createTargeted = function(h, o, scope){
+        return function(){
+            if(o.target == arguments[0]){
+                h.apply(scope, Array.prototype.slice.call(arguments, 0));
+            }
+        };
+    };
+
     Ext.util.Event = function(obj, name){
         this.name = name;
         this.obj = obj;
@@ -433,6 +456,9 @@
             scope = scope || this.obj;
             var l = {fn: fn, scope: scope, options: o};
             var h = fn;
+            if(o.target){
+                h = createTargeted(h, o, scope);
+            }
             if(o.delay){
                 h = createDelayed(h, o, scope);
             }

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/TaskMgr.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/TaskMgr.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/TaskMgr.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.util.TaskRunner
  * Provides the ability to execute one or more arbitrary tasks in a multithreaded manner.  Generally, you can use
@@ -94,6 +86,8 @@
     };
 
     /**
+     * @member Ext.util.TaskRunner
+     * @method start
      * Starts a new task.
      * @param {Object} task A config object that supports the following properties:<ul>
      * <li><code>run</code> : Function<div class="sub-desc">The function to execute each time the task is run. The
@@ -122,6 +116,8 @@
     };
 
     /**
+     * @member Ext.util.TaskRunner
+     * @method stop
      * Stops an existing running task.
      * @param {Object} task The task to stop
      * @return {Object} The task
@@ -132,6 +128,8 @@
     };
 
     /**
+     * @member Ext.util.TaskRunner
+     * @method stopAll
      * Stops all tasks that are currently running.
      */
     this.stopAll = function(){

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/TextMetrics.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/TextMetrics.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/TextMetrics.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.util.TextMetrics
  * Provides precise pixel measurements for blocks of text so that you can determine exactly how high and

Modified: mickael/trunk/ext/v3.0.0-a1/source/util/XTemplate.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/util/XTemplate.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/util/XTemplate.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
 * @class Ext.XTemplate
 * @extends Ext.Template

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Action.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Action.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Action.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Action
  * <p>An Action is a piece of reusable functionality that can be abstracted out of any particular component so that it
@@ -62,6 +54,7 @@
  */
 Ext.Action = function(config){
     this.initialConfig = config;
+    this.itemId = config.itemId = (config.itemId || config.id || Ext.id());
     this.items = [];
 }
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/BoxComponent.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/BoxComponent.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/BoxComponent.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,21 +6,31 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.BoxComponent
  * @extends Ext.Component
- * Base class for any visual {@link Ext.Component} that uses a box container.  BoxComponent provides automatic box
+ * <p>Base class for any visual {@link Ext.Component} that uses a box container.  BoxComponent provides automatic box
  * model adjustments for sizing and positioning and will work correctly withnin the Component rendering model.  All
  * container classes should subclass BoxComponent so that they will work consistently when nested within other Ext
- * layout containers.
+ * layout containers.</p>
+ * <p>A BoxComponent may be created as a custom Component which encapsulates any HTML element, either a pre-existing
+ * element, or one that is created to your specifications at render time. Usually, to participate in layouts,
+ * a Component will need to be a <b>Box</b>Component in order to have its width and height managed.</p>
+ * <p>To use a pre-existing element as a BoxComponent, configure it so that you preset the <b>el</b> property to the
+ * element to reference:<pre><code>
+var pageHeader = new Ext.BoxComponent({
+    el: 'my-header-div'
+});</code></pre>
+ * This may then be {@link Ext.Container#add added} to a {@link Ext.Container Container} as a child item.</p>
+ * <p>To create a BoxComponent based around a HTML element to be created at render time, use the
+ * {@link Ext.Component#autoEl autoEl} config option which takes the form of a
+ * {@link Ext.DomHelper DomHelper} specification:<pre><code>
+var myImage = new Ext.BoxComponent({
+    autoEl: {
+        tag: 'img',
+        src: '/images/my-image.jpg'
+    }
+});</code></pre></p>
  * @constructor
  * @param {Ext.Element/String/Object} config The configuration options.
  */

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Button.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Button.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Button.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 
 /**
  * @class Ext.Button
@@ -29,8 +21,7 @@
  * @cfg {Boolean} hidden True to start hidden (defaults to false)
  * @cfg {Boolean} disabled True to start disabled (defaults to false)
  * @cfg {Boolean} pressed True to start pressed (only if enableToggle = true)
- * @cfg {String} toggleGroup The group this toggle button is a member of (only 1 per group can be pressed, only
- * applies if enableToggle = true)
+ * @cfg {String} toggleGroup The group this toggle button is a member of (only 1 per group can be pressed)
  * @cfg {Boolean/Object} repeat True to repeat fire the click event while the mouse is down. This can also be
   an {@link Ext.util.ClickRepeater} config object (defaults to false).
  * @constructor
@@ -260,6 +251,9 @@
     initButtonEl : function(btn, btnEl){
         this.el = btn;
 
+        if(this.id){
+            this.el.dom.id = this.el.id = this.id;
+        }
         if(this.icon){
             btnEl.setStyle('background-image', 'url(' +this.icon +')');
         }
@@ -288,10 +282,6 @@
             this.menu.on("hide", this.onMenuHide, this);
         }
 
-        if(this.id){
-            this.el.dom.id = this.el.id = this.id;
-        }
-
         if(this.repeat){
             var repeater = new Ext.util.ClickRepeater(btn,
                 typeof this.repeat == "object" ? this.repeat : {}
@@ -327,9 +317,12 @@
     // private
     beforeDestroy: function(){
     	if(this.rendered){
-	        var btn = this.el.child(this.buttonSelector);
-	        if(btn){
-	            btn.removeAllListeners();
+	        var btnEl = this.el.child(this.buttonSelector);
+	        if(btnEl){
+                if(this.tooltip){
+                    Ext.QuickTips.unregister(btnEl);
+                }
+	            btnEl.removeAllListeners();
 	        }
 	    }
         if(this.menu){

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/ColorPalette.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/ColorPalette.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/ColorPalette.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.ColorPalette
  * @extends Ext.Component
@@ -103,6 +95,7 @@
             '<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>'
         );
         var el = document.createElement("div");
+        el.id = this.getId();
         el.className = this.itemCls;
         t.overwrite(el, this.colors);
         container.dom.insertBefore(el, position);

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Component.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Component.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Component.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Component
  * @extends Ext.util.Observable
@@ -146,11 +138,17 @@
         'beforerender',
         /**
          * @event render
-         * Fires after the component is rendered.
+         * Fires after the component markup is rendered.
          * @param {Ext.Component} this
          */
         'render',
         /**
+         * @event afterrender
+         * Fires after the component rendering is finished.
+         * @param {Ext.Component} this
+         */
+        'afterrender',
+        /**
          * @event beforedestroy
          * Fires before the component is destroyed. Return false to stop the destroy.
          * @param {Ext.Component} this
@@ -243,38 +241,82 @@
     /**
      * @cfg {String} fieldLabel The label text to display next to this Component (defaults to '')
      * <p><b>This config is only used when this Component is rendered by a Container which has been
-     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager</b></p>
+     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager.</b></p>
+     * Example use:<pre><code>
+new Ext.FormPanel({
+    height: 100,
+    renderTo: Ext.getBody(),
+    items: [{
+        xtype: 'textfield',
+        fieldLabel: 'Name'
+    }]
+});
+</code></pre>
      */
     /**
      * @cfg {String} labelStyle A CSS style specification to apply directly to this field's label (defaults to the
-     * container's labelStyle value if set, or ''). For example, <code>labelStyle: 'font-weight:bold;'</code>.
+     * container's labelStyle value if set, or '').<code></code>.
      * <p><b>This config is only used when this Component is rendered by a Container which has been
-     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager</b></p>
+     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager.</b></p>
+     * Example use:<pre><code>
+new Ext.FormPanel({
+    height: 100,
+    renderTo: Ext.getBody(),
+    items: [{
+        xtype: 'textfield',
+        fieldLabel: 'Name',
+        labelStyle: 'font-weight:bold;'
+    }]
+});
+</code></pre>
      */
     /**
      * @cfg {String} labelSeparator The standard separator to display after the text of each form label (defaults
      * to the value of {@link Ext.layout.FormLayout#labelSeparator}, which is a colon ':' by default).  To display
      * no separator for this field's label specify empty string ''.
      * <p><b>This config is only used when this Component is rendered by a Container which has been
-     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager</b></p>
+     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager.</b></p>
+     * Example use:<pre><code>
+new Ext.FormPanel({
+    height: 100,
+    renderTo: Ext.getBody(),
+    items: [{
+        xtype: 'textfield',
+        fieldLabel: 'Name',
+        labelSeparator: '...'
+    }]
+});
+</code></pre>
      */
     /**
-     * @cfg {Boolean} hideLabel True to completely hide the label element (defaults to false)
+     * @cfg {Boolean} hideLabel True to completely hide the label element (defaults to false).  By default, even if
+     * you do not specify a {@link fieldLabel} the space will still be reserved so that the field will line up with
+     * other fields that do have labels. Setting this to true will cause the field to not reserve that space.
      * <p><b>This config is only used when this Component is rendered by a Container which has been
-     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager</b></p>
+     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager.</b></p>
+     * Example use:<pre><code>
+new Ext.FormPanel({
+    height: 100,
+    renderTo: Ext.getBody(),
+    items: [{
+        xtype: 'textfield'
+        hideLabel: true
+    }]
+});
+</code></pre>
      */
     /**
-     * @cfg {String} clearCls The CSS class used to provide field clearing (defaults to 'x-form-clear-left')
+     * @cfg {String} clearCls The CSS class used to provide field clearing (defaults to 'x-form-clear-left').
      * <p><b>This config is only used when this Component is rendered by a Container which has been
-     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager</b></p>
+     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager.</b></p>
      */
     /**
-     * @cfg {String} itemCls An additional CSS class to apply to the wrapper's form item element of this field (defaults 
-     * to the container's itemCls value if set, or '').  Since it is applied to the item wrapper, it allows you to write 
-     * standard CSS rules that can apply to the field, the label (if specified) or any other element within the markup for 
+     * @cfg {String} itemCls An additional CSS class to apply to the wrapper's form item element of this field (defaults
+     * to the container's itemCls value if set, or '').  Since it is applied to the item wrapper, it allows you to write
+     * standard CSS rules that can apply to the field, the label (if specified) or any other element within the markup for
      * the field.
      * <p><b>This config is only used when this Component is rendered by a Container which has been
-     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager</b></p>
+     * configured to use the {@link Ext.form.FormLayout FormLayout} layout manager.</b></p>
      * Example use:<pre><code>
 // Apply a style to the field's label:
 &lt;style>
@@ -283,7 +325,7 @@
 
 new Ext.FormPanel({
 	height: 100,
-	renderTo: document.body,
+	renderTo: Ext.getBody(),
 	items: [{
 		xtype: 'textfield',
 		fieldLabel: 'Name',
@@ -298,7 +340,12 @@
 
     /**
      * @cfg {String} id
-     * The unique id of this component (defaults to an auto-assigned id).
+     * The unique id of this component (defaults to an auto-assigned id). You should assign an id if you need to
+     * be able to access the component later and you do not have an object reference available (e.g., using
+     * {@link Ext.ComponentMgr#getCmp}). Note that this id will also be used as the element id for the containing
+     * HTML element that is rendered to the page for this component. This allows you to write id-based CSS rules to
+     * style the specific instance of this component uniquely, and also to select sub-elements using this
+     * component's id as the parent.
      */
     /**
      * @cfg {String/Object} autoEl
@@ -365,7 +412,7 @@
      * @cfg {Mixed} applyTo
      * The id of the node, a DOM node or an existing Element corresponding to a DIV that is already present in
      * the document that specifies some structural markup for this component. Not all components support applyTo. Use of
-     * applyTo assumes all markup and elements are in the spots where they should be and the component can be rendered immediately (turns off deferred rendering). It should be used SPARINGLY. 
+     * applyTo assumes all markup and elements are in the spots where they should be and the component can be rendered immediately (turns off deferred rendering). It should be used SPARINGLY.
      * For standard rendering using existing markup, use the "el" config. When applyTo is used, constituent parts of the component can also be specified by id or CSS class name within
      * the main element, and the component being created may attempt to create its subcomponents from that markup if applicable. Using this config, a call to render() is
      * not required.  If applyTo is specified, any value passed for {@link #renderTo} will be ignored and the target
@@ -380,12 +427,14 @@
     /**
      * @cfg {Boolean} stateful
      * <p>A flag which causes the Component to attempt to restore the state of internal properties
-     * from a saved state on startup.</p>
+     * from a saved state on startup. The component must have either a {@link #stateId} or {@link #id}
+     * assigned for state to be managed.  Auto-generated ids are not guaranteed to be stable across page
+     * loads and cannot be relied upon to save and restore the same state for a component.<p>
      * <p>For state saving to work, the state manager's provider must have been set to an implementation
      * of {@link Ext.state.Provider} which overrides the {@link Ext.state.Provider#set set}
      * and {@link Ext.state.Provider#get get} methods to save and recall name/value pairs.
      * A built-in implementation, {@link Ext.state.CookieProvider} is available.</p>
-     * <p>To set the state provider for the current page:</p>    
+     * <p>To set the state provider for the current page:</p>
      * <pre><code>
 Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
 </code></pre>
@@ -406,7 +455,8 @@
      */
     /**
      * @cfg {String} stateId
-     * The unique id for this component to use for state management purposes (defaults to the component id).
+     * The unique id for this component to use for state management purposes (defaults to the component id if one was
+     * set, otherwise null if the component is using a generated id).
      * <p>See {@link #stateful} for an explanation of saving and restoring Component state.</p>
      */
     /* //internal - to be set by subclasses
@@ -527,7 +577,7 @@
     initComponent : Ext.emptyFn,
 
     /**
-     * <p>Render this Components into the passed HTML element.</p>
+     * <p>Render this Component into the passed HTML element.</p>
      * <p><b>If you are using a {@link Ext.Container Container} object to house this Component, then
      * do not use the render method.</b></p>
      * <p>A Container's child Components are rendered by that Container's
@@ -545,7 +595,7 @@
      * configure the Container with a layout manager which creates and manages the type of layout you
      * have in mind.</p>
      * <p><b>Omitting the Container's {@link Ext.Container#layout layout} config means that a basic
-     * layout manager is used which does nothnig but render child components sequentially into the
+     * layout manager is used which does nothing but render child components sequentially into the
      * Container. No sizing or positioning will be performed in this situation.</b></p>
      * @param {Element/HTMLElement/String} container (optional) The element this Component should be
      * rendered into. If it is being created from existing markup, this should be omitted.
@@ -595,24 +645,49 @@
             if(this.stateful !== false){
                 this.initStateEvents();
             }
+            this.initRef();
+            this.fireEvent("afterrender", this);
         }
         return this;
     },
 
+    initRef : function(){
+        if(this.ref){
+            var levels = this.ref.split('/');
+            var last = levels.length, i = 0;
+            var t = this;
+            while(i < last){
+                if(t.ownerCt){
+                    t = t.ownerCt;
+                }
+                i++;
+            }
+            t[levels[--i]] = this;
+        }
+    },
+
     // private
     initState : function(config){
         if(Ext.state.Manager){
-            var state = Ext.state.Manager.get(this.stateId || this.id);
-            if(state){
-                if(this.fireEvent('beforestaterestore', this, state) !== false){
-                    this.applyState(state);
-                    this.fireEvent('staterestore', this, state);
+            var id = this.getStateId();
+            if(id){
+                var state = Ext.state.Manager.get(id);
+                if(state){
+                    if(this.fireEvent('beforestaterestore', this, state) !== false){
+                        this.applyState(state);
+                        this.fireEvent('staterestore', this, state);
+                    }
                 }
             }
         }
     },
 
     // private
+    getStateId : function(){
+        return this.stateId || ((this.id.indexOf('ext-comp-') == 0 || this.id.indexOf('ext-gen') == 0) ? null : this.id);
+    },
+
+    // private
     initStateEvents : function(){
         if(this.stateEvents){
             for(var i = 0, e; e = this.stateEvents[i]; i++){
@@ -636,17 +711,20 @@
     // private
     saveState : function(){
         if(Ext.state.Manager){
-            var state = this.getState();
-            if(this.fireEvent('beforestatesave', this, state) !== false){
-                Ext.state.Manager.set(this.stateId || this.id, state);
-                this.fireEvent('statesave', this, state);
+            var id = this.getStateId();
+            if(id){
+                var state = this.getState();
+                if(this.fireEvent('beforestatesave', this, state) !== false){
+                    Ext.state.Manager.set(id, state);
+                    this.fireEvent('statesave', this, state);
+                }
             }
         }
     },
 
     /**
      * Apply this component to existing markup that is valid. With this function, no call to render() is required.
-     * @param {String/HTMLElement} el 
+     * @param {String/HTMLElement} el
      */
     applyToMarkup : function(el){
         this.allowDomMove = false;
@@ -700,7 +778,7 @@
             }
             if(this.overCls) {
                 this.el.addClassOnOver(this.overCls);
-            }            
+            }
         }
     },
 
@@ -998,7 +1076,7 @@
      * true, the container will be returned. The passed function is called with the arguments (container, this component).
      * @param {Function} fcn
      * @param {Object} scope (optional)
-     * @return {Array} Array of Ext.Components
+     * @return {Ext.Container} The first Container for which the custom function returns true
      */
     findParentBy: function(fn) {
         for (var p = this.ownerCt; (p != null) && !fn(p, this); p = p.ownerCt);
@@ -1008,7 +1086,7 @@
     /**
      * Find a container above this component at any level by xtype or class
      * @param {String/Class} xtype The xtype string for a component, or the class of the component directly
-     * @return {Container} The found container
+     * @return {Ext.Container} The first Container which matches the given xtype or class
      */
     findParentByType: function(xtype) {
         return typeof xtype == 'function' ?
@@ -1041,6 +1119,10 @@
         item.on(ename, fn, scope, opt);
     },
 
+    /**
+     * Returns the next component in the owning container
+     * @return Ext.Component
+     */
     nextSibling : function(){
         if(this.ownerCt){
             var index = this.ownerCt.items.indexOf(this);
@@ -1051,6 +1133,10 @@
         return null;
     },
 
+    /**
+     * Returns the previous component in the owning container
+     * @return Ext.Component
+     */
     previousSibling : function(){
         if(this.ownerCt){
             var index = this.ownerCt.items.indexOf(this);
@@ -1059,6 +1145,14 @@
             }
         }
         return null;
+    },
+
+    /**
+     * Provides the link for Observable's fireEvent method to bubble up the ownership hierarchy.
+     * @return the Container which owns this Component.
+     */
+    getBubbleTarget : function(){
+        return this.ownerCt;
     }
 });
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/ComponentMgr.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/ComponentMgr.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/ComponentMgr.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.ComponentMgr
  * <p>Provides a registry of all Components (instances of {@link Ext.Component} or any subclass
@@ -103,9 +95,10 @@
          * @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 new types[config.xtype || defaultType](config);
+            return config.render ? config : new types[config.xtype || defaultType](config);
         },
 
         registerPlugin : function(ptype, cls){
@@ -128,4 +121,5 @@
  * @method reg
  */
 Ext.reg = Ext.ComponentMgr.registerType; // this will be called a lot internally, shorthand to keep the bytes down
-Ext.preg = Ext.ComponentMgr.registerPlugin;
\ No newline at end of file
+Ext.preg = Ext.ComponentMgr.registerPlugin;
+Ext.create = Ext.ComponentMgr.create;

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Container.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Container.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Container.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,20 +6,44 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Container
  * @extends Ext.BoxComponent
- * <p>Base class for any {@link Ext.BoxComponent} that can contain other components. This class is intended
- * to be extended and should generally not need to be created directly via the new keyword. {@link Ext.Panel},
- * {@link Ext.Window} and {@link Ext.TabPanel} are the most commonly used Container classes.</p>
+ * <p>Base class for any {@link Ext.BoxComponent} that can contain other components. The most commonly
+ * used Container classes are {@link Ext.Panel}, {@link Ext.Window} and {@link Ext.TabPanel}, but you can
+ * create a lightweight Container to encapsulate an HTML element that is created to your
+ * specifications at render time by using the {@link Ext.Component#autoEl autoEl} config option
+ * which takes the form of a {@link Ext.DomHelper DomHelper} specification. If you do not need
+ * the capabilities offered by the above mentioned classes, for instance embedded
+ * {@link Ext.layout.ColumnLayout column} layouts inside FormPanels, then this is a useful technique.</p>
+ * <p>The code below illustrates both how to explicitly <i>create</i> a Container, and how to implicitly
+ * create one using the <b><tt>'container'</tt></b> xtype:<pre><code>
+var embeddedColumns = new Ext.Container({
+    autoEl: {},
+    layout: 'column',
+    defaults: {
+        xtype: 'container',
+        autoEl: {},
+        layout: 'form',
+        columnWidth: 0.5,
+        style: {
+            padding: '10px'
+        }
+    },
+    items: [{
+        items: {
+            xtype: 'datefield',
+            name: 'startDate',
+            fieldLabel: 'Start date'
+        }
+    }, {
+        items: {
+            xtype: 'datefield',
+            name: 'endDate',
+            fieldLabel: 'End date'
+        }
+    }]
+});</code></pre></p>
  * Containers handle the basic behavior of containing items, namely adding, inserting and removing them.
  * The specific layout logic required to visually render contained items is delegated to any one of the different
  * {@link #layout} classes available.</p>
@@ -59,8 +83,17 @@
     /**
      * @cfg {String} layout
      * The layout type to be used in this container.  If not specified, a default {@link Ext.layout.ContainerLayout}
-     * will be created and used.  Valid values are: absolute, accordion, anchor, border, card, column, fit, form and table.
-     * Specific config values for the chosen layout type can be specified using {@link #layoutConfig}.
+     * will be created and used. Specific config values for the chosen layout type can be specified using 
+     * {@link #layoutConfig}. Valid values are:<ul class="mdetail-params">
+     * <li>absolute</li>
+     * <li>accordion</li>
+     * <li>anchor</li>
+     * <li>border</li>
+     * <li>card</li>
+     * <li>column</li>
+     * <li>fit</li>
+     * <li>form</li>
+     * <li>table</li></ul>
      */
     /**
      * @cfg {Object} layoutConfig
@@ -126,8 +159,7 @@
     /** @cfg {String} defaultType
      * <p>The default {@link Ext.Component xtype} of child Components to create in this Container when
      * a child item is specified as a raw configuration object, rather than as an instantiated Component.</p>
-     * <p>This usually defaults to 'panel', but for {@link Ext.form.FormPanel} and {@link Ext.form.FieldSet},
-     * the defaultType is 'textfield'.</p>
+     * <p>Defaults to 'panel'.</p>
      */
     defaultType: 'panel',
 
@@ -162,6 +194,7 @@
             'beforeremove',
             /**
              * @event add
+             * @bubbles
              * Fires after any {@link Ext.Component} is added or inserted into the container.
              * @param {Ext.Container} this
              * @param {Ext.Component} component The component that was added
@@ -170,6 +203,7 @@
             'add',
             /**
              * @event remove
+             * @bubbles
              * Fires after any {@link Ext.Component} is removed from the container.
              * @param {Ext.Container} this
              * @param {Ext.Component} component The component that was removed
@@ -278,6 +312,8 @@
      * config property. If no xtype is configured, the Container's {@link #defaultType}
      * is used.<br><br>
      * For a list of all available xtypes, see {@link Ext.Component}.
+     * @param {Ext.Component/Object} component2
+     * @param {Ext.Component/Object} etc
      * @return {Ext.Component} component The Component (or config object) that was
      * added with the Container's default config values applied.
      * <p>example:</p><pre><code>
@@ -305,7 +341,7 @@
         if(this.fireEvent('beforeadd', this, c, pos) !== false && this.onBeforeAdd(c) !== false){
             this.items.add(c);
             c.ownerCt = this;
-            this.fireEvent('add', this, c, pos);
+            this.fireEvent(true, 'add', this, c, pos);
         }
         return c;
     },
@@ -348,7 +384,7 @@
         if(this.fireEvent('beforeadd', this, c, index) !== false && this.onBeforeAdd(c) !== false){
             this.items.insert(index, c);
             c.ownerCt = this;
-            this.fireEvent('add', this, c, index);
+            this.fireEvent(true, 'add', this, c, index);
         }
         return c;
     },
@@ -396,7 +432,7 @@
             if(this.layout && this.layout.activeItem == c){
                 delete this.layout.activeItem;
             }
-            this.fireEvent('remove', this, c);
+            this.fireEvent(true, 'remove', this, c);
         }
         return c;
     },
@@ -425,7 +461,7 @@
 
     // private
     createComponent : function(config){
-        return Ext.ComponentMgr.create(config, this.defaultType);
+        return Ext.create(config, this.defaultType);
     },
 
     /**

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/CycleButton.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/CycleButton.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/CycleButton.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.CycleButton
  * @extends Ext.SplitButton

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/DataView.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/DataView.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/DataView.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.DataView
  * @extends Ext.BoxComponent

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/DatePicker.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/DatePicker.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/DatePicker.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.DatePicker
  * @extends Ext.Component
@@ -715,7 +707,14 @@
     // private
     beforeDestroy : function() {
         if(this.rendered){
-            Ext.destroy(this.mbtn, this.todayBtn);
+            Ext.destroy(
+                this.leftClickRpt,
+                this.rightClickRpt,
+                this.monthPicker,
+                this.eventEl,
+                this.mbtn,
+                this.todayBtn
+            );
         }
     }
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Editor.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Editor.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Editor.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,32 +6,33 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Editor
  * @extends Ext.Component
  * 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)
      */
     /**
@@ -149,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';
@@ -365,7 +369,7 @@
     },
 
     beforeDestroy : function(){
-        this.field.destroy();
+        Ext.destroy(this.field);
         this.field = null;
     }
 });

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Layer.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Layer.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Layer.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,456 +6,448 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * 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/LoadMask.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/LoadMask.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/LoadMask.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.LoadMask
  * A simple utility class for generically masking elements while loading data.  If the {@link #store}

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/MessageBox.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/MessageBox.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/MessageBox.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.MessageBox
  * <p>Utility class for generating different styles of message boxes.  The alias Ext.Msg can also be used.<p/>

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/PagingToolbar.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/PagingToolbar.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/PagingToolbar.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,18 +6,12 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.PagingToolbar
  * @extends Ext.Toolbar
- * A specialized toolbar that is bound to a {@link Ext.data.Store} and provides automatic paging controls.
+ * <p>A specialized toolbar that is bound to a {@link Ext.data.Store} and provides automatic paging control. This
+ * Component {@link Ext.data.Store#load load}s blocks of data into the Store passing parameters who's names are
+ * specified by the store's {@link Ext.data.Store#paramNames paramNames} property.</p>
  * @constructor
  * Create a new PagingToolbar
  * @param {Object} config The config object
@@ -99,6 +93,7 @@
      */
     paramNames : {start: 'start', limit: 'limit'},
 
+    // private
     constructor: function(config) {
 	    var pagingItems = [this.first = new T.Button({
 	        tooltip: this.firstText,
@@ -164,6 +159,7 @@
         this.on('afterlayout', this.onFirstLayout, this, {single: true});
 	},
 
+    // private
 	onFirstLayout: function(ii) {
     	this.inputItem.el.on({
 	    	keydown: {fn: this.onPagingKeydown, scope: this},
@@ -235,6 +231,7 @@
         this.refresh.enable();
     },
 
+    // private
     readPage : function(d){
         var v = this.field.value, pageNum;
         if (!v || isNaN(pageNum = parseInt(v, 10))) {
@@ -280,6 +277,7 @@
         }
     },
 
+    // private
     doLoad : function(start){
         var o = {}, pn = this.paramNames;
         o[pn.start] = start;
@@ -338,6 +336,14 @@
         this.store = store;
         this.paramNames.start = store.paramNames.start;
         this.paramNames.limit = store.paramNames.limit;
+    },
+    
+    // private
+    onDestroy : function(){
+        if(this.store){
+            this.unbind(this.store);
+        }
+        Ext.PagingToolbar.superclass.onDestroy.call(this);
     }
 });
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Panel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Panel.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Panel.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Panel
  * @extends Ext.Container
@@ -276,11 +268,17 @@
     /**
      * @cfg {String/Object} html
      * An HTML fragment, or a {@link Ext.DomHelper DomHelper} specification to use
-     * as the panel's body content (defaults to '').
+     * as the panel's body content (defaults to ''). The HTML content is added by the Panel's
+     * afterRender method, and so the document will not contain this HTML at the time the render
+     * event is fired. This content is inserted into the body <i>before</i> any configured
+     * {@link #contentEl} is appended.
      */
     /**
      * @cfg {String} contentEl
-     * The id of an existing HTML node to use as the panel's body content (defaults to '').
+     * The id of an existing HTML node to use as the panel's body content (defaults to ''). The
+     * specified Element is appended to the Panel's body Element by the Panel's afterRender method
+     * <i>after any configured {@link #html HTML} has been inserted</i>, and so the document will
+     * not contain this HTML at the time the render event is fired.
      */
     /**
      * @cfg {Object/Array} keys
@@ -419,6 +417,10 @@
      */
     minButtonWidth:75,
     /**
+     * @cfg {Boolean} unstyled
+     * Renders the panel unstyled
+     */
+    /**
      * @cfg {String} elements
      * A comma-delimited list of panel elements to initialize when the panel is rendered.  Normally, this list will be
      * generated automatically based on the items added to the panel at config time, but sometimes it might be useful to
@@ -535,6 +537,10 @@
             'deactivate'
         );
 
+        if(this.unstyled){
+            this.baseCls = 'x-plain';
+        }
+
         // shortcuts
         if(this.tbar){
             this.elements += ',tbar';
@@ -564,6 +570,7 @@
         }
 
         if(this.buttons){
+            this.elements += ',footer';
             var btns = this.buttons;
             /**
              * This Panel's Array of buttons as created from the <tt>buttons</tt>
@@ -574,13 +581,21 @@
             this.buttons = [];
             for(var i = 0, len = btns.length; i < len; i++) {
                 if(btns[i].render){ // button instance
-                    btns[i].ownerCt = this;
                     this.buttons.push(btns[i]);
+                }else if(btns[i].xtype){
+                    this.buttons.push(Ext.create(btns[i], 'button'));
                 }else{
                     this.addButton(btns[i]);
                 }
             }
         }
+        if(this.fbar){
+            this.elements += ',footer';
+            // if default button align and using fbar, align left by default
+            if(this.buttonAlign == 'right' && this.initialConfig.buttonAlign === undefined){
+                this.buttonAlign = 'left';
+            }
+        }
         if(this.autoLoad){
             this.on('render', this.doAutoLoad, this, {delay:10});
         }
@@ -601,6 +616,12 @@
                 el.className = this[name+'Cls'];
                 this[name] = Ext.get(pnode.appendChild(el));
             }
+            if(this[name+'CssClass']){
+                this[name].addClass(this[name+'CssClass']);
+            }
+            if(this[name+'Style']){
+                this[name].applyStyles(this[name+'Style']);
+            }
         }
     },
 
@@ -609,7 +630,6 @@
         Ext.Panel.superclass.onRender.call(this, ct, position);
 
         this.createClasses();
-
         if(this.el){ // existing markup
             this.el.addClass(this.baseCls);
             this.header = this.el.down('.'+this.headerCls);
@@ -679,6 +699,10 @@
             }
         }
 
+        if(this.padding !== undefined) {
+            this.body.setStyle('padding', this.body.addUnits(this.padding));
+        }
+
         if(this.border === false){
             this.el.addClass(this.baseCls + '-noborder');
             this.body.addClass(this.bodyCls + '-noborder');
@@ -700,10 +724,6 @@
            this.body.addClass(this.bodyCls + '-noborder');
         }
 
-        if(this.bodyStyle){
-           this.body.applyStyles(this.bodyStyle);
-        }
-
         this.bwrap.enableDisplayMode('block');
 
         if(this.header){
@@ -747,37 +767,44 @@
         }
 
         if(this.buttons && this.buttons.length > 0){
-            // tables are required to maintain order and for correct IE layout
-            var tb = this.footer.createChild({cls:'x-panel-btns-ct', cn: {
-                cls:"x-panel-btns x-panel-btns-"+this.buttonAlign,
-                html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'
-            }}, null, true);
-            var tr = tb.getElementsByTagName('tr')[0];
-            for(var i = 0, len = this.buttons.length; i < len; i++) {
-                var b = this.buttons[i];
-                var td = document.createElement('td');
-                td.className = 'x-panel-btn-td';
-                b.render(tr.appendChild(td));
+            this.fbar = new Ext.Toolbar({
+                items: this.buttons,
+                toolbarCls: 'x-panel-fbar'
+            });
+        }
+        if(this.fbar){
+            this.fbar = Ext.create(this.fbar, 'toolbar');
+            this.fbar.enableOverflow = false;
+            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.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.ComponentMgr.create(this.topToolbar, 'toolbar');
+                this.topToolbar = Ext.create(this.topToolbar, 'toolbar');
             }
+            this.topToolbar.ownerCt = this;
             this.topToolbar.render(this.tbar);
-            this.topToolbar.ownerCt = this;
         }
         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.ComponentMgr.create(this.bottomToolbar, 'toolbar');
+                this.bottomToolbar = Ext.create(this.bottomToolbar, 'toolbar');
             }
+            this.bottomToolbar.ownerCt = this;
             this.bottomToolbar.render(this.bbar);
-            this.bottomToolbar.ownerCt = this;
         }
     },
 
@@ -858,7 +885,6 @@
             Ext.apply(bc, config);
         }
         var btn = new Ext.Button(bc);
-        btn.ownerCt = this;
         if(!this.buttons){
             this.buttons = [];
         }
@@ -881,30 +907,46 @@
             Ext.Panel.prototype.toolTemplate = tt;
         }
         for(var i = 0, a = arguments, len = a.length; i < len; i++) {
-            var tc = a[i], 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;
+            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);
             }
-            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();
+        }
+    },
+
     // private
     onShow : function(){
         if(this.floating){
@@ -934,9 +976,6 @@
 
     // private
     afterRender : function(){
-        if(this.fromMarkup && this.height === undefined && !this.autoHeight){
-            this.height = this.el.getHeight();
-        }
         if(this.floating && !this.hidden && !this.initHidden){
             this.el.show();
         }
@@ -1144,7 +1183,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.buttonAlign != 'center'){
+	                    this.fbar.setSize(w - this.fbar.container.getFrameWidth('lr'));
+	                }
                     this.body.setWidth(w);
                 }else if(w == 'auto'){
                     this.body.setWidth(w);
@@ -1152,24 +1206,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());
                 }
@@ -1210,7 +1251,7 @@
      * @return {Number} The frame width
      */
     getFrameWidth : function(){
-        var w = this.el.getFrameWidth('lr');
+        var w = this.el.getFrameWidth('lr')+this.bwrap.getFrameWidth('lr');
 
         if(this.frame){
             var l = this.bwrap.dom.firstChild;
@@ -1227,7 +1268,7 @@
      * @return {Number} The frame height
      */
     getFrameHeight : function(){
-        var h  = this.el.getFrameWidth('tb');
+        var h  = this.el.getFrameWidth('tb')+this.bwrap.getFrameWidth('tb');
         h += (this.tbar ? this.tbar.getHeight() : 0) +
              (this.bbar ? this.bbar.getHeight() : 0);
 
@@ -1275,7 +1316,10 @@
     },
 
     /**
-     * Sets the title text for the panel and optionally the icon class.
+     * <p>Sets the title text for the panel and optionally the icon class.</p>
+     * <p>In order to be able to set the title, a header element must have been created
+     * for the Panel. This is triggered either by configuring the Panel with a non-blank title,
+     * or configuring it with <tt><b>{@link #header}: true</b></tt>.</p>
      * @param {String} title The title text to set
      * @param {String} iconCls (optional) iconCls A user-defined CSS class that provides the icon image for this panel
      */
@@ -1328,12 +1372,19 @@
 
     // private
     beforeDestroy : function(){
+        if(this.header){
+            this.header.removeAllListeners();
+            if(this.headerAsText){
+                Ext.Element.uncache(this.header.child('span'));
+            }
+        }
         Ext.Element.uncache(
             this.header,
             this.tbar,
             this.bbar,
             this.footer,
-            this.body
+            this.body,
+            this.bwrap
         );
         if(this.tools){
             for(var k in this.tools){
@@ -1347,7 +1398,8 @@
         }
         Ext.destroy(
             this.topToolbar,
-            this.bottomToolbar
+            this.bottomToolbar,
+            this.fbar
         );
         Ext.Panel.superclass.beforeDestroy.call(this);
     },

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/PanelDD.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/PanelDD.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/PanelDD.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /* // Internal developer documentation -- will not show up in API docs
  * @class Ext.dd.PanelProxy
  * A custom drag proxy implementation specific to {@link Ext.Panel}s. This class is primarily used internally

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/ProgressBar.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/ProgressBar.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/ProgressBar.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.ProgressBar
  * @extends Ext.BoxComponent

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Resizable.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Resizable.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Resizable.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Resizable
  * @extends Ext.util.Observable
@@ -614,22 +606,26 @@
      * @param {Boolean} removeEl (optional) true to remove the element from the DOM
      */
     destroy : function(removeEl){
-        this.proxy.remove();
+        if(this.dd){
+            this.dd.destroy();
+        }
         if(this.overlay){
-            this.overlay.removeAllListeners();
-            this.overlay.remove();
+            Ext.destroy(this.overlay);
+            this.overlay = null;
         }
+        Ext.destroy(this.proxy);
+        this.proxy = null;
+        
         var ps = Ext.Resizable.positions;
         for(var k in ps){
             if(typeof ps[k] != "function" && this[ps[k]]){
-                var h = this[ps[k]];
-                h.el.removeAllListeners();
-                h.el.remove();
+                this[ps[k]].destroy();
             }
         }
         if(removeEl){
             this.el.update("");
-            this.el.remove();
+            Ext.destroy(this.el);
+            this.el = null;
         }
     },
 
@@ -676,6 +672,7 @@
 
 // private
 Ext.Resizable.Handle.prototype = {
+    // private
     afterResize : function(rz){
         // do nothing    
     },
@@ -690,7 +687,12 @@
     // private
     onMouseOut : function(e){
         this.rz.handleOut(this, e);
-    }  
+    },
+    // private
+    destroy : function(){
+        Ext.destroy(this.el);
+        this.el = null;
+    }
 };
 
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Shadow.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Shadow.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Shadow.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Shadow
  * Simple class that can provide a shadow effect for any element.  Note that the element MUST be absolutely positioned,

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Slider.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Slider.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Slider.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Slider
  * @extends Ext.BoxComponent

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/SplitBar.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/SplitBar.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/SplitBar.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.SplitBar
  * @extends Ext.util.Observable
@@ -152,8 +144,8 @@
         this.overlay.show();
         Ext.get(this.proxy).setDisplayed("block");
         var size = this.adapter.getElementSize(this);
-        this.activeMinSize = this.getMinimumSize();;
-        this.activeMaxSize = this.getMaximumSize();;
+        this.activeMinSize = this.getMinimumSize();
+        this.activeMaxSize = this.getMaximumSize();
         var c1 = size - this.activeMinSize;
         var c2 = Math.max(this.activeMaxSize - size, 0);
         if(this.orientation == Ext.SplitBar.HORIZONTAL){
@@ -183,7 +175,7 @@
         Ext.get(this.proxy).setDisplayed(false);
         var endPoint = Ext.lib.Event.getXY(e);
         if(this.overlay){
-            this.overlay.remove();
+            Ext.destroy(this.overlay);
             delete this.overlay;
         }
         var newSize;
@@ -279,7 +271,7 @@
             this.shim.remove();
         }
         this.dd.unreg();
-        Ext.removeNode(this.proxy);
+        Ext.destroy(Ext.get(this.proxy));
         if(removeEl){
             this.el.remove();
         }

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/SplitButton.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/SplitButton.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/SplitButton.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.SplitButton
  * @extends Ext.Button

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/TabPanel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/TabPanel.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/TabPanel.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.TabPanel
  * <p>A basic tab container. TabPanels can be used exactly like a standard {@link Ext.Panel} for layout
@@ -51,14 +43,14 @@
         myTabPanel.setActiveTab(newComponent);
     },
     failure: function() {
-    	Ext.Msg.alert("Grid create failed", "Server communication failure");
+        Ext.Msg.alert("Grid create failed", "Server communication failure");
     }
 });
 </code></pre>
  * <p>The server script would need to return an executable Javascript statement which, when processed
  * using <tt>eval()</tt> will return either a config object with an {@link Ext.Component#xtype xtype},
  * or an instantiated Component. For example:</p><pre><code>
-{function() {
+(function() {
     function formatDate(value){
         return value ? value.dateFormat('M d, Y') : '';
     };
@@ -68,7 +60,7 @@
         baseParams: {
             startDate: '01/01/2008',
             endDate: '01/31/2008'
-        }
+        },
         reader: new Ext.data.JsonReader({
             record: 'transaction',
             id: 'id',
@@ -150,6 +142,11 @@
      * @cfg {Boolean} layoutOnTabChange Set to true to do a layout of tab items as tabs are changed.
      */
     /**
+     * @cfg {String} tabCls <b>This config option is used on <u>child Components</u> of ths TabPanel.</b> A CSS
+     * class name applied to the tab strip item representing the child Component, allowing special
+     * styling to be applied.
+     */
+    /**
      * @cfg {Boolean} monitorResize True to automatically monitor window resize events and rerender the layout on
      * browser resize (defaults to true).
      */
@@ -158,6 +155,10 @@
      * @cfg {Boolean} deferredRender Internally, the TabPanel uses a {@link Ext.layout.CardLayout} to manage its tabs.
      * This property will be passed on to the layout as its {@link Ext.layout.CardLayout#deferredRender} config value,
      * determining whether or not each tab is rendered only when first accessed (defaults to true).
+     * <p>Be aware that leaving deferredRender as <b><tt>true</tt></b> means that, if the TabPanel is within
+     * a {@link Ext.form.FormPanel form}, then until a tab is activated, any Fields within that tab will not
+     * be rendered, and will therefore not be submitted and will not be available to either
+     * {@link Ext.form.BasicForm#getValues getValues} or {@link Ext.form.BasicForm#setValues setValues}.</p>
      */
     deferredRender : true,
     /**
@@ -326,6 +327,9 @@
             this.stack = Ext.TabPanel.AccessStack();
         }
         this.initItems();
+        if(this.activeTab !== undefined && typeof this.activeTab != 'object'){
+           this.activeTab = this.items.get(this.activeTab);
+        }
     },
 
     // private
@@ -355,7 +359,7 @@
         var beforeEl = (this.tabPosition=='bottom' ? this.stripWrap : null);
         this.stripSpacer = st.createChild({cls:'x-tab-strip-spacer'}, beforeEl);
         this.strip = new Ext.Element(this.stripWrap.dom.firstChild);
-        
+
         this.edge = this.strip.createChild({tag:'li', cls:'x-tab-edge'});
         this.strip.createChild({cls:'x-clear'});
 
@@ -387,8 +391,8 @@
     // private
     initEvents : function(){
         Ext.TabPanel.superclass.initEvents.call(this);
-        this.on('add', this.onAdd, this);
-        this.on('remove', this.onRemove, this);
+        this.on('add', this.onAdd, this, {target: this});
+        this.on('remove', this.onRemove, this, {target: this});
 
         this.strip.on('mousedown', this.onStripMouseDown, this);
         this.strip.on('contextmenu', this.onStripContextMenu, this);
@@ -480,7 +484,7 @@
         if(item.tabCls){
             cls += ' ' + item.tabCls;
         }
-        
+
         var p = {
             id: this.id + this.idDelimiter + item.getItemId(),
             text: item.title,
@@ -496,6 +500,8 @@
         if(item.tabTip){
             Ext.fly(el).child('span.x-tab-strip-text', true).qtip = item.tabTip;
         }
+        item.tabEl = el;
+
         item.on('disable', this.onItemDisabled, this);
         item.on('enable', this.onItemEnabled, this);
         item.on('titlechange', this.onItemTitleChanged, this);
@@ -526,7 +532,7 @@
 
     // private
     onRemove : function(tp, item){
-        Ext.removeNode(this.getTabEl(item));
+        Ext.destroy(Ext.get(this.getTabEl(item)));
         this.stack.remove(item);
         item.un('disable', this.onItemDisabled, this);
         item.un('enable', this.onItemEnabled, this);
@@ -580,7 +586,7 @@
      * Gets the DOM element for tab strip item which activates the
      * child panel with the specified ID. Access this to change the visual treatment of the
      * item, for example by changing the CSS class name.
-     * @param {Panel} tab The tab
+     * @param {Panel/Number} tab The tab component, or the tab's index
      * @return {HTMLElement} The DOM node
      */
     getTabEl : function(item){
@@ -917,6 +923,22 @@
         var pos = this.getScrollPos();
         this.scrollLeft[pos == 0 ? 'addClass' : 'removeClass']('x-tab-scroller-left-disabled');
         this.scrollRight[pos >= (this.getScrollWidth()-this.getScrollArea()) ? 'addClass' : 'removeClass']('x-tab-scroller-right-disabled');
+    },
+
+    // private
+    beforeDestroy : function() {
+        if(this.items){
+            this.items.each(function(item){
+                if(item && item.tabEl){
+                    Ext.get(item.tabEl).removeAllListeners();
+                    item.tabEl = null;
+                }
+            }, this);
+        }
+        if(this.strip){
+            this.strip.removeAllListeners();
+        }
+        Ext.TabPanel.superclass.beforeDestroy.apply(this);
     }
 
     /**

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Toolbar.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Toolbar.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Toolbar.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.layout.ToolbarLayout
  * @extends Ext.layout.ContainerLayout
@@ -98,6 +90,9 @@
     },
 
     fitToSize :function(t){
+        if(this.container.enableOverflow === false){
+            return;
+        }
         var w = t.dom.clientWidth;
         var lw = this.lastWidth || 0;
         this.lastWidth = w;
@@ -241,12 +236,8 @@
 
     trackMenus : true,
     internalDefaults: {removeMode: 'container', hideParent: true},
+    toolbarCls: 'x-toolbar',
 
-    // private
-    autoCreate: {
-        cls:'x-toolbar x-small-editor'
-    },
-
     initComponent : function(){
         T.superclass.initComponent.call(this);
 
@@ -255,7 +246,14 @@
 
     // private
     onRender : function(ct, position){
-        this.el = ct.createChild(Ext.apply({ id: this.id },this.autoCreate), position);
+        if(!this.el){
+            if(!this.autoCreate){
+                this.autoCreate = {
+                    cls: this.toolbarCls + ' x-small-editor'
+                }
+            }
+            this.el = ct.createChild(Ext.apply({ id: this.id },this.autoCreate), position);
+        }
     },
     
     /**
@@ -300,7 +298,7 @@
                 this.addElement(el);
             }else if(typeof el == "object"){ // must be button config?
                 if(el.xtype){
-                    this.addItem(Ext.ComponentMgr.create(el, 'button'));
+                    this.addItem(Ext.create(el, 'button'));
                 }else{
                     this.addButton(el);
                 }
@@ -528,7 +526,7 @@
  */
 T.Separator = Ext.extend(T.Item, {
     onRender : function(ct, position){
-        this.el = ct.createChild({tag:'span', cls:'ytb-sep'}, position);
+        this.el = ct.createChild({tag:'span', cls:'xtb-sep'}, position);
     }
 });
 Ext.reg('tbseparator', T.Separator);
@@ -551,7 +549,7 @@
  */
 T.Spacer = Ext.extend(T.Item, {
     onRender : function(ct, position){
-        this.el = ct.createChild({tag:'div', cls:'ytb-spacer'}, position);
+        this.el = ct.createChild({tag:'div', cls:'xtb-spacer', style: this.width?'width:'+this.width+'px':''}, position);
     }
 });
 Ext.reg('tbspacer', T.Spacer);

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Viewport.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Viewport.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Viewport.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Viewport
  * @extends Ext.Container

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/Window.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/Window.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/Window.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Window
  * @extends Ext.Panel
@@ -64,6 +56,17 @@
     * Ext.emptyFn (See {@link Ext#emptyFn}).
     */
     /**
+     * @cfg {Boolean} collapsed
+     * True to render the window collapsed, false to render it expanded (defaults to false). Note that if 
+     * {@link #expandOnShow} is true (the default) it will override the <tt>collapsed</tt> config and the window 
+     * will always be expanded when shown.
+     */
+    /**
+     * @cfg {Boolean} maximized
+     * True to initially display the window in a maximized state. (Defaults to false).
+     */
+    
+    /**
     * @cfg {String} baseCls
     * The base CSS class to apply to this panel's element (defaults to 'x-window').
     */
@@ -140,7 +143,7 @@
     /**
      * @cfg {Boolean} expandOnShow
      * True to always expand the window when it is displayed, false to keep it in its current state (which may be
-     * collapsed) when displayed (defaults to true).
+     * {@link #collapsed}) when displayed (defaults to true).
      */
     expandOnShow: true,
     /**
@@ -243,6 +246,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);
         }
     },
 
@@ -302,7 +306,13 @@
 
     // private
     beforeDestroy : function(){
+        this.hide();
+		if(this.doAnchor){
+		    Ext.EventManager.removeResizeListener(this.doAnchor, this);
+		    Ext.EventManager.un(window, 'scroll', this.doAnchor, this);
+        }
         Ext.destroy(
+            this.focusEl,
             this.resizer,
             this.dd,
             this.proxy,
@@ -394,14 +404,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);
     },
 
@@ -772,28 +783,34 @@
      * is a number, it is used as the buffer delay (defaults to 50ms).
      * @return {Ext.Window} this
      */
-    anchorTo : function(el, alignment, offsets, monitorScroll, _pname){
-        var action = function(){
-            this.alignTo(el, alignment, offsets);
-        };
-        Ext.EventManager.onWindowResize(action, this);
-        var tm = typeof monitorScroll;
-        if(tm != 'undefined'){
-            Ext.EventManager.on(window, 'scroll', action, this,
-                {buffer: tm == 'number' ? monitorScroll : 50});
-        }
-        action.call(this);
-        this[_pname] = action;
-        return this;
+    anchorTo : function(el, alignment, offsets, monitorScroll){
+      if(this.doAnchor){
+          Ext.EventManager.removeResizeListener(this.doAnchor, this);
+          Ext.EventManager.un(window, 'scroll', this.doAnchor, this);
+      }
+      this.doAnchor = function(){
+          this.alignTo(el, alignment, offsets);
+      };
+      Ext.EventManager.onWindowResize(this.doAnchor, this);
+      
+      var tm = typeof monitorScroll;
+      if(tm != 'undefined'){
+          Ext.EventManager.on(window, 'scroll', this.doAnchor, this,
+              {buffer: tm == 'number' ? monitorScroll : 50});
+      }
+      this.doAnchor();
+      return this;
     },
 
     /**
      * Brings this window to the front of any other visible windows
      * @return {Ext.Window} this
      */
-    toFront : function(){
+    toFront : function(e){
         if(this.manager.bringToFront(this)){
-            this.focus();
+            if(!e || !e.getTarget().focus){
+                this.focus();
+            }
         }
         return this;
     },

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/WindowManager.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/WindowManager.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/WindowManager.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.WindowGroup
  * An object that represents a group of {@link Ext.Window} instances and provides z-order management

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/Chart.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/Chart.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/Chart.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.chart.Chart = Ext.extend(Ext.FlashComponent, {
     url: "http:/"+"/yui.yahooapis.com/2.5.1/build/charts/assets/charts.swf",
     refreshBuffer: 100,

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/EventProxy.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/EventProxy.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/EventProxy.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.FlashEventProxy = {
     onEvent : function(id, e){
         var fp = Ext.getCmp(id);

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/FlashComponent.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/FlashComponent.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/FlashComponent.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.FlashComponent = Ext.extend(Ext.BoxComponent, {
     flashVersion : '9.0.45',
     backgroundColor: '#ffffff',

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/swfobject.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/swfobject.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/chart/swfobject.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /*!
  * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
  *

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Action.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Action.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Action.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.Action
  * <p>The subclasses of this class provide actions to perform upon {@link Ext.form.BasicForm Form}s.</p>
@@ -87,7 +79,7 @@
  */
 /**
  * @cfg {Number} timeout The number of milliseconds to wait for a server response before
- * failing with the {@link #failureType} as {@link #CONNECT_FAILURE}.
+ * failing with the {@link #failureType} as {@link #Action.CONNECT_FAILURE}.
  */
 /**
  * @cfg {Function} success The function to call when a valid success return packet is recieved.
@@ -127,8 +119,9 @@
  */
     type : 'default',
 /**
- * The type of failure detected. See {@link #CLIENT_INVALID}, {@link #SERVER_INVALID},
- * {@link #CONNECT_FAILURE}, {@link #LOAD_FAILURE}
+ * The type of failure detected. See {@link link Ext.form.Action#Action.CLIENT_INVALID CLIENT_INVALID},
+ * {@link link Ext.form.Action#Action.SERVER_INVALID SERVER_INVALID},
+ * {@link #link Ext.form.ActionAction.CONNECT_FAILURE CONNECT_FAILURE}, {@link Ext.form.Action#Action.LOAD_FAILURE LOAD_FAILURE}
  * @property failureType
  * @type {String}
  */

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/BasicForm.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/BasicForm.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/BasicForm.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,21 +6,31 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.BasicForm
  * @extends Ext.util.Observable
- * Supplies the functionality to do "actions" on forms and initialize Ext.form.Field types on existing markup.
- * <br><br>
- * By default, Ext Forms are submitted through Ajax, using {@link Ext.form.Action}.
- * To enable normal browser submission of an Ext Form, use the {@link #standardSubmit} config option.
+ * <p>Encapsulates the DOM &lt;form> element at the heart of the {@link Ext.form.FormPanel FormPanel} class, and provides
+ * input field management, validation, submission, and form loading services.</p>
+ * <p>By default, Ext Forms are submitted through Ajax, using an instance of {@link Ext.form.Action.Submit}.
+ * To enable normal browser submission of an Ext Form, use the {@link #standardSubmit} config option.</p>
+ * <p><h3>File Uploads</h3>{@link #fileUpload File uploads} are not performed using Ajax submission, that
+ * is they are <b>not</b> performed using XMLHttpRequests. Instead the form is submitted in the standard
+ * manner with the DOM <tt>&lt;form></tt> element temporarily modified to have its
+ * <a href="http://www.w3.org/TR/REC-html40/present/frames.html#adef-target";>target</a> set to refer
+ * to a dynamically generated, hidden <tt>&lt;iframe></tt> which is inserted into the document
+ * but removed after the return data has been gathered.</p>
+ * <p>The server response is parsed by the browser to create the document for the IFRAME. If the
+ * server is using JSON to send the return object, then the
+ * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17";>Content-Type</a> header
+ * must be set to "text/html" in order to tell the browser to insert the text unchanged into the document body.</p>
+ * <p>Characters which are significant to an HTML parser must be sent as HTML entities, so encode
+ * "&lt;" as "&amp;lt;", "&amp;" as "&amp;amp;" etc.</p>
+ * <p>The response text is retrieved from the document, and a fake XMLHttpRequest object
+ * is created containing a <tt>responseText</tt> property in order to conform to the
+ * requirements of event handlers and callbacks.</p>
+ * <p>Be aware that file upload packets are sent with the content type <a href="http://www.faqs.org/rfcs/rfc2388.html";>multipart/form</a>
+ * and some server technologies (notably JEE) may require some custom processing in order to
+ * retrieve parameter names and parameter values from the packet content.</p>
  * @constructor
  * @param {Mixed} el The form element or its id
  * @param {Object} config Configuration options
@@ -97,6 +107,8 @@
      * server is using JSON to send the return object, then the
      * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17";>Content-Type</a> header
      * must be set to "text/html" in order to tell the browser to insert the text unchanged into the document body.</p>
+     * <p>Characters which are significant to an HTML parser must be sent as HTML entities, so encode
+     * "&lt;" as "&amp;lt;", "&amp;" as "&amp;amp;" etc.</p>
      * <p>The response text is retrieved from the document, and a fake XMLHttpRequest object
      * is created containing a <tt>responseText</tt> property in order to conform to the
      * requirements of event handlers and callbacks.</p>
@@ -124,7 +136,10 @@
 
     /**
      * @cfg {Boolean} standardSubmit If set to true, standard HTML form submits are used instead of XHR (Ajax) style
-     * form submissions. (defaults to false)
+     * form submissions. (defaults to false)<br>
+     * <p><b>Note:</b> When using standardSubmit, any the options to {@link #submit} are
+     * ignored because Ext's Ajax infrastracture is bypassed. To pass extra parameters, you will need to create
+     * hidden fields within the form.</p>
      */
     /**
      * By default wait messages are displayed with Ext.MessageBox.wait. You can target a specific
@@ -157,16 +172,16 @@
     },
 
     // private
-	destroy: function() {
+    destroy: function() {
         this.items.each(function(f){
             Ext.destroy(f);
         });
         if(this.el){
-			this.el.removeAllListeners();
-			this.el.remove();
+            this.el.removeAllListeners();
+            this.el.remove();
         }
-		this.purgeListeners();
-	},
+        this.purgeListeners();
+    },
 
     /**
      * Returns true if client-side validation on the form is successful.
@@ -218,7 +233,8 @@
      * <li><b>success</b> : Function<p style="margin-left:1em">The callback that will
      * be invoked after a successful response. The function is passed the following parameters:<ul>
      * <li><code>form</code> : Ext.form.BasicForm<div class="sub-desc">The form that requested the action</div></li>
-     * <li><code>action</code> : Ext.form.Action<div class="sub-desc">The Action class. The {@link Ext.form.Action#result result}
+     * <li><code>action</code> : Ext.form.Action<div class="sub-desc">The {@link Ext.form.Action Action} object which
+     * performed the operation. The {@link Ext.form.Action#result result}
      * property of this object may be examined to perform custom postprocessing.</div></li>
      * </ul></p></li>
      * <li><b>failure</b> : Function<p style="margin-left:1em">The callback that will
@@ -227,7 +243,8 @@
      * Which type of failure is indicated in the Action's {@link Ext.form.Action#failureType failureType}.
      * The function is passed the following parameters:<ul>
      * <li><code>form</code> : Ext.form.BasicForm<div class="sub-desc">The form that requested the action</div></li>
-     * <li><code>action</code> : Ext.form.Action<div class="sub-desc">The Action class. The failure type
+     * <li><code>action</code> : Ext.form.Action<div class="sub-desc">The {@link Ext.form.Action Action} object which
+     * performed the operation. The failure type
      * will be in {@link Ext.form.Action#failureType failureType}. The {@link Ext.form.Action#result result}
      * property of this object may be examined to perform custom postprocessing.</div></li>
      * </ul></p></li>
@@ -252,7 +269,44 @@
 
     /**
      * Shortcut to do a submit action.
-     * @param {Object} options The options to pass to the action (see {@link #doAction} for details)
+     * @param {Object} options The options to pass to the action (see {@link #doAction} for details).<br>
+     * <p><b>Note:</b> this is ignored when using the {@link #standardSubmit} option.</p>
+     * <p>The following code:</p><pre><code>
+myFormPanel.getForm().submit({
+    clientValidation: true,
+    url: 'updateConsignment.php',
+    params: {
+        newStatus: 'delivered'
+    },
+    success: function(form, action) {
+       Ext.Msg.alert("Success", action.result.msg);
+    },
+    failure: function(form, action) {
+        switch (action.failureType) {
+            case Ext.form.Action.CLIENT_INVALID:
+                Ext.Msg.alert("Failure", "Form fields may not be submitted with invalid values");
+                break;
+            case Ext.form.Action.CONNECT_FAILURE:
+                Ext.Msg.alert("Failure", "Ajax communication failed");
+                break;
+            case Ext.form.Action.SERVER_INVALID:
+               Ext.Msg.alert("Failure", action.result.msg);
+       }
+    }
+});
+</code></pre>
+     * would process the following server response for a successful submission:<pre><code>
+{
+    success: true,
+    msg: 'Consignment updated'
+}
+</code></pre>
+     * and the following server response for a failed submission:<pre><code>
+{
+    success: false,
+    msg: 'You do not have permission to perform this operation'
+}
+</code></pre>
      * @return {BasicForm} this
      */
     submit : function(options){
@@ -431,8 +485,12 @@
     },
 
     /**
-     * Returns the fields in this form as an object with key/value pairs as they would be submitted using a standard form submit.
-     * If multiple fields exist with the same name they are returned as an array.
+     * <p>Returns the fields in this form as an object with key/value pairs as they would be submitted using a standard form submit.
+     * If multiple fields exist with the same name they are returned as an array.</p>
+     *
+     * <p><b>Note:</b> The values are collected from all enabled HTML input elements within the form, <u>not</u> from
+     * the Ext Field objects. This means that all returned values are Strings (or Arrays of Strings) and that the the
+     * value can potentionally be the emptyText of a field.</p>
      * @param {Boolean} asString (optional) false to return the values as an object (defaults to returning as a string)
      * @return {String/Object}
      */
@@ -475,7 +533,13 @@
     },
 
     /**
-     * Add Ext.form components to this form.
+     * Add Ext.form Components to this form's Collection. This does not result in rendering of
+     * the passed Component, it just enables the form to validate Fields, and distribute values to
+     * Fields.
+     * <p><b>You will not usually call this function. In order to be rendered, a Field must be added
+     * to a {@link Ext.Container Container}, usually an {@link Ext.form.FormPanel FormPanel}.
+     * The FormPanel to which the field is added takes care of adding the Field to the BasicForm's
+     * collection.</b></p>
      * @param {Field} field1
      * @param {Field} field2 (optional)
      * @param {Field} etc (optional)

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Checkbox.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Checkbox.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Checkbox.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.Checkbox
  * @extends Ext.form.Field
@@ -24,55 +16,30 @@
  */
 Ext.form.Checkbox = Ext.extend(Ext.form.Field,  {
     /**
-     * @cfg {String} checkedCls The CSS class to use when the control is checked (defaults to 'x-form-check-checked').
-     * Note that this class applies to both checkboxes and radio buttons and is added to the control's wrapper element.
+     * @cfg {String} focusClass The CSS class to use when the checkbox receives focus (defaults to undefined)
      */
-    checkedCls: 'x-form-check-checked',
+    focusClass : undefined,
     /**
-     * @cfg {String} focusCls The CSS class to use when the control receives input focus (defaults to 'x-form-check-focus').
-     * Note that this class applies to both checkboxes and radio buttons and is added to the control's wrapper element.
+     * @cfg {String} fieldClass The default CSS class for the checkbox (defaults to "x-form-field")
      */
-    focusCls: 'x-form-check-focus',
+    fieldClass: "x-form-field",
     /**
-     * @cfg {String} overCls The CSS class to use when the control is hovered over (defaults to 'x-form-check-over').
-     * Note that this class applies to both checkboxes and radio buttons and is added to the control's wrapper element.
+     * @cfg {Boolean} checked True if the the checkbox should render already checked (defaults to false)
      */
-    overCls: 'x-form-check-over',
-    /**
-     * @cfg {String} mouseDownCls The CSS class to use when the control is being actively clicked (defaults to 'x-form-check-down').
-     * Note that this class applies to both checkboxes and radio buttons and is added to the control's wrapper element.
-     */
-    mouseDownCls: 'x-form-check-down',
-    /**
-     * @cfg {Number} tabIndex The tabIndex for this field. Note this only applies to fields that are rendered,
-     * not those which are built via applyTo (defaults to 0, which allows the browser to manage the tab index).
-     */
-    tabIndex: 0,
-    /**
-     * @cfg {Boolean} checked True if the checkbox should render already checked (defaults to false)
-     */
     checked: false,
     /**
      * @cfg {String/Object} autoCreate A DomHelper element spec, or true for a default element spec (defaults to
-     * {tag: "input", type: "checkbox", autocomplete: "off"}).
+     * {tag: "input", type: "checkbox", autocomplete: "off"})
      */
-    defaultAutoCreate: {tag: 'input', type: 'checkbox', autocomplete: 'off'},
+    defaultAutoCreate : { tag: "input", type: 'checkbox', autocomplete: "off"},
     /**
-     * @cfg {String} boxLabel The text that appears beside the checkbox (defaults to '')
+     * @cfg {String} boxLabel The text that appears beside the checkbox
      */
     /**
      * @cfg {String} inputValue The value that should go into the generated input element's value attribute
-     * (defaults to undefined, with no value attribute)
      */
-    /**
-     * @cfg {Function} handler A function called when the {@link #checked} value changes (can be used instead of 
-     * handling the check event)
-     */
 
-    // private
-    baseCls: 'x-form-check',
-
-    // private
+	// private
     initComponent : function(){
         Ext.form.Checkbox.superclass.initComponent.call(this);
         this.addEvents(
@@ -87,122 +54,23 @@
     },
 
     // private
-    initEvents : function(){
-        Ext.form.Checkbox.superclass.initEvents.call(this);
-        this.initCheckEvents();
-    },
-
-    // private
-    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);
-    },
-
-    // private
-    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
-            });
-        }
-
-        this.imageEl = this.innerWrap.createChild({
-            tag: 'img',
-            src: Ext.BLANK_IMAGE_URL,
-            cls: this.baseCls
-        }, this.el);
-
-        if(this.checked){
-            this.setValue(true);
-        }else{
-            this.checked = this.el.dom.checked;
-        }
-        this.originalValue = this.checked;
-    },
-
-    // private
-    onDestroy : function(){
-        if(this.rendered){
-            Ext.destroy(this.imageEl, this.labelEl, this.innerWrap, this.wrap);
-        }
-        Ext.form.Checkbox.superclass.onDestroy.call(this);
-    },
-
-    // private
-    onFocus: function(e) {
-        Ext.form.Checkbox.superclass.onFocus.call(this, e);
-        this.el.addClass(this.focusCls);
-    },
-
-    // private
-    onBlur: function(e) {
-        Ext.form.Checkbox.superclass.onBlur.call(this, e);
-        this.el.removeClass(this.focusCls);
-    },
-
-    // private
     onResize : function(){
         Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
-        if(!this.boxLabel && !this.fieldLabel){
+        if(!this.boxLabel){
             this.el.alignTo(this.wrap, 'c-c');
         }
     },
 
     // private
-    onKeyUp : function(e){
-        if(e.getKey() == Ext.EventObject.SPACE){
-            this.onClick(e);
-        }
+    initEvents : function(){
+        Ext.form.Checkbox.superclass.initEvents.call(this);
+        this.el.on("click", this.onClick,  this);
+        this.el.on("change", this.onClick,  this);
     },
 
-    // private
-    onClick : function(e){
-        if (!this.disabled && !this.readOnly) {
-            this.toggleValue();
-        }
-        e.stopEvent();
-    },
-
-    // private
-    onEnable : function(){
-        Ext.form.Checkbox.superclass.onEnable.call(this);
-        this.initCheckEvents();
-    },
-
-    // private
-    onDisable : function(){
-        Ext.form.Checkbox.superclass.onDisable.call(this);
-        this.innerWrap.removeAllListeners();
-    },
-
-    toggleValue : function(){
-        this.setValue(!this.checked);
-    },
-
-    // private
+	// private
     getResizeEl : function(){
-        if(!this.resizeEl){
-            this.resizeEl = Ext.isSafari ? this.wrap : (this.wrap.up('.x-form-element', 5) || this.wrap);
-        }
-        return this.resizeEl;
+        return this.wrap;
     },
 
     // private
@@ -210,11 +78,6 @@
         return this.wrap;
     },
 
-    // private
-    getActionEl : function(){
-        return this.wrap;
-    },
-
     /**
      * Overridden and disabled. The editor element does not support standard valid/invalid marking. @hide
      * @method
@@ -227,6 +90,31 @@
     clearInvalid : Ext.emptyFn,
 
     // private
+    onRender : function(ct, position){
+        Ext.form.Checkbox.superclass.onRender.call(this, ct, position);
+        if(this.inputValue !== undefined){
+            this.el.dom.value = this.inputValue;
+        }
+        this.wrap = this.el.wrap({cls: "x-form-check-wrap"});
+        if(this.boxLabel){
+            this.wrap.createChild({tag: 'label', htmlFor: this.el.id, cls: 'x-form-cb-label', html: this.boxLabel});
+        }
+        if(this.checked){
+            this.setValue(true);
+        }else{
+            this.checked = this.el.dom.checked;
+        }
+    },
+
+    // private
+    onDestroy : function(){
+        if(this.wrap){
+            this.wrap.remove();
+        }
+        Ext.form.Checkbox.superclass.onDestroy.call(this);
+    },
+
+    // private
     initValue : Ext.emptyFn,
 
     /**
@@ -237,42 +125,27 @@
         if(this.rendered){
             return this.el.dom.checked;
         }
-        return this.checked;
+        return false;
     },
 
+	// private
+    onClick : function(){
+        if(this.el.dom.checked != this.checked){
+            this.setValue(this.el.dom.checked);
+        }
+    },
+
     /**
      * Sets the checked state of the checkbox.
      * @param {Boolean/String} checked True, 'true', '1', or 'on' to check the checkbox, any other value will uncheck it.
      */
-    setValue : function(v) {
-        var checked = this.checked;
+    setValue : function(v){
         this.checked = (v === true || v === 'true' || v == '1' || String(v).toLowerCase() == 'on');
-        
-        if(this.rendered){
+        if(this.el && this.el.dom){
             this.el.dom.checked = this.checked;
             this.el.dom.defaultChecked = this.checked;
-            this.wrap[this.checked? 'addClass' : 'removeClass'](this.checkedCls);
         }
-        
-        if(checked != this.checked){
-            this.fireEvent("check", this, this.checked);
-            if(this.handler){
-                this.handler.call(this.scope || this, this, this.checked);
-            }
-        }
+        this.fireEvent("check", this, this.checked);
     }
-
-    /**
-     * @cfg {Mixed} value
-     * @hide
-     */
-    /**
-     * @cfg {String} disabledClass
-     * @hide
-     */
-    /**
-     * @cfg {String} focusClass
-     * @hide
-     */
 });
-Ext.reg('checkbox', Ext.form.Checkbox);
+Ext.reg('checkbox', Ext.form.Checkbox);
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/CheckboxGroup.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/CheckboxGroup.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/CheckboxGroup.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.CheckboxGroup
  * @extends Ext.form.Field
@@ -24,6 +16,10 @@
  */
 Ext.form.CheckboxGroup = Ext.extend(Ext.form.Field, {
     /**
+     * @cfg {Array} items An Array of {@link Ext.form.Checkbox Checkbox}es or Checkbox config objects
+     * to arrange in the group.
+     */
+    /**
      * @cfg {String/Number/Array} columns Specifies the number of columns to use when displaying grouped
      * checkbox/radio controls using automatic layout.  This config can take several types of values:
      * <ul><li><b>'auto'</b> : <p class="sub-desc">The controls will be rendered one per column on one row and the width

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Combo.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Combo.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Combo.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.ComboBox
  * @extends Ext.form.TriggerField
@@ -43,7 +35,7 @@
     /**
      * @cfg {Ext.data.Store/Array} store The data source to which this combo is bound (defaults to undefined).  This can be
      * any {@link Ext.data.Store} subclass, a 1-dimensional array (e.g., ['Foo','Bar']) or a 2-dimensional array (e.g.,
-     * [['f','Foo'],['b','Bar']]).  Arrays will be converted to a {@link Ext.data.SimpleStore} internally.
+     * [['f','Foo'],['b','Bar']]).  Arrays will be converted to a {@link Ext.data.ArrayStore} internally.
      * 1-dimensional arrays will automatically be expanded (each array item will be the combo value and text) and
      * for multi-dimensional arrays, the value in index 0 of each item will be assumed to be the combo value, while
      * the value at index 1 is assumed to be the combo text.
@@ -264,7 +256,7 @@
                     }
                     d.push([value, o.text]);
                 }
-                this.store = new Ext.data.SimpleStore({
+                this.store = new Ext.data.ArrayStore({
                     'id': 0,
                     fields: ['value', 'text'],
                     data : d
@@ -285,13 +277,13 @@
         //auto-configure store from local array data
         else if(Ext.isArray(this.store)){
 			if (Ext.isArray(this.store[0])){
-				this.store = new Ext.data.SimpleStore({
+				this.store = new Ext.data.ArrayStore({
 				    fields: ['value','text'],
 				    data: this.store
 				});
 		        this.valueField = 'value';
 			}else{
-				this.store = new Ext.data.SimpleStore({
+				this.store = new Ext.data.ArrayStore({
 				    fields: ['text'],
 				    data: this.store,
 				    expandData: true
@@ -362,7 +354,9 @@
             this.list.setWidth(lw);
             this.list.swallowEvent('mousewheel');
             this.assetHeight = 0;
-
+            if(this.syncFont !== false){
+                this.list.setStyle('font-size', this.el.getStyle('font-size'));
+            }
             if(this.title){
                 this.header = this.list.createChild({cls:cls+'-hd', html: this.title});
                 this.assetHeight += this.header.getHeight();
@@ -529,11 +523,13 @@
     // private
     onDestroy : function(){
         if(this.view){
-            this.view.el.removeAllListeners();
-            this.view.el.remove();
-            this.view.purgeListeners();
+            Ext.destroy(this.view);
         }
         if(this.list){
+            if(this.innerList){
+                this.innerList.un('mouseover', this.onViewOver, this);
+                this.innerList.un('mousemove', this.onViewMove, this);
+            }
             this.list.destroy();
         }
         this.bindStore(null);

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/DateField.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.DateField
  * @extends Ext.form.TriggerField
@@ -122,7 +114,7 @@
         if(typeof this.maxValue == "string"){
             this.maxValue = this.parseDate(this.maxValue);
         }
-        this.ddMatch = null;
+        this.disabledDatesRE = null;
         this.initDisabledDays();
     },
 
@@ -220,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;
         }
@@ -332,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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Field.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.Field
  * @extends Ext.BoxComponent
@@ -24,6 +16,12 @@
  */
 Ext.form.Field = Ext.extend(Ext.BoxComponent,  {
     /**
+     * @cfg {String} fieldLabel The label text to display next to this field (defaults to '')
+     * <p><b>A Field's label is not by default rendered as part of the Field's structure.
+     * The label is rendered by the {@link Ext.layout.FormLayout form layout} layout manager
+     * of the {@link Ext.form.Container Container} to which the Field is added.</b></p>
+     */
+    /**
      * @cfg {String} inputType The type attribute for input fields -- e.g. radio, text, password, file (defaults 
      * to "text"). The types "file" and "password" must be used to render those field types currently -- there are 
      * no separate Ext components for those. Note that if you use <tt>inputType:'file'</tt>, {@link #emptyText} 
@@ -209,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
@@ -440,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);
@@ -455,7 +458,7 @@
     // private
     adjustWidth : function(tag, w){
         tag = tag.toLowerCase();
-        if(typeof w == 'number' && !Ext.isSafari){
+        if(typeof w == 'number' && !Ext.isSafari && !this.normalWidth){
             if(Ext.isIE && (tag == 'input' || tag == 'textarea')){
                 if(tag == 'input' && !Ext.isStrict){
                     return this.inEditor ? w : w - 3;

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/FieldSet.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/FieldSet.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/FieldSet.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.FieldSet
  * @extends Ext.Panel
@@ -92,6 +84,14 @@
      */
     onCheckClick : function(){
         this[this.checkbox.dom.checked ? 'expand' : 'collapse']();
+    },
+    
+    // private
+    beforeDestroy : function(){
+        if(this.checkbox){
+            this.checkbox.un('click', this.onCheckClick, this);
+        }
+        Ext.form.FieldSet.superclass.beforeDestroy.call(this);
     }
 
     /**

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Form.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.FormPanel
  * @extends Ext.Panel
@@ -48,6 +40,13 @@
      * @cfg {String} itemCls A css class to apply to the x-form-item of fields. This property cascades to child containers.
      */
     /**
+     * @cfg {Array} buttons
+     * An array of {@link Ext.Button}s or {@link Ext.Button} configs used to add buttons to the footer of this FormPanel.<br>
+     * <p>Buttons in the footer of a FormPanel may be configured with the option <tt>formBind: true</tt>. This causes
+     * the form's {@link #monitorValid valid state monitor task} to enable/disable those fields depending on
+     * the form's valid/invalid state.</p>
+     */
+    /**
      * @cfg {String} buttonAlign Valid values are "left," "center" and "right" (defaults to "center")
      */
     buttonAlign:'center',
@@ -65,9 +64,11 @@
     labelAlign:'left',
 
     /**
-     * @cfg {Boolean} monitorValid If true the form monitors its valid state <b>client-side</b> and
-     * fires a looping event with that state. This is required to bind buttons to the valid
-     * state using the config value formBind:true on the button.
+     * @cfg {Boolean} monitorValid If true, the form monitors its valid state <b>client-side</b> and
+     * regularly fires the {@link #clientvalidation} event passing that state.<br>
+     * <p>When monitoring valid state, the FormPanel enables/disables any of its configured
+     * {@link #button}s which have been configured with <tt>formBind: true<tt> depending
+     * on whether the form is valid or not.</p>
      */
     monitorValid : false,
 
@@ -76,9 +77,13 @@
      */
     monitorPoll : 200,
 
+    layout:'form',
+
     // private
     initComponent :function(){
         this.form = this.createForm();
+        Ext.FormPanel.superclass.initComponent.call(this);
+
         this.bodyCfg = {
             tag: 'form',
             cls: this.baseCls + '-body',
@@ -88,9 +93,8 @@
         if(this.fileUpload) {
             this.bodyCfg.enctype = 'multipart/form-data';
         }
-
-        Ext.FormPanel.superclass.initComponent.call(this);
-
+        this.initItems();
+        
         this.addEvents(
             /**
              * @event clientvalidation
@@ -252,9 +256,10 @@
                 return false;
             }
         });
-        if(this.buttons){
-            for(var i = 0, len = this.buttons.length; i < len; i++){
-                var btn = this.buttons[i];
+        if(this.fbar){
+            var fitems = this.fbar.items.items;
+            for(var i = 0, len = fitems.length; i < len; i++){
+                var btn = fitems[i];
                 if(btn.formBind === true && btn.disabled === valid){
                     btn.setDisabled(!valid);
                 }

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Hidden.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Hidden.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Hidden.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.Hidden
  * @extends Ext.form.Field

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/HtmlEditor.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/HtmlEditor.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/HtmlEditor.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.HtmlEditor
  * @extends Ext.form.Field
@@ -394,6 +386,15 @@
         });
         this.tb.doLayout();
 
+        this.createIFrame();
+
+        if(!this.width){
+            var sz = this.el.getSize();
+            this.setSize(sz.width, this.height || sz.height);
+        }
+    },
+
+    createIFrame: function(){
         var iframe = document.createElement('iframe');
         iframe.name = Ext.id();
         iframe.frameBorder = '0';
@@ -403,7 +404,7 @@
         this.iframe = iframe;
 
         this.initFrame();
-        
+
         if(this.autoMonitorDesignMode !== false){
             this.monitorTask = Ext.TaskMgr.start({
                 run: this.checkDesignMode,
@@ -411,11 +412,6 @@
                 interval:100
             });
         }
-
-        if(!this.width){
-            var sz = this.el.getSize();
-            this.setSize(sz.width, this.height || sz.height);
-        }
     },
 
     initFrame : function(){

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Label.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Label.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Label.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.Label
  * @extends Ext.BoxComponent

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/NumberField.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/NumberField.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/NumberField.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.NumberField
  * @extends Ext.form.TextField
@@ -24,6 +16,9 @@
  */
 Ext.form.NumberField = Ext.extend(Ext.form.TextField,  {
     /**
+     * @cfg {RegExp} stripCharsRe @hide
+     */
+    /**
      * @cfg {String} fieldClass The default CSS class for the field (defaults to "x-form-field x-form-num-field")
      */
     fieldClass: "x-form-field x-form-num-field",

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Radio.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Radio.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/Radio.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.Radio
  * @extends Ext.form.Checkbox
@@ -24,65 +16,58 @@
  * @param {Object} config Configuration options
  */
 Ext.form.Radio = Ext.extend(Ext.form.Checkbox, {
-    // private
     inputType: 'radio',
-    // private
-    baseCls: 'x-form-radio',
-    
+
     /**
+     * Overridden and disabled. The editor element does not support standard valid/invalid marking. @hide
+     * @method
+     */
+    markInvalid : Ext.emptyFn,
+    /**
+     * Overridden and disabled. The editor element does not support standard valid/invalid marking. @hide
+     * @method
+     */
+    clearInvalid : Ext.emptyFn,
+
+    /**
      * If this radio is part of a group, it will return the selected value
      * @return {String}
      */
     getGroupValue : function(){
-        var c = this.getParent().child('input[name='+this.el.dom.name+']:checked', true);
+    	var p = this.el.up('form') || Ext.getBody();
+        var c = p.child('input[name='+this.el.dom.name+']:checked', true);
         return c ? c.value : null;
     },
-    
-    // private
-    getParent : function(){
-        return this.el.up('form') || Ext.getBody();
-    },
 
     // private
-    toggleValue : function() {
-        if(!this.checked){
-            var els = this.getParent().select('input[name='+this.el.dom.name+']');
-            els.each(function(el){
-                if(el.dom.id == this.id){
-                    this.setValue(true);
-                }else{
-                    Ext.getCmp(el.dom.id).setValue(false);
-                }
-            }, this);
-        }
+    onClick : function(){
+    	if(this.el.dom.checked != this.checked){
+    		var p = this.el.up('form') || Ext.getBody();
+			var els = p.select('input[name='+this.el.dom.name+']');
+			els.each(function(el){
+				if(el.dom.id == this.id){
+					this.setValue(true);
+				}else{
+					Ext.getCmp(el.dom.id).setValue(false);
+				}
+			}, this);
+		}
     },
-    
+
     /**
      * Sets either the checked/unchecked status of this Radio, or, if a string value
      * is passed, checks a sibling Radio of the same name whose value is the value specified.
      * @param value {String/Boolean} Checked value, or the value of the sibling radio button to check.
      */
     setValue : function(v){
-        if(typeof v=='boolean') {
+    	if (typeof v == 'boolean') {
             Ext.form.Radio.superclass.setValue.call(this, v);
-        }else{
-            var r = this.getParent().child('input[name='+this.el.dom.name+'][value='+v+']', true);
-            if(r && !r.checked){
-                Ext.getCmp(r.id).toggleValue();
+        } else {
+            var r = this.el.up('form').child('input[name='+this.el.dom.name+'][value='+v+']', true);
+            if (r){
+                r.checked = true;
             };
         }
-    },
-    
-    /**
-     * Overridden and disabled. The editor element does not support standard valid/invalid marking. @hide
-     * @method
-     */
-    markInvalid : Ext.emptyFn,
-    /**
-     * Overridden and disabled. The editor element does not support standard valid/invalid marking. @hide
-     * @method
-     */
-    clearInvalid : Ext.emptyFn
-    
+    }
 });
 Ext.reg('radio', Ext.form.Radio);

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/RadioGroup.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/RadioGroup.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/RadioGroup.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.RadioGroup
  * @extends Ext.form.CheckboxGroup

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TextArea.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TextArea.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TextArea.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.TextArea
  * @extends Ext.form.TextField

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TextField.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TextField.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TextField.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.TextField
  * @extends Ext.form.Field
@@ -29,6 +21,9 @@
      * for the {@link #vtype} currently set for this field (defaults to '').  Only applies if vtype is set, else ignored.
      */
     /**
+     * @cfg {RegExp} stripCharsRe A JavaScript RegExp object used to strip unwanted content from the value before validation (defaults to null).
+     */
+    /**
      * @cfg {Boolean} grow True if this field should automatically grow and shrink to its content
      */
     grow : false,
@@ -86,8 +81,9 @@
     blankText : "This field is required",
     /**
      * @cfg {Function} validator A custom validation function to be called during field validation (defaults to null).
-     * If available, this function will be called only after the basic validators all return true, and will be passed the
-     * current field value and expected to return boolean true if the value is valid or a string error message if invalid.
+     * If specified, this function will be called only after the built-in validations ({@link #allowBlank}, {@link #minLength},
+     * {@link #maxLength}) and any configured {@link #vtype} all return true. This function will be passed the current field
+     * value and expected to return boolean true if the value is valid or a string error message if invalid.
      */
     validator : null,
     /**
@@ -102,7 +98,8 @@
      */
     regexText : "",
     /**
-     * @cfg {String} emptyText The default text to display in an empty field (defaults to null).
+     * @cfg {String} emptyText The default text to place into an empty field (defaults to null). Note that this
+     * value will be submitted to the server if this field is enabled and configured with a {@link #name}.
      */
     emptyText : null,
     /**
@@ -239,7 +236,7 @@
     },
 
     applyEmptyText : function(){
-        if(this.rendered && this.emptyText && this.getRawValue().length < 1){
+        if(this.rendered && this.emptyText && this.getRawValue().length < 1 && !this.hasFocus){
             this.setRawValue(this.emptyText);
             this.el.addClass(this.emptyClass);
         }

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TimeField.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TimeField.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TimeField.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.TimeField
  * @extends Ext.form.ComboBox
@@ -116,7 +108,7 @@
                 times.push([min.dateFormat(this.format)]);
                 min = min.add('mi', this.increment);
             }
-            this.store = new Ext.data.SimpleStore({
+            this.store = new Ext.data.ArrayStore({
                 fields: ['text'],
                 data : times
             });

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TriggerField.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TriggerField.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/TriggerField.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.TriggerField
  * @extends Ext.form.TextField
@@ -170,11 +162,13 @@
     triggerBlur : function(){
         this.mimicing = false;
         Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur, this);
-        if(this.monitorTab){
+        if(this.monitorTab && this.el){
             this.el.un("keydown", this.checkTab, this);
         }
         this.beforeBlur();
-        this.wrap.removeClass('x-trigger-wrap-focus');
+        if(this.wrap){
+            this.wrap.removeClass('x-trigger-wrap-focus');
+        }
         Ext.form.TriggerField.superclass.onBlur.call(this);
     },
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/form/VTypes.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/form/VTypes.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/form/VTypes.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,17 +6,18 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.form.VTypes
- * Overridable validation definitions. The validations provided are basic and intended to be easily customizable and extended.
+ * This is a singleton object which contains a set of commonly used field validation functions.
+ * The validations provided are basic and intended to be easily customizable and extended. To add
+ * your own custom VType:<pre><code>
+Ext.apply(Ext.form.VTypes, {
+    IPAddress:  function(v) {
+        return /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(v);
+    },
+    IPAddressText: 'Must be a numeric IP address'
+});
+</code></pre>
  * @singleton
  */
 Ext.form.VTypes = function(){

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/AbstractSelectionModel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/AbstractSelectionModel.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/AbstractSelectionModel.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.grid.AbstractSelectionModel
  * @extends Ext.util.Observable

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/CellSelectionModel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/CellSelectionModel.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/CellSelectionModel.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.grid.CellSelectionModel
  * @extends Ext.grid.AbstractSelectionModel

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/CheckboxSelectionModel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/CheckboxSelectionModel.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/CheckboxSelectionModel.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.grid.CheckboxSelectionModel
  * @extends Ext.grid.RowSelectionModel

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/Column.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,35 +6,105 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.grid.Column = function(config){
     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 && this.editor.isFormField){
-        this.editor = new Ext.grid.GridEditor(this.editor);
+    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;
+    },
+
+    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, {
+    trueText: 'true',
+    falseText: 'false',
+    undefinedText: '&#160;',
+
+    constructor: function(cfg){
+        this.supr().constructor.apply(this, arguments);
+        var t = this.trueText, f = this.falseText, u = this.undefinedText;
+        this.renderer = function(v){
+            if(v === undefined){
+                return u;
+            }
+            if(!v || v === 'false'){
+                return f;
+            }
+            return t;
+        };
+    }
+});
+
+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/source/widgets/grid/ColumnDD.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnDD.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnDD.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 // private
 // This is a support class used internally by the Grid components
 Ext.grid.HeaderDragZone = function(grid, hd, hd2){

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnModel.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.grid.ColumnModel
  * @extends Ext.util.Observable
@@ -25,36 +17,40 @@
  * data formatting, and the ability to apply a CSS class to all cells in a column through its
  * {@link #id} config option.<br>
  * <br>Usage:<br>
- <pre><code>
+<pre><code>
  var colModel = new Ext.grid.ColumnModel([
-	{header: "Ticker", width: 60, sortable: true},
-	{header: "Company Name", width: 150, sortable: true},
-	{header: "Market Cap.", width: 100, sortable: true},
-	{header: "$ Sales", width: 100, sortable: true, renderer: money},
-	{header: "Employees", width: 100, sortable: true, resizable: false}
+    { header: "Ticker", width: 60, sortable: true},
+    { header: "Company Name", width: 150, sortable: true},
+    { header: "Market Cap.", width: 100, sortable: true},
+    { header: "$ Sales", width: 100, sortable: true, renderer: money},
+    { header: "Employees", width: 100, sortable: true, resizable: false}
  ]);
  </code></pre>
  * <p>
  * The config options <b>defined by</b> this class are options which may appear in each
- * individual column definition.
+ * individual column definition. In order to use configuration options from the superclass,
+ * specify the column configuration Array in the <tt><b>columns<b><tt> config property. eg:<pre><code>
+ var colModel = new Ext.grid.ColumnModel({
+    listeners: {
+        widthchange: function(cm, colIndex, width) {
+            saveConfig(colIndex, width);
+        }
+    },
+    columns: [
+        { header: "Ticker", width: 60, sortable: true},
+        { header: "Company Name", width: 150, sortable: true},
+        { header: "Market Cap.", width: 100, sortable: true},
+        { header: "$ Sales", width: 100, sortable: true, renderer: money},
+        { header: "Employees", width: 100, sortable: true, resizable: false}
+     ]
+});
+ </code></pre>
  * @constructor
  * @param {Object} config An Array of column config objects. See this class's
  * config objects for details.
 */
 Ext.grid.ColumnModel = function(config){
-	/**
-     * The width of columns which have no width specified (defaults to 100)
-     * @type Number
-     */
-    this.defaultWidth = 100;
-
     /**
-     * Default sortable of columns which have no sortable specified (defaults to false)
-     * @type Boolean
-     */
-    this.defaultSortable = false;
-
-    /**
      * The config passed into the constructor
      * @property {Array} config
      */
@@ -66,30 +62,30 @@
     }
     this.addEvents(
         /**
-	     * @event widthchange
-	     * Fires when the width of a column changes.
-	     * @param {ColumnModel} this
-	     * @param {Number} columnIndex The column index
-	     * @param {Number} newWidth The new width
-	     */
-	    "widthchange",
+         * @event widthchange
+         * Fires when the width of a column changes.
+         * @param {ColumnModel} this
+         * @param {Number} columnIndex The column index
+         * @param {Number} newWidth The new width
+         */
+        "widthchange",
         /**
-	     * @event headerchange
-	     * Fires when the text of a header changes.
-	     * @param {ColumnModel} this
-	     * @param {Number} columnIndex The column index
-	     * @param {String} newText The new header text
-	     */
-	    "headerchange",
+         * @event headerchange
+         * Fires when the text of a header changes.
+         * @param {ColumnModel} this
+         * @param {Number} columnIndex The column index
+         * @param {String} newText The new header text
+         */
+        "headerchange",
         /**
-	     * @event hiddenchange
-	     * Fires when a column is hidden or "unhidden".
-	     * @param {ColumnModel} this
-	     * @param {Number} columnIndex The column index
-	     * @param {Boolean} hidden true if hidden, false otherwise
-	     */
-	    "hiddenchange",
-	    /**
+         * @event hiddenchange
+         * Fires when a column is hidden or "unhidden".
+         * @param {ColumnModel} this
+         * @param {Number} columnIndex The column index
+         * @param {Boolean} hidden true if hidden, false otherwise
+         */
+        "hiddenchange",
+        /**
          * @event columnmoved
          * Fires when a column is moved.
          * @param {ColumnModel} this
@@ -110,6 +106,16 @@
 };
 Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, {
     /**
+     * The width of columns which have no width specified (defaults to 100)
+     * @type Number
+     */
+    defaultWidth: 100,
+    /**
+     * Default sortable of columns which have no sortable specified (defaults to false)
+     * @type Boolean
+     */
+    defaultSortable: false,
+    /**
      * @cfg {String} id (optional) Defaults to the column's initial ordinal position.
      * A name which identifies this column. The id is used to create a CSS class name which
      * is applied to all table cells (including headers) in that column. The class name
@@ -129,7 +135,8 @@
      * specified, the column's index is used as an index into the Record's data Array.
      */
     /**
-     * @cfg {Number} width (optional) The initial width in pixels of the column.
+     * @cfg {Number} width (optional) The initial width in pixels of the column. This is ignored if the
+     * Grid's {@link Ext.grid.GridView view} is configured with {@link Ext.grid.GridView#forceFit forceFit} true.
      */
     /**
      * @cfg {Boolean} sortable (optional) True if sorting is to be allowed on this column.
@@ -198,9 +205,16 @@
         return this.config[index].id;
     },
 
+    getColumnAt : function(index){
+        return this.config[index];
+    },
+
     /**
-     * Reconfigures this column model
-     * @param {Array} config Array of Column configs
+     * <p>Reconfigures this column model according to the passed Array of column definition objects. For a description of
+     * the individual properties of a column definition object, see the <a href="#Ext.grid.ColumnModel-configs">Config Options</a>.</p>
+     * <p>Causes the {@link #configchange} event to be fired. A {@link Ext.grid.GridPanel GridPanel} using
+     * this ColumnModel will listen for this event and refresh its UI automatically.</p>
+     * @param {Array} config Array of Column definition objects.
      */
     setConfig : function(config, initial){
         if(!initial){ // cleanup
@@ -217,15 +231,11 @@
         // if no id, create one
         for(var i = 0, len = config.length; i < len; i++){
             var c = config[i];
-            if(typeof c.renderer == "string"){
-                c.renderer = Ext.util.Format[c.renderer];
+            if(!c.isColumn){
+                var cls = Ext.grid.Column.types[c.xtype || 'gridcolumn'];
+                c = new cls(c);
+                config[i] = c;
             }
-            if(typeof c.id == "undefined"){
-                c.id = 'xgc'+i;
-            }
-            if(c.editor && c.editor.isFormField){
-                c.editor = new Ext.grid.GridEditor(c.editor);
-            }
             this.lookup[c.id] = c;
         }
         if(!initial){
@@ -519,7 +529,7 @@
      * @return {Object}
      */
     getCellEditor : function(colIndex, rowIndex){
-        return this.config[colIndex].editor;
+        return this.config[colIndex].getCellEditor(rowIndex);
     },
 
     /**
@@ -582,9 +592,8 @@
 
 // private
 Ext.grid.ColumnModel.defaultRenderer = function(value){
-	if(typeof value == "string" && value.length < 1){
-	    return "&#160;";
-	}
-	return 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/source/widgets/grid/ColumnSplitDD.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnSplitDD.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/ColumnSplitDD.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 // private
 // This is a support class used internally by the Grid components
 Ext.grid.SplitDragZone = function(grid, hd, hd2){

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/EditorGrid.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,19 +6,24 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.grid.EditorGridPanel
  * @extends Ext.grid.GridPanel
- * Class for creating and editable grid.
- 
+ * <p>This class extends the GridPanel to provide cell editing on selected columns.</p>
+ * The editable columns are specified by providing an {@link Ext.grid.ColumnModel#editor editor}
+ * in the column configuration.</p>
+ * <p>Editability of columns may be controlled programatically by inserting an implementation
+ * of {@link Ext.grid.ColumnModel#isCellEditable isCellEditable} into your ColumnModel.</p>
+ * <p>Editing is performed on the value of the <i>field</i> specified by the column's
+ * {@link Ext.grid.ColumnModel#dataIndex dataIndex} in the backing {@link Ext.data.Store Store}
+ * (so if you are using a {@link Ext.grid.ColumnModel#setRenderer renderer} in order to display
+ * transformed data, this must be accounted for).</p>
+ * <p>If a value-to-description mapping is used to render a column, then a {Ext.form.Field#ComboBox ComboBox}
+ * which uses the same {@link Ext.form.Field#valueField value}-to-{@link Ext.form.Field#displayFieldField description}
+ * mapping would be an appropriate editor.</p>
+ * If there is a more complex mismatch between the visible data in the grid, and the editable data in
+ * the {@link Edt.data.Store Store}, then code to transform the data both before and after editing can be
+ * injected using the {@link #beforeedit} and {@link #afteredit} events.
  * @constructor
  * @param {Object} config The config object
  */
@@ -47,7 +52,7 @@
 	 */
     // private
     trackMouseOver: false, // causes very odd FF errors
-    
+
     // private
     initComponent : function(){
         Ext.grid.EditorGridPanel.superclass.initComponent.call(this);
@@ -55,7 +60,9 @@
         if(!this.selModel){
             /**
              * @cfg {Object} selModel Any subclass of AbstractSelectionModel that will provide the selection model for
-             * the grid (defaults to {@link Ext.grid.CellSelectionModel} if not specified).
+             * the grid (defaults to {@link Ext.grid.CellSelectionModel} if not specified). Note that the SelectionModel
+             * must be compatible with the model of selecting cells individually, and should support a method named
+             * <tt>getSelectedCell</tt> (for these reasons, {@link Ext.grid.RowSelectionModel} is not compatible).
              */
             this.selModel = new Ext.grid.CellSelectionModel();
         }
@@ -116,7 +123,7 @@
     // private
     initEvents : function(){
         Ext.grid.EditorGridPanel.superclass.initEvents.call(this);
-        
+
         this.on("bodyscroll", this.stopEditing, this, [true]);
 
         if(this.clicksToEdit == 1){
@@ -208,6 +215,9 @@
             if(this.fireEvent("beforeedit", e) !== false && !e.cancel){
                 this.editing = true;
                 var ed = this.colModel.getCellEditor(col, row);
+                if(!ed){
+                    return;
+                }
                 if(!ed.rendered){
                     ed.render(this.view.getEditorParent(ed));
                 }
@@ -217,25 +227,29 @@
                     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);
+                    ed.startEdit(this.view.getCell(row, col).firstChild, v === undefined ? '' : v);
                 }).defer(50, this);
             }
         }
     },
-    
+
     // private
     preEditValue : function(r, field){
         var value = r.data[field];
         return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlDecode(value) : value;
     },
-    
+
     // private
 	postEditValue : function(value, originalValue, r, field){
 		return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlEncode(value) : value;
 	},
-	    
+
     /**
      * Stops any active editing
      * @param {Boolean} cancel (optional) True to cancel any changes
@@ -246,7 +260,7 @@
         }
         this.activeEditor = null;
     },
-    
+
     // private
     onDestroy: function() {
         if(this.rendered){

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridDD.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridDD.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridDD.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.grid.GridDragZone
  * @extends Ext.dd.DragZone

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridEditor.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridEditor.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridEditor.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 // private
 // This is a support class used internally by the Grid components
 Ext.grid.GridEditor = function(field, config){

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridPanel.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.grid.GridPanel
  * @extends Ext.Panel
@@ -32,7 +24,17 @@
         {header: "Last Updated", width: 135, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
     ],
     viewConfig: {
-        forceFit: true
+        forceFit: true,
+
+//      Return CSS class to apply to rows depending upon data values
+        getRowClass: function(record, index) {
+            var c = record.get('change');
+            if (c < 0) {
+                return 'price-fall';
+            } else if (c > 0) {
+                return 'price-rise';
+            }
+        }
     },
     sm: new Ext.grid.RowSelectionModel({singleSelect:true}),
     width:600,
@@ -87,7 +89,8 @@
      */
     /**
      * @cfg {Object} viewConfig A config object that will be applied to the grid's UI view.  Any of
-     * the config options available for {@link Ext.grid.GridView} can be specified here.
+     * the config options available for {@link Ext.grid.GridView} can be specified here. This option
+     * is ignored if {@link #view} is xpecified.
      */
     /**
      * @cfg {Boolean} hideHeaders True to hide the grid's header (defaults to false).
@@ -115,7 +118,7 @@
      * <p>A cooperating {@link Ext.dd.DropZone DropZone} must be created who's implementations of
      * {@link Ext.dd.DropZone#onNodeEnter onNodeEnter}, {@link Ext.dd.DropZone#onNodeOver onNodeOver},
      * {@link Ext.dd.DropZone#onNodeOut onNodeOut} and {@link Ext.dd.DropZone#onNodeDrop onNodeDrop}</p> are able
-     * to process the {@link Ext.grid.GridDragZone#getDragData data} which is provided. 
+     * to process the {@link Ext.grid.GridDragZone#getDragData data} which is provided. 
      */
     enableDragDrop : false,
     /**
@@ -132,6 +135,10 @@
     enableHdMenu : true,
     /**
      * @cfg {Boolean} stripeRows True to stripe the rows. Default is false.
+     * <p>This causes the CSS class <tt><b>x-grid3-row-alt</b></tt> to be added to alternate rows of
+     * the grid. A default CSS rule is provided which sets a background colour, but you can override this
+     * with a rule which either overrides the <b>background-color</b> style using the "!important"
+     * modifier, or which uses a CSS selector of higher specificity.
      */
     stripeRows : false,
     /**
@@ -170,7 +177,13 @@
     rendered : false,
     // private
     viewReady: false,
-    // private
+    /**
+     * @cfg {Array} stateEvents
+     * An array of events that, when fired, should trigger this component to save its state (defaults to ["columnmove", "columnresize", "sortchange"]).
+     * These can be any types of events supported by this component, including browser or custom events (e.g.,
+     * ['click', 'customerchange']).
+     * <p>See {@link #stateful} for an explanation of saving and restoring Component state.</p>
+     */
     stateEvents: ["columnmove", "columnresize", "sortchange"],
 
     // private
@@ -460,7 +473,7 @@
                 }
             }
         }
-        if(state.sort){
+        if(state.sort && this.store){
             this.store[this.store.remoteSort ? 'setDefaultSort' : 'sort'](state.sort.field, state.sort.direction);
         }
     },
@@ -476,9 +489,11 @@
                 o.columns[i].hidden = true;
             }
         }
-        var ss = this.store.getSortState();
-        if(ss){
-            o.sort = ss;
+        if(this.store){
+            var ss = this.store.getSortState();
+            if(ss){
+                o.sort = ss;
+            }
         }
         return o;
     },
@@ -496,8 +511,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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GridView.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.grid.GridView
  * @extends Ext.util.Observable
@@ -136,6 +128,7 @@
     autoFill: false,
     /**
      * @cfg {Boolean} forceFit True to auto expand/contract the size of the columns to fit the grid width and prevent horizontal scrolling.
+     * This option overrides any (@link Ext.grid.ColumnModel#width width} settings in the ColumnModel.
      */
     forceFit: false,
     /**
@@ -165,6 +158,7 @@
     borderWidth: 2,
     tdClass: 'x-grid3-cell',
     hdCls: 'x-grid3-hd',
+    markDirty: true,
 
     /**
      * @cfg {Number} cellSelectorDepth The number of levels to search for cells in event delegation (defaults to 4)
@@ -366,9 +360,9 @@
     // getter methods for fetching elements dynamically in the grid
 
 /**
- * Return the HtmlElement which represents a Grid row for the specified index.
+ * Return the &lt;TR> HtmlElement which represents a Grid row for the specified index.
  * @param {Number} index The row index
- * @return {HtmlElement} The element.
+ * @return {HtmlElement} The &lt;TR> element.
  */
     getRow : function(row){
         return this.getRows()[row];
@@ -414,7 +408,7 @@
     // private
     removeRow : function(row){
         Ext.removeNode(this.getRow(row));
-        this.focusRow(row);
+        this.syncFocusEl(row);
     },
     
     // private
@@ -423,7 +417,7 @@
         for(var rowIndex = firstRow; rowIndex <= lastRow; rowIndex++){
             Ext.removeNode(bd.childNodes[firstRow]);
         }
-        this.focusRow(firstRow);
+        this.syncFocusEl(firstRow);
     },
 
     // scrolling stuff
@@ -486,13 +480,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];
+                }
             }
         }
 
@@ -508,11 +505,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);
@@ -529,11 +529,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);
@@ -559,7 +562,7 @@
                 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'){
+                if(this.markDirty && r.dirty && typeof r.modified[c.name] !== 'undefined'){
                     p.css += ' x-grid3-dirty-cell';
                 }
                 cb[cb.length] = ct.apply(p);
@@ -610,6 +613,9 @@
     },
 
     afterRender: function(){
+        if(!this.ds || !this.cm){
+            return;
+        }
         this.mainBody.dom.innerHTML = this.renderRows();
         this.processRows(0, true);
 
@@ -673,6 +679,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'
@@ -696,8 +707,12 @@
         if(vw < 20 || csize.height < 20){ // display: none?
             return;
         }
+        
         if(g.autoHeight){
             this.scroller.dom.style.overflow = 'visible';
+            if(Ext.isSafari){
+                this.scroller.dom.style.position = 'static';
+            }
         }else{
             this.el.setSize(csize.width, csize.height);
 
@@ -767,7 +782,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);
@@ -821,10 +836,7 @@
      * @param {Number} col The column index
      */
     focusCell : function(row, col, hscroll){
-        row = Math.min(row, Math.max(0, this.getRows().length-1));
-        var xy = this.ensureVisible(row, col, hscroll);
-        this.focusEl.setXY(xy||this.scroller.getXY());
-        
+		this.syncFocusEl(this.ensureVisible(row, col, hscroll));
         if(Ext.isGecko){
             this.focusEl.focus();
         }else{
@@ -832,16 +844,15 @@
         }
     },
 
-    // private
-    ensureVisible : function(row, col, hscroll){
-        if(typeof row != "number"){
+	resolveCell : function(row, col, hscroll){
+		if(typeof row != "number"){
             row = row.rowIndex;
         }
         if(!this.ds){
-            return;
+            return null;
         }
         if(row < 0 || row >= this.ds.getCount()){
-            return;
+            return null;
         }
         col = (col !== undefined ? col : 0);
 
@@ -852,12 +863,37 @@
             }
             cellEl = this.getCell(row, col);
         }
-        if(!rowEl){
-            return;
-        }
 
-        var c = this.scroller.dom;
+		return {row: rowEl, cell: cellEl};
+	},
 
+	getResolvedXY : function(resolved){
+		if(!resolved){
+			return null;
+		}
+		var s = this.scroller.dom, c = resolved.cell, r = resolved.row;
+		return c ? Ext.fly(c).getXY() : [s.scrollLeft+this.el.getX(), Ext.fly(r).getY()];
+	},
+
+	syncFocusEl : function(row, col, hscroll){
+		var xy = row;
+		if(!Ext.isArray(xy)){
+			row = Math.min(row, Math.max(0, this.getRows().length-1));
+        	xy = this.getResolvedXY(this.resolveCell(row, col, hscroll));
+		}
+        this.focusEl.setXY(xy||this.scroller.getXY());
+    },
+
+	ensureVisible : function(row, col, hscroll){
+        var resolved = this.resolveCell(row, col, hscroll);
+		if(!resolved || !resolved.row){
+			return;
+		}
+
+		var rowEl = resolved.row, cellEl = resolved.cell;
+
+		var c = this.scroller.dom;
+
         var ctop = 0;
         var p = rowEl, stop = this.el.dom;
         while(p && p != stop){
@@ -872,7 +908,7 @@
         var stop = parseInt(c.scrollTop, 10);
         var sbot = stop + ch;
 
-        if(ctop < stop){
+		if(ctop < stop){
           c.scrollTop = ctop;
         }else if(cbot > sbot){
             c.scrollTop = cbot-ch;
@@ -890,7 +926,7 @@
                 c.scrollLeft = cright-c.clientWidth;
             }
         }
-        return cellEl ? Ext.fly(cellEl).getXY() : [c.scrollLeft+this.el.getX(), Ext.fly(rowEl).getY()];
+        return this.getResolvedXY(resolved);
     },
 
     // private
@@ -913,7 +949,7 @@
                 this.processRows(firstRow);
             }
         }
-        this.focusRow(firstRow);
+        this.syncFocusEl(firstRow);
     },
 
     // private
@@ -960,7 +996,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;
 
@@ -1086,7 +1122,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);
@@ -1141,15 +1176,13 @@
     // private
     destroy : function(){
         if(this.colMenu){
-            this.colMenu.removeAll();
             Ext.menu.MenuMgr.unregister(this.colMenu);
-            this.colMenu.getEl().remove();
+            this.colMenu.destroy();
             delete this.colMenu;
         }
         if(this.hmenu){
-            this.hmenu.removeAll();
             Ext.menu.MenuMgr.unregister(this.hmenu);
-            this.hmenu.getEl().remove();
+            this.hmenu.destroy();
             delete this.hmenu;
         }
         if(this.grid.enableColumnMove){
@@ -1173,11 +1206,16 @@
             }
         }
 
-        Ext.destroy(this.resizeMarker, this.resizeProxy);
-
         if(this.dragZone){
             this.dragZone.unreg();
         }
+        
+        Ext.fly(this.innerHd).removeAllListeners();
+        Ext.removeNode(this.innerHd);
+        
+        Ext.destroy(this.resizeMarker, this.resizeProxy, this.focusEl, this.mainBody, 
+                    this.scroller, this.mainHd, this.mainWrap, this.dragZone, 
+                    this.splitone, this.columnDrag, this.columnDrop);
 
         this.initData(null, null);
         Ext.EventManager.removeResizeListener(this.onWindowResize, this);
@@ -1247,13 +1285,13 @@
     onDataChange : function(){
         this.refresh();
         this.updateHeaderSortState();
-        this.focusRow(0);
+        this.syncFocusEl(0);
     },
 
     // private
     onClear : function(){
         this.refresh();
-        this.focusRow(0);
+        this.syncFocusEl(0);
     },
 
     // private
@@ -1319,16 +1357,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
@@ -1351,7 +1383,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");
         }
     },
@@ -1398,6 +1430,7 @@
             this.updateAllColumnWidths();
         }else{
             this.updateColumnWidth(i, w);
+            this.syncHeaderScroll();
         }
 
         this.grid.fireEvent("columnresize", i, w);
@@ -1564,7 +1597,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/grid/GroupingView.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GroupingView.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/GroupingView.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.grid.GroupingView
  * @extends Ext.grid.GridView

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/PropertyGrid.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/PropertyGrid.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/PropertyGrid.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.grid.PropertyRecord
  * A specific {@link Ext.data.Record} type that represents a name/value pair and is made to work with the

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/RowNumberer.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/RowNumberer.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/RowNumberer.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.grid.RowNumberer
  * This is a utility class that can be passed into a {@link Ext.grid.ColumnModel} as a column config that provides

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/RowSelectionModel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/RowSelectionModel.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/grid/RowSelectionModel.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  @class Ext.grid.RowSelectionModel
  * @extends Ext.grid.AbstractSelectionModel

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AbsoluteLayout.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AbsoluteLayout.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AbsoluteLayout.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.layout.AbsoluteLayout
  * @extends Ext.layout.AnchorLayout
@@ -32,7 +24,15 @@
     },
 
     onLayout : function(ct, target){
-        if(this.isForm){ ct.body.position(); } else { target.position(); }
+        if(this.isForm){
+            ct.body.position();
+            this.paddingLeft = ct.body.getPadding('r');
+            this.paddingTop = ct.body.getPadding('t');
+        } else {
+            target.position();
+            this.paddingLeft = target.getPadding('r');
+            this.paddingTop = target.getPadding('t');
+        }
         Ext.layout.AbsoluteLayout.superclass.onLayout.call(this, ct, target);
     },
 
@@ -48,12 +48,12 @@
 
     // private
     adjustWidthAnchor : function(value, comp){
-        return value ? value - comp.getPosition(true)[0] : value;
+        return value ? value - comp.getPosition(true)[0] + this.paddingLeft : value;
     },
 
     // private
     adjustHeightAnchor : function(value, comp){
-        return  value ? value - comp.getPosition(true)[1] : value;
+        return  value ? value - comp.getPosition(true)[1] + this.paddingTop : value;
     }
     /**
      * @property activeItem

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AccordionLayout.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AccordionLayout.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AccordionLayout.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.layout.Accordion
  * @extends Ext.layout.FitLayout
@@ -61,6 +53,8 @@
     /**
      * @cfg {Boolean} autoWidth
      * True to set each contained item's width to 'auto', false to use the item's current width (defaults to true).
+     * Note that some components, in particular the {@link Ext.grid.GridPanel grid}, will not function properly within
+     * layouts if they have auto width, so in such cases this config should be set to false.
      */
     autoWidth : true,
     /**
@@ -120,7 +114,7 @@
         }
         if(!this.activeItem && !c.collapsed){
             this.activeItem = c;
-        }else if(this.activeItem){
+        }else if(this.activeItem && this.activeItem != c){
             c.collapsed = true;
         }
         Ext.layout.Accordion.superclass.renderItem.apply(this, arguments);
@@ -165,6 +159,18 @@
             size.height -= hh;
             item.setSize(size);
         }
+    },
+
+    /**
+     * Sets the active (expanded) item in the layout.
+     * @param {String/Number} item The string component id or numeric index of the item to activate
+     */
+    setActiveItem : function(item){
+        item = this.container.getComponent(item);
+        this.activeItem = item;
+        if(item){
+            item.expand();
+        }
     }
 });
 Ext.Container.LAYOUTS['accordion'] = Ext.layout.Accordion;
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AnchorLayout.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AnchorLayout.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/AnchorLayout.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.layout.AnchorLayout
  * @extends Ext.layout.ContainerLayout

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/BorderLayout.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.layout.BorderLayout
  * @extends Ext.layout.ContainerLayout
@@ -102,7 +94,7 @@
         var centerW = w, centerH = h, centerY = 0, centerX = 0;
 
         var n = this.north, s = this.south, west = this.west, e = this.east, c = this.center;
-        if(!c){
+        if(!c && Ext.layout.BorderLayout.WARN !== false){
             throw 'No center region defined in BorderLayout ' + ct.id;
         }
 
@@ -147,22 +139,21 @@
             centerW -= totalWidth;
             e.applyLayout(b);
         }
-
-        var m = c.getMargins();
-        var centerBox = {
-            x: centerX + m.left,
-            y: centerY + m.top,
-            width: centerW - (m.left+m.right),
-            height: centerH - (m.top+m.bottom)
-        };
-        c.applyLayout(centerBox);
-
+        if(c){
+            var m = c.getMargins();
+            var centerBox = {
+                x: centerX + m.left,
+                y: centerY + m.top,
+                width: centerW - (m.left+m.right),
+                height: centerH - (m.top+m.bottom)
+            };
+            c.applyLayout(centerBox);
+        }
         if(collapsed){
             for(var i = 0, len = collapsed.length; i < len; i++){
                 collapsed[i].collapse(false);
             }
         }
-
         if(Ext.isIE && Ext.isStrict){ // workaround IE strict repainting issue
             target.repaint();
         }
@@ -172,8 +163,12 @@
         var r = ['north', 'south', 'east', 'west'];
         for (var i = 0; i < r.length; i++) {
             var region = this[r[i]];
-            if (region && region.split) {
-                region.split.destroy(true);
+            if(region){
+                if(region.destroy){
+                    region.destroy();
+                }else if (region.split){
+                    region.split.destroy(true);
+                }
             }
         }
         Ext.layout.BorderLayout.superclass.destroy.call(this);
@@ -293,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.
@@ -442,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
@@ -617,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(), {
@@ -972,6 +968,15 @@
      */
     getSplitBar : function(){
         return this.split;
+    },
+    
+    // inherit docs
+    destroy : function() {
+        Ext.destroy(
+            this.miniSplitEl, 
+            this.split, 
+            this.splitEl
+        );
     }
 });
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/CardLayout.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/CardLayout.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/CardLayout.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.layout.CardLayout
  * @extends Ext.layout.FitLayout

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/ColumnLayout.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/ColumnLayout.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/ColumnLayout.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.layout.ColumnLayout
  * @extends Ext.layout.ContainerLayout

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/ContainerLayout.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/ContainerLayout.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/ContainerLayout.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,19 +6,15 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.layout.ContainerLayout
- * Every layout is composed of one or more {@link Ext.Container} elements internally, and ContainerLayout provides
- * the basic foundation for all other layout classes in Ext.  It is a non-visual class that simply provides the
- * base logic required for a Container to function as a layout.  This class is intended to be extended and should
+ * <p>Every {@link Ext.Container Container} delegates the rendering of its child {@link Ext.Component Component}s
+ * to a layout manager class which must be {@link Ext.Container#layout configured} into the Container.</p> Some
+ * layouts also provide sizing and positioning of child Components/
+ *
+ * <p>The ContainerLayout class is the default layout manager used when no layout is configured into a Container.
+ * It provides the basic foundation for all other layout classes in Ext. It simply renders all child Components
+ * into the Container, performing no sizing os positioning services. This class is intended to be extended and should
  * generally not need to be created directly via the new keyword.
  */
 Ext.layout.ContainerLayout = function(config){
@@ -91,7 +87,8 @@
             }
         }else if(c && !this.isValidParent(c, target)){
             if(this.extraCls){
-                c.addClass(this.extraCls);
+                var t = c.getPositionEl ? c.getPositionEl() : c;
+            	t.addClass(this.extraCls);
             }
             if(typeof position == 'number'){
                 position = target.dom.childNodes[position];
@@ -161,6 +158,11 @@
         };
     },
 
+    /*
+     * Destroys this layout. This is a template method that is empty by default, but should be implemented
+     * by subclasses that require explicit destruction to purge event handlers or remove DOM nodes.
+     * @protected
+     */
     destroy : Ext.emptyFn
 };
 Ext.Container.LAYOUTS['auto'] = Ext.layout.ContainerLayout;
\ No newline at end of file

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/FitLayout.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/FitLayout.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/FitLayout.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.layout.FitLayout
  * @extends Ext.layout.ContainerLayout

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/FormLayout.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.layout.FormLayout
  * @extends Ext.layout.AnchorLayout
@@ -100,14 +92,6 @@
  */
 Ext.layout.FormLayout = Ext.extend(Ext.layout.AnchorLayout, {
     /**
-     * @cfg {String} labelStyle
-     * A CSS style specification string to add to each field label in this layout (defaults to '').
-     */
-    /**
-     * @cfg {String} elementStyle
-     * A CSS style specification string to add to each field element in this layout (defaults to '').
-     */
-    /**
      * @cfg {String} labelSeparator
      * The standard separator to display after the text of each form label (defaults to a colon ':').  To turn off
      * separators for all fields in this layout by default specify empty string '' (if the labelSeparator value is
@@ -189,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/layout/TableLayout.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/TableLayout.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/layout/TableLayout.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.layout.TableLayout
  * @extends Ext.layout.ContainerLayout

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/list/ColumnResizer.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/list/ColumnResizer.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/list/ColumnResizer.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.ListView.ColumnResizer = Ext.extend(Ext.util.Observable, {
     minPct: .05,
     constructor: function(config){

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/list/ListView.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/list/ListView.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/list/ListView.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.ListView = Ext.extend(Ext.DataView, {
     itemSelector: 'dl',
     selectedClass:'x-list-selected',

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/list/Sorter.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/list/Sorter.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/list/Sorter.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.ListView.Sorter = Ext.extend(Ext.util.Observable, {
     /**
      * The CSS classes applied to a header when it is sorted. (defaults to ["sort-asc", "sort-desc"])

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Adapter.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Adapter.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Adapter.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.Adapter
  * @extends Ext.menu.BaseItem

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-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/BaseItem.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.BaseItem
  * @extends Ext.Component
@@ -75,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",
@@ -94,7 +86,7 @@
          */
         this.parentMenu = parentMenu;
         Ext.menu.BaseItem.superclass.render.call(this, container);
-        this.container.menuItemId = this.id;
+        this.container.menuItemId = this.itemId || this.id;
     },
 
     // private
@@ -152,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]);
         }
     },
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/CheckItem.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/CheckItem.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/CheckItem.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.CheckItem
  * @extends Ext.menu.Item

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/ColorItem.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/ColorItem.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/ColorItem.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.ColorItem
  * @extends Ext.menu.Adapter

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/ColorMenu.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/ColorMenu.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/ColorMenu.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.ColorMenu
  * @extends Ext.menu.Menu

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/DateItem.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/DateItem.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/DateItem.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.DateItem
  * @extends Ext.menu.Adapter

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/DateMenu.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/DateMenu.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/DateMenu.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.DateMenu
  * @extends Ext.menu.Menu

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Item.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Item.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Item.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.Item
  * @extends Ext.menu.BaseItem

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Menu.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Menu.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Menu.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.Menu
  * @extends Ext.util.Observable
@@ -95,7 +87,7 @@
      * @type Ext.util.MixedCollection
      */
 
-    this.items = new Ext.util.MixedCollection();
+    this.items = new Ext.util.MixedCollection(false, Ext.Container.prototype.getComponentId);
     if(mis){
         this.add.apply(this, mis);
     }
@@ -152,7 +144,7 @@
             shadow:this.shadow,
             constrain: false,
             parentEl: this.parentEl || document.body,
-            zindex:15000
+            zindex: this.zIndex || 15000
         });
     },
 
@@ -513,7 +505,7 @@
      * @param {Ext.menu.Item} item The menu item to remove
      */
     remove : function(item){
-        this.items.removeKey(item.id);
+        this.items.remove(item);
         item.destroy();
     },
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/MenuMgr.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/MenuMgr.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/MenuMgr.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.MenuMgr
  * Provides a common registry of all menu items on a page so that they can be easily accessed by id.

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Separator.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Separator.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/Separator.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.Separator
  * @extends Ext.menu.BaseItem

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/TextItem.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/TextItem.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/menu/TextItem.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.menu.TextItem
  * @extends Ext.menu.BaseItem

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/QuickTip.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/QuickTip.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/QuickTip.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.QuickTip
  * @extends Ext.ToolTip

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/QuickTips.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/QuickTips.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/QuickTips.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.QuickTips
  * <p>Provides attractive and customizable tooltips for any element. The QuickTips
@@ -57,7 +49,7 @@
 });
 
 // Manually register a quick tip for a specific element
-q.register({
+Ext.QuickTips.register({
     target: 'my-div',
     title: 'My Tooltip',
     text: 'This tooltip was added in code',

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/Tip.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/Tip.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/Tip.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.Tip
  * @extends Ext.Panel
@@ -61,6 +53,8 @@
     floating:{shadow:true,shim:true,useDisplay:true,constrain:false},
     autoHeight:true,
 
+    closeAction: 'hide',
+
     // private
     initComponent : function(){
         Ext.Tip.superclass.initComponent.call(this);
@@ -75,7 +69,7 @@
         if(this.closable){
             this.addTool({
                 id: 'close',
-                handler: this.hide,
+                handler: this[this.closeAction],
                 scope: this
             });
         }

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/ToolTip.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/ToolTip.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tips/ToolTip.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.ToolTip
  * @extends Ext.Tip

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/AsyncTreeNode.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/AsyncTreeNode.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/AsyncTreeNode.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.tree.AsyncTreeNode
  * @extends Ext.tree.TreeNode

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeDragZone.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeDragZone.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeDragZone.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.tree.TreeDragZone
  * @extends Ext.dd.DragZone

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeDropZone.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeDropZone.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeDropZone.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.tree.TreeDropZone
  * @extends Ext.dd.DropZone

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeEditor.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeEditor.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeEditor.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.tree.TreeEditor
  * @extends Ext.Editor

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeEventModel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeEventModel.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeEventModel.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 Ext.tree.TreeEventModel = function(tree){
     this.tree = tree;
     this.tree.on('render', this.initEvents, this);
@@ -70,6 +62,10 @@
         if(!this.beforeEvent(e)){
             return;
         }
+        if(Ext.isGecko && !this.trackingDoc){ // prevent hanging in FF
+            Ext.getBody().on('mouseover', this.trackExit, this);
+            this.trackingDoc = true;
+        }
         if(this.lastEcOver){ // prevent hung highlight
             this.onIconOut(e, this.lastEcOver);
             delete this.lastEcOver;
@@ -83,6 +79,15 @@
         }
     },
 
+    trackExit : function(e){
+        if(this.lastOverNode && !e.within(this.lastOverNode.ui.getEl())){
+            this.onNodeOut(e, this.lastOverNode);
+            delete this.lastOverNode;
+            Ext.getBody().un('mouseover', this.trackExit, this);
+            this.trackingDoc = false;
+        }
+    },
+
     delegateClick : function(e, t){
         if(!this.beforeEvent(e)){
             return;
@@ -116,6 +121,7 @@
     },
 
     onNodeOver : function(e, node){
+        this.lastOverNode = node;
         node.ui.onOver(e);
     },
 

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeFilter.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeFilter.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeFilter.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
 * @class Ext.tree.TreeFilter
 * Note this class is experimental and doesn't update the indent (lines) or expand collapse icons of the nodes

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeLoader.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeLoader.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeLoader.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.tree.TreeLoader
  * @extends Ext.util.Observable

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeNode.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeNode.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeNode.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.tree.TreeNode
  * @extends Ext.data.Node
@@ -401,10 +393,11 @@
     /**
      * Ensures all parent nodes are expanded, and if necessary, scrolls
      * the node into view.
+     * @param {Function} callback (optional) A function to call when the node has been made visible.
      */
     ensureVisible : function(callback){
         var tree = this.getOwnerTree();
-        tree.expandPath(this.parentNode.getPath(), false, function(){
+        tree.expandPath(this.parentNode ? this.parentNode.getPath() : this.getPath(), false, function(){
             var node = tree.getNodeById(this.id);  // Somehow if we don't do this, we lose changes that happened to node in the meantime
             tree.getTreeEl().scrollChildIntoView(node.ui.anchor);
             Ext.callback(callback);

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeNodeUI.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeNodeUI.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeNodeUI.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.tree.TreeNodeUI
  * This class provides the default UI implementation for Ext TreeNodes.

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreePanel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreePanel.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreePanel.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.tree.TreePanel
  * <p>The TreePanel provides tree-structured UI representation of tree-structured data.</p>

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeSelectionModel.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeSelectionModel.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeSelectionModel.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.tree.DefaultSelectionModel
  * @extends Ext.util.Observable

Modified: mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeSorter.js
===================================================================
--- mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeSorter.js	2008-12-02 17:22:48 UTC (rev 35)
+++ mickael/trunk/ext/v3.0.0-a1/source/widgets/tree/TreeSorter.js	2008-12-03 04:14:23 UTC (rev 36)
@@ -6,14 +6,6 @@
  * http://extjs.com/license
  */
 
-/*
- * Ext JS Library 3.0 Pre-alpha
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@xxxxxxxxx
- * 
- * http://extjs.com/license
- */
-
 /**
  * @class Ext.tree.TreeSorter
  * Provides sorting of nodes in a {@link Ext.tree.TreePanel}.  The TreeSorter automatically monitors events on the 


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