[Jifty-commit] r3209 - in jifty/branches/virtual-models: . debian doc doc/talks examples/Doxory examples/Doxory/bin examples/Doxory/doc examples/Doxory/etc examples/Doxory/lib examples/Doxory/lib/Doxory examples/Doxory/lib/Doxory/Action examples/Doxory/lib/Doxory/Model examples/Doxory/log examples/Doxory/share examples/Doxory/share/po examples/Doxory/share/web examples/Doxory/share/web/static examples/Doxory/share/web/templates examples/Doxory/t examples/Doxory/var examples/Doxory/var/mason examples/Example-Todo examples/Example-Todo/bin examples/Example-Todo/doc examples/Example-Todo/etc examples/Example-Todo/inc examples/Example-Todo/inc/.author examples/Example-Todo/inc/Module examples/Example-Todo/inc/Module/Install examples/Example-Todo/lib examples/Example-Todo/lib/Example examples/Example-Todo/lib/Example/Todo examples/Example-Todo/lib/Example/Todo/Action examples/Example-Todo/lib/Example/Todo/Model examples/Example-Todo/log examples/Example-Todo/share examples/Example-Todo/share/po examples/Example-Todo/share/web examples/Example-Todo/share/web/static examples/Example-Todo/share/web/templates examples/Example-Todo/t inc/Module inc/Module/Install lib lib/Jifty lib/Jifty/Action lib/Jifty/Manual lib/Jifty/Module lib/Jifty/Plugin lib/Jifty/Plugin/AdminUI lib/Jifty/Plugin/Authentication lib/Jifty/Plugin/Authentication/Password lib/Jifty/Plugin/Authentication/Password/Action lib/Jifty/Plugin/Authentication/Password/Mixin/Model lib/Jifty/Plugin/ErrorTemplates lib/Jifty/Plugin/OnlineDocs lib/Jifty/Plugin/REST lib/Jifty/Plugin/SkeletonApp lib/Jifty/Plugin/User/Mixin/Model lib/Jifty/Script lib/Jifty/Server lib/Jifty/Server/Prefork lib/Jifty/Subs lib/Jifty/Test/WWW lib/Jifty/View/Declare lib/Jifty/View/Mason lib/Jifty/View/Static lib/Jifty/Web lib/Jifty/Web/Form lib/Jifty/Web/Form/Field lib/Jifty/Web/Session lib/auto plugins/DumpDispatcher plugins/DumpDispatcher/doc plugins/DumpDispatcher/lib plugins/DumpDispatcher/lib/Jifty plugins/DumpDispatcher/lib/Jifty/Plugin plugins/DumpDispatcher/share plugins/DumpDispatcher/share/po plugins/DumpDispatcher/share/web plugins/DumpDispatcher/share/web/static plugins/DumpDispatcher/share/web/templates plugins/DumpDispatcher/t plugins/EditInPlace/lib/Jifty/Plugin/EditInPlace/Action plugins/ExtJS plugins/ExtJS/doc plugins/ExtJS/lib plugins/ExtJS/lib/Jifty plugins/ExtJS/lib/Jifty/Plugin plugins/ExtJS/lib/Jifty/Plugin/ExtJS plugins/ExtJS/lib/Jifty/Plugin/ExtJS/Action plugins/ExtJS/lib/Jifty/Plugin/ExtJS/Model plugins/ExtJS/share plugins/ExtJS/share/po plugins/ExtJS/share/web plugins/ExtJS/share/web/static plugins/ExtJS/share/web/static/css plugins/ExtJS/share/web/static/css/extjs plugins/ExtJS/share/web/static/images plugins/ExtJS/share/web/static/images/extjs plugins/ExtJS/share/web/static/images/extjs/aero plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog plugins/ExtJS/share/web/static/images/extjs/aero/grid plugins/ExtJS/share/web/static/images/extjs/aero/layout plugins/ExtJS/share/web/static/images/extjs/aero/qtip plugins/ExtJS/share/web/static/images/extjs/aero/sizer plugins/ExtJS/share/web/static/images/extjs/aero/tabs plugins/ExtJS/share/web/static/images/extjs/aero/toolbar plugins/ExtJS/share/web/static/images/extjs/default plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog plugins/ExtJS/share/web/static/images/extjs/default/box plugins/ExtJS/share/web/static/images/extjs/default/dd plugins/ExtJS/share/web/static/images/extjs/default/form plugins/ExtJS/share/web/static/images/extjs/default/grid plugins/ExtJS/share/web/static/images/extjs/default/layout plugins/ExtJS/share/web/static/images/extjs/default/menu plugins/ExtJS/share/web/static/images/extjs/default/qtip plugins/ExtJS/share/web/static/images/extjs/default/shared plugins/ExtJS/share/web/static/images/extjs/default/sizer plugins/ExtJS/share/web/static/images/extjs/default/tabs plugins/ExtJS/share/web/static/images/extjs/default/toolbar plugins/ExtJS/share/web/static/images/extjs/default/tree plugins/ExtJS/share/web/static/images/extjs/gray plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog plugins/ExtJS/share/web/static/images/extjs/gray/grid plugins/ExtJS/share/web/static/images/extjs/gray/layout plugins/ExtJS/share/web/static/images/extjs/gray/menu plugins/ExtJS/share/web/static/images/extjs/gray/qtip plugins/ExtJS/share/web/static/images/extjs/gray/sizer plugins/ExtJS/share/web/static/images/extjs/gray/tabs plugins/ExtJS/share/web/static/images/extjs/gray/toolbar plugins/ExtJS/share/web/static/images/extjs/vista plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog plugins/ExtJS/share/web/static/images/extjs/vista/grid plugins/ExtJS/share/web/static/images/extjs/vista/layout plugins/ExtJS/share/web/static/images/extjs/vista/qtip plugins/ExtJS/share/web/static/images/extjs/vista/sizer plugins/ExtJS/share/web/static/images/extjs/vista/tabs plugins/ExtJS/share/web/static/images/extjs/vista/toolbar plugins/ExtJS/share/web/static/js plugins/ExtJS/share/web/static/js/extjs plugins/ExtJS/share/web/static/js/extjs/adapter plugins/ExtJS/share/web/static/js/extjs/adapter/jquery plugins/ExtJS/share/web/static/js/extjs/adapter/prototype plugins/ExtJS/share/web/static/js/extjs/adapter/yui plugins/ExtJS/share/web/templates plugins/ExtJS/t plugins/WikiToolbar plugins/WikiToolbar/doc plugins/WikiToolbar/lib plugins/WikiToolbar/lib/Jifty plugins/WikiToolbar/lib/Jifty/Plugin plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Action plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Model plugins/WikiToolbar/share plugins/WikiToolbar/share/po plugins/WikiToolbar/share/web/static plugins/WikiToolbar/share/web/static/img plugins/WikiToolbar/share/web/static/img/wt plugins/WikiToolbar/share/web/static/js plugins/WikiToolbar/share/web/templates plugins/WikiToolbar/t plugins/WyzzEditor plugins/WyzzEditor/doc plugins/WyzzEditor/lib plugins/WyzzEditor/lib/Jifty plugins/WyzzEditor/lib/Jifty/Plugin plugins/WyzzEditor/lib/Jifty/Plugin/WyzzEditor plugins/WyzzEditor/share plugins/WyzzEditor/share/po plugins/WyzzEditor/share/web plugins/WyzzEditor/share/web/static plugins/WyzzEditor/share/web/static/img plugins/WyzzEditor/share/web/static/img/wyzzicons plugins/WyzzEditor/share/web/static/js plugins/WyzzEditor/share/web/static/js/wyzz plugins/WyzzEditor/share/web/static/wyzzstyles plugins/WyzzEditor/share/web/templates plugins/WyzzEditor/t share/plugins/Jifty/Plugin/OnlineDocs/web/templates/__jifty/online_docs share/po share/web/static/css share/web/static/css/yui/calendar share/web/static/css/yui/menu share/web/static/css/yui/tabview share/web/static/js/yui share/web/templates/_elements t t/Mapper/t t/TestApp-Plugin-PasswordAuth/etc t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/Model t/TestApp-Plugin-PasswordAuth/t t/TestApp/lib/TestApp t/TestApp/lib/TestApp/View t/TestApp/t

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Mon May 7 16:28:40 EDT 2007


Author: jesse
Date: Mon May  7 16:28:32 2007
New Revision: 3209

Added:
   jifty/branches/virtual-models/doc/notes-on-distributed-operations
   jifty/branches/virtual-models/doc/talks/DoxoryDemo.tgz   (contents, props changed)
   jifty/branches/virtual-models/doc/talks/oscon.2007.dsls.txt
   jifty/branches/virtual-models/doc/talks/present-slides
   jifty/branches/virtual-models/doc/talks/yapc.asia.2007.ja.txt
   jifty/branches/virtual-models/doc/talks/yapc.asia.2007.txt
   jifty/branches/virtual-models/doc/talks/yapcasia2007-doxory.key.tbz2   (contents, props changed)
   jifty/branches/virtual-models/doc/talks/yapcasia2007-doxory.pdf
   jifty/branches/virtual-models/examples/Doxory/
   jifty/branches/virtual-models/examples/Doxory/Makefile.PL
   jifty/branches/virtual-models/examples/Doxory/bin/
   jifty/branches/virtual-models/examples/Doxory/bin/jifty   (contents, props changed)
   jifty/branches/virtual-models/examples/Doxory/doc/
   jifty/branches/virtual-models/examples/Doxory/doxory   (contents, props changed)
   jifty/branches/virtual-models/examples/Doxory/etc/
   jifty/branches/virtual-models/examples/Doxory/etc/config.yml
   jifty/branches/virtual-models/examples/Doxory/lib/
   jifty/branches/virtual-models/examples/Doxory/lib/Doxory/
   jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Action/
   jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Dispatcher.pm
   jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Model/
   jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Model/Choice.pm
   jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Model/User.pm
   jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Model/Vote.pm
   jifty/branches/virtual-models/examples/Doxory/lib/Doxory/View.pm
   jifty/branches/virtual-models/examples/Doxory/log/
   jifty/branches/virtual-models/examples/Doxory/share/
   jifty/branches/virtual-models/examples/Doxory/share/po/
   jifty/branches/virtual-models/examples/Doxory/share/po/zh_cn.po
   jifty/branches/virtual-models/examples/Doxory/share/po/zh_tw.po
   jifty/branches/virtual-models/examples/Doxory/share/web/
   jifty/branches/virtual-models/examples/Doxory/share/web/static/
   jifty/branches/virtual-models/examples/Doxory/share/web/templates/
   jifty/branches/virtual-models/examples/Doxory/t/
   jifty/branches/virtual-models/examples/Doxory/t/00-model-User.t
   jifty/branches/virtual-models/examples/Doxory/var/
   jifty/branches/virtual-models/examples/Doxory/var/mason/
   jifty/branches/virtual-models/examples/Example-Todo/
   jifty/branches/virtual-models/examples/Example-Todo/META.yml
   jifty/branches/virtual-models/examples/Example-Todo/Makefile.PL
   jifty/branches/virtual-models/examples/Example-Todo/bin/
   jifty/branches/virtual-models/examples/Example-Todo/bin/jifty   (contents, props changed)
   jifty/branches/virtual-models/examples/Example-Todo/doc/
   jifty/branches/virtual-models/examples/Example-Todo/etc/
   jifty/branches/virtual-models/examples/Example-Todo/etc/config.yml
   jifty/branches/virtual-models/examples/Example-Todo/inc/
   jifty/branches/virtual-models/examples/Example-Todo/inc/.author/
   jifty/branches/virtual-models/examples/Example-Todo/inc/Module/
   jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install/
   jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install.pm
   jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install/Base.pm
   jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install/Metadata.pm
   jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install/WriteAll.pm
   jifty/branches/virtual-models/examples/Example-Todo/lib/
   jifty/branches/virtual-models/examples/Example-Todo/lib/Example/
   jifty/branches/virtual-models/examples/Example-Todo/lib/Example/Todo/
   jifty/branches/virtual-models/examples/Example-Todo/lib/Example/Todo/Action/
   jifty/branches/virtual-models/examples/Example-Todo/lib/Example/Todo/Model/
   jifty/branches/virtual-models/examples/Example-Todo/lib/Example/Todo/Model/Todo.pm
   jifty/branches/virtual-models/examples/Example-Todo/log/
   jifty/branches/virtual-models/examples/Example-Todo/share/
   jifty/branches/virtual-models/examples/Example-Todo/share/po/
   jifty/branches/virtual-models/examples/Example-Todo/share/web/
   jifty/branches/virtual-models/examples/Example-Todo/share/web/static/
   jifty/branches/virtual-models/examples/Example-Todo/share/web/templates/
   jifty/branches/virtual-models/examples/Example-Todo/t/
   jifty/branches/virtual-models/examples/Example-Todo/t/00-model-Todo.t
   jifty/branches/virtual-models/lib/Jifty/Plugin/OnlineDocs/Dispatcher.pm
   jifty/branches/virtual-models/lib/Jifty/Server/Prefork/
   jifty/branches/virtual-models/lib/Jifty/Server/Prefork.pm
   jifty/branches/virtual-models/lib/Jifty/Server/Prefork/NetServer.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Collection.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Session/None.pm
   jifty/branches/virtual-models/plugins/DumpDispatcher/
   jifty/branches/virtual-models/plugins/DumpDispatcher/Makefile.PL
   jifty/branches/virtual-models/plugins/DumpDispatcher/doc/
   jifty/branches/virtual-models/plugins/DumpDispatcher/lib/
   jifty/branches/virtual-models/plugins/DumpDispatcher/lib/Jifty/
   jifty/branches/virtual-models/plugins/DumpDispatcher/lib/Jifty/Plugin/
   jifty/branches/virtual-models/plugins/DumpDispatcher/lib/Jifty/Plugin/DumpDispatcher.pm
   jifty/branches/virtual-models/plugins/DumpDispatcher/share/
   jifty/branches/virtual-models/plugins/DumpDispatcher/share/po/
   jifty/branches/virtual-models/plugins/DumpDispatcher/share/web/
   jifty/branches/virtual-models/plugins/DumpDispatcher/share/web/static/
   jifty/branches/virtual-models/plugins/DumpDispatcher/share/web/templates/
   jifty/branches/virtual-models/plugins/DumpDispatcher/t/
   jifty/branches/virtual-models/plugins/ExtJS/
   jifty/branches/virtual-models/plugins/ExtJS/Makefile.PL
   jifty/branches/virtual-models/plugins/ExtJS/doc/
   jifty/branches/virtual-models/plugins/ExtJS/lib/
   jifty/branches/virtual-models/plugins/ExtJS/lib/Jifty/
   jifty/branches/virtual-models/plugins/ExtJS/lib/Jifty/Plugin/
   jifty/branches/virtual-models/plugins/ExtJS/lib/Jifty/Plugin/ExtJS/
   jifty/branches/virtual-models/plugins/ExtJS/lib/Jifty/Plugin/ExtJS.pm
   jifty/branches/virtual-models/plugins/ExtJS/lib/Jifty/Plugin/ExtJS/Action/
   jifty/branches/virtual-models/plugins/ExtJS/lib/Jifty/Plugin/ExtJS/Dispatcher.pm
   jifty/branches/virtual-models/plugins/ExtJS/lib/Jifty/Plugin/ExtJS/Model/
   jifty/branches/virtual-models/plugins/ExtJS/share/
   jifty/branches/virtual-models/plugins/ExtJS/share/po/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/README.txt
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/basic-dialog.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/box.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/button.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/combo.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/core.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/date-picker.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/dd.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/debug.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ext-all.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/form.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/grid.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/layout.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/menu.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/qtips.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/reset-min.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/resizable.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/tabs.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/toolbar.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/tree.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ytheme-aero.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ytheme-gray.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ytheme-vista.css
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/aero-close-over.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/aero-close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-center.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-left.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-right.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/collapse-over.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/e-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/expand-over.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/hd-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/s-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/se-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/w-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/gradient-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-blue-split.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-hrow.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-split.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-vista-hd.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/pspbrwse.jbf   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort-col-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort_asc.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort_desc.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/gradient-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/ns-collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/ns-expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-title-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-title-light-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/tab-close-on.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/tab-close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/qtip/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/qtip/bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/s.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/e-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/e-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/ne-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/ne-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/nw-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/nw-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/s-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/s-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/se-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/se-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/sw-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/sw-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-inactive-left-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-inactive-right-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-left-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-right-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-bg.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-btm-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/toolbar/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/toolbar/bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/toolbar/tb-btn-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/btn-arrow.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/btn-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/e-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/hd-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/progress.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/progress2.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/s-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/se-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/corners-blue.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/corners.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/l-blue.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/l.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/r-blue.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/r.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/tb-blue.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/tb.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/dd/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-add.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-no.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-yes.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/form/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/form/date-trigger.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/form/error-tip-corners.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/form/exclamation.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/form/text-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/form/trigger.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/gradient-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/Thumbs.db   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/arrow-left-white.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/arrow-right-white.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/col-move-bottom.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/col-move-top.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/dirty.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/done.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/drop-no.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/drop-yes.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/footer-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-blue-hd.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-blue-split.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-hrow.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-loading.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-split.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-vista-hd.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-asc.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-desc.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-lock.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-lock.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-unlock.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-unlock.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/invalid_line.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/loading.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/mso-hd.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/nowait.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-first-disabled.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-first.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-last-disabled.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-last.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-next-disabled.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-next.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-prev-disabled.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-prev.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/pick-button.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/refresh.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/sort_asc.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/sort_desc.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/wait.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/gradient-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/ns-collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/ns-expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-title-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-title-light-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/stick.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/stuck.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/tab-close-on.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/tab-close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/menu/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/menu/checked.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/menu/group-checked.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/menu/menu-parent.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/menu/menu.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/menu/unchecked.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/qtip/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/qtip/bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/qtip/close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/qtip/tip-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/s.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shadow-lr.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shadow.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shared/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shared/calendar.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shared/left-btn.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shared/right-btn.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shared/warning.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/e-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/e-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/ne-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/ne-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/nw-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/nw-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/s-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/s-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/se-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/se-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/square.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/sw-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/sw-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tabs/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-inactive-left-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-inactive-right-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-left-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-right-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-arrow-light.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-arrow.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-over-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/gray-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/tb-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/tb-btn-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-add.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-between.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-no.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-over.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-under.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-yes.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-minus-nl.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-minus.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-plus-nl.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-plus.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-line.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-minus-nl.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-minus.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-plus-nl.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-plus.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/folder-open.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/folder.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/leaf.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/loading.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/s.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/dlg-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/e-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/hd-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/s-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/se-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/gradient-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/grid/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/grid/grid-hrow.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/gradient-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/ns-collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/ns-expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-title-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-title-light-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/stick.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/tab-close-on.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/tab-close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/menu/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/menu/checked.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/menu/group-checked.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/menu/menu-parent.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/menu/menu.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/menu/unchecked.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/qtip/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/qtip/bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/qtip/tip-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/s.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/e-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/e-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/ne-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/ne-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/nw-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/nw-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/s-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/s-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/se-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/se-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/sw-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/sw-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/tabs/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-inactive-left-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-inactive-right-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-left-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-right-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/toolbar/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/toolbar/gray-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/toolbar/tb-btn-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-center.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-left.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-right.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/dlg-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/e-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/hd-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/s-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/se-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/w-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/gradient-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/grid/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/grid/grid-split.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/grid/grid-vista-hd.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/gradient-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/ns-collapse.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/ns-expand.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-title-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-title-light-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/stick.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/tab-close-on.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/tab-close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/qtip/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/qtip/bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/qtip/tip-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/s.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/e-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/e-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/ne-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/ne-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/nw-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/nw-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/s-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/s-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/se-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/se-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/sw-handle-dark.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/sw-handle.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/tabs/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-inactive-left-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-inactive-right-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-left-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-right-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/toolbar/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/toolbar/gray-bg.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/toolbar/tb-btn-sprite.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/jquery/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/jquery/ext-jquery-adapter.js
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/prototype/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/prototype/ext-prototype-adapter.js
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/yui/
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/yui/ext-yui-adapter.js
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/yui/yui-utilities.js
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/ext-all.js
   jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/ext-config.js
   jifty/branches/virtual-models/plugins/ExtJS/share/web/templates/
   jifty/branches/virtual-models/plugins/ExtJS/t/
   jifty/branches/virtual-models/plugins/WikiToolbar/
   jifty/branches/virtual-models/plugins/WikiToolbar/Makefile.PL
   jifty/branches/virtual-models/plugins/WikiToolbar/doc/
   jifty/branches/virtual-models/plugins/WikiToolbar/lib/
   jifty/branches/virtual-models/plugins/WikiToolbar/lib/Jifty/
   jifty/branches/virtual-models/plugins/WikiToolbar/lib/Jifty/Plugin/
   jifty/branches/virtual-models/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/
   jifty/branches/virtual-models/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar.pm
   jifty/branches/virtual-models/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Action/
   jifty/branches/virtual-models/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Dispatcher.pm
   jifty/branches/virtual-models/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Model/
   jifty/branches/virtual-models/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Textarea.pm
   jifty/branches/virtual-models/plugins/WikiToolbar/share/
   jifty/branches/virtual-models/plugins/WikiToolbar/share/po/
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/bold.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/box.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/center.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/code.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/code1.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/empty.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/h1.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/h2.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/h3.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/italic.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/link.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/linkextern.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/new.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/ol.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/red.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/strike.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/tab.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/ul.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/img/wt/underline.png   (contents, props changed)
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/js/
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/static/js/wikitoolbar.js
   jifty/branches/virtual-models/plugins/WikiToolbar/share/web/templates/
   jifty/branches/virtual-models/plugins/WikiToolbar/t/
   jifty/branches/virtual-models/plugins/WyzzEditor/
   jifty/branches/virtual-models/plugins/WyzzEditor/Makefile.PL
   jifty/branches/virtual-models/plugins/WyzzEditor/doc/
   jifty/branches/virtual-models/plugins/WyzzEditor/lib/
   jifty/branches/virtual-models/plugins/WyzzEditor/lib/Jifty/
   jifty/branches/virtual-models/plugins/WyzzEditor/lib/Jifty/Plugin/
   jifty/branches/virtual-models/plugins/WyzzEditor/lib/Jifty/Plugin/WyzzEditor/
   jifty/branches/virtual-models/plugins/WyzzEditor/lib/Jifty/Plugin/WyzzEditor.pm
   jifty/branches/virtual-models/plugins/WyzzEditor/lib/Jifty/Plugin/WyzzEditor/Dispatcher.pm
   jifty/branches/virtual-models/plugins/WyzzEditor/lib/Jifty/Plugin/WyzzEditor/Textarea.pm
   jifty/branches/virtual-models/plugins/WyzzEditor/share/
   jifty/branches/virtual-models/plugins/WyzzEditor/share/po/
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/backcolor.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/bold.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/close.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/copy.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/cut.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/downsize.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/font.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/forecolor.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/headers.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/help.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/htmlmode.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/indent.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/inserthorizontalrule.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/insertimage.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/insertorderedlist.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/insertunorderedlist.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/italic.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/justifycenter.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/justifyfull.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/justifyleft.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/justifyright.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/link.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/outdent.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/paste.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/redo.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/removeformat.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/specialchar.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/strikethrough.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/subscript.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/superscript.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/underline.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/undo.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/upsize.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/img/wyzzicons/wyzzicon.gif   (contents, props changed)
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/js/
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/js/wyzz/
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/js/wyzz.js
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/wyzzstyles/
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/wyzzstyles/editarea.css
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/static/wyzzstyles/style.css
   jifty/branches/virtual-models/plugins/WyzzEditor/share/web/templates/
   jifty/branches/virtual-models/plugins/WyzzEditor/t/
   jifty/branches/virtual-models/share/po/ru.po
   jifty/branches/virtual-models/share/web/static/css/yui/menu/
   jifty/branches/virtual-models/share/web/static/css/yui/menu/map.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menu.css
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menuarodwn8_dim_1.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menuarodwn8_hov_1.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menuarodwn8_nrm_1.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menuarorght8_dim_1.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menuarorght8_hov_1.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menuarorght8_nrm_1.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menuaroup8_dim_1.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menuaroup8_nrm_1.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menuchk8_dim_1.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menuchk8_hov_1.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/menu/menuchk8_nrm_1.gif   (contents, props changed)
   jifty/branches/virtual-models/share/web/static/css/yui/tabview/tabview.css
   jifty/branches/virtual-models/share/web/static/js/yui/element-beta.js
   jifty/branches/virtual-models/share/web/static/js/yui/menu.js
   jifty/branches/virtual-models/t/01-test-mechanize.t
   jifty/branches/virtual-models/t/10-utf8.t
   jifty/branches/virtual-models/t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/CurrentUser.pm
   jifty/branches/virtual-models/t/TestApp-Plugin-PasswordAuth/t/11-current_user.t
   jifty/branches/virtual-models/t/TestApp-Plugin-PasswordAuth/t/12-i18n.t
   jifty/branches/virtual-models/t/TestApp-Plugin-PasswordAuth/t/12-signup.t
   jifty/branches/virtual-models/t/TestApp/lib/TestApp/View/
   jifty/branches/virtual-models/t/TestApp/lib/TestApp/View/base.pm
   jifty/branches/virtual-models/t/TestApp/lib/TestApp/View/instance.pm
   jifty/branches/virtual-models/t/TestApp/t/15-template-subclass.t
Removed:
   jifty/branches/virtual-models/lib/Jifty/Plugin/AdminUI/View-not-yet.pm
   jifty/branches/virtual-models/lib/auto/
Modified:
   jifty/branches/virtual-models/   (props changed)
   jifty/branches/virtual-models/AUTHORS
   jifty/branches/virtual-models/Changelog
   jifty/branches/virtual-models/MANIFEST
   jifty/branches/virtual-models/META.yml
   jifty/branches/virtual-models/Makefile.PL
   jifty/branches/virtual-models/SIGNATURE
   jifty/branches/virtual-models/debian/changelog
   jifty/branches/virtual-models/debian/control
   jifty/branches/virtual-models/doc/talks/   (props changed)
   jifty/branches/virtual-models/inc/Module/Install.pm
   jifty/branches/virtual-models/inc/Module/Install/AutoInstall.pm
   jifty/branches/virtual-models/inc/Module/Install/Base.pm
   jifty/branches/virtual-models/inc/Module/Install/Can.pm
   jifty/branches/virtual-models/inc/Module/Install/Fetch.pm
   jifty/branches/virtual-models/inc/Module/Install/Include.pm
   jifty/branches/virtual-models/inc/Module/Install/Makefile.pm
   jifty/branches/virtual-models/inc/Module/Install/Metadata.pm
   jifty/branches/virtual-models/inc/Module/Install/Scripts.pm
   jifty/branches/virtual-models/inc/Module/Install/Share.pm
   jifty/branches/virtual-models/inc/Module/Install/Win32.pm
   jifty/branches/virtual-models/inc/Module/Install/WriteAll.pm
   jifty/branches/virtual-models/lib/Jifty.pm
   jifty/branches/virtual-models/lib/Jifty/Action.pm
   jifty/branches/virtual-models/lib/Jifty/Action/Record.pm
   jifty/branches/virtual-models/lib/Jifty/ClassLoader.pm
   jifty/branches/virtual-models/lib/Jifty/Config.pm
   jifty/branches/virtual-models/lib/Jifty/CurrentUser.pm
   jifty/branches/virtual-models/lib/Jifty/Dispatcher.pm
   jifty/branches/virtual-models/lib/Jifty/Handle.pm
   jifty/branches/virtual-models/lib/Jifty/Handler.pm
   jifty/branches/virtual-models/lib/Jifty/I18N.pm
   jifty/branches/virtual-models/lib/Jifty/JSON.pm
   jifty/branches/virtual-models/lib/Jifty/LetMe.pm
   jifty/branches/virtual-models/lib/Jifty/Manual/AccessControl.pod
   jifty/branches/virtual-models/lib/Jifty/Manual/Cookbook.pod
   jifty/branches/virtual-models/lib/Jifty/Module/Pluggable.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/ConfirmEmail.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/Login.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/ResetLostPassword.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Dispatcher.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Mixin/Model/User.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/View.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/ErrorTemplates/View.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/OnlineDocs.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/REST/Dispatcher.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/SkeletonApp/Dispatcher.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/SkeletonApp/View.pm
   jifty/branches/virtual-models/lib/Jifty/Plugin/User/Mixin/Model/User.pm
   jifty/branches/virtual-models/lib/Jifty/Record.pm
   jifty/branches/virtual-models/lib/Jifty/Script/FastCGI.pm
   jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm
   jifty/branches/virtual-models/lib/Jifty/Subs/Render.pm
   jifty/branches/virtual-models/lib/Jifty/Test.pm
   jifty/branches/virtual-models/lib/Jifty/Test/WWW/Mechanize.pm
   jifty/branches/virtual-models/lib/Jifty/TestServer.pm
   jifty/branches/virtual-models/lib/Jifty/Upgrade.pm
   jifty/branches/virtual-models/lib/Jifty/Util.pm
   jifty/branches/virtual-models/lib/Jifty/View/Declare/Handler.pm
   jifty/branches/virtual-models/lib/Jifty/View/Declare/Helpers.pm
   jifty/branches/virtual-models/lib/Jifty/View/Mason/Handler.pm
   jifty/branches/virtual-models/lib/Jifty/View/Static/Handler.pm
   jifty/branches/virtual-models/lib/Jifty/Web.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Element.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Form/Field.pm
   jifty/branches/virtual-models/lib/Jifty/Web/Menu.pm
   jifty/branches/virtual-models/lib/Jifty/Web/PageRegion.pm
   jifty/branches/virtual-models/plugins/EditInPlace/lib/Jifty/Plugin/EditInPlace/Action/FileEditor.pm
   jifty/branches/virtual-models/share/plugins/Jifty/Plugin/OnlineDocs/web/templates/__jifty/online_docs/content.html
   jifty/branches/virtual-models/share/po/en.po
   jifty/branches/virtual-models/share/po/fr.po
   jifty/branches/virtual-models/share/po/ja.po
   jifty/branches/virtual-models/share/po/zh_cn.po
   jifty/branches/virtual-models/share/po/zh_tw.po
   jifty/branches/virtual-models/share/web/static/css/forms.css
   jifty/branches/virtual-models/share/web/static/css/main.css
   jifty/branches/virtual-models/share/web/static/css/yui/calendar/calendar.css
   jifty/branches/virtual-models/share/web/static/css/yui/tabview/border_tabs.css
   jifty/branches/virtual-models/share/web/static/css/yui/tabview/tabs.css
   jifty/branches/virtual-models/share/web/static/js/yui/calendar.js
   jifty/branches/virtual-models/share/web/static/js/yui/container.js
   jifty/branches/virtual-models/share/web/static/js/yui/dom.js
   jifty/branches/virtual-models/share/web/static/js/yui/event.js
   jifty/branches/virtual-models/share/web/static/js/yui/tabview.js
   jifty/branches/virtual-models/share/web/static/js/yui/yahoo.js
   jifty/branches/virtual-models/share/web/templates/_elements/nav
   jifty/branches/virtual-models/t/Mapper/t/02-api.t
   jifty/branches/virtual-models/t/TestApp-Plugin-PasswordAuth/etc/config.yml
   jifty/branches/virtual-models/t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/Dispatcher.pm
   jifty/branches/virtual-models/t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/Model/User.pm
   jifty/branches/virtual-models/t/TestApp-Plugin-PasswordAuth/t/00-model-User.t
   jifty/branches/virtual-models/t/TestApp/lib/TestApp/View.pm

Log:
* Merge down from trunk


r53594 at pinglin (orig r3012):  jesse | 2007-03-17 15:16:25 -0400
  r53592 at pinglin:  jesse | 2007-03-17 15:15:48 -0400
  * minor cleanup based on attempted use of the login/signup plugin
 
 r53596 at pinglin (orig r3014):  dpavlin | 2007-03-17 20:45:52 -0400
 extracted dump_rules into DumpDispatcher plugin
 r53620 at pinglin (orig r3025):  jesse | 2007-03-18 17:44:30 -0400
  r53619 at pinglin:  jesse | 2007-03-18 17:44:06 -0400
  * When you rest a lost password, email address is implicitly confirmed
 
 r53623 at pinglin (orig r3026):  jesse | 2007-03-18 22:03:24 -0400
  r53621 at pinglin:  jesse | 2007-03-18 21:35:20 -0400
  * Added the ability to have a return button that looks like a submit button on a form.
 
 r53624 at pinglin (orig r3027):  jesse | 2007-03-18 22:03:33 -0400
  r53622 at pinglin:  jesse | 2007-03-18 21:37:50 -0400
  * return from tangents for login, signup, password reminders
 
 r53633 at pinglin (orig r3028):  jesse | 2007-03-19 13:31:14 -0400
  r53632 at pinglin:  jesse | 2007-03-19 13:27:23 -0400
      From:     evdb at ecclestoad.co.uk
      Subject:    Re: [jifty-devel] 'smart_tag_wrapper' to make creating smarter tags easier
      Date:   March 19, 2007 11:36:20 AM EDT
      To:       jifty-devel at lists.jifty.org
      Reply-To:     jifty-devel at lists.jifty.org
  
  On 19/03/07, Jesse Vincent <jesse at bestpractical.com> wrote:
  I needed this tonight. Wanna make it go? ;)
  On Mar 16, 2007, at 5:26 AM, Edmund von der Burg wrote:
  
  I'd love to make it go but can't at the moment as I am not able to
  connect to the net this week (except via a local libary machine that
  is so crippled that it does not count).
  
  The code at the start of this thread for 'form' works for me, please
  add it as you see fit :)
  
  Cheers,
   Edmund
  
  > Hello,
  >
  > I've just committed code to Template::Declare that should make it
  > easier to create smarter wrappers in the templates - for example the
  > 'form' wrapper. Please see the diff for the details.
  >
  >  http://svn.jifty.org/index.cgi/jifty/revision/?rev=2989
  >
  > Using this the 'form' sub in J::V::Declare::Helpers would become:
  >
  > {
  >    no warnings qw/redefine/;
  >    sub form (&) {
  >        my $code = shift;
  >
  >        smart_tag_wrapper {
  >          outs_raw( Jifty->web->form->start(@_) );
  >          $code->();
  >          outs_raw( Jifty->web->form->end );
  >          return '';
  >        };
  >    }
  > }
  >
  >
  > you could then call it like this (not tested properly):
  >
  > my $action = ...setup_action..;
  > with( call => $next, name => "loginbox" ),
  
 
 r53635 at pinglin (orig r3029):  jesse | 2007-03-19 17:06:45 -0400
  r53634 at pinglin:  jesse | 2007-03-19 16:56:05 -0400
   * Don't create a new config object every time we look at the db version
 
 r53646 at pinglin (orig r3030):  sterling | 2007-03-19 17:07:37 -0400
  r4119 at riddle:  andrew | 2007-03-19 16:06:22 -0500
  Modified submit_html_ok to make it behave like the documentation says it should.
 
 r53647 at pinglin (orig r3031):  falcone | 2007-03-19 17:34:51 -0400
  r17465 at ketch:  falcone | 2007-03-19 17:32:42 -0400
  * don't load up PodSimple and other friends unless you've
    actually enabled AdminMode and brought OnlineDocs
    into the picture
 
 r53648 at pinglin (orig r3032):  jesse | 2007-03-19 21:30:44 -0400
  r53640 at pinglin:  jesse | 2007-03-19 21:29:02 -0400
  * When running coverage, don't use Class::Accessor::Named as it uses Hook::LexWrap
 
 r53740 at pinglin (orig r3033):  falcone | 2007-03-19 23:04:35 -0400
  r17477 at ketch:  falcone | 2007-03-19 22:59:47 -0400
  * remove duplicated line
 
 r53741 at pinglin (orig r3034):  falcone | 2007-03-19 23:04:41 -0400
  r17478 at ketch:  falcone | 2007-03-19 23:00:26 -0400
  * Administration and Online docs tabs are set in Jifty/Plugin/*/Dispatcher.pm
 
 r53742 at pinglin (orig r3035):  falcone | 2007-03-19 23:05:15 -0400
  r17479 at ketch:  falcone | 2007-03-19 23:02:13 -0400
  * don't require a bunch of unused modules that don't trickle to the templates
  * don't set the Home tab twice
  * use Pod::Simple::HTML where we need it
 
 r53743 at pinglin (orig r3036):  sterling | 2007-03-20 10:38:43 -0400
  r4122 at riddle:  andrew | 2007-03-20 09:31:17 -0500
  Added a basic test stub for Jifty::Test::WWW::Mechanize.
 
 r53746 at pinglin (orig r3037):  jesse | 2007-03-20 20:58:57 -0400
  r53745 at pinglin:  jesse | 2007-03-20 20:57:00 -0400
   * Switch config to automatic instantiation
 
 r53748 at pinglin (orig r3038):  jesse | 2007-03-20 21:05:02 -0400
  r53747 at pinglin:  jesse | 2007-03-20 21:04:44 -0400
  * When you break an API, it breaks tests.
  
 
 r53763 at pinglin (orig r3039):  alexmv | 2007-03-20 22:55:18 -0400
  r17706 at zoq-fot-pik:  chmrr | 2007-03-06 17:06:29 -0500
   * Log::Log4perl::Appender::String (used in tests) was only added in
     1.02; require at least that
 
 r53764 at pinglin (orig r3040):  alexmv | 2007-03-20 22:55:58 -0400
  r18076 at zoq-fot-pik:  chmrr | 2007-03-20 22:55:02 -0400
   * Use Jifty->app_class in a couple more places
 
 r53765 at pinglin (orig r3041):  sterling | 2007-03-21 08:38:25 -0400
  r4160 at riddle:  andrew | 2007-03-21 07:38:09 -0500
  Updated documentation to reflect that fact that submit_html_ok() takes no arguments.
 
 r53767 at pinglin (orig r3042):  jesse | 2007-03-21 14:55:00 -0400
  r53762 at pinglin:  jesse | 2007-03-21 14:52:07 -0400
  * started outline of yapc::asia talk
  
 
 r53772 at pinglin (orig r3043):  jesse | 2007-03-21 15:39:43 -0400
  r53770 at pinglin:  jesse | 2007-03-21 15:39:03 -0400
  * Better plugin I18N
  
  Alexey Grebenschikov wrote:
  Plugin paths don't need to convert because File::ShareDir::module_dir
  always returns an absolute path. I have added also modification checking
  to the Jifty::I18N::refresh for plugin po files. 
  
  
  
 
 r53773 at pinglin (orig r3044):  jesse | 2007-03-21 15:39:51 -0400
  r53771 at pinglin:  jesse | 2007-03-21 15:39:16 -0400
  * Make sure test coverage copes with new jifty->config 
 
 r53786 at pinglin (orig r3045):  clkao | 2007-03-22 14:16:42 -0400
 The value of field should not be localised.
 r53789 at pinglin (orig r3046):  jesse | 2007-03-22 21:10:32 -0400
  r53788 at pinglin:  jesse | 2007-03-22 21:09:27 -0400
  * Refactor the I18N plugin stuff to not fail tests.
 
 r53800 at pinglin (orig r3047):  nelhage | 2007-03-22 21:18:06 -0400
 We load the config on demand now, so it always exists. Test for
 classloader existence, instead of config existence, to tell whether or
 not we need to Jifty->new.
 
 r53802 at pinglin (orig r3049):  jesse | 2007-03-23 19:59:02 -0400
  r53798 at pinglin:  jesse | 2007-03-23 19:57:04 -0400
  * skeleton for clkao to fill in ;)
 
 r53843 at pinglin (orig r3051):  clkao | 2007-03-23 22:05:42 -0400
 Make render_region resolve relative template in current context.
 r53845 at pinglin (orig r3053):  clkao | 2007-03-23 22:30:15 -0400
 tests for view subclasses.
 r53846 at pinglin (orig r3054):  clkao | 2007-03-23 22:33:23 -0400
 failing tests for view subclasses.
 r53847 at pinglin (orig r3055):  clkao | 2007-03-23 23:11:37 -0400
 tidy up.
 r53848 at pinglin (orig r3056):  clkao | 2007-03-24 11:40:53 -0400
 bypass $self for  page content callbacks.
 r54202 at pinglin (orig r3058):  jesse | 2007-03-25 11:24:07 -0400
  r53799 at pinglin:  jesse | 2007-03-23 19:58:39 -0400
  * Can't just check to see if the config exists to decide whether to initialze the Jifty
 
 r54203 at pinglin (orig r3059):  jesse | 2007-03-25 11:25:01 -0400
  r53805 at pinglin:  jesse | 2007-03-24 20:00:04 -0400
  * added back the div id 'content' for parity with old jifty templates 
 
 r54209 at pinglin (orig r3060):  jesse | 2007-03-25 22:46:03 -0400
  r54207 at pinglin:  jesse | 2007-03-25 15:49:17 -0700
  * Added a 'None' session type for when your application doesn't need sessions
 
 r54243 at pinglin (orig r3061):  clkao | 2007-03-26 08:59:38 -0400
 fix a bracket that breaks is::title.
 r54244 at pinglin (orig r3062):  clkao | 2007-03-26 09:12:51 -0400
 Move the h1 in default wrapper to a overridable template.
 r54245 at pinglin (orig r3063):  nelhage | 2007-03-26 16:31:29 -0400
 Make CurrentUser->new work as a method on an instance, so that
 as_superuser works.
 
 r54396 at pinglin (orig r3075):  jesse | 2007-03-31 21:27:37 -0400
  r54395 at pinglin:  jesse | 2007-03-31 18:26:46 -0700
  * helpers improvements for T::D
 
 r54402 at pinglin (orig r3077):  jesse | 2007-03-31 22:14:19 -0400
  r54401 at pinglin:  jesse | 2007-03-31 19:13:28 -0700
   * Notes on the early genesis of JDBI schema
 
 r54405 at pinglin (orig r3078):  dpavlin | 2007-04-01 08:41:39 -0400
 fix handling of multi-line data when encoded in JSON -- they should never
 wrap over multiple lines in generated output
 r54414 at pinglin (orig r3079):  dpavlin | 2007-04-01 14:32:15 -0400
 remove extra skeleton files, configuration example in pod
 r54415 at pinglin (orig r3080):  trs | 2007-04-02 01:22:07 -0400
  r20560 at zot:  tom | 2007-04-02 01:21:31 -0400
  * Make =head2 sections consistently titled
  * Add section on using models/actions outside of a Jifty app
 
 r54416 at pinglin (orig r3081):  jesse | 2007-04-03 02:25:58 -0400
  r54413 at dhcp207:  jesse | 2007-04-03 15:25:32 +0900
  * Next slides draft (and the tool to render them)
 
 r54419 at pinglin (orig r3083):  jesse | 2007-04-03 03:52:07 -0400
  r54417 at dhcp207:  jesse | 2007-04-03 16:51:42 +0900
   * ok. mostly ready
 
 r54421 at pinglin (orig r3084):  jesse | 2007-04-03 04:23:03 -0400
  r54420 at dhcp207:  jesse | 2007-04-03 17:22:40 +0900
  * tidy
 
 r54423 at pinglin (orig r3085):  jesse | 2007-04-03 04:45:09 -0400
  r54422 at dhcp207:  jesse | 2007-04-03 17:44:46 +0900
   intro slides
 
 r54425 at pinglin (orig r3086):  audreyt | 2007-04-03 04:47:07 -0400
 * dedebugbug.
 r54427 at pinglin (orig r3087):  jesse | 2007-04-03 05:10:58 -0400
  r54424 at dhcp207:  jesse | 2007-04-03 18:09:49 +0900
  * added a "SkipAccessControl" framework directive
 
 r54428 at pinglin (orig r3088):  audreyt | 2007-04-03 05:50:52 -0400
 * Jifty::Plugin - Authentication::Password now auto-loads LetMe and User.
 r54431 at pinglin (orig r3089):  jesse | 2007-04-03 06:12:52 -0400
  r54430 at dhcp207:  jesse | 2007-04-03 19:11:02 +0900
  * pod fixes
  * update tests to take advantage of audrey's new feature (plugin deps)
  
 
 r54433 at pinglin (orig r3090):  jesse | 2007-04-03 21:31:57 -0400
  r54432 at pinglin-2:  jesse | 2007-04-04 10:10:29 +0900
   * More tweaking
  
 
 r54436 at pinglin (orig r3091):  jesse | 2007-04-03 22:29:30 -0400
  r54434 at pinglin-2:  jesse | 2007-04-04 11:08:47 +0900
  * tweaky
 
 r54437 at pinglin (orig r3092):  jesse | 2007-04-03 22:30:07 -0400
  r54435 at pinglin-2:  jesse | 2007-04-04 11:29:04 +0900
  more slides
 
 r54439 at pinglin (orig r3093):  jesse | 2007-04-04 01:05:43 -0400
  r54438 at pinglin-2:  jesse | 2007-04-04 14:04:04 +0900
  * Slides system now has a presenter view
 
 r54441 at pinglin (orig r3094):  jesse | 2007-04-04 01:59:46 -0400
  r54440 at pinglin-2:  jesse | 2007-04-04 14:56:43 +0900
  * Autoopen the presenter tools
  
 
 r54444 at pinglin (orig r3095):  hlb | 2007-04-04 02:03:58 -0400
 * fix "open" class in menu - active menu item doesn't imply current open item
 
 r54445 at pinglin (orig r3096):  audreyt | 2007-04-04 14:18:24 -0400
 * Snapshot of doxory slides.
 r54448 at pinglin (orig r3097):  alexmv | 2007-04-04 19:53:33 -0400
  r18733 at zoq-fot-pik:  chmrr | 2007-04-04 19:53:06 -0400
   * Typo fix in example in POD
   * Remove old, unused empty directory
 
 r54480 at pinglin (orig r3098):  audreyt | 2007-04-05 01:28:43 -0400
 * YAPC::Asia 2007, "Jifty Now!", slides and demo.
 r54491 at pinglin (orig r3099):  audreyt | 2007-04-05 01:35:04 -0400
 * Add PDF version of the slides.
 r54530 at pinglin (orig r3103):  jesse | 2007-04-06 12:08:59 -0400
  r54442 at dhcp207:  jesse | 2007-04-04 17:50:57 +0900
  tweaking
  
 
 r54531 at pinglin (orig r3104):  jesse | 2007-04-06 12:09:18 -0400
  r54443 at dhcp207:  jesse | 2007-04-04 23:33:32 +0900
  * now with support for I18N (japanese)
 
 r54532 at pinglin (orig r3105):  jesse | 2007-04-06 12:10:25 -0400
  r54521 at dhcp207:  jesse | 2007-04-06 21:37:18 +0900
  * let the "email confirmed" field be visible from the admin ui
 
 r54533 at pinglin (orig r3106):  jesse | 2007-04-06 12:10:56 -0400
  r54522 at dhcp207:  jesse | 2007-04-06 21:37:27 +0900
  * Talk updates
 
 r54534 at pinglin (orig r3107):  jesse | 2007-04-06 12:11:14 -0400
  r54527 at dhcp207:  jesse | 2007-04-07 00:33:45 +0900
  * Refactoring to support more template engines 
  
  
 
 r54535 at pinglin (orig r3108):  jesse | 2007-04-06 12:11:45 -0400
  r54528 at dhcp207:  jesse | 2007-04-07 00:49:58 +0900
   *more refactorign to extract templating stuff
 
 r54536 at pinglin (orig r3109):  jesse | 2007-04-06 12:12:03 -0400
  r54529 at dhcp207:  jesse | 2007-04-07 01:08:43 +0900
  * Refactor and extract
 
 r54554 at pinglin (orig r3110):  jesse | 2007-04-07 00:22:29 -0400
  r54553 at dhcp207:  jesse | 2007-04-07 00:22:09 -0400
  * Preforking server support for Jifty::Server
 
 r54717 at pinglin (orig r3111):  ishigaki | 2007-04-08 10:18:58 -0400
 added Japanese translation of Jesse's talk at YAPC::Asia 2007
 r54718 at pinglin (orig r3112):  audreyt | 2007-04-08 11:37:06 -0400
 * present-slides: Avoid a "splitting to @_ is deprecated" warning.
 r54719 at pinglin (orig r3113):  trs | 2007-04-08 15:17:53 -0400
  r20646 at zot:  tom | 2007-04-08 15:17:04 -0400
  Add doc and prefork dependency so the doc and dep tests pass
 
 r54720 at pinglin (orig r3114):  dpavlin | 2007-04-08 15:49:35 -0400
 added audryt Doxory from doc/talks/yapcasia2007-doxory.pdf
 r54721 at pinglin (orig r3115):  dpavlin | 2007-04-08 15:59:08 -0400
 Turn on AdminMode and don't require login for it in dispatcher
 r54814 at pinglin (orig r3117):  evdb | 2007-04-11 11:50:41 -0400
 Allow '->superuser' to be both an object and class method.
 
 r54815 at pinglin (orig r3118):  hlb | 2007-04-12 03:32:44 -0400
 * Upgraded YUI to 2.2.1
   * NOTICE: if you are using yui tabview, 
     please use tabview.css instead of tabs.css
 * Added yui/element-beta.js and yui/menu.js in Web.pm
 
 r54816 at pinglin (orig r3119):  hlb | 2007-04-12 03:36:00 -0400
 * Added render_as_yui_menubar in Menu.pm
 
 r54817 at pinglin (orig r3120):  audreyt | 2007-04-12 06:54:33 -0400
 * Jifty::Plugin::REST::Dispatcher - Gugod pointed out that we don't need to
   stringify() the object-to-data output, because (esp for nested structures)
   it's far more convenient to have the $accept-specific formatter (e.g.
   YAML or JSON) to render it.
 r54818 at pinglin (orig r3121):  clkao | 2007-04-13 08:16:55 -0400
 render_region should have default empty path.
 r55429 at pinglin (orig r3122):  falcone | 2007-04-13 17:04:00 -0400
  r18017 at ketch:  falcone | 2007-04-13 17:02:35 -0400
  * WWW::Mechanize 1.22 removed the form method.  
    thanks to hdp for noticing/poking
 
 r55430 at pinglin (orig r3123):  audreyt | 2007-04-13 19:54:24 -0400
 * zh-tw L10N for authen/passwd/user plugins.
 r55431 at pinglin (orig r3124):  audreyt | 2007-04-13 19:55:39 -0400
 * Doxory L10N.
 r55447 at pinglin (orig r3130):  jesse | 2007-04-15 12:07:18 -0400
  r55444 at pinglin:  jesse | 2007-04-15 12:05:49 -0400
  * Notes on distributed operation (mostly based on reading papers about Xerox PARC
 
 r55448 at pinglin (orig r3131):  jesse | 2007-04-15 12:07:40 -0400
  r55445 at pinglin:  jesse | 2007-04-15 12:06:01 -0400
   * Start of the oscon 2007 talk 
 
 r55449 at pinglin (orig r3132):  jesse | 2007-04-15 12:07:49 -0400
  r55446 at pinglin:  jesse | 2007-04-15 12:06:10 -0400
  * Todoifying tests for release
 
 r55451 at pinglin (orig r3133):  jesse | 2007-04-15 12:32:05 -0400
  r55450 at pinglin:  jesse | 2007-04-15 12:31:42 -0400
  * Some of our 'optional' deps are required for Jifty's tests. Thanks to Nicholas Clark
 
 r55455 at pinglin (orig r3134):  jesse | 2007-04-15 12:55:47 -0400
  r55452 at pinglin:  jesse | 2007-04-15 12:54:47 -0400
  * Require current T::D
  r55453 at pinglin:  jesse | 2007-04-15 12:54:59 -0400
  * Bump for release
  r55454 at pinglin:  jesse | 2007-04-15 12:55:21 -0400
  * Require new Jifty::DBI
 
 r55458 at pinglin (orig r3135):  jesse | 2007-04-15 13:02:55 -0400
  r55456 at pinglin:  jesse | 2007-04-15 13:01:48 -0400
   manifest update
 
 r55459 at pinglin (orig r3136):  jesse | 2007-04-15 13:03:06 -0400
  r55457 at pinglin:  jesse | 2007-04-15 13:02:08 -0400
   * signature update
 
 r55485 at pinglin (orig r3139):  yves | 2007-04-15 17:05:12 -0400
 changes for debian packages 
 
 r55487 at pinglin (orig r3141):  clkao | 2007-04-16 08:36:13 -0400
 * no_index for examples/.
 * remove implicit no_index.
 
 r55488 at pinglin (orig r3142):  clkao | 2007-04-16 08:41:49 -0400
 Update MI and META.yml.
 r55489 at pinglin (orig r3143):  clkao | 2007-04-16 08:46:04 -0400
 Missed share/ in no_index.
 r55592 at pinglin (orig r3144):  hlb | 2007-04-16 13:59:52 -0400
 * Jifty::Plugins::ExtJS - it contains necessary files to run Ext JavaScript
   library. It comes with Ext v1.0.
 
 r55598 at pinglin (orig r3145):  yves | 2007-04-16 16:52:03 -0400
 some failing tests on new plugin password, for me test 9 is ok : object id is good, but tests 10 to 14 fail, current user can't read his name mail or mygroup
 
 r55599 at pinglin (orig r3146):  yves | 2007-04-16 17:13:31 -0400
 current_user_can must be set
 
 r55601 at pinglin (orig r3147):  jesse | 2007-04-17 02:57:40 -0400
  r55589 at apc:  jesse | 2007-04-16 21:11:21 +0200
  * Auth::Password plugin: Quiet down warning about a nonexistent class in @ISA by defering that until ->new time.
 
 r55602 at pinglin (orig r3148):  jesse | 2007-04-17 02:58:04 -0400
  r55590 at apc:  jesse | 2007-04-16 21:15:39 +0200
  * Quiet down falsely failing todo tests in template sublcassing.
 
 r55603 at pinglin (orig r3149):  jesse | 2007-04-17 02:58:13 -0400
  r55591 at apc:  jesse | 2007-04-16 21:23:28 +0200
  
  * poorly  started adminui port to TD was broken and caused test warnings. and was unused
 
 r55604 at pinglin (orig r3150):  jesse | 2007-04-17 02:58:41 -0400
  r55594 at apc:  jesse | 2007-04-16 22:17:03 +0200
   * 0.70416
 
 r55644 at pinglin (orig r3151):  yves | 2007-04-17 04:00:17 -0400
 debian stuff, fr.po update
 
 r55645 at pinglin (orig r3152):  yves | 2007-04-17 05:01:37 -0400
 change manual for access control with user and authentication::password plugins
 
 r55646 at pinglin (orig r3153):  yves | 2007-04-17 16:04:10 -0400
 failling test on i18n and T::D authentication plugin
 
 r55754 at pinglin (orig r3154):  evdb | 2007-04-18 11:40:13 -0400
 Created a method that can be over-ridden for custom test database setup
 
 r55765 at pinglin (orig r3155):  jesse | 2007-04-19 12:22:54 -0400
  r55756 at pinglin:  jesse | 2007-04-18 20:58:46 -0400
  Typo spotted by semifor
 
 r55766 at pinglin (orig r3156):  jesse | 2007-04-19 12:22:59 -0400
  r55764 at pinglin:  jesse | 2007-04-19 12:21:41 -0400
  * Doc updates for Jifty::ClassLoader -- David Good <dgood at willingminds.com>
 
 r55767 at pinglin (orig r3157):  semifor | 2007-04-19 13:28:12 -0400
 exceedingly trivial fix (semantic noop), but it's a start
 
 r55768 at pinglin (orig r3158):  audreyt | 2007-04-19 15:24:05 -0400
 * Revert the bogus r3147 as it kills Doxory example.  (reported by semifor++)
 r55770 at pinglin (orig r3159):  audreyt | 2007-04-19 15:33:13 -0400
 * Jifty::Module::Pluggable - Silence the @ISA warnings. 
 r55772 at pinglin (orig r3160):  semifor | 2007-04-19 18:31:47 -0400
 added regression test for bug fix (by autreyt) in rev 3158,
 Jifty::Plugin::Authentication::Password::Action::Signup
 
 r55829 at pinglin (orig r3161):  audreyt | 2007-04-20 01:36:55 -0400
 * Jifty::Upgrade - Defensive programming against tables that did
   not have "create table" in its schema for SQLite column renaming.
   (This really shouldn't happen.)
 r55831 at pinglin (orig r3163):  sterling | 2007-04-20 16:43:02 -0400
  r4564 at riddle:  andrew | 2007-04-20 15:42:21 -0500
  Added duck typing to the Jifty::Handle constructor to prevent difficult to trace error messages when the driver name is mispelt or fails to load.
 
 r55832 at pinglin (orig r3164):  jesse | 2007-04-22 19:33:50 -0400
  r55807 at pinglin:  jesse | 2007-04-22 19:19:36 -0400
  * More debugging info for broken letmes
 
 r55833 at pinglin (orig r3165):  jesse | 2007-04-22 19:33:59 -0400
  r55808 at pinglin:  jesse | 2007-04-22 19:19:56 -0400
  * Better "password reset" behaviour  
 
 r56079 at pinglin (orig r3166):  hlb | 2007-04-24 15:04:57 -0400
 * Added class="active" for current menu item in render_as_yui_menubar
 
 r56080 at pinglin (orig r3167):  audreyt | 2007-04-26 08:44:15 -0400
 * ErrorTemplates - Use absolute paths as relative ones in mixined templates
   does not appear to work yet.
 r56081 at pinglin (orig r3168):  audreyt | 2007-04-26 08:59:34 -0400
 * Jifty::Web::Form::Element - All direct-javascript-injection into HTML 
   needs to be properly HTML escaped.  This fixed the case where there are
   e.g. double quotes and ampersands in prompt()/keybinding data, as well
   as make the bogus-Unicode-double-decoding bug go away in IE.
 
 * Also, prompt() support was broken in IE as clicking "cancel" will still
   submit the action anyway; an "Event.stop(event);" corrected this. 
 
 r56085 at pinglin (orig r3170):  jesse | 2007-04-27 15:39:49 -0400
  r55834 at pinglin:  jesse | 2007-04-22 21:05:00 -0400
  * 0.70422 releng
 
 r56086 at pinglin (orig r3171):  jesse | 2007-04-27 15:42:32 -0400
  r56083 at pinglin:  jesse | 2007-04-27 15:39:25 -0400
  * remove debugging output
 
 r56151 at pinglin (orig r3172):  gugod | 2007-04-29 05:11:35 -0400
 This module is for rendering a collection of input fields at once
 as a single widget. The major goal is to let developer say like:
 
   column bars =>
     refers_to "My::Model::BarCollection",
     render as "Collection"
     availables are defer {
         retrieve_some_bars()
     };
 
 in their model class, and it'll just display a nice form to input
 the value for a list of available bars.
 
 r56152 at pinglin (orig r3173):  jesse | 2007-04-30 09:39:25 -0400
  r56108 at pinglin:  jesse | 2007-04-27 20:14:23 -0400
  * More refactoring toward making view handlers plugins
 
 r56153 at pinglin (orig r3174):  jesse | 2007-04-30 09:39:36 -0400
  r56109 at pinglin:  jesse | 2007-04-27 20:14:41 -0400
  * quiet some warnings
 
 r56154 at pinglin (orig r3175):  jesse | 2007-04-30 09:39:45 -0400
  r56110 at pinglin:  jesse | 2007-04-27 20:15:05 -0400
  * don't index plugins' test directories
 
 r56155 at pinglin (orig r3176):  jesse | 2007-04-30 09:40:02 -0400
  r56150 at pinglin:  jesse | 2007-04-30 09:23:11 -0400
  * More refactoring in support of adding new view handlers.
 
 r56171 at pinglin (orig r3177):  yves | 2007-04-30 11:55:39 -0400
 add the ability to have some code before a javascript click :
    onclick => [ { beforeclick => "<somecode>;" }, { args => ...
 
 r56172 at pinglin (orig r3178):  jesse | 2007-04-30 16:10:33 -0400
  r56170 at pinglin:  jesse | 2007-04-30 16:10:24 -0400
  * initial environment that makes fastcgi work got deleted
 
 r56178 at pinglin (orig r3179):  jesse | 2007-04-30 16:31:31 -0400
  r56177 at pinglin:  jesse | 2007-04-30 16:31:23 -0400
   * utf8::downgrade() content about to be sent out from a Template::Declare template. THIS WANTS A COMMENT FROM AUDREYT OR MIYAGAWA
  
 
 r56180 at pinglin (orig r3180):  jesse | 2007-04-30 16:50:05 -0400
  r56179 at pinglin:  jesse | 2007-04-30 16:49:58 -0400
  * Miyagawa++ points out that 'use utf8' is wrong.
 
 r56266 at pinglin (orig r3181):  yves | 2007-04-30 17:56:18 -0400
 plugin to use Wyzz online wyziwig editor to render textaera for test and comments
 
 r56267 at pinglin (orig r3182):  ruz | 2007-04-30 18:42:44 -0400
 * utf8::downgrade doesn't like strings as FAIL_OK, only integers, 1 is not that
   cool as 'FAILURE IS OK', but works
 r56268 at pinglin (orig r3183):  ruz | 2007-04-30 21:26:58 -0400
 * linked POD++
 r56269 at pinglin (orig r3184):  ruz | 2007-04-30 21:27:42 -0400
 * my dict has no word signup, but has 'sign up'
 r56270 at pinglin (orig r3185):  ruz | 2007-04-30 21:28:25 -0400
 * delete trailing space to avoid translating the same string twice
 r56271 at pinglin (orig r3186):  ruz | 2007-04-30 21:29:32 -0400
 * two very similar strings in one place, use the same, easier for translation
 r56272 at pinglin (orig r3187):  ruz | 2007-04-30 21:30:08 -0400
 * ru.po
 r56292 at pinglin (orig r3191):  yves | 2007-05-02 04:50:44 -0400
 plugin to add a wiki toolbar to textarea
 
 r56718 at pinglin (orig r3193):  clkao | 2007-05-04 06:49:18 -0400
 fast test support: truncate tables rather than recreating database
 when JIFTY_FAST_TEST is specified.
 
 r56733 at pinglin (orig r3194):  ruz | 2007-05-05 09:15:04 -0400
 * drop undef warning
 r56735 at pinglin (orig r3196):  ruz | 2007-05-05 21:43:19 -0400
 * we need bytes in escape_uri then 'use bytes'
 * resulting string is always valid ascii string,
   so we shouldn't forcibly set utf flag
 r56736 at pinglin (orig r3197):  ruz | 2007-05-05 21:51:06 -0400
 escape_utf8
 * don't use bytes just escape things doesn't matter if it's
   flagged string or not, perl must do the right thing.
 * don't localize ref, use it directly, afaik smaller
   memory footprint
 r56737 at pinglin (orig r3198):  yves | 2007-05-06 04:24:07 -0400
 a failing test about utf8 when using T::D
 
 r56738 at pinglin (orig r3199):  dpavlin | 2007-05-06 18:29:38 -0400
 fix pod typo
 r56739 at pinglin (orig r3200):  ruz | 2007-05-06 19:58:08 -0400
 * add tests for UTF-8 related things
 r56740 at pinglin (orig r3201):  ruz | 2007-05-06 20:00:54 -0400
 * add docs to escape_uri
 * fix it in the way need it to work, it's escape_uri_utf8. there is no
   way to escape binary and text scalars in one sub, we need the latter.
 r56741 at pinglin (orig r3202):  ruz | 2007-05-06 20:05:57 -0400
 * small update to ru.po
 r56742 at pinglin (orig r3203):  ruz | 2007-05-06 20:21:19 -0400
 * utf8::downgrade converts to octets only if string had been upgraded, what is not
   always true for 'perl strings'
 r56743 at pinglin (orig r3204):  ruz | 2007-05-06 21:20:01 -0400
 * revert the latest change unless we fix all utf8 stack
 r56744 at pinglin (orig r3205):  ruz | 2007-05-07 11:23:34 -0400
 * delete not used var
 r56745 at pinglin (orig r3206):  ruz | 2007-05-07 11:27:31 -0400
 * we shouldn't silence utf8 warnings
 r56746 at pinglin (orig r3207):  ruz | 2007-05-07 11:33:48 -0400
 * indent, minor
 r56747 at pinglin (orig r3208):  ruz | 2007-05-07 12:35:58 -0400
 to sanity through insanity
 * control mode of output handles, if content type has charset defined
   then we set :encoding(<charset>) output layer (or :utf8), otherwise
   binary
 * regions are special as we print out them into STDOUT, but sometimes
   need them as a string. We localize STDOUT and get data, however because
   of the above canonicalization we get octets or binary, so we check
   again the current content type. If the type contains charset definition
   then we decode octets back into perl string(in terms of perl unicode support),
   otherwise we leave things as is.
 
 jifty is sane when apps' developers are sane
 * never use 'bytes' pragma
 * avoid using 'encoding' pragma
 * use perl strings in jifty
 ** when you get a text data from external sources then Encode::decode it
 * set output encoding with $r->content_type('type/subtype; charset=XXX')
 ** by default it's UTF-8
 ** you can use cp1251 (or other) and things should work, user will get
    data in cp1251 and browser should display it right
 ** don't Encode::encode things before output
 
 everybody have own critirea of sanity
 * if you think that something is wrong then add tests to jifty 
 
   


Modified: jifty/branches/virtual-models/AUTHORS
==============================================================================
--- jifty/branches/virtual-models/AUTHORS	(original)
+++ jifty/branches/virtual-models/AUTHORS	Mon May  7 16:28:32 2007
@@ -26,3 +26,4 @@
 Edgar Whipple <jifty at misterwhipple.com>
 Christian Ternus <ternus at mit.edu>
 David Brunton <dbrunton at yahoo.com>
+Marc Mims <marc at questright.com>

Modified: jifty/branches/virtual-models/Changelog
==============================================================================
--- jifty/branches/virtual-models/Changelog	(original)
+++ jifty/branches/virtual-models/Changelog	Mon May  7 16:28:32 2007
@@ -1,3 +1,261 @@
+Jifty 0.70422
+
+[Password Authentication plugin]
+
+* Better "password reset" behaviour  
+* added regression test for bug fix in Jifty::Plugin::Authentication::Password::Action::Signup
+* change manual for access control with user and authentication::password plugins
+* Revert the bogus warning silencing in 0.70416 as it kills Doxory example.  
+  (reported by semifor++)
+ 
+[Core]
+
+* More debugging info for broken letmes
+* Added duck typing to the Jifty::Handle constructor to prevent difficult 
+  to trace error messages when the driver name is mispelt or fails to load.
+* Jifty::Upgrade - Defensive programming against tables that did
+  not have "create table" in its schema for SQLite column renaming.
+* Jifty::Module::Pluggable - Silence the @ISA warnings. 
+* Doc updates for Jifty::ClassLoader -- David Good <dgood at willingminds.com>
+* Created a method that can be over-ridden for custom test database setup
+* debian stuff, fr.po update
+
+Jifty 0.70416
+ * New ExtJS plugin (For yahoo-ui ext)
+ * zh-tw L10N for authen/passwd/user plugins.
+ * WWW::Mechanize 1.22 removed the form method.  
+   thanks to hdp for noticing/poking
+ * render_region should have default empty path.
+ * Jifty::Plugin::REST::Dispatcher - Gugod pointed out that we don't need to
+   stringify() the object-to-data output, because (esp for nested structures)
+   it's far more convenient to have the $accept-specific formatter (e.g.
+   YAML or JSON) to render it.
+ * Added render_as_yui_menubar in Menu.pm
+ * Upgraded YUI to 2.2.1
+ * NOTICE: if you are using yui tabview, 
+   please use tabview.css instead of tabs.css
+ * Added yui/element-beta.js and yui/menu.js in Web.pm
+ * Allow '->superuser' to be both an object and class method.
+ * added audreyt's Doxory demo app from doc/talks/yapcasia2007-doxory.pdf
+ *  Add doc and prefork dependency so the doc and dep tests pass
+ * Preforking server support for Jifty::Server
+ * Refactoring to support more template engines 
+ * fix "open" class in menu - active menu item doesn't imply current open item
+ * Jifty::Plugin - Authentication::Password now auto-loads LetMe and User.
+ * added a "SkipAccessControl" framework directive
+ * Doc: Add section on using models/actions outside of a Jifty app
+ * fix handling of multi-line data when encoded in JSON -- they should never 
+   wrap over multiple lines in generated output
+ * helpers improvements for T::D
+ * Make CurrentUser->new work as a method on an instance, so that 
+   as_superuser works.
+ * Added a 'None' session type for when your application doesn't need sessions
+ * Can't just check to see if the config exists to decide whether to 
+   initialze the Jifty object
+ * Make render_region resolve relative template in current context.
+ * We load the config on demand now, so it always exists. Test for 
+   classloader existence, instead of config existence, to tell whether or 
+   not we need to Jifty->new.
+ * Refactor the I18N plugin stuff to not fail tests.
+ * Make sure test coverage copes with new jifty->config 
+ * Better plugin I18N
+ * Plugin paths don't need to convert because File::ShareDir::module_dir
+   always returns an absolute path. I have added also modification checking
+   to the Jifty::I18N::refresh for plugin po files. -- Alexey Grebenschikov 
+ * Log::Log4perl::Appender::String (used in tests) was only added in 1.02; 
+   require at least that
+ * Switch Jifty->config to automatic instantiation
+ * Added a basic test stub for Jifty::Test::WWW::Mechanize. -sterling
+ * don't require a bunch of unused modules that don't trickle to the templates
+ * don't set the Home tab twice
+ * use Pod::Simple::HTML where we need it
+ * Administration and Online docs tabs are set in Jifty/Plugin/*/Dispatcher.pm
+ * When running coverage, don't use Class::Accessor::Named as it uses 
+   Hook::LexWrap
+ * don't load up PodSimple and other friends unless you've actually enabled 
+   AdminMode and brought OnlineDocs into the picture
+ * Modified submit_html_ok to make it behave like the documentation says it 
+   should.
+ * Don't create a new config object every time we look at the db version
+ * Added the ability to have a return button that looks like a submit button 
+   on a form.
+ * When you rest a lost password, email address is implicitly confirmed
+ * extracted dump_rules into DumpDispatcher plugin -dpavlin
+ * more quieting down of "couldn't drop that database that shouldn't have 
+   existed in the first place" warnings
+ * keep old LDAP and CAS plugins usable, 
+   THIS COULD BREAK APP MODELS NAME 
+   LDAPUser and CASUser models are now User -yves
+ * Autogenerate Package::Action when we need it
+ * Jifty: We now depend on Scalar::Defer 0.10 to not break the *_ 
+   localization.
+ * Jifty::DBI::Param::Schema - Mention how to use "defer".
+ * Remove legacy naming from the Auth::Password plugin #  nelhage++ 
+ * The plugin classloader is wrong. it's going away forever
+ * LetMes need to deal with user objects as superuser to get their tokens
+ * next major round of work on the login plugin. signup now works
+   slightly better debug logging from the jifty dispatcher
+ * Slightly better mail sending defaults
+ * When we use App::Class, actually require the module, to save the user some 
+   typing
+ * Changes to the dispatching to templates:
+ * only add '/index.html' to the path given if there is no template that can 
+   handle the given path.
+ * template_exists now checks for Template::Declare templates too
+ * tests that check that T::D templates are preferred over Mason templates.
+ * Set some svn:ignore properties so that generated files don't litter the 
+   tree
+ * Include the jifty skeleton app by default.
+ * make the 'hey! it's admin mode' bit not overwrite the menu
+ * TD fragments and unicode needed some massage.
+ * Next pass at a login/signup password auth plugin. Now supports login and 
+   logout and signup
+ * Jifty::CurrentUser now has a default "_init" behaviour.
+ * The password auth plugin now works
+ * Updated the 'feeds' section in J:M::Cookbook to not lie about the way 
+   XML::Feed actually works.  Arguably it /should/ work the way we described
+   ("your implementation is showing"), but fixing the docs was easier than 
+   submitting a patch to someone else's module.
+ * Now we can inherit actions from plugins
+ * fixed incorrect documentation of _ and added a SYNOPSIS
+ * "final" Mergedown of the Template-Declare branch of Jifty.
+  - New Template::Declare based templating system (optional)
+  - Significant work on plugins
+  - Significant refactoring
+  - Many jifty features extracted to 'mandatory' plugin applets. 
+    (These should be made optional or removable over time)
+ * Doc patch for how to do multiple "onclick" actions - jpollack at gmail.com
+ * Log::Log4perl::Appender::String (used in tests) was only added in
+    1.02; require at least that
+ * add doc to manage a superuser group
+ * add doc to emulate updated_on
+ * Add note to cookbook showing how to change other fields using ajax 
+   canonicalization
+ * Basic handler for running Jifty under mod_perl2.  Tested under Unbuntu
+   Feisty, with a default Apache2/MP2 install.  Requires a config change,
+   explained in the perldoc. -rodi
+ * examples/{Chat,Clock,Ping}/: Use Jifty::Server::Fork instead of
+   stub ::Server subclasses.
+ * Jifty::Server::Fork - New module to conveniently express
+   a forking builtin server.
+ * Plugin templates should override the core, but not application templates
+ * Since we use the schema tool to manage jifty's database, it's important 
+   that it be able to be called from running code (including a DESTROY block).   As it was, we were initializing (reinitializing) Jifty from within the 
+   DESTROY. That doesn't work so well.
+ * Better test for "jifty already initted"
+ * Fix adding columns during an upgrade.
+ * added a Deploying page to the manual based on the process I have found 
+   successful
+ * updated the upgrading manual and added a few extra glossary items
+ * DBD::pg passes postgres' warnings up, so try to convert their various
+   logging levels back to Log4Perl levels.
+   Completely heuristic, probably wants more guarding so it doesn't
+   reach out and bite someone.
+ * This quiets some of the most annoting warns revealed when I removed
+   the log-level downing in Script/Schema.pm
+ * Added support for schema_version() in records
+ * Updated the schema upgrade process to handle renames more nicely
+ * Added a simple test for upgrading
+ * YAML.pm is currently required even if YAML::Syck is present.
+   The Makefile now requires YAML even if you have a C compiler 
+   and are installing YAML::Syck.
+ * added a CUSTOMIZATION section to the Jifty::Action docs
+ * upping require for IPC::PubSub to 0.23 due to use of disconnect
+ * Disconnect PubSub before dropping the database
+ * Solve copious global destruction warnings
+ * send correct HTTP/1.1 headers for caching when running Jifty with 
+   DevelMode: 0
+ * Support POSTing to /=/model/Foo to create items without specifying a PK
+ * lib/Jifty/Manual/TutorialRest.pod - quick overview of REST plugin
+ * don't double warn.  Now that we stopped schema creation from suppressing 
+   warnings this *shouldn't* be necesary
+ * stop hiding messages/warns from the database during tests
+ * default to only showing WARN and higher when running tests 
+   (rather than our more normal INFO)
+ * Added the ability to force arguments and path when rengering a region. 
+   This lets developers force override something passed in via ajax or a 
+   "sticky" value from a previous request.
+ * Jifty::Script - Assume "jifty fastcgi" when we are running under cgi.
+ * I18N and zh-* L10N for menu and halo.
+ * fix JScript conditional compilation bug. Jifty.Utils.isMSIE works now.
+ * strict, warnings, and redefinition warning avoidance for 
+   J::Module::Pluggable.
+ * Alternate implementation of Module::Pluggable::Object's _require method to 
+   avoid a useless string eval.
+ * Actually carp from within our log warning handler, to not swallow critical 
+   debugging into
+ * Jifty::Logger - Properly respect previous $SIG{__WARN__} handler
+   if Log4Perl isn't yet initialized; that means we won't silently
+   discard compile-time errors from our model classes, though they
+   are still demoted as warnings.
+ * Refactored Jifty::Script::Schema to use extracted column, table and db 
+   manipulation routines
+ * Extract the "load model related classes" logic in the class loader to its 
+   own function
+ * A new method provides a tantalizing glimpse of jifty's forthcoming "load 
+   models from the database" support
+ * Added table and column schema generation methods to Jifty::Record, based on   an extraction of Jifty::Script::Schema
+ * Added "create db" and "drop db" methods to Jifty::Handle
+ * Added the 'bootstrap' option to vanilla Jifty::CurrentUser. Now there's one   fewer cases where you need a custom CurrentUser class
+ * Jifty::Util - Add a generate_uuid method and use it to generate 
+   ApplicationUUID.
+ * Jifty::Script::App - Make the generated Makefile.PL more canonical.
+ * Jifty::Util - only requires ExtUtils::MM at request.
+ * Jifty::Util - fixed the broken Win32 logic:
+  - use ExtUtils::MM before calling MM->maybe_command
+  - ignore the case of letters when comparing file names
+ * Change all tests for the literal Driver string "SQLite"
+   to a regex match to /SQLite/, in anticipation of fancy
+   drivers such as SVK::SQLite.
+ * enable UTF-8 flag awarness in JSON libraries to fix problem in validation
+   of values during creating a record via the admin interface when column has
+   valid values with unicode chars.
+ * include iepngfix 1.0
+ * add MIME type text/x-component for .htc file
+ * howto document for iepngfix
+ * Our fallback I18N handle needs to specify that it should autocreate keys 
+   if they're not found
+ * Jifty::I18N: Provide a default fallback lexicon class for "en"
+   so Locale::Maketext won't clobber our $@ stack.
+ * Jifty::I18N - Avoid naked eval{} that clobbers $@.
+ * Jifty::Web - Add private accessor for _state_variables to
+   avoid typo-prone ->{'state_variables'}.
+ * REST: Implementation for PUT and DELETE on model items
+ * Canonicalize/validate after typing and blurring, too
+ * Modernization of model declarations for compatibility with new 
+   Object::Declare based Jifty::DBI
+ * updating to  'max_length' name for the parameter formerly known as 'length'
+ * Jifty: Deprecate ->length in web form and param fields;
+    write ->max_length instead.
+ * Allow create, load_or_create and load_by_cols to be used as class methods.
+ * REST: Show an action HTML form when rendering /=/action/App.Action.Foo as 
+   HTML
+ * Fix running actions (checking for allowed-ness was done wrong)
+ * Cut down on a lot of the crap that we outputed and fix up structure
+ * Make it possible to request XML from the URL like the other data formats
+ * Show action params in any data format instead of just an HTML form
+ * Only allow method calls if the "field" is actually a column
+ * Force stringification so that we don't segfault trying to output blessed 
+   references and what not
+ * added the update method which reconstructs the locale
+   handle (used by Jifty::Handler::handle_request) [Jifty::I18N]
+ * &_(loc) now uses the global locale handle instead of
+   the one set up during Jifty::I18N->new().  [Jifty::I18N]
+ * Audrey's refresh method now always calls C<update>
+  either directly or indirectly (via C<new>) [Jifty::I18N]
+ * C<handle_request> now always calls
+  Jifty::I18N->update directly or indirectly
+  (via C<Jifty::I18N->refresh>) [Jifty::Handler]
+ * Misc minor startup-time performance improvements
+ * Only run onsubmit() if we have an onsubmit property
+ * Support for controlling browser-based autocomplete on form fields
+ * Fix how fake buttons submit forms -trs
+ * Gotta double-quote keybinding labels if they have embedded newlines.
+ * Warnings when a developer puts a "show" into a "before" or "after" 
+   dispatcher rule.
+ 
+
+
 Jifty 0.70117
    Dependencies: 
      * Bumped the minimum required version of Jifty::DBI to 0.30

Modified: jifty/branches/virtual-models/MANIFEST
==============================================================================
--- jifty/branches/virtual-models/MANIFEST	(original)
+++ jifty/branches/virtual-models/MANIFEST	Mon May  7 16:28:32 2007
@@ -27,6 +27,7 @@
 doc/jifty-model-svk
 doc/jifty-plugins-2.0
 doc/jifty-web-form-etc
+doc/notes-on-distributed-operations
 doc/packaging
 doc/plugin-requirements
 doc/plugin-syntax
@@ -54,6 +55,29 @@
 examples/Clock/Makefile.PL
 examples/Clock/share/web/templates/fragments/time
 examples/Clock/share/web/templates/index.html
+examples/Doxory/bin/jifty
+examples/Doxory/doxory
+examples/Doxory/etc/config.yml
+examples/Doxory/lib/Doxory/Dispatcher.pm
+examples/Doxory/lib/Doxory/Model/Choice.pm
+examples/Doxory/lib/Doxory/Model/User.pm
+examples/Doxory/lib/Doxory/Model/Vote.pm
+examples/Doxory/lib/Doxory/View.pm
+examples/Doxory/Makefile.PL
+examples/Doxory/share/po/zh_cn.po
+examples/Doxory/share/po/zh_tw.po
+examples/Doxory/t/00-model-User.t
+examples/Example-Todo/bin/jifty
+examples/Example-Todo/etc/config.yml
+examples/Example-Todo/example_todo
+examples/Example-Todo/inc/Module/Install.pm
+examples/Example-Todo/inc/Module/Install/Base.pm
+examples/Example-Todo/inc/Module/Install/Metadata.pm
+examples/Example-Todo/inc/Module/Install/WriteAll.pm
+examples/Example-Todo/lib/Example/Todo/Model/Todo.pm
+examples/Example-Todo/Makefile.PL
+examples/Example-Todo/META.yml
+examples/Example-Todo/t/00-model-Todo.t
 examples/HelloKitty/bin/jifty
 examples/HelloKitty/etc/config.yml
 examples/HelloKitty/hellokitty
@@ -151,25 +175,38 @@
 lib/Jifty/Param/Schema.pm
 lib/Jifty/Plugin.pm
 lib/Jifty/Plugin/AdminUI.pm
-lib/Jifty/Plugin/AdminUI/View-not-yet.pm
 lib/Jifty/Plugin/Authentication/Password.pm
+lib/Jifty/Plugin/Authentication/Password/Action/ConfirmEmail.pm
 lib/Jifty/Plugin/Authentication/Password/Action/GeneratePasswordToken.pm
 lib/Jifty/Plugin/Authentication/Password/Action/Login.pm
-lib/Jifty/Plugin/Authentication/Password/Model/User.pm
+lib/Jifty/Plugin/Authentication/Password/Action/Logout.pm
+lib/Jifty/Plugin/Authentication/Password/Action/ResendConfirmation.pm
+lib/Jifty/Plugin/Authentication/Password/Action/ResetLostPassword.pm
+lib/Jifty/Plugin/Authentication/Password/Action/SendAccountConfirmation.pm
+lib/Jifty/Plugin/Authentication/Password/Action/SendPasswordReminder.pm
+lib/Jifty/Plugin/Authentication/Password/Action/Signup.pm
+lib/Jifty/Plugin/Authentication/Password/Dispatcher.pm
+lib/Jifty/Plugin/Authentication/Password/Mixin/Model/User.pm
+lib/Jifty/Plugin/Authentication/Password/Notification/ConfirmEmail.pm
+lib/Jifty/Plugin/Authentication/Password/Notification/ConfirmLostPassword.pm
+lib/Jifty/Plugin/Authentication/Password/View.pm
 lib/Jifty/Plugin/ClassLoader.pm
 lib/Jifty/Plugin/CompressedCSSandJS.pm
 lib/Jifty/Plugin/CompressedCSSandJS/Dispatcher.pm
 lib/Jifty/Plugin/ErrorTemplates.pm
 lib/Jifty/Plugin/ErrorTemplates/View.pm
 lib/Jifty/Plugin/Halo.pm
+lib/Jifty/Plugin/LetMe.pm
+lib/Jifty/Plugin/LetMe/Dispatcher.pm
 lib/Jifty/Plugin/OnlineDocs.pm
+lib/Jifty/Plugin/OnlineDocs/Dispatcher.pm
 lib/Jifty/Plugin/REST.pm
 lib/Jifty/Plugin/REST/Dispatcher.pm
 lib/Jifty/Plugin/SkeletonApp.pm
 lib/Jifty/Plugin/SkeletonApp/Dispatcher.pm
 lib/Jifty/Plugin/SkeletonApp/View.pm
 lib/Jifty/Plugin/User.pm
-lib/Jifty/Plugin/User/Model/User.pm
+lib/Jifty/Plugin/User/Mixin/Model/User.pm
 lib/Jifty/Plugin/Yullio/View.pm
 lib/Jifty/Record.pm
 lib/Jifty/Request.pm
@@ -193,6 +230,8 @@
 lib/Jifty/Script/Server.pm
 lib/Jifty/Server.pm
 lib/Jifty/Server/Fork.pm
+lib/Jifty/Server/Prefork.pm
+lib/Jifty/Server/Prefork/NetServer.pm
 lib/Jifty/Subs.pm
 lib/Jifty/Subs/Render.pm
 lib/Jifty/Test.pm
@@ -232,6 +271,7 @@
 lib/Jifty/Web/PageRegion.pm
 lib/Jifty/Web/Session.pm
 lib/Jifty/Web/Session/ClientSide.pm
+lib/Jifty/Web/Session/None.pm
 lib/Jifty/YAML.pm
 Makefile.PL
 MANIFEST			This list of files
@@ -263,7 +303,7 @@
 plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly/Action/CASLogout.pm
 plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly/CurrentUser.pm
 plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly/Dispatcher.pm
-plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly/Model/CASUser.pm
+plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly/Model/User.pm
 plugins/AuthCASOnly/Makefile.PL
 plugins/AuthCASOnly/MANIFEST
 plugins/AuthCASOnly/share/web/templates/caslogin
@@ -295,7 +335,7 @@
 plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Action/LDAPLogout.pm
 plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/CurrentUser.pm
 plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Dispatcher.pm
-plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Model/LDAPUser.pm
+plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Model/User.pm
 plugins/AuthLDAPOnly/Makefile.PL
 plugins/AuthLDAPOnly/MANIFEST
 plugins/AuthLDAPOnly/share/po/en.po
@@ -312,6 +352,8 @@
 plugins/AuthzLDAP/share/po/fr.po
 plugins/AuthzLDAP/share/web/templates/error/AccessDenied
 plugins/AuthzLDAP/t/00-load.t
+plugins/DumpDispatcher/lib/Jifty/Plugin/DumpDispatcher.pm
+plugins/DumpDispatcher/Makefile.PL
 plugins/EditInPlace/debian/changelog
 plugins/EditInPlace/debian/compat
 plugins/EditInPlace/debian/control
@@ -342,6 +384,332 @@
 plugins/EmailErrors/lib/Jifty/Plugin/EmailErrors/Notification/EmailError.pm
 plugins/EmailErrors/Makefile.PL
 plugins/EmailErrors/share/web/templates/.file
+plugins/ExtJS/lib/Jifty/Plugin/ExtJS.pm
+plugins/ExtJS/lib/Jifty/Plugin/ExtJS/Dispatcher.pm
+plugins/ExtJS/Makefile.PL
+plugins/ExtJS/share/web/static/css/extjs/basic-dialog.css
+plugins/ExtJS/share/web/static/css/extjs/box.css
+plugins/ExtJS/share/web/static/css/extjs/button.css
+plugins/ExtJS/share/web/static/css/extjs/combo.css
+plugins/ExtJS/share/web/static/css/extjs/core.css
+plugins/ExtJS/share/web/static/css/extjs/date-picker.css
+plugins/ExtJS/share/web/static/css/extjs/dd.css
+plugins/ExtJS/share/web/static/css/extjs/debug.css
+plugins/ExtJS/share/web/static/css/extjs/ext-all.css
+plugins/ExtJS/share/web/static/css/extjs/form.css
+plugins/ExtJS/share/web/static/css/extjs/grid.css
+plugins/ExtJS/share/web/static/css/extjs/layout.css
+plugins/ExtJS/share/web/static/css/extjs/menu.css
+plugins/ExtJS/share/web/static/css/extjs/qtips.css
+plugins/ExtJS/share/web/static/css/extjs/README.txt
+plugins/ExtJS/share/web/static/css/extjs/reset-min.css
+plugins/ExtJS/share/web/static/css/extjs/resizable.css
+plugins/ExtJS/share/web/static/css/extjs/tabs.css
+plugins/ExtJS/share/web/static/css/extjs/toolbar.css
+plugins/ExtJS/share/web/static/css/extjs/tree.css
+plugins/ExtJS/share/web/static/css/extjs/ytheme-aero.css
+plugins/ExtJS/share/web/static/css/extjs/ytheme-gray.css
+plugins/ExtJS/share/web/static/css/extjs/ytheme-vista.css
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/aero-close-over.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/aero-close.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-center.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-left.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-right.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/close.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/collapse-over.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/e-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/expand-over.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/expand.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/hd-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/s-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/se-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/w-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/gradient-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-blue-split.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-hrow.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-split.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-vista-hd.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/grid/pspbrwse.jbf
+plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort-col-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort_asc.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort_desc.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/layout/collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/layout/expand.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/layout/gradient-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/layout/ns-collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/layout/ns-expand.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-close.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-title-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-title-light-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/layout/tab-close-on.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/layout/tab-close.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/qtip/bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/s.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/e-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/e-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/ne-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/ne-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/nw-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/nw-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/s-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/s-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/se-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/se-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/sw-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/sizer/sw-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-inactive-left-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-inactive-right-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-left-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-right-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-bg.png
+plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-btm-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/toolbar/bg.gif
+plugins/ExtJS/share/web/static/images/extjs/aero/toolbar/tb-btn-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/btn-arrow.gif
+plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/btn-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/close.gif
+plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/e-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/expand.gif
+plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/hd-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/progress.gif
+plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/progress2.gif
+plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/s-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/se-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/default/box/corners-blue.gif
+plugins/ExtJS/share/web/static/images/extjs/default/box/corners.gif
+plugins/ExtJS/share/web/static/images/extjs/default/box/l-blue.gif
+plugins/ExtJS/share/web/static/images/extjs/default/box/l.gif
+plugins/ExtJS/share/web/static/images/extjs/default/box/r-blue.gif
+plugins/ExtJS/share/web/static/images/extjs/default/box/r.gif
+plugins/ExtJS/share/web/static/images/extjs/default/box/tb-blue.gif
+plugins/ExtJS/share/web/static/images/extjs/default/box/tb.gif
+plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-add.gif
+plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-no.gif
+plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-yes.gif
+plugins/ExtJS/share/web/static/images/extjs/default/form/date-trigger.gif
+plugins/ExtJS/share/web/static/images/extjs/default/form/error-tip-corners.gif
+plugins/ExtJS/share/web/static/images/extjs/default/form/exclamation.gif
+plugins/ExtJS/share/web/static/images/extjs/default/form/text-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/form/trigger.gif
+plugins/ExtJS/share/web/static/images/extjs/default/gradient-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/arrow-left-white.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/arrow-right-white.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/col-move-bottom.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/col-move-top.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/dirty.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/done.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/drop-no.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/drop-yes.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/footer-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-blue-hd.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-blue-split.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-hrow.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-loading.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-split.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-vista-hd.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-asc.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-desc.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-lock.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-lock.png
+plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-unlock.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-unlock.png
+plugins/ExtJS/share/web/static/images/extjs/default/grid/invalid_line.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/loading.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/mso-hd.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/nowait.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/page-first-disabled.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/page-first.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/page-last-disabled.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/page-last.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/page-next-disabled.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/page-next.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/page-prev-disabled.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/page-prev.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/pick-button.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/refresh.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/sort_asc.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/sort_desc.gif
+plugins/ExtJS/share/web/static/images/extjs/default/grid/Thumbs.db
+plugins/ExtJS/share/web/static/images/extjs/default/grid/wait.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/expand.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/gradient-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/ns-collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/ns-expand.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-close.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-title-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-title-light-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/stick.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/stuck.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/tab-close-on.gif
+plugins/ExtJS/share/web/static/images/extjs/default/layout/tab-close.gif
+plugins/ExtJS/share/web/static/images/extjs/default/menu/checked.gif
+plugins/ExtJS/share/web/static/images/extjs/default/menu/group-checked.gif
+plugins/ExtJS/share/web/static/images/extjs/default/menu/menu-parent.gif
+plugins/ExtJS/share/web/static/images/extjs/default/menu/menu.gif
+plugins/ExtJS/share/web/static/images/extjs/default/menu/unchecked.gif
+plugins/ExtJS/share/web/static/images/extjs/default/qtip/bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/qtip/close.gif
+plugins/ExtJS/share/web/static/images/extjs/default/qtip/tip-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/default/s.gif
+plugins/ExtJS/share/web/static/images/extjs/default/shadow-lr.png
+plugins/ExtJS/share/web/static/images/extjs/default/shadow.png
+plugins/ExtJS/share/web/static/images/extjs/default/shared/calendar.gif
+plugins/ExtJS/share/web/static/images/extjs/default/shared/left-btn.gif
+plugins/ExtJS/share/web/static/images/extjs/default/shared/right-btn.gif
+plugins/ExtJS/share/web/static/images/extjs/default/shared/warning.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/e-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/e-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/ne-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/ne-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/nw-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/nw-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/s-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/s-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/se-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/se-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/square.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/sw-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/default/sizer/sw-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-inactive-left-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-inactive-right-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-left-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-right-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-arrow-light.gif
+plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-arrow.gif
+plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-over-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/toolbar/gray-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/toolbar/tb-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/default/toolbar/tb-btn-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-add.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-between.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-no.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-over.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-under.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-yes.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-minus-nl.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-minus.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-plus-nl.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-plus.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-line.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-minus-nl.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-minus.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-plus-nl.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-plus.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/folder-open.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/folder.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/leaf.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/loading.gif
+plugins/ExtJS/share/web/static/images/extjs/default/tree/s.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/close.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/dlg-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/e-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/expand.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/hd-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/s-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/se-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/gradient-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/grid/grid-hrow.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/layout/collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/layout/expand.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/layout/gradient-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/layout/ns-collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/layout/ns-expand.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-close.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-title-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-title-light-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/layout/stick.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/layout/tab-close-on.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/layout/tab-close.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/menu/checked.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/menu/group-checked.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/menu/menu-parent.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/menu/menu.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/menu/unchecked.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/qtip/bg.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/qtip/tip-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/s.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/e-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/e-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/ne-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/ne-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/nw-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/nw-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/s-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/s-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/se-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/se-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/sw-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/sizer/sw-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-inactive-left-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-inactive-right-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-left-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-right-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/toolbar/gray-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/gray/toolbar/tb-btn-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-center.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-left.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-right.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/close.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/dlg-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/e-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/expand.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/hd-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/s-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/se-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/w-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/gradient-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/grid/grid-split.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/grid/grid-vista-hd.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/layout/collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/layout/expand.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/layout/gradient-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/layout/ns-collapse.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/layout/ns-expand.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-close.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-title-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-title-light-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/layout/stick.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/layout/tab-close-on.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/layout/tab-close.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/qtip/bg.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/qtip/tip-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/s.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/e-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/e-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/ne-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/ne-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/nw-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/nw-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/s-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/s-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/se-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/se-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/sw-handle-dark.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/sizer/sw-handle.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-inactive-left-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-inactive-right-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-left-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-right-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-sprite.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/toolbar/gray-bg.gif
+plugins/ExtJS/share/web/static/images/extjs/vista/toolbar/tb-btn-sprite.gif
+plugins/ExtJS/share/web/static/js/extjs/adapter/jquery/ext-jquery-adapter.js
+plugins/ExtJS/share/web/static/js/extjs/adapter/prototype/ext-prototype-adapter.js
+plugins/ExtJS/share/web/static/js/extjs/adapter/yui/ext-yui-adapter.js
+plugins/ExtJS/share/web/static/js/extjs/adapter/yui/yui-utilities.js
+plugins/ExtJS/share/web/static/js/extjs/ext-all.js
+plugins/ExtJS/share/web/static/js/extjs/ext-config.js
 plugins/LetMe/lib/Jifty/Plugin/LetMe.pm
 plugins/LetMe/lib/Jifty/Plugin/LetMe/Dispatcher.pm
 plugins/LetMe/Makefile.PL
@@ -432,8 +800,22 @@
 share/web/static/css/nav.css
 share/web/static/css/notices.css
 share/web/static/css/yui/calendar/calendar.css
+share/web/static/css/yui/menu/map.gif
+share/web/static/css/yui/menu/menu.css
+share/web/static/css/yui/menu/menuarodwn8_dim_1.gif
+share/web/static/css/yui/menu/menuarodwn8_hov_1.gif
+share/web/static/css/yui/menu/menuarodwn8_nrm_1.gif
+share/web/static/css/yui/menu/menuarorght8_dim_1.gif
+share/web/static/css/yui/menu/menuarorght8_hov_1.gif
+share/web/static/css/yui/menu/menuarorght8_nrm_1.gif
+share/web/static/css/yui/menu/menuaroup8_dim_1.gif
+share/web/static/css/yui/menu/menuaroup8_nrm_1.gif
+share/web/static/css/yui/menu/menuchk8_dim_1.gif
+share/web/static/css/yui/menu/menuchk8_hov_1.gif
+share/web/static/css/yui/menu/menuchk8_nrm_1.gif
 share/web/static/css/yui/tabview/border_tabs.css
 share/web/static/css/yui/tabview/tabs.css
+share/web/static/css/yui/tabview/tabview.css
 share/web/static/favicon.ico
 share/web/static/images/css/bullet_arrow_down.png
 share/web/static/images/css/bullet_arrow_up.png
@@ -495,7 +877,9 @@
 share/web/static/js/yui/calendar.js
 share/web/static/js/yui/container.js
 share/web/static/js/yui/dom.js
+share/web/static/js/yui/element-beta.js
 share/web/static/js/yui/event.js
+share/web/static/js/yui/menu.js
 share/web/static/js/yui/tabview.js
 share/web/static/js/yui/yahoo.js
 share/web/templates/=/subs
@@ -527,6 +911,7 @@
 SIGNATURE
 t/00-load.t
 t/01-dependencies.t
+t/01-test-mechanize.t
 t/01-test-web.t
 t/01-version_checks.t
 t/02-connect.t
@@ -577,9 +962,15 @@
 t/TestApp-Plugin-PasswordAuth/etc/config.yml
 t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/FasterSwallow.pm
 t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/FavoriteColor.pm
+t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/Bootstrap.pm
+t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/CurrentUser.pm
+t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/Dispatcher.pm
 t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/Model/User.pm
 t/TestApp-Plugin-PasswordAuth/Makefile.PL
 t/TestApp-Plugin-PasswordAuth/t/00-model-User.t
+t/TestApp-Plugin-PasswordAuth/t/01-tokengen.t
+t/TestApp-Plugin-PasswordAuth/t/11-current_user.t
+t/TestApp-Plugin-PasswordAuth/t/12-signup.t
 t/TestApp-Plugin-REST/bin/jifty
 t/TestApp-Plugin-REST/etc/config.yml
 t/TestApp-Plugin-REST/lib/TestApp/Plugin/REST/Action/DoSomething.pm
@@ -598,6 +989,8 @@
 t/TestApp/lib/TestApp/Model/User.pm
 t/TestApp/lib/TestApp/Upgrade.pm
 t/TestApp/lib/TestApp/View.pm
+t/TestApp/lib/TestApp/View/base.pm
+t/TestApp/lib/TestApp/View/instance.pm
 t/TestApp/share/web/static/images/pony.jpg
 t/TestApp/share/web/templates/concrete.html
 t/TestApp/share/web/templates/currentuser
@@ -607,6 +1000,10 @@
 t/TestApp/share/web/templates/editform
 t/TestApp/share/web/templates/index.html
 t/TestApp/share/web/templates/manual_redirect
+t/TestApp/share/web/templates/path_test/foo/index.html
+t/TestApp/share/web/templates/path_test/in_both
+t/TestApp/share/web/templates/path_test/mason_only
+t/TestApp/share/web/templates/redirected
 t/TestApp/share/web/templates/regions/list
 t/TestApp/share/web/templates/regions/long
 t/TestApp/share/web/templates/regions/short
@@ -629,9 +1026,12 @@
 t/TestApp/t/11-current_user.t
 t/TestApp/t/12-search.t
 t/TestApp/t/13-page-regions.t
+t/TestApp/t/14-template-paths.t
+t/TestApp/t/15-template-subclass.t
 t/TestApp/t/config-Cachable
 t/TestApp/t/config-Record
 t/TestApp/t/i18n-standalone.t
 t/TestApp/t/instance_id.t
 t/TestApp/t/regex_meta_in_path_info.t
 t/TestApp/t/upgrade.t
+t/TestApp/testapp

Modified: jifty/branches/virtual-models/META.yml
==============================================================================
--- jifty/branches/virtual-models/META.yml	(original)
+++ jifty/branches/virtual-models/META.yml	Mon May  7 16:28:32 2007
@@ -1,19 +1,22 @@
+--- 
 build_requires: 
   ExtUtils::MakeMaker: 6.11
 distribution_type: module
-generated_by: Module::Install version 0.640
+generated_by: Module::Install version 0.650
 license: Perl
+meta-spec: 
+  url: http://module-build.sourceforge.net/META-spec-v1.3.html
+  version: 1.3
 name: Jifty
 no_index: 
   directory: 
-    - share
-    - t
+    - debian
     - doc
+    - examples
     - inc
     - t
   package: 
     - DB
-    - inc
 recommends: 
   Apache2::Const: 0
   Class::Accessor::Named: 0
@@ -23,16 +26,13 @@
   Module::Install::Admin: 0.50
   Module::Refresh: 0.09
   Net::Server::Fork: 0
+  Net::Server::PreFork: 0
   PAR::Dist::FromCPAN: 0
   Test::Base: 0.44
   Test::HTML::Lint: 0
   Test::HTTP::Server::Simple: 0.02
   Test::MockModule: 0.05
   Test::MockObject: 1.07
-  Test::More: 0.62
-  Test::Pod::Coverage: 0
-  Test::WWW::Mechanize: 1.04
-  WWW::Mechanize: 1.12
 requires: 
   App::CLI: 0.03
   CGI: 3.19
@@ -75,7 +75,7 @@
   Hook::LexWrap: 0
   IPC::PubSub: 0.23
   JSON::Syck: 0.15
-  Jifty::DBI: 0.31
+  Jifty::DBI: 0.40
   LWP::UserAgent: 0
   Locale::Maketext::Extract: 0.20
   Locale::Maketext::Lexicon: 0.60
@@ -90,13 +90,17 @@
   Params::Validate: 0
   Pod::Simple: 0
   SQL::ReservedWords: 0
-  Scalar::Defer: 0.06
+  Scalar::Defer: 0.10
   Shell::Command: 0
   String::Koremutake: 0
-  Template::Declare: 0.06
+  Template::Declare: 0.07
   Test::Base: 0
+  Test::More: 0.62
+  Test::Pod::Coverage: 0
+  Test::WWW::Mechanize: 1.04
   UNIVERSAL::require: 0
   URI: 0
+  WWW::Mechanize: 1.12
   XML::Simple: 0
   XML::Writer: 0.601
   XML::XPath: 0
@@ -105,4 +109,4 @@
   perl: 5.8.3
   version: 0
 tests: t/*.t t/*/t/*.t
-version: 0.70117
+version: 0.70415

Modified: jifty/branches/virtual-models/Makefile.PL
==============================================================================
--- jifty/branches/virtual-models/Makefile.PL	(original)
+++ jifty/branches/virtual-models/Makefile.PL	Mon May  7 16:28:32 2007
@@ -42,7 +42,7 @@
 requires('Hash::Merge');
 requires('Hook::LexWrap');
 requires('IPC::PubSub' => '0.23' );
-requires('Jifty::DBI' => '0.31' );            # Jifty::DBI::Collection Jifty::DBI::Handle Jifty::DBI::Record::Cachable Jifty::DBI::SchemaGenerator
+requires('Jifty::DBI' => '0.40' );            # Jifty::DBI::Collection Jifty::DBI::Handle Jifty::DBI::Record::Cachable Jifty::DBI::SchemaGenerator
 requires('Locale::Maketext::Extract' => '0.20');
 requires('Locale::Maketext::Lexicon' => '0.60');
 requires('Log::Log4perl' => '1.04');
@@ -62,9 +62,12 @@
 requires('SVN::Fs');
 requires('SVN::Repos');
 requires('SVN::Simple::Edit');
-requires('Template::Declare');                # Template::Declare::Tags
-requires('Template::Declare' => '0.06');                # Template::Declare::Tags
+requires('Template::Declare' => '0.07');                # Template::Declare::Tags
 requires('Test::Base');
+requires('Test::More' => 0.62 ),
+requires('Test::Pod::Coverage'),
+requires('Test::WWW::Mechanize' => 1.04 ),
+requires('WWW::Mechanize' => 1.12 ),
 requires('UNIVERSAL::require');
 requires('URI');
 requires('XML::Writer' => '0.601');
@@ -97,12 +100,8 @@
         recommends('Module::Install::Admin' => '0.50'),
         ($^O ne 'MSWin32' ? recommends('Test::HTTP::Server::Simple' => '0.02' ) : ()),
         recommends('Test::HTML::Lint'),
-        recommends('Test::More' => 0.62 ),
         recommends('Test::MockModule' => '0.05'),
         recommends('Test::MockObject' => '1.07'),
-        recommends('Test::Pod::Coverage'),
-        recommends('Test::WWW::Mechanize' => 1.04 ),
-        recommends('WWW::Mechanize' => 1.12 ),
         recommends('Module::Refresh' => '0.09')
     ],
     'Development of the jifty framework' => [
@@ -117,6 +116,10 @@
         -default => 0,
         recommends('Net::Server::Fork'),
     ],
+    'Pre-forking jifty server' => [
+        -default => 0,
+        recommends('Net::Server::PreFork'),
+    ],
     'Apache2/ModPerl2 handler' => [
         -default => 0,
         recommends('Apache2::Const'),
@@ -128,11 +131,8 @@
 );
 
 
-no_index directory => 'share';
-no_index directory => 't';
+no_index( directory => qw< debian doc examples share plugins/*/t> );
 no_index package => 'DB';
-no_index package => 'inc';
-no_index directory => 'doc';
 
 version_from('lib/Jifty.pm');
 #&auto_bundle_deps();

Modified: jifty/branches/virtual-models/SIGNATURE
==============================================================================
--- jifty/branches/virtual-models/SIGNATURE	(original)
+++ jifty/branches/virtual-models/SIGNATURE	Mon May  7 16:28:32 2007
@@ -1,12 +1,12 @@
 This file contains message digests of all files listed in MANIFEST,
-signed via the Module::Signature module, version 0.41.
+signed via the Module::Signature module, version 0.55.
 
 To verify the content in this distribution, first make sure you have
 Module::Signature installed, then type:
 
     % cpansign -v
 
-It would check each file's integrity, as well as the signature's
+It will check each file's integrity, as well as the signature's
 validity.  If "==> Signature verified OK! <==" is not displayed,
 the distribution may already have been compromised, and you should
 not run its Makefile.PL or Build.PL.
@@ -14,12 +14,12 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-SHA1 ef933bd94b1e449d781c19e74a92412f08e602c5 AUTHORS
-SHA1 fc571a41cf0774f0099bd365a6e21607a2da0151 Changelog
-SHA1 8c31edaf5f07a1bae38d787bbdf2d79bb17d6f7c MANIFEST
+SHA1 7ce15e058bb6a72aa237ac58e0fbce934b2fef5c AUTHORS
+SHA1 876166ca6f2cf7bfa6a6137070beb1b55b4bc4ce Changelog
+SHA1 ed26a91a1edcc0aed0509bc7384b2d24cfd13d89 MANIFEST
 SHA1 d4adbf5948041cd460da5cb7ad21394a790e2022 MANIFEST.SKIP
-SHA1 f7177c83690e1bac7930f31b96c991afb6adbc8b META.yml
-SHA1 767b1c8e6573516120842aabb2033fddab178d39 Makefile.PL
+SHA1 85f15b04e047acd8c86edfca3f7760fa4c001584 META.yml
+SHA1 c11c8ba944d2d9410d04593112e7ab951648d4fd Makefile.PL
 SHA1 e395a2eabaf8faf8266dedc664c1eb52c6c589cf README
 SHA1 aaf8f7a1025fc97077072672f325e2a5f3c03a41 bin/build_par
 SHA1 f7f44f9a7337def0c97f981073e3ed970851d9ae bin/jifty
@@ -27,9 +27,9 @@
 SHA1 9a91a81e3db1a12368153fed9e504aad492cd971 bin/service
 SHA1 543a2677f66d3c8ca671b790509b6c1721ac6270 bin/xgettext
 SHA1 1c042485ba8a21f0f124dd8ed412d43d3805430e debian/README
-SHA1 43b4786695f70ebd8ee74aac9e7eb270b4641b63 debian/changelog
+SHA1 dee0467ffdb9142223c49789a447ba5dd299c28d debian/changelog
 SHA1 5d9474c0309b7ca09a182d888f73b37a8fe1362c debian/compat
-SHA1 73f845d1185d0d977dd5bea3f046a0ae53451363 debian/control
+SHA1 c9a13c7f88cc191d5167bbdeebf5e7abbd776b0b debian/control
 SHA1 8fc130ffa6d53c47d94eab1616887c511d54d61f debian/rules
 SHA1 b8bb315ef8fbdd2f069b6339ad0461b5d933d7da doc/ajax-upgraded-links
 SHA1 a0d03921821ca39ea461f1f9fa812fdbb5f501a0 doc/building_a_par
@@ -45,8 +45,10 @@
 SHA1 0eab037e835b3d998df54883377b58802cb78f7a doc/jifty-action-record-search
 SHA1 4f01bbe985a1ad3742b48563992bdbf032a6ce4d doc/jifty-dispatcher.graffle
 SHA1 b07f1666f9da714a9007058ea74d0d4cfa31ebfe doc/jifty-dispatcher.svg
+SHA1 b62f3916546fc54639e277434646b8d4f253d6d7 doc/jifty-model-svk
 SHA1 29514abbc940365a861d196d8b1f35ee34f91526 doc/jifty-plugins-2.0
 SHA1 94a787c12228136c7797f81fef39e9bb52786067 doc/jifty-web-form-etc
+SHA1 fc7ea00184c4632731c3131f225fded7eeedfa0f doc/notes-on-distributed-operations
 SHA1 44839f806443cbb6469f3610f9a6c488d1777f60 doc/packaging
 SHA1 3ec038720e82a1297a3a5db6a0e1b24fe0aa13c2 doc/plugin-requirements
 SHA1 3de2d7f062e78fc8b543f6b93e79852274c6c657 doc/plugin-syntax
@@ -59,10 +61,9 @@
 SHA1 9db8566a4bacf0f3be943b9b3a84c45439c45337 etc/site_config.yml
 SHA1 3d3cce325969be4618e89c976aa9f950618ff39a examples/Chat/Makefile.PL
 SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 examples/Chat/bin/jifty
-SHA1 418a81711645390f06a417a0e4328901c9c92dc4 examples/Chat/etc/config.yml
+SHA1 c163b8cb161f5e9db259b4045249416f70ea4e01 examples/Chat/etc/config.yml
 SHA1 08043c294b69d1a2e23940346034283e6f686e14 examples/Chat/lib/Chat/Action/Send.pm
 SHA1 63f552215f7ed2d75278509fab4324dddda90591 examples/Chat/lib/Chat/Event/Message.pm
-SHA1 a8c6b5a40ec985c240db0cfc56922d534b9dd60d examples/Chat/lib/Chat/Server.pm
 SHA1 f6f5a7db0d950b19cb3a0e2f0776ac4fc0186082 examples/Chat/share/web/templates/fragments/message
 SHA1 ceb9ecbd5ba19436ff3cfe423e688bcc0d4b1adc examples/Chat/share/web/templates/fragments/sender
 SHA1 047c066b5f143e1a80056fa158e172448ee912e5 examples/Chat/share/web/templates/index.html
@@ -71,11 +72,38 @@
 SHA1 3d3cce325969be4618e89c976aa9f950618ff39a examples/Clock/Makefile.PL
 SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 examples/Clock/bin/jifty
 SHA1 faca2e649d4d9b4b00f5f6bf8932a7610c698415 examples/Clock/clockserv.pl
-SHA1 793ef4d540d2df071daad4ad73514c75d8e9aa51 examples/Clock/etc/config.yml
+SHA1 fc48886cd6416e638542c6827570643eb7cdff9e examples/Clock/etc/config.yml
 SHA1 72feb5e40abfac4e87793b427f9de45c03cfaca4 examples/Clock/lib/Clock/Event/Tick.pm
-SHA1 c2e597a83448804e04989db290404766180033ab examples/Clock/lib/Clock/Server.pm
 SHA1 e70cea658fbef26cdeb5558b89dd9c6890fbd9db examples/Clock/share/web/templates/fragments/time
 SHA1 bddc300d6e81f578c85a8807156822d682c61efe examples/Clock/share/web/templates/index.html
+SHA1 8fe8876037756db9f78ab1d6668bfcc23617414d examples/Doxory/Makefile.PL
+SHA1 f7f44f9a7337def0c97f981073e3ed970851d9ae examples/Doxory/bin/jifty
+SHA1 8a919440feae546381249bc49d9404559b7cf616 examples/Doxory/doxory
+SHA1 7996887eb81370c19d58a348632797c1c1d976f5 examples/Doxory/etc/config.yml
+SHA1 148918761e3d8e6a993f3d0f64e66f384dc8e5ea examples/Doxory/lib/Doxory/Dispatcher.pm
+SHA1 f0a1cfd87b47f0d040768abd07b885735ced7781 examples/Doxory/lib/Doxory/Model/Choice.pm
+SHA1 63105b35272344140c78a4d49c99fb6329fdfee0 examples/Doxory/lib/Doxory/Model/User.pm
+SHA1 4dcb58ff5b7e88c3e503a0b21923ead70936677c examples/Doxory/lib/Doxory/Model/Vote.pm
+SHA1 bf67169daeeadc6a18d6b948830d440a89c00176 examples/Doxory/lib/Doxory/View.pm
+SHA1 149b55cfb72c0def0ab7b495445baf8c631ce621 examples/Doxory/share/po/zh_cn.po
+SHA1 bec6af6333016377d442c59bdaaf32ab65a31e4a examples/Doxory/share/po/zh_tw.po
+SHA1 561110ddd8574426cb578a3c81d356bdc4fa47f3 examples/Doxory/t/00-model-User.t
+SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 examples/Example-Todo/META.yml
+SHA1 aef127e349b9e06adaad2bec98622582c175e795 examples/Example-Todo/Makefile.PL
+SHA1 f7f44f9a7337def0c97f981073e3ed970851d9ae examples/Example-Todo/bin/jifty
+SHA1 3edcfa5651b780a6e31e4c0e6ad28f3bf22c45ea examples/Example-Todo/etc/config.yml
+SHA1 751fdf0397a92d3bc7f034b3fd08b3438b0eb27f examples/Example-Todo/example_todo
+SHA1 9b2f9d83bcf77860f53a0c07c90a4a59ad9f5df1 examples/Example-Todo/inc/Module/Install.pm
+SHA1 abe32855d75ab13747cf65765af9947b7a8c3057 examples/Example-Todo/inc/Module/Install/Base.pm
+SHA1 381bb98ea3877bba49ae85e7a7ea130645fd3dbf examples/Example-Todo/inc/Module/Install/Metadata.pm
+SHA1 e827d6d43771032fa3df35c0ad5e5698d0e54cda examples/Example-Todo/inc/Module/Install/WriteAll.pm
+SHA1 46730854dc7241dc334b546eef267fde8df24aea examples/Example-Todo/lib/Example/Todo/Model/Todo.pm
+SHA1 61d12c9d3bb174aad4856349686c9e71e75fa7e0 examples/Example-Todo/t/00-model-Todo.t
+SHA1 3b22513afb560789fb0f38f50c55249d70f1b06d examples/HelloKitty/Makefile.PL
+SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 examples/HelloKitty/bin/jifty
+SHA1 dd97d225e86ab1cb13eabaab12a9b1bfb2410cff examples/HelloKitty/etc/config.yml
+SHA1 24d7e3ade49a5a3a7dd4f2dd74e836bafcbbbedf examples/HelloKitty/hellokitty
+SHA1 2ac96cfdb02f3a3fe5550ceb0442d9a30f7120c9 examples/HelloKitty/lib/HelloKitty/View.pm
 SHA1 4db882e66864fa40a6532ce5b83699839804b062 examples/MyWeblog/Makefile.PL
 SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 examples/MyWeblog/bin/jifty
 SHA1 d1394cef410a14394a05e2a6e6a9b32c059cb5d6 examples/MyWeblog/etc/config.yml
@@ -87,122 +115,165 @@
 SHA1 242c000d466ce6782ac759b7baea86c3b4c902bd examples/MyWeblog/t/00-model-Post.t
 SHA1 37ff983ec74bee20ce6a6425e2cbd2effa55e586 examples/Ping/Makefile.PL
 SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 examples/Ping/bin/jifty
-SHA1 2630087e4914b7d8a7fa8bea82e778fab51735dd examples/Ping/etc/config.yml
+SHA1 a86e4873a4c6be33cf919be8cbbf4b0990720b7e examples/Ping/etc/config.yml
 SHA1 9b143bab7499c4ebde34e88e635a59bd205a1bf0 examples/Ping/lib/Ping/Action/AddPing.pm
 SHA1 fc630086e84277cf19a9e9eb382c79e41d0dd810 examples/Ping/lib/Ping/Action/CancelPing.pm
 SHA1 918d401c046480483ca935728529e016de6d73f6 examples/Ping/lib/Ping/Event/Pong.pm
 SHA1 ba3f1840a56742c011e96890a327ccbe7ecb3a4d examples/Ping/lib/Ping/PingServer.pm
-SHA1 85e03a9df32331e713be7d637c04fa3ca1a24626 examples/Ping/lib/Ping/Server.pm
 SHA1 dc0966379ee2dc74c10ee8d5688cec5b1db17ac4 examples/Ping/share/web/templates/fragments/pong
 SHA1 05ac283a14e76750d63678d0864a0403aa18fd28 examples/Ping/share/web/templates/index.html
 SHA1 53c8822ddf426e82fe239e4470574913411b1355 examples/Ping/t/00compile.t
 SHA1 6d6c378447f9d74d53c06a2a027736b48b5d0670 examples/Ping/t/01startup.t
 SHA1 603bb9de29fb8cba7f13409c546750972eff645d inc/Module/AutoInstall.pm
-SHA1 9b2f9d83bcf77860f53a0c07c90a4a59ad9f5df1 inc/Module/Install.pm
-SHA1 ad955f51ad2c40d4ba35395c27f5ed899a80bf7a inc/Module/Install/AutoInstall.pm
-SHA1 abe32855d75ab13747cf65765af9947b7a8c3057 inc/Module/Install/Base.pm
-SHA1 95b81d1e91bd634467bf633571eff4420e9c04eb inc/Module/Install/Can.pm
-SHA1 1fe98c63cf9d7271c8cb4183ba230f152df69e26 inc/Module/Install/Fetch.pm
-SHA1 0606a8b02a420600bc3e2b65ab82f70266784926 inc/Module/Install/Include.pm
-SHA1 2249171a2b72cd73ff2c0a06597d29f86e5df456 inc/Module/Install/Makefile.pm
-SHA1 381bb98ea3877bba49ae85e7a7ea130645fd3dbf inc/Module/Install/Metadata.pm
-SHA1 b384bd42bc6263dc56d04a884ef4e5fe340049f8 inc/Module/Install/Scripts.pm
-SHA1 fcae3a3bda09e6ba955c8746c2bdf582a23b8d56 inc/Module/Install/Share.pm
-SHA1 0c2118868ef82ac517eb6d9c3bd93e6eb9bbf83e inc/Module/Install/Win32.pm
-SHA1 e827d6d43771032fa3df35c0ad5e5698d0e54cda inc/Module/Install/WriteAll.pm
+SHA1 ceac99579ef3914de1936417282842c07d907a6a inc/Module/Install.pm
+SHA1 c289fbaf0a2bce39c4993dab38fc70cbb3789f57 inc/Module/Install/AutoInstall.pm
+SHA1 6c9471c92c28e247fb84f4ab7dc277f68b33ea95 inc/Module/Install/Base.pm
+SHA1 b2cb1026330e8c4f8533c79569498ab15f189d86 inc/Module/Install/Can.pm
+SHA1 78acbad45c4289c228ead2278fc213ddd66bcead inc/Module/Install/Fetch.pm
+SHA1 a4b4488af13b5d038bb6fbd3c4ec635d2c640567 inc/Module/Install/Include.pm
+SHA1 642e5b27f4cbbbe440e5dc05c639f5fb79875fe3 inc/Module/Install/Makefile.pm
+SHA1 80d024f3eccf1c825b02b5e59de236b0af7d4bfc inc/Module/Install/Metadata.pm
+SHA1 a748c6176a996e5f32c50f2c49670a8ce532fb71 inc/Module/Install/Scripts.pm
+SHA1 f763d4fe06ca0876fa047a719c2fcf110a92b1d0 inc/Module/Install/Share.pm
+SHA1 fe6780ea5cfd67c79140699fbd4f0fe262255d57 inc/Module/Install/Win32.pm
+SHA1 51d43bffcfd7ffdecb8c8e9f97f3896c31b2e1b2 inc/Module/Install/WriteAll.pm
 SHA1 c17e8f3cf8ebe1eb4929fd2bd2fd530a9de1abd0 lib/Email/Send/Jifty/Test.pm
-SHA1 9380a1872911cf469d08049e4c76645eecef63f8 lib/Jifty.pm
-SHA1 f2db715c8a15d0c7c5c7cf30511dac6547f72fc5 lib/Jifty/API.pm
-SHA1 25ed41c1b89c6d39a8e6d027a9120b3e35785951 lib/Jifty/Action.pm
-SHA1 a6d9d87b4fa06cfab36f249a67946b45669dcee7 lib/Jifty/Action/Autocomplete.pm
-SHA1 19147544734762a243ba7e8b603168930aad9c62 lib/Jifty/Action/Record.pm
-SHA1 39d9bca03c6502e128b453fe3bda5e1d4173f343 lib/Jifty/Action/Record/Create.pm
+SHA1 0eb6271f949efa613d516c73cb672f7392c336b5 lib/Jifty.pm
+SHA1 337627c441c5639405a2d2cc751c63616d25c221 lib/Jifty/API.pm
+SHA1 7dc39eb45149bd3c9b7e1f19047657dbf84688df lib/Jifty/Action.pm
+SHA1 d73654ad2f7edc2f1661ab866b1db609d83806b3 lib/Jifty/Action/Autocomplete.pm
+SHA1 a96809977dac6f6c644b4b265ce510c13130264c lib/Jifty/Action/Record.pm
+SHA1 9afca5c5a9b57f11eb276afadea614b1be4570f6 lib/Jifty/Action/Record/Create.pm
 SHA1 224f3ed1a4710fb13e4627acd22067e2fa5c35c6 lib/Jifty/Action/Record/Delete.pm
 SHA1 1e400299405a06d3d09bb7548d97c52b850b7f43 lib/Jifty/Action/Record/Search.pm
 SHA1 821d06cdd92876efd01e08800eae46e52e13c2a6 lib/Jifty/Action/Record/Update.pm
 SHA1 ab7a0e0bae4cd1ecbda260b339a4116e65708a7f lib/Jifty/Action/Redirect.pm
-SHA1 cf349fcfe9ee28216eae2213ab0016ceaffaf2a7 lib/Jifty/Bootstrap.pm
-SHA1 f6e9cb12da25b65df8bc2762423d1fcc9d41ec3e lib/Jifty/ClassLoader.pm
+SHA1 0334c7ad4458bca073fa22372b4775937a0852e1 lib/Jifty/Bootstrap.pm
+SHA1 7a3849fb30ecb9bb7c0c382b7cc44b6216516de2 lib/Jifty/ClassLoader.pm
 SHA1 1009fa942a8cf3da853694f321d6f67d70613a79 lib/Jifty/Client.pm
 SHA1 a4e91b327848fe1c5b76e4ffaa926300e4c1ef2f lib/Jifty/Collection.pm
-SHA1 ce2f398600582262a2f5562a1de77bc03f6e2676 lib/Jifty/Config.pm
-SHA1 48514a496198c022aff7e4d1c578824addda7c91 lib/Jifty/Continuation.pm
-SHA1 15970f85b57eab885568a71f164dc627c791287c lib/Jifty/CurrentUser.pm
-SHA1 4521a0e9a145697c836e2247fbdb4e93b8966366 lib/Jifty/DateTime.pm
-SHA1 9595652e061d4066615b1ac811700da46394ea65 lib/Jifty/Dispatcher.pm
+SHA1 70ed11fa2fe5a196b5d5ee18e162e0f561dc7780 lib/Jifty/Config.pm
+SHA1 c6d8ac5f2dc450636478bc3051724f7eac74fce6 lib/Jifty/Continuation.pm
+SHA1 3fc7f4db180481c109248941a65f224c8e346aa8 lib/Jifty/CurrentUser.pm
+SHA1 c3ee8cd867481561dd7359d8f609687746e3b5dd lib/Jifty/DateTime.pm
+SHA1 24425ca3e82abf17e15182b8e13240d9ab102b47 lib/Jifty/Dispatcher.pm
 SHA1 c9c904906c35def343f14c0c216b62771c07f842 lib/Jifty/Event.pm
 SHA1 fb9f33e2838fbff0cd5b5a784adee8b0fc347ebc lib/Jifty/Event/Model.pm
-SHA1 5a6b765e4e61e1a098cc997127c9a5e9405ea32d lib/Jifty/Everything.pm
+SHA1 121cc604741f5a674cbbc2a55dfb6d4c8cf11bb8 lib/Jifty/Everything.pm
 SHA1 818bd0aa6afeb39bf96e0068fe3222c74133b4d8 lib/Jifty/Filter/DateTime.pm
-SHA1 8f83cbce4937acba8d2f5c944d3d3a95a0156d9c lib/Jifty/Handle.pm
-SHA1 0c5f2e31fc9cdd266ff3c10bc3ff6715a3b77c9d lib/Jifty/Handler.pm
-SHA1 89fb4f3164b4ea84eb8084829bbca9e93d2259b1 lib/Jifty/I18N.pm
-SHA1 7ce311e2005ef0df27d71b1d80a4f05237dda9f4 lib/Jifty/JSON.pm
-SHA1 3af93349fe8a236c714d88367077f88af11f5d32 lib/Jifty/LetMe.pm
-SHA1 f76b940651eb2c53bce0af9be451a24b0358fec9 lib/Jifty/Logger.pm
-SHA1 858723b0874be436d44be113934f182eff7e9388 lib/Jifty/Manual/AccessControl.pod
+SHA1 45fa3790eb4737497dd728510cc92aa76017e350 lib/Jifty/Handle.pm
+SHA1 947e5aee7b981e19042f3343050a129600b88772 lib/Jifty/Handler.pm
+SHA1 c413c80506fe0a1da3154739249a9351982b1db2 lib/Jifty/I18N.pm
+SHA1 fe370e2c51ca0f20cb0bce133b8c9067c02a524a lib/Jifty/JSON.pm
+SHA1 93d009a7d9a25975786b9ded3dcd5fdac90c9389 lib/Jifty/LetMe.pm
+SHA1 1687a979438f24c95a6b857ab5305910108bfb49 lib/Jifty/Logger.pm
+SHA1 9a01a2e586aa5799fdc0f04c6240220d9dd953b9 lib/Jifty/Manual/AccessControl.pod
 SHA1 ef9ff36385a9f780ac0204bffb9425818d78b789 lib/Jifty/Manual/Actions.pod
 SHA1 d320630f6613f4aa1ec3b9537129fd9ca847fb61 lib/Jifty/Manual/Continuations.pod
-SHA1 976198d6f93f9c46625c3fd1bd9d89a13ab89f40 lib/Jifty/Manual/Cookbook.pod
+SHA1 99848cf166e90d9c0963a65d09a627ba11a3613e lib/Jifty/Manual/Cookbook.pod
+SHA1 ace7259a8fc39a43174e3292a8003baa43670da8 lib/Jifty/Manual/Deploying.pod
 SHA1 38a90072f4a25eac8d4480b00290b069e6397673 lib/Jifty/Manual/FAQ.pod
-SHA1 0f95658ca3d4ed3deb1951f514774446a583247f lib/Jifty/Manual/Glossary.pod
+SHA1 910f64961a65608ab8575a08aa4eab6b1862579b lib/Jifty/Manual/Glossary.pod
 SHA1 f272be20cc67acaf01c116f432a8f42d82c57877 lib/Jifty/Manual/Models.pod
 SHA1 1204d70c868084ac3114fae277e98a756f83f819 lib/Jifty/Manual/ObjectModel.pod
-SHA1 537017160a444f84bf1673cc3722db644c2b662e lib/Jifty/Manual/PageRegions.pod
+SHA1 60ee994e58dfb4e9190badc16c96c4760e5669cb lib/Jifty/Manual/PageRegions.pod
 SHA1 8ba19a0760196ceb1afbeaa06e7314e254bef258 lib/Jifty/Manual/RequestHandling.pod
 SHA1 11c2a307f398203ebd804cee990a89e940c406f6 lib/Jifty/Manual/Style.pod
-SHA1 69c995fe4da233dc1b54655813cb6e51d979b759 lib/Jifty/Manual/Tutorial.pod
+SHA1 6920f173d2460fed1957019be295acb588fff9a1 lib/Jifty/Manual/Tutorial.pod
+SHA1 bfdb8da4b149a60d30700a7494e67ea7367a9417 lib/Jifty/Manual/TutorialRest.pod
 SHA1 4ad61c8957fdfed1aa5cc60294cbfb43a359e2d2 lib/Jifty/Manual/Tutorial_de.pod
 SHA1 45f95f61826365d39a5eab2cc119967273d17077 lib/Jifty/Manual/Tutorial_ja.pod
-SHA1 0398a7d053b6c78f7d769f7251d3a01af80cbe57 lib/Jifty/Manual/Upgrading.pod
+SHA1 2b4c79b6656658b7198ba579b58e3a599d404b01 lib/Jifty/Manual/Upgrading.pod
 SHA1 d0b7a4277c8a3d1a393d7c51fff48b059461f87c lib/Jifty/Manual/UsingCSSandJS.pod
 SHA1 59ce74460e9c1fe8aa1114c2e874348583b76548 lib/Jifty/Mason/Halo.pm
-SHA1 809ace5bafff5ad2461d5495464863ba808dfd19 lib/Jifty/Model/Metadata.pm
-SHA1 36de25464ae4eb07675f453cc590b634c6ff5a37 lib/Jifty/Model/Session.pm
+SHA1 c7a9988b0826f9c55af2415c7d314ff546193cee lib/Jifty/Model/Metadata.pm
+SHA1 4b89786af61d1490286bc02c4c3a8edb95aa0b60 lib/Jifty/Model/Session.pm
 SHA1 0efcdf22d66e521cf250c1398caf3aba93ed795d lib/Jifty/Model/SessionCollection.pm
-SHA1 e24506b3e0fbdb450e55f3935980813c9c9e2bee lib/Jifty/Module/Pluggable.pm
-SHA1 f0090580d6a54fd8114b8fc1b4cb644c8c3dd2f5 lib/Jifty/Notification.pm
+SHA1 d15fc44fc8af2c4a7db3c2f08e1d69d6f397e734 lib/Jifty/Module/Pluggable.pm
+SHA1 f7c511c6b0c6ccfc3c5fdc0bf0a4e224d78a9c40 lib/Jifty/Notification.pm
 SHA1 7223070583b1b15f651db7a71b97e039e084aa4f lib/Jifty/Object.pm
 SHA1 c3fde2a862013cd6284637d79c751c3c2e360720 lib/Jifty/Param.pm
-SHA1 11d4de5da85ee53e6f3f434a5a519ebc574cedab lib/Jifty/Param/Schema.pm
-SHA1 69708ae740a40953c50217c37e23740179da80be lib/Jifty/Plugin.pm
-SHA1 d80065a87ec1dd8b0bbcd1853e9a7192a18a04f5 lib/Jifty/Plugin/ClassLoader.pm
-SHA1 20d3f35b391236d9a0e554e62368b4f6fd1383dc lib/Jifty/Plugin/REST.pm
-SHA1 690d1ca831e42d1b1810875abdbae0ff480620e2 lib/Jifty/Plugin/REST/Dispatcher.pm
-SHA1 3fccef02727c8e75a0b4c93f940e9e18e0a499d4 lib/Jifty/Record.pm
-SHA1 0283384c06b36339143690b4beb7830ab4648e0f lib/Jifty/Request.pm
+SHA1 c4c0387640f7eafb35b346798c5e150c6ecb7496 lib/Jifty/Param/Schema.pm
+SHA1 134c5535e4b1f5ef0a5a8f78259b36c4bf247bed lib/Jifty/Plugin.pm
+SHA1 328b724a1f266999eb1f12e60a7ac6fcc533d177 lib/Jifty/Plugin/AdminUI.pm
+SHA1 00354893bf1283e9cf1b52de5b41bdfb57a78811 lib/Jifty/Plugin/Authentication/Password.pm
+SHA1 9f078a684545d3a9c075d83812cffeca0a3b633e lib/Jifty/Plugin/Authentication/Password/Action/ConfirmEmail.pm
+SHA1 de9208f8911bc09594299b618a7ce05c71cac57e lib/Jifty/Plugin/Authentication/Password/Action/GeneratePasswordToken.pm
+SHA1 2da111cb0154fe09287b9c8db251b5d8720d0379 lib/Jifty/Plugin/Authentication/Password/Action/Login.pm
+SHA1 3ccf33cfd732343cfeeda7f2acc1df7c7da721fe lib/Jifty/Plugin/Authentication/Password/Action/Logout.pm
+SHA1 074fe2fa59464a78b69558f2c20b39fe45a6e56e lib/Jifty/Plugin/Authentication/Password/Action/ResendConfirmation.pm
+SHA1 eb20b698db12db185f08e4d0e0a6c39dc2c1432f lib/Jifty/Plugin/Authentication/Password/Action/ResetLostPassword.pm
+SHA1 89d74967f85b631644d039393920646cfb772f2a lib/Jifty/Plugin/Authentication/Password/Action/SendAccountConfirmation.pm
+SHA1 28604b89817992c647042420090a59fee0fe06bd lib/Jifty/Plugin/Authentication/Password/Action/SendPasswordReminder.pm
+SHA1 3d0b444280c3b0ae577e0ada5cb3fd2eb8803f9f lib/Jifty/Plugin/Authentication/Password/Action/Signup.pm
+SHA1 b0ccc1d001aeca18ad7466b531081805408b2010 lib/Jifty/Plugin/Authentication/Password/Dispatcher.pm
+SHA1 3191af60483a20faf1d624da37929e3310ced14c lib/Jifty/Plugin/Authentication/Password/Mixin/Model/User.pm
+SHA1 9711ece6f3637e972708c8bda313aaa57fd1b405 lib/Jifty/Plugin/Authentication/Password/Notification/ConfirmEmail.pm
+SHA1 f8e1724e5d0d3e490439f0ad761a96155ff1b5a4 lib/Jifty/Plugin/Authentication/Password/Notification/ConfirmLostPassword.pm
+SHA1 91272a6c9926cdacbfc10afe8624a35868a8e8be lib/Jifty/Plugin/Authentication/Password/View.pm
+SHA1 da70c7fbcd78d7ae9bd53deb74a022d0eeea4a12 lib/Jifty/Plugin/ClassLoader.pm
+SHA1 25d4c8b9459c9c299fb181d41539475a854309f0 lib/Jifty/Plugin/CompressedCSSandJS.pm
+SHA1 3b6cb101e9e3465cefdb843fb9108cb126644284 lib/Jifty/Plugin/CompressedCSSandJS/Dispatcher.pm
+SHA1 b6a34618e94885dac38d0a6b501a63f5c0184008 lib/Jifty/Plugin/ErrorTemplates.pm
+SHA1 07037bce896482134852dcfb6c15a8bbb8fa6adc lib/Jifty/Plugin/ErrorTemplates/View.pm
+SHA1 f13f769cb4d6d529bcfc46647512544eaaa54774 lib/Jifty/Plugin/Halo.pm
+SHA1 432d5c6343b4390dcd135918d7f729d2c01eee5c lib/Jifty/Plugin/LetMe.pm
+SHA1 8692eb8735e17f6f9a25f41c368da4a6839363c8 lib/Jifty/Plugin/LetMe/Dispatcher.pm
+SHA1 af733b25eee3cc4e0e6b087a76bfd965534a2343 lib/Jifty/Plugin/OnlineDocs.pm
+SHA1 fcc3ccbee7c9646745fc79475d53f67e81d7c0db lib/Jifty/Plugin/OnlineDocs/Dispatcher.pm
+SHA1 df332565b291fd458fab232414b24283f379ac16 lib/Jifty/Plugin/REST.pm
+SHA1 053b6f7d44ade4ed7567a4a0c444e777108b26c3 lib/Jifty/Plugin/REST/Dispatcher.pm
+SHA1 7fa0c5fa1ef6dbe8f1c4a351133f74ca32a70507 lib/Jifty/Plugin/SkeletonApp.pm
+SHA1 1b07ce39502e28564f41d8dd27a4c0094de9f354 lib/Jifty/Plugin/SkeletonApp/Dispatcher.pm
+SHA1 81362e19c903ba6c98c3cd84bc7b4b8f5615d05e lib/Jifty/Plugin/SkeletonApp/View.pm
+SHA1 a51b4791f28c6f64ba00ac21fc05933b32e19015 lib/Jifty/Plugin/User.pm
+SHA1 a1c827266b0db910b02476eee76f6a5a4663e2ba lib/Jifty/Plugin/User/Mixin/Model/User.pm
+SHA1 c77500585cddf1c520b0438384481a1b68d13c57 lib/Jifty/Plugin/Yullio/View.pm
+SHA1 26b636ef6291098364119287e7363be9f58990f7 lib/Jifty/Record.pm
+SHA1 8ba38d25e9f6ead360e20baa457f119694584edd lib/Jifty/Request.pm
 SHA1 7e4d83147f5f665bb0e8d290ea70340b82a205c2 lib/Jifty/Request/Mapper.pm
 SHA1 0a92b4cdb402463e303b897195c9ad914767c27f lib/Jifty/Response.pm
-SHA1 56988d89d24e33a5ed2c2c6539b02593cc9e3344 lib/Jifty/Result.pm
-SHA1 85de033731ae63d0b3efec515a3608337cbc5c31 lib/Jifty/RightsFrom.pm
-SHA1 0306af64a6289796db4b5ff2b8c5e7c23506a9e3 lib/Jifty/Script.pm
-SHA1 a576b768487f81889ade60cb10f89eb2073adadc lib/Jifty/Script/Action.pm
-SHA1 17bb02c22e126df9ff783843e5921e46b060c2be lib/Jifty/Script/App.pm
+SHA1 669b0956c14105b4178875d6856b129b75941328 lib/Jifty/Result.pm
+SHA1 126fb131c36f6ff7dc6cc4193b0c9a402168a832 lib/Jifty/RightsFrom.pm
+SHA1 83f1a04d22cb553f0af2842b7fe603277441f72b lib/Jifty/Script.pm
+SHA1 f97fb67cd7db7aa2374ef4a0f1b8b9705e3ce153 lib/Jifty/Script/Action.pm
+SHA1 3aa3a449b282e05dfb312cf266572edabf2bae17 lib/Jifty/Script/Adopt.pm
+SHA1 84a9ddd8c2f9d738daed65201ae938cb5e0a45de lib/Jifty/Script/App.pm
 SHA1 1ad9937d9e28f1568954bcffac500be87f3cb355 lib/Jifty/Script/Deps.pm
-SHA1 cb42aff8740412f9e7a26915a4e852817aa39af8 lib/Jifty/Script/FastCGI.pm
+SHA1 3c26ea2d6e25c42ecd7edae41d4ad2fc552f1451 lib/Jifty/Script/Env.pm
+SHA1 79fbed4c7b6e3b85cd78afbc69bd990f45f97a01 lib/Jifty/Script/FastCGI.pm
 SHA1 e25a259fc9fd3183a7981236f428f54ac4c4f49e lib/Jifty/Script/Help.pm
-SHA1 be1f648841609388f48214e632e0b169216dd58a lib/Jifty/Script/Model.pm
+SHA1 29d16baf7dbf778f6082f8852723b6ef82842ef0 lib/Jifty/Script/ModPerl2.pm
+SHA1 ae7d6a97f55a111e10cbc127d3174c48dc896afc lib/Jifty/Script/Model.pm
 SHA1 77c221bb4b7162b2fc95c841ceeea04194afb264 lib/Jifty/Script/Plugin.pm
-SHA1 eba3c96bcfae42ea6a9e5d2cbef6bca19617b47e lib/Jifty/Script/Po.pm
-SHA1 afb4c37e7503e53676773bb3d6f65fde111679fc lib/Jifty/Script/Schema.pm
-SHA1 4bbe2362a6cd195fac119a37cd71119afb5516f6 lib/Jifty/Script/Server.pm
-SHA1 0646a96ca5f3da1585e3fb1dcc9b3540d2b8f50f lib/Jifty/Server.pm
+SHA1 3365d06f92ffe40175f2c9d7fa4175c48cd42ed9 lib/Jifty/Script/Po.pm
+SHA1 cf7d62a4634d32342e5b4581ceb1dc8c78439943 lib/Jifty/Script/Schema.pm
+SHA1 50e6a73afeb945145576c079d14d3707d13b4344 lib/Jifty/Script/Server.pm
+SHA1 48a8889b44c0450ccb2d27cbb0b7c7f3ae26a426 lib/Jifty/Server.pm
+SHA1 b49ae221b107519b3019b3f5e5ab5b7e8c6b4332 lib/Jifty/Server/Fork.pm
+SHA1 9a8c2f2cdc88fc00baaafaa72bc3413e086c0448 lib/Jifty/Server/Prefork.pm
+SHA1 e7453a3cda290e60d5432e60e53bec8b92a91772 lib/Jifty/Server/Prefork/NetServer.pm
 SHA1 4c51d2df15281788b74d080488b0c5959cd95a1a lib/Jifty/Subs.pm
-SHA1 43277d31da2a30afd160dbe2077314285898438f lib/Jifty/Subs/Render.pm
-SHA1 df6cadbfbd91dcbf91d334a2132882821d9b3741 lib/Jifty/Test.pm
-SHA1 24eb481ac109ce0639496d6e16311ae2af0bb0da lib/Jifty/Test/WWW/Mechanize.pm
-SHA1 bacce10076cd7790405d29b0cabd99cae06b739e lib/Jifty/TestServer.pm
-SHA1 206e12811205063b22fcaaf0cd04dd66321d793c lib/Jifty/Upgrade.pm
+SHA1 b3d122eed10c4ac3cba561913a42220c2f5ee085 lib/Jifty/Subs/Render.pm
+SHA1 e15bde68ba67b141ae1565be066f1e1f171f63ec lib/Jifty/Test.pm
+SHA1 0d6d53b5084bb89baea771d3e9d602a195255e37 lib/Jifty/Test/WWW/Mechanize.pm
+SHA1 47c5840fafd56473a0e1a9228f169d3813317c13 lib/Jifty/TestServer.pm
+SHA1 4614193951790ed53fc8682135cdb1b40d3fa975 lib/Jifty/Upgrade.pm
 SHA1 f3957ac04ad92737d68b2a63f068679b4bacafed lib/Jifty/Upgrade/Internal.pm
-SHA1 01e8cf19fef0094b917712165d5ae0acf37fa31d lib/Jifty/Util.pm
-SHA1 bf4cbc6a7c94597cadb101b609f80004bfb64eef lib/Jifty/View/Mason/Handler.pm
-SHA1 91b4185b0570453805f15b0eb0ce0f50a6f1eef3 lib/Jifty/View/Static/Handler.pm
-SHA1 1b62b886ec2a10b9b078535a7782bd01507bf6a6 lib/Jifty/Web.pm
-SHA1 93f70b329f4e05105edd6a2bacb1d71ed59c5449 lib/Jifty/Web/Form.pm
-SHA1 07cea2d1e0075a331d4f028fee34c5fd1bdda618 lib/Jifty/Web/Form/Clickable.pm
-SHA1 9065dcef2d3e755bcefbc5ec1481bf92e883c287 lib/Jifty/Web/Form/Element.pm
-SHA1 f7b910dc62f6265d4df1a8ec937d902549f1ee49 lib/Jifty/Web/Form/Field.pm
-SHA1 ba87c27d5432a8393ffeaf39323ac80c0f4facab lib/Jifty/Web/Form/Field/Button.pm
+SHA1 d42ff4531e36438208cd8242d15f7d210928ff6b lib/Jifty/Util.pm
+SHA1 05af258e63bbb8ea166e845b8028546b858fcecb lib/Jifty/View/Declare.pm
+SHA1 dd7596d3d4cc8df03c074a44a0cd0813a5cf0a89 lib/Jifty/View/Declare/BaseClass.pm
+SHA1 912220dc62ae0d21d78ed499626a235a14db09a6 lib/Jifty/View/Declare/CoreTemplates.pm
+SHA1 88c62ed42916e58a344e1d09e9a0019436e34cb6 lib/Jifty/View/Declare/Handler.pm
+SHA1 bba1390f47745aa843a72565fbdf1adce3afd241 lib/Jifty/View/Declare/Helpers.pm
+SHA1 1df8f813bdc979dd182a455e9953254abcd247ed lib/Jifty/View/Mason/Handler.pm
+SHA1 2e97fd90420ade1dcdc6d5b815a352cd83c23671 lib/Jifty/View/Static/Handler.pm
+SHA1 94172b92971ea2a5fcdc3f11ebcc94a8274688c6 lib/Jifty/Web.pm
+SHA1 5dbb5f45d0ff0e0ddfabe91d6152c1aa507dbc9b lib/Jifty/Web/Form.pm
+SHA1 f073670eb2f206f99bd1f1377740965cd5da5ac1 lib/Jifty/Web/Form/Clickable.pm
+SHA1 d77f222ad036fe8b39715c85fab009b7a283e1b9 lib/Jifty/Web/Form/Element.pm
+SHA1 a823ab5fae50fa6222c4d3143779d2288e1cc3da lib/Jifty/Web/Form/Field.pm
+SHA1 bb9dc120af472abe3a35f89c772728c75ed8a3c2 lib/Jifty/Web/Form/Field/Button.pm
 SHA1 c1071263839a663d44d7f922c7c24b5bcc132a82 lib/Jifty/Web/Form/Field/Checkbox.pm
 SHA1 b21ef4e33a628f5d6c54adf5f47f75e69a861644 lib/Jifty/Web/Form/Field/Combobox.pm
 SHA1 cc86a97a80c6c9e22183a099979a712a3900a39a lib/Jifty/Web/Form/Field/Date.pm
@@ -217,10 +288,11 @@
 SHA1 2548412d5bfbd08050d53ab5c58e0d962d4b2448 lib/Jifty/Web/Form/Field/Unrendered.pm
 SHA1 e37541952c969f2e74f942782d483de75e9265f9 lib/Jifty/Web/Form/Field/Upload.pm
 SHA1 16cff04150ba0ae8bffe04c1c661d80972876248 lib/Jifty/Web/Form/Link.pm
-SHA1 e4baa13068c7de8e4737efa4dbc18f1f059e6047 lib/Jifty/Web/Menu.pm
-SHA1 e17189fe3d525c4fe2a251db20a5a6eabbc7c786 lib/Jifty/Web/PageRegion.pm
-SHA1 093ab860163f03e9d85c8bb366d694830b7d940a lib/Jifty/Web/Session.pm
+SHA1 a4787c85a11c091f8560d1960edce1aaeeced2c9 lib/Jifty/Web/Menu.pm
+SHA1 e912f7c224380aaf79c6cece6219670a973fe85e lib/Jifty/Web/PageRegion.pm
+SHA1 0fb24e6615e89b7f3b2b0af7457c4aaa61a48ad9 lib/Jifty/Web/Session.pm
 SHA1 f655fb9734715ebf51fb5e9b554c02b9e4e2ac61 lib/Jifty/Web/Session/ClientSide.pm
+SHA1 d7a8f92ddbc614904ad6aa53d818b0bd5df03317 lib/Jifty/Web/Session/None.pm
 SHA1 c4de1ef964243aae5ab90d0a5a6dd9c213eb9f80 lib/Jifty/YAML.pm
 SHA1 feeb00d6502ca54367036767f5e3f20275580291 plugins/AuthCASLogin/MANIFEST
 SHA1 f7ee4953b3c05710fe531cc9b579f65ed04af761 plugins/AuthCASLogin/Makefile.PL
@@ -237,21 +309,20 @@
 SHA1 36215b6306dd37ebbf6206f526e9464d2d261d2a plugins/AuthCASLogin/share/web/templates/caslogin
 SHA1 f971aec45ba679dc55a9955077324f5c0ea75cca plugins/AuthCASLogin/share/web/templates/caslogout
 SHA1 c93e6f367c6a110cb05f8fefa4cb37881daeebe7 plugins/AuthCASLogin/t/00-load.t
-SHA1 96e2b7d839f54a14c42dd421516a267d7e2c4b94 plugins/AuthCASOnly/MANIFEST
-SHA1 62ee3ecfa8b4923ee68aa5f3179f2b3c5c8551dd plugins/AuthCASOnly/META.yml
+SHA1 215e0e0faa081e206560b09cf4570ab949b298a9 plugins/AuthCASOnly/MANIFEST
 SHA1 9e218ee17e541c947ceb6f78d4714fc4baa43895 plugins/AuthCASOnly/Makefile.PL
-SHA1 0211277b86a7c26952a44da5ea55945a32ca2689 plugins/AuthCASOnly/debian/changelog
+SHA1 a21e7eea5a3b6a3b129c0e8d0ebb87d6b4af86a3 plugins/AuthCASOnly/debian/changelog
 SHA1 9c6b057a2b9d96a4067a749ee3b3b0158d390cf1 plugins/AuthCASOnly/debian/compat
 SHA1 df5baa3318d61d253b6256a2a3abb06aa28669a5 plugins/AuthCASOnly/debian/control
 SHA1 c361200ede7340a93f131034eaaaa71f36bf1617 plugins/AuthCASOnly/debian/copyright
-SHA1 6178f211c12057c7f8bf110ae4d9ae9961ba90c7 plugins/AuthCASOnly/debian/files
+SHA1 dda59a9600b41022496d69c03b2d7eb9106705fa plugins/AuthCASOnly/debian/files
 SHA1 df2b684174a5e8bdf6d14b985020057702b4c884 plugins/AuthCASOnly/debian/rules
-SHA1 e324ade45843a878b10cc5bd78061401dcf56685 plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly.pm
+SHA1 919c785814ab3c9f848f89b44184fe599d58fe74 plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly.pm
 SHA1 827a868f825e94c7630368d4cd98d591edacc188 plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly/Action/CASLogin.pm
 SHA1 cc9279734210b6a8de3312716ee36868d437f7db plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly/Action/CASLogout.pm
 SHA1 b401b903bece0f11a45c7fe129ada9e6e2681f4b plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly/CurrentUser.pm
 SHA1 d0a159254cb3d99a5d3664ffd8c8d42c3daa40f1 plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly/Dispatcher.pm
-SHA1 67aea2e30d74af4e01b66ef5bebb4d69d78f2b37 plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly/Model/CASUser.pm
+SHA1 263c412cfe48db61500f5566a0174fbb284e46fd plugins/AuthCASOnly/lib/Jifty/Plugin/AuthCASOnly/Model/User.pm
 SHA1 36215b6306dd37ebbf6206f526e9464d2d261d2a plugins/AuthCASOnly/share/web/templates/caslogin
 SHA1 f971aec45ba679dc55a9955077324f5c0ea75cca plugins/AuthCASOnly/share/web/templates/caslogout
 SHA1 de334fd98ec8b7bf6b72b9f4d98da1405f2fd9a9 plugins/AuthCASOnly/t/00-load.t
@@ -271,19 +342,19 @@
 SHA1 a52f49740c6a0c5dfb5ef2413b26d40c71e8dba0 plugins/AuthLDAPLogin/share/web/templates/ldaplogin
 SHA1 f971aec45ba679dc55a9955077324f5c0ea75cca plugins/AuthLDAPLogin/share/web/templates/ldaplogout
 SHA1 43c8998946172ac32eeefdfbf95a663d6e60e40a plugins/AuthLDAPLogin/t/00-load.t
-SHA1 8c487e541a3d5115e8b04f35ac6555cca05de933 plugins/AuthLDAPOnly/MANIFEST
+SHA1 56ea69fc320fe797b3ee0abe744e838783156e38 plugins/AuthLDAPOnly/MANIFEST
 SHA1 76658d43f96759a30895e9ab9116d3fe2ec475bf plugins/AuthLDAPOnly/Makefile.PL
-SHA1 6490648ff1114d79ba05a70e8106d5d0226d72ae plugins/AuthLDAPOnly/debian/changelog
+SHA1 03bd8afc22d6fc4dfadf240f683004d5d1cf7261 plugins/AuthLDAPOnly/debian/changelog
 SHA1 9c6b057a2b9d96a4067a749ee3b3b0158d390cf1 plugins/AuthLDAPOnly/debian/compat
 SHA1 e256f776a58f8ca1de7a20082e855e03bace79d8 plugins/AuthLDAPOnly/debian/control
 SHA1 c361200ede7340a93f131034eaaaa71f36bf1617 plugins/AuthLDAPOnly/debian/copyright
 SHA1 68dfa9d87a39ca9c6480d8a93e7efb18565b4db3 plugins/AuthLDAPOnly/debian/rules
-SHA1 69f53febd6a99e6e61e5b87a387139a74f509b8d plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly.pm
+SHA1 3bd9e35fc165eddb6d6f007bfda1d18dc45855e5 plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly.pm
 SHA1 3a1a5ac6571c49fd766eba8f8fb94dbc35081192 plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Action/LDAPLogin.pm
 SHA1 8709ec6fd348b2229eecab4778fe52b9e3f5f241 plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Action/LDAPLogout.pm
 SHA1 5776159e43fe28077ebe66359d888620c1a78c30 plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/CurrentUser.pm
 SHA1 11063de8ce0267140e4eeacc8caa552de893d435 plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Dispatcher.pm
-SHA1 be8d85f7423aabd9e504feb4e759d412990c4f5a plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Model/LDAPUser.pm
+SHA1 a03143b94d7abae6c6b162b4353c9eb7ddaf2143 plugins/AuthLDAPOnly/lib/Jifty/Plugin/AuthLDAPOnly/Model/User.pm
 SHA1 645c578bde4a89f2a47ffbff048863a52691ad11 plugins/AuthLDAPOnly/share/po/en.po
 SHA1 42fa3dbdbfd9c34dd1260df7d70fd215aeb3d987 plugins/AuthLDAPOnly/share/po/fr.po
 SHA1 a52f49740c6a0c5dfb5ef2413b26d40c71e8dba0 plugins/AuthLDAPOnly/share/web/templates/ldaplogin
@@ -293,11 +364,13 @@
 SHA1 0086fe18fd01b6ace92636034ea606008ab5a374 plugins/AuthzLDAP/Makefile.PL
 SHA1 d9d714781bef6a0e3892f258350f9d6797eafa9a plugins/AuthzLDAP/lib/Jifty/Plugin/AuthzLDAP.pm
 SHA1 a63d50ed4f93a1d9909af9889fc30d8b3e9140a4 plugins/AuthzLDAP/lib/Jifty/Plugin/AuthzLDAP/Action/LDAPValidate.pm
-SHA1 5b391191e624c0d2e8c16f19c531a2c2993ba49e plugins/AuthzLDAP/lib/Jifty/Plugin/AuthzLDAP/Model/LDAPFilter.pm
+SHA1 b43a3b2208f34d92fe6d86cc43ca8fecdf44dc30 plugins/AuthzLDAP/lib/Jifty/Plugin/AuthzLDAP/Model/LDAPFilter.pm
 SHA1 dc50e07d76934884116843767a1784571accac4e plugins/AuthzLDAP/share/po/en.po
 SHA1 18be32490b494470824534cccd87b034cd790987 plugins/AuthzLDAP/share/po/fr.po
 SHA1 cd21439e1906eb58e9c576a477a8a31e05340c05 plugins/AuthzLDAP/share/web/templates/error/AccessDenied
 SHA1 289f295702910035ed2b122279ecf8b3b6a6389b plugins/AuthzLDAP/t/00-load.t
+SHA1 90adb765b74e3b0d115b33a4a6da8ed38a6eb179 plugins/DumpDispatcher/Makefile.PL
+SHA1 94f0d477bc64ce6e88e0023cccc228c4f5ed1cf9 plugins/DumpDispatcher/lib/Jifty/Plugin/DumpDispatcher.pm
 SHA1 e8ce16205eccb1b99224ca81d3a3496163a98864 plugins/EditInPlace/Makefile.PL
 SHA1 f2d5b6fb2d7628c2dd7207a8a7fb3dab1ea2f4bf plugins/EditInPlace/debian/changelog
 SHA1 9c6b057a2b9d96a4067a749ee3b3b0158d390cf1 plugins/EditInPlace/debian/compat
@@ -317,7 +390,7 @@
 SHA1 0c2118868ef82ac517eb6d9c3bd93e6eb9bbf83e plugins/EditInPlace/inc/Module/Install/Win32.pm
 SHA1 e827d6d43771032fa3df35c0ad5e5698d0e54cda plugins/EditInPlace/inc/Module/Install/WriteAll.pm
 SHA1 312dfe93d52daa4c72257cf2299aee35f61b0a16 plugins/EditInPlace/lib/Jifty/Plugin/EditInPlace.pm
-SHA1 187cd200affbf8861a91d008273eb9de664a9d60 plugins/EditInPlace/lib/Jifty/Plugin/EditInPlace/Action/FileEditor.pm
+SHA1 5cb6593e89cc253b5f3a99eb8e08366b3b7bd119 plugins/EditInPlace/lib/Jifty/Plugin/EditInPlace/Action/FileEditor.pm
 SHA1 69ff778cc486bfd14a97f7690a7706633dbc2e6b plugins/EditInPlace/lib/Jifty/Plugin/EditInPlace/Dispatcher.pm
 SHA1 6f363a3b2826ee1fb01921fefebaf99b111a1c31 plugins/EditInPlace/share/web/templates/__jifty/create_file_inline
 SHA1 dc4e60f93e56496f8010ae81888e84e3352e979f plugins/EditInPlace/share/web/templates/__jifty/edit_file
@@ -328,16 +401,342 @@
 SHA1 e84437393b86a21e865df9ea0d0711a75ef4928e plugins/EmailErrors/lib/Jifty/Plugin/EmailErrors/Dispatcher.pm
 SHA1 20fcd16f0baba3e0114bc73d2dca0c9da3a6405c plugins/EmailErrors/lib/Jifty/Plugin/EmailErrors/Notification/EmailError.pm
 SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 plugins/EmailErrors/share/web/templates/.file
+SHA1 ebcfb9af339f6dee2bdd2b2d8157dadec865affc plugins/ExtJS/Makefile.PL
+SHA1 1ca711c23637fe2e9f7bb7bf17b20b5863957a63 plugins/ExtJS/lib/Jifty/Plugin/ExtJS.pm
+SHA1 19143ed81fe29776e2279aa3f7fdff436fc0aabe plugins/ExtJS/lib/Jifty/Plugin/ExtJS/Dispatcher.pm
+SHA1 68f6be906ddf65f2ae2221f17ad98ed9558e70de plugins/ExtJS/share/web/static/css/extjs/README.txt
+SHA1 a9e97f3355a1d406d0fc42ceb97fe3fc8737fc78 plugins/ExtJS/share/web/static/css/extjs/basic-dialog.css
+SHA1 25c23bca05a866670b2f336eee9335613e21ebed plugins/ExtJS/share/web/static/css/extjs/box.css
+SHA1 0761657572ec7e7459f7d3a790ab6548b081f1af plugins/ExtJS/share/web/static/css/extjs/button.css
+SHA1 4d5da1cb3722bbed33337fcb3f791cdfcd1e0ed8 plugins/ExtJS/share/web/static/css/extjs/combo.css
+SHA1 881bc6e67800fa39a41c6aa2ffc8813cbec83048 plugins/ExtJS/share/web/static/css/extjs/core.css
+SHA1 e4a52f11ab321155c2be0d04c4bf7f650dd813c0 plugins/ExtJS/share/web/static/css/extjs/date-picker.css
+SHA1 6a8d2c690d4729933d3db45cdd0436fdc97624fa plugins/ExtJS/share/web/static/css/extjs/dd.css
+SHA1 1f788fb3485a38907fb11015bc2805fde256772c plugins/ExtJS/share/web/static/css/extjs/debug.css
+SHA1 7b03666a243e7b1ed236ff3ae838828c949756d9 plugins/ExtJS/share/web/static/css/extjs/ext-all.css
+SHA1 446f2550c5ded1283fcbc5841e27444ca75f383b plugins/ExtJS/share/web/static/css/extjs/form.css
+SHA1 712a28a1854691f6998737a9523d3c59390db9f8 plugins/ExtJS/share/web/static/css/extjs/grid.css
+SHA1 0a2805e890d0bf5d2cd15d226f97e70aec0f5d7d plugins/ExtJS/share/web/static/css/extjs/layout.css
+SHA1 ee4cb6f34e1bf8ac1d649acaed4fecb8c5c03641 plugins/ExtJS/share/web/static/css/extjs/menu.css
+SHA1 7f0233fe0fda1d2d3241f0d0c04bc299b98afadb plugins/ExtJS/share/web/static/css/extjs/qtips.css
+SHA1 21b5726f602652b15c15cd854eb5263614bc1e7f plugins/ExtJS/share/web/static/css/extjs/reset-min.css
+SHA1 ef8cc7c41f2003e9c987e76b007451e1c042123c plugins/ExtJS/share/web/static/css/extjs/resizable.css
+SHA1 6211d9892acb545ef83962eb979c0de5efa8c2d8 plugins/ExtJS/share/web/static/css/extjs/tabs.css
+SHA1 1aeffa3fa12a8e7074aa73a4306796beebe064f5 plugins/ExtJS/share/web/static/css/extjs/toolbar.css
+SHA1 38984a451ef6887f3f74307735b1ef2cbf14736e plugins/ExtJS/share/web/static/css/extjs/tree.css
+SHA1 af7ab3c19612b2b7d1e18347f67f3697de7e801c plugins/ExtJS/share/web/static/css/extjs/ytheme-aero.css
+SHA1 586251d6b3b27d865aec4e8899f1fa7a34cc030d plugins/ExtJS/share/web/static/css/extjs/ytheme-gray.css
+SHA1 28a4d83e3439f6591605c543a44af96b22a62aca plugins/ExtJS/share/web/static/css/extjs/ytheme-vista.css
+SHA1 722f821c05eedd73ceb84c04a496ef2fab0ae6d0 plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/aero-close-over.gif
+SHA1 298a73ca768795b49481b5c067966cd31b932aa3 plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/aero-close.gif
+SHA1 2eb77589c44f08ea4613f563715fde0e86c356ba plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-center.gif
+SHA1 878f892fe63f05df71cf1d2d203d087a99816935 plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-left.gif
+SHA1 89979519429742ec3a6ae889fcd5005748567cfc plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-right.gif
+SHA1 78508bc449d3f834c4c1a45d88a97de26ba63d03 plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/close.gif
+SHA1 7e0be477622fbc3c7e50adb1fd898d293ab349d1 plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/collapse-over.gif
+SHA1 70b328ea37e72746b5be2dab02852c2a661890d9 plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/collapse.gif
+SHA1 95a5575847d1b826aad606e0e8f4e675be584f0d plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/e-handle.gif
+SHA1 8d032235ea2cd6803f0c28767607a55ab2fda41a plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/expand-over.gif
+SHA1 40b01d8059d4803cf93a9e15ab526e9bb1e6a136 plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/expand.gif
+SHA1 6f882b664bd421bef833b9b58ff030cd5b13ee31 plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/hd-sprite.gif
+SHA1 9fcea223539a9a2e5f128f4f7b0622202b20b7f7 plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/s-handle.gif
+SHA1 1a481ec7d6151220bffb616e7bf095c1d63f65e7 plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/se-handle.gif
+SHA1 468a6b27c35716cbf688558328652aaeb2600294 plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/w-handle.gif
+SHA1 0b79d2c11d9ef82afd725c337190bf2fc0ecdbed plugins/ExtJS/share/web/static/images/extjs/aero/gradient-bg.gif
+SHA1 5488bbf3ee8a87f3a81e1813841800d162c471f7 plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-blue-split.gif
+SHA1 405cbda624a021dee43f5d967d33df7e2a0c0dec plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-hrow.gif
+SHA1 d27501ba0e05f40637afd3c6f2beeb3200b4ba6e plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-split.gif
+SHA1 c74324b324a276c45b68239b20e033405483db5b plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-vista-hd.gif
+SHA1 d7d593aa0995d1ead5098cc123f4a27dd1a58274 plugins/ExtJS/share/web/static/images/extjs/aero/grid/pspbrwse.jbf
+SHA1 7f94922b69d724d7983c181fd909431fbe6df481 plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort-col-bg.gif
+SHA1 296bb89bfaef25a5189740258b0cd1217daac43b plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort_asc.gif
+SHA1 fe064eee5889f5b47179f9820e89a33785dd3226 plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort_desc.gif
+SHA1 ff856305c4c510a0c760891689e5be286b518e44 plugins/ExtJS/share/web/static/images/extjs/aero/layout/collapse.gif
+SHA1 2ad5d274c19032d93e370319f32dc42e2e46a363 plugins/ExtJS/share/web/static/images/extjs/aero/layout/expand.gif
+SHA1 ef69813d517535adaf5a814d1c3af75999d035e3 plugins/ExtJS/share/web/static/images/extjs/aero/layout/gradient-bg.gif
+SHA1 12bd112fdbc5cace0d53e77c1284f180bf02eba3 plugins/ExtJS/share/web/static/images/extjs/aero/layout/ns-collapse.gif
+SHA1 4ab74cefb173a85a88319cea98947787520545a9 plugins/ExtJS/share/web/static/images/extjs/aero/layout/ns-expand.gif
+SHA1 491c85c0a9eeed1699e9eaa4f6762003e661da22 plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-close.gif
+SHA1 c61ebb55f6fd57c07f383abbd63c744dd9dbf9fe plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-title-bg.gif
+SHA1 293fa9ceefabc2fbbcb841fb0888eab8036a8d1b plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-title-light-bg.gif
+SHA1 9d61565a5eff943a2e459de54e22ab5c37fcc05d plugins/ExtJS/share/web/static/images/extjs/aero/layout/tab-close-on.gif
+SHA1 ec442b424b2c4b1253e30f278df22980734e04af plugins/ExtJS/share/web/static/images/extjs/aero/layout/tab-close.gif
+SHA1 23568c5736706434749b80d47b5eb366654fdba5 plugins/ExtJS/share/web/static/images/extjs/aero/qtip/bg.gif
+SHA1 56d45f8a17f5078a20af9962c992ca4678450765 plugins/ExtJS/share/web/static/images/extjs/aero/s.gif
+SHA1 8fdf6b47fd67f130e5e8629d29cf706f1aea80ea plugins/ExtJS/share/web/static/images/extjs/aero/sizer/e-handle-dark.gif
+SHA1 5e16ea1295ea2d2ac6db43dfc38f0c3f20afed2d plugins/ExtJS/share/web/static/images/extjs/aero/sizer/e-handle.gif
+SHA1 50540363b5af2f9bbd17a3cc3499e39f68352981 plugins/ExtJS/share/web/static/images/extjs/aero/sizer/ne-handle-dark.gif
+SHA1 c0ce8ea31045ba8634d200b4ac845b369a6d2623 plugins/ExtJS/share/web/static/images/extjs/aero/sizer/ne-handle.gif
+SHA1 16dd0ecc9121959508c1cbf5849ff77c84650ece plugins/ExtJS/share/web/static/images/extjs/aero/sizer/nw-handle-dark.gif
+SHA1 abe8f980bc44bc293bffdc3a9dd9c961f0fb9fe9 plugins/ExtJS/share/web/static/images/extjs/aero/sizer/nw-handle.gif
+SHA1 50fd1d402c0948846cd7537b5c518103863a9fad plugins/ExtJS/share/web/static/images/extjs/aero/sizer/s-handle-dark.gif
+SHA1 e8342b01f88fa864c59ba7404f0988740133dc84 plugins/ExtJS/share/web/static/images/extjs/aero/sizer/s-handle.gif
+SHA1 88eb063246be44275c540deb747f4c1bdf9f89c7 plugins/ExtJS/share/web/static/images/extjs/aero/sizer/se-handle-dark.gif
+SHA1 20706bdc544acfc752f9f443abad05f6804b065b plugins/ExtJS/share/web/static/images/extjs/aero/sizer/se-handle.gif
+SHA1 255a6d93f557be475f59e7ee05fe242b00eec5cb plugins/ExtJS/share/web/static/images/extjs/aero/sizer/sw-handle-dark.gif
+SHA1 e01505e9b5672554830678ca8ac99b026d1a6bf0 plugins/ExtJS/share/web/static/images/extjs/aero/sizer/sw-handle.gif
+SHA1 77f193ab1c4cd7831c12f80c07a7a45bc0aece25 plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-inactive-left-bg.gif
+SHA1 7a71c1791cefa45ba0b18703a98cb3cd161373cc plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-inactive-right-bg.gif
+SHA1 787a1b6e799a3e7ed2e067c037170571d5d19a20 plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-left-bg.gif
+SHA1 92a636351ccf251c23372397b589ba7b1ac7ddc1 plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-right-bg.gif
+SHA1 74a5c6c4fa560b6c3c2f8aca7e813404ab108d0b plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-sprite.gif
+SHA1 2decda868adac2c9b596a97bd6e4bea0cc15c05a plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-bg.gif
+SHA1 4e37a3465f9086bdb499bb5c27bf3805848146d3 plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-bg.png
+SHA1 a83f08b232bc764f759b739236656e144ed99410 plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-btm-bg.gif
+SHA1 a7dfe44a83499dcd5894cc2a74ff5706a15d2c8d plugins/ExtJS/share/web/static/images/extjs/aero/toolbar/bg.gif
+SHA1 c10fd56f2102a281c2f2f980ad4450d61f755ae4 plugins/ExtJS/share/web/static/images/extjs/aero/toolbar/tb-btn-sprite.gif
+SHA1 e83a971cfa2f24db9964681499ffa9ae620a1807 plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/btn-arrow.gif
+SHA1 41e800fd5658c58fb9a9e4c52d96e131996ffcaf plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/btn-sprite.gif
+SHA1 048880258d1b16ed111820a8c2a5d603f6f0396b plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/close.gif
+SHA1 ef12ee75d08d364e238c9603ad5bbf5ab753cd46 plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/collapse.gif
+SHA1 c88166931fca03dc33d569bf405f924ae40cf1a0 plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/e-handle.gif
+SHA1 0695b5346e21097e981c6ebce3bf5c215cd1e7c2 plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/expand.gif
+SHA1 6bb19dee3e503856d537c750c76db8fc874fe142 plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/hd-sprite.gif
+SHA1 aa63488c369f42749ed5a06502b293dfaa75ba0e plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/progress.gif
+SHA1 6f5a1c1a665faae326e514c598de62e6f9fb0090 plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/progress2.gif
+SHA1 82ff322025b7ad4cb8896c58d9b496a92439bd70 plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/s-handle.gif
+SHA1 0680315f0850c26cd4402f59a5082e9d2a6673f7 plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/se-handle.gif
+SHA1 f2357c7511bae47f17a02586769afe78cb85522e plugins/ExtJS/share/web/static/images/extjs/default/box/corners-blue.gif
+SHA1 8c4a83d6f0f7b75fb7c8a30821e871d246ba8568 plugins/ExtJS/share/web/static/images/extjs/default/box/corners.gif
+SHA1 4f5bdda24a3e4274b92ff391e5341f7ee328a7d7 plugins/ExtJS/share/web/static/images/extjs/default/box/l-blue.gif
+SHA1 03fe8f5a132948941eaadf3791001c39e03df9e8 plugins/ExtJS/share/web/static/images/extjs/default/box/l.gif
+SHA1 8f0626925774c7861cd55ed76dd5e69594977bbe plugins/ExtJS/share/web/static/images/extjs/default/box/r-blue.gif
+SHA1 422e77206f02745354426d179701cac2d79eb33c plugins/ExtJS/share/web/static/images/extjs/default/box/r.gif
+SHA1 2bb7d59c94e3ec6d3cac83f57206fdfbe9fee7a5 plugins/ExtJS/share/web/static/images/extjs/default/box/tb-blue.gif
+SHA1 1664b2093acfb8b1a840646bae51399bada33c5d plugins/ExtJS/share/web/static/images/extjs/default/box/tb.gif
+SHA1 0fa08cc1fe9e2c7932ab6b41ce8dd16815852af3 plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-add.gif
+SHA1 7202cf00a47a812cc139dcd9d119e00227a9242b plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-no.gif
+SHA1 cc59e44f48eada4150b5c657c928dde8eb624350 plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-yes.gif
+SHA1 479a5a54d8a1daf3f003fe7e96fcf81d6086914c plugins/ExtJS/share/web/static/images/extjs/default/form/date-trigger.gif
+SHA1 0b2ccb38837849fe75ce7cee23843d92522b0956 plugins/ExtJS/share/web/static/images/extjs/default/form/error-tip-corners.gif
+SHA1 075c5e4f814e22e48f563d9c5ed46a84863181a4 plugins/ExtJS/share/web/static/images/extjs/default/form/exclamation.gif
+SHA1 14ce153d393b3c489f8a4e6b9a9383e7d8f4c911 plugins/ExtJS/share/web/static/images/extjs/default/form/text-bg.gif
+SHA1 0c298c9fc7211b3d921120cd7da128cb4765a778 plugins/ExtJS/share/web/static/images/extjs/default/form/trigger.gif
+SHA1 0b79d2c11d9ef82afd725c337190bf2fc0ecdbed plugins/ExtJS/share/web/static/images/extjs/default/gradient-bg.gif
+SHA1 dacbac8995f32560d3c8c4b7bc33ef3d0256ae3f plugins/ExtJS/share/web/static/images/extjs/default/grid/Thumbs.db
+SHA1 ba9a84e01a9e6e08c2ec534c0d0befcd07e4a7e5 plugins/ExtJS/share/web/static/images/extjs/default/grid/arrow-left-white.gif
+SHA1 c0381f6ae0afef110bbaadd51aa5a39200b8b3c7 plugins/ExtJS/share/web/static/images/extjs/default/grid/arrow-right-white.gif
+SHA1 db4d02b2fac8bc3baa82432c0106be2e40e27419 plugins/ExtJS/share/web/static/images/extjs/default/grid/col-move-bottom.gif
+SHA1 60deb1f7ca78aadcb8ed2a825e6b6ba07684a33d plugins/ExtJS/share/web/static/images/extjs/default/grid/col-move-top.gif
+SHA1 ccf202fdeb74fbc829b4309198b473c5f94e437d plugins/ExtJS/share/web/static/images/extjs/default/grid/dirty.gif
+SHA1 cda9d3b74238adb9f1412946297e90eb0b2484f6 plugins/ExtJS/share/web/static/images/extjs/default/grid/done.gif
+SHA1 83767bdb2130a4b3e3371450fa138a4a6ae3f9cc plugins/ExtJS/share/web/static/images/extjs/default/grid/drop-no.gif
+SHA1 c98b6f3b8fb7aad0914fb502bd7a900ce46cb4fb plugins/ExtJS/share/web/static/images/extjs/default/grid/drop-yes.gif
+SHA1 6f3172242ebd53cb8e0ad2e7a42fbae8f063e27a plugins/ExtJS/share/web/static/images/extjs/default/grid/footer-bg.gif
+SHA1 a62484058357624c7c15bc4c63a9e5beb4f9a285 plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-blue-hd.gif
+SHA1 5488bbf3ee8a87f3a81e1813841800d162c471f7 plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-blue-split.gif
+SHA1 4604e3ed860a9ec8e4a3ddc72b7a5751506da57d plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-hrow.gif
+SHA1 e3d3509dd9120fa866a718f57ec681f5018dad4a plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-loading.gif
+SHA1 aa24a1f36b4fe7069ae97bd9c42db5f3310dd7f6 plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-split.gif
+SHA1 c74324b324a276c45b68239b20e033405483db5b plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-vista-hd.gif
+SHA1 a797e5a37285e8a5df5fc155bd86b1bafc2f713a plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-asc.gif
+SHA1 2851aa4e87a0b95d5d7add1b557ba2f625fa0733 plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-desc.gif
+SHA1 1d2ca1c02de35c474a6c12f13ab55c5e1bd076ca plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-lock.gif
+SHA1 f9958b09b1b8ed0e2d11352f8e047d73e2b58223 plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-lock.png
+SHA1 c0c0102a864e3fc0c5d4af336f6b011f90f05957 plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-unlock.gif
+SHA1 a762d375660eb903de307efe0ee2244cfcbdf45e plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-unlock.png
+SHA1 b0c2cc0034a3fda3697b37f0e491b9a8deee54dd plugins/ExtJS/share/web/static/images/extjs/default/grid/invalid_line.gif
+SHA1 942d8fe092c1c473af19906751c2bee5322a9b55 plugins/ExtJS/share/web/static/images/extjs/default/grid/loading.gif
+SHA1 012efd8f96ee4c40499dd2bfca8304df7467216a plugins/ExtJS/share/web/static/images/extjs/default/grid/mso-hd.gif
+SHA1 459ef504a2e662cd46873806abebed988db6b75b plugins/ExtJS/share/web/static/images/extjs/default/grid/nowait.gif
+SHA1 3b776004161d64fd956b49cf83ec235ee458271d plugins/ExtJS/share/web/static/images/extjs/default/grid/page-first-disabled.gif
+SHA1 0806bc00d5eb3948773c20f9809c66f78bb8352b plugins/ExtJS/share/web/static/images/extjs/default/grid/page-first.gif
+SHA1 9b1611918e00eeb2f4ac2d945dfad31109806c7e plugins/ExtJS/share/web/static/images/extjs/default/grid/page-last-disabled.gif
+SHA1 a2a8aef85c948f240b2af7f22ccd844d03ba6765 plugins/ExtJS/share/web/static/images/extjs/default/grid/page-last.gif
+SHA1 7bbb12b24e55cb4974def90dee5f85833b33c963 plugins/ExtJS/share/web/static/images/extjs/default/grid/page-next-disabled.gif
+SHA1 65b77a90ecdf2e922d02a34e9796da07daae6648 plugins/ExtJS/share/web/static/images/extjs/default/grid/page-next.gif
+SHA1 e5609036ae330bc1ec625414f4c4b338624d033e plugins/ExtJS/share/web/static/images/extjs/default/grid/page-prev-disabled.gif
+SHA1 24460a1dc0b3cd69e8093994596a75806236c5a4 plugins/ExtJS/share/web/static/images/extjs/default/grid/page-prev.gif
+SHA1 7746b6f24308b76a08dff00ff9cb66ad3776d90a plugins/ExtJS/share/web/static/images/extjs/default/grid/pick-button.gif
+SHA1 4eb78deade757858f634c683666ec8cd03c1c621 plugins/ExtJS/share/web/static/images/extjs/default/grid/refresh.gif
+SHA1 f004a14bfd0174705db8c906cc07d1526333b659 plugins/ExtJS/share/web/static/images/extjs/default/grid/sort_asc.gif
+SHA1 8320c00b5938b0e35d7d93d7b5777ce5e28870bb plugins/ExtJS/share/web/static/images/extjs/default/grid/sort_desc.gif
+SHA1 6d20137a80a8e1f9d7fe6d5c41fbc06ac98cc914 plugins/ExtJS/share/web/static/images/extjs/default/grid/wait.gif
+SHA1 e3c03133c33fac26e92896504f534120089b41df plugins/ExtJS/share/web/static/images/extjs/default/layout/collapse.gif
+SHA1 5486e515684b5b3a839c765e770a25583ffc4e16 plugins/ExtJS/share/web/static/images/extjs/default/layout/expand.gif
+SHA1 0b79d2c11d9ef82afd725c337190bf2fc0ecdbed plugins/ExtJS/share/web/static/images/extjs/default/layout/gradient-bg.gif
+SHA1 6d2ec8a24c1d559eb27c30e8914b7970344a8c34 plugins/ExtJS/share/web/static/images/extjs/default/layout/ns-collapse.gif
+SHA1 9aea9de63edcd8fada6de9a1121331d8bbc75233 plugins/ExtJS/share/web/static/images/extjs/default/layout/ns-expand.gif
+SHA1 691c4b891370706632e8e72dbe8566d6556f31a6 plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-close.gif
+SHA1 935adb5889ea0082be8f8cd5122b930c957f7c2b plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-title-bg.gif
+SHA1 2b402ce9faaaec89a4f21f24f564bbb3a70daee3 plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-title-light-bg.gif
+SHA1 200ea96a78b8e54f8c42ed5e4dcbc398ffa8a8b5 plugins/ExtJS/share/web/static/images/extjs/default/layout/stick.gif
+SHA1 6a629898a4a47d61baec1d67ac335ba706fb40e8 plugins/ExtJS/share/web/static/images/extjs/default/layout/stuck.gif
+SHA1 673ffac1a25a19b05c37ce4776e38ed03ee9a97e plugins/ExtJS/share/web/static/images/extjs/default/layout/tab-close-on.gif
+SHA1 8b502fb30e8b3be3866789533165a1dfd671cfef plugins/ExtJS/share/web/static/images/extjs/default/layout/tab-close.gif
+SHA1 177624cbe183b44ff0ddfb907cc9d8bc5826491e plugins/ExtJS/share/web/static/images/extjs/default/menu/checked.gif
+SHA1 24522e5bca535a24e9623db71abb5c078834c62f plugins/ExtJS/share/web/static/images/extjs/default/menu/group-checked.gif
+SHA1 ab855c96778a3212858089baacda447759a95292 plugins/ExtJS/share/web/static/images/extjs/default/menu/menu-parent.gif
+SHA1 dd2ce6ac48da733fe7f992cf3845e499516c9a67 plugins/ExtJS/share/web/static/images/extjs/default/menu/menu.gif
+SHA1 d826c591ac66a8e4fccd7d46c9adc7ef89be00b0 plugins/ExtJS/share/web/static/images/extjs/default/menu/unchecked.gif
+SHA1 b2f4d43f704dfe5f157570075293ba719cb9343c plugins/ExtJS/share/web/static/images/extjs/default/qtip/bg.gif
+SHA1 c0b8a69f763736957caf3132410bfe1461c4e953 plugins/ExtJS/share/web/static/images/extjs/default/qtip/close.gif
+SHA1 5ed1849f477fb1ce1cc7878de73f0a038f53eee9 plugins/ExtJS/share/web/static/images/extjs/default/qtip/tip-sprite.gif
+SHA1 56d45f8a17f5078a20af9962c992ca4678450765 plugins/ExtJS/share/web/static/images/extjs/default/s.gif
+SHA1 5c89b09a00ddcd17f3d7a9fe1a880aa04cebeedc plugins/ExtJS/share/web/static/images/extjs/default/shadow-lr.png
+SHA1 9f8e529ab913563a27dd3389fec1dfd072fe0433 plugins/ExtJS/share/web/static/images/extjs/default/shadow.png
+SHA1 6481371769cf6291b4e78e49b16603e3105c93c4 plugins/ExtJS/share/web/static/images/extjs/default/shared/calendar.gif
+SHA1 44d4718df69f48845c61abf1c1450958cf0479f9 plugins/ExtJS/share/web/static/images/extjs/default/shared/left-btn.gif
+SHA1 34fbf9fef3ca8c1d1fd183eb832b5a1bf497bfd5 plugins/ExtJS/share/web/static/images/extjs/default/shared/right-btn.gif
+SHA1 d9067923247942d58c93dbae33dcda4a0c814159 plugins/ExtJS/share/web/static/images/extjs/default/shared/warning.gif
+SHA1 ca4502333928e62174c89fd4121b578dbcec9756 plugins/ExtJS/share/web/static/images/extjs/default/sizer/e-handle-dark.gif
+SHA1 ba378b831eecd704c531a4e6f27289e15e25bd53 plugins/ExtJS/share/web/static/images/extjs/default/sizer/e-handle.gif
+SHA1 aeb5fbaa988900672baf4d38325197212b2fe168 plugins/ExtJS/share/web/static/images/extjs/default/sizer/ne-handle-dark.gif
+SHA1 074eda992155b4411d4d7d1dbde08d678d028248 plugins/ExtJS/share/web/static/images/extjs/default/sizer/ne-handle.gif
+SHA1 29cf4ac5755c1dff0dafbe4bcba08002828a4959 plugins/ExtJS/share/web/static/images/extjs/default/sizer/nw-handle-dark.gif
+SHA1 3d4a99bad6353f7900195142b17f121727e0b79a plugins/ExtJS/share/web/static/images/extjs/default/sizer/nw-handle.gif
+SHA1 a4dc8f677a6abebd7c0c4db0953d062a7bfaf189 plugins/ExtJS/share/web/static/images/extjs/default/sizer/s-handle-dark.gif
+SHA1 4a1da81042b989e387204cd24e703e8485c01374 plugins/ExtJS/share/web/static/images/extjs/default/sizer/s-handle.gif
+SHA1 768e9f6bac34d4af6550d8234ceb37bb4d15f36d plugins/ExtJS/share/web/static/images/extjs/default/sizer/se-handle-dark.gif
+SHA1 23631eb77516b9d80138a4d1beb6776ba7294c07 plugins/ExtJS/share/web/static/images/extjs/default/sizer/se-handle.gif
+SHA1 c0ca58c8df8eddd7a5372bfbd09f484cde78e4b8 plugins/ExtJS/share/web/static/images/extjs/default/sizer/square.gif
+SHA1 dfed4d77852f5f6dd2f3c6bba23bb40b2302396c plugins/ExtJS/share/web/static/images/extjs/default/sizer/sw-handle-dark.gif
+SHA1 74d49e57135117e1681798de9ea49640c0004c31 plugins/ExtJS/share/web/static/images/extjs/default/sizer/sw-handle.gif
+SHA1 d3d040deb0a1e08fe553dc36a6dc75eecc117102 plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-inactive-left-bg.gif
+SHA1 b0c76b3d266a5c809be7516ae4457748f667276c plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-inactive-right-bg.gif
+SHA1 c4cea97deaa0475222e4ea9125ca7bc87b22c3c5 plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-left-bg.gif
+SHA1 090bbea1c4a0a049500069aa9314e9796f038b4c plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-right-bg.gif
+SHA1 fb49e69ce6d9c65840933917e7e957b3e0a52f9b plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-sprite.gif
+SHA1 160e46c26460402904800c4857848711d643429a plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-arrow-light.gif
+SHA1 7ef67fd2481bb3fbee9667d21dc74441871544e3 plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-arrow.gif
+SHA1 e2540d51be724fa077f4fabd9416aebb27926868 plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-over-bg.gif
+SHA1 b58894f8544eb7db29353fd7d5c6a53efca2a0f0 plugins/ExtJS/share/web/static/images/extjs/default/toolbar/gray-bg.gif
+SHA1 95917df9e2d62bb21d7d290576bfdef8fc177d90 plugins/ExtJS/share/web/static/images/extjs/default/toolbar/tb-bg.gif
+SHA1 a019fbf74a4cbe3149e0c7b264c05d65178058f4 plugins/ExtJS/share/web/static/images/extjs/default/toolbar/tb-btn-sprite.gif
+SHA1 0fa08cc1fe9e2c7932ab6b41ce8dd16815852af3 plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-add.gif
+SHA1 5d3d4f3b1d11f277b9fb36b0962d881a2a6dc63b plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-between.gif
+SHA1 fb27f031501ff6cc8d5d12fbd9df526045c87fc7 plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-no.gif
+SHA1 26989c5a898467b5f7187e2734eb33050864f441 plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-over.gif
+SHA1 0a2b0bc935bf653f6b7010eced1e2ca8dbecc799 plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-under.gif
+SHA1 cc59e44f48eada4150b5c657c928dde8eb624350 plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-yes.gif
+SHA1 29c03b23895d652aefe684971367024068e3c942 plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-minus-nl.gif
+SHA1 6a026a1b1457081f5958c9b2c237a6b0638a93f6 plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-minus.gif
+SHA1 82ef2e378481e16a4008bf9f9802817a58acef76 plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-plus-nl.gif
+SHA1 60f1a73ba9d952f5c4823e3206792b14c380b00d plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-plus.gif
+SHA1 335f08289b716d76e423f4f3eeee2503f37ec9cb plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end.gif
+SHA1 c990d8958f8082d701b4250cec7b70aa74265a24 plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-line.gif
+SHA1 29c03b23895d652aefe684971367024068e3c942 plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-minus-nl.gif
+SHA1 34498a6c896f949410b56f58064b0751546b0b3f plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-minus.gif
+SHA1 82ef2e378481e16a4008bf9f9802817a58acef76 plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-plus-nl.gif
+SHA1 7f9332b60e1d7e68b4db26d8d7ce5a6568350794 plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-plus.gif
+SHA1 ce9c66f9c893e72a78964a35be107602c31022d0 plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow.gif
+SHA1 131dca28bedc85d776f58800cf15f5811e3df5cf plugins/ExtJS/share/web/static/images/extjs/default/tree/folder-open.gif
+SHA1 1b3a928787bfa0cba7fa6520f07f978483ba90ea plugins/ExtJS/share/web/static/images/extjs/default/tree/folder.gif
+SHA1 587efd117c281e8a039b9c28c5b8311acb442047 plugins/ExtJS/share/web/static/images/extjs/default/tree/leaf.gif
+SHA1 942d8fe092c1c473af19906751c2bee5322a9b55 plugins/ExtJS/share/web/static/images/extjs/default/tree/loading.gif
+SHA1 56d45f8a17f5078a20af9962c992ca4678450765 plugins/ExtJS/share/web/static/images/extjs/default/tree/s.gif
+SHA1 6095b6b0d99eeb10c9384e9b5e93b15af869251a plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/close.gif
+SHA1 f8a0262ffc92e1e2cb447958ac07fa3509080d0f plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/collapse.gif
+SHA1 0bd62da4853ed04876d69c0be44beab7d4ec90dc plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/dlg-bg.gif
+SHA1 95a5575847d1b826aad606e0e8f4e675be584f0d plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/e-handle.gif
+SHA1 30a8e91dca9e5ef6978b888159921f5c8e823b96 plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/expand.gif
+SHA1 7e3cd770de47c9457ddc789c6b0b2e194d1eb422 plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/hd-sprite.gif
+SHA1 9fcea223539a9a2e5f128f4f7b0622202b20b7f7 plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/s-handle.gif
+SHA1 cad637db3d6c84e65e2edb9976ef0d35fc5f9a6a plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/se-handle.gif
+SHA1 0b79d2c11d9ef82afd725c337190bf2fc0ecdbed plugins/ExtJS/share/web/static/images/extjs/gray/gradient-bg.gif
+SHA1 38c24fefd042141bbd158d4df952c6f6a1e01cab plugins/ExtJS/share/web/static/images/extjs/gray/grid/grid-hrow.gif
+SHA1 4acb5c1d3514b03708936207c41b4edac2470244 plugins/ExtJS/share/web/static/images/extjs/gray/layout/collapse.gif
+SHA1 6f4b5b7723d2fcf49d1338589d43c4bb149450dd plugins/ExtJS/share/web/static/images/extjs/gray/layout/expand.gif
+SHA1 ef69813d517535adaf5a814d1c3af75999d035e3 plugins/ExtJS/share/web/static/images/extjs/gray/layout/gradient-bg.gif
+SHA1 aaa1eb99db602aae777a47861ec4c3139c59e5a7 plugins/ExtJS/share/web/static/images/extjs/gray/layout/ns-collapse.gif
+SHA1 d52a8d75563a083776b5a228a746c92c0d939cc0 plugins/ExtJS/share/web/static/images/extjs/gray/layout/ns-expand.gif
+SHA1 491c85c0a9eeed1699e9eaa4f6762003e661da22 plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-close.gif
+SHA1 935adb5889ea0082be8f8cd5122b930c957f7c2b plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-title-bg.gif
+SHA1 4323dd3c33cb590efde91df1a69c21e73e2a6946 plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-title-light-bg.gif
+SHA1 640f0efc54b4bb893d093bccd936cdc26471367e plugins/ExtJS/share/web/static/images/extjs/gray/layout/stick.gif
+SHA1 9d61565a5eff943a2e459de54e22ab5c37fcc05d plugins/ExtJS/share/web/static/images/extjs/gray/layout/tab-close-on.gif
+SHA1 8b502fb30e8b3be3866789533165a1dfd671cfef plugins/ExtJS/share/web/static/images/extjs/gray/layout/tab-close.gif
+SHA1 177624cbe183b44ff0ddfb907cc9d8bc5826491e plugins/ExtJS/share/web/static/images/extjs/gray/menu/checked.gif
+SHA1 24522e5bca535a24e9623db71abb5c078834c62f plugins/ExtJS/share/web/static/images/extjs/gray/menu/group-checked.gif
+SHA1 116cfb20815432217f1e9f6e4b72a5f37c342061 plugins/ExtJS/share/web/static/images/extjs/gray/menu/menu-parent.gif
+SHA1 0f804d96fafe4fa0c3f93355e7c8b1be3c3efbe0 plugins/ExtJS/share/web/static/images/extjs/gray/menu/menu.gif
+SHA1 d826c591ac66a8e4fccd7d46c9adc7ef89be00b0 plugins/ExtJS/share/web/static/images/extjs/gray/menu/unchecked.gif
+SHA1 23568c5736706434749b80d47b5eb366654fdba5 plugins/ExtJS/share/web/static/images/extjs/gray/qtip/bg.gif
+SHA1 83b276fdede6e24ec5bc7fb3246a2f97fcbcc8ce plugins/ExtJS/share/web/static/images/extjs/gray/qtip/tip-sprite.gif
+SHA1 56d45f8a17f5078a20af9962c992ca4678450765 plugins/ExtJS/share/web/static/images/extjs/gray/s.gif
+SHA1 8fdf6b47fd67f130e5e8629d29cf706f1aea80ea plugins/ExtJS/share/web/static/images/extjs/gray/sizer/e-handle-dark.gif
+SHA1 5e16ea1295ea2d2ac6db43dfc38f0c3f20afed2d plugins/ExtJS/share/web/static/images/extjs/gray/sizer/e-handle.gif
+SHA1 50540363b5af2f9bbd17a3cc3499e39f68352981 plugins/ExtJS/share/web/static/images/extjs/gray/sizer/ne-handle-dark.gif
+SHA1 c0ce8ea31045ba8634d200b4ac845b369a6d2623 plugins/ExtJS/share/web/static/images/extjs/gray/sizer/ne-handle.gif
+SHA1 16dd0ecc9121959508c1cbf5849ff77c84650ece plugins/ExtJS/share/web/static/images/extjs/gray/sizer/nw-handle-dark.gif
+SHA1 abe8f980bc44bc293bffdc3a9dd9c961f0fb9fe9 plugins/ExtJS/share/web/static/images/extjs/gray/sizer/nw-handle.gif
+SHA1 50fd1d402c0948846cd7537b5c518103863a9fad plugins/ExtJS/share/web/static/images/extjs/gray/sizer/s-handle-dark.gif
+SHA1 e8342b01f88fa864c59ba7404f0988740133dc84 plugins/ExtJS/share/web/static/images/extjs/gray/sizer/s-handle.gif
+SHA1 88eb063246be44275c540deb747f4c1bdf9f89c7 plugins/ExtJS/share/web/static/images/extjs/gray/sizer/se-handle-dark.gif
+SHA1 20706bdc544acfc752f9f443abad05f6804b065b plugins/ExtJS/share/web/static/images/extjs/gray/sizer/se-handle.gif
+SHA1 255a6d93f557be475f59e7ee05fe242b00eec5cb plugins/ExtJS/share/web/static/images/extjs/gray/sizer/sw-handle-dark.gif
+SHA1 e01505e9b5672554830678ca8ac99b026d1a6bf0 plugins/ExtJS/share/web/static/images/extjs/gray/sizer/sw-handle.gif
+SHA1 71ed43edaa10f1de36f66ba1ccab598eb1367bdd plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-inactive-left-bg.gif
+SHA1 7ac9f4da122eeb3ed839f9011b6a7f8ca6b3b63b plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-inactive-right-bg.gif
+SHA1 9a8887a20650d46729a4367d65d1f151a24d9059 plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-left-bg.gif
+SHA1 154e5236085e0742b62b1314aa4798d63662ad07 plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-right-bg.gif
+SHA1 6ffd462ff5ffec4305484a40c45d05b06a3d4c1a plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-sprite.gif
+SHA1 b58894f8544eb7db29353fd7d5c6a53efca2a0f0 plugins/ExtJS/share/web/static/images/extjs/gray/toolbar/gray-bg.gif
+SHA1 39ff4711989df83ae826188e2c8f61864069edf5 plugins/ExtJS/share/web/static/images/extjs/gray/toolbar/tb-btn-sprite.gif
+SHA1 ff82b2653be183c6b138d9e360e2e32306d8e3fb plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-center.gif
+SHA1 50bc7d2ece8c990b7939688ab0c691331e30541c plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-left.gif
+SHA1 b999604b6269a42bae0ba7875503d514f5a200b2 plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-right.gif
+SHA1 78508bc449d3f834c4c1a45d88a97de26ba63d03 plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/close.gif
+SHA1 8abbb2dd5c6d73de107f8b28cfc870d6e41ae90c plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/collapse.gif
+SHA1 0bd62da4853ed04876d69c0be44beab7d4ec90dc plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/dlg-bg.gif
+SHA1 95a5575847d1b826aad606e0e8f4e675be584f0d plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/e-handle.gif
+SHA1 fee3a806e21d5ba09082ea07972768ecbd2c14d5 plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/expand.gif
+SHA1 0b7eb14d7e6bd0a5caeca065eed4d03324ba8363 plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/hd-sprite.gif
+SHA1 9fcea223539a9a2e5f128f4f7b0622202b20b7f7 plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/s-handle.gif
+SHA1 cad637db3d6c84e65e2edb9976ef0d35fc5f9a6a plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/se-handle.gif
+SHA1 468a6b27c35716cbf688558328652aaeb2600294 plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/w-handle.gif
+SHA1 0b79d2c11d9ef82afd725c337190bf2fc0ecdbed plugins/ExtJS/share/web/static/images/extjs/vista/gradient-bg.gif
+SHA1 aa24a1f36b4fe7069ae97bd9c42db5f3310dd7f6 plugins/ExtJS/share/web/static/images/extjs/vista/grid/grid-split.gif
+SHA1 c74324b324a276c45b68239b20e033405483db5b plugins/ExtJS/share/web/static/images/extjs/vista/grid/grid-vista-hd.gif
+SHA1 ff856305c4c510a0c760891689e5be286b518e44 plugins/ExtJS/share/web/static/images/extjs/vista/layout/collapse.gif
+SHA1 2ad5d274c19032d93e370319f32dc42e2e46a363 plugins/ExtJS/share/web/static/images/extjs/vista/layout/expand.gif
+SHA1 ef69813d517535adaf5a814d1c3af75999d035e3 plugins/ExtJS/share/web/static/images/extjs/vista/layout/gradient-bg.gif
+SHA1 12bd112fdbc5cace0d53e77c1284f180bf02eba3 plugins/ExtJS/share/web/static/images/extjs/vista/layout/ns-collapse.gif
+SHA1 4ab74cefb173a85a88319cea98947787520545a9 plugins/ExtJS/share/web/static/images/extjs/vista/layout/ns-expand.gif
+SHA1 491c85c0a9eeed1699e9eaa4f6762003e661da22 plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-close.gif
+SHA1 53a4ce82ec874b935255b10e9d0e6bc6de11d27a plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-title-bg.gif
+SHA1 2687d6b96b953056de987c0d0a152704de145def plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-title-light-bg.gif
+SHA1 f153a582cff1bbc2cd401799ca8c6464a7f6a4a2 plugins/ExtJS/share/web/static/images/extjs/vista/layout/stick.gif
+SHA1 9d61565a5eff943a2e459de54e22ab5c37fcc05d plugins/ExtJS/share/web/static/images/extjs/vista/layout/tab-close-on.gif
+SHA1 ec442b424b2c4b1253e30f278df22980734e04af plugins/ExtJS/share/web/static/images/extjs/vista/layout/tab-close.gif
+SHA1 23568c5736706434749b80d47b5eb366654fdba5 plugins/ExtJS/share/web/static/images/extjs/vista/qtip/bg.gif
+SHA1 f40799ea96594237934917636548dbd9ff9b4f36 plugins/ExtJS/share/web/static/images/extjs/vista/qtip/tip-sprite.gif
+SHA1 56d45f8a17f5078a20af9962c992ca4678450765 plugins/ExtJS/share/web/static/images/extjs/vista/s.gif
+SHA1 8fdf6b47fd67f130e5e8629d29cf706f1aea80ea plugins/ExtJS/share/web/static/images/extjs/vista/sizer/e-handle-dark.gif
+SHA1 5e16ea1295ea2d2ac6db43dfc38f0c3f20afed2d plugins/ExtJS/share/web/static/images/extjs/vista/sizer/e-handle.gif
+SHA1 50540363b5af2f9bbd17a3cc3499e39f68352981 plugins/ExtJS/share/web/static/images/extjs/vista/sizer/ne-handle-dark.gif
+SHA1 c0ce8ea31045ba8634d200b4ac845b369a6d2623 plugins/ExtJS/share/web/static/images/extjs/vista/sizer/ne-handle.gif
+SHA1 16dd0ecc9121959508c1cbf5849ff77c84650ece plugins/ExtJS/share/web/static/images/extjs/vista/sizer/nw-handle-dark.gif
+SHA1 abe8f980bc44bc293bffdc3a9dd9c961f0fb9fe9 plugins/ExtJS/share/web/static/images/extjs/vista/sizer/nw-handle.gif
+SHA1 50fd1d402c0948846cd7537b5c518103863a9fad plugins/ExtJS/share/web/static/images/extjs/vista/sizer/s-handle-dark.gif
+SHA1 e8342b01f88fa864c59ba7404f0988740133dc84 plugins/ExtJS/share/web/static/images/extjs/vista/sizer/s-handle.gif
+SHA1 88eb063246be44275c540deb747f4c1bdf9f89c7 plugins/ExtJS/share/web/static/images/extjs/vista/sizer/se-handle-dark.gif
+SHA1 20706bdc544acfc752f9f443abad05f6804b065b plugins/ExtJS/share/web/static/images/extjs/vista/sizer/se-handle.gif
+SHA1 255a6d93f557be475f59e7ee05fe242b00eec5cb plugins/ExtJS/share/web/static/images/extjs/vista/sizer/sw-handle-dark.gif
+SHA1 e01505e9b5672554830678ca8ac99b026d1a6bf0 plugins/ExtJS/share/web/static/images/extjs/vista/sizer/sw-handle.gif
+SHA1 31113cd3e4fed3752deda2fe43885385c0d8b778 plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-inactive-left-bg.gif
+SHA1 7ec7eb67346e284eb49f081a46c3c4de7c56d520 plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-inactive-right-bg.gif
+SHA1 925666fac553b59975c238be26991be98a4a92a8 plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-left-bg.gif
+SHA1 92492dfd42db139aa6ac6bb287dcbd7067e64a34 plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-right-bg.gif
+SHA1 993ece72ab69108dc54fa30548e9729ddd29ca36 plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-sprite.gif
+SHA1 7dd1f119b402d87f1cb6c7fcac09165cc94590cd plugins/ExtJS/share/web/static/images/extjs/vista/toolbar/gray-bg.gif
+SHA1 a22aa021b83471d41cb8f26d33574a7f610d6afd plugins/ExtJS/share/web/static/images/extjs/vista/toolbar/tb-btn-sprite.gif
+SHA1 ae3242c7e7a096f9341ddcf18bd19f4565f82308 plugins/ExtJS/share/web/static/js/extjs/adapter/jquery/ext-jquery-adapter.js
+SHA1 2acec15f4f0c74cacebddae150e8018f10ee6f86 plugins/ExtJS/share/web/static/js/extjs/adapter/prototype/ext-prototype-adapter.js
+SHA1 0e7c77ed98646e13d684e9f4cb8ca8b74fc782a9 plugins/ExtJS/share/web/static/js/extjs/adapter/yui/ext-yui-adapter.js
+SHA1 4d5796abb09cb659035954de0ad0e029f6359eb9 plugins/ExtJS/share/web/static/js/extjs/adapter/yui/yui-utilities.js
+SHA1 00c72717f30c8bf1a4adb52a635209aa76dd45c3 plugins/ExtJS/share/web/static/js/extjs/ext-all.js
+SHA1 4cfbc394ede98c19b24aaef037a37386e3215313 plugins/ExtJS/share/web/static/js/extjs/ext-config.js
 SHA1 6d36892393c5848ca54991272c03460b330734d2 plugins/LetMe/Makefile.PL
 SHA1 88f5ed45b2c506fcab80f178cf4cedd23a62f365 plugins/LetMe/lib/Jifty/Plugin/LetMe.pm
 SHA1 aae4870db361c1076fd151ddd0cf2fd3f02f4813 plugins/LetMe/lib/Jifty/Plugin/LetMe/Dispatcher.pm
 SHA1 5ece7af558c3a7bc83f535e948b7a6b24372daec plugins/Login/MANIFEST
 SHA1 4439300be4c8a1b99726658ceed25674216a079e plugins/Login/META.yml
 SHA1 5d7bbe469fc6a8e0c5f303539c1d235f7c4f50a2 plugins/Login/Makefile.PL
-SHA1 4c552f502b762c8e1a12848423a36ddff99bd38b plugins/Login/debian/changelog
+SHA1 1951523a33e3f0b137db99e76c64c755efcf99d5 plugins/Login/debian/changelog
 SHA1 9c6b057a2b9d96a4067a749ee3b3b0158d390cf1 plugins/Login/debian/compat
 SHA1 90e2e662014841fff93a7e346908f66178dfcc07 plugins/Login/debian/control
-SHA1 df2b684174a5e8bdf6d14b985020057702b4c884 plugins/Login/debian/rules
+SHA1 68dfa9d87a39ca9c6480d8a93e7efb18565b4db3 plugins/Login/debian/rules
 SHA1 017bedfcba1e0c72b36301e6ef21b8712b84d175 plugins/Login/inc/Module/Install.pm
 SHA1 b1a70869c098ba602151631386fc510b5bfd3511 plugins/Login/inc/Module/Install/Base.pm
 SHA1 dd7313db23119d49ae78593bfa576554fb5b0fd8 plugins/Login/inc/Module/Install/Can.pm
@@ -356,10 +755,10 @@
 SHA1 122c7769c6ba202aa4e791f9f34972e58fc1fcd2 plugins/Login/lib/Jifty/Plugin/Login/Action/ResetLostPassword.pm
 SHA1 c2438302917e04b15f940d12452a3d07328ba95d plugins/Login/lib/Jifty/Plugin/Login/Action/SendAccountConfirmation.pm
 SHA1 e238cc4ec479aefb8864ca99984cdea4c76141cf plugins/Login/lib/Jifty/Plugin/Login/Action/SendPasswordReminder.pm
-SHA1 6a41bfe4d8c024874b16f4c8f01d5d16fb77fcd3 plugins/Login/lib/Jifty/Plugin/Login/Action/Signup.pm
+SHA1 9c668df7d6e4453fe5815548aa977e3c2803f21a plugins/Login/lib/Jifty/Plugin/Login/Action/Signup.pm
 SHA1 81875f6ab2d807bfe4671af084b4f238d383464c plugins/Login/lib/Jifty/Plugin/Login/CurrentUser.pm
 SHA1 525f9e063afd64961982b513c5eab0a85909c917 plugins/Login/lib/Jifty/Plugin/Login/Dispatcher.pm
-SHA1 26715ae2299b714b2eeaad1b0d9d709623c2b05d plugins/Login/lib/Jifty/Plugin/Login/Model/User.pm
+SHA1 5f90d761bd912c6baabc81174c2f459fba7a21b3 plugins/Login/lib/Jifty/Plugin/Login/Model/User.pm
 SHA1 3a8233f78d474c2671121f87c7e20bc01ba3090a plugins/Login/lib/Jifty/Plugin/Login/Notification/ConfirmAddress.pm
 SHA1 dd2d89075e1d29eb0e20cfc43fba7db98ef02529 plugins/Login/lib/Jifty/Plugin/Login/Notification/ConfirmLostPassword.pm
 SHA1 c67dcd72acc2f4e5b43863c7480697cc711b5e57 plugins/Login/share/po/en.po
@@ -382,33 +781,63 @@
 SHA1 62229286e03ec35c922c8a7f9f3bb68412a78a55 share/dtd/xhtml-special.ent
 SHA1 e7749f99989ec8a9608f6cfbd41a5e5dddc18aec share/dtd/xhtml-symbol.ent
 SHA1 b4a6d708f6b55a48526e9483c718f2ed820df75c share/dtd/xhtml1-strict.dtd
-SHA1 ddc3a6849e3db2ff2c5e1113a36d6e9869718dc4 share/po/en.po
-SHA1 a2f3d82acc9d343569eb0bc53a1517650c446189 share/po/fr.po
-SHA1 44b99ffe0fd8b2410b3ea5c988ebc61f07d30a38 share/po/ja.po
-SHA1 434c54b1132635916b8f6c70227685661593615d share/po/zh_cn.po
-SHA1 55bf7ecd5ef87fe38e5e3c6d6a0df3b7d8041994 share/po/zh_tw.po
+SHA1 5cfcf2d84b5548b2990efa52e51d3f15a47816b4 share/plugins/Jifty/Plugin/AdminUI/web/templates/__jifty/admin/_elements/nav
+SHA1 6a096f8d324464e6ad6407442faf7b2af0ecdc7e share/plugins/Jifty/Plugin/AdminUI/web/templates/__jifty/admin/action/dhandler
+SHA1 1b55e3945405d09df59f0a40182f06f8f59a2e97 share/plugins/Jifty/Plugin/AdminUI/web/templates/__jifty/admin/autohandler
+SHA1 51eb5ec4ebe6ad25eac8461c132193ded8ca2640 share/plugins/Jifty/Plugin/AdminUI/web/templates/__jifty/admin/fragments/list/header
+SHA1 80a5f7d081589dba73766f86a79145e997500655 share/plugins/Jifty/Plugin/AdminUI/web/templates/__jifty/admin/fragments/list/list
+SHA1 a73b777585f562210eccba19f007e2ac89b428c4 share/plugins/Jifty/Plugin/AdminUI/web/templates/__jifty/admin/fragments/list/new_item
+SHA1 ed176f653007f8a08e88355bfd68e1b0fc645723 share/plugins/Jifty/Plugin/AdminUI/web/templates/__jifty/admin/fragments/list/search
+SHA1 a118ac016c645629ed720d9626b36266089eee58 share/plugins/Jifty/Plugin/AdminUI/web/templates/__jifty/admin/fragments/list/update
+SHA1 9d339e7acebf3e929b15c1d8b4642ecbddf7f4b6 share/plugins/Jifty/Plugin/AdminUI/web/templates/__jifty/admin/fragments/list/view
+SHA1 559940ee5c2e5b56f3a438f377ea110018e20b18 share/plugins/Jifty/Plugin/AdminUI/web/templates/__jifty/admin/index.html
+SHA1 99ce3e69e2201664a1363ca2535dcc51a64a1f92 share/plugins/Jifty/Plugin/AdminUI/web/templates/__jifty/admin/model/dhandler
+SHA1 7efa4f24d875a19035963c3955f2fc4e613b8cfe share/plugins/Jifty/Plugin/OnlineDocs/web/templates/__jifty/online_docs/autohandler
+SHA1 608c393b35a8884b4d32a4c855bbcc73478dc849 share/plugins/Jifty/Plugin/OnlineDocs/web/templates/__jifty/online_docs/content.html
+SHA1 58a4059cc383f792108986d2386a5e7edc81363f share/plugins/Jifty/Plugin/OnlineDocs/web/templates/__jifty/online_docs/index.html
+SHA1 37555dd5c3acfbaecfc28416e0fa21b0aa6e1d77 share/plugins/Jifty/Plugin/OnlineDocs/web/templates/__jifty/online_docs/toc.html
+SHA1 0da91e5da11aa851363d08a8f9aeade85f72aeb7 share/po/en.po
+SHA1 63a333ff328933df4082e868ba9115b3c0fa24bd share/po/fr.po
+SHA1 88408a7350d0599fd4e7cd7f709fd918b55b6b27 share/po/ja.po
+SHA1 94151e35cbd50a82e09f33718dad3f15fdb0416f share/po/zh_cn.po
+SHA1 623dbb738a8db1e79de6127fc3af2c918d2c93e6 share/po/zh_tw.po
 SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 share/web/static/css/app-base.css
 SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 share/web/static/css/app.css
 SHA1 c566d7ab5005e82dcf2f90809ae757e07d338138 share/web/static/css/autocomplete.css
 SHA1 5f569fc23eb815ee6f6d086aa6df87f6c38952d3 share/web/static/css/autohandler
-SHA1 c8f7207fab0b74a53a2a798bcedd2f9d94ecc32e share/web/static/css/base.css
+SHA1 98bd4a5fc5cdcf84794d85da8e6a91f13df875cc share/web/static/css/base.css
 SHA1 669f07ab36d148383013733d8230d49e7e7b25ec share/web/static/css/calendar.css
 SHA1 bf48b6bda86f359b95b29a7c3451a3c1b5721385 share/web/static/css/combobox.css
 SHA1 6b4d4cbc063731dabe50356a3560eae6a9f25aef share/web/static/css/context-menus.css
-SHA1 9da37a3dea2259252e33e0cd72198baa04d17530 share/web/static/css/forms.css
+SHA1 4cb352032878df021a9f42e5e6288a00beb259f6 share/web/static/css/forms.css
 SHA1 52ddd83ee7c511d78537454a097f0264a7db3c1c share/web/static/css/halos.css
 SHA1 c7eede0c22f68e4417748bb0903b48195648f4c0 share/web/static/css/keybindings.css
-SHA1 91cd2873a5521bbc172389d8af2c29f33578fcc9 share/web/static/css/main.css
+SHA1 a67bd8704c0c8e8866e01de8a98feb9788b853bd share/web/static/css/main.css
 SHA1 903069dae3de35d6a3226b8272ff317b8eebd58c share/web/static/css/nav.css
 SHA1 45861338bc40888737738521a44d4adf286b1204 share/web/static/css/notices.css
-SHA1 4389605ead1cf3e51a96f69d700ca70b3be6ca32 share/web/static/css/yui/calendar/calendar.css
-SHA1 b8074785c5372a76038c88feed271f1dd839b561 share/web/static/css/yui/tabview/border_tabs.css
-SHA1 2008bf0af63ee36885dd8bbc5fb134bc09b58135 share/web/static/css/yui/tabview/tabs.css
+SHA1 6af7922df30a9bcbba91de135280f35020c3de75 share/web/static/css/yui/calendar/calendar.css
+SHA1 c38a3f0ee9c3177b3b57c8a12259583937596252 share/web/static/css/yui/menu/map.gif
+SHA1 454d5a1fc8a75cfdfda8da84fcdb3ad61bc28ecf share/web/static/css/yui/menu/menu.css
+SHA1 fdb3816246f3a83ea855647ac7522b0fd81fc0f0 share/web/static/css/yui/menu/menuarodwn8_dim_1.gif
+SHA1 e5a3092b0e537c55f6d51fa4a205be40f991c27c share/web/static/css/yui/menu/menuarodwn8_hov_1.gif
+SHA1 49ce21aef759cf5c5c845db503da90be12061f47 share/web/static/css/yui/menu/menuarodwn8_nrm_1.gif
+SHA1 5cd80daf67d57e4ded027501824953e9e1c28c24 share/web/static/css/yui/menu/menuarorght8_dim_1.gif
+SHA1 a5384dbfde3bf5fd601e864a1a3a73f449b84796 share/web/static/css/yui/menu/menuarorght8_hov_1.gif
+SHA1 7946437245912ed7b12586fb9ae304cb34fb2e0a share/web/static/css/yui/menu/menuarorght8_nrm_1.gif
+SHA1 00f9004f9b673c61e0be4017ef4f4fe07d3ad8ba share/web/static/css/yui/menu/menuaroup8_dim_1.gif
+SHA1 88249494fd9e0a44b1f4ec690bb43765bbdddc9c share/web/static/css/yui/menu/menuaroup8_nrm_1.gif
+SHA1 babea44b546e05e156f0808b54e813c6ed611df6 share/web/static/css/yui/menu/menuchk8_dim_1.gif
+SHA1 595dcc3d40dba222b2126d4bda8aa58c655f3eeb share/web/static/css/yui/menu/menuchk8_hov_1.gif
+SHA1 bdbf9997513356f1f4177bc9136f95070a817557 share/web/static/css/yui/menu/menuchk8_nrm_1.gif
+SHA1 e94bf097120743a57f5ab76c35572ce40d354a3f share/web/static/css/yui/tabview/border_tabs.css
+SHA1 ea3e3690200169f41bf24679a3569ad31d664980 share/web/static/css/yui/tabview/tabs.css
+SHA1 4a07b35df98279d126d06236308c29a7bfa69d42 share/web/static/css/yui/tabview/tabview.css
 SHA1 2f28dd2d59fe5486abce194e6fe68da0e49b1084 share/web/static/favicon.ico
 SHA1 6197eb13b4254f77f16833e1a9a8640e939d574c share/web/static/images/css/bullet_arrow_down.png
 SHA1 fdab0053425ba609387dffb0e2529a8feacc3906 share/web/static/images/css/bullet_arrow_up.png
 SHA1 3410d5156716e13443770cce0f3384eacfdb5adb share/web/static/images/css/fieldbg-autocomplete.gif
 SHA1 97c94d7dfb0683f9d2ac7f9406ca36495fa638e0 share/web/static/images/css/fieldbg.gif
+SHA1 a1fdee122b95748d81cee426d717c05b5174fe96 share/web/static/images/iepngfix/blank.gif
 SHA1 67f41db40d62b81d71cb60c542695e0d7e6d393d share/web/static/images/pony.jpg
 SHA1 6197eb13b4254f77f16833e1a9a8640e939d574c share/web/static/images/silk/bullet_arrow_down.png
 SHA1 fdab0053425ba609387dffb0e2529a8feacc3906 share/web/static/images/silk/bullet_arrow_up.png
@@ -425,24 +854,25 @@
 SHA1 eb756c931be8ef70fc27ba0046375f32022e3b6d share/web/static/js/app.js
 SHA1 716b6f8326bd5cd05c31e521351197b5038e052e share/web/static/js/app_behaviour.js
 SHA1 2b28f63068ff486e7fd7937f725f47e886d01831 share/web/static/js/behaviour.js
-SHA1 aa6192ac38a0c708ea0efb60bb98c666d9687423 share/web/static/js/bps_util.js
-SHA1 6b09c590f5e94b238fd99031e6b57ec57e70bd3f share/web/static/js/calendar.js
+SHA1 47cd1a7e3c41b4032cc1712f12b8564cdac12d37 share/web/static/js/bps_util.js
+SHA1 c5fe967d89bc082af093d1ea4eaa2ef3cbfa4e79 share/web/static/js/calendar.js
 SHA1 e9f9931abe8ddf86cf5cfddd1f0e963bb5bf0ccb share/web/static/js/combobox.js
 SHA1 cd5a80e098d28f7cf0b74cee38f08bd336ccdc95 share/web/static/js/context_menu.js
 SHA1 b03b1f06f9c972cfb083c3d87b3dc74e4d85bf77 share/web/static/js/css_browser_selector.js
-SHA1 a90d3ffbc606979282dba3296599f582715021ab share/web/static/js/cssquery/cssQuery-level2.js
-SHA1 ba5ff2e1484476981ccf311ff8fe0062a9b2ac01 share/web/static/js/cssquery/cssQuery-level3.js
+SHA1 efa1e9f561fb31ec520e32e7d623e8e41afb7dfc share/web/static/js/cssquery/cssQuery-level2.js
+SHA1 37cfa3bfdb37450d3a89a88387c4e04baefff271 share/web/static/js/cssquery/cssQuery-level3.js
 SHA1 a80e117cfca6644bde2bb8bd8d48a093e784a731 share/web/static/js/cssquery/cssQuery-standard.js
 SHA1 95408c5aa294bdbc7b857d35772c1bd888b87b33 share/web/static/js/cssquery/cssQuery.js
-SHA1 d542a217ef9c527340d25bfffbccce27927d1259 share/web/static/js/dom-drag.js
+SHA1 e72565db2119b617c9ca0af948956a399caa5720 share/web/static/js/dom-drag.js
 SHA1 4553f3cb184b09228ed4362898e9d30200a2a585 share/web/static/js/formatDate.js
 SHA1 a1d2c6292d656c275383b97aad6ca913b8a1b031 share/web/static/js/halo.js
-SHA1 44bac00f46d4e6809892fc03c42487bd275be71e share/web/static/js/jifty.js
+SHA1 08b20563e958e72c3e8a221d91614c412bdd068b share/web/static/js/iepngfix.htc
+SHA1 8160deda9af812be79ea1f8a30d8cf8d67055777 share/web/static/js/jifty.js
 SHA1 29fe34f11192976f1a388562188b1eb9af7f4497 share/web/static/js/jifty_smoothscroll.js
 SHA1 8723bf251531e79ab109ea0d3fb2187a8dac8cb6 share/web/static/js/jifty_subs.js
-SHA1 2fd261c3c30a0b17e02e6af79d7c7c587dfe2f2a share/web/static/js/jifty_utils.js
-SHA1 d6c17ef3717315c08659082144a2caf2e970b23d share/web/static/js/jsTrace.js
-SHA1 2d8acba4acfd5508381461ccabe954c2e9df086c share/web/static/js/jsan/DOM/Events.js
+SHA1 1a4ccf6b5d376984d91c439e1642bd2b7fb11115 share/web/static/js/jifty_utils.js
+SHA1 49478568d1f258c9d061faa30c2181fd999b07f0 share/web/static/js/jsTrace.js
+SHA1 3b3493afbf46fc8afba58f541e338836bedbdd0b share/web/static/js/jsan/DOM/Events.js
 SHA1 36b2a3f1966b97fcc338b557830106bf2d490485 share/web/static/js/jsan/JSAN.js
 SHA1 679d9c011aa8403cfc0ba945a9143c2e9cacccfa share/web/static/js/jsan/Push.js
 SHA1 4d3474847360cb00edc1ae4745ea6b56a7ec1a2b share/web/static/js/jsan/Upgrade.js
@@ -460,26 +890,16 @@
 SHA1 cc2e31820eed69ae87b1b2befa50e8c4a8519342 share/web/static/js/scriptaculous/slider.js
 SHA1 6b42a40cac7d45f9fd6665e18c4e494704eff9e3 share/web/static/js/scriptaculous/unittest.js
 SHA1 f254696f59ab11c2373c79ba0e6f303d8ac4f71e share/web/static/js/setup_jsan.js
-SHA1 9872547d7c43a3ddb3280fe4e022912b06d59239 share/web/static/js/yui/calendar.js
-SHA1 b378c19c0bbde98f1c7873ca61bb749a63159235 share/web/static/js/yui/container.js
-SHA1 7ddb98d87fa5e228e19c0ce9da2c8d14c8fb8be1 share/web/static/js/yui/dom.js
-SHA1 cb5c1c0e7e8803c95c2f0e313bbeb5a3431f1fba share/web/static/js/yui/event.js
-SHA1 2d81827326f37e25ba95c248498096759f3433c5 share/web/static/js/yui/tabview.js
-SHA1 71c27fdb9e3d24f628a820638ff529098cdd7821 share/web/static/js/yui/yahoo.js
+SHA1 4f45c2546592411e46e149a73d347e176d0c7ad6 share/web/static/js/yui/calendar.js
+SHA1 4d8516305e94d483884ebdfca238d5ea51d0998c share/web/static/js/yui/container.js
+SHA1 dcffe77f6896444b0d71fcb1e8be0ad559256a3e share/web/static/js/yui/dom.js
+SHA1 7b3e21d1cab9fd5da64911838295429d16415797 share/web/static/js/yui/element-beta.js
+SHA1 96f4c1ab0670c62a11e1be261dce68f33064bd67 share/web/static/js/yui/event.js
+SHA1 bfe29fd94ccc2d6b6c008245b3a4ce3f8ed651f2 share/web/static/js/yui/menu.js
+SHA1 ae99956060eb7a5a7b8b0856cd1013a3ef5b0189 share/web/static/js/yui/tabview.js
+SHA1 d246ffa31cb6ef0218be0cbec5fd0ba8438ef6cc share/web/static/js/yui/yahoo.js
 SHA1 05359f0e32b4bebd965707788228704167689d3c share/web/templates/=/subs
-SHA1 5cfcf2d84b5548b2990efa52e51d3f15a47816b4 share/web/templates/__jifty/admin/_elements/nav
-SHA1 6a096f8d324464e6ad6407442faf7b2af0ecdc7e share/web/templates/__jifty/admin/action/dhandler
-SHA1 1b55e3945405d09df59f0a40182f06f8f59a2e97 share/web/templates/__jifty/admin/autohandler
-SHA1 51eb5ec4ebe6ad25eac8461c132193ded8ca2640 share/web/templates/__jifty/admin/fragments/list/header
-SHA1 80a5f7d081589dba73766f86a79145e997500655 share/web/templates/__jifty/admin/fragments/list/list
-SHA1 a73b777585f562210eccba19f007e2ac89b428c4 share/web/templates/__jifty/admin/fragments/list/new_item
-SHA1 ed176f653007f8a08e88355bfd68e1b0fc645723 share/web/templates/__jifty/admin/fragments/list/search
-SHA1 a118ac016c645629ed720d9626b36266089eee58 share/web/templates/__jifty/admin/fragments/list/update
-SHA1 9d339e7acebf3e929b15c1d8b4642ecbddf7f4b6 share/web/templates/__jifty/admin/fragments/list/view
-SHA1 559940ee5c2e5b56f3a438f377ea110018e20b18 share/web/templates/__jifty/admin/index.html
-SHA1 b0ceaf320862d14064c55a17f72e91024690371d share/web/templates/__jifty/admin/model/dhandler
 SHA1 bdaeeff0c2522a8509d4da45be703d1e8cf5c96c share/web/templates/__jifty/autocomplete.xml
-SHA1 bfeb6c28df0bc0c78119c9ff90f8051e5f6adcc2 share/web/templates/__jifty/css/dhandler
 SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 share/web/templates/__jifty/empty
 SHA1 f85d8cae8a2df3ee51b868a744a9e9af21925e0c share/web/templates/__jifty/error/_elements/error_text
 SHA1 e2d761b0b92f818eb2bbb91a15cef0a2471d2245 share/web/templates/__jifty/error/_elements/wrapper
@@ -487,20 +907,15 @@
 SHA1 0cf3e3f2f8447ea5f66fd22d325c578448129718 share/web/templates/__jifty/error/dhandler
 SHA1 78e1e0af483fa3bdac2de4e5a9d82486d67b8537 share/web/templates/__jifty/error/error.css
 SHA1 6834dbbfe494846bb3a70f1f8d6735c4f8c1b326 share/web/templates/__jifty/error/mason_internal_error
-SHA1 b8793db1dd47943dc83173f02f2227f9ca310235 share/web/templates/__jifty/halo
-SHA1 7fbdc70a9c0481d1e67b6154178173d434206fd9 share/web/templates/__jifty/js/dhandler
-SHA1 6a50927b6d7c7f5f2048a691299585cb2dd05677 share/web/templates/__jifty/online_docs/autohandler
-SHA1 d0116574b44622720db7a9efc7fafdf4002ed012 share/web/templates/__jifty/online_docs/content.html
-SHA1 bd81ff4e458c5e1a76c131dce40ffd71fd6a76f7 share/web/templates/__jifty/online_docs/index.html
-SHA1 630b516dede6767e8185de8211e6affd7b564cfe share/web/templates/__jifty/online_docs/toc.html
-SHA1 c31026ba4fa88814a705651878cb89f086f43f9d share/web/templates/__jifty/validator.xml
+SHA1 36736d4597f9a4259b84618f49122a3e2c2790a0 share/web/templates/__jifty/halo
+SHA1 d56aea6b4ec690cc9078873da2f93bcbb88d2921 share/web/templates/__jifty/validator.xml
 SHA1 8ec2abf3fb43be8217f7a0af4054cf40f7e1e47e share/web/templates/__jifty/webservices/json
 SHA1 bbe1d4af8ab26a9e7d528d819bb271b591172f3c share/web/templates/__jifty/webservices/xml
 SHA1 c7384fcdf1ee7a3e347388c6619f6aa2f297656e share/web/templates/__jifty/webservices/yaml
 SHA1 8145ab6043a7bbd70e1bfa33e068fb741f4ee3a5 share/web/templates/_elements/header
 SHA1 f36e8e0557117d8fdcebad74694fac718101ce27 share/web/templates/_elements/keybindings
 SHA1 0d84d7af43685d7161fc800a2c8b464b8586c57d share/web/templates/_elements/menu
-SHA1 4da6700ff1fdc390436ff05906f4df979c44d572 share/web/templates/_elements/nav
+SHA1 9a63bfc72a36bc01d3d480d24d695ca5a3fe9169 share/web/templates/_elements/nav
 SHA1 b74c8647eb89e1e189d3cefbbfae51da608edcff share/web/templates/_elements/page_nav
 SHA1 c255d8da7c3eb68fc66f9f7c041c92b247489fcc share/web/templates/_elements/sidebar
 SHA1 bc8991085ddd0c664bb57a1ad4a79e9bca1807ea share/web/templates/_elements/wrapper
@@ -508,8 +923,10 @@
 SHA1 106fc0286e2aff5a01d9a623c37fc807451f2037 share/web/templates/dhandler
 SHA1 347e3ad8491b742c4cd8e63e77fb4cae2152034c share/web/templates/helpers/calendar.html
 SHA1 1bd17a07884f71740a048c41b67ac9b06915bf76 share/web/templates/index.html
+SHA1 c118e782947f715afec7b5cffa4ebc413e990c12 share/web/transform_templates
 SHA1 7f9dae91a9bfc2743eec1d7aaf78e16fc9f1baba t/00-load.t
 SHA1 1e1a7b63b3ea8d2712214eb28b5fe69aae76da1d t/01-dependencies.t
+SHA1 777e40e7d3c591c21883d0ed880df8712dd50ff3 t/01-test-mechanize.t
 SHA1 ade22974f54a6e0991e14be587be0c9797e72ed5 t/01-test-web.t
 SHA1 95fe956e7bae756a7bc25e65a6761ee0c64981e7 t/01-version_checks.t
 SHA1 4fa0e0143339298278c5e22a58236c6b71555508 t/02-connect.t
@@ -523,9 +940,9 @@
 SHA1 0712de44cbe60eea251a1955b0bcb218f22adf4a t/07-limit-actions.t
 SHA1 38ab90a10fc0cbbbfc3205e543312950302f37a2 t/08-client.t
 SHA1 ea9587b57587f6b9b5e02e3d30b96807f7b62200 t/09-url.t
-SHA1 a7e9e7792684ccbd1500b4ad88c97a5bc1f7dd54 t/10-i18n.t
+SHA1 7ca6fdf97c470ec1360425d3121690b9a4e93790 t/10-i18n.t
 SHA1 d571f6fae9d1a33060fda8c89951492a02b1af01 t/11-config-files.t
-SHA1 3b834f5b8a6371c502eb0dc1f1cb9d79a5257c7a t/12-param-schema.t
+SHA1 bd4520e6f2bfdabc6dba2d27e0cb6d33453f82e7 t/12-param-schema.t
 SHA1 59c44900b1cb957d262f96363ceff21b46e0d598 t/99-pod-coverage.t
 SHA1 bb0da54f2b3f2d7955baa41ee458cb3d1887f475 t/99-pod.t
 SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 t/Continuations/bin/jifty
@@ -554,35 +971,61 @@
 SHA1 14a865ad9c903f69dffa595c463f343dd29f62e2 t/Mapper/share/web/templates/index.html
 SHA1 3b7b51b4428dcbf0b9b1d55c39fd139a3ee4868a t/Mapper/t/00-prototype.t
 SHA1 548bf96ee16a84e3793d89cc0dd68ab67bd03f66 t/Mapper/t/01-raw-api.t
-SHA1 c9c9c8fa7e4284baecf87967eef108715068d249 t/Mapper/t/02-api.t
+SHA1 cdc883e2e3ff2997c1efc01f688638f8d983edd9 t/Mapper/t/02-api.t
+SHA1 5151dae3d7ac5f80dcfaf39fdeea0157af85f189 t/TestApp-Plugin-PasswordAuth/Makefile.PL
+SHA1 f7f44f9a7337def0c97f981073e3ed970851d9ae t/TestApp-Plugin-PasswordAuth/bin/jifty
+SHA1 2ad861771e8cc20e90a5820cb4d3d0837a4fc047 t/TestApp-Plugin-PasswordAuth/etc/config.yml
+SHA1 deb71812bd1042f4ac4260a7b67340ff5f6e5c4d t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/FasterSwallow.pm
+SHA1 f34586dcd0217789759de64af7720695c1d50a9a t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/FavoriteColor.pm
+SHA1 a83f69587be10ffe3191bc04ed94f2b817b54ce4 t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/Bootstrap.pm
+SHA1 9f38d7dd23e7568ec3979216f928a0ef7bdee0ed t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/CurrentUser.pm
+SHA1 62e2f19a611b7c87b3abcee1a4653c29caf7bc90 t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/Dispatcher.pm
+SHA1 eb74aab3f1577160a69f5d5073ec07da7fda041e t/TestApp-Plugin-PasswordAuth/lib/TestApp/Plugin/PasswordAuth/Model/User.pm
+SHA1 7513161b6944b864a0d06f74ce230907e2064cf7 t/TestApp-Plugin-PasswordAuth/t/00-model-User.t
+SHA1 cd358dc97050649f35034d8363590798a543799d t/TestApp-Plugin-PasswordAuth/t/01-tokengen.t
+SHA1 fda1f40fc6869572331ab18da6b57679b847d3f0 t/TestApp-Plugin-PasswordAuth/t/11-current_user.t
+SHA1 e39787081ffb2783de44db32157c6f3bf1631047 t/TestApp-Plugin-PasswordAuth/t/12-signup.t
 SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 t/TestApp-Plugin-REST/bin/jifty
 SHA1 4762d5e154fcbeb0b188a1ecb90c4997403c9d24 t/TestApp-Plugin-REST/etc/config.yml
 SHA1 61845f11966aadecf3bb885fcc5b33ef66e9637f t/TestApp-Plugin-REST/lib/TestApp/Plugin/REST/Action/DoSomething.pm
 SHA1 3670c345f54846479d42b9636e0484130e1e72c1 t/TestApp-Plugin-REST/lib/TestApp/Plugin/REST/Dispatcher.pm
 SHA1 2bc709eb73c4f72267835a06f07de3bc9fe0adba t/TestApp-Plugin-REST/lib/TestApp/Plugin/REST/Model/Group.pm
-SHA1 4ed01e5665fe265e1d45bfcce37a57e8c3087605 t/TestApp-Plugin-REST/lib/TestApp/Plugin/REST/Model/User.pm
+SHA1 d98ae3b792d679e71ad61d9281e4c70337fb3593 t/TestApp-Plugin-REST/lib/TestApp/Plugin/REST/Model/User.pm
 SHA1 5184bbae7c9a4653841156f54b34bac4abf7d54f t/TestApp-Plugin-REST/t/00-model-User.t
 SHA1 3b7b51b4428dcbf0b9b1d55c39fd139a3ee4868a t/TestApp-Plugin-REST/t/00-prototype.t
 SHA1 b6c65e7f47ff136c7d370b85cf01f27537dd81ff t/TestApp-Plugin-REST/t/01-config.t
-SHA1 3e915c7d6a7c7a0fee3246da9b1f8e782b5a317a t/TestApp-Plugin-REST/t/02-basic-use.t
+SHA1 daa99f581a0b42976ce7ae4fe8c3f4d79d799827 t/TestApp-Plugin-REST/t/02-basic-use.t
 SHA1 a7dc1f376cac630ea28d2965e561469deb951cc7 t/TestApp/bin/jifty
 SHA1 f9a9321b803e4f248ecdd86fd71613164c01bd86 t/TestApp/lib/TestApp/Action/DoSomething.pm
 SHA1 f93118ca17be86a7c171ee47864d7149baf7344c t/TestApp/lib/TestApp/Action/DoSomethingElse.pm
 SHA1 6e27f855429d18181d6c5a0de6b83492fa5c6219 t/TestApp/lib/TestApp/CurrentUser.pm
-SHA1 de8a0bb9c5dfe2ceb00f38c6baf66627f3b361b2 t/TestApp/lib/TestApp/Dispatcher.pm
-SHA1 3424b48c4def8e714a6508afa7a43569075131c8 t/TestApp/lib/TestApp/Model/User.pm
+SHA1 7e5dfbfaf1fc9c867e3bb3471597e9d744218949 t/TestApp/lib/TestApp/Dispatcher.pm
+SHA1 5e1331569dbfafb56c4bbd26e0e2ad58e2f3b3cd t/TestApp/lib/TestApp/Model/User.pm
+SHA1 b2d3474949dae7c171157e8697dbb208ef3805f8 t/TestApp/lib/TestApp/Upgrade.pm
+SHA1 0807d39d56ad1c603d5fda36c26f92f32709feb0 t/TestApp/lib/TestApp/View.pm
+SHA1 1a738a666e1bd83a6f6791d069738d0a90e724d4 t/TestApp/lib/TestApp/View/base.pm
+SHA1 0838ac6deac43ed66fb6bfb358051b716e12e7a8 t/TestApp/lib/TestApp/View/instance.pm
 SHA1 67f41db40d62b81d71cb60c542695e0d7e6d393d t/TestApp/share/web/static/images/pony.jpg
+SHA1 5a47fc9c85527214f6eaf2c8f8dd84bfb80fef61 t/TestApp/share/web/templates/concrete.html
 SHA1 1e4b29a138e61f49c1ceffe50c15ed0a087613fc t/TestApp/share/web/templates/currentuser
 SHA1 a2e7bf8d2d52bbaf360af24b4ffc00c68d7e31f2 t/TestApp/share/web/templates/dispatch/basic
 SHA1 d1e244371109ce216bfd6b9ac03374737461577c t/TestApp/share/web/templates/dispatch/basic-show
 SHA1 44795ddb863c9c32c05678bf8288c9816e3366a9 t/TestApp/share/web/templates/dosomethingelse
 SHA1 f5870c2fb3222b86d97f14bdf8155821c887987b t/TestApp/share/web/templates/editform
-SHA1 ef0db81c421ba89231ea6d72f355b7dd8fd5e8e2 t/TestApp/share/web/templates/index.html
+SHA1 9cea9df8bd6b4644b100259b9290f5e52f874d0d t/TestApp/share/web/templates/index.html
 SHA1 2f721db97a3b571d0006f6ed9a0d0c8bffef8642 t/TestApp/share/web/templates/manual_redirect
+SHA1 70e9bbbe8ad7df2db3352073ec840a93c4d6d6fb t/TestApp/share/web/templates/path_test/foo/index.html
+SHA1 4e9416993c5e56de1f9688061648ec6a164b1734 t/TestApp/share/web/templates/path_test/in_both
+SHA1 0aa10de36e1c4b34d3e00ca954d10f2c532a1e25 t/TestApp/share/web/templates/path_test/mason_only
+SHA1 1f95e8e0f677fd2571dfcf6e66688b52f0e22184 t/TestApp/share/web/templates/redirected
+SHA1 55438c7d68b465f08c9774aacacbc2aa62cced8f t/TestApp/share/web/templates/regions/list
+SHA1 cc7e1174609f5ae92b441c4ecf7a4734cf5a9436 t/TestApp/share/web/templates/regions/long
+SHA1 f7b091879df762cccacaf827fbadc1ad4b6294b1 t/TestApp/share/web/templates/regions/short
 SHA1 9a50bb56338896f9cd50b7098a9e28397ad28a34 t/TestApp/share/web/templates/somedir/dhandler
 SHA1 350ab77f7c18d826ed91eaf251f3f80ebd9605ba t/TestApp/t/00-model-User.t
 SHA1 3b7b51b4428dcbf0b9b1d55c39fd139a3ee4868a t/TestApp/t/00-prototype.t
 SHA1 94a1fe86cc34fbdce9087f30a69a859063ca8714 t/TestApp/t/01-config.t
+SHA1 840b50a023f9bc45b2345e0c664949d55d056b15 t/TestApp/t/02-dispatch-show-rule-in-wrong-ruleset.t
 SHA1 6c6726cd87697675c80828825ff34109daec7f86 t/TestApp/t/02-dispatch.t
 SHA1 d438a2c8aa2fa15c80da4f2a44ecfe65856b58f8 t/TestApp/t/03-static.t
 SHA1 dc8e0ea29839c6dd50843d7c95a907874f6d5472 t/TestApp/t/04-sessions.t
@@ -596,15 +1039,21 @@
 SHA1 55ba141d6c73a6dfa7ccccb6cb9f32253ed8decb t/TestApp/t/10-compress.t
 SHA1 18667b3bdcbe7b9dd2715e16c8bbffe51c28548f t/TestApp/t/11-current_user.t
 SHA1 019605c6e627bf65ee3d2ed1b8d2b34fc8e10853 t/TestApp/t/12-search.t
+SHA1 1c80b396277bf78134c2aa3de9e0f375e7efef75 t/TestApp/t/13-page-regions.t
+SHA1 b57b4cf6832d53a3777fe65e56f9ae076f474b0a t/TestApp/t/14-template-paths.t
+SHA1 601af3bb2265d698a458d2f02ca76b1a4f076fe7 t/TestApp/t/15-template-subclass.t
 SHA1 69401ad0579fa743f087731536229d2806dd1d6a t/TestApp/t/config-Cachable
 SHA1 710c4b0faaea46f90a7b071e5396541a59ed0ff1 t/TestApp/t/config-Record
+SHA1 6c16e68284cc30d81eba755c6986675690b78f77 t/TestApp/t/i18n-standalone.t
 SHA1 30274351a6eb9342daef843ffb8a2aafee38afb4 t/TestApp/t/instance_id.t
 SHA1 ee548850452b377e08f36a9269c1b8f7911bdb2d t/TestApp/t/regex_meta_in_path_info.t
+SHA1 f502e4937629f7525cf90cf982cadd29bc60ed5a t/TestApp/t/upgrade.t
+SHA1 aa8319f0acdd5c8e8c60b34d360cff834029e570 t/TestApp/testapp
 SHA1 c8fb21f31b593627b38129ee9dd41eaf9c556ced t/lib/Jifty/SubTest.pm
 -----BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.3 (GNU/Linux)
+Version: GnuPG v1.4.3 (Darwin)
 
-iD4DBQFFromfEi9d9xCOQEYRAjV1AJ9gxbyucs3vXDll+msp25TGsP4ZlwCUDDbz
-1ktLZJXD6wX2Hkn/232QNg==
-=ItK4
+iD8DBQFGLAX/Ei9d9xCOQEYRAnSsAKC6QQRZGQFzdh1RYF6eRAfYxjg1KQCfU8ih
+Lh9Xz380qhLKc6AxFRUaZkM=
+=RTdf
 -----END PGP SIGNATURE-----

Modified: jifty/branches/virtual-models/debian/changelog
==============================================================================
--- jifty/branches/virtual-models/debian/changelog	(original)
+++ jifty/branches/virtual-models/debian/changelog	Mon May  7 16:28:32 2007
@@ -1,4 +1,8 @@
- -- AGOSTINI Yves <agostini at univ-metz.fr>  Fri, 16 Mar 2007 18:22:23 +0100
+jifty (0.70416-1) unstable; urgency=low
+
+  * New cpan release
+
+ -- Agostini yves <agostini at univ-metz.fr>  Sun, 15 Apr 2007 22:59:09 +0200
 
 jifty (0.70317-1) unstable; urgency=low
 

Modified: jifty/branches/virtual-models/debian/control
==============================================================================
--- jifty/branches/virtual-models/debian/control	(original)
+++ jifty/branches/virtual-models/debian/control	Mon May  7 16:28:32 2007
@@ -64,14 +64,14 @@
  libhtml-lint-perl, libhtml-mason-perl (>> 1.31), 
  libwww-perl, libhttp-server-simple-perl (>> 0.26), 
  libhttp-server-simple-recorder-perl, libhash-merge-perl, libhook-lexwrap-perl,
- libipc-pubsub-perl (>> 0.23), libjifty-dbi-perl (>> 0.31),
+ libipc-pubsub-perl (>> 0.23), libjifty-dbi-perl (>> 0.40),
  liblocale-maketext-lexicon-perl, liblog-log4perl-perl,
  libmime-types-perl, libmodule-pluggable-perl (>> 3.1),
  libmodule-corelist-perl, libmodule-refresh-perl,
  libmodule-scandeps-perl, libobject-declare-perl (>> 0.22),
  libparams-validate-perl, libscalar-defer-perl (>> 0.10),
  libstring-koremutake-perl, libsql-reservedwords-perl,
- libtemplate-declare-perl (>> 0.06), 
+ libtemplate-declare-perl (>> 0.07), 
  libtest-base-perl, libuniversal-require-perl, liburi-perl,
  libxml-writer-perl (>> 0.601), libxml-simple-perl,
  libxml-xpath-perl, libversion-perl, libyaml-syck-perl (>> 0.72), 

Added: jifty/branches/virtual-models/doc/notes-on-distributed-operations
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/doc/notes-on-distributed-operations	Mon May  7 16:28:32 2007
@@ -0,0 +1,256 @@
+Asynchrony
+Synchrony
+Syncrony
+Syncron
+
+
+
+client-server sync is easy
+consistent distributed replication is ... harder
+
+how do we guarantee a coherent model of the world after sync?
+two possible models:
+
+    - undo local transactions and replay them in globally unique order
+        (This is the bayou model)
+
+    - calculate big deltas to bring local and remote into sync
+
+        svk pull -l, svk push -l
+
+    - replay remote transactions locally until we conflict or are exhausted
+      then batch until we resolve the conflict automatically or require
+      external intervention, then turn around and do the other side?
+            svk pull, svk push
+
+
+How do we deal with "on transaction" behaviour?
+    Some rules should apply only on "this" replica
+        - Send email when we get an update that matches
+    Some rules should apply only when a record is created or modified by a local update (isn't syncced)
+        - When we create a bug report, create a log entry
+    Some rules should apply only when a record is synced
+        - when we sync in a bug report, extract it's associated patches
+          to the local filesystem in ~/patches/to-apply
+
+Getting toward a consistent result:
+    
+    All bayou replicas move toward 'eventual consistency' using anti-entropy
+    syncs of deltas.
+    "  The Bayou system 
+       guarantees that all servers eventually receive all Writes via the 
+       pair-wise anti-entropy process and that two servers holding the 
+       same set of Writes will have the same data contents."
+
+    "  Two important features of the Bayou system design allows 
+       servers to achieve eventual consistency. First, Writes are per- 
+       formed in the same, well-defined order at all servers. Second, the 
+       conflict detection and merge procedures are deterministic so that 
+       servers resolve the same conflicts in the same manner."
+              
+Merge behaviour:
+
+    Bayou style:
+        'dependency checks' on write -- "Do any of the preconditions for 
+        my attempted write fail?
+        (BayouConflictsSOSPPreprint.pdf)
+        
+        on conflict, run a "merge program" - merge programs are application 
+            specific. bayou defines standard categories of merge programs
+            that developers can treat as templates
+
+        when unresolvable conflicts hit, punt it to the user.
+
+
+        
+    Svn-style:
+        textual merge is fine for simple property databases, but won't 
+        deal with "conflicting appointments"
+
+
+Access control:
+
+ * Authentication
+
+    All updates should be signed by an identity. 
+
+
+        Jesse resolves task 1:
+        "Task 1, status changed from open to resolved" - Signed by 0xAAAA (Jesse)
+
+    When propagating updates delivered to a replica by another identity, updates should carry their full pedigrees.
+       
+        Jesse syncs to clkao:
+        "Task 1, status changed from open to resolved" - Signed by 0xAAAA (Jesse)
+        Clkao syncs to audrey:
+        "Task 1, status changed from open to resolved" - Signed by 0xAAAA (Jesse)
+            - Propagated by 0xBBBB (Clkao) to 0xCCCC (Audreyt) at $TIME
+                Hm. $TIME can't be a timestamp. we don't trust timestamps.
+                Is there any reason to carry full pedigrees? It feels "right"
+                to know how updates get carried around.
+
+    When propagating lumped updates, we probably want to carry the components pedigrees. 
+
+
+    clkao understands all of this stuff a lot better than I do. I'm probably 80% wrong.
+
+
+ * Authorization
+
+    
+
+
+
+Defining characteristics of Bayou:
+	
+	(from eurosigops-96)
+	
+	• Clients can read from and write to any server. 
+	• Servers propagate writes among themselves via a pairwise anti-entropy protocol that permits incremental 
+	progress. 
+	• A new database replica, i.e. server, can be created from any existing replica. 
+	• New conflict detection and resolution procedures can be introduced at any time by clients and their applications. 
+
+
+Bayou propagation of updates:
+
+    a replica has a history of all changes. Changes are defined as 
+    'committed' or 'tentative'.  Tentative changes might get rolled back
+    on conflict....so there's a log of all updates. the database can get
+    rolled back and replayed based on new updates. the order of playback   
+    is globally consistent.
+    
+    we really don't want the distinction between tentative and committed.
+    this would mean that 'lightweight' clients can't be used as a vector 
+    to decrease interserver entropy....it also means that clients can't sync with each other. this is a showstopper.
+
+    sosp-97/AE.pdf describes the bayou anti-entropy replication protocol
+    including an explanationf how to deal with servers which have truncated
+    their write logs. The rollback and insert new transactions scheme 
+    described by AE.pdf sounds an awful lot like what Sam Vilain has been doing with splicing perl history, though presents additional challenges not present in a pure software version control system. the splice can introduce new data that needs to propagate forward.
+
+    While bayou servers are weakly connected, they appear to propagate
+    knowledge of all servers to all other servers.
+
+    In an internet-scale system, this feels like it would be a poor choice.
+
+
+Bayou's global ordering
+
+    The big thing about bayou that scares me is their single global order based on time syncronization.  How do we actually ensure that random clients are globally synced timewise. There's a protocol floating around in my head. I haven't thoguht it through enough to know if it works. And yes, this text buffer is too small to explain it adequately.
+
+
+Connecting to any server:
+    
+        Cool thing about Bayou:
+       Fluid transition between synchronous and asynchronous modes
+       of operations.  Multiple collaborators can connect to distinct
+       servers for typical asynchronous operation, or connect to
+       the same server for âtighterâ synchronous  operationn
+
+Partial Replication:
+
+    How do we deal with letting a client sync only part of the system?
+
+    None of the bayou papers dealt with it at all.
+
+
+"The Dangers of Replication and a Solution ", Microsoft, et al. (gray96danger.pdf)
+
+    Proposes a two-tier solution.  It loses because we don't get mobile to mobile sync 
+
+     mobile nodes maintain two copies of every record:
+        a local version and a best-known master.
+
+     online-connected servers are all closely timesynced and transactions are always applied in order.
+       I haven't read far enough into their paper yet, but I can presume that one server is the designated
+       Master and that in the case of disconnect between Master and other online-connected nodes, the Master
+       wins on any conflict that can't be resolved. but in general, updates are resolved actively.
+
+	"Certainly, there are replicated databases: bibles, phone books, 
+	check books, mail systems, name servers, and so on.  But up- 
+	dates to these databases are managed in interesting ways — 
+	typically in a lazy-master way. Further, updates are not record- 
+	value oriented; rather, updates are expressed as transactional 
+	transformations such as “Debit the account by $50” instead of 
+	“change account from $200 to $150”. "
+		
+	"The two-tier replication scheme begins by assuming there are 
+	two kinds of nodes: 
+	Mobile nodes are disconnected much of the time.  They store a 
+	replica of the database and may originate tentative trans- 
+	actions.  A mobile node may be the master of some data 
+	items. 
+	Base nodes are always connected.  They store a replica of the 
+	database.  Most items are mastered at base nodes. 
+	Replicated data items have two versions at mobile nodes: 
+	Master Version: The most recent value received from the ob- 
+	ject master.  The version at the object master is the master 
+	version, but disconnected or lazy replica nodes may have 
+	older versions. 
+	Tentative Version: The local object may be updated by tenta- 
+	tive transactions.  The most recent value due to local up- 
+	dates is maintained as a tentative value. 
+	Similarly, there are two kinds of transactions: 
+	Base Transaction: Base transactions work only on master 
+	data, and they produce new master data. They involve at 
+	most one connected-mobile node and may involve several 
+	base nodes. 
+	Tentative Transaction: Tentative transactions work on local 
+	tentative data.  They produce new tentative versions. 
+	They also produce a base transaction to be run at a later 
+	time on the base nodes. 
+	
+	
+	
+        
+
+More about authz:
+
+AKA: I CAST PKI. YOUR PROJECT FAILS
+
+
+    Authorization is performed using cryptographically signed assertions:
+
+        Every database has a base "trusted authorizers" property: the public keys of principals allowed to make assertions about it.
+
+        Every database has a list of signed authorization assertions:
+            $PRINCIPAL_KEY_ID has the right $RIGHTNAME for the database with UUID $UUID 
+    
+
+            $RIGHTNAME is one of:
+
+                manage_access (make authz assertions)
+                change_db_model (send cryptographically signed database schema update assertions)
+                create_records  (each of these four CRUD rights can optionally take a table name to check)
+                read_records    (bad idea: allow these signed assertions to include a code chunk used to decide applicability)
+                update_records
+                delete_records
+
+
+            We need to protect against Mallory, the malicious user, who will hang on to his authz assertion even after revocation. So, revocations of signed authz assertions should be kept and propagated like regular authz assertions. Servers must never discard revocations or Mallory's malicious transactions could later be reinjected. How do we handle Mallory's pre-revocation non-malicious transactions?  Presumably all pre-revocation transactions on the replica where the revocation was generated are 
+cryptographically signed by Audrey, the trusted authorizer generating the revocation certificate.
+
+            On every sync, every client should propagate its trust database to the peer. 
+
+        While a local user could modify the "trusted authorizers" property to allow an unauthorized user to commit transactions, 
+i       it would not compromise system integrity as this property would not change on upstream replicas and 
+        transactions from unauthorized users, as well as authz assertions by unknown masters would be discarded.
+        It should be possible for a trusted user (Tony) to sign existing transactions generated by his collaborator Ursula,
+         such that they could be passed to tony's upstream replica with a trusted authorizers list whcih does not include ursula
+
+
+Application behaviour:
+    
+    * Application-specific behaviours are side effects.
+    * Some side effects run when an update is replicated in
+    * Some side effects run when an update is created locally
+    * Some side effects run when an update first enters the system, regardless of whether it's locally created or replicated
+    * Some side effects only cause other database updates. These can _potentially_ be rolled back when the transaction
+      is created
+    * Some side effects perform an external action. These can never be rolled back. They cascade. Once a side effect has taken place, we're stuck with the transaction.
+
+
+
+
+

Added: jifty/branches/virtual-models/doc/talks/DoxoryDemo.tgz
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/doc/talks/oscon.2007.dsls.txt
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/doc/talks/oscon.2007.dsls.txt	Mon May  7 16:28:32 2007
@@ -0,0 +1,798 @@
+#title Jesse Vincent - Best Practical
+Domain Specific Languages in Perl
+---
+#title A bit about DSLs
+DSLs are little languages for specific programming tasks
+---
+DSLs are easier to read
+---
+DSLs are  more expressive
+---
+DSLs let you optimize your code for coding
+---
+Mostly, I'm going to talk about "Englishy" DSLs
+---
+Not all DSLs are Englishy
+---
+SQL
+---
+Regexes
+---
+Excel Macros
+---
+XML config files
+---
+XSL-T
+---
+GraphViz
+---
+...but I've been on an Englishy DSL kick
+---
+DSLs can be implemented in your 'host' language
+---
+(These get called "internal" DSLs)
+---
+DSLs can be implemented outside your 'host' langauge
+---
+(External DSLs)
+---
+Everything I'm going to talk about is Pure Perl (Internal)
+---
+The Ruby community is big on DSLs
+---
+You can make DSLs in Perl, too
+---
+(but it does take more work in Perl)
+---
+How did I get here?
+---
+#title How did I get here?
+Airplane
+---
+Narita Express
+---
+Subway
+---
+Ok, How'd I really get here?
+---
+All started at OSCON 2005
+---
+DHH demonstrated Rails migrations
+---
+#mode ruby
+class AddUserTable < ActiveRecord::Migration
+    def self.up
+      create_table :users do |table|
+        table.column :name, :string
+        table.column :login,  :string
+        table.column :password, :string, :limit => 32
+        table.column :email, :string
+      end
+    end
+
+    def self.down
+      drop_table :users
+    end
+  end
+---
+They looked very sexy
+---
+I was very jealous
+---
+"You can't do this in any other language"
+---
+Never say that to a Perl Hacker
+---
+#title Agenda
+We've made some DSLs
+---
+One for declaring database schema
+---
+(I thought Rails did more. But I never read the manual)
+---
+(It does a lot more than Rails migrations)
+---
+One for web templating
+# loc-ja じゃあいったいどうして?!
+---
+(Yes, another web templating system)
+---
+(Hopefully, this one will provide some closure)
+---
+(You'll see)
+---
+One for making web testing easier
+---
+(It's VERY beta)
+---
+(Perfect for Web 2.0)
+---
+#title
+Jifty::DBI::Schema
+---
+#title Jifty::DBI::Schema - The design process
+Delarative Syntax for an Object Relational Mapper
+---
+Started sketching Jifty::DBI columns
+---
+Started with DBIx::SearchBuilder
+---
+Columns were defined as a hash
+---
+#mode perl
+sub _CoreAccessible {
+    {   id => {
+            read       => 1,
+            sql_type   => 4,
+            length     => 11,
+            is_blob    => 0,
+            is_numeric => 1,
+            type       => 'int(11)',
+            default    => ''
+        },
+        Name => {
+            read       => 1,
+            write      => 1,
+            sql_type   => 12,
+            length     => 200,
+            is_blob    => 0,
+            is_numeric => 0,
+            type       => 'varchar(200)',
+            default    => ''
+        },
+   }
+ ...
+}
+---
+Hashes are kind of ugly
+---
+We spent about a month playing with syntax.
+---
+Our first goal was "feels right"
+---
+Our second goal was "we can implement this"
+---
+I'm going to show you some of our design process
+---
+(It's a mix of code and IRC)
+---
+#mode perl
+$x = Jifty::DBI::SchemaBuilder->new;
+$x->define_blablalb
+$x->bla bla
+---
+#mode perl
+our db_table 'addresses';
+our field name => { 
+	has_type 'varchar'; 
+	has_default 'frank' 
+};
+---
+<chmrr> (by the way, i'm pretty sure we don't get to do the sub-at-the-end thing either... I tried lots of hacky ways to get it working and failed.)
+
+<glasser> yeah, I think we're going to end up having a pseudo-sub that's really a hash behind the scenes 
+---
+#mode perl
+{
+    my $s = Jifty::DBI::SG->import_functions;
+    
+    db_table bla bla bla;
+    field bla;
+    field bar;
+} # $s.DESTROY gets called and unimports db_table/field/...
+---
+(This was astonishingly close to what we do today.)
+---
+#mode perl
+my $schema = Jifty::DBI::RecordSchema->new;
+$schema->for_class(__PACKAGE__);
+
+$schema->field name => { 
+	has_type 'varchar'; 
+	has_default 'Frank'
+}
+
+---
+#mode perl
+
+BEGIN { @ISA = 'Jifty::DBI::Record' }
+use Jifty::DBI::Record; # but this sucks!
+
+use base qw/Jifty::DBI::Record/;
+
+__PACKAGE__->schema_version (0.0001) 
+# (or some other method that does two thing evily).
+---
+<obra> we could tie @ISA
+
+<obra> ...I'm kidding
+---
+<obra> we could tie the symbol table
+
+<obra> ...It just doesn't work
+---
+#mode perl
+use base 'Jifty::DBI::Record';
+Jifty::DBI::Record->___from_code();
+
+db_table 'addresses';
+
+field {
+    called 'name'; # ? 
+}
+--- 
+<glasser> is 
+	
+  "has_type 'string'" 
+
+definitely better than 
+
+  "type => 'string'"  
+
+in your book?
+---
+<obra> how would you do: 
+
+ refers_to_many RT::Tickets by 'owner';
+
+<Robrt> hmm. i thought about this before.  we can do like simon and
+
+ refers_to_many "RT::Tickets by owner";
+
+<Robrt> but I don't really like that.  parsing is lame.
+
+<Robrt> I'm *pretty* sure that we can't get the line you've written to compile.
+---
+<obra> I've got a bad perl5 idea for you. Robert claims it's impossible
+
+<obra> I'm trying to make the syntax "refers_to_many 'BTDT::Model::Tasks' by 'owner';" valid perl5 syntax.
+---
+<audreyt> well, that may be true but you don't want that.
+
+<audreyt> refers_to_many BTDT::Model::Tasks by 'owner'
+
+<audreyt> is more readable and easily implemented.
+
+<audreyt> sub by ($) { by => @_ }
+
+<audreyt> done!
+
+<audreyt> stop thinking classes as strings :)
+---
+<obra> shit! it actually works!
+---
+What we had left:
+---
+the "field foo => sub {};" issue
+--- 
+#mode perl
+
+ # We wanted something that acted like this
+ # But without the ugly 'sub' keyword
+ field email => sub {
+ 
+    has_type 'varchar';
+    has_default 'Frank';
+};
+
+---
+#mode perl
+# We cculd do this, but it used a hash
+# not a block
+
+field phone => {
+    has_type 'varchar';
+};
+
+field employee_id => {
+    refers_to_a Sample::Employee;
+}
+---
+#mode perl
+
+# This is ugly and verbose
+
+package Sample::Employee;
+
+use base qw/Jifty::DBI::Record/;
+
+__PACKAGE__->db_table 'employees';
+
+__PACKAGE__->field name => has_type 'varchar';
+
+__PACKAGE__->field dexterity =>  { has_type 'integer'};
+
+---
+#title In the end...
+We ended up with Jifty::DBI columns
+---
+#mode perl
+use Jifty::DBI::Record schema {
+column auth_token => type is 'text',
+  render as 'Unrendered';
+
+column score => type is 'int',
+  is immutable,
+  label is 'Score';
+
+column time_zone =>
+  label is 'Time zone',
+  since '0.0.12',
+  default is 'America/New_York',
+  valid are formatted_timezones();
+};
+---
+We implemented the DSL twice
+---
+#title 
+Take 1
+---
+#title Take 1
+Jifty::DBI::Schema
+---
+#title Take 1: Jifty::DBI::Schema
+Our first DSL in Perl
+---
+We beat the parser into submission with a few tricks
+---
+Injection of functions
+---
+We saw that a moment ago
+---
+Clever function prototypes
+---
+Let's have a look at that
+---
+#mode perl
+# The syntax we wanted
+
+score => type is 'int',
+  is immutable,
+  default is '0',
+  render as 'text',
+  label is 'Score',
+  since is '0.0.7';
+---
+#mode perl
+# perl -MO=Deparse parses that as:
+
+'is'->type('int', 
+  'immutable'->is, 
+   'is'->default('0', 
+      'as'->render('text', 
+        'is'->label('Score', 
+          'is'->since('0.0.7')))));
+---
+How can we fix that?
+---
+Prototype hacking!
+---
+#mode perl
+sub is ($) { return shift };
+sub as ($) { return shift };
+sub since ($) { }
+sub type ($) { }
+sub render ($) {}
+sub label ($) {}
+sub default ($) {}
+---
+#mode perl
+
+# Now, perl -MO=Deparse parses that as:
+
+ type(is('int')), 
+ is('immutable'), 
+ default(is('0')), 
+ render(as('text')), 
+ label(is('Score')), 
+ since(is('0.0.7'));
+---
+Downsides
+---
+Limited flexibility
+---
+Needs new functions for every attribute
+---
+#title Take 2
+#`mpg123  ~/katamari.mp3`
+Object::Declare
+---
+#title Take 2: Object::Declare
+Katamari for Code
+---
+#mode perl
+use Jifty::DBI::Record schema { 
+
+ column score => type is 'int',
+  is immutable,
+  render as 'text',
+  default is '0',
+  label is 'Score',
+  since is '0.0.7';
+};
+---
+# mode perl
+# perl -MO=Deparse parses that as:
+
+'is'->type('int', 
+  'immutable'->is, 
+   'is'->default('0', 
+      'as'->render('text', 
+	'is'->label('Score', 
+	  'is'->since('0.0.7')))));
+---
+Why fight the parser?
+---
+Perl gives us all the rope we need
+---
+UNIVERSAL:: and ::AUTOLOAD
+---
+What actually happens at compile time:
+
+---
+The 'schema' function in our baseclass takes a code block
+---
+...and returns a closure
+---
+Jifty::DBI::Record::import takes over:
+---
+it takes the closure
+---
+it installs some methods...
+---
+...is::AUTOLOAD and UNIVERSAL::is and as::AUTOLOAD
+---
+it runs the closure
+---
+it hands the result off to a method of your choice
+---
+it removes its magic symbols
+---
+...and then your program gets control back
+---
+#title Jifty::DBI::Schema - end
+That's Jifty::DBI::Schema.
+---
+#title
+Template::Declare
+---
+#title Template::Declare
+A pure Perl Templating Language
+---
+What it looks like
+---
+#mode perl
+template '/pages/mypage.html' => sub {
+    html {
+        head {};
+        body {
+            h1 {'Hey, this is text'};
+            }
+        }
+};
+---
+#mode perl
+template choices => page {
+    h1 { 'My Choices' }
+    dl {
+        my $choices = Doxory::Model::ChoiceCollection->new;
+        $choices->limit(
+            column => 'asked_by',
+            value  => Jifty->web->current_user->id,
+        );
+        while (my $c = $choices->next) {
+            dt { $c->name, ' (', $c->asked_by->name, ')' }
+            dd { b { $c->a } em { 'vs' } b { $c->b } }
+        }
+    }
+};
+---
+But! 
+---
+Content! Templates! 
+---
+Design! Code!
+---
+OMGWTF!? THAT'S WRONG!
+---
+The person who told you it's wrong was lying to you.
+---
+We're Perl hackers
+---
+Why are we writing our templates in another language?
+---
+This is not 1997
+---
+It's 2007
+---
+People use CSS for design now
+---
+Programmers still have to make templates
+---
+Templates run like CODE
+---
+Because they ARE code
+---
+Let's use our CODING tools to work with them
+---
+#mode perl
+#title Refactoring
+
+template 'mypage.html' => page {
+ h1 { 'Two choices' };
+ div { attr { class => 'item' };
+       h2 { 'Item 1'};
+  };
+ div { attr { class => 'item' };
+       h2 { 'Item 2'};
+  };
+}; 
+---
+#title Refactoring
+#mode perl
+
+template 'mypage.html' => page {
+ h1 { 'Two choices' };
+ for ("Item 1", "Item 2") { item($_); }
+};
+
+sub item {
+    my $content = shift;
+    div {
+        attr { class => 'item' };
+        h2 {$content};
+    };
+
+}
+---
+We can refactor templates!
+---
+Have you ever tried to refactor HTML?
+---
+Our HTML is magically valid
+---
+(Syntax errors are...Syntax Errors)
+---
+#title Stashing our templates
+#mode perl
+template '/foo/index.html' => sub {... };
+---
+'sub template' takes a name and a coderef
+---
+But where do we put these?
+---
+We need a global stash
+---
+It needs to be per package 
+(Don't want to mix things together)
+---
+Basically, we need a symbol table
+---
+It's Perl
+---
+We have THE symbol table
+---
+But URLs have characters that are illegal in sub names. :/
+---
+Actually, Perl doesn't care
+---
+#mode perl
+no strict 'refs';
+*{ $class . '::' . $subname } = $coderef;
+---
+That just works.
+---
+Even if your sub is named './\\foo#title <>'
+---
+But how do you call it?
+---
+#mode perl
+# perldoc UNIVERSAL
+---
+CLASS->can( METHOD )
+"can" checks if the object or class has a method called "METHOD".
+If it does then a reference to the sub is returned.
+---
+#title Closures
+Now, about that syntax.
+---
+HTML tags take blocks of content
+---
+Our tag methods take blocks of Perl
+---
+They return closures when you want them to
+---
+They run and output their content when you want them to
+---
+#mode perl
+sub h1 (&;$) {
+  my $code = shift;
+  
+  ...
+
+  if (defined wantarray) {
+    return sub { ...closure around $code...};
+  } else {
+    # Actually do our work, run $code and return the output
+    return $code->();
+  }
+}
+---
+We install methods for every HTML tag
+---
+(Except 'tr'. Anybody know why?)
+---
+#mode perl
+use CGI ();
+install_tag($_) 
+  for ( @CGI::EXPORT_TAGS{
+	qw/:html2 :html3 :html4 
+	   :netscape :form/}
+);
+---
+#title Not everything is roses
+(Here's where it all goes wrong)
+---
+HTML Attributes
+---
+# mode perl
+# What we've got:
+
+div { attr { id => 'my-div'};
+      ...
+};
+
+# and
+
+with ( id => 'my-div'), div {
+...
+};
+---
+# mode perl
+# What I think I'd like:
+
+div ( id => 'my-div' ), { 
+... 
+}
+---
+So, what's the big problem?
+---
+Just change the prototype
+---
+In Perl, the (&) in a prototype MUST come first
+---
+ORZ
+---
+Can anybody help me?
+---
+#title Template::Declare - end
+That's Template::Declare
+---
+#title 
+Test::WWW::Declare
+---
+#title Test::WWW::Declare
+A language for testing web applications
+---
+In early development
+---
+It might change
+---
+Web test scripts are UGLY
+---
+Test::WWW::Declare is PRETTY
+---
+Simple, declarative web testing
+---
+Easy to read
+---
+Easy to write
+---
+Looks more like what users do
+---
+#mode perl
+# Test::WWW::Mechanize
+
+my $server=Jifty::Test->make_server;
+isa_ok($server, 'Jifty::Server');
+my $URL = $server->started_ok;
+my $mech = Jifty::Test::WWW::Mechanize->new;
+$mech->get_html_ok($URL);
+like($mech->uri, qr{splash}, 
+     'Redirected to splash page');
+---
+The insides are great
+---
+The syntax ain't
+---
+We built on Test::More and WWW::Mechanize
+---
+#mode perl
+
+# Test::WWW::Declare
+
+session "search" => run {
+    flow "google searches work" => check {
+        get 'http://google.com/ncr'; 
+        fill form 'f' => { 
+		q   => 'Squeamish ossifrage' };
+        click button 'Google Search';
+    }
+};
+---
+Regular tests keep running on failure
+---
+Makes no sense when a failure means you lose context
+---
+Every 'check' block aborts on failure
+---
+Abort means 'failing test'
+---
+Every 'session' has a cookie jar and WWW::Mechanize
+---
+#mode perl
+session "check logins" => run {
+    flow "basic connectivity" => check {
+        get 'http://fsck.com';
+        content should match qr{fsck.com};
+        click href qr{book};
+        content should match qr{RT Essentials}i;
+    };
+};
+---
+What's the weird syntax?
+---
+# mode perl
+content should match qr{RT Essentials}i;
+---
+#mode perl
+content should match qr{RT Essentials}i;
+
+#   vs
+
+ok($req->content =~ /RT Essentials/i);
+---
+# mode perl
+# How do we make this valid perl?
+
+content should match qr{RT Essentials}i;
+---
+Prototypes
+---
+#mode perl
+sub match ($) {
+    return shift;
+}   
+---
+#mode perl
+sub should ($) {
+    my $item = shift;
+    return $item;
+}
+---
+#mode perl
+sub content ($) { 
+    my $regex = shift;
+    unless ( mech()->content =~ /$regex/ ) {
+        die "Content did not match $regex";
+    }
+}
+---
+#title Test::WWW::Declare - end
+That's Test::WWW::Declare
+---
+#title Conclusion
+Creating DSLs is lots of fun
+---
+Creating DSLs can be a lot of work
+---
+Creating DSLs helps you learn Perl internals
+---
+Creating DSLs helps find bugs in Perl
+---
+DSLs can make coding more fun
+---
+Challenge: CPAN some Japanese DSLs
+---
+Thanks
+---

Added: jifty/branches/virtual-models/doc/talks/present-slides
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/doc/talks/present-slides	Mon May  7 16:28:32 2007
@@ -0,0 +1,133 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+use Term::ANSIScreen qw/:color :cursor :screen :keyboard/;
+use Term::ReadKey;
+use Text::Autoformat;
+our @SLIDES;
+
+load_slides();
+my $counter = 0;
+my $slides_played = {};
+	my $title;
+
+open(my $next_slide, ">/tmp/next_slide");
+select($next_slide);
+$| = 1;
+select(STDOUT);
+
+my $cmd = q{ osascript -e ' tell application "Terminal"' -e ' do script "tail -f /tmp/next_slide"' -e 'end tell' };
+system($cmd);
+while ( $counter <= $#SLIDES ) {
+    my $translation = '';
+
+    my $mode = 'text';
+    my ( $cols, $rows, undef, undef ) = GetTerminalSize();
+    my $slide = $SLIDES[$counter];
+
+    print $next_slide Term::ANSIScreen::cls;
+    print $next_slide locate(1,1);
+    print $next_slide colored("Time: ".scalar localtime()  ."\n", 'blue');
+    print $next_slide colored("Back 1\n", 'red');
+    print $next_slide $SLIDES[$counter-1] ."\n\n";
+    print $next_slide colored("This slide, $counter/".$#SLIDES."\n", 'blue');
+    print $next_slide $SLIDES[$counter] ."\n\n";
+    print $next_slide colored("Next slide\n", 'red');
+    print $next_slide $SLIDES[$counter+1];
+    print $next_slide "\n";	
+
+    my $console = Term::ANSIScreen->new;
+    $console->Cls;
+    $console->Cursor(1,1);
+    if ( $slide =~ s/^#\s*title\s*?(.*?)$//gm ) {
+        $title = $1;
+    }
+	if ($title) {
+        my $start = int ( ( $cols / 2 ) - ( length($title) / 2 ) );
+	$console->Cursor($start,0);
+	chomp $title;
+	print "$title\n";
+	}
+
+    if ($slide =~ s/#\s*loc-ja\s*(.*?)$//sm) {
+	$translation = $1;
+    }
+    if ($slide =~ s/#\s*`(.*?)`//m) {
+	my $cmd = $1;
+	if(!$slides_played->{$counter}) {
+	`$cmd>/dev/null 2>/dev/null &`;
+	$slides_played->{$counter}++}
+    }
+    if ( $slide =~ s/#\s*mode.*?(perl|ruby).*?$//gms ) {
+        $mode = $1;
+    }
+    if ( $mode eq 'text' and $slide ) {
+        $slide = autoformat $slide, { left => 2, right => ($cols-1), all => 1 };
+    }
+    elsif ($mode =~ /(?:perl|ruby)/) {
+	$slide =~ s/^/ /gsm;
+	my $tidycols = $cols - 2; # squeeze for display
+	open my $out , ">/tmp/output.$$" || die $!;
+	print $out $slide || die $!;
+	close $out || die $!;
+	$slide = ` cat /tmp/output.$$ | source-highlight -s $mode -f esc`;
+	#$slide = ` cat /tmp/output.$$ | perltidy -q -l $tidycols| source-highlight -s perl -f esc`;
+    }
+ 
+    if ( $slide =~ /(\S+)\s*\n\s*(\S+)/m ) {
+	my $lines = ($slide =~ tr/\n//);
+	$console->Cursor(0, int(($rows/2)-($lines/2))-1);
+    	print $slide;
+    } else {
+	chomp $slide;
+	$slide =~ s/(?:\n|\r)//g;
+		my $left = int ( ( $cols / 2 ) - ( length($slide) / 2 ) ); 
+	if ($left < 0 ){
+		$left = 0;
+	}
+        $console->Cursor( $left,	int($rows/2)-1, );
+	print  colored($slide." \n",'bold blue on white');
+    }
+
+
+    $console->Cursor( 0, ( $rows - 1 ) );
+    print colored("$counter/" . $#SLIDES, "bold white");
+    if ($translation) {
+        my $start = int ( ( $cols / 2 ) - ( length($translation) / 2 ) );
+    	$console->Cursor( $start , ( $rows - 1 ) );
+    	print colored($translation, "bold yellow on black");
+   }
+    ReadMode 4;
+    my $key = ReadKey(0);
+    ReadMode 0;
+    if ( $key eq 'q' ) {
+        exit;
+    }
+    if ( $key =~ /^(?: |\n|n)/ ) {
+        $counter++;
+    } elsif ( $key eq 'e' ) {
+	system("vim", $ARGV[0]);
+	load_slides();
+	next;
+    } elsif ( $key eq 'r' ) {
+	load_slides();
+        next;
+
+    } else {
+        $counter--;
+        if ( $counter < 0 ) {
+            $counter = 0;
+        }
+    }
+}
+
+sub load_slides {
+my $file = $ARGV[0];
+my $handle;
+open( $handle, "<$file" ) || die $!;
+
+my $datadata = join( '', <$handle> );
+
+ @SLIDES  = split( /^----?\s*$/mi, $datadata );
+}

Added: jifty/branches/virtual-models/doc/talks/yapc.asia.2007.ja.txt
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/doc/talks/yapc.asia.2007.ja.txt	Mon May  7 16:28:32 2007
@@ -0,0 +1,934 @@
+#title Jesse Vincent - Best Practical
+Domain Specific Languages in Perl
+# loc-ja: PerlでDSL
+---
+#title A bit about DSLs
+# loc-ja: DSLってなに?
+DSLs are little languages for specific programming tasks
+# loc-ja: 決まった分野の仕事をさせるための専用ミニ言語
+---
+DSLs are easier to read
+# loc-ja: DSLにすると読みやすい
+---
+DSLs are  more expressive
+# loc-ja: 表現力も増す
+---
+DSLs let you optimize your code for coding
+# loc-ja: コーディングしやすいようにコードを最適化できる
+---
+Mostly, I'm going to talk about "Englishy" DSLs
+# loc-ja: 今日は「英語っぽく読めるようにする」DSLの話をするけど
+---
+Not all DSLs are Englishy
+# loc-ja: DSLだからって全部英語っぽくなっているわけじゃない
+---
+Excel Macros
+# loc-ja: Excelのマクロ
+---
+XML config files
+# loc-ja: XMLの設定ファイル
+---
+XSL-T
+---
+GraphViz
+---
+...but I've been on an Englishy DSL kick
+# loc-ja: ただ、自分はいま英語っぽく読めるようにするDSLにハマってる
+---
+DSLs can be implemented in your 'host' language
+# loc-ja: DSLは「ホスト」になる言語で実装することもできる
+---
+(These get called "internal" DSLs)
+# loc-ja: こういうのは「内部」DSLと呼ばれる
+---
+DSLs can be implemented outside your 'host' langauge
+# loc-ja: 「ホスト」言語以外のもので実装することもできる
+---
+(External DSLs)
+# loc-ja: こういうのは外部DSLだ
+---
+Everything I'm going to talk about is Pure Perl (Internal)
+# loc-ja: 今日話すのはPure Perlのもの(だから内部DSLだね)
+---
+The Ruby community is big on DSLs
+# loc-ja: DSLの大家といえばRubyのコミュニティだけど
+---
+You can make DSLs in Perl, too
+# loc-ja: PerlでDSLをつくることもできる
+---
+(but it does take more work in Perl)
+# loc-ja: Perlの方がちょっと手間がかかるけど
+---
+#title How did I get here?
+# loc-ja: ここに至るまでの道のり?
+Airplane
+# loc-ja: 飛行機
+---
+Narita Express
+# loc-ja: それから成田エクスプレス
+---
+Subway
+# loc-ja: それから地下鉄
+---
+Ok, How'd I really get here?
+# loc-ja: 冗談はさておき
+---
+All started at OSCON 2005
+# loc-ja: 発端はOSCON 2005だった
+---
+DHH demonstrated Rails migrations
+# loc-ja: DHHがRailsのマイグレーションのデモを見せてくれたんだけど
+---
+they looked very sexy
+# loc-ja: それが実にイカしていたわけだ
+---
+I was very jealous
+# loc-ja: むちゃくちゃうらやましかった。でも…
+---
+"You can't do this in any other language"
+# loc-ja: 「こんなことほかの言語じゃできないでしょ」
+---
+Never say that to a Perl Hacker
+# loc-ja: Perlハッカーにそんなことを言っちゃいけないよね
+---
+#title Agenda
+# loc-ja: アジェンダ
+We've made some DSLs
+# loc-ja: Best Practical社でもいくつかDSLをつくっている
+---
+One for declaring database schema
+# loc-ja: ひとつはデータベースのスキーマを宣言するためのもの
+---
+(I thought Rails did more. But I never read the manual)
+# loc-ja: Railsはもっといろいろしていたと思うけど、Railsのマニュアルなんて読んだことない
+---
+(It does a lot more than Rails migrations)
+# loc-ja: でも、Railsのマイグレーションよりははるかにいろんなことをしているよ
+---
+One for web templating
+# loc-ja: もうひとつはウェブテンプレート用
+---
+(Yes, another web templating system)
+# loc-ja: そう、またしても新しいウェブテンプレートシステムをつくったんだ
+---
+(Hopefully, this one will provide some closure)
+# loc-ja: できれば今度のはクロージャも使えるようにするつもり
+---
+(You'll see)
+# loc-ja: お楽しみに
+---
+One for making web testing easier
+# loc-ja: もうひとつはライブテストをもっと簡単にするためのもの
+---
+(It's VERY beta)
+# loc-ja: これはほんとにベータなんだけど
+---
+(Perfect for Web 2.0)
+# loc-ja: Web 2.0にはうってつけ
+---
+#title 
+Jifty::DBI::Schema
+---
+#title Jifty::DBI::Schema - The design process
+# loc-ja: Jifty::DBI::Schema ができるまで
+Delarative Syntax for an Object Relational Mapper
+# loc-ja: オブジェクトリレーショナルマッパ用の宣言指向なシンタックス
+---
+Started sketching Jifty::DBI columns
+# loc-ja: Jifty::DBIのカラムをどうするか、ざっと書いてみた
+---
+Started with DBIx::SearchBuilder
+# loc-ja: とりあえずDBIx::SearchBuilderで
+---
+Columns were defined as a hash
+# loc-ja: カラムの定義はハッシュ
+---
+Hashes are ugly
+# loc-ja: でも、ハッシュはダサい
+---
+We spent about a month playing with syntax.
+# loc-ja: 一ヶ月くらいシンタックスをいじっていたかな
+---
+Our first goal was "feels right"
+# loc-ja: 最初のゴールは「これなら悪くない」と思えるようにすること
+---
+Our second goal was "we can implement this"
+# loc-ja: 次のゴールは「これなら実装できる」というものにすること
+---
+I'm going to show you some of our design process
+# loc-ja: じゃあ、どうやってデザインしたか
+---
+(It's a mix of code and IRC)
+# loc-ja: コードとIRCを織りまぜて紹介します
+---
+#mode perl
+$x = Jifty::DBI::SchemaBuilder->new;
+$x->define_blablalb
+$x->bla bla
+---
+#mode perl
+our db_table 'addresses';
+our field name => { 
+	has_type 'varchar'; 
+	has_default 'frank' 
+};
+---
+<chmrr> (by the way, i'm pretty sure we don't get to do the sub-at-the-end thing either... I tried lots of hacky ways to get it working and failed.)
+# loc-ja: ところで「プロトタイプの最後にサブルーチンを入れる」ってできないよね…いろいろハックしてみたけどだめだった
+
+<glasser> yeah, I think we're going to end up having a pseudo-sub that's really a hash behind the scenes 
+# loc-ja: うん、結局疑似subを使うことになりそうだよ。実際にはハッシュなんだけどね
+---
+#mode perl
+{
+    my $s = Jifty::DBI::SG->import_functions;
+    
+    db_table bla bla bla;
+    field bla;
+    field bar;
+} # $s.DESTROY gets called and unimports db_table/field/...
+# loc-ja: ここで$s.DESTROYが呼ばれてdb_table/field/...とかをアンインポートする
+---
+(This was astonishingly close to what we do today.)
+# loc-ja: これはびっくりするほどいまの形に近い
+---
+#mode perl
+my $schema = Jifty::DBI::RecordSchema->new;
+$schema->for_class(__PACKAGE__);
+
+$schema->field name => { 
+	has_type 'varchar'; 
+	has_default 'Frank'
+}
+---
+#mode perl
+
+BEGIN { @ISA = 'Jifty::DBI::Record' }
+use Jifty::DBI::Record; # but this sucks!
+
+use base qw/Jifty::DBI::Record/;
+
+__PACKAGE__->schema_version (0.0001) 
+# (or some other method that does two thing evily).
+# loc-ja: この2つをうまいことしてくれる邪悪な方法はないかな
+---
+<obra> we could tie @ISA
+# loc-ja: @ISAをtieできたらいいんだけどな
+
+<obra> ...I'm kidding
+# loc-ja: …いや、冗談だって
+---
+<obra> we could tie the symbol table
+# loc-ja: シンボルテーブルをtieできたらいいんだけど
+
+<obra> ...It just doesn't work
+# loc-ja: …動かないね
+---
+#mode perl
+use base 'Jifty::DBI::Record';
+Jifty::DBI::Record->___from_code();
+
+db_table 'addresses';
+
+field {
+    called 'name'; # ? 
+}
+--- 
+<glasser> is 
+	
+  "has_type 'string'" 
+
+definitely better than 
+
+  "type => 'string'"  
+
+in your book?
+# loc-ja: "has_type 'string'" より "type => 'string'" の方がずっといいんじゃない?
+---
+<obra> how would you do: 
+# loc-ja: じゃあ、こんなのはどうする?
+
+ refers_to_many RT::Tickets by 'owner';
+
+<Robrt> hmm. i thought about this before.  we can do like simon and
+# loc-ja: 前に考えたことあるけど、simonのようにすればいいかな
+
+ refers_to_many "RT::Tickets by owner";
+
+<Robrt> but I don't really like that.  parsing is lame.
+# loc-ja: でも、あまりよくはないよね。パースなんてしたくない
+
+<Robrt> I'm *pretty* sure that we can't get the line you've written to compile.
+# loc-ja: でも、Jesseが書いたのは絶対にコンパイルできないんじゃないかと思うよ
+---
+<obra> I've got a bad perl5 idea for you. Robert claims it's impossible
+# loc-ja: 悪いことを思いついたんだ。Robertは絶対にできないって言ってるけど
+
+<obra> I'm trying to make the syntax "refers_to_many 'BTDT::Model::Tasks' by 'owner';" valid perl5 syntax.
+# loc-ja: 自分は "refers_to_many 'BTDT::Model::Tasks' by 'owner';" というのをperl5のシンタックスとして通るものにしようと思ってる
+---
+<audreyt> well, that may be true but you don't want that.
+# loc-ja: うーん、それでもいいけど、そんなことしなくてもいいよ
+
+<audreyt> refers_to_many BTDT::Model::Tasks by 'owner'
+
+<audreyt> is more readable and easily implemented.
+# loc-ja: の方が読みやすいし実装しやすいもの
+
+<audreyt> sub by ($) { by => @_ }
+
+<audreyt> done!
+# loc-ja: ほらできた!
+
+<audreyt> stop thinking classes as strings :)
+# loc-ja: クラスを文字列だなんて思わなければいい :)
+---
+<obra> shit! it actually works!
+# loc-ja: なんてこった! ほんとにできてる!
+---
+
+What we had left:
+# loc-ja: そうなると、残るは
+
+the field foo => sub {}; issue
+# loc-ja: field foo => sub {}; の問題か
+--- 
+#mode perl
+
+ # We wanted something that acted like this
+ # But without the ugly 'sub' keyword
+ field email => sub {
+ 
+    has_type 'varchar';
+    has_default 'Frank';
+};
+
+# loc-ja: みっともない'sub'なんてなしでこんな風に動くのがほしいね
+---
+#mode perl
+# We could do this, but it used a hash
+# not a block
+
+field phone => {
+    has_type 'varchar';
+};
+
+field employee_id => {
+    refers_to_a Sample::Employee;
+}
+# loc-ja: こんな風にしてもいいけど、ブロックじゃなくてハッシュになっちゃう
+---
+#mode perl
+
+# This is ugly and verbose
+
+package Sample::Employee;
+
+use base qw/Jifty::DBI::Record/;
+
+__PACKAGE__->db_table 'employees';
+
+__PACKAGE__->field name => has_type 'varchar';
+
+__PACKAGE__->field dexterity =>  { has_type 'integer'};
+
+# loc-ja: これだとみっともないし、くどいな
+---
+#title In the end...
+# loc-ja: 結局…
+
+We ended up with Jifty::DBI columns
+# loc-ja: Jifty::DBIのカラムはこんな風になった
+---
+#mode perl
+use Jifty::DBI::Record schema {
+column auth_token => type is 'text',
+  render as 'Unrendered';
+
+column score => type is 'int',
+  is immutable,
+  label is 'Score';
+
+column time_zone =>
+  label is 'Time zone',
+  since '0.0.12',
+  default is 'America/New_York',
+  valid are formatted_timezones();
+};
+---
+Implemented it twice
+# loc-ja: これ、実は2回実装している
+---
+#title 
+Take 1
+# loc-ja: 最初の実装はこう
+---
+#title Take 1
+# loc-ja: 最初の実装
+Jifty::DBI::Schema
+---
+#title Take 1: Jifty::DBI::Schema
+# loc-ja: 最初の実装: Jifty::DBI::Schema
+Our first DSL in Perl
+# loc-ja: Best Practical社がはじめてPerlで書いたDSL
+---
+We beat the parser into submission with a few tricks
+# loc-ja: パーサに言うことを聞かせるためにいくつかトリックを使ってる
+---
+Injection of functions
+# loc-ja: 関数の埋め込み
+---
+We saw that a moment ago
+# loc-ja: これはさっき見たよね
+---
+Clever function prototypes
+# loc-ja: 上手な関数プロトタイプ
+---
+Let's have a look at that
+# loc-ja: ちょっと説明しよう
+---
+#mode perl
+# The syntax we wanted
+
+score => type is 'int',
+  is immutable,
+  default is '0',
+  render as 'text',
+  label is 'Score',
+  since is '0.0.7';
+# loc-ja: こんなシンタックスにしたい
+---
+#mode perl
+# perl -MO=Deparse parses that as:
+
+'is'->type('int', 
+  'immutable'->is, 
+   'is'->default('0', 
+      'as'->render('text', 
+        'is'->label('Score', 
+          'is'->since('0.0.7')))));
+# loc-ja: perl -MO=Deparse をするとこんな風にパースされてしまう
+---
+How can we fix that?
+# loc-ja: どうすれば直せるだろう?
+---
+Prototype hacking!
+# loc-ja: プロトタイプをハックすればいい!
+---
+#mode perl
+sub is ($) { return shift };
+sub as ($) { return shift };
+sub since ($) { }
+sub type ($) { }
+sub render ($) {}
+sub label ($) {}
+sub default ($) {}
+---
+#mode perl
+
+# Now, perl -MO=Deparse parses that as:
+
+ type(is('int')), 
+ is('immutable'), 
+ default(is('0')), 
+ render(as('text')), 
+ label(is('Score')), 
+ since(is('0.0.7'));
+# loc-ja: これで perl -MO=Deparse はこんな風になる
+---
+Downsides
+# loc-ja: これの欠点
+- Limited flexibility
+# loc-ja: 柔軟性に欠ける
+- Needs new functions for every attribute
+# loc-ja: 属性をつくるたびに新しい関数が必要になる
+---
+#title Take 2
+# loc-ja: 2度目の実装
+#`mpg123  ~/katamari.mp3`
+Object::Declare
+---
+#title Take 2: Object::Declare
+# loc-ja: 2度目の実装: Object::Declare
+Katamari for Code
+# loc-ja: コードの塊
+---
+#mode perl
+use Jifty::DBI::Record schema { 
+
+ column score => type is 'int',
+  is immutable,
+  render as 'text',
+  default is '0',
+  label is 'Score',
+  since is '0.0.7';
+};
+---
+# mode perl
+# perl -MO=Deparse parses that as:
+
+'is'->type('int', 
+  'immutable'->is, 
+   'is'->default('0', 
+      'as'->render('text', 
+	'is'->label('Score', 
+	  'is'->since('0.0.7')))));
+# loc-ja: perl -MO=Deparse するとこんな風になる
+---
+Why fight the parser?
+# loc-ja: どうしてパーサなんて相手にしていたんだろう?
+---
+Perl gives us all the rope we need
+# loc-ja: Perlには必要な手が揃ってるじゃないか
+---
+UNIVERSAL:: and ::AUTOLOAD
+# loc-ja: UNIVERSAL:: と ::AUTOLOAD だ
+---
+What actually happens at compile time:
+
+# loc-ja: これをコンパイルすると、裏ではどんなことが起こるのか?
+---
+The 'schema' function in our baseclass takes a code block
+# loc-ja: ベースクラスの'schema'関数がコードブロックを受け取り
+---
+...and returns a closure
+# loc-ja: クロージャを返す
+---
+Jifty::DBI::Record::import takes over:
+# loc-ja: 続いてJifty::DBI::Record::importが
+---
+it takes the closure
+# loc-ja: そのクロージャを受け取り、
+---
+it installs some methods...
+# loc-ja: いくつかのメソッドをインストールして
+---
+...is::AUTOLOAD and UNIVERSAL::is and as::AUTOLOAD
+# loc-ja: is::AUTOLOAD とか UNIVERSAL::is とか as::AUTOLOAD とかね
+---
+it runs the closure
+# loc-ja: クロージャを実行して
+---
+it hands the result off to a method of your choice
+# loc-ja: 結果をお望みのメソッドに渡す
+---
+it removes its magic symbols
+# loc-ja: それからマジックシンボルを削除して
+---
+...and then your program gets control back
+# loc-ja: プログラムにコントロールを戻す
+---
+#title Jifty::DBI::Schema - end
+# loc-ja: Jifty::DBI::Schema - おしまい
+That's Jifty::DBI::Schema.
+# loc-ja: Jifty::DBI::Schema はこんな感じ
+---
+#title
+Template::Declare
+---
+#title Template::Declare
+A pure Perl Templating Language
+# loc-ja: pure Perlのテンプレート言語
+---
+What it looks like
+# loc-ja: こんなの
+---
+#mode perl
+template '/pages/mypage.html' => sub {
+    html {
+        head {};
+        body {
+            h1 {'Hey, this is text'};
+            }
+        }
+};
+---
+But! 
+# loc-ja: でもね!
+---
+Content! Templates! 
+# loc-ja: コンテンツ! テンプレート!
+---
+Design! Code!
+# loc-ja: デザイン! コード!
+---
+OMGWTF!? THAT'S WRONG!
+# loc-ja: なんだって!? 冗談じゃない!
+---
+The person who told you it's wrong was lying to you.
+# loc-ja: みなさんにこういうのはダメだなんて言った人は嘘つきです
+---
+We're perl hackers
+# loc-ja: 私たちはperlハッカーなんだから
+---
+Why are we writing our templates in another language?
+# loc-ja: どうしてほかの言語でテンプレートを書かなきゃいけないの?
+---
+This is not 1997
+# loc-ja: 1997年じゃないんだよ
+---
+It's 2007
+# loc-ja: 2007年なんだから
+---
+People use CSS for design now.
+# loc-ja: CSS使ってデザインしてるでしょ
+---
+Programmers still have to make templates
+# loc-ja: それでもプログラマはテンプレートをつくらないといけないけど
+---
+Templates run like CODE
+# loc-ja: テンプレートはコードのような働きをするもの
+---
+Because they ARE code
+# loc-ja: だって、実際コードだからね
+---
+Let's use our CODING tools to work with them.
+# loc-ja: それならコードを書くときに使う道具でなんとかしよう
+---
+#mode perl
+#title Refactoring
+# loc-ja: リファクタリング
+
+template 'mypage.html' => page {
+ h1 { 'Two choices' };
+ div { attr { class => 'item' };
+       h2 { 'Item 1'};
+  };
+ div { attr { class => 'item' };
+       h2 { 'Item 2'};
+  };
+}; 
+---
+#title Refactoring
+# loc-ja: リファクタリング
+#mode perl
+
+template 'mypage.html' => page {
+ h1 { 'Two choices' };
+ for ("Item 1", "Item 2") { item($_); }
+};
+
+sub item {
+    my $content = shift;
+    div {
+        attr { class => 'item' };
+        h2 {$content};
+    };
+
+}
+---
+We can refactor templates!
+# loc-ja: テンプレートのリファクタリングもできるよ!
+---
+Have you ever tried to refactor HTML?
+# loc-ja: HTMLのリファクタリングなんてしたことある?
+---
+Our HTML is magically valid.
+# loc-ja: うちのHTMLは魔法がかかっているからいつでも正しい
+(Syntax errors are...Syntax Errors)
+# loc-ja: シンタックスエラーは…シンタックスエラーになる
+---
+#title Stashing our templates
+# loc-ja: テンプレートをスタッシュに入れよう
+#mode perl
+template '/foo/index.html' => sub {... };
+---
+'sub template' takes a name and a coderef
+# loc-ja: 'sub template'はテンプレート名とコードリファレンスを取る
+---
+But where do we put these?
+# loc-ja: でも、これをどこに入れよう?
+---
+We need a global stash.
+# loc-ja: グローバルなスタッシュが要るね
+---
+It needs to be per package 
+# loc-ja: パッケージ単位でなくちゃいけない
+(Don't want to mix things together)
+# loc-ja: ごちゃまぜにはしたくないから
+---
+Basically, we need a symbol table
+# loc-ja: 基本的にはシンボルテーブルがあればいいわけだけれど
+---
+It's Perl
+# loc-ja: Perlなんだから
+---
+We have THE symbol table
+# loc-ja: シンボルテーブルそのものはある
+---
+But URLs have characters that are illegal in sub names. :/
+# loc-ja: ただ、URLには関数名としては不適切な文字が含まれているんだよね :/
+---
+Actually, Perl doesn't care
+# loc-ja: でも、実はこれ、Perlは気にしない
+---
+#mode perl
+    no strict 'refs';
+    *{ $class . '::' . $subname } = $coderef;}
+---
+That just works.
+# loc-ja: これで問題なく動いてしまう
+---
+Even if your sub is named './\\foo#title <>'
+# loc-ja: サブルーチンの名前が'./\\foo#title <>'だったとしてもだ
+---
+But how do you call it?
+# loc-ja: でも、そんなのどうやって呼び出せばいい?
+---
+# perldoc UNIVERSAL
+
+CLASS->can( METHOD )
+"can" checks if the object or class has a method called "METHOD".
+If it does then a reference to the sub is returned.
+# loc-ja: "can"はオブジェクトないしクラスが"METHOD"というメソッドを持っているかチェックして、持っている場合はそのサブルーチンへのリファレンスを返します
+---
+#title Closures
+# loc-ja: クロージャ
+Now, about that syntax.
+# loc-ja: 今度はそのシンタックスの話
+---
+HTML tags take blocks of content.
+# loc-ja: HTMLタグはコンテンツのブロックを取る
+---
+Our tag methods take blocks of perl.
+# loc-ja: うちのタグメソッドはperlのブロックを取る
+---
+They return closures when you want them to
+# loc-ja: そうしたければクロージャを返させることもできる
+---
+#mode perl
+sub h1 (&;$) {
+  my $code = shift;
+  
+  ...
+
+  if (defined wantarray) {
+    return sub { ...closure around $code...};
+  } else {
+    # Actually do our work, run $code and return the output
+  }
+}
+---
+We install methods for every HTML tag
+# loc-ja: うちのはあらゆるHTMLタグにメソッドをインストールする
+---
+(Except 'tr'. Anybody know why?)
+# loc-ja: 'tr' 以外ね。理由はわかる?
+---
+#mode perl
+use CGI ();
+install_tag($_) 
+  for ( @CGI::EXPORT_TAGS{
+	qw/:html2 :html3 :html4 
+	   :netscape :form/}
+);
+---
+#title Not everything is roses
+# loc-ja: すべてがバラ色というわけではない
+(Here's where it all goes wrong)
+# loc-ja: ここがみんなハマるところだ
+---
+HTML Attributes
+# loc-ja: HTMLアトリビュート
+---
+# mode perl
+# What we've got:
+
+div { 
+        attr { id => 'my-div'};
+    ...
+};
+
+# and
+
+with ( id => 'my-div'), div {
+...
+};
+# loc-ja: こんな風にはできていた
+---
+# mode perl
+# What I think I'd like:
+
+div ( id => 'my-div' ), { 
+... 
+}
+# loc-ja: こうしたいな
+---
+So, what's the big problem?
+# loc-ja: ここで大きな問題になったのは
+---
+Just change the prototype.
+# loc-ja: 単にプロトタイプを変えるだけだと
+---
+In Perl, the (&) in a prototype
+may ONLY come first. 
+# loc-ja: Perlの場合、プロトタイプの(&)は最初に「しか」置けないということだ
+---
+ORZ
+---
+Can anybody help me?
+# loc-ja: 誰か名案ない?
+---
+#title Template::Declare - end
+# loc-ja: Template::Declare - おしまい
+That's Template::Declare
+# loc-ja: Template::Declareについてはこの辺で
+---
+#title 
+Test::WWW::Declare
+---
+#title Test::WWW::Declare
+A language for testing web applications
+# loc-ja: ウェブアプリケーションのテスト用言語
+---
+In early development
+# loc-ja: 開発は始まったばかりなので
+---
+It might change
+# loc-ja: 内容は変わるかも
+---
+Web test scripts are UGLY
+# loc-ja: ウェブテストスクリプトってほんとに汚いよね
+---
+Test::WWW::Declare is PRETTY
+# loc-ja: Test::WWW::Declareはきれいだ
+---
+Simple, declarative web testing
+# loc-ja: シンプルな、宣言指向のウェブテスト
+---
+Easy to read
+# loc-ja: 読みやすい
+---
+Easy to write
+# loc-ja: 書きやすい
+---
+Looks more like what users do
+# loc-ja: ユーザがしている通りに見える
+---
+#mode perl
+# Test::WWW::Mechanize
+
+my $server=Jifty::Test->make_server;
+isa_ok($server, 'Jifty::Server');
+my $URL = $server->started_ok;
+my $mech = Jifty::Test::WWW::Mechanize->new;
+$mech->get_html_ok($URL);
+like($mech->uri, qr{splash}, 
+     'Redirected to splash page');
+---
+The insides are great
+# loc-ja: 中身はすごいよ
+---
+The syntax ain't
+# loc-ja: シンタックスはそうでもない
+---
+We built on Test::More and WWW::Mechanize
+# loc-ja: これ、Test::More と WWW::Mechanize が下敷きになっている
+---
+#mode perl
+
+# Test::WWW::Declare
+
+session "search" => run {
+    flow "google searches work" => check {
+        get 'http://google.com/ncr'; 
+        fill form 'f' => { 
+		q   => 'Squeamish ossifrage' };
+        click button 'Google Search';
+    }
+};
+---
+Regular tests keep running on failure
+# loc-ja: 通常のテストはテストがコケても走り続ける
+---
+Makes no sense when a failure means you lose context
+# loc-ja: でも、コケたときにコンテキストが失われるようなら意味がないので
+---
+Every 'check' block aborts on failure
+# loc-ja: 'check'ブロックがコケたらテストを中断する
+---
+Abort means 'failing test'
+# loc-ja: もっとも、中断したからって「テストがコケた」ということにはならない
+---
+Every 'session' has a cookie jar and WWW::Mechanize
+# loc-ja: 'session'にはかならずクッキージャーと WWW::Mechanize が含まれている
+---
+#mode perl
+session "check logins" => run {
+    flow "basic connectivity" => check {
+        get 'http://fsck.com';
+        content should match qr{fsck.com};
+        click href qr{book};
+        content should match qr{RT Essentials}i;
+    };
+};
+---
+What's the weird syntax?
+# loc-ja: なに、この妙なシンタックス?
+---
+# mode perl
+content should match qr{RT Essentials}i;
+---
+#mode perl
+content should match qr{RT Essentials}i;
+
+#   vs
+
+ok($req->content =~ /RT Essentials/i);
+---
+# mode perl
+# How do we make this valid perl?
+# loc-ja: どうすればこれを正しいperlスクリプトにできるだろう
+
+content should match qr{RT Essentials}i;
+---
+Prototypes
+# loc-ja: プロトタイプだ
+---
+#mode perl
+sub match ($) {
+    return shift;
+}   
+---
+#mode perl
+sub should ($) {
+    my $item = shift;
+    return $item;
+}
+---
+#mode perl
+sub content ($) { 
+    my $regex = shift;
+    unless ( mech()->content =~ /$regex/ ) {
+        die "Content did not match $regex";
+    }
+}
+---
+#title Test::WWW::Declare - end
+# loc-ja: Test::WWW::Declare - おしまい
+That's Test::WWW::Declare
+# loc-ja: Test::WWW::Declare はこの辺で
+---
+#title Conclusion
+# loc-ja: 結論
+Creating DSLs is lots of fun
+# loc-ja: DSLをつくるのはとってもおもしろい
+---
+Creating DSLs can be a lot of work
+# loc-ja: DSLをつくるのはとっても大変なこともあるけど
+---
+Creating DSLs helps you learn Perl internals
+# loc-ja: DSLをつくるとPerlの内部の勉強になる
+---
+Creating DSLs helps find bugs in Perl
+# loc-ja: DSLをつくるとPerlのバグが見つかったりもする
+---
+DSLs can make coding more fun
+# loc-ja: DSLはコーディングをもっと楽しくする
+---
+Challenge: CPAN some Japanese DSLs
+# loc-ja: 宿題: CPANに日本語のDSLをアップしてくださいね
+---
+Thanks
+# loc-ja: ご静聴ありがとう
+---

Added: jifty/branches/virtual-models/doc/talks/yapc.asia.2007.txt
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/doc/talks/yapc.asia.2007.txt	Mon May  7 16:28:32 2007
@@ -0,0 +1,757 @@
+#title Jesse Vincent - Best Practical
+Domain Specific Languages in Perl
+---
+#title A bit about DSLs
+DSLs are little languages for specific programming tasks
+---
+DSLs are easier to read
+---
+DSLs are  more expressive
+---
+DSLs let you optimize your code for coding
+---
+Mostly, I'm going to talk about "Englishy" DSLs
+---
+Not all DSLs are Englishy
+---
+SQL
+---
+Regexes
+---
+Excel Macros
+---
+XML config files
+---
+XSL-T
+---
+GraphViz
+---
+...but I've been on an Englishy DSL kick
+---
+DSLs can be implemented in your 'host' language
+---
+(These get called "internal" DSLs)
+---
+DSLs can be implemented outside your 'host' langauge
+---
+(External DSLs)
+---
+Everything I'm going to talk about is Pure Perl (Internal)
+---
+The Ruby community is big on DSLs
+---
+You can make DSLs in Perl, too
+---
+(but it does take more work in Perl)
+---
+How did I get here?
+---
+#title How did I get here?
+Airplane
+---
+Narita Express
+---
+Subway
+---
+Ok, How'd I really get here?
+---
+All started at OSCON 2005
+---
+DHH demonstrated Rails migrations
+---
+They looked very sexy
+---
+I was very jealous
+---
+"You can't do this in any other language"
+---
+Never say that to a Perl Hacker
+---
+#title Agenda
+We've made some DSLs
+---
+One for declaring database schema
+---
+(I thought Rails did more. But I never read the manual)
+---
+(It does a lot more than Rails migrations)
+---
+One for web templating
+# loc-ja じゃあいったいどうして?!
+---
+(Yes, another web templating system)
+---
+(Hopefully, this one will provide some closure)
+---
+(You'll see)
+---
+One for making web testing easier
+---
+(It's VERY beta)
+---
+(Perfect for Web 2.0)
+---
+#title
+Jifty::DBI::Schema
+---
+#title Jifty::DBI::Schema - The design process
+Delarative Syntax for an Object Relational Mapper
+---
+Started sketching Jifty::DBI columns
+---
+Started with DBIx::SearchBuilder
+---
+Columns were defined as a hash
+---
+Hashes are ugly
+---
+We spent about a month playing with syntax.
+---
+Our first goal was "feels right"
+---
+Our second goal was "we can implement this"
+---
+I'm going to show you some of our design process
+---
+(It's a mix of code and IRC)
+---
+#mode perl
+$x = Jifty::DBI::SchemaBuilder->new;
+$x->define_blablalb
+$x->bla bla
+---
+#mode perl
+our db_table 'addresses';
+our field name => { 
+	has_type 'varchar'; 
+	has_default 'frank' 
+};
+---
+<chmrr> (by the way, i'm pretty sure we don't get to do the sub-at-the-end thing either... I tried lots of hacky ways to get it working and failed.)
+
+<glasser> yeah, I think we're going to end up having a pseudo-sub that's really a hash behind the scenes 
+---
+#mode perl
+{
+    my $s = Jifty::DBI::SG->import_functions;
+    
+    db_table bla bla bla;
+    field bla;
+    field bar;
+} # $s.DESTROY gets called and unimports db_table/field/...
+---
+(This was astonishingly close to what we do today.)
+---
+#mode perl
+my $schema = Jifty::DBI::RecordSchema->new;
+$schema->for_class(__PACKAGE__);
+
+$schema->field name => { 
+	has_type 'varchar'; 
+	has_default 'Frank'
+}
+
+---
+#mode perl
+
+BEGIN { @ISA = 'Jifty::DBI::Record' }
+use Jifty::DBI::Record; # but this sucks!
+
+use base qw/Jifty::DBI::Record/;
+
+__PACKAGE__->schema_version (0.0001) 
+# (or some other method that does two thing evily).
+---
+<obra> we could tie @ISA
+
+<obra> ...I'm kidding
+---
+<obra> we could tie the symbol table
+
+<obra> ...It just doesn't work
+---
+#mode perl
+use base 'Jifty::DBI::Record';
+Jifty::DBI::Record->___from_code();
+
+db_table 'addresses';
+
+field {
+    called 'name'; # ? 
+}
+--- 
+<glasser> is 
+	
+  "has_type 'string'" 
+
+definitely better than 
+
+  "type => 'string'"  
+
+in your book?
+---
+<obra> how would you do: 
+
+ refers_to_many RT::Tickets by 'owner';
+
+<Robrt> hmm. i thought about this before.  we can do like simon and
+
+ refers_to_many "RT::Tickets by owner";
+
+<Robrt> but I don't really like that.  parsing is lame.
+
+<Robrt> I'm *pretty* sure that we can't get the line you've written to compile.
+---
+<obra> I've got a bad perl5 idea for you. Robert claims it's impossible
+
+<obra> I'm trying to make the syntax "refers_to_many 'BTDT::Model::Tasks' by 'owner';" valid perl5 syntax.
+---
+<audreyt> well, that may be true but you don't want that.
+
+<audreyt> refers_to_many BTDT::Model::Tasks by 'owner'
+
+<audreyt> is more readable and easily implemented.
+
+<audreyt> sub by ($) { by => @_ }
+
+<audreyt> done!
+
+<audreyt> stop thinking classes as strings :)
+---
+<obra> shit! it actually works!
+---
+What we had left:
+---
+the "field foo => sub {};" issue
+--- 
+#mode perl
+
+ # We wanted something that acted like this
+ # But without the ugly 'sub' keyword
+ field email => sub {
+ 
+    has_type 'varchar';
+    has_default 'Frank';
+};
+
+---
+#mode perl
+# We cculd do this, but it used a hash
+# not a block
+
+field phone => {
+    has_type 'varchar';
+};
+
+field employee_id => {
+    refers_to_a Sample::Employee;
+}
+---
+#mode perl
+
+# This is ugly and verbose
+
+package Sample::Employee;
+
+use base qw/Jifty::DBI::Record/;
+
+__PACKAGE__->db_table 'employees';
+
+__PACKAGE__->field name => has_type 'varchar';
+
+__PACKAGE__->field dexterity =>  { has_type 'integer'};
+
+---
+#title In the end...
+We ended up with Jifty::DBI columns
+---
+#mode perl
+use Jifty::DBI::Record schema {
+column auth_token => type is 'text',
+  render as 'Unrendered';
+
+column score => type is 'int',
+  is immutable,
+  label is 'Score';
+
+column time_zone =>
+  label is 'Time zone',
+  since '0.0.12',
+  default is 'America/New_York',
+  valid are formatted_timezones();
+};
+---
+We implemented the DSL twice
+---
+#title 
+Take 1
+---
+#title Take 1
+Jifty::DBI::Schema
+---
+#title Take 1: Jifty::DBI::Schema
+Our first DSL in Perl
+---
+We beat the parser into submission with a few tricks
+---
+Injection of functions
+---
+We saw that a moment ago
+---
+Clever function prototypes
+---
+Let's have a look at that
+---
+#mode perl
+# The syntax we wanted
+
+score => type is 'int',
+  is immutable,
+  default is '0',
+  render as 'text',
+  label is 'Score',
+  since is '0.0.7';
+---
+#mode perl
+# perl -MO=Deparse parses that as:
+
+'is'->type('int', 
+  'immutable'->is, 
+   'is'->default('0', 
+      'as'->render('text', 
+        'is'->label('Score', 
+          'is'->since('0.0.7')))));
+---
+How can we fix that?
+---
+Prototype hacking!
+---
+#mode perl
+sub is ($) { return shift };
+sub as ($) { return shift };
+sub since ($) { }
+sub type ($) { }
+sub render ($) {}
+sub label ($) {}
+sub default ($) {}
+---
+#mode perl
+
+# Now, perl -MO=Deparse parses that as:
+
+ type(is('int')), 
+ is('immutable'), 
+ default(is('0')), 
+ render(as('text')), 
+ label(is('Score')), 
+ since(is('0.0.7'));
+---
+Downsides
+---
+Limited flexibility
+---
+Needs new functions for every attribute
+---
+#title Take 2
+#`mpg123  ~/katamari.mp3`
+Object::Declare
+---
+#title Take 2: Object::Declare
+Katamari for Code
+---
+#mode perl
+use Jifty::DBI::Record schema { 
+
+ column score => type is 'int',
+  is immutable,
+  render as 'text',
+  default is '0',
+  label is 'Score',
+  since is '0.0.7';
+};
+---
+# mode perl
+# perl -MO=Deparse parses that as:
+
+'is'->type('int', 
+  'immutable'->is, 
+   'is'->default('0', 
+      'as'->render('text', 
+	'is'->label('Score', 
+	  'is'->since('0.0.7')))));
+---
+Why fight the parser?
+---
+Perl gives us all the rope we need
+---
+UNIVERSAL:: and ::AUTOLOAD
+---
+What actually happens at compile time:
+
+---
+The 'schema' function in our baseclass takes a code block
+---
+...and returns a closure
+---
+Jifty::DBI::Record::import takes over:
+---
+it takes the closure
+---
+it installs some methods...
+---
+...is::AUTOLOAD and UNIVERSAL::is and as::AUTOLOAD
+---
+it runs the closure
+---
+it hands the result off to a method of your choice
+---
+it removes its magic symbols
+---
+...and then your program gets control back
+---
+#title Jifty::DBI::Schema - end
+That's Jifty::DBI::Schema.
+---
+#title
+Template::Declare
+---
+#title Template::Declare
+A pure Perl Templating Language
+---
+What it looks like
+---
+#mode perl
+template '/pages/mypage.html' => sub {
+    html {
+        head {};
+        body {
+            h1 {'Hey, this is text'};
+            }
+        }
+};
+---
+#mode perl
+template choices => page {
+    h1 { 'My Choices' }
+    dl {
+        my $choices = Doxory::Model::ChoiceCollection->new;
+        $choices->limit(
+            column => 'asked_by',
+            value  => Jifty->web->current_user->id,
+        );
+        while (my $c = $choices->next) {
+            dt { $c->name, ' (', $c->asked_by->name, ')' }
+            dd { b { $c->a } em { 'vs' } b { $c->b } }
+        }
+    }
+};
+---
+But! 
+---
+Content! Templates! 
+---
+Design! Code!
+---
+OMGWTF!? THAT'S WRONG!
+---
+The person who told you it's wrong was lying to you.
+---
+We're Perl hackers
+---
+Why are we writing our templates in another language?
+---
+This is not 1997
+---
+It's 2007
+---
+People use CSS for design now
+---
+Programmers still have to make templates
+---
+Templates run like CODE
+---
+Because they ARE code
+---
+Let's use our CODING tools to work with them
+---
+#mode perl
+#title Refactoring
+
+template 'mypage.html' => page {
+ h1 { 'Two choices' };
+ div { attr { class => 'item' };
+       h2 { 'Item 1'};
+  };
+ div { attr { class => 'item' };
+       h2 { 'Item 2'};
+  };
+}; 
+---
+#title Refactoring
+#mode perl
+
+template 'mypage.html' => page {
+ h1 { 'Two choices' };
+ for ("Item 1", "Item 2") { item($_); }
+};
+
+sub item {
+    my $content = shift;
+    div {
+        attr { class => 'item' };
+        h2 {$content};
+    };
+
+}
+---
+We can refactor templates!
+---
+Have you ever tried to refactor HTML?
+---
+Our HTML is magically valid
+---
+(Syntax errors are...Syntax Errors)
+---
+#title Stashing our templates
+#mode perl
+template '/foo/index.html' => sub {... };
+---
+'sub template' takes a name and a coderef
+---
+But where do we put these?
+---
+We need a global stash
+---
+It needs to be per package 
+(Don't want to mix things together)
+---
+Basically, we need a symbol table
+---
+It's Perl
+---
+We have THE symbol table
+---
+But URLs have characters that are illegal in sub names. :/
+---
+Actually, Perl doesn't care
+---
+#mode perl
+no strict 'refs';
+*{ $class . '::' . $subname } = $coderef;
+---
+That just works.
+---
+Even if your sub is named './\\foo#title <>'
+---
+But how do you call it?
+---
+#mode perl
+# perldoc UNIVERSAL
+---
+CLASS->can( METHOD )
+"can" checks if the object or class has a method called "METHOD".
+If it does then a reference to the sub is returned.
+---
+#title Closures
+Now, about that syntax.
+---
+HTML tags take blocks of content
+---
+Our tag methods take blocks of Perl
+---
+They return closures when you want them to
+---
+They run and output their content when you want them to
+---
+#mode perl
+sub h1 (&;$) {
+  my $code = shift;
+  
+  ...
+
+  if (defined wantarray) {
+    return sub { ...closure around $code...};
+  } else {
+    # Actually do our work, run $code and return the output
+    return $code->();
+  }
+}
+---
+We install methods for every HTML tag
+---
+(Except 'tr'. Anybody know why?)
+---
+#mode perl
+use CGI ();
+install_tag($_) 
+  for ( @CGI::EXPORT_TAGS{
+	qw/:html2 :html3 :html4 
+	   :netscape :form/}
+);
+---
+#title Not everything is roses
+(Here's where it all goes wrong)
+---
+HTML Attributes
+---
+# mode perl
+# What we've got:
+
+div { attr { id => 'my-div'};
+      ...
+};
+
+# and
+
+with ( id => 'my-div'), div {
+...
+};
+---
+# mode perl
+# What I think I'd like:
+
+div ( id => 'my-div' ), { 
+... 
+}
+---
+So, what's the big problem?
+---
+Just change the prototype
+---
+In Perl, the (&) in a prototype MUST come first
+---
+ORZ
+---
+Can anybody help me?
+---
+#title Template::Declare - end
+That's Template::Declare
+---
+#title 
+Test::WWW::Declare
+---
+#title Test::WWW::Declare
+A language for testing web applications
+---
+In early development
+---
+It might change
+---
+Web test scripts are UGLY
+---
+Test::WWW::Declare is PRETTY
+---
+Simple, declarative web testing
+---
+Easy to read
+---
+Easy to write
+---
+Looks more like what users do
+---
+#mode perl
+# Test::WWW::Mechanize
+
+my $server=Jifty::Test->make_server;
+isa_ok($server, 'Jifty::Server');
+my $URL = $server->started_ok;
+my $mech = Jifty::Test::WWW::Mechanize->new;
+$mech->get_html_ok($URL);
+like($mech->uri, qr{splash}, 
+     'Redirected to splash page');
+---
+The insides are great
+---
+The syntax ain't
+---
+We built on Test::More and WWW::Mechanize
+---
+#mode perl
+
+# Test::WWW::Declare
+
+session "search" => run {
+    flow "google searches work" => check {
+        get 'http://google.com/ncr'; 
+        fill form 'f' => { 
+		q   => 'Squeamish ossifrage' };
+        click button 'Google Search';
+    }
+};
+---
+Regular tests keep running on failure
+---
+Makes no sense when a failure means you lose context
+---
+Every 'check' block aborts on failure
+---
+Abort means 'failing test'
+---
+Every 'session' has a cookie jar and WWW::Mechanize
+---
+#mode perl
+session "check logins" => run {
+    flow "basic connectivity" => check {
+        get 'http://fsck.com';
+        content should match qr{fsck.com};
+        click href qr{book};
+        content should match qr{RT Essentials}i;
+    };
+};
+---
+What's the weird syntax?
+---
+# mode perl
+content should match qr{RT Essentials}i;
+---
+#mode perl
+content should match qr{RT Essentials}i;
+
+#   vs
+
+ok($req->content =~ /RT Essentials/i);
+---
+# mode perl
+# How do we make this valid perl?
+
+content should match qr{RT Essentials}i;
+---
+Prototypes
+---
+#mode perl
+sub match ($) {
+    return shift;
+}   
+---
+#mode perl
+sub should ($) {
+    my $item = shift;
+    return $item;
+}
+---
+#mode perl
+sub content ($) { 
+    my $regex = shift;
+    unless ( mech()->content =~ /$regex/ ) {
+        die "Content did not match $regex";
+    }
+}
+---
+#title Test::WWW::Declare - end
+That's Test::WWW::Declare
+---
+#title Conclusion
+Creating DSLs is lots of fun
+---
+Creating DSLs can be a lot of work
+---
+Creating DSLs helps you learn Perl internals
+---
+Creating DSLs helps find bugs in Perl
+---
+DSLs can make coding more fun
+---
+Challenge: CPAN some Japanese DSLs
+---
+Thanks
+---

Added: jifty/branches/virtual-models/doc/talks/yapcasia2007-doxory.key.tbz2
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/doc/talks/yapcasia2007-doxory.pdf
==============================================================================
Binary files (empty file) and jifty/branches/virtual-models/doc/talks/yapcasia2007-doxory.pdf	Mon May  7 16:28:32 2007 differ

Added: jifty/branches/virtual-models/examples/Doxory/Makefile.PL
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Doxory/Makefile.PL	Mon May  7 16:28:32 2007
@@ -0,0 +1,8 @@
+use inc::Module::Install;
+
+name        'Doxory';
+version     '0.01';
+requires    'Jifty' => '0.70117';
+requires    'Regexp::Common::profanity_us';
+
+WriteAll;

Added: jifty/branches/virtual-models/examples/Doxory/bin/jifty
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Doxory/bin/jifty	Mon May  7 16:28:32 2007
@@ -0,0 +1,15 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+use File::Basename qw(dirname); 
+use UNIVERSAL::require;
+
+BEGIN {
+    Jifty::Util->require or die $UNIVERSAL::require::ERROR;
+    my $root = Jifty::Util->app_root;
+    unshift @INC, "$root/lib" if ($root);
+}
+
+use Jifty::Script;
+local $SIG{INT} = sub { warn "Stopped\n"; exit; };
+Jifty::Script->dispatch();

Added: jifty/branches/virtual-models/examples/Doxory/doxory
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/examples/Doxory/etc/config.yml
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Doxory/etc/config.yml	Mon May  7 16:28:32 2007
@@ -0,0 +1,50 @@
+--- 
+framework: 
+  SkipAccessControl: 1
+  AdminMode: 1
+  ApplicationClass: Doxory
+  ApplicationName: Doxory
+  ApplicationUUID: 181049AC-E029-11DB-A5EB-227D19064FA1
+  Database: 
+    CheckSchema: 1
+    Database: doxory
+    Driver: SQLite
+    Host: localhost
+    Password: ''
+    RecordBaseClass: Jifty::DBI::Record::Cachable
+    User: ''
+    Version: 0.0.1
+  DevelMode: 1
+  L10N: 
+    PoDir: share/po
+  LogLevel: INFO
+  Mailer: Sendmail
+  MailerArgs: []
+
+  Plugins: 
+    - SkeletonApp: {}
+    - REST: {}
+    - Halo: {}
+    - ErrorTemplates: {}
+    - CompressedCSSandJS: {}
+    - Authentication::Password: {}
+
+  PubSub: 
+    Backend: Memcached
+    Enable: ~
+  TemplateClass: Doxory::View
+  SkipAccessControl: 1
+  Web: 
+    BaseURL: http://localhost
+    DataDir: var/mason
+    Globals: []
+
+    MasonConfig: 
+      autoflush: 0
+      default_escape_flags: h
+      error_format: text
+      error_mode: fatal
+    Port: 8888
+    ServeStaticFiles: 1
+    StaticRoot: share/web/static
+    TemplateRoot: share/web/templates

Added: jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Dispatcher.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Dispatcher.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,43 @@
+package Doxory::Dispatcher;
+use strict;
+use warnings;
+use Jifty::Dispatcher -base;
+
+before '*' => run {
+    if (Jifty->web->current_user->id) {
+        my $top = Jifty->web->navigation;
+        $top->child( _('Pick!')    => url => '/pick' );
+        $top->child( _('Choices')  => url => '/choices' );
+    }
+    elsif ($1 !~ /^login|^signup/) {
+        tangent 'login';
+    }
+};
+
+#on '/' => show 'new_choice';
+
+on pick => run {
+    my $choices = Doxory::Model::ChoiceCollection->new;
+    my $votes   = $choices->join(
+        type    => 'left',
+        alias1  => 'main',  column1 => 'id',
+        table2  => 'votes', column2 => 'choice',
+    );
+    $choices->limit(
+        leftjoin => $votes, column => 'voter',
+        value    => Jifty->web->current_user->id,
+    );
+    $choices->limit(
+        alias    => $votes, column => 'voter',
+        operator => 'IS',   value => 'NULL',
+    );
+
+    if (my $c = $choices->first) {
+        set choice => $c;
+    }
+    else {
+        show 'nothing_to_pick';
+    }
+};
+
+1;

Added: jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Model/Choice.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Model/Choice.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,64 @@
+use strict;
+use warnings;
+
+package Doxory::Model::Choice;
+use Jifty::DBI::Schema;
+
+use Doxory::Record schema {
+    column name =>
+        label is _('I need help deciding...'),
+        render as 'textarea';
+
+    column a =>
+        label is _('On the one hand'),
+        render as 'textarea',
+        is mandatory;
+
+    column b =>
+        label is _('On the other hand'),
+        render as 'textarea',
+        is mandatory;
+
+    column asked_by =>
+        label is _('Asked by'),
+        default is defer { Jifty->web->current_user->id },
+        references Doxory::Model::User;
+};
+use Regexp::Common 'profanity_us';
+
+sub validate_name {
+    my ($self, $name) = @_;
+    if ($name =~ /$RE{profanity}/i) {
+        return (0, 'Would you speak like that in front of your mother? *cough*');
+    }
+    return 1;
+}
+
+sub canonicalize_name {
+    my ($self, $name) = @_;
+
+    $name =~ s/$RE{profanity}/**expletives**/gi;
+    return $name;
+}
+
+sub in_favor_of_a {
+    my $self = shift;
+    $self->in_favor_of('a');
+}
+
+sub in_favor_of_b {
+    my $self = shift;
+    $self->in_favor_of('b');
+}
+
+sub in_favor_of {
+    my $self = shift;
+    my $suggestion = shift;
+    my $votes = Doxory::Model::VoteCollection->new();
+    Carp::cluck unless ($self->id);
+    $votes->limit(column => 'choice', value => $self->id);
+    $votes->limit(column => 'suggestion' => value => $suggestion);
+    return $votes;
+}
+
+1;

Added: jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Model/User.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Model/User.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,27 @@
+use strict;
+use warnings;
+
+package Doxory::Model::User;
+use Jifty::DBI::Schema;
+
+use Doxory::Record schema {
+
+column name =>
+    label is 'Username',
+    hints is 'Other people see this when you ask questions.',
+    is distinct, is mandatory;
+
+column email =>
+    label is 'Email',
+    hints is 'We will not sell it to anybody. Honest.',
+    default is '',
+    is distinct, is immutable;
+
+};
+
+use Jifty::Plugin::User::Mixin::Model::User;
+use Jifty::Plugin::Authentication::Password::Mixin::Model::User;
+
+# Your model-specific methods go here.
+1;
+

Added: jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Model/Vote.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Doxory/lib/Doxory/Model/Vote.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,22 @@
+use strict;
+use warnings;
+
+package Doxory::Model::Vote;
+use Jifty::DBI::Schema;
+
+use Doxory::Record schema {
+    column choice =>
+        references Doxory::Model::Choice;
+
+    column voter =>
+        references Doxory::Model::User;
+
+    column suggestion =>
+        valid are qw( a b skip );
+
+    column comments =>
+        label is _('Comments?'),
+        render as 'textarea';
+};
+
+1;

Added: jifty/branches/virtual-models/examples/Doxory/lib/Doxory/View.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Doxory/lib/Doxory/View.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,84 @@
+package Doxory::View;
+use utf8;
+use strict;
+use warnings;
+use Jifty::View::Declare -base;
+
+template '/' => page {
+    h1 { _('Ask a question!') }
+    div { show 'new_choice' }
+};
+
+private template new_choice => sub {
+    form {
+        my $action = new_action( class => 'CreateChoice' );
+        render_action( $action => ['name', 'a', 'b'] );
+        form_submit( label => _('Ask the crowd!') );
+    }
+};
+
+template choices => page {
+    h1 { 'My Choices' }
+    dl {
+        my $choices = Doxory::Model::ChoiceCollection->new;
+        $choices->limit(
+            column  => 'asked_by',
+            value   => Jifty->web->current_user->id,
+        );
+        while (my $c = $choices->next) {
+            dt { $c->name, ' (', $c->asked_by->name, ')' }
+            dd { 
+            b { $c->a, ' (', $c->in_favor_of_a->count, ')' }
+            em { 'vs' }
+            b { $c->b, ' (', $c->in_favor_of_b->count, ')' }
+            }
+        }
+    }
+};
+
+template pick => page {
+    my $choice = get('choice');
+    my $action = new_action( class => 'CreateVote' );
+    my $redir  = new_action(
+        class     => "Jifty::Action::Redirect",
+        arguments => { url => '/pick' },
+    );
+    # XXX - For some reason passing it in on the previous line doesn't work.
+    my %args   = (
+        choice => $choice->id,
+        voter  => Jifty->web->current_user->id,
+    );
+
+    h1 { $choice->asked_by->name, ': ', $choice->name }
+    div { form {
+        my ($x, $y) = map { $action->button(
+            submit      => [ $action, $redir ],
+            label       => $choice->$_,
+            arguments   => { suggestion => $_, %args },
+        ) } ((rand > 0.5) ? ('a', 'b') : ('b', 'a'));
+
+        span { $x } em { 'or' } span { $y } em { 'or' } span {
+            $action->button(
+                submit      => [ $action, $redir ],
+                label       => 'None of the above',
+                arguments   => { suggestion => 'skip', %args },
+            );
+        }
+
+        p { render_param( $action => 'comments' ) }
+    } }
+};
+
+template nothing_to_pick => page {
+    h1 { "There's nothing for you to pick." }
+
+    p { "No one you know is angsting about anything. Everybody knows where
+         they're going to dinner, what to do on their next date and whether to
+         drop that class. You have such lovely and well adjusted friends." }
+
+    h2 { "Maybe it's time to ask for some advice..." };
+
+    show 'new_choice';
+};
+
+1;

Added: jifty/branches/virtual-models/examples/Doxory/share/po/zh_cn.po
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Doxory/share/po/zh_cn.po	Mon May  7 16:28:32 2007
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/Doxory/View.pm:8
+msgid "Ask a question!"
+msgstr "我有问题!"
+
+#: lib/Doxory/View.pm:16
+msgid "Ask the crowd!"
+msgstr "听听乡民怎么说!"
+
+#: lib/Doxory/Model/Choice.pm:23
+msgid "Asked by"
+msgstr "提问人"
+
+#: lib/Doxory/Dispatcher.pm:10
+msgid "Choices"
+msgstr "开票纪录"
+
+#: lib/Doxory/Model/Vote.pm:18
+msgid "Comments?"
+msgstr "有何指教?"
+
+#: lib/Doxory/Model/Choice.pm:9
+msgid "I need help deciding..."
+msgstr "帮帮我, 该怎么办..."
+
+#: lib/Doxory/Model/Choice.pm:13
+msgid "On the one hand"
+msgstr "我应该...?"
+
+#: lib/Doxory/Model/Choice.pm:18
+msgid "On the other hand"
+msgstr "或者...?"
+
+#: lib/Doxory/Dispatcher.pm:9
+msgid "Pick!"
+msgstr "投票!"
+
+msgid "Logout"
+msgstr "注销"

Added: jifty/branches/virtual-models/examples/Doxory/share/po/zh_tw.po
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Doxory/share/po/zh_tw.po	Mon May  7 16:28:32 2007
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/Doxory/View.pm:8
+msgid "Ask a question!"
+msgstr "我有問題!"
+
+#: lib/Doxory/View.pm:16
+msgid "Ask the crowd!"
+msgstr "聽聽鄉民怎麼說!"
+
+#: lib/Doxory/Model/Choice.pm:23
+msgid "Asked by"
+msgstr "提問人"
+
+#: lib/Doxory/Dispatcher.pm:10
+msgid "Choices"
+msgstr "開票紀錄"
+
+#: lib/Doxory/Model/Vote.pm:18
+msgid "Comments?"
+msgstr "有何指教?"
+
+#: lib/Doxory/Model/Choice.pm:9
+msgid "I need help deciding..."
+msgstr "幫幫我, 該怎麼辦..."
+
+#: lib/Doxory/Model/Choice.pm:13
+msgid "On the one hand"
+msgstr "我應該...?"
+
+#: lib/Doxory/Model/Choice.pm:18
+msgid "On the other hand"
+msgstr "或者...?"
+
+#: lib/Doxory/Dispatcher.pm:9
+msgid "Pick!"
+msgstr "投票!"
+
+msgid "Logout"
+msgstr "登出"

Added: jifty/branches/virtual-models/examples/Doxory/t/00-model-User.t
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Doxory/t/00-model-User.t	Mon May  7 16:28:32 2007
@@ -0,0 +1,49 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+
+=head1 DESCRIPTION
+
+A basic test harness for the User model.
+
+=cut
+
+use Jifty::Test tests => 11;
+
+# Make sure we can load the model
+use_ok('Doxory::Model::User');
+
+# Grab a system user
+my $system_user = Doxory::CurrentUser->superuser;
+ok($system_user, "Found a system user");
+
+# Try testing a create
+my $o = Doxory::Model::User->new(current_user => $system_user);
+my ($id) = $o->create();
+ok($id, "User create returned success");
+ok($o->id, "New User has valid id set");
+is($o->id, $id, "Create returned the right id");
+
+# And another
+$o->create();
+ok($o->id, "User create returned another value");
+isnt($o->id, $id, "And it is different from the previous one");
+
+# Searches in general
+my $collection =  Doxory::Model::UserCollection->new(current_user => $system_user);
+$collection->unlimit;
+is($collection->count, 2, "Finds two records");
+
+# Searches in specific
+$collection->limit(column => 'id', value => $o->id);
+is($collection->count, 1, "Finds one record with specific id");
+
+# Delete one of them
+$o->delete;
+$collection->redo_search;
+is($collection->count, 0, "Deleted row is gone");
+
+# And the other one is still there
+$collection->unlimit;
+is($collection->count, 1, "Still one left");
+

Added: jifty/branches/virtual-models/examples/Example-Todo/META.yml
==============================================================================

Added: jifty/branches/virtual-models/examples/Example-Todo/Makefile.PL
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Example-Todo/Makefile.PL	Mon May  7 16:28:32 2007
@@ -0,0 +1,7 @@
+use inc::Module::Install;
+
+name        'Example::Todo';
+version     '0.01';
+requires    'Jifty' => '0.70117';
+
+WriteAll;

Added: jifty/branches/virtual-models/examples/Example-Todo/bin/jifty
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Example-Todo/bin/jifty	Mon May  7 16:28:32 2007
@@ -0,0 +1,15 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+use File::Basename qw(dirname); 
+use UNIVERSAL::require;
+
+BEGIN {
+    Jifty::Util->require or die $UNIVERSAL::require::ERROR;
+    my $root = Jifty::Util->app_root;
+    unshift @INC, "$root/lib" if ($root);
+}
+
+use Jifty::Script;
+local $SIG{INT} = sub { warn "Stopped\n"; exit; };
+Jifty::Script->dispatch();

Added: jifty/branches/virtual-models/examples/Example-Todo/etc/config.yml
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Example-Todo/etc/config.yml	Mon May  7 16:28:32 2007
@@ -0,0 +1,62 @@
+--- 
+framework: 
+  AdminMode: 1
+  ApplicationClass: Example::Todo
+  ApplicationName: Example-Todo
+  ApplicationUUID: 80DF397A-D999-11DB-B80A-9318EBB6763A
+  Database: 
+    CheckSchema: 1
+    Database: example_todo
+    Driver: SQLite
+    Host: localhost
+    Password: ''
+    RecordBaseClass: Jifty::DBI::Record::Cachable
+    User: ''
+    Version: 0.0.1
+  DevelMode: 1
+  L10N: 
+    PoDir: share/po
+  LogLevel: INFO
+  Mailer: Sendmail
+  MailerArgs: []
+
+  Plugins: 
+    - 
+      SkeletonApp: {}
+
+    - 
+      REST: {}
+
+    - 
+      Halo: {}
+
+    - 
+      ErrorTemplates: {}
+
+    - 
+      OnlineDocs: {}
+
+    - 
+      CompressedCSSandJS: {}
+
+    - 
+      AdminUI: {}
+
+  PubSub: 
+    Backend: Memcached
+    Enable: ~
+  TemplateClass: Example::Todo::View
+  Web: 
+    BaseURL: http://localhost
+    DataDir: var/mason
+    Globals: []
+
+    MasonConfig: 
+      autoflush: 0
+      default_escape_flags: h
+      error_format: text
+      error_mode: fatal
+    Port: 8888
+    ServeStaticFiles: 1
+    StaticRoot: share/web/static
+    TemplateRoot: share/web/templates

Added: jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,281 @@
+#line 1
+package Module::Install;
+
+# For any maintainers:
+# The load order for Module::Install is a bit magic.
+# It goes something like this...
+#
+# IF ( host has Module::Install installed, creating author mode ) {
+#     1. Makefile.PL calls "use inc::Module::Install"
+#     2. $INC{inc/Module/Install.pm} set to installed version of inc::Module::Install
+#     3. The installed version of inc::Module::Install loads
+#     4. inc::Module::Install calls "require Module::Install"
+#     5. The ./inc/ version of Module::Install loads
+# } ELSE {
+#     1. Makefile.PL calls "use inc::Module::Install"
+#     2. $INC{inc/Module/Install.pm} set to ./inc/ version of Module::Install
+#     3. The ./inc/ version of Module::Install loads
+# }
+
+use 5.004;
+use strict 'vars';
+
+use vars qw{$VERSION};
+BEGIN {
+    # All Module::Install core packages now require synchronised versions.
+    # This will be used to ensure we don't accidentally load old or
+    # different versions of modules.
+    # This is not enforced yet, but will be some time in the next few
+    # releases once we can make sure it won't clash with custom
+    # Module::Install extensions.
+    $VERSION = '0.64';
+}
+
+# Whether or not inc::Module::Install is actually loaded, the
+# $INC{inc/Module/Install.pm} is what will still get set as long as
+# the caller loaded module this in the documented manner.
+# If not set, the caller may NOT have loaded the bundled version, and thus
+# they may not have a MI version that works with the Makefile.PL. This would
+# result in false errors or unexpected behaviour. And we don't want that.
+my $file = join( '/', 'inc', split /::/, __PACKAGE__ ) . '.pm';
+unless ( $INC{$file} ) {
+    die <<"END_DIE";
+Please invoke ${\__PACKAGE__} with:
+
+    use inc::${\__PACKAGE__};
+
+not:
+
+    use ${\__PACKAGE__};
+
+END_DIE
+}
+
+# If the script that is loading Module::Install is from the future,
+# then make will detect this and cause it to re-run over and over
+# again. This is bad. Rather than taking action to touch it (which
+# is unreliable on some platforms and requires write permissions)
+# for now we should catch this and refuse to run.
+if ( -f $0 and (stat($0))[9] > time ) {
+	die << "END_DIE";
+Your installer $0 has a modification time in the future.
+
+This is known to create infinite loops in make.
+
+Please correct this, then run $0 again.
+
+END_DIE
+}
+
+use Cwd        ();
+use File::Find ();
+use File::Path ();
+use FindBin;
+
+*inc::Module::Install::VERSION = *VERSION;
+ at inc::Module::Install::ISA     = __PACKAGE__;
+
+sub autoload {
+    my $self = shift;
+    my $who  = $self->_caller;
+    my $cwd  = Cwd::cwd();
+    my $sym  = "${who}::AUTOLOAD";
+    $sym->{$cwd} = sub {
+        my $pwd = Cwd::cwd();
+        if ( my $code = $sym->{$pwd} ) {
+            # delegate back to parent dirs
+            goto &$code unless $cwd eq $pwd;
+        }
+        $$sym =~ /([^:]+)$/ or die "Cannot autoload $who - $sym";
+        unshift @_, ($self, $1);
+        goto &{$self->can('call')} unless uc($1) eq $1;
+    };
+}
+
+sub import {
+    my $class = shift;
+    my $self  = $class->new(@_);
+    my $who   = $self->_caller;
+
+    unless ( -f $self->{file} ) {
+        require "$self->{path}/$self->{dispatch}.pm";
+        File::Path::mkpath("$self->{prefix}/$self->{author}");
+        $self->{admin} = "$self->{name}::$self->{dispatch}"->new( _top => $self );
+        $self->{admin}->init;
+        @_ = ($class, _self => $self);
+        goto &{"$self->{name}::import"};
+    }
+
+    *{"${who}::AUTOLOAD"} = $self->autoload;
+    $self->preload;
+
+    # Unregister loader and worker packages so subdirs can use them again
+    delete $INC{"$self->{file}"};
+    delete $INC{"$self->{path}.pm"};
+}
+
+sub preload {
+    my ($self) = @_;
+
+    unless ( $self->{extensions} ) {
+        $self->load_extensions(
+            "$self->{prefix}/$self->{path}", $self
+        );
+    }
+
+    my @exts = @{$self->{extensions}};
+    unless ( @exts ) {
+        my $admin = $self->{admin};
+        @exts = $admin->load_all_extensions;
+    }
+
+    my %seen;
+    foreach my $obj ( @exts ) {
+        while (my ($method, $glob) = each %{ref($obj) . '::'}) {
+            next unless $obj->can($method);
+            next if $method =~ /^_/;
+            next if $method eq uc($method);
+            $seen{$method}++;
+        }
+    }
+
+    my $who = $self->_caller;
+    foreach my $name ( sort keys %seen ) {
+        *{"${who}::$name"} = sub {
+            ${"${who}::AUTOLOAD"} = "${who}::$name";
+            goto &{"${who}::AUTOLOAD"};
+        };
+    }
+}
+
+sub new {
+    my ($class, %args) = @_;
+
+    # ignore the prefix on extension modules built from top level.
+    my $base_path = Cwd::abs_path($FindBin::Bin);
+    unless ( Cwd::abs_path(Cwd::cwd()) eq $base_path ) {
+        delete $args{prefix};
+    }
+
+    return $args{_self} if $args{_self};
+
+    $args{dispatch} ||= 'Admin';
+    $args{prefix}   ||= 'inc';
+    $args{author}   ||= ($^O eq 'VMS' ? '_author' : '.author');
+    $args{bundle}   ||= 'inc/BUNDLES';
+    $args{base}     ||= $base_path;
+    $class =~ s/^\Q$args{prefix}\E:://;
+    $args{name}     ||= $class;
+    $args{version}  ||= $class->VERSION;
+    unless ( $args{path} ) {
+        $args{path}  = $args{name};
+        $args{path}  =~ s!::!/!g;
+    }
+    $args{file}     ||= "$args{base}/$args{prefix}/$args{path}.pm";
+
+    bless( \%args, $class );
+}
+
+sub call {
+	my ($self, $method) = @_;
+	my $obj = $self->load($method) or return;
+        splice(@_, 0, 2, $obj);
+	goto &{$obj->can($method)};
+}
+
+sub load {
+    my ($self, $method) = @_;
+
+    $self->load_extensions(
+        "$self->{prefix}/$self->{path}", $self
+    ) unless $self->{extensions};
+
+    foreach my $obj (@{$self->{extensions}}) {
+        return $obj if $obj->can($method);
+    }
+
+    my $admin = $self->{admin} or die <<"END_DIE";
+The '$method' method does not exist in the '$self->{prefix}' path!
+Please remove the '$self->{prefix}' directory and run $0 again to load it.
+END_DIE
+
+    my $obj = $admin->load($method, 1);
+    push @{$self->{extensions}}, $obj;
+
+    $obj;
+}
+
+sub load_extensions {
+    my ($self, $path, $top) = @_;
+
+    unless ( grep { lc $_ eq lc $self->{prefix} } @INC ) {
+        unshift @INC, $self->{prefix};
+    }
+
+    foreach my $rv ( $self->find_extensions($path) ) {
+        my ($file, $pkg) = @{$rv};
+        next if $self->{pathnames}{$pkg};
+
+        local $@;
+        my $new = eval { require $file; $pkg->can('new') };
+        unless ( $new ) {
+            warn $@ if $@;
+            next;
+        }
+        $self->{pathnames}{$pkg} = delete $INC{$file};
+        push @{$self->{extensions}}, &{$new}($pkg, _top => $top );
+    }
+
+    $self->{extensions} ||= [];
+}
+
+sub find_extensions {
+    my ($self, $path) = @_;
+
+    my @found;
+    File::Find::find( sub {
+        my $file = $File::Find::name;
+        return unless $file =~ m!^\Q$path\E/(.+)\.pm\Z!is;
+        my $subpath = $1;
+        return if lc($subpath) eq lc($self->{dispatch});
+
+        $file = "$self->{path}/$subpath.pm";
+        my $pkg = "$self->{name}::$subpath";
+        $pkg =~ s!/!::!g;
+
+        # If we have a mixed-case package name, assume case has been preserved
+        # correctly.  Otherwise, root through the file to locate the case-preserved
+        # version of the package name.
+        if ( $subpath eq lc($subpath) || $subpath eq uc($subpath) ) {
+            open PKGFILE, "<$subpath.pm" or die "find_extensions: Can't open $subpath.pm: $!";
+            my $in_pod = 0;
+            while ( <PKGFILE> ) {
+                $in_pod = 1 if /^=\w/;
+                $in_pod = 0 if /^=cut/;
+                next if ($in_pod || /^=cut/);  # skip pod text
+                next if /^\s*#/;               # and comments
+                if ( m/^\s*package\s+($pkg)\s*;/i ) {
+                    $pkg = $1;
+                    last;
+                }
+            }
+            close PKGFILE;
+        }
+
+        push @found, [ $file, $pkg ];
+    }, $path ) if -d $path;
+
+    @found;
+}
+
+sub _caller {
+    my $depth = 0;
+    my $call  = caller($depth);
+    while ( $call eq __PACKAGE__ ) {
+        $depth++;
+        $call = caller($depth);
+    }
+    return $call;
+}
+
+1;

Added: jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install/Base.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install/Base.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,70 @@
+#line 1
+package Module::Install::Base;
+
+$VERSION = '0.64';
+
+# Suspend handler for "redefined" warnings
+BEGIN {
+	my $w = $SIG{__WARN__};
+	$SIG{__WARN__} = sub { $w };
+}
+
+### This is the ONLY module that shouldn't have strict on
+# use strict;
+
+#line 41
+
+sub new {
+    my ($class, %args) = @_;
+
+    foreach my $method ( qw(call load) ) {
+        *{"$class\::$method"} = sub {
+            shift()->_top->$method(@_);
+        } unless defined &{"$class\::$method"};
+    }
+
+    bless( \%args, $class );
+}
+
+#line 61
+
+sub AUTOLOAD {
+    my $self = shift;
+    local $@;
+    my $autoload = eval { $self->_top->autoload } or return;
+    goto &$autoload;
+}
+
+#line 76
+
+sub _top { $_[0]->{_top} }
+
+#line 89
+
+sub admin {
+    $_[0]->_top->{admin} or Module::Install::Base::FakeAdmin->new;
+}
+
+sub is_admin {
+    $_[0]->admin->VERSION;
+}
+
+sub DESTROY {}
+
+package Module::Install::Base::FakeAdmin;
+
+my $Fake;
+sub new { $Fake ||= bless(\@_, $_[0]) }
+
+sub AUTOLOAD {}
+
+sub DESTROY {}
+
+# Restore warning handler
+BEGIN {
+	$SIG{__WARN__} = $SIG{__WARN__}->();
+}
+
+1;
+
+#line 138

Added: jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install/Metadata.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install/Metadata.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,315 @@
+#line 1
+package Module::Install::Metadata;
+
+use strict 'vars';
+use Module::Install::Base;
+
+use vars qw{$VERSION $ISCORE @ISA};
+BEGIN {
+	$VERSION = '0.64';
+	$ISCORE  = 1;
+	@ISA     = qw{Module::Install::Base};
+}
+
+my @scalar_keys = qw{
+    name module_name abstract author version license
+    distribution_type perl_version tests
+};
+
+my @tuple_keys = qw{
+    build_requires requires recommends bundles
+};
+
+sub Meta            { shift        }
+sub Meta_ScalarKeys { @scalar_keys }
+sub Meta_TupleKeys  { @tuple_keys  }
+
+foreach my $key (@scalar_keys) {
+    *$key = sub {
+        my $self = shift;
+        return $self->{values}{$key} if defined wantarray and !@_;
+        $self->{values}{$key} = shift;
+        return $self;
+    };
+}
+
+foreach my $key (@tuple_keys) {
+    *$key = sub {
+        my $self = shift;
+        return $self->{values}{$key} unless @_;
+
+        my @rv;
+        while (@_) {
+            my $module = shift or last;
+            my $version = shift || 0;
+            if ( $module eq 'perl' ) {
+                $version =~ s{^(\d+)\.(\d+)\.(\d+)}
+                             {$1 + $2/1_000 + $3/1_000_000}e;
+                $self->perl_version($version);
+                next;
+            }
+            my $rv = [ $module, $version ];
+            push @rv, $rv;
+        }
+        push @{ $self->{values}{$key} }, @rv;
+        @rv;
+    };
+}
+
+sub sign {
+    my $self = shift;
+    return $self->{'values'}{'sign'} if defined wantarray and !@_;
+    $self->{'values'}{'sign'} = ( @_ ? $_[0] : 1 );
+    return $self;
+}
+
+sub dynamic_config {
+	my $self = shift;
+	unless ( @_ ) {
+		warn "You MUST provide an explicit true/false value to dynamic_config, skipping\n";
+		return $self;
+	}
+	$self->{'values'}{'dynamic_config'} = $_[0] ? 1 : 0;
+	return $self;
+}
+
+sub all_from {
+    my ( $self, $file ) = @_;
+
+    unless ( defined($file) ) {
+        my $name = $self->name
+            or die "all_from called with no args without setting name() first";
+        $file = join('/', 'lib', split(/-/, $name)) . '.pm';
+        $file =~ s{.*/}{} unless -e $file;
+        die "all_from: cannot find $file from $name" unless -e $file;
+    }
+
+    $self->version_from($file)      unless $self->version;
+    $self->perl_version_from($file) unless $self->perl_version;
+
+    # The remaining probes read from POD sections; if the file
+    # has an accompanying .pod, use that instead
+    my $pod = $file;
+    if ( $pod =~ s/\.pm$/.pod/i and -e $pod ) {
+        $file = $pod;
+    }
+
+    $self->author_from($file)   unless $self->author;
+    $self->license_from($file)  unless $self->license;
+    $self->abstract_from($file) unless $self->abstract;
+}
+
+sub provides {
+    my $self     = shift;
+    my $provides = ( $self->{values}{provides} ||= {} );
+    %$provides = (%$provides, @_) if @_;
+    return $provides;
+}
+
+sub auto_provides {
+    my $self = shift;
+    return $self unless $self->is_admin;
+
+    unless (-e 'MANIFEST') {
+        warn "Cannot deduce auto_provides without a MANIFEST, skipping\n";
+        return $self;
+    }
+
+    # Avoid spurious warnings as we are not checking manifest here.
+
+    local $SIG{__WARN__} = sub {1};
+    require ExtUtils::Manifest;
+    local *ExtUtils::Manifest::manicheck = sub { return };
+
+    require Module::Build;
+    my $build = Module::Build->new(
+        dist_name    => $self->name,
+        dist_version => $self->version,
+        license      => $self->license,
+    );
+    $self->provides(%{ $build->find_dist_packages || {} });
+}
+
+sub feature {
+    my $self     = shift;
+    my $name     = shift;
+    my $features = ( $self->{values}{features} ||= [] );
+
+    my $mods;
+
+    if ( @_ == 1 and ref( $_[0] ) ) {
+        # The user used ->feature like ->features by passing in the second
+        # argument as a reference.  Accomodate for that.
+        $mods = $_[0];
+    } else {
+        $mods = \@_;
+    }
+
+    my $count = 0;
+    push @$features, (
+        $name => [
+            map {
+                ref($_) ? ( ref($_) eq 'HASH' ) ? %$_
+                                                : @$_
+                        : $_
+            } @$mods
+        ]
+    );
+
+    return @$features;
+}
+
+sub features {
+    my $self = shift;
+    while ( my ( $name, $mods ) = splice( @_, 0, 2 ) ) {
+        $self->feature( $name, @$mods );
+    }
+    return $self->{values}->{features}
+    	? @{ $self->{values}->{features} }
+    	: ();
+}
+
+sub no_index {
+    my $self = shift;
+    my $type = shift;
+    push @{ $self->{values}{no_index}{$type} }, @_ if $type;
+    return $self->{values}{no_index};
+}
+
+sub read {
+    my $self = shift;
+    $self->include_deps( 'YAML', 0 );
+
+    require YAML;
+    my $data = YAML::LoadFile('META.yml');
+
+    # Call methods explicitly in case user has already set some values.
+    while ( my ( $key, $value ) = each %$data ) {
+        next unless $self->can($key);
+        if ( ref $value eq 'HASH' ) {
+            while ( my ( $module, $version ) = each %$value ) {
+                $self->can($key)->($self, $module => $version );
+            }
+        }
+        else {
+            $self->can($key)->($self, $value);
+        }
+    }
+    return $self;
+}
+
+sub write {
+    my $self = shift;
+    return $self unless $self->is_admin;
+    $self->admin->write_meta;
+    return $self;
+}
+
+sub version_from {
+    my ( $self, $file ) = @_;
+    require ExtUtils::MM_Unix;
+    $self->version( ExtUtils::MM_Unix->parse_version($file) );
+}
+
+sub abstract_from {
+    my ( $self, $file ) = @_;
+    require ExtUtils::MM_Unix;
+    $self->abstract(
+        bless(
+            { DISTNAME => $self->name },
+            'ExtUtils::MM_Unix'
+        )->parse_abstract($file)
+     );
+}
+
+sub _slurp {
+    my ( $self, $file ) = @_;
+
+    local *FH;
+    open FH, "< $file" or die "Cannot open $file.pod: $!";
+    do { local $/; <FH> };
+}
+
+sub perl_version_from {
+    my ( $self, $file ) = @_;
+
+    if (
+        $self->_slurp($file) =~ m/
+        ^
+        use \s*
+        v?
+        ([\d_\.]+)
+        \s* ;
+    /ixms
+      )
+    {
+        my $v = $1;
+        $v =~ s{_}{}g;
+        $self->perl_version($1);
+    }
+    else {
+        warn "Cannot determine perl version info from $file\n";
+        return;
+    }
+}
+
+sub author_from {
+    my ( $self, $file ) = @_;
+    my $content = $self->_slurp($file);
+    if ($content =~ m/
+        =head \d \s+ (?:authors?)\b \s*
+        ([^\n]*)
+        |
+        =head \d \s+ (?:licen[cs]e|licensing|copyright|legal)\b \s*
+        .*? copyright .*? \d\d\d[\d.]+ \s* (?:\bby\b)? \s*
+        ([^\n]*)
+    /ixms) {
+        my $author = $1 || $2;
+        $author =~ s{E<lt>}{<}g;
+        $author =~ s{E<gt>}{>}g;
+        $self->author($author); 
+    }
+    else {
+        warn "Cannot determine author info from $file\n";
+    }
+}
+
+sub license_from {
+    my ( $self, $file ) = @_;
+
+    if (
+        $self->_slurp($file) =~ m/
+        =head \d \s+
+        (?:licen[cs]e|licensing|copyright|legal)\b
+        (.*?)
+        (=head\\d.*|=cut.*|)
+        \z
+    /ixms
+      )
+    {
+        my $license_text = $1;
+        my @phrases      = (
+            'under the same (?:terms|license) as perl itself' => 'perl',
+            'GNU public license'                              => 'gpl',
+            'GNU lesser public license'                       => 'gpl',
+            'BSD license'                                     => 'bsd',
+            'Artistic license'                                => 'artistic',
+            'GPL'                                             => 'gpl',
+            'LGPL'                                            => 'lgpl',
+            'BSD'                                             => 'bsd',
+            'Artistic'                                        => 'artistic',
+        );
+        while ( my ( $pattern, $license ) = splice( @phrases, 0, 2 ) ) {
+            $pattern =~ s{\s+}{\\s+}g;
+            if ( $license_text =~ /\b$pattern\b/i ) {
+                $self->license($license);
+                return 1;
+            }
+        }
+    }
+
+    warn "Cannot determine license info from $file\n";
+    return 'unknown';
+}
+
+1;

Added: jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install/WriteAll.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Example-Todo/inc/Module/Install/WriteAll.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,43 @@
+#line 1
+package Module::Install::WriteAll;
+
+use strict;
+use Module::Install::Base;
+
+use vars qw{$VERSION $ISCORE @ISA};
+BEGIN {
+	$VERSION = '0.64';
+	$ISCORE  = 1;
+	@ISA     = qw{Module::Install::Base};
+}
+
+sub WriteAll {
+    my $self = shift;
+    my %args = (
+        meta        => 1,
+        sign        => 0,
+        inline      => 0,
+        check_nmake => 1,
+        @_
+    );
+
+    $self->sign(1)                if $args{sign};
+    $self->Meta->write            if $args{meta};
+    $self->admin->WriteAll(%args) if $self->is_admin;
+
+    if ( $0 =~ /Build.PL$/i ) {
+        $self->Build->write;
+    } else {
+        $self->check_nmake if $args{check_nmake};
+        unless ( $self->makemaker_args->{'PL_FILES'} ) {
+        	$self->makemaker_args( PL_FILES => {} );
+        }
+        if ($args{inline}) {
+            $self->Inline->write;
+        } else {
+            $self->Makefile->write;
+        }
+    }
+}
+
+1;

Added: jifty/branches/virtual-models/examples/Example-Todo/lib/Example/Todo/Model/Todo.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Example-Todo/lib/Example/Todo/Model/Todo.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,17 @@
+use strict;
+use warnings;
+
+package Example::Todo::Model::Todo;
+use Jifty::DBI::Schema;
+
+use Example::Todo::Record schema {
+
+    column done => type is 'bool';
+    column description => type is 'text';
+
+};
+
+# Your model-specific methods go here.
+
+1;
+

Added: jifty/branches/virtual-models/examples/Example-Todo/t/00-model-Todo.t
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/examples/Example-Todo/t/00-model-Todo.t	Mon May  7 16:28:32 2007
@@ -0,0 +1,49 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+
+=head1 DESCRIPTION
+
+A basic test harness for the Todo model.
+
+=cut
+
+use Jifty::Test tests => 11;
+
+# Make sure we can load the model
+use_ok('Example::Todo::Model::Todo');
+
+# Grab a system user
+my $system_user = Example::Todo::CurrentUser->superuser;
+ok($system_user, "Found a system user");
+
+# Try testing a create
+my $o = Example::Todo::Model::Todo->new(current_user => $system_user);
+my ($id) = $o->create();
+ok($id, "Todo create returned success");
+ok($o->id, "New Todo has valid id set");
+is($o->id, $id, "Create returned the right id");
+
+# And another
+$o->create();
+ok($o->id, "Todo create returned another value");
+isnt($o->id, $id, "And it is different from the previous one");
+
+# Searches in general
+my $collection =  Example::Todo::Model::TodoCollection->new(current_user => $system_user);
+$collection->unlimit;
+is($collection->count, 2, "Finds two records");
+
+# Searches in specific
+$collection->limit(column => 'id', value => $o->id);
+is($collection->count, 1, "Finds one record with specific id");
+
+# Delete one of them
+$o->delete;
+$collection->redo_search;
+is($collection->count, 0, "Deleted row is gone");
+
+# And the other one is still there
+$collection->unlimit;
+is($collection->count, 1, "Still one left");
+

Modified: jifty/branches/virtual-models/inc/Module/Install.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install.pm	Mon May  7 16:28:32 2007
@@ -28,7 +28,7 @@
     # This is not enforced yet, but will be some time in the next few
     # releases once we can make sure it won't clash with custom
     # Module::Install extensions.
-    $VERSION = '0.64';
+    $VERSION = '0.65';
 }
 
 # Whether or not inc::Module::Install is actually loaded, the

Modified: jifty/branches/virtual-models/inc/Module/Install/AutoInstall.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install/AutoInstall.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install/AutoInstall.pm	Mon May  7 16:28:32 2007
@@ -6,7 +6,7 @@
 
 use vars qw{$VERSION $ISCORE @ISA};
 BEGIN {
-	$VERSION = '0.64';
+	$VERSION = '0.65';
 	$ISCORE  = 1;
 	@ISA     = qw{Module::Install::Base};
 }

Modified: jifty/branches/virtual-models/inc/Module/Install/Base.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install/Base.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install/Base.pm	Mon May  7 16:28:32 2007
@@ -1,7 +1,7 @@
 #line 1
 package Module::Install::Base;
 
-$VERSION = '0.64';
+$VERSION = '0.65';
 
 # Suspend handler for "redefined" warnings
 BEGIN {

Modified: jifty/branches/virtual-models/inc/Module/Install/Can.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install/Can.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install/Can.pm	Mon May  7 16:28:32 2007
@@ -11,7 +11,7 @@
 
 use vars qw{$VERSION $ISCORE @ISA};
 BEGIN {
-	$VERSION = '0.64';
+	$VERSION = '0.65';
 	$ISCORE  = 1;
 	@ISA     = qw{Module::Install::Base};
 }

Modified: jifty/branches/virtual-models/inc/Module/Install/Fetch.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install/Fetch.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install/Fetch.pm	Mon May  7 16:28:32 2007
@@ -6,7 +6,7 @@
 
 use vars qw{$VERSION $ISCORE @ISA};
 BEGIN {
-	$VERSION = '0.64';
+	$VERSION = '0.65';
 	$ISCORE  = 1;
 	@ISA     = qw{Module::Install::Base};
 }

Modified: jifty/branches/virtual-models/inc/Module/Install/Include.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install/Include.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install/Include.pm	Mon May  7 16:28:32 2007
@@ -6,7 +6,7 @@
 
 use vars qw{$VERSION $ISCORE @ISA};
 BEGIN {
-	$VERSION = '0.64';
+	$VERSION = '0.65';
 	$ISCORE  = 1;
 	@ISA     = qw{Module::Install::Base};
 }

Modified: jifty/branches/virtual-models/inc/Module/Install/Makefile.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install/Makefile.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install/Makefile.pm	Mon May  7 16:28:32 2007
@@ -7,7 +7,7 @@
 
 use vars qw{$VERSION $ISCORE @ISA};
 BEGIN {
-	$VERSION = '0.64';
+	$VERSION = '0.65';
 	$ISCORE  = 1;
 	@ISA     = qw{Module::Install::Base};
 }
@@ -136,9 +136,13 @@
                 . "but we need version >= $perl_version";
     }
 
+    $args->{INSTALLDIRS} = $self->installdirs;
+
     my %args = map { ( $_ => $args->{$_} ) } grep {defined($args->{$_})} keys %$args;
-    if ($self->admin->preop) {
-        $args{dist} = $self->admin->preop;
+
+    my $user_preop = delete $args{dist}->{PREOP};
+    if (my $preop = $self->admin->preop($user_preop)) {
+        $args{dist} = $preop;
     }
 
     my $mm = ExtUtils::MakeMaker::WriteMakefile(%args);
@@ -205,4 +209,4 @@
 
 __END__
 
-#line 334
+#line 338

Modified: jifty/branches/virtual-models/inc/Module/Install/Metadata.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install/Metadata.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install/Metadata.pm	Mon May  7 16:28:32 2007
@@ -6,14 +6,14 @@
 
 use vars qw{$VERSION $ISCORE @ISA};
 BEGIN {
-	$VERSION = '0.64';
+	$VERSION = '0.65';
 	$ISCORE  = 1;
 	@ISA     = qw{Module::Install::Base};
 }
 
 my @scalar_keys = qw{
     name module_name abstract author version license
-    distribution_type perl_version tests
+    distribution_type perl_version tests installdirs
 };
 
 my @tuple_keys = qw{
@@ -56,6 +56,11 @@
     };
 }
 
+sub install_as_core   { $_[0]->installdirs('perl')   }
+sub install_as_cpan   { $_[0]->installdirs('site')   }
+sub install_as_site   { $_[0]->installdirs('site')   }
+sub install_as_vendor { $_[0]->installdirs('vendor') }
+
 sub sign {
     my $self = shift;
     return $self->{'values'}{'sign'} if defined wantarray and !@_;
@@ -279,9 +284,11 @@
 
     if (
         $self->_slurp($file) =~ m/
-        =head \d \s+
-        (?:licen[cs]e|licensing|copyright|legal)\b
-        (.*?)
+        (
+            =head \d \s+
+            (?:licen[cs]e|licensing|copyright|legal)\b
+            .*?
+        )
         (=head\\d.*|=cut.*|)
         \z
     /ixms
@@ -298,6 +305,7 @@
             'LGPL'                                            => 'lgpl',
             'BSD'                                             => 'bsd',
             'Artistic'                                        => 'artistic',
+            'MIT'                                             => 'MIT',
         );
         while ( my ( $pattern, $license ) = splice( @phrases, 0, 2 ) ) {
             $pattern =~ s{\s+}{\\s+}g;

Modified: jifty/branches/virtual-models/inc/Module/Install/Scripts.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install/Scripts.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install/Scripts.pm	Mon May  7 16:28:32 2007
@@ -7,7 +7,7 @@
 
 use vars qw{$VERSION $ISCORE @ISA};
 BEGIN {
-	$VERSION = '0.64';
+	$VERSION = '0.65';
 	$ISCORE  = 1;
 	@ISA     = qw{Module::Install::Base};
 }

Modified: jifty/branches/virtual-models/inc/Module/Install/Share.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install/Share.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install/Share.pm	Mon May  7 16:28:32 2007
@@ -6,7 +6,7 @@
 
 use vars qw{$VERSION $ISCORE @ISA};
 BEGIN {
-	$VERSION = '0.64';
+	$VERSION = '0.65';
 	$ISCORE  = 1;
 	@ISA     = qw{Module::Install::Base};
 }
@@ -22,7 +22,7 @@
 	$self->postamble(<<"END_MAKEFILE");
 config ::
 \t\$(NOECHO) \$(MOD_INSTALL) \\
-\t\t\"$dir\" \$(INST_AUTODIR)
+\t\t"$dir" \$(INST_AUTODIR)
 
 END_MAKEFILE
 

Modified: jifty/branches/virtual-models/inc/Module/Install/Win32.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install/Win32.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install/Win32.pm	Mon May  7 16:28:32 2007
@@ -6,7 +6,7 @@
 
 use vars qw{$VERSION $ISCORE @ISA};
 BEGIN {
-	$VERSION = '0.64';
+	$VERSION = '0.65';
 	$ISCORE  = 1;
 	@ISA     = qw{Module::Install::Base};
 }

Modified: jifty/branches/virtual-models/inc/Module/Install/WriteAll.pm
==============================================================================
--- jifty/branches/virtual-models/inc/Module/Install/WriteAll.pm	(original)
+++ jifty/branches/virtual-models/inc/Module/Install/WriteAll.pm	Mon May  7 16:28:32 2007
@@ -6,7 +6,7 @@
 
 use vars qw{$VERSION $ISCORE @ISA};
 BEGIN {
-	$VERSION = '0.64';
+	$VERSION = '0.65';
 	$ISCORE  = 1;
 	@ISA     = qw{Module::Install::Base};
 }

Modified: jifty/branches/virtual-models/lib/Jifty.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty.pm	Mon May  7 16:28:32 2007
@@ -11,7 +11,7 @@
     require Time::Local;
 
     # Declare early to make sure Jifty::Record::schema_version works
-    $Jifty::VERSION = '0.70129';
+    $Jifty::VERSION = '0.70422';
 }
 
 =head1 NAME
@@ -149,8 +149,6 @@
         @_
     );
 
-    # Load the configuration. stash it in ->config
-    Jifty->config( Jifty::Config->new() );
 
     # Turn on logging as soon as we possibly can.
     Jifty->logger( Jifty::Logger->new( $args{'logger_component'} ) );
@@ -216,6 +214,7 @@
 sub config {
     my $class = shift;
     $CONFIG = shift if (@_);
+    $CONFIG ||= Jifty::Config->new();
     return $CONFIG;
 }
 
@@ -335,7 +334,7 @@
             }
         } 
         
-        if ($backend eq 'JiftyDBI' ) {
+        if ($backend eq 'JiftyDBI' and Jifty->handle ) {
                 @args    = (
                     db_config    => Jifty->handle->{db_config},
                     table_prefix => '_jifty_pubsub_',
@@ -355,12 +354,18 @@
 
 sub _load_plugins {
     my @plugins;
-    for my $plugin (@{Jifty->config->framework('Plugins')}) {
+    my @plugins_to_load = @{Jifty->config->framework('Plugins')};
+    for (my $i = 0; my $plugin = $plugins_to_load[$i]; $i++) {
         my $class = "Jifty::Plugin::".(keys %{$plugin})[0];
         my %options = %{ $plugin->{(keys %{$plugin})[0]} };
         Jifty::Util->require($class);
         Jifty::ClassLoader->new(base => $class)->require;
-        push @plugins, $class->new(%options);
+        my $plugin_obj = $class->new(%options);
+        push @plugins, $plugin_obj;
+        foreach my $name ($plugin_obj->prereq_plugins) {
+            next if grep { $_ eq $name } @plugins_to_load;
+            push @plugins_to_load, {$name => {}};
+        }
     }
     return @plugins;
 }
@@ -417,7 +422,8 @@
         Jifty::Util->require( $handle_class );
         Jifty->handle( $handle_class->new );
         Jifty->handle->connect();
-        Jifty->handle->check_schema_version();
+        Jifty->handle->check_schema_version()
+            unless $args{'no_version_check'};
     }
 }
 

Modified: jifty/branches/virtual-models/lib/Jifty/Action.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Action.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Action.pm	Mon May  7 16:28:32 2007
@@ -1185,7 +1185,7 @@
           value    => '%$value%',
       );
 
-      return map { $_->name } @{ $foos->item_array_ref };
+      return map { $_->name } @{ $foos->items_array_ref };
   }
 
 In this example, the "foo" field is autocompleted from names matched from the C<MyApp::Model::Foo> table. The match, in this case, matches any substring found in the database. I could have matched any item that starts with the string, ends with the string, matches other fields than the one returned, etc. It's up to you to decide.
@@ -1195,7 +1195,7 @@
 If you need a more complicated solution, you can return the autocompletion values as a list of hash references containing the keys C<value> and (optionally) C<label>:
 
   return map { { value => $_->name, label => $_->label } }
-            @{ $foos->item_array_ref };
+            @{ $foos->items_array_ref };
 
 In this case, the labels will be shown to the client, but the selected value would be returned to your application.
 

Modified: jifty/branches/virtual-models/lib/Jifty/Action/Record.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Action/Record.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Action/Record.pm	Mon May  7 16:28:32 2007
@@ -393,7 +393,7 @@
 
 L<Jifty::Action>, L<Jifty::Record>, L<Jifty::DBI::Record>,
 L<Jifty::Action::Record::Create>, L<Jifty::Action::Record::Update>,
-L<Jifty::Action::Reocrd::Delete>
+L<Jifty::Action::Record::Delete>
 
 =head1 LICENSE
 

Modified: jifty/branches/virtual-models/lib/Jifty/ClassLoader.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/ClassLoader.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/ClassLoader.pm	Mon May  7 16:28:32 2007
@@ -95,12 +95,13 @@
 it creates a subclass of L<Jifty::Collection> whose C<record_class> is
 C<I<Application>::Model::I<Something>>.
 
-=item I<Application>::Action::(Create or Update or Delete)I<Anything>
+=item I<Application>::Action::(Create or Update or Delete or Search)I<Anything>
 
-If C<I<Application>::Model::I<Something>> is a valid model class, then
-it creates a subclass of L<Jifty::Action::Record::Create>,
-L<Jifty::Action::Record::Update>, or L<Jifty::Action::Record::Delete>
-whose I<record_class> is C<I<Application>::Model::I<Something>>.
+If C<I<Application>::Model::I<Something>> is a valid model class, then it
+creates a subclass of L<Jifty::Action::Record::Create>,
+L<Jifty::Action::Record::Update>, L<Jifty::Action::Record::Delete> or
+L<Jifty::Action::Record::Search> whose I<record_class> is
+C<I<Application>::Model::I<Something>>.
 
 =back
 

Modified: jifty/branches/virtual-models/lib/Jifty/Config.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Config.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Config.pm	Mon May  7 16:28:32 2007
@@ -239,6 +239,7 @@
         framework => {
             AdminMode        => 1,
             DevelMode        => 1,
+	    SkipAccessControl => 0,
             ApplicationClass => $app_class,
             TemplateClass    => $app_class."::View",
             ApplicationName  => $app_name,
@@ -347,7 +348,6 @@
 sub _expand_relative_paths {
     my $self  = shift;
     my $datum = shift;
-
     if ( ref $datum eq 'ARRAY' ) {
         return [ map { $self->_expand_relative_paths($_) } @$datum ];
     } elsif ( ref $datum eq 'HASH' ) {

Modified: jifty/branches/virtual-models/lib/Jifty/CurrentUser.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/CurrentUser.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/CurrentUser.pm	Mon May  7 16:28:32 2007
@@ -41,7 +41,7 @@
 sub new {
     my $class = shift;
     my $self  = {};
-    bless $self, $class;
+    bless $self, (ref $class || $class);
     my %args = (@_);
     if ( delete $args{'_bootstrap'} ) { $self->is_bootstrap_user(1); }
     $self->_init(%args);
@@ -65,12 +65,13 @@
 =head2 superuser
 
 A convenience constructor that returns a new CurrentUser object that's
-marked as a superuser.
+marked as a superuser. Can be called either as a class or object method.
 
 =cut
 
 sub superuser {
     my $class = shift;
+    $class = ref( $class ) if ref $class;
     my $self = $class->new();
     $self->is_superuser(1);
     return $self;

Modified: jifty/branches/virtual-models/lib/Jifty/Dispatcher.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Dispatcher.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Dispatcher.pm	Mon May  7 16:28:32 2007
@@ -1115,6 +1115,7 @@
     return $text;
 }
 
+
 =head2 template_exists PATH
 
 Returns true if PATH is a valid template inside your template root. This checks
@@ -1123,11 +1124,15 @@
 =cut
 
 sub template_exists {
-    my $self = shift;
+    my $self     = shift;
     my $template = shift;
 
-    return Jifty->handler->declare_handler->template_exists($template)
-        || Jifty->handler->mason->interp->comp_exists( $template);
+    foreach my $handler ( Jifty->handler->view_handlers) {
+        if ( Jifty->handler->view($handler)->template_exists($template) ) {
+            return 1;
+        }
+    }
+    return undef;
 }
 
 
@@ -1141,19 +1146,23 @@
 =cut
 
 sub render_template {
-    my $self = shift;
+    my $self     = shift;
     my $template = shift;
-
-    eval { 
-        my( $val) = Jifty->handler->declare_handler->template_exists($template);
-        if ($val) {
-            Jifty->handler->declare_handler->show($template);
-        } else {
-            Jifty->handler->mason->handle_comp( $template ); 
+    my $showed   = 0;
+    eval {
+        foreach my $handler ( Jifty->handler->view_handlers ) {
+            if ( Jifty->handler->view($handler)->template_exists($template) ) {
+                $showed = 1;
+                Jifty->handler->view($handler)->show($template);
+                last;
+            }
         }
-    
-    
+        if ( not $showed and my $fallback_handler = Jifty->handler->fallback_view_handler ) {
+            $fallback_handler->show($template);
+        }
+
     };
+
     my $err = $@;
 
     # Handle parse errors
@@ -1171,8 +1180,7 @@
 
         # Redirect with a continuation
         Jifty->web->_redirect( "/__jifty/error/mason_internal_error?J:C=" . $c->id );
-    }
-    elsif ($err) {
+    } elsif ($err) {
         die $err;
     }
 
@@ -1261,56 +1269,4 @@
     return @matches;
 }
 
-=head2 dump_rules
-
-Dump all defined rules in debug log. It will be called by Jifty on startup.
-
-=cut
-
-sub dump_rules {
-    my $self = shift;
-
-    no strict 'refs';
-    foreach my $stage ( qw/SETUP RUN CLEANUP/ ) {
-
-        Jifty->log->debug( "Dispatcher rules in stage $stage:");
-        foreach my $r ( @{ $self . '::RULES_' . $stage } ) {
-            Jifty->log->debug( _unroll_dumpable_rules( 0,$r ) );
-        }
-
-    }
-};
-
-=head2 _unroll_dumpable_rules LEVEL,RULE
-
-Walk all rules defined in dispatcher starting at rule
-C<RULE> and indentation level C<LEVEL>
-
-=cut
-
-sub _unroll_dumpable_rules {
-    my ($level, $rule) = @_;
-    my $log = 
-        # indentation
-        ( "    " x $level ) .
-        # op
-        ( $rule->[0] || "undef op" ) . ' ' .
-        # arguments
-        (
-            ! defined( $rule->[1] )   ? ""                                          :
-            ref $rule->[1] eq 'ARRAY' ? "'" . join("','", @{ $rule->[1] }) . "'" :
-            ref $rule->[1] eq 'HASH'  ? $rule->[1]->{method} . " '" . $rule->[1]->{""} ."'" :
-            ref $rule->[1] eq 'CODE'  ? '{...}' :
-                                        "'" . $rule->[1] . "'"
-        );
-
-    if (ref $rule->[2] eq 'ARRAY') {
-        $level++;
-        foreach my $sr ( @{ $rule->[2] } ) {
-            $log .=   _unroll_dumpable_rules( $level, $sr );
-        }
-    }
-    return $log;
-}
-
 1;

Modified: jifty/branches/virtual-models/lib/Jifty/Handle.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Handle.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Handle.pm	Mon May  7 16:28:32 2007
@@ -49,6 +49,11 @@
     my $driver_class  = "Jifty::DBI::Handle::".  $driver;
     Jifty::Util->require($driver_class);
 
+    die "No such handle class as $driver_class. ",
+        "Check your spelling and check that your Jifty installation and ",
+        "related modules (especially Jifty::DBI) are up to date." 
+            unless $driver_class->can('isa');
+
     unshift @ISA, $driver_class;
     return $class->SUPER::new();
 }

Modified: jifty/branches/virtual-models/lib/Jifty/Handler.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Handler.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Handler.pm	Mon May  7 16:28:32 2007
@@ -48,7 +48,21 @@
 
 
 
-__PACKAGE__->mk_accessors(qw(mason dispatcher declare_handler static_handler cgi apache stash));
+__PACKAGE__->mk_accessors(qw(dispatcher _view_handlers  cgi apache stash));
+
+=head2 mason
+
+
+Returns the Jifty c<HTML::Mason> handler. While this "should" be just another template handler,
+we still rely on it for little bits of Jifty infrastructure. Patches welcome.
+
+=cut
+
+sub mason {
+    my $self = shift;
+    return $self->view('Jifty::View::Mason::Handler');
+}
+
 
 =head2 new
 
@@ -66,124 +80,82 @@
     $self->dispatcher( Jifty->app_class( "Dispatcher" ) );
     Jifty::Util->require( $self->dispatcher );
     $self->dispatcher->import_plugins;
-    $self->dispatcher->dump_rules;
- 
+	eval { Jifty::Plugin::DumpDispatcher->dump_rules };
+
     $self->setup_view_handlers();
     return $self;
 }
 
-=head2 setup_view_handlers
 
-Initialize all of our view handlers. 
+=head2 view_handlers
+
+Returns a list of modules implementing view for your Jifty application.
 
 XXX TODO: this should take pluggable views
 
 =cut
 
-sub setup_view_handlers {
-    my $self = shift;
 
-    $self->declare_handler( Jifty::View::Declare::Handler->new( $self->templatedeclare_config));
-    $self->mason( Jifty::View::Mason::Handler->new( $self->mason_config ) );
-    $self->static_handler(Jifty::View::Static::Handler->new());
-}
+sub view_handlers { qw(Jifty::View::Static::Handler Jifty::View::Declare::Handler Jifty::View::Mason::Handler)}
 
 
-=head2 create_cache_directories
+=head2 fallback_view_handler
 
-Attempts to create our app's mason cache directory.
+Returns the object for our "last-resort" view handler. By default, this is the L<HTML::Mason> handler.
 
 =cut
 
-sub create_cache_directories {
-    my $self = shift;
 
-    for ( Jifty->config->framework('Web')->{'DataDir'} ) {
-        Jifty::Util->make_path( Jifty::Util->absolute_path($_) );
-    }
-}
 
+sub fallback_view_handler { my $self = shift; return $self->view('Jifty::View::Mason::Handler') }
 
-=head2 mason_config
+=head2 setup_view_handlers
+
+Initialize all of our view handlers. 
 
-Returns our Mason config.  We use the component root specified in the
-C<Web/TemplateRoot> framework configuration variable (or C<html> by
-default).  Additionally, we set up a C<jifty> component root, as
-specified by the C<Web/DefaultTemplateRoot> configuration.  All
-interpolations are HTML-escaped by default, and we use the fatal error
-mode.
 
 =cut
 
-sub mason_config {
-    my %config = (
-        static_source => 1,
-        use_object_files => 1,
-        preprocess => sub {
-            # Force UTF-8 semantics on all our components by
-            # prepending this block to all components as Mason
-            # components defaults to parse the text as Latin-1
-            ${$_[0]} =~ s!^!<\%INIT>use utf8;</\%INIT>\n!;
-        },
-        data_dir =>  Jifty::Util->absolute_path( Jifty->config->framework('Web')->{'DataDir'} ),
-        allow_globals => [
-            qw[ $JiftyWeb ],
-            @{Jifty->config->framework('Web')->{'Globals'} || []},
-        ],
-        comp_root     => [ 
-                          [application =>  Jifty::Util->absolute_path( Jifty->config->framework('Web')->{'TemplateRoot'} )],
-                         ],
-        %{ Jifty->config->framework('Web')->{'MasonConfig'} },
-    );
+sub setup_view_handlers {
+    my $self = shift;
 
-    for my $plugin (Jifty->plugins) {
-        my $comp_root = $plugin->template_root;
-        unless  ( $comp_root and -d $comp_root) {
-            next;
-        }
-        Jifty->log->debug( "Plugin @{[ref($plugin)]} mason component root added: (@{[$comp_root ||'']})");
-        push @{ $config{comp_root} }, [ ref($plugin)."-".Jifty->web->serial => $comp_root ];
+    $self->_view_handlers({});
+    foreach my $class ($self->view_handlers()) {
+        $self->_view_handlers->{$class} =  $class->new();
     }
-    push @{$config{comp_root}}, [jifty => Jifty->config->framework('Web')->{'DefaultTemplateRoot'}];
 
-    push @{ $config{comp_root} }, [jifty => Jifty->config->framework('Web')->{'DefaultTemplateRoot'}];
+}
+
+=head2 view ClassName
+
+
+Returns the Jifty view handler for C<ClassName>.
+
+=cut
+
+sub view {
+    my $self = shift;
+    my $class = shift;
+    return $self->_view_handlers->{$class};
 
-    # In developer mode, we want halos, refreshing and all that other good stuff. 
-    if (Jifty->config->framework('DevelMode') ) {
-        push @{$config{'plugins'}}, 'Jifty::Mason::Halo';
-        $config{static_source}    = 0;
-        $config{use_object_files} = 0;
-    }
-    return %config;
-        
 }
 
 
-=head2 templatedeclare_config
+=head2 create_cache_directories
+
+Attempts to create our app's mason cache directory.
 
 =cut
 
-sub templatedeclare_config {
-    
-    my %config = (
-        %{ Jifty->config->framework('Web')->{'TemplateDeclareConfig'} ||{}},
-    );
+sub create_cache_directories {
+    my $self = shift;
 
-    for my $plugin ( Jifty->plugins ) {
-        my $comp_root = $plugin->template_class;
-        Jifty::Util->require($comp_root);
-        unless (defined $comp_root and $comp_root->isa('Template::Declare') ){
-            next;
-        }
-        Jifty->log->debug( "Plugin @{[ref($plugin)]}::View added as a Template::Declare root");
-        push @{ $config{roots} }, $comp_root ;
+    for ( Jifty->config->framework('Web')->{'DataDir'} ) {
+        Jifty::Util->make_path( Jifty::Util->absolute_path($_) );
     }
-
-    push @{$config{roots}},  Jifty->config->framework('TemplateClass');
-        
-    return %config;
 }
 
+
 =head2 cgi
 
 Returns the L<CGI> object for the current request, or C<undef> if
@@ -230,30 +202,22 @@
     $self->apache( HTML::Mason::FakeApache->new( cgi => $self->cgi ) );
 
     # Build a new stash for the life of this request
-    $self->stash({});
+    $self->stash( {} );
     local $HTML::Mason::Commands::JiftyWeb = Jifty::Web->new();
 
     Jifty->web->request( Jifty::Request->new()->fill( $self->cgi ) );
     Jifty->web->response( Jifty::Response->new );
     Jifty->api->reset;
-    $_->new_request for Jifty->plugins;
-
+    for ( Jifty->plugins ) {
+        $_->new_request;
+    }
     Jifty->log->debug( "Received request for " . Jifty->web->request->path );
-    my $sent_response = 0;
-    $sent_response
-        = $self->static_handler->handle_request( Jifty->web->request->path )
-        if ( Jifty->config->framework('Web')->{'ServeStaticFiles'} );
-
-    Jifty->web->setup_session unless $sent_response;
+    Jifty->web->setup_session;
 
     # Return from the continuation if need be
     Jifty->web->request->return_from_continuation;
-
-    unless ($sent_response) {
-        Jifty->web->session->set_cookie;
-        $self->dispatcher->handle_request()
-    }
-
+    Jifty->web->session->set_cookie;
+    $self->dispatcher->handle_request();
     $self->cleanup_request();
 
 }

Modified: jifty/branches/virtual-models/lib/Jifty/I18N.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/I18N.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/I18N.pm	Mon May  7 16:28:32 2007
@@ -6,7 +6,8 @@
 use Locale::Maketext::Lexicon ();
 use Email::MIME::ContentType;
 use Encode::Guess qw(iso-8859-1);
-use File::ShareDir ':ALL';
+use File::ShareDir 'module_dir';
+use Jifty::Util;
 
 =head1 NAME
 
@@ -48,18 +49,7 @@
     my $self  = {};
     bless $self, $class;
 
-    my @import = (
-        'Gettext',Jifty->config->framework('L10N')->{'PoDir'}. '/*.po',
-        'Gettext',Jifty->config->framework('L10N')->{'DefaultPoDir'}. '/*.po'
-        );
-
-    foreach my $plugin (Jifty->plugins) {
-        local $@;
-        my $dir = eval { module_dir(ref($plugin)); };
-        next unless $dir;
-        push @import, 'Gettext';
-        push @import, $dir . '/po/*.po';
-    };
+    my @import = map {( Gettext => $_ )} _get_file_patterns();
 
     Locale::Maketext::Lexicon->import(
         {   '*' => \@import,
@@ -108,6 +98,31 @@
     return $self;
 }
 
+=head2 _get_file_patterns
+
+Get list of patterns for all PO files in the project.
+(Paths are gotten from the configuration variables and plugins).
+
+=cut
+
+sub _get_file_patterns {
+    my @ret;
+
+    push(@ret, Jifty->config->framework('L10N')->{'PoDir'});
+    push(@ret, Jifty->config->framework('L10N')->{'DefaultPoDir'});
+
+    # Convert relative paths to absolute ones
+    @ret = map { Jifty::Util->absolute_path($_) } @ret;
+
+    foreach my $plugin (Jifty->plugins) {
+        my $dir = $plugin->po_root;
+        next unless ($dir and -d $dir and -r $dir );
+        push @ret, $dir ;
+    }
+
+    return ( map { $_ . '/*.po' } @ret );
+}
+
 =head2 get_language_handle
 
 Get the lanauge language for this request.
@@ -126,18 +141,16 @@
 
 =cut
 
-my $last_modified = '';
+my $LAST_MODIFED = '';
 sub refresh {
     my $modified = join(
         ',',
-        sort map { $_ => -M $_ } map { glob("$_/*.po") } (
-            Jifty->config->framework('L10N')->{'PoDir'},
-            Jifty->config->framework('L10N')->{'DefaultPoDir'}
-        )
+        #   sort map { $_ => -M $_ } map { glob("$_/*.po") } ( Jifty->config->framework('L10N')->{'PoDir'}, Jifty->config->framework('L10N')->{'DefaultPoDir'}
+        sort map { $_ => -M $_ } map { glob($_) } _get_file_patterns()
     );
-    if ($modified ne $last_modified) {
+    if ($modified ne $LAST_MODIFED) {
         Jifty::I18N->new;
-        $last_modified = $modified;
+        $LAST_MODIFED = $modified;
     }
 }
 

Modified: jifty/branches/virtual-models/lib/Jifty/JSON.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/JSON.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/JSON.pm	Mon May  7 16:28:32 2007
@@ -73,7 +73,13 @@
 
     local $JSON::Syck::SingleQuote = $args->{singlequote};
     local $JSON::Syck::ImplicitUnicode = 1;
-    JSON::Syck::Dump($obj);
+	my $json = JSON::Syck::Dump($obj);
+	if (! $args->{singlequte}) {
+		$json =~ s/\n\n\n/\\n/gs;	# fix syck bug
+		$json =~ s/\n/\\n/gs;		# just to be safe
+		$json =~ s/\r/\\r/gs;
+	}
+	return $json;
 }
 
 # We should escape double-quotes somehow, so that we can guarantee
@@ -101,7 +107,7 @@
     local *JSON::Converter::_stringfy = sub {
         my $arg = shift;
         $arg =~ s/([\\\n'\r\t\f\b])/$esc{$1}/eg;
-        $arg =~ s/([\x00-\x07\x0b\x0e-\x1f])/'\\u00' . unpack('H2',$1)/eg;
+        $arg =~ s/([\x00-\x07\x0b\x0e-\x1f])/'\\u00' . unpack('H2',$1)/egs;
         return "'" . $arg ."'";
     };
     return JSON::objToJson($obj, $args);

Modified: jifty/branches/virtual-models/lib/Jifty/LetMe.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/LetMe.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/LetMe.pm	Mon May  7 16:28:32 2007
@@ -97,7 +97,6 @@
     return '' unless ($user->auth_token);
 
 
-
     # build an md5sum of the email token and until and our secret
     my $digest = Digest::MD5->new();
     $digest->add( $user->auth_token );
@@ -273,18 +272,22 @@
     # email must exist
 
     unless ($self->_user_from_email($self->email)) {
+        Jifty->log->debug("Token validation failed - Invalid user");
         return undef;
     }
 
     unless ($self->path) {
+        Jifty->log->debug("Token validation failed - Invalid path");
         return undef;
     }
     unless ($self->checksum_provided) {
+        Jifty->log->debug("Token validation failed - Checksum not provided");
         return undef;
     }
 
 
     unless ($self->_correct_checksum_provided) {
+        Jifty->log->debug("Token validation failed - Checksum not correct");
         return undef;
     }
 
@@ -301,11 +304,13 @@
 
 sub _correct_checksum_provided {
     my $self = shift;
+        Jifty->log->debug("LetMe checksum: ".$self->checksum_provided . " vs ". $self->generate_checksum );
     return undef
         unless ( $self->checksum_provided eq $self->generate_checksum )
         or
         ( $self->checksum_provided eq $self->generate_koremutake_checksum );
 
+    return 1;
 }
 
 1;

Modified: jifty/branches/virtual-models/lib/Jifty/Manual/AccessControl.pod
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Manual/AccessControl.pod	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Manual/AccessControl.pod	Mon May  7 16:28:32 2007
@@ -34,23 +34,32 @@
 C<check_update_rights()> to look for the C<admin> right rather than the 
 C<update> right, if the C<FIELD> is C<paid_account>.
 
-=head1 ENABLING ACCESS CONTROL USING THE LOGIN PLUGIN
+=head1 ENABLING ACCESS CONTROL USING THE USER PLUGIN
 
-To painlessly enable the AccessControl subsystem, the
-C<Login> plugin may get enabled. This is done in the
-F<etc/config.yml> configuration file.
+To painlessly enable the AccessControl subsystem, a User plugin is available
+with an authentication plugin, the C<Authentication::Password> plugin may get 
+enabled. This is done in the F<etc/config.yml> configuration file.
 
     Plugins:
-      - Login: {}
+      - Authentication::Password: {}
 
-Then, create an C<App::Model::User> class that derives from
-C<Jifty::Plugin::Login::Model::User>, for example:
+Then, create an C<App::Model::User> class that will be override with
+C<Jifty::Plugin::User::Mixin::Model::User> and an authentication plugin 
+C<Jifty::Plugin::Authentication::Password::Mixin::Model::User>
+, for example:
 
     use strict;
     use warnings;
 
     package App::Model::User;
-    use base 'Jifty::Plugin::Login::Model::User';
+
+    use Jifty::DBI::Schema;
+
+    use App::Record schema {
+    };
+
+    use Jifty::Plugin::User::Mixin::Model::User;
+    use Jifty::Plugin::Authentication::Password::Mixin::Model::User;
 
     # Your model-specific methods go here.
 
@@ -70,7 +79,7 @@
     use App::Record schema {
         column 'extra_column_name';
 
-        column 'group' =>
+        column 'mygroup' =>
                valid_values are qw/admin moderator user/,
                default is 'user';
 
@@ -92,10 +101,10 @@
         return 0 
             if ( $type eq 'update'
                 and !$self->current_user->is_superuser
-                and $args{'column'} eq 'group' ); 
+                and $args{'column'} eq 'mygroup' ); 
 
 
-        return $self->SUPER::current_user_can($type, %args);
+        return 1;
     }
 
 Defining a method C<_init> in your C<App::CurrentUser> class gives you
@@ -115,17 +124,15 @@
         my $self = shift;
         my %args = (@_);
 
-        if (delete $args{'_bootstrap'} ) {
-            $self->is_bootstrap_user(1);
-        } elsif (keys %args) {
+        if (keys %args) {
             $self->user_object(App::Model::User->new(current_user => $self));
             $self->user_object->load_by_cols(%args);
 
-            if ( $self->user_object->group eq 'admin') {
+            if ( $self->user_object->mygroup eq 'admin') {
                 $self->is_superuser(1);
             };
 
-            $self->status($self->user_object->group);
+            $self->group($self->user_object->mygroup);
         };
         $self->SUPER::_init(%args);
     };
@@ -133,9 +140,9 @@
 With your C<App::CurrentUser>, users in group admin are superuser and you can 
 use C<< Jifty->web->current_user->group >> in your application.
 
-=head2 Templates defined by the C<Login> plugin
+=head2 Templates defined by the C<Authentication::Password> plugin
 
-To avoid the need for repetitive work, the C<Login> plugin already
+To avoid the need for repetitive work, the C<Authentication::Password> plugin already
 defines a couple of usable templates:
 
 =over 4
@@ -156,10 +163,6 @@
 a confirmation mail is sent out that has to get followed by
 the user.
 
-=item F</chgpasswd>
-
-allows a user to change his/her password.
-
 =item F</passwordreminder>
 
 after entering his/her mail address, the user will receive a mail that

Modified: jifty/branches/virtual-models/lib/Jifty/Manual/Cookbook.pod
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Manual/Cookbook.pod	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Manual/Cookbook.pod	Mon May  7 16:28:32 2007
@@ -125,7 +125,7 @@
 zone appropriately. All dates are stored in UTC in the database, to
 ensure consistency.
 
-=head2 How do I emulate 'created_on' field like Rails ?
+=head2 Emulate 'created_on' field like Rails ?
 
 In Rails, if you have a field named 'created_on', it's automatically
 set to the creation time of the record. How can I emulate this
@@ -154,7 +154,7 @@
         $attr->{'created_on'} = DateTime->now;
     };
 
-=head2 How do I emulate 'updated_on' ?
+=head2 Emulate 'updated_on' ?
 
 If a lot of column could change, you can override C<_set> method:
 
@@ -254,7 +254,7 @@
 pluralise or pluralises differently.
 
 
-=head2 How do I perform ajax canonicalization on a given field ?
+=head2 Perform ajax canonicalization on a given field ?
 
 Asking user to input something in a form is really common in a web
 app. For some certain form fields you want them to have a certain
@@ -371,3 +371,20 @@
   };
 
 Otherwise, everything should work as expected.
+
+=head2 Reuse Jifty models and actions outside of a Jifty app
+
+    use lib '/path/to/MyApp/lib';
+
+    use Jifty::Everything;
+    BEGIN { Jifty->new; }
+    
+    use MyApp::Model::Foo;
+    use MyApp::Action::FrobFoo;
+
+From there you can use the model and action to access your data and run your
+actions like you normally would.
+
+If you've actually installed your app into C<@INC>, you can skip the
+C<use lib> line.
+

Modified: jifty/branches/virtual-models/lib/Jifty/Module/Pluggable.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Module/Pluggable.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Module/Pluggable.pm	Mon May  7 16:28:32 2007
@@ -52,7 +52,12 @@
     # On success, it expects you to return undef.
 
     local $UNIVERSAL::require::ERROR;
+
+    no warnings; # This is lexical and turns off exactly one warning below -- "Can't locate package in @ISA".
+                 # (for some reason, "no warnings 'syntax'" does not work as advertised here.)
+                 # Note that it does _not_ turn off warnings triggered in the $module itself.
     $module->require(); # We'd prefer to use Jifty::Util->require() here, but it spews crazy warnings
+
     return $UNIVERSAL::require::ERROR;
 } 
 

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin.pm	Mon May  7 16:28:32 2007
@@ -123,6 +123,18 @@
     return $dir."/web/templates";
 }
 
+=head2 po_root
+
+Returns the plugin's message catalog directory. Returns undef if it doesn't exist.
+
+=cut
+
+sub po_root {
+    my $self = shift;
+    my $dir = $self->_calculate_share();
+    return unless $dir;
+    return $dir."/po";
+}
 
 =head2 template_class
 
@@ -162,4 +174,14 @@
     return $class."::Dispatcher";
 }
 
+=head2 prereq_plugins
+
+Returns an array of plugin module names that this plugin depends on.
+
+=cut
+
+sub prereq_plugins {
+    return ();
+}
+
 1;

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password.pm	Mon May  7 16:28:32 2007
@@ -21,4 +21,16 @@
 
 =cut
 
+
+=head2 prereq_plugins
+
+This plugin depends on the L<User|Jifty::Plugin::User> and L<LetMe|Jifty::Plugin::LetMe> plugins.
+
+=cut
+
+
+sub prereq_plugins {
+    return ('User', 'LetMe');
+}
+
 1;

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/ConfirmEmail.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/ConfirmEmail.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/ConfirmEmail.pm	Mon May  7 16:28:32 2007
@@ -52,10 +52,9 @@
         $self->result->error($msg); 
         return undef;
     }
-    else { warn $msg }
 
     # Set up our login message
-    $self->result->message( _("Welcome to %1, %2. " , Jifty->config->framework('ApplicationName') , $u->name) ." "
+    $self->result->message( _("Welcome to %1, %2." , Jifty->config->framework('ApplicationName') , $u->name) ." "
           . _(". Your email address has now been confirmed.") );
 
     # Actually do the login thing.

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/Login.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/Login.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/Login.pm	Mon May  7 16:28:32 2007
@@ -20,22 +20,22 @@
 =cut
 
 sub arguments { 
-    return( { email => { label => 'Email',
+    return( { email => { label => _('Email'),
                            mandatory => 1,
                            ajax_validates => 1,
                             }  ,
 
               password => { type => 'password',
-                            label => 'Password',
+                            label => _('Password'),
 			    # mandatory in some cases; see validate_password
                             mandatory => 0,
                         },
               hashed_password => { type => 'hidden',
-                            label => 'Hashed Password',
+                            label => _('Hashed Password'),
                         },
               remember => { type => 'checkbox',
-                            label => 'Remember me?',
-                            hints => 'Your browser can remember your login for you',
+                            label => _('Remember me?'),
+                            hints => _('Your browser can remember your login for you'),
                             default => 0,
                           },
 	      token => { type => 'hidden',
@@ -60,7 +60,7 @@
 
     my $u = Jifty->app_class('Model', 'User')->new(current_user => Jifty->app_class('CurrentUser')->superuser);
     $u->load_by_cols( email => $email );
-    return $self->validation_error(email => 'We do not have an account that matches that email.') unless ($u->id);
+    return $self->validation_error(email => _("It doesn't look like there's an account by that name.")) unless ($u->id);
 
     return $self->validation_ok('email');
 }
@@ -83,7 +83,7 @@
 
 
     if ($token eq '') { # we have no token, validate in a standard way
-        if ($pw eq '') {
+        unless ( defined $pw && length $pw ) {
             return $self->validation_error(password => "Please fill in this field." );
         }
     } else { # we have a token, so we should have a hashed pw
@@ -149,7 +149,7 @@
         Jifty->web->session->set( login_token => '' );
     } else {                # no password hashing over the wire
         unless ( $user->id && $user->password_is($password) ) {
-            $self->result->error( _('You may have mistyped your email address or password. Give it another shot.'));
+            $self->result->error( _('You may have mistyped your email or password. Give it another shot.'));
             return;
         }
     }

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/ResetLostPassword.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/ResetLostPassword.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Action/ResetLostPassword.pm	Mon May  7 16:28:32 2007
@@ -82,6 +82,7 @@
         return;
     }
 
+    $u->set_email_confirmed('1');
     # Log in!
     $self->result->message(_("Your password has been reset.  Welcome back."));
     Jifty->web->current_user( $CurrentUser->new( id => $u->id ) );

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Dispatcher.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Dispatcher.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Dispatcher.pm	Mon May  7 16:28:32 2007
@@ -51,7 +51,7 @@
 
 =cut
 
-on qr/^(?:passwordreminder|signup)$/ => run {
+before qr'^/(?:passwordreminder|signup|lost_password)$' => run {
     redirect('/') if ( Jifty->web->current_user->id );
     set 'next' => Jifty->web->request->continuation || Jifty::Continuation->new( request => Jifty::Request->new( path => "/login" ) );
 };
@@ -60,18 +60,21 @@
 
 =cut
 
-on qr/^(?:login)$/ => run {
+before qr|^/(?:login)$| => run {
     redirect('/') if ( Jifty->web->current_user->id );
     set 'next' => Jifty->web->request->continuation || Jifty::Continuation->new( request => Jifty::Request->new( path => "/" ) );
 };
 
+before qr|(?:reset_lost_password)| => run {
+    set 'next' => Jifty->web->request->continuation || Jifty::Continuation->new( request => Jifty::Request->new( path => "/" ) );
+};
 # Send a password reminder for a lost password
 
 =head2 on passwordreminder
 
 =cut
 
-on 'passwordreminder' => run {
+before 'passwordreminder' => run {
     set 'action' => Jifty->web->new_action( class => 'SendPasswordReminder', moniker => 'password_reminder');
 };
 
@@ -82,7 +85,7 @@
 
 =cut
 
-on 'signup' => run {
+before 'signup' => run {
     set 'action' => Jifty->web->new_action( class => 'Signup');
 
 };
@@ -93,7 +96,7 @@
 
 =cut
 
-on 'login' => run {
+before 'login' => run {
     set 'action' => Jifty->web->new_action( class => 'Login');
 };
 

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Mixin/Model/User.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Mixin/Model/User.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/Mixin/Model/User.pm	Mon May  7 16:28:32 2007
@@ -16,16 +16,16 @@
   render_as 'unrendered',
   type is 'varchar',
   default is '',
-  label is 'Authentication token';
+  label is _('Authentication token');
     
 
 
 column password =>
   is mandatory,
   is unreadable,
-  label is 'Password',
+  label is _('Password'),
   type is 'varchar',
-  hints is 'Your password should be at least six characters',
+  hints is _('Your password should be at least six characters'),
   render_as 'password',
   filters are 'Jifty::DBI::Filter::SaltHash';
 
@@ -85,7 +85,7 @@
     my $self      = shift;
     my $new_value = shift;
 
-    return ( 0, q{Passwords need to be at least six characters long} )
+    return ( 0, _('Passwords need to be at least six characters long') )
         if length($new_value) < 6;
 
     return 1;
@@ -128,7 +128,7 @@
     my $self = shift;
     my $auth_token = '';
 
-    $auth_token .= unpack('H2', chr(int rand(255))) for (1..16);
+    $auth_token .= unpack('H2', chr(int rand(256))) for (1..16);
 
     $self->__set(column => 'auth_token', value => $auth_token);
 }

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/View.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/View.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/Authentication/Password/View.pm	Mon May  7 16:28:32 2007
@@ -27,17 +27,17 @@
 
 
 template 'signup' => page {
-    title is 'Signup';
+    title is _('Sign up');
     my ( $action, $next ) = get(qw(action next));
     Jifty->web->form->start( call => $next );
     render_param( $action => 'name' , focus => 1);
     render_param( $action => $_ ) for ( grep {$_ ne 'name'} $action->argument_names );
-    form_submit( label => _('Signup'), submit => $action );
+    form_return( label => _('Sign up'), submit => $action );
     Jifty->web->form->end();
 };
 
 template login => page {
-    { title is 'Login!' };
+    { title is _('Login!') };
     show('login_widget');
 };
 
@@ -49,16 +49,16 @@
         request => Jifty::Request->new( path => "/" ) );
     unless ( Jifty->web->current_user->id ) {
         p {
-            outs( _(        qq{No account yet? It's quick and easy.} ));
+            outs( _( "No account yet? It's quick and easy. " ));
             tangent( label => _("Sign up for an account!"), url   => '/signup');
         };
-        h3  { _(qq{Login with a password}) };
+        h3  { _('Login with a password') };
         div {
             attr { id => 'jifty-login' };
             Jifty->web->form->start( call => $next );
             render_param( $action, 'email', focus => 1 );
             render_param( $action, $_ ) for (qw(password remember));
-            form_submit( label => _(q{Login}), submit => $action );
+            form_return( label => _(q{Login}), submit => $action );
             hyperlink(
                 label => _("Lost your password?"),
                 url   => "/lost_password"
@@ -71,14 +71,14 @@
 };
 
 template 'let/reset_lost_password' => page {
-    attr { title => 'Reset lost password' };
+    my ( $next ) = get(qw(next));
+    title is 'Reset lost password' ;
     my $action = Jifty->web->new_action( class => 'ResetLostPassword' );
 
-    h2   { _('Reset lost password') };
-    form {
+    Jifty->web->form->start( call => $next );
         render_param( $action => $_ ) for ( $action->argument_names );
-        form_submit( label => _("New password") );
-    };
+        form_return( label => _("New password"), submit => $action );
+    Jifty->web->form->end();
 };
 
 template 'let/confirm_email' => sub {
@@ -87,23 +87,25 @@
 };
 
 template 'lost_password' => page {
+    my ( $next ) = get(qw(next));
     my $action = Jifty->web->new_action(
         moniker => 'password_reminder',
         class   => 'SendPasswordReminder',
     );
 
-    h2 { _('Send a link to reset your password') };
+    title is _('Send a link to reset your password');
     outs( _(  "You lost your password. A link to reset it will be sent to the following email address:"));
-
-    form {
-        render_param( $action => $_ ) for ( $action->argument_names );
-        form_submit( label => _("Send") );
-        }
+    my $focused = 0;
+    Jifty->web->form->start( call => $next );
+        render_param( $action => $_, focus => $focused++ ? 0 : 1 ) for ( $action->argument_names );
+            form_return( label => _(q{Send}), submit => $action);
+    Jifty->web->form->end;
 
 };
 
 template 'passwordreminder' => page {
-    attr { title => 'Send Password Reminder' };
+    my $next = get('next');
+     title is  _('Send a password reminder');
     my $action = Jifty->web->new_action(
         moniker => 'password_reminder',
         class   => 'SendPasswordReminder',
@@ -111,10 +113,10 @@
     h2 { _('Send a password reminder') };
     p  { _(  "You lost your password. A reminder will be send to the following mail:") };
 
-    form {
+    Jifty->web->form->start( call => $next );
         render_param( $action => $_ ) for ( $action->argument_names );
-        form_submit( label => _("Send") );
-    };
+        form_return( label => _("Send"), submit => $action);
+    Jifty->web->form->end();
 };
 
 1;

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/ErrorTemplates/View.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/ErrorTemplates/View.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/ErrorTemplates/View.pm	Mon May  7 16:28:32 2007
@@ -104,7 +104,7 @@
                             Jifty->log->error( "Unhandled web error " . $error );
                             page {
                               title is 'Something went awry';
-                              show('_elements/error_text', error => $error );
+                              show('/__jifty/error/_elements/error_text', error => $error );
                         };
                     };
 
@@ -152,7 +152,7 @@
 
     # If we're not in devel, bail
     if ( not Jifty->config->framework("DevelMode") or not $cont ) {
-            show("_elements/error_text");
+            show("/__jifty/error/_elements/error_text");
     #    return;
     }
 

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/OnlineDocs.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/OnlineDocs.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/OnlineDocs.pm	Mon May  7 16:28:32 2007
@@ -4,12 +4,6 @@
 package Jifty::Plugin::OnlineDocs;
 use base qw/Jifty::Plugin/;
 
-require File::Basename;
-require File::Find;
-require File::Temp;
-require File::Spec;
-require Pod::Simple::HTML;
-
 # Your plugin goes here.  If takes any configuration or arguments, you
 # probably want to override L<Jifty::Plugin/init>.
 

Added: jifty/branches/virtual-models/lib/Jifty/Plugin/OnlineDocs/Dispatcher.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/OnlineDocs/Dispatcher.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,35 @@
+use warnings;
+use strict;
+
+package Jifty::Plugin::OnlineDocs::Dispatcher;
+
+=head1 NAME
+
+Jifty::Plugin::OnlineDocs::Dispatcher
+
+=head1 DESCRIPTION
+
+Load up the OnlineDocs tab when we're in Admin mode
+
+=cut
+
+
+use Jifty::Dispatcher -base;
+    
+
+on '*' => run {
+    if ( Jifty->config->framework('AdminMode') ) {
+        my $top = Jifty->web->navigation;
+        $top->child(
+            OnlineDocs =>
+              url      => "/__jifty/online_docs/",
+            label      => _('Online docs'),
+            sort_order => 999
+        );
+    }
+    return ();
+};
+
+
+1;
+

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/REST/Dispatcher.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/REST/Dispatcher.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/REST/Dispatcher.pm	Mon May  7 16:28:32 2007
@@ -123,8 +123,9 @@
         }
     }
 
-    # Attempt to stringify as last resort
-    return stringify( $obj );
+    # As the last resort, return the object itself and expect the $accept-specific
+    # renderer to format the object as e.g. YAML or JSON data.
+    return $obj;
 }
 
 sub _collection_to_data {

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/SkeletonApp/Dispatcher.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/SkeletonApp/Dispatcher.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/SkeletonApp/Dispatcher.pm	Mon May  7 16:28:32 2007
@@ -28,12 +28,6 @@
             label      => _('Administration'),
             sort_order => 998
         );
-        $top->child(
-            OnlineDocs =>
-              url      => "/__jifty/online_docs/",
-            label      => _('Online docs'),
-            sort_order => 999
-        );
     }
     return ();
 };

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/SkeletonApp/View.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/SkeletonApp/View.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/SkeletonApp/View.pm	Mon May  7 16:28:32 2007
@@ -28,7 +28,7 @@
         {
             my $u      = Jifty->web->current_user->user_object;
             my $method = $u->_brief_description;
-            _( 'Hiya, %1.', $u->$method() );
+            eval {_( 'Hiya, %1.', $u->$method() )};
         }
         else {
             _("You're not currently signed in.");
@@ -64,7 +64,9 @@
 
 };
 
-
+private template 'heading_in_wrapper' => sub {
+    h1 { attr { class => 'title' }; outs_raw(get('title')) };
+};
 
 private template 'keybindings' => sub {
     div { id is "keybindings" };

Modified: jifty/branches/virtual-models/lib/Jifty/Plugin/User/Mixin/Model/User.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Plugin/User/Mixin/Model/User.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Plugin/User/Mixin/Model/User.pm	Mon May  7 16:28:32 2007
@@ -26,14 +26,14 @@
 use Jifty::Plugin::User::Record schema {
     column
         name => type is 'text',
-        label is 'Nickname',
-        hints is 'How should I display your name to other users?';
+        label is _('Nickname'),
+        hints is _('How should I display your name to other users?');
     column
         email => type is 'text',
-        label is 'Email address', default is '', is immutable, is distinct;
+        label is _('Email address'), default is '', is immutable, is distinct;
     column
-        email_confirmed => label is 'Email address confirmed?',
-        type is 'boolean', render_as 'Unrendered';
+        email_confirmed => label is _('Email address confirmed?'),
+        type is 'boolean';
 
 };
 
@@ -79,20 +79,19 @@
     my $self      = shift;
     my $new_email = shift;
     
-    return ( 0, "That $new_email doesn't look like an email address." )
+    return ( 0, _("That %1 doesn't look like an email address.", $new_email) )
         if $new_email !~ /\S\@\S/;
     
     my $temp_user = Jifty->app_class('Model','User')->new( current_user => Jifty->app_class('CurrentUser')->superuser );
     $temp_user->load_by_cols( 'email' => $new_email );
     
     # It's ok if *we* have the address we're looking for
-    return ( 0, q{It looks like somebody else is using that address. Is there a chance you have another account?} )
+    return ( 0, _('It looks like somebody else is using that address. Is there a chance you have another account?') )
         if $temp_user->id && ( !$self->id || $temp_user->id != $self->id );
     
     return 1;
 }
 
 
-
 1;
 

Modified: jifty/branches/virtual-models/lib/Jifty/Record.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Record.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Record.pm	Mon May  7 16:28:32 2007
@@ -234,6 +234,11 @@
 sub current_user_can {
     my $self  = shift;
     my $right = shift;
+    
+    if (Jifty->config->framework('SkipAccessControl')) {
+	return 1;	
+    }
+
 
     if (   $self->current_user->is_bootstrap_user
         or $self->current_user->is_superuser )
@@ -594,7 +599,7 @@
 
     # Return the application schema version
     else {
-        my $config = Jifty::Config->new;
+        my $config = Jifty->config();
         return $config->framework('Database')->{'Version'};
     }
 }

Modified: jifty/branches/virtual-models/lib/Jifty/Script/FastCGI.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Script/FastCGI.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Script/FastCGI.pm	Mon May  7 16:28:32 2007
@@ -21,7 +21,7 @@
 
  # These two lines are FastCGI-specific; skip them to run in vanilla CGI mode
  AddHandler fastcgi-script fcgi
- FastCgiServer /path/to/your/jifty/app/bin/jifty
+ FastCgiServer /path/to/your/jifty/app/bin/jifty -initial-env JIFTY_COMMAND=fastcgi 
 
  DocumentRoot /path/to/your/jifty/app/share/web/templates
  ScriptAlias / /path/to/your/jifty/app/bin/jifty/

Modified: jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm	Mon May  7 16:28:32 2007
@@ -89,7 +89,7 @@
     # Import Jifty
     Jifty::Util->require("Jifty");
     Jifty::Util->require("Jifty::Model::Metadata");
-    Jifty->new( no_handle        => 1, logger_component => 'SchemaTool',) unless (Jifty->config);
+    Jifty->new( no_handle        => 1, logger_component => 'SchemaTool',) unless Jifty->class_loader;
 }
 
 =head2 print_help

Added: jifty/branches/virtual-models/lib/Jifty/Server/Prefork.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/lib/Jifty/Server/Prefork.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,29 @@
+package Jifty::Server::Prefork;
+use Net::Server::PreFork ();
+use base 'Jifty::Server';
+
+=head1 NAME
+
+Jifty::Server::Prefork - Jifty::Server that supports multiple connections
+
+=head1 SYNOPSIS
+
+In your F<etc/config.yml>:
+
+  framework:
+    Web:
+      ServerClass: Jifty::Server::Prefork
+
+=head1 METHODS
+
+=head2 net_server
+
+This module depends on the L<Net::Server::Prefork> module, which is part of
+the L<Net::Server> CPAN distribution.
+
+=cut
+
+sub net_server { 'Jifty::Server::Prefork::NetServer' }
+
+
+1;

Added: jifty/branches/virtual-models/lib/Jifty/Server/Prefork/NetServer.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/lib/Jifty/Server/Prefork/NetServer.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,21 @@
+package Jifty::Server::Prefork::NetServer;
+
+use base 'Net::Server::PreFork';
+
+=head1 NAME
+
+Jifty::Server::Prefork::NetServer - Sets up children for Jifty::Server::Prefork
+
+=head1 METHODS
+
+=head2 child_init_hook
+
+Sets up the database connection when spawning a new child
+
+=cut
+
+sub child_init_hook {
+	Jifty->setup_database_connection();
+}
+
+1;

Modified: jifty/branches/virtual-models/lib/Jifty/Subs/Render.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Subs/Render.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Subs/Render.pm	Mon May  7 16:28:32 2007
@@ -54,7 +54,7 @@
 
             unless ( UNIVERSAL::can( $event_class => 'new' ) ) {
                 Jifty->log->error("Receiving unknown event $event_class from the Bus");
-                $event_class = Jifty->config->framework('ApplicationClass')."::Event";
+                $event_class = Jifty->app_class("Event");
             }
 
             Jifty->log->debug("Rendering $channel event $msg");

Modified: jifty/branches/virtual-models/lib/Jifty/Test.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Test.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Test.pm	Mon May  7 16:28:32 2007
@@ -187,16 +187,64 @@
     # Mason's disk caching sometimes causes false tests
     rmtree([ File::Spec->canonpath("$root/var/mason") ], 0, 1);
 
+$class->setup_test_database;
+
+    $class->setup_mailbox;
+}
+
+=head2 setup_test_database
+
+Create the test database. This can be overloaded if you do your databases in a
+different way.
+
+=cut
+
+sub setup_test_database {
+    my $class = shift;
+
+
+    if ($ENV{JIFTY_FAST_TEST}) {
+	local $SIG{__WARN__} = sub {};
+	eval { Jifty->new( no_version_check => 1 ); Jifty->handle->check_schema_version };
+	my $booted;
+	if (Jifty->handle && !$@) {
+	    my $baseclass = Jifty->app_class;
+	    my $schema = Jifty::Script::Schema->new;
+	    $schema->prepare_model_classes;
+	    for my $model_class ( grep {/^\Q$baseclass\E::Model::/} $schema->models ) {
+		# We don't want to get the Collections, for example.
+		next unless $model_class->isa('Jifty::DBI::Record');
+		Jifty->handle->simple_query('TRUNCATE '.$model_class->table );
+		Jifty->handle->simple_query('ALTER SEQUENCE '.$model_class->table.'_id_seq RESTART 1');
+	    }
+	    # Load initial data
+	    eval {
+		my $bootstrapper = Jifty->app_class("Bootstrap");
+		Jifty::Util->require($bootstrapper);
+		$bootstrapper->run() if $bootstrapper->can('run');
+	    };
+	    die $@ if $@;
+	    $booted = 1;
+	}
+	if (Jifty->handle) {
+	    Jifty->handle->disconnect;
+	    Jifty->handle(undef);
+	}
+	if ($booted) {
+            Jifty->new();
+	    return;
+	}
+    }
+
     Jifty->new( no_handle => 1 );
 
     my $schema = Jifty::Script::Schema->new;
-    $schema->{drop_database} =
-      $schema->{create_database} =
-        $schema->{create_all_tables} = 1;
+    $schema->{drop_database}     = 1;
+    $schema->{create_database}   = 1;
+    $schema->{create_all_tables} = 1;
     $schema->run;
 
     Jifty->new();
-    $class->setup_mailbox;
 }
 
 =head2 test_config
@@ -453,7 +501,7 @@
           if Jifty->config and Jifty->bus;
 
         # Remove testing db
-        if (Jifty->handle) {
+        if (Jifty->handle && !$ENV{JIFTY_FAST_TEST}) {
             Jifty->handle->disconnect();
             my $schema = Jifty::Script::Schema->new;
             $schema->{drop_database} = 1;

Modified: jifty/branches/virtual-models/lib/Jifty/Test/WWW/Mechanize.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Test/WWW/Mechanize.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Test/WWW/Mechanize.pm	Mon May  7 16:28:32 2007
@@ -59,7 +59,7 @@
 
     $mech->fill_in_action_ok($mech->moniker_for('MyApp::Action::UpdateInfo'), 
                              owner_id => 'someone');
-    $mech->submit_html_ok(value => 'Save');  
+    $mech->submit_html_ok();  
 
     is($mech->action_field_value($mech->moniker_for("MyApp::Action::UpdateInfo"),
 			     'owner_id'), 
@@ -478,7 +478,7 @@
 
     return undef unless ($id);
 
-    my $object = (Jifty->config->framework('ApplicationClass')."::CurrentUser")->new(id => $id);
+    my $object = Jifty->app_class("CurrentUser")->new(id => $id);
     return $object;
 }
 

Modified: jifty/branches/virtual-models/lib/Jifty/TestServer.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/TestServer.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/TestServer.pm	Mon May  7 16:28:32 2007
@@ -77,9 +77,12 @@
 
     my @extra;
     if (my $profile_file = $ENV{JIFTY_TESTSERVER_PROFILE}) {
-        push @extra, '-d:DProf', '-MClass::Accessor::Named';
+        push @extra, '-d:DProf';
         $ENV{"PERL_DPROF_OUT_FILE_NAME"} = $profile_file;
     }
+    if ($ENV{JIFTY_TESTSERVER_NAMED_ACCESSOR}) {
+        push @extra, '-MClass::Accessor::Named';
+    }
     if (my $coverage = $ENV{JIFTY_TESTSERVER_COVERAGE}) {
         push @extra, '-MDevel::Cover'.($coverage =~ m/,/ ? "=$coverage" : '');
     }

Modified: jifty/branches/virtual-models/lib/Jifty/Upgrade.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Upgrade.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Upgrade.pm	Mon May  7 16:28:32 2007
@@ -94,7 +94,7 @@
             # Convert columns
             my ($schema) = Jifty->handle->fetch_result("SELECT sql FROM sqlite_master WHERE tbl_name = '$table_name' AND type = 'table'");
 
-            $schema =~ s/(.*create\s+table\s+)\S+(.*?\(\s*)//i;
+            $schema =~ s/(.*create\s+table\s+)\S+(.*?\(\s*)//i or die "Cannot find 'CREATE TABLE' statement in schema for '$table_name': $schema";
 
             my $new_table_name    = join( '_', $table_name, 'new', $$ );
             my $new_create_clause = "$1$new_table_name$2";

Modified: jifty/branches/virtual-models/lib/Jifty/Util.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Util.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Util.pm	Mon May  7 16:28:32 2007
@@ -201,7 +201,7 @@
 =head2 make_path PATH
 
 When handed a directory, creates that directory, starting as far up the 
-chain as necessary. (This is what 'mkdir -p' does in your shell)
+chain as necessary. (This is what 'mkdir -p' does in your shell).
 
 =cut
 

Modified: jifty/branches/virtual-models/lib/Jifty/View/Declare/Handler.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/View/Declare/Handler.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/View/Declare/Handler.pm	Mon May  7 16:28:32 2007
@@ -5,7 +5,6 @@
 
 use base qw/Jifty::Object Class::Accessor/;
 use Template::Declare;
-use Encode ();
 
 __PACKAGE__->mk_accessors(qw/root_class/);
 
@@ -28,11 +27,37 @@
     my $class = shift;
     my $self = {};
     bless $self,$class;
-    Template::Declare->init(@_);
+   
+    Template::Declare->init(@_ || $self->config());
     return $self;
 }
 
 
+=head2 config
+
+=cut
+
+sub config {
+    
+    my %config = (
+        %{ Jifty->config->framework('Web')->{'TemplateDeclareConfig'} ||{}},
+    );
+
+    for my $plugin ( Jifty->plugins ) {
+        my $comp_root = $plugin->template_class;
+        Jifty::Util->require($comp_root);
+        unless (defined $comp_root and $comp_root->isa('Template::Declare') ){
+            next;
+        }
+        Jifty->log->debug( "Plugin @{[ref($plugin)]}::View added as a Template::Declare root");
+        push @{ $config{roots} }, $comp_root ;
+    }
+
+    push @{$config{roots}},  Jifty->config->framework('TemplateClass');
+        
+    return %config;
+}
+
 =head2 show TEMPLATENAME
 
 Render a template. Expects that the template and any jifty methods called internally will end up being returned as a scalar, which we then print to STDOUT
@@ -41,20 +66,35 @@
 =cut
 
 sub show {
-    my $self          = shift;
+    my $self     = shift;
     my $template = shift;
 
-    no warnings qw/redefine utf8/;
+    no warnings qw/redefine/;
     local *Jifty::Web::out = sub {
         shift;    # Turn the method into a function
         goto &Template::Declare::Tags::outs_raw;
     };
-    my $content =Template::Declare::Tags::show($template);
-        unless ( Jifty->handler->apache->http_header_sent ||Jifty->web->request->is_subrequest ) {
-            Jifty->handler->apache->send_http_header();
+    my $content = Template::Declare::Tags::show( $template );
+    return unless defined $content && length $content;
+
+    my $r = Jifty->handler->apache;
+    $r->content_type || $r->content_type('text/html; charset=utf-8'); # Set up a default
+    unless ( Jifty->handler->apache->http_header_sent || Jifty->web->request->is_subrequest ) {
+        Jifty->handler->apache->send_http_header;
+    }
+
+    if ( my ($enc) = $r->content_type =~ /charset=([\w-]+)$/ ) {
+        if ( lc($enc) =~ /utf-?8/) {
+            binmode *STDOUT, ":utf8" or die "couldn't set layers: $!";
         }
+        else {
+            binmode *STDOUT, ":encoding($enc)" or die "couldn't set layers: $!";
+        }
+    } else {
+        binmode *STDOUT or die "couldn't set layers: $!";
+    }
+
     print STDOUT $content;
-    Encode::_utf8_on($content);
     return undef;
 }
 

Modified: jifty/branches/virtual-models/lib/Jifty/View/Declare/Helpers.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/View/Declare/Helpers.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/View/Declare/Helpers.pm	Mon May  7 16:28:32 2007
@@ -6,7 +6,7 @@
 use base qw/Exporter/;
 use Template::Declare::Tags;
 
-our @EXPORT = ( qw(form hyperlink tangent redirect new_action form_submit form_next_page page wrapper request get set render_param current_user render_action render_region), @Template::Declare::Tags::EXPORT);
+our @EXPORT = ( qw(form hyperlink tangent redirect new_action form_submit form_return  form_next_page page wrapper request get set render_param current_user render_action render_region), @Template::Declare::Tags::EXPORT);
 
 
 =head1 NAME
@@ -25,22 +25,24 @@
 =head2 form CODE
 
 Takes a subroutine reference or block of perl as its only argument and renders it as a Jifty C<form>. 
-Bug: you can't currently specify arguments to form->start.
 
 
 =cut
 
-
-{
+ {
     no warnings qw/redefine/;
     sub form (&) {
         my $code = shift;
-        outs_raw( Jifty->web->form->start );
-        $code->();
-        outs_raw( Jifty->web->form->end );
-        return '';
+
+        smart_tag_wrapper {
+          outs_raw( Jifty->web->form->start(@_) );
+          $code->();
+          outs_raw( Jifty->web->form->end );
+          return '';
+        };
     }
-}
+ }
+
 
 =head2 hyperlink 
 
@@ -49,10 +51,22 @@
 =cut
 
 sub hyperlink(@) {
-    outs_raw( Jifty->web->link(@_) );
+    _function_wrapper( link => @_);
+}
+
+sub _function_wrapper {
+    my $function = shift;
+    Template::Declare->new_buffer_frame;
+    my $once= Jifty->web->$function(@_)->render || '';
+    my $content = Template::Declare->buffer->data() ||'';
+    Template::Declare->end_buffer_frame;
+    outs_raw( $content.$once); 
     return '';
+
+
 }
 
+
 =head2 tangent
 
 Shortcut for L<Jifty::Web/tangent>.
@@ -61,8 +75,7 @@
 
 
 sub tangent(@) {
-    outs_raw( Jifty->web->tangent(@_) );
-    return '';
+    _function_wrapper( tangent => @_);
 }
 
 =head2 redirect
@@ -98,9 +111,14 @@
 
 sub render_region(@) {
     unshift @_, 'name' if @_ % 2;
+    my $args = {@_};
+    my $path = $args->{path} ||= '/__jifty/empty';
+    if ($Template::Declare::Tags::self && $path !~ m|^/|) {
+	$args->{path} = $Template::Declare::Tags::self->path_for($path);
+    }
     local $Template::Declare::Tags::self = undef;
     Template::Declare->new_buffer_frame;
-    Jifty::Web::PageRegion->new(@_)->render;
+    Jifty::Web::PageRegion->new(%$args)->render;
     my $content = Template::Declare->buffer->data();
     Template::Declare->end_buffer_frame;
     Jifty->web->out($content);
@@ -143,6 +161,17 @@
     }
 }
 
+=head2 form_return
+
+Shortcut for L<Jifty::Web::Form/return>.
+
+=cut
+
+sub form_return(@) {
+    outs_raw( Jifty->web->form->return(@_) );
+    '';
+}
+
 =head2 form_submit
 
 Shortcut for L<Jifty::Web::Form/submit>.
@@ -245,10 +274,10 @@
 sub page (&) {
     my $code = shift;
     sub {
+        my $self = shift;
         Jifty->handler->apache->content_type('text/html; charset=utf-8');
-        wrapper($code);
+        wrapper(sub { $code->($self) });
     };
-
 }
 
 
@@ -267,7 +296,7 @@
     my $done_header;
     my $render_header = sub {
         no warnings qw( uninitialized redefine once );
-        $title ||= Jifty->config('framework')->{'ApplicationName'};
+        $title ||= Jifty->config->framework('ApplicationName');
 
         #   defined $title or return;
         return if $done_header++;
@@ -287,14 +316,13 @@
             show 'salutation'; 
             show 'menu'; 
         };
-            div {
+            div { attr { id is 'content'};
                 div {
                     {
                         no warnings qw( uninitialized redefine once );
 
                         local *is::title = sub {
                             shift;
-
                             for (@_) {
                                 if ( ref($_) eq 'CODE' ) {
                                     Template::Declare->new_buffer_frame;
@@ -306,15 +334,17 @@
                                 }
                             }
                             &$render_header;
-                            h1 { attr { class => 'title' }; outs_raw($title) };
+                            my $oldt = get('title'); set(title => $title);
+                            show 'heading_in_wrapper';
+                            set(title => $oldt);
                         };
-                }
 
                         &_render_pre_content_hook();
                         Jifty->web->render_messages;
                         &$content_code;
                         &$render_header unless ($done_header);
                         &_render_jifty_page_detritus();
+                }
 
                 };
             };

Modified: jifty/branches/virtual-models/lib/Jifty/View/Mason/Handler.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/View/Mason/Handler.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/View/Mason/Handler.pm	Mon May  7 16:28:32 2007
@@ -54,7 +54,7 @@
 sub new {
     my $package = shift;
 
-    my %p = @_;
+    my %p = @_ || $package->config;
     my $self = $package->SUPER::new( request_class => 'HTML::Mason::Request::Jifty',
                                      out_method => \&out_method,
                                      %p );
@@ -66,6 +66,57 @@
 }
 
 
+=head2 config
+
+Returns our Mason config.  We use the component root specified in the
+C<Web/TemplateRoot> framework configuration variable (or C<html> by
+default).  Additionally, we set up a C<jifty> component root, as
+specified by the C<Web/DefaultTemplateRoot> configuration.  All
+interpolations are HTML-escaped by default, and we use the fatal error
+mode.
+
+=cut
+
+sub config {
+    my %config = (
+        static_source => 1,
+        use_object_files => 1,
+        preprocess => sub {
+            # Force UTF-8 semantics on all our components by
+            # prepending this block to all components as Mason
+            # components defaults to parse the text as Latin-1
+            ${$_[0]} =~ s!^!<\%INIT>use utf8;</\%INIT>\n!;
+        },
+        data_dir =>  Jifty::Util->absolute_path( Jifty->config->framework('Web')->{'DataDir'} ),
+        allow_globals => [
+            qw[ $JiftyWeb ],
+            @{Jifty->config->framework('Web')->{'Globals'} || []},
+        ],
+        comp_root     => [ 
+                          [application =>  Jifty::Util->absolute_path( Jifty->config->framework('Web')->{'TemplateRoot'} )],
+                         ],
+        %{ Jifty->config->framework('Web')->{'MasonConfig'} },
+    );
+
+    for my $plugin (Jifty->plugins) {
+        my $comp_root = $plugin->template_root;
+        unless  ( $comp_root and -d $comp_root) {
+            next;
+        }
+        Jifty->log->debug( "Plugin @{[ref($plugin)]} mason component root added: (@{[$comp_root ||'']})");
+        push @{ $config{comp_root} }, [ ref($plugin)."-".Jifty->web->serial => $comp_root ];
+    }
+    push @{$config{comp_root}}, [jifty => Jifty->config->framework('Web')->{'DefaultTemplateRoot'}];
+
+    # In developer mode, we want halos, refreshing and all that other good stuff. 
+    if (Jifty->config->framework('DevelMode') ) {
+        push @{$config{'plugins'}}, 'Jifty::Mason::Halo';
+        $config{static_source}    = 0;
+        $config{use_object_files} = 0;
+    }
+    return %config;
+}
+
 =head2 out_method
 
 The default output method.  Sets the content-type to C<text/html;
@@ -80,17 +131,18 @@
 
     $r->content_type || $r->content_type('text/html; charset=utf-8'); # Set up a default
 
-    if ($r->content_type =~ /charset=([\w-]+)$/ ) {
-        my $enc = $1;
-	if (lc($enc) =~ /utf-?8/) {
+    if ( my ($enc) = $r->content_type =~ /charset=([\w-]+)$/ ) {
+        if ( lc($enc) =~ /utf-?8/ ) {
             binmode *STDOUT, ":utf8";
-	}
-	else {
+        }
+        else {
             binmode *STDOUT, ":encoding($enc)";
-	}
+        }
+    } else {
+        binmode *STDOUT;
     }
 
-    unless ($r->http_header_sent or not $m->auto_send_headers) {
+    unless ( $r->http_header_sent or not $m->auto_send_headers ) {
         $r->send_http_header();
     }
 
@@ -110,24 +162,24 @@
 
 sub escape_utf8 {
     my $ref = shift;
-    my $val = $$ref;
-    use bytes;
     no warnings 'uninitialized';
-    $val =~ s/&/&#38;/g;
-    $val =~ s/</&lt;/g;
-    $val =~ s/>/&gt;/g;
-    $val =~ s/\(/&#40;/g;
-    $val =~ s/\)/&#41;/g;
-    $val =~ s/"/&#34;/g;
-    $val =~ s/'/&#39;/g;
-    $$ref = $val;
-    Encode::_utf8_on($$ref);
+    $$ref =~ s/&/&#38;/g;
+    $$ref =~ s/</&lt;/g;
+    $$ref =~ s/>/&gt;/g;
+    $$ref =~ s/\(/&#40;/g;
+    $$ref =~ s/\)/&#41;/g;
+    $$ref =~ s/"/&#34;/g;
+    $$ref =~ s/'/&#39;/g;
 }
 
-
 =head2 escape_uri SCALARREF
 
-Escapes URI component according to RFC2396
+Escapes in-place URI component according to RFC2396. Takes a reference to
+perl string.
+
+*Note* that octets would be treated as latin1 encoded sequence and converted
+to UTF-8 encoding and then escaped. So this sub always provide UTF-8 escaped
+string. See also L<Encode> for more info about converting.
 
 =cut
 
@@ -135,18 +187,38 @@
     my $ref = shift;
     $$ref = Encode::encode_utf8($$ref);
     $$ref =~ s/([^a-zA-Z0-9_.!~*'()-])/uc sprintf("%%%02X", ord($1))/eg;
-    Encode::_utf8_on($$ref);
 }
 
 
-=head2 handle_comp COMPONENT
+=head2 template_exists COMPONENT
+
+A convenience method for $self->interp->comp_exists().  
+(Jifty uses this method as part of its standard Templating system API).
+
+=cut
+
+sub template_exists {
+	my $self = shift;
+	return $self->interp->comp_exists(@_);
+}
+
+
+=head2 show COMPONENT
 
 Takes a component path to render.  Deals with setting up a global
 L<HTML::Mason::FakeApache> and Request object, and calling the
 component.
 
+=head2 handle_comp
+
+A synonym for show
+
 =cut
 
+sub show {
+    shift->handle_comp(@_);
+}
+
 sub handle_comp {
     my ($self, $comp) = (shift, shift);
 

Modified: jifty/branches/virtual-models/lib/Jifty/View/Static/Handler.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/View/Static/Handler.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/View/Static/Handler.pm	Mon May  7 16:28:32 2007
@@ -55,13 +55,25 @@
 }
 
 
-=head2 handle_request $path
+=head2 show $path
 
 Handle a request for C<$path>. If we can't find a static file of that name, return undef.
 
 
 =cut
 
+=head2 handle_request $path
+
+
+An alias for L</show>
+
+=cut
+
+
+sub show {
+    shift->handle_request(@_);
+}
+
 sub handle_request {
     my $self = shift;
     my $path = shift;
@@ -113,6 +125,16 @@
 
 =cut
 
+=head2 template_exists $path
+
+An alias for L</file_path>.
+
+=cut
+
+sub template_exists {
+    shift->file_path(@_);
+}
+
 sub file_path {
     my $self    = shift;
     my $file    = shift;

Modified: jifty/branches/virtual-models/lib/Jifty/Web.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web.pm	Mon May  7 16:28:32 2007
@@ -62,8 +62,10 @@
     yui/dom.js
     yui/event.js
     yui/calendar.js
+    yui/element-beta.js
     yui/tabview.js
     yui/container.js
+    yui/menu.js
     app.js
     app_behaviour.js
     css_browser_selector.js
@@ -776,7 +778,8 @@
 
 sub return {
     my $self = shift;
-    my %args = (@_);
+    my %args = (to => undef,
+                @_);
     my $continuation = Jifty->web->request->continuation;
     if (not $continuation and $args{to}) {
         $continuation = Jifty::Continuation->new(

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form.pm	Mon May  7 16:28:32 2007
@@ -226,6 +226,26 @@
     return '';
 }
 
+=head2 return MESSAGE, [PARAMETERS]
+
+Renders a return button with the text MESSAGE on it (which will be
+HTML escaped).  Returns the empty string (for ease of use in
+interpolation).  Any extra PARAMETERS are passed to
+L<Jifty::Web::Form::Field::Button>'s constructor.
+
+=cut
+
+sub return {
+    my $self = shift;
+
+    my $button = Jifty->web->return(as_button => 1, @_);
+    Jifty->web->out(qq{<div class="submit_button">});
+    $button->render_widget;
+    Jifty->web->out(qq{</div>});
+
+    return '';
+}
+
 =head2 end
 
 Renders the closing form tag (including rendering errors for and

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Element.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Element.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Element.pm	Mon May  7 16:28:32 2007
@@ -111,6 +111,10 @@
 A hashref of arguments to pass to the effect when it is created.  These
 can be used to change the duration of the effect, for instance.
 
+=item beforeclick => STRING
+
+String contains some Javascript code to be used before a click.
+
 =item confirm => STRING
 
 Prompt the user with a Javascript confirm dialog with the given text
@@ -234,6 +238,7 @@
         my @fragments;
         my %actions;    # Maps actions => disable?
         my $confirm;
+        my $beforeclick;
 
         for my $hook (grep {ref $_ eq "HASH"} (@{$value})) {
 
@@ -254,6 +259,11 @@
                 $confirm = $hook->{confirm};
             }
 
+            # Some code usable before onclick
+            if ($hook->{beforeclick}) {
+                $beforeclick = $hook->{beforeclick};
+            }
+
             # Placement
             if (exists $hook->{append}) {
                 @args{qw/mode path/} = ('Bottom', $hook->{append});
@@ -309,11 +319,14 @@
         my $string = join ";", (grep {not ref $_} (ref $value eq "ARRAY" ? @{$value} : ($value)));
         if (@fragments or %actions) {
 
-            my $update = "update( ". Jifty::JSON::objToJson( {actions => \%actions, fragments => \@fragments }, {singlequote => 1}) .", this );";
+            my $update = Jifty->web->escape("update( ". Jifty::JSON::objToJson( {actions => \%actions, fragments => \@fragments }, {singlequote => 1}) .", this );");
             $string .= $self->javascript_preempt ? "return $update" : "$update; return true;";
         }
         if ($confirm) {
-            $string = "if(!confirm(" . Jifty::JSON::objToJson($confirm, {singlequote => 1}) . ")) return false;" . $string;
+            $string = Jifty->web->escape("if(!confirm(" . Jifty::JSON::objToJson($confirm, {singlequote => 1}) . ")) { Event.stop(event); return false }") . $string;
+        }
+        if ($beforeclick) {
+           $string = Jifty->web->escape($beforeclick) . $string;
         }
         $response .= qq| $trigger="$string"|;
     }
@@ -389,7 +402,7 @@
     Jifty->web->out(
         '<script type="text/javascript"><!--' .
         "\n" .
-        $self->key_binding_javascript .
+        Jifty->web->escape($self->key_binding_javascript).
         "\n" .
         "--></script>");
     return '';

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Form/Field.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Form/Field.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Field.pm	Mon May  7 16:28:32 2007
@@ -546,7 +546,7 @@
     my $field = '<span';
     $field .= qq! class="@{[ $self->classes ]}"> !;
     # XXX: force stringify the value because maketext is buggy with overloaded objects.
-    $field .= Jifty->web->escape(_("@{[$self->current_value]}")) if defined $self->current_value;
+    $field .= Jifty->web->escape("@{[$self->current_value]}") if defined $self->current_value;
     $field .= qq!</span>\n!;
     Jifty->web->out($field);
     return '';

Added: jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Collection.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Form/Field/Collection.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,68 @@
+use warnings;
+use strict;
+ 
+package Jifty::Web::Form::Field::Collection;
+
+use base qw/Jifty::Web::Form::Field/;
+
+=head2 render_widget
+
+Renders the whole collection of available values.
+
+=cut
+
+sub render_widget {
+    my $self  = shift;
+
+    for my $opt (@{ $self->action->available_values($self->name) }) {
+        $self->render_option($opt);
+    }
+}
+
+=head2 render_label
+
+Render a label for our own.  We need to output the label as a span
+instead since the labels are associated with the individual options.
+
+=cut
+
+sub render_label {
+    my $self = shift;
+    Jifty->web->out(
+        qq!<span class="label @{[$self->classes]}">@{[_($self->label) ]}</span>\n!
+    );
+
+    return '';
+}
+
+=head2 render_option option
+
+Renders a normal input field.
+
+=cut
+
+sub render_option {
+    my $self = shift;
+    my $opt = shift;
+    my $display = $opt->{'display'};
+    my $value   = defined $opt->{'value'} ? $opt->{'value'} : "0";
+
+    my $id = $self->element_id . "-" . $value;
+    $id =~ s/\s+/_/;
+    my $field = qq! <input type="text" !;
+    $field .= qq! name="@{[ $self->input_name ]}"!;
+    $field .= qq! id="@{[ $id ]}"!;
+    $field .= qq! value="0"!;
+    $field .= $self->_widget_class;
+
+    $field .= qq{ /><label for="@{[ $id ]}"};
+    $field .= $self->_widget_class;
+    $field .= qq{ >$display</label>\n };
+
+    $field = qq{<span class="multitext">$field</span>};
+
+    Jifty->web->out($field);
+    '';
+}
+
+1;

Modified: jifty/branches/virtual-models/lib/Jifty/Web/Menu.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/Menu.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Menu.pm	Mon May  7 16:28:32 2007
@@ -193,7 +193,6 @@
     '';
 }
 
-
 =head2 render_as_context_menu
 
 Render this menu with html markup as an inline dropdown menu.
@@ -226,7 +225,7 @@
     my @kids = $self->children;
     my $id   = Jifty->web->serial;
     Jifty->web->out( qq{<li class="toplevel }
-            . ( $self->active ? 'open active' : 'closed' ) . qq{">}
+            . ( $self->active ? 'active' : 'closed' ) . qq{">}
             . qq{<span class="title">} );
     Jifty->web->out( $self->as_link );
     Jifty->web->out(qq{</span>});
@@ -254,6 +253,46 @@
 
 }
 
+=head2 render_as_yui_menubar
+
+Render menubar with YUI menu, suitable for an application's menu.
+It can support arbitary levels of submenu.
+
+=cut
+
+sub render_as_yui_menubar {
+    my $self = shift;
+    my $id   = Jifty->web->serial;
+    $self->_render_as_yui_menu_item("yuimenubar", $id);
+    Jifty->web->out(qq|<script type="text/javascript">\n|
+        . qq|YAHOO.util.Event.onContentReady("|.$id.qq|", function() {\n|
+        . qq|var menu = new YAHOO.widget.MenuBar("|.$id.qq|", { autosubmenudisplay:true, hidedelay:750, lazyload:true });\n|
+        . qq|menu.render();\n|
+        . qq|});</script>|
+        );
+    '';
+}
+
+sub _render_as_yui_menu_item {
+    my ($self, $class, $id) = @_;
+    my @kids = $self->children 
+        or return;
+    
+    Jifty->web->out(
+        qq{<div}
+        . ($id ? qq{ id="$id"} : "")
+        . qq{ class="$class"><div class="bd"><ul>}
+    );
+    for (@kids) {
+        Jifty->web->out( qq{<li class="${class}item }
+        . ($_->active? 'active' : '') . qq{">});
+        Jifty->web->out( $_->as_link );
+        $_->_render_as_yui_menu_item("yuimenu");
+        Jifty->web->out( qq{</li>});
+    }
+    Jifty->web->out(qq{</ul></div></div>});
+}
+
 =head2 as_link
 
 Return this menu item as a C<Jifty::Web::Link>, either the one we were

Modified: jifty/branches/virtual-models/lib/Jifty/Web/PageRegion.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Web/PageRegion.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Web/PageRegion.pm	Mon May  7 16:28:32 2007
@@ -320,21 +320,27 @@
     # While we're inside this region, have Mason to tack its response
     # onto a variable and not send headers when it does so
     #XXX TODO: There's gotta be a better way to localize it
-    my $region_content = '';
 
     # template-declare based regions are printing to stdout
     my $td_out = '';
-    Encode::_utf8_on($td_out);
-    open my $output_fh, '>>:utf8', \$td_out;
-    local *STDOUT = $output_fh;
-
-    local $main::DEBUG=1;
-    # Call into the dispatcher
-    Jifty->handler->dispatcher->handle_request;
+    {
+        open my $output_fh, '>>', \$td_out;
+        local *STDOUT = $output_fh;
+
+        local $main::DEBUG = 1;
+        # Call into the dispatcher
+        Jifty->handler->dispatcher->handle_request;
+    }
 
     Jifty->handler->mason->interp->out_method($orig_out);
 
-    $$out_method .= $td_out if length($td_out);
+    return unless length $td_out;
+
+    if ( my ($enc) = Jifty->handler->apache->content_type =~ /charset=([\w-]+)$/ ) {
+        $td_out = Encode::decode($enc, $td_out);
+    }
+    $$out_method .= $td_out;
+
     return;
 }
 

Added: jifty/branches/virtual-models/lib/Jifty/Web/Session/None.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/lib/Jifty/Web/Session/None.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,162 @@
+package Jifty::Web::Session::None;
+
+use warnings;
+use strict;
+
+=head1 NAME
+
+Jifty::Web::Session::None - A null session handler for jifty
+
+=head1 DESCRIPTION
+
+Jifty depends on its sessions to keep users logged in, to store
+continuations and to allow developers to store user-specific data.
+In general, you don't want to disable them. But sometimes, the
+development benefits of Jifty lead you to build applications that
+genuinely don't want per-user sessions. That's where 
+C<Jifty::Web::Session::None> comes in. By specifying that you want
+to use C<Jifty::Web::Session::None> as your Jifty session handler, 
+you tell Jifty to avoid ever reading, writing or storing a user session.
+No cookies get set. Nothing gets stored in the database.
+
+=head1 USAGE
+
+In your C<etc/config.yml>:
+
+ ---
+ framework:
+   Web:
+     SessionClass:: Jifty::Web::Session::None
+ 
+=cut
+
+=head1 METHODS
+
+All methods in this class are dummy methods which do no work. This class
+mocks the API provided by C<Jifty::Web::Session>.
+
+=cut
+
+=head2 new
+
+Takes no arguments. Returns a L<Jifty::Web::Session::None>.
+
+=cut
+
+sub new {
+    my $class = shift;
+    return bless {}, $class;
+}
+
+=head2 id
+
+Returns false.
+
+=cut
+
+sub id {return undef }
+
+=head2 load
+
+Returns true.
+
+=cut
+
+sub load { return 1}
+
+=head2 unload
+
+Returns true.
+
+=cut
+
+sub unload { return 1}
+
+=head2 loaded
+
+Returns true.
+
+=cut
+
+sub loaded { return 1};
+
+=head2 get
+
+Returns false.
+
+=cut
+
+sub get { return undef;}
+
+=head2 set
+
+Returns false.
+
+=cut
+
+sub set { return undef;}
+
+=head2 remove
+
+Returns true.
+
+=cut
+
+sub remove { return 1}
+
+=head2 set_continuation
+
+Returns false.
+
+=cut
+sub set_continuation { return undef}
+
+=head2 get_continuation
+
+Returns false.
+
+=cut
+
+sub get_continuation {return undef}
+
+=head2 remove_continuation
+
+Returns false.
+
+=cut
+
+sub remove_continuation {return undef}
+
+=head2 continuations
+
+Returns false.
+
+=cut
+
+sub continuations { return undef}
+
+=head2 set_cookie
+
+Returns false.
+
+=cut
+
+sub set_cookie { return undef}
+
+=head2 cookie_name
+
+Returns false.
+
+=cut
+
+sub cookie_name { return undef}
+
+=head2 expires
+
+Returns false.
+
+=cut
+
+sub expires {return undef}
+
+1;

Added: jifty/branches/virtual-models/plugins/DumpDispatcher/Makefile.PL
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/DumpDispatcher/Makefile.PL	Mon May  7 16:28:32 2007
@@ -0,0 +1,8 @@
+use inc::Module::Install;
+name('Jifty-Plugin-DumpDispatcher');
+version('0.01');
+requires('Jifty' => '0.70117');
+
+install_share;
+
+WriteAll;

Added: jifty/branches/virtual-models/plugins/DumpDispatcher/lib/Jifty/Plugin/DumpDispatcher.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/DumpDispatcher/lib/Jifty/Plugin/DumpDispatcher.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,74 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::DumpDispatcher;
+use base qw/Jifty::Plugin/;
+
+=head1 NAME
+
+Jifty::Plugin::DumpDispatcher
+
+=head1 DESCRIPTION
+
+When activated in C<config.yml> with:
+
+  Plugins:
+    - DumpDispatcher: {}
+
+it will dump all dispatcher rules in debug log.
+
+=head2 dump_rules
+
+Dump all defined rules in debug log. It is called by Jifty, after
+C<< Jifty->dispatcher->import_plugins >> on startup.
+
+=cut
+
+sub dump_rules {
+    my $self = shift;
+	#my %args = @_;
+
+    no strict 'refs';
+    foreach my $stage ( qw/SETUP RUN CLEANUP/ ) {
+
+		my $rules = Jifty->app_class( 'Dispatcher' ) . '::RULES_' . $stage;
+
+        Jifty->log->debug( "Dispatcher rules in stage $stage:");
+		Jifty->log->debug( _unroll_dumpable_rules( 0, $_ ) ) foreach @{ $rules }
+
+    }
+};
+
+=head2 _unroll_dumpable_rules LEVEL,RULE
+
+Walk all rules defined in dispatcher starting at rule
+C<RULE> and indentation level C<LEVEL>
+
+=cut
+
+sub _unroll_dumpable_rules {
+    my ($level, $rule) = @_;
+    my $log = 
+        # indentation
+        ( "    " x $level ) .
+        # op
+        ( $rule->[0] || "undef op" ) . ' ' .
+        # arguments
+        (
+            ! defined( $rule->[1] )   ? ""                                          :
+            ref $rule->[1] eq 'ARRAY' ? "'" . join("','", @{ $rule->[1] }) . "'" :
+            ref $rule->[1] eq 'HASH'  ? $rule->[1]->{method} . " '" . $rule->[1]->{""} ."'" :
+            ref $rule->[1] eq 'CODE'  ? '{...}' :
+                                        "'" . $rule->[1] . "'"
+        );
+
+    if (ref $rule->[2] eq 'ARRAY') {
+        $level++;
+        foreach my $sr ( @{ $rule->[2] } ) {
+            $log .=   _unroll_dumpable_rules( $level, $sr );
+        }
+    }
+    return $log;
+}
+
+1;

Modified: jifty/branches/virtual-models/plugins/EditInPlace/lib/Jifty/Plugin/EditInPlace/Action/FileEditor.pm
==============================================================================
--- jifty/branches/virtual-models/plugins/EditInPlace/lib/Jifty/Plugin/EditInPlace/Action/FileEditor.pm	(original)
+++ jifty/branches/virtual-models/plugins/EditInPlace/lib/Jifty/Plugin/EditInPlace/Action/FileEditor.pm	Mon May  7 16:28:32 2007
@@ -104,7 +104,7 @@
     my $path = $self->argument_value('source_path');
     my $type = $self->argument_value('file_type');
     my $out = '';
-    my %cfg = Jifty->handler->mason_config;
+    my %cfg = Jifty->handler->mason->config;
     
     my($local_template_base, $qualified_path);
     if ($type eq "mason_component") {

Added: jifty/branches/virtual-models/plugins/ExtJS/Makefile.PL
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/Makefile.PL	Mon May  7 16:28:32 2007
@@ -0,0 +1,9 @@
+use inc::Module::Install;
+name('Jifty-Plugin-ExtJS');
+version('0.01');
+license('Perl');
+requires('Jifty' => '0.60722');
+
+install_share;
+
+WriteAll;

Added: jifty/branches/virtual-models/plugins/ExtJS/lib/Jifty/Plugin/ExtJS.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/lib/Jifty/Plugin/ExtJS.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,59 @@
+use strict;
+use warnings;
+
+=head1 NAME
+
+Jifty::Plugin::ExtJS
+
+=cut
+
+package Jifty::Plugin::ExtJS;
+use base qw/Jifty::Plugin/;
+
+=head1 SYNOPSIS
+
+In etc/config.yml
+
+    Plugins:
+      - ExtJS: {}
+
+If you want to include javascript files by hand:
+
+    Plugins:
+      - ExtJS:
+        IncludeDefault: 0
+
+You have to include Ext's CSS file by hand. Just add this line in main.css:
+
+    @import "extjs/ext-all.css";
+
+
+=head1 DESCRIPTION
+
+ExtJS plugin contains necessary files to run Ext JavaScript library.
+Ext supports YUI, prototype and jQuery. This plugin uses YUI by default.
+
+    Ext: http://extjs.com/
+
+
+=cut
+
+# Your plugin goes here.  If takes any configuration or arguments, you
+# probably want to override L<Jifty::Plugin/init>.
+
+sub init {
+    my $self = shift;
+    my %args = (IncludeDefault => 1, @_);
+
+    return unless $args{IncludeDefault};
+
+    Jifty->web->javascript_libs([
+        "extjs/adapter/yui/yui-utilities.js",
+        "extjs/adapter/yui/ext-yui-adapter.js",
+        "extjs/ext-all.js",
+        "extjs/ext-config.js",
+        @{ Jifty->web->javascript_libs }
+    ]);
+}
+
+1;

Added: jifty/branches/virtual-models/plugins/ExtJS/lib/Jifty/Plugin/ExtJS/Dispatcher.pm
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/lib/Jifty/Plugin/ExtJS/Dispatcher.pm	Mon May  7 16:28:32 2007
@@ -0,0 +1,9 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::ExtJS::Dispatcher;
+use Jifty::Dispatcher -base;
+
+# Put any plugin-specific dispatcher rules here.
+
+1;

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/README.txt
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/README.txt	Mon May  7 16:28:32 2007
@@ -0,0 +1,3 @@
+2006-11-21 jvs:
+ext-all.css contains all of the other css files combined and stripped of comments (except themes).
+

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/basic-dialog.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/basic-dialog.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,263 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-dlg-proxy {
+	background-image: url(/static/images/extjs/default/gradient-bg.gif);
+	background-color:#c3daf9;
+	border:1px solid #6593cf;
+	z-index:10001;
+	overflow:hidden;
+	position:absolute;
+	left:0;top:0;
+}
+.x-dlg-shadow{
+	background:#aaaaaa;
+	position:absolute;
+	left:0;top:0;
+}
+.x-dlg-focus{
+	-moz-outline:0 none;
+	outline:0 none;
+	width:0;
+	height:0;
+	overflow:hidden;
+	position:absolute;
+	top:0;
+	left:0;
+}
+.x-dlg-mask{
+	z-index:10000;   
+   display:none;
+   position:absolute;
+   top:0;
+   left:0;
+   -moz-opacity: 0.5;
+   opacity:.50;
+   filter: alpha(opacity=50);
+   background-color:#CCC;
+}
+body.x-body-masked select {
+	visibility:hidden;
+}
+body.x-body-masked .x-dlg select {
+	visibility:visible;
+}
+.x-dlg{
+	z-index:10001;
+	overflow:hidden;
+	position:absolute;
+	left:300;top:0;
+}
+.x-dlg .x-dlg-hd {
+	background: url(/static/images/extjs/default/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
+	background-color:navy;
+	color:#FFF;
+	font:bold 12px "sans serif", tahoma, verdana, helvetica;
+	overflow:hidden;
+	padding:5px;
+    white-space: nowrap;
+}
+.x-dlg .x-dlg-hd-left {
+	background: url(/static/images/extjs/default/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
+	padding-left:3px;
+	margin:0;
+}
+.x-dlg .x-dlg-hd-right {
+	background: url(/static/images/extjs/default/basic-dialog/hd-sprite.gif) no-repeat right 0;
+	padding-right:3px;
+}
+.x-dlg .x-dlg-dlg-body{
+	background:url(/static/images/extjs/default/layout/gradient-bg.gif);
+	border:1px solid #6593cf;
+	border-top:0 none;
+	padding:10px;
+	position:absolute;
+	top:24px;left:0;
+	z-index:1;
+	overflow:hidden;
+}
+.x-dlg-collapsed .x-resizable-handle{
+    display:none;
+}
+.x-dlg .x-dlg-bd{
+	overflow:hidden;
+}
+.x-dlg .x-dlg-ft{
+	overflow:hidden;
+	padding:5px;
+	padding-bottom:0;
+}
+.x-dlg .x-tabs-body{
+	background:white;
+	overflow:auto;
+}
+.x-dlg .x-tabs-top .x-tabs-body{
+	border:1px solid #6593cf;
+	border-top:0 none;
+}
+.x-dlg .x-tabs-bottom .x-tabs-body{
+	border:1px solid #6593cf;
+	border-bottom:0 none;
+}
+.x-dlg .x-layout-container  .x-tabs-body{
+	border:0 none;
+}
+.x-dlg .inner-tab{
+	margin:5px;
+}
+.x-dlg .x-dlg-ft .x-btn{
+	margin-right:5px;
+	float:right;
+	clear:none;
+}
+.x-dlg .x-dlg-ft .x-dlg-btns td {
+	border:0;
+	padding:0;
+}
+.x-dlg .x-dlg-ft .x-dlg-btns-right table{
+	float:right;
+	clear:none;
+}
+.x-dlg .x-dlg-ft .x-dlg-btns-left table{
+	float:left;
+	clear:none;
+}
+.x-dlg .x-dlg-ft .x-dlg-btns-center{
+	text-align:center; /*ie*/
+}
+.x-dlg .x-dlg-ft .x-dlg-btns-center table{
+	margin:0 auto; /*everyone else*/
+}
+.x-dlg-draggable .x-dlg-hd{
+	cursor:move;
+}
+.x-dlg-closable .x-dlg-hd{
+	padding-right:22px;
+}
+.x-dlg-toolbox {
+    position:absolute;
+	top:4px;
+	right:4px;
+	z-index:6;
+    width:40px;
+    cursor:default;
+    height:15px;
+    background:transparent;
+}
+.x-dlg .x-dlg-close, .x-dlg .x-dlg-collapse {
+    float:right;
+    height:15px;
+	width:15px;
+	margin:0;
+    margin-left:2px;
+    padding:0;
+	line-height:1px;
+	font-size:1px;
+	background-repeat:no-repeat;
+	cursor:pointer;
+	visibility:inherit;
+}
+.x-dlg .x-dlg-close {
+    background-image:url(/static/images/extjs/default/basic-dialog/close.gif);
+}
+.x-dlg .x-dlg-collapse {
+    background-image:url(/static/images/extjs/default/basic-dialog/collapse.gif);
+}
+.x-dlg-collapsed .x-dlg-collapse {
+    background-image:url(/static/images/extjs/default/basic-dialog/expand.gif);
+}
+.x-dlg .x-dlg-close-over, .x-dlg .x-dlg-collapse-over {
+    
+}
+.x-dlg div.x-resizable-handle-east{
+	background-image:url(/static/images/extjs/default/basic-dialog/e-handle.gif);
+	border:0;
+	background-position:right;
+	margin-right:0;
+}
+.x-dlg div.x-resizable-handle-south{
+	background-image:url(/static/images/extjs/default/sizer/s-handle-dark.gif);
+	border:0;
+	height:6px;
+}
+.x-dlg div.x-resizable-handle-west{
+	background-image:url(/static/images/extjs/default/basic-dialog/e-handle.gif);
+	border:0;
+	background-position:1px;
+}
+.x-dlg div.x-resizable-handle-north{
+	background-image:url(/static/images/extjs/default/s.gif);
+	border:0;
+}
+.x-dlg div.x-resizable-handle-northeast, .ytheme-gray .x-dlg div.x-resizable-handle-northeast{
+	background-image:url(/static/images/extjs/default/s.gif);
+	border:0;
+}
+.x-dlg div.x-resizable-handle-northwest, .ytheme-gray .x-dlg div.x-resizable-handle-northwest{
+	background-image:url(/static/images/extjs/default/s.gif);
+	border:0;
+}
+.x-dlg div.x-resizable-handle-southeast{
+	background-image:url(/static/images/extjs/default/basic-dialog/se-handle.gif);
+	background-position: bottom right;
+	width:8px;
+	height:8px;
+	border:0;
+}
+.x-dlg div.x-resizable-handle-southwest{
+	background-image:url(/static/images/extjs/default/sizer/sw-handle-dark.gif);
+	background-position: top right;
+	margin-left:1px;
+	margin-bottom:1px;
+	border:0;
+}
+
+#x-msg-box .x-dlg-ft .x-btn{
+	float:none;
+	clear:none;
+	margin:0 3px;
+}
+
+#x-msg-box .x-dlg-bd {
+	padding:5px;
+	overflow:hidden !important;
+	font:normal 13px verdana,tahoma,sans-serif;
+}
+#x-msg-box .ext-mb-input {
+	margin-top:4px;
+	width:95%;
+}
+#x-msg-box .ext-mb-textarea {
+	margin-top:4px;
+	font:normal 13px verdana,tahoma,sans-serif;
+}
+#x-msg-box .ext-mb-progress-wrap {
+	margin-top:4px;
+	border:1px solid #6593cf;
+}
+#x-msg-box .ext-mb-progress {
+	height:18px;
+	background: #e0e8f3 url(/static/images/extjs/default/qtip/bg.gif) repeat-x;
+}
+#x-msg-box .ext-mb-progress-bar {
+	height:18px;
+	overflow:hidden;
+	width:0;
+	background:#8BB8F3;
+	border-top:1px solid #B2D0F7;
+	border-bottom:1px solid #65A1EF;
+	border-right:1px solid #65A1EF;
+}
+
+#x-msg-box .x-msg-box-wait {
+	background: transparent url(/static/images/extjs/default/grid/loading.gif) no-repeat left;
+    display:block;
+    width:300px;
+    padding-left:18px;
+    line-height:18px;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/box.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/box.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,111 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+/*
+ Creates rounded, raised boxes like on the Ext website - the markup isn't pretty:
+  <div class="x-box-blue">
+        <div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>
+        <div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc">
+            <h3>YOUR TITLE HERE (optional)</h3>
+            <div>YOUR CONTENT HERE</div>
+        </div></div></div>
+        <div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>
+    </div>
+ */
+
+.x-box-tl {
+	background: transparent url(/static/images/extjs/default/box/corners.gif) no-repeat 0 0;
+    zoom:1;
+}
+
+.x-box-tc {
+	height: 8px;
+	background: transparent url(/static/images/extjs/default/box/tb.gif) repeat-x 0 0;
+	overflow: hidden;
+}
+
+.x-box-tr {
+	background: transparent url(/static/images/extjs/default/box/corners.gif) no-repeat right -8px;
+}
+
+.x-box-ml {
+	background: transparent url(/static/images/extjs/default/box/l.gif) repeat-y 0;
+	padding-left: 4px;
+	overflow: hidden;
+    zoom:1;
+}
+
+.x-box-mc {
+	background: #eee url(/static/images/extjs/default/box/tb.gif) repeat-x 0 -16px;
+	padding: 4px 10px;
+	font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;
+	color: #393939;
+	font-size: 12px;
+}
+
+.x-box-mc h3 {
+	font-size: 14px;
+	font-weight: bold;
+	margin: 0 0 4 0;
+    zoom:1;
+}
+
+.x-box-mr {
+	background: transparent url(/static/images/extjs/default/box/r.gif) repeat-y right;
+	padding-right: 4px;
+	overflow: hidden;
+}
+
+.x-box-bl {
+	background: transparent url(/static/images/extjs/default/box/corners.gif) no-repeat 0 -16px;
+    zoom:1;
+}
+
+.x-box-bc {
+	background: transparent url(/static/images/extjs/default/box/tb.gif) repeat-x 0 -8px;
+	height: 8px;
+	overflow: hidden;
+}
+
+.x-box-br {
+	background: transparent url(/static/images/extjs/default/box/corners.gif) no-repeat right -24px;
+}
+
+.x-box-tl, .x-box-bl {
+	padding-left: 8px;
+	overflow: hidden;
+}
+
+.x-box-tr, .x-box-br {
+	padding-right: 8px;
+	overflow: hidden;
+}
+
+.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr {
+	background-image: url(/static/images/extjs/default/box/corners-blue.gif);
+}
+
+.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc {
+	background-image: url(/static/images/extjs/default/box/tb-blue.gif);
+}
+
+.x-box-blue .x-box-mc {
+	background-color: #c3daf9;
+}
+
+.x-box-blue .x-box-mc h3 {
+	color: #17385b;
+}
+
+.x-box-blue .x-box-ml {
+	background-image: url(/static/images/extjs/default/box/l-blue.gif);
+}
+
+.x-box-blue .x-box-mr {
+	background-image: url(/static/images/extjs/default/box/r-blue.gif);
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/button.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/button.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,154 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-btn{
+	font:normal 11px tahoma, verdana, helvetica;
+	cursor:pointer;
+	white-space: nowrap;
+}
+.x-btn button{
+    border:0 none;
+    background:transparent;
+    font:normal 11px tahoma,verdana,helvetica;
+    padding-left:3px;
+    padding-right:3px;
+    cursor:pointer;
+    margin:0;
+    overflow:visible;
+    width:auto;
+    -moz-outline:0 none;
+    outline:0 none;
+}
+* html .ext-ie .x-btn button {
+    width:1px;
+}
+.ext-gecko .x-btn button {
+    padding-left:0;
+    padding-right:0;
+}
+/*
+ Predefined css class for buttons with only icon. Add this class (x-btn-icon) and a class with a background-image
+ to your button for a button with just an icon.
+ e.g.
+ .my-class .x-btn-text { background-image: url(foo.gif); }
+ */
+ 
+.x-btn-icon .x-btn-center .x-btn-text{
+	background-position: center;
+	background-repeat: no-repeat;
+	height: 16px;
+	width: 16px;
+	cursor:pointer;
+	white-space: nowrap;
+    padding:0;
+}
+.x-btn-icon .x-btn-center{
+	padding:1px;
+}
+.x-btn em {
+    font-style:normal;
+    font-weight:normal;
+}
+/*
+ Button class for icon and text. Add this class (x-btn-text-icon) and a class with a background-image
+ to your button for both text and icon. 
+*/
+
+.x-btn-text-icon .x-btn-center .x-btn-text{
+	background-position: 0 2px;
+	background-repeat: no-repeat;
+	padding-left:18px;
+	padding-top:3px;
+	padding-bottom:3px;
+    padding-right:0;
+}
+
+.x-btn-left, .x-btn-right{
+	font-size:1px;
+    line-height:1px;
+}
+.x-btn-left{
+	width:3px;
+	height:21px;
+	background:url(/static/images/extjs/default/basic-dialog/btn-sprite.gif) no-repeat 0 0;
+}
+.x-btn-right{
+	width:3px;
+	height:21px;
+	background:url(/static/images/extjs/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px;
+}
+.x-btn-left i, .x-btn-right i{
+	display:block;
+    width:3px;
+    overflow:hidden;
+    font-size:1px;
+    line-height:1px;
+}
+.x-btn-center{
+	background:url(/static/images/extjs/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px;
+	vertical-align: middle;
+	text-align:center;
+	padding:0 5px;
+	cursor:pointer;
+	white-space:nowrap;
+}
+.x-btn-focus .x-btn-left{
+	background-position:0 -126px;
+}
+.x-btn-focus .x-btn-right{
+	background-position:0 -147px;
+}
+.x-btn-focus .x-btn-center{
+	background-position:0 -168px;
+}
+.x-btn-over .x-btn-left{
+	background-position:0 -63px;
+}
+.x-btn-over .x-btn-right{
+	background-position:0 -84px;
+}
+.x-btn-over .x-btn-center{
+	background-position:0 -105px;
+}
+.x-btn-click .x-btn-center, .x-btn-menu-active .x-btn-center{
+	background-position:0 -126px;
+}
+.x-btn-disabled *{
+	color:gray !important;
+	cursor:default !important;
+}
+.x-btn-menu-text-wrap .x-btn-center {
+	padding:0 3px;
+}
+.ext-gecko .x-btn-menu-text-wrap .x-btn-center {
+	padding:0 1px;
+}
+.x-btn-menu-arrow-wrap .x-btn-center {
+    padding:0;
+}
+.x-btn-menu-arrow-wrap .x-btn-center button {
+	width:12px !important;
+    height:21px;
+    padding:0 !important;
+    display:block;
+    background:transparent url(/static/images/extjs/default/basic-dialog/btn-arrow.gif) no-repeat left 3px;
+}
+.x-btn-with-menu  .x-btn-center {
+    padding-right:2px !important;
+}
+.x-btn-with-menu  .x-btn-center em {
+    display:block;
+    background:transparent url(/static/images/extjs/default/toolbar/btn-arrow.gif) no-repeat right 0;
+	padding-right:10px;
+}
+
+.x-btn-text-icon .x-btn-with-menu .x-btn-center em {
+    display:block;
+    background:transparent url(/static/images/extjs/default/toolbar/btn-arrow.gif) no-repeat right 3px;
+	padding-right:10px;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/combo.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/combo.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,46 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-combo-list {
+    border:1px solid #98c0f4;
+    background:#ddecfe;
+    zoom:1;
+    overflow:hidden;
+}
+.x-combo-list-inner {
+    overflow:auto;
+    background:white;
+    position:relative; /* for calculating scroll offsets */
+}
+.x-combo-list-hd {
+    font:bold 11px tahoma, arial, helvetica, sans-serif;
+    color:#15428b;
+    background-image: url(/static/images/extjs/default/layout/panel-title-light-bg.gif);
+    border-bottom:1px solid #98c0f4;
+    padding:3px;
+}
+.x-resizable-pinned .x-combo-list-inner {
+    border-bottom:1px solid #98c0f4;
+}
+.x-combo-list-item {
+    font:normal 12px tahoma, arial, helvetica, sans-serif;
+    padding:2px;
+    border:1px solid #fff;
+    zoom:1;
+    white-space: nowrap;
+    overflow:hidden;
+    text-overflow: ellipsis;
+}
+.x-combo-list .x-combo-selected{
+	background-color: #c3daf9 !important;
+    cursor:pointer;
+    border:1px solid #336699;
+}
+.x-combo-noedit{
+    cursor:pointer;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/core.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/core.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,271 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.ext-el-mask {
+    z-index: 20000;
+    position: absolute;
+    top: 0;
+    left: 0;
+    -moz-opacity: 0.5;
+    opacity: .50;
+    filter: alpha(opacity=50);
+    background-color: #CCC;
+    width: 100%;
+    height: 100%;
+    zoom: 1;
+}
+.ext-el-mask-msg {
+    z-index: 20001;
+    position: absolute;
+    top: 0;
+    left: 0;
+    border:1px solid #6593cf;
+    background: #c3daf9 url(/static/images/extjs/default/box/tb-blue.gif) repeat-x 0 -16px;
+    padding:2px;
+}
+.ext-el-mask-msg div {
+    padding:5px 10px 5px 10px;
+    background: #eee;
+    border:1px solid #a3bad9;
+    color:#333;
+    font:normal 12px tahoma, arial, helvetica, sans-serif;
+    cursor:wait;
+}
+
+
+.x-mask-loading div {
+    padding:5px 10px 5px 25px;
+    background: #eee url( '/static/images/extjs/default/grid/loading.gif' ) no-repeat 5px 5px;
+    line-height: 16px;
+}
+
+/* class for hiding elements without using display:none */
+.x-hidden {
+    position:absolute;
+    left:-2000px;
+    top:-2000px;
+    visibility:hidden;
+}
+
+.x-masked {
+    overflow: hidden !important;
+}
+
+.x-masked select, .x-masked object, .x-masked embed {
+    visibility: hidden;
+}
+
+.x-layer {
+    visibility: hidden;
+}
+
+.x-unselectable, .x-unselectable * {
+    -moz-user-select: none;
+    -khtml-user-select: none;
+}
+
+.x-repaint {
+    zoom: 1;
+    background-color: transparent;
+    -moz-outline: none;
+}
+
+.x-item-disabled {
+    color: gray;
+    cursor: default;
+    opacity: .6;
+    -moz-opacity: .6;
+    filter: alpha(opacity=60);
+}
+
+.x-item-disabled * {
+    color: gray;
+    cursor: default !important;
+}
+
+.x-splitbar-proxy {
+    position: absolute;
+    visibility: hidden;
+    z-index: 20001;
+    background: #aaa;
+    zoom: 1;
+    line-height: 1px;
+    font-size: 1px;
+    overflow: hidden;
+}
+
+.x-splitbar-h, .x-splitbar-proxy-h {
+    cursor: e-resize;
+    cursor: col-resize;
+}
+
+.x-splitbar-v, .x-splitbar-proxy-v {
+    cursor: s-resize;
+    cursor: row-resize;
+}
+
+.x-color-palette {
+    width: 150px;
+    height: 92px;
+}
+
+.x-color-palette a {
+    border: 1px solid #fff;
+    float: left;
+    padding: 2px;
+    text-decoration: none;
+    -moz-outline: 0 none;
+    outline: 0 none;
+}
+
+.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel {
+    border: 1px solid #8BB8F3;
+    background: #deecfd;
+}
+
+.x-color-palette em {
+    display: block;
+    border: 1px solid #ACA899;
+}
+
+.x-color-palette em span {
+    cursor: pointer;
+    display: block;
+    height: 10px;
+    line-height: 10px;
+    width: 10px;
+}
+
+.x-shadow {
+    display: none;
+    position: absolute;
+    overflow: hidden;
+}
+
+.x-shadow * {
+    overflow: hidden;
+}
+
+.x-shadow * {
+    padding: 0;
+    border: 0;
+    margin: 0;
+    clear: none;
+    zoom: 1;
+}
+
+/* top  bottom */
+.x-shadow .xstc, .x-shadow .xsbc {
+    height: 6px;
+    float: left;
+}
+
+/* corners */
+.x-shadow .xstl, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbr {
+    width: 6px;
+    height: 6px;
+    float: left;
+}
+
+/* sides */
+.x-shadow .xsc {
+    width: 100%;
+}
+
+.x-shadow .xsml, .x-shadow .xsmr {
+    width: 6px;
+    float: left;
+    height: 100%;
+}
+
+.x-shadow .xsmc {
+    float: left;
+    height: 100%;
+    background: #333333;
+    opacity: .35;
+    -moz-opacity: .35;
+    filter: alpha(opacity=25);
+}
+
+.x-shadow .xst, .x-shadow .xsb {
+    height: 6px;
+    overflow: hidden;
+    width: 100%;
+}
+
+.x-shadow .xsml {
+    background: transparent url( /static/images/extjs/default/shadow-lr.png ) repeat-y 0 0;
+}
+
+.x-shadow .xsmr {
+    background: transparent url( /static/images/extjs/default/shadow-lr.png ) repeat-y -6px 0;
+}
+
+.x-shadow .xstl {
+    background: transparent url( /static/images/extjs/default/shadow.png ) no-repeat 0 0;
+}
+
+.x-shadow .xstc {
+    background: transparent url( /static/images/extjs/default/shadow.png ) repeat-x 0 -30px;
+}
+
+.x-shadow .xstr {
+    background: transparent url( /static/images/extjs/default/shadow.png ) repeat-x 0 -18px;
+}
+
+.x-shadow .xsbl {
+    background: transparent url( /static/images/extjs/default/shadow.png ) no-repeat 0 -12px;
+}
+
+.x-shadow .xsbc {
+    background: transparent url( /static/images/extjs/default/shadow.png ) repeat-x 0 -36px;
+}
+
+.x-shadow .xsbr {
+    background: transparent url( /static/images/extjs/default/shadow.png ) repeat-x 0 -6px;
+}
+
+.loading-indicator {
+    font-size: 11px;
+    background-image: url( '/static/images/extjs/default/grid/loading.gif' );
+    background-repeat: no-repeat;
+    background-position: left;
+    padding-left: 20px;
+    line-height: 16px;
+    margin: 3px;
+}
+
+.x-text-resize {
+    position: absolute;
+    left: -1000px;
+    top: -1000px;
+    visibility: hidden;
+    zoom: 1;
+}
+
+.x-drag-overlay {
+    width: 100%;
+    height: 100%;
+    display: none;
+    position: absolute;
+    left: 0;
+    top: 0;
+    background: white;
+    z-index: 20000;
+    -moz-opacity: 0;
+    opacity: 0;
+    filter: alpha(opacity=0);
+}
+
+.x-clear {
+    clear:both;
+    height:0;
+    overflow:hidden;
+    line-height:0;
+    font-size:0;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/date-picker.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/date-picker.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,155 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-date-picker {
+    border: 1px solid #1b376c;
+    border-top:0 none;
+    background:#fff;
+}
+.x-date-picker a {
+    -moz-outline:0 none;
+    outline:0 none;
+}
+.x-date-inner, .x-date-inner td, .x-date-inner th{
+    border-collapse:separate;
+}
+.x-date-middle,.x-date-left,.x-date-right {
+	background: url(/static/images/extjs/default/basic-dialog/hd-sprite.gif) repeat-x 0 -83px;
+	color:#FFF;
+	font:bold 11px "sans serif", tahoma, verdana, helvetica;
+	overflow:hidden;
+}
+
+.x-date-middle .x-btn-left,.x-date-middle .x-btn-center,.x-date-middle .x-btn-right{
+	background:transparent !important;
+    vertical-align:middle;
+}
+.x-date-middle .x-btn .x-btn-text {
+    color:#fff;
+}
+.x-date-middle .x-btn-with-menu  .x-btn-center em {
+    background:transparent url(/static/images/extjs/default/toolbar/btn-arrow-light.gif) no-repeat right 0;
+}
+.x-date-right, .x-date-left {
+    width:18px;
+}
+.x-date-right{
+    text-align:right;
+}
+.x-date-middle {
+    padding-top:2px;padding-bottom:2px;
+}
+.x-date-right a, .x-date-left a{
+    display:block;
+    width:16px;
+	height:16px;
+	background-position: center;
+	background-repeat: no-repeat;
+	cursor:pointer;
+    -moz-opacity: 0.6;
+    opacity:.6;
+    filter: alpha(opacity=60);
+}
+.x-date-right a:hover, .x-date-left a:hover{
+    -moz-opacity: 1;
+    opacity:1;
+    filter: alpha(opacity=100);
+}
+.x-date-right a {
+    background-image: url(/static/images/extjs/default/shared/right-btn.gif);
+    margin-right:2px;
+}
+.x-date-left a{
+	background-image: url(/static/images/extjs/default/shared/left-btn.gif);
+    margin-left:2px;
+}
+table.x-date-inner {
+    width:100%;
+    table-layout:fixed;
+}
+.x-date-inner th {
+    width:25px;
+}
+.x-date-inner th {
+    background: #c3daf9;
+    text-align:right !important;
+	border-bottom: 1px solid #a3bad9;
+    font:normal 10px arial, helvetica,tahoma,sans-serif;
+	color:#233d6d;
+	cursor:default;
+    padding:0;
+    border-collapse:separate;
+}
+.x-date-inner th span {
+    display:block;
+    padding:2px;
+    padding-right:7px;
+}
+.x-date-inner td {
+    border: 1px solid #fff;
+	text-align:right;
+    padding:0;
+}
+.x-date-inner a {
+    padding:2px 5px;
+    display:block;
+    font:normal 11px arial, helvetica,tahoma,sans-serif;
+	text-decoration:none;
+    color:black;
+    text-align:right;
+    zoom:1;
+}
+.x-date-inner .x-date-active{
+	cursor:pointer;
+	color:black;
+}
+.x-date-inner .x-date-selected a{
+	background: #ddecfe;
+	border: 1px solid #a3bad9;
+    padding:1px 4px;
+}
+.x-date-inner .x-date-today a{
+	border: 1px solid darkred;
+    padding:1px 4px;
+}
+.x-date-inner .x-date-selected span{
+    font-weight:bold;
+}
+.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a {
+	color:#aaaaaa;
+}
+.x-date-bottom {
+    padding:4px;
+    border-top: 1px solid #a3bad9;
+    background: #c3daf9;
+}
+
+.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{
+    text-decoration:none;
+    color:black;
+    background: #ddecfe;
+}
+
+.x-date-inner .x-date-disabled a {
+	cursor:default;
+	background:#eeeeee;
+	color:#bbbbbb;
+}
+.x-date-mmenu{
+    background:#eeeeee !important;
+}
+.x-date-mmenu .x-menu-item {
+	font-size:10px;
+	padding:1px 24px 1px 4px;
+	white-space: nowrap;
+	color:#000;
+}
+.x-date-mmenu .x-menu-item .x-menu-item-icon {
+    width:10px;height:10px;margin-right:5px;
+    background-position:center -4px !important;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/dd.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/dd.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,61 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-dd-drag-proxy{
+	position:absolute;
+	left:0;top:0;
+	visibility:hidden;
+	z-index:15000;
+}
+.x-dd-drag-ghost{
+	color: black;
+	font: normal 11px arial, helvetica, sans-serif;
+	-moz-opacity: 0.85;
+   opacity:.85;
+   filter: alpha(opacity=85);
+	border-top:1px solid #dddddd;
+	border-left:1px solid #dddddd;
+	border-right:1px solid #bbbbbb;
+	border-bottom:1px solid #bbbbbb;
+	padding:3px;
+	padding-left:20px;
+	background-color:white;
+	white-space:nowrap;
+}
+.x-dd-drag-repair .x-dd-drag-ghost{
+	-moz-opacity: 0.4;
+   opacity:.4;
+   filter: alpha(opacity=40);
+	border:0 none;
+	padding:0;
+	background-color:transparent;
+}
+.x-dd-drag-repair .x-dd-drop-icon{
+	visibility:hidden;
+}
+.x-dd-drop-icon{
+  position:absolute;
+	top:3px;
+	left:3px;
+	display:block;
+	width:16px;
+	height:16px;
+	background-color:transparent;
+	background-position: center;
+	background-repeat: no-repeat;
+	z-index:1;
+}
+.x-dd-drop-nodrop .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/dd/drop-no.gif);
+}
+.x-dd-drop-ok .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/dd/drop-yes.gif);
+}
+.x-dd-drop-ok-add .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/dd/drop-add.gif);
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/debug.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/debug.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,55 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+#x-debug-browser .x-tree .x-tree-node a span {
+    color:#222297;
+    font-size:12px;
+    padding-top:2px;
+    font-family:"courier","courier new";
+    line-height:18px;
+}
+#x-debug-browser .x-tree a i {
+    color:#FF4545;
+    font-style:normal;
+}
+#x-debug-browser .x-tree a em {
+    color:#999;
+}
+#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span{
+    background:#c3daf9;
+}
+#x-debug-browser pre, .x-debug-browser pre xmp {
+    font:normal 11px tahoma, arial, helvetica, sans-serif !important;
+    white-space: -moz-pre-wrap;
+    white-space: -pre-wrap;
+    white-space: -o-pre-wrap;
+    word-wrap: break-word;
+}
+#x-debug-browser pre {
+    display:block;
+    padding:5px !important;
+    border-bottom:1px solid #eeeeee !important;
+}
+#x-debug-browser pre xmp {
+    padding:0 !important;
+    margin:0 !important;
+}
+#x-debug-console .x-layout-panel-center, #x-debug-inspector .x-layout-panel-center {
+      border-right:1px solid #98c0f4;
+}
+#x-debug-console textarea {
+    border: 0 none;
+    font-size:12px;
+    font-family:"courier","courier new";
+    padding-top:4px;
+    padding-left:4px;
+}
+.x-debug-frame {
+    background:#eeeeee;
+    border:1px dashed #aaaaaa;
+}
\ No newline at end of file

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ext-all.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ext-all.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,2711 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.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: 20000;
+    position: absolute;
+    top: 0;
+    left: 0;
+    -moz-opacity: 0.5;
+    opacity: .50;
+    filter: alpha(opacity=50);
+    background-color: #CCC;
+    width: 100%;
+    height: 100%;
+    zoom: 1;
+}
+.ext-el-mask-msg {
+    z-index: 20001;
+    position: absolute;
+    top: 0;
+    left: 0;
+    border:1px solid #6593cf;
+    background: #c3daf9 url(/static/images/extjs/default/box/tb-blue.gif) repeat-x 0 -16px;
+    padding:2px;
+}
+.ext-el-mask-msg div {
+    padding:5px 10px 5px 10px;
+    background: #eee;
+    border:1px solid #a3bad9;
+    color:#333;
+    font:normal 12px tahoma, arial, helvetica, sans-serif;
+    cursor:wait;
+}
+
+
+.x-mask-loading div {
+    padding:5px 10px 5px 25px;
+    background: #eee url( '/static/images/extjs/default/grid/loading.gif' ) no-repeat 5px 5px;
+    line-height: 16px;
+}
+
+
+.x-hidden {
+    position:absolute;
+    left:-2000px;
+    top:-2000px;
+    visibility:hidden;
+}
+
+.x-masked {
+    overflow: hidden !important;
+}
+
+.x-masked select, .x-masked object, .x-masked embed {
+    visibility: hidden;
+}
+
+.x-layer {
+    visibility: hidden;
+}
+
+.x-unselectable, .x-unselectable * {
+    -moz-user-select: none;
+    -khtml-user-select: none;
+}
+
+.x-repaint {
+    zoom: 1;
+    background-color: transparent;
+    -moz-outline: none;
+}
+
+.x-item-disabled {
+    color: gray;
+    cursor: default;
+    opacity: .6;
+    -moz-opacity: .6;
+    filter: alpha(opacity=60);
+}
+
+.x-item-disabled * {
+    color: gray;
+    cursor: default !important;
+}
+
+.x-splitbar-proxy {
+    position: absolute;
+    visibility: hidden;
+    z-index: 20001;
+    background: #aaa;
+    zoom: 1;
+    line-height: 1px;
+    font-size: 1px;
+    overflow: hidden;
+}
+
+.x-splitbar-h, .x-splitbar-proxy-h {
+    cursor: e-resize;
+    cursor: col-resize;
+}
+
+.x-splitbar-v, .x-splitbar-proxy-v {
+    cursor: s-resize;
+    cursor: row-resize;
+}
+
+.x-color-palette {
+    width: 150px;
+    height: 92px;
+}
+
+.x-color-palette a {
+    border: 1px solid #fff;
+    float: left;
+    padding: 2px;
+    text-decoration: none;
+    -moz-outline: 0 none;
+    outline: 0 none;
+}
+
+.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel {
+    border: 1px solid #8BB8F3;
+    background: #deecfd;
+}
+
+.x-color-palette em {
+    display: block;
+    border: 1px solid #ACA899;
+}
+
+.x-color-palette em span {
+    cursor: pointer;
+    display: block;
+    height: 10px;
+    line-height: 10px;
+    width: 10px;
+}
+
+.x-shadow {
+    display: none;
+    position: absolute;
+    overflow: hidden;
+}
+
+.x-shadow * {
+    overflow: hidden;
+}
+
+.x-shadow * {
+    padding: 0;
+    border: 0;
+    margin: 0;
+    clear: none;
+    zoom: 1;
+}
+
+
+.x-shadow .xstc, .x-shadow .xsbc {
+    height: 6px;
+    float: left;
+}
+
+
+.x-shadow .xstl, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbr {
+    width: 6px;
+    height: 6px;
+    float: left;
+}
+
+
+.x-shadow .xsc {
+    width: 100%;
+}
+
+.x-shadow .xsml, .x-shadow .xsmr {
+    width: 6px;
+    float: left;
+    height: 100%;
+}
+
+.x-shadow .xsmc {
+    float: left;
+    height: 100%;
+    background: #333333;
+    opacity: .35;
+    -moz-opacity: .35;
+    filter: alpha(opacity=25);
+}
+
+.x-shadow .xst, .x-shadow .xsb {
+    height: 6px;
+    overflow: hidden;
+    width: 100%;
+}
+
+.x-shadow .xsml {
+    background: transparent url( /static/images/extjs/default/shadow-lr.png ) repeat-y 0 0;
+}
+
+.x-shadow .xsmr {
+    background: transparent url( /static/images/extjs/default/shadow-lr.png ) repeat-y -6px 0;
+}
+
+.x-shadow .xstl {
+    background: transparent url( /static/images/extjs/default/shadow.png ) no-repeat 0 0;
+}
+
+.x-shadow .xstc {
+    background: transparent url( /static/images/extjs/default/shadow.png ) repeat-x 0 -30px;
+}
+
+.x-shadow .xstr {
+    background: transparent url( /static/images/extjs/default/shadow.png ) repeat-x 0 -18px;
+}
+
+.x-shadow .xsbl {
+    background: transparent url( /static/images/extjs/default/shadow.png ) no-repeat 0 -12px;
+}
+
+.x-shadow .xsbc {
+    background: transparent url( /static/images/extjs/default/shadow.png ) repeat-x 0 -36px;
+}
+
+.x-shadow .xsbr {
+    background: transparent url( /static/images/extjs/default/shadow.png ) repeat-x 0 -6px;
+}
+
+.loading-indicator {
+    font-size: 11px;
+    background-image: url( '/static/images/extjs/default/grid/loading.gif' );
+    background-repeat: no-repeat;
+    background-position: left;
+    padding-left: 20px;
+    line-height: 16px;
+    margin: 3px;
+}
+
+.x-text-resize {
+    position: absolute;
+    left: -1000px;
+    top: -1000px;
+    visibility: hidden;
+    zoom: 1;
+}
+
+.x-drag-overlay {
+    width: 100%;
+    height: 100%;
+    display: none;
+    position: absolute;
+    left: 0;
+    top: 0;
+    background: white;
+    z-index: 20000;
+    -moz-opacity: 0;
+    opacity: 0;
+    filter: alpha(opacity=0);
+}
+
+.x-clear {
+    clear:both;
+    height:0;
+    overflow:hidden;
+    line-height:0;
+    font-size:0;
+}
+
+.x-tabs-wrap {
+	border-bottom:1px solid #6593cf;
+	padding-top:2px;
+}
+.x-tabs-strip-wrap{
+	width:100%;	
+}
+.x-tabs-wrap table{
+	position:relative;
+	top:0; left:0;
+}
+.x-tabs-strip td{
+	padding:0;
+	padding-left:2px;
+}
+.x-tabs-strip a, .x-tabs-strip span, .x-tabs-strip em {
+	display:block;
+}
+.x-tabs-strip a {
+	text-decoration:none !important;
+	-moz-outline: none;
+	outline: none;
+	cursor:pointer;
+}
+.x-tabs-strip .x-tabs-text {
+	font:bold 11px tahoma,arial,helvetica;
+	color:#666;
+	overflow:hidden;
+	white-space: nowrap;
+	cursor:pointer;
+	text-overflow: ellipsis;
+}
+.x-tabs-strip .on .x-tabs-text {
+	cursor:default;
+	color:#083772;
+}
+.x-tabs-strip .disabled .x-tabs-text {
+	cursor:default;
+	color:#aaaaaa;
+}
+.x-tabs-strip .x-tabs-inner {
+	 padding:4px 10px;	
+}
+
+.x-tabs-strip .on .x-tabs-right {
+	 background: url(/static/images/extjs/default/tabs/tab-sprite.gif) no-repeat right 0;
+}
+.x-tabs-strip .on .x-tabs-left {
+	 background: url(/static/images/extjs/default/tabs/tab-sprite.gif) no-repeat 0 -100px;
+}
+.x-tabs-strip .x-tabs-right {
+	 background: url(/static/images/extjs/default/tabs/tab-sprite.gif) no-repeat right -50px;
+}
+.x-tabs-strip .x-tabs-left {
+	 background: url(/static/images/extjs/default/tabs/tab-sprite.gif) no-repeat 0 -150px;
+}
+
+.x-tabs-strip  a {
+	position:relative;
+	top:1px; left:0;
+}
+.x-tabs-strip .on a {
+	position:relative;
+}
+.x-tabs-strip .on .x-tabs-inner {
+	padding-bottom:5px;
+}
+
+.x-tabs-strip .x-tabs-closable .x-tabs-inner{
+	padding-right:22px;
+	position:relative;
+}
+.x-tabs-strip .x-tabs-closable .close-icon{
+	line-height: 1px;
+	font-size:1px;
+	background-image:url(/static/images/extjs/default/layout/tab-close.gif);
+	display:block;
+	position:absolute;
+	right:5px;top:4px;
+	width:11px;height:11px;
+	cursor:pointer;
+}
+.x-tabs-strip .on .close-icon{
+	background-image:url(/static/images/extjs/default/layout/tab-close-on.gif);
+}
+.x-tabs-strip .x-tabs-closable .close-over{
+	background-image:url(/static/images/extjs/default/layout/tab-close-on.gif);
+}
+.x-tabs-body {
+    border:1px solid #6593cf;
+    border-top:0 none;
+}
+.x-tabs-bottom .x-tabs-wrap {
+	border-top:1px solid #6593cf;
+	border-bottom:0 none;
+	padding-top:0;
+	padding-bottom:2px;
+}
+.x-tabs-bottom .x-tabs-strip .x-tabs-right {
+	 background: url(/static/images/extjs/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
+}
+.x-tabs-bottom .x-tabs-strip .x-tabs-left {
+	 background: url(/static/images/extjs/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
+	 background: url(/static/images/extjs/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
+	 background: url(/static/images/extjs/default/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
+}
+.x-tabs-bottom .x-tabs-strip  a {
+	position:relative;
+	top:0; left:0;
+}
+.x-tabs-bottom .x-tabs-strip .on a {
+	margin-top:-1px;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-inner {
+	padding-top:5px;
+}
+
+.x-tabs-bottom .x-tabs-body {
+    border:1px solid #6593cf;
+    border-bottom:0 none;
+}
+
+
+
+.x-form-field{
+    margin: 0 0 0 0;
+    font:normal 12px tahoma, arial, helvetica, sans-serif;
+}
+
+
+.x-form-text, textarea.x-form-field{
+    padding: 1px 3px;
+    background:#fff url(/static/images/extjs/default/form/text-bg.gif) repeat-x 0 0;
+    border: 1px solid #B5B8C8;
+}
+.x-form-text {
+    height:22px;
+    line-height:18px;
+    vertical-align:middle;
+}
+.ext-ie .x-form-text {
+    margin-top:-1px; 
+    margin-bottom:-1px;
+    height:22px; 
+    line-height:18px;
+}
+.ext-strict .x-form-text {
+    height:18px;
+}
+.ext-safari .x-form-text {
+    height:20px; 
+}
+.ext-gecko .x-form-text {
+    padding-top:2px; 
+    padding-bottom:0;
+}
+
+
+.x-form-select-one {
+    height:20px;
+    line-height:18px;
+    vertical-align:middle;
+    background-color:#fff; 
+    border: 1px solid #B5B8C8;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.x-form-field-wrap {
+    position:relative;
+    zoom:1;
+    white-space: nowrap;
+}
+
+.x-editor .x-form-check-wrap {
+    background:#fff;
+}
+.x-form-field-wrap .x-form-trigger{
+    width:17px;
+    height:21px;
+    border:0;
+    background:transparent url(/static/images/extjs/default/form/trigger.gif) no-repeat 0 0;
+    cursor:pointer;
+    border-bottom: 1px solid #B5B8C8;
+    position:absolute;
+    top:0;
+}
+.ext-safari .x-form-field-wrap .x-form-trigger{
+    height:19px; 
+}
+.x-form-field-wrap .x-form-trigger-over{
+    background-position:-17px 0;
+}
+.x-form-field-wrap .x-form-trigger-click{
+    background-position:-34px 0;
+}
+.x-item-disabled .x-form-trigger-over{
+    background-position:0 0 !important;
+}
+.x-item-disabled .x-form-trigger-click{
+    background-position:0 0 !important;
+}
+.x-form-field-wrap .x-form-date-trigger{
+    background:transparent url(/static/images/extjs/default/form/date-trigger.gif) no-repeat 0 0;
+    cursor:pointer;
+}
+.ext-safari .x-form-field-wrap .x-form-date-trigger{
+    right:0;
+}
+
+
+.x-form-focus{
+	border: 1px solid #7eadd9;
+}
+
+
+.x-form-invalid{
+	background:#fff url(/static/images/extjs/default/grid/invalid_line.gif) repeat-x bottom;
+	border: 1px solid #dd7870;
+}
+.ext-safari .x-form-invalid{
+	background-color:#ffeeee;
+	border: 1px solid #ff7870;
+}
+
+
+
+.x-editor {
+    visibility:hidden;
+    padding:0;
+    margin:0;
+}
+.x-form-check-wrap {
+    line-height:18px;
+}
+.ext-ie .x-form-check-wrap input {
+    width:15px;
+    height:15px;
+}
+.x-editor .x-form-check-wrap {
+    padding:3px;
+}
+.x-editor .x-form-checkbox {
+    height:13px;
+    border: 0 none;
+}
+
+.x-form-grow-sizer {
+	font:normal 12px tahoma, arial, helvetica, sans-serif;
+    left: -10000px;
+	padding: 8px 3px;
+    position: absolute;
+    visibility:hidden;
+    top: -10000px;
+	white-space: pre-wrap;
+    white-space: -moz-pre-wrap;
+    white-space: -pre-wrap;
+    white-space: -o-pre-wrap;
+    word-wrap: break-word;
+    zoom:1;
+}
+
+
+
+.x-form-item {
+    font:normal 12px tahoma, arial, helvetica, sans-serif;
+    display:block;
+    margin-bottom:4px;
+}
+
+.x-form-item label {
+    display:block;
+    float:left;
+    width:100px;
+    padding:3px;
+    padding-left:0;
+    clear:left;
+}
+
+.x-form-element {
+    padding-left:105px;
+    position:relative;
+}
+
+.x-form-invalid-msg {
+    color:#ee0000;
+    padding:2px;
+    padding-left:18px;
+    font:normal 11px tahoma, arial, helvetica, sans-serif;
+    background: transparent url(/static/images/extjs/default/shared/warning.gif) no-repeat 0 2px;
+    line-height:16px;
+    width:200px;
+}
+
+.x-form-label-right label {
+   text-align:right;
+}
+
+.x-form-label-top .x-form-item label {
+    width:auto;
+    float:none;
+    clear:none;
+    display:inline;
+    margin-bottom:4px;
+}
+.x-form-label-top .x-form-element {
+    padding-left:0;
+    padding-top:4px;
+}
+.x-form-label-top .x-form-item {
+    padding-bottom:4px;
+}
+.x-form fieldset {
+    border:1px solid #B5B8C8;
+    padding:10px 10px 5px 10px;
+    margin-bottom:10px;
+}
+.x-form fieldset legend {
+    font:bold 11px tahoma, arial, helvetica, sans-serif;
+    color:#15428b;
+}
+.ext-ie .x-form fieldset legend {
+    margin-bottom:10px;
+}
+.x-form-empty-field {
+    color:gray;
+}
+
+.x-small-editor .x-form-field {
+    font:normal 11px arial, tahoma, helvetica, sans-serif;
+}
+.x-small-editor .x-form-text {
+    height:20px;
+    line-height:16px;
+    vertical-align:middle;
+}
+.ext-ie .x-small-editor .x-form-text {
+    margin-top:-1px !important; 
+    margin-bottom:-1px !important;
+    height:20px !important; 
+    line-height:16px !important;
+}
+.ext-strict .x-small-editor .x-form-text {
+    height:16px !important;
+}
+.ext-safari .x-small-editor .x-form-field {
+    
+    font:normal 12px arial, tahoma, helvetica, sans-serif;
+}
+.ext-ie .x-small-editor .x-form-text {
+    height:20px;
+    line-height:16px;
+}
+.ext-border-box .x-small-editor .x-form-text {
+    height:20px;
+}
+
+.x-small-editor .x-form-select-one {
+    height:20px;
+    line-height:16px;
+    vertical-align:middle;
+}
+.x-small-editor .x-form-num-field {
+    text-align:right;
+}
+.x-small-editor .x-form-field-wrap .x-form-trigger{
+    height:19px;
+}
+
+
+.x-form-clear {
+    clear:both;
+    height:0;
+    overflow:hidden;
+    line-height:0;
+    font-size:0;
+}
+.x-form-clear-left {
+    clear:left;
+    height:0;
+    overflow:hidden;
+    line-height:0;
+    font-size:0;
+}
+
+.x-form-cb-label {
+    width:'auto' !important;
+    float:none !important;
+    clear:none !important;
+    display:inline !important;
+    margin-left:4px;
+}
+
+.x-form-column {
+    float:left;
+    padding:0;
+    margin:0;
+    width:48%;
+    overflow:hidden;
+    zoom:1;
+}
+
+
+.x-form .x-form-btns-ct .x-btn{
+	float:right;
+	clear:none;
+}
+.x-form .x-form-btns-ct .x-form-btns td {
+	border:0;
+	padding:0;
+}
+.x-form .x-form-btns-ct .x-form-btns-right table{
+	float:right;
+	clear:none;
+}
+.x-form .x-form-btns-ct .x-form-btns-left table{
+	float:left;
+	clear:none;
+}
+.x-form .x-form-btns-ct .x-form-btns-center{
+	text-align:center; 
+}
+.x-form .x-form-btns-ct .x-form-btns-center table{
+	margin:0 auto; 
+}
+.x-form .x-form-btns-ct table td.x-form-btn-td{
+	padding:3px;
+}
+
+.x-form-invalid-icon {
+    width:16px;
+    height:18px;
+    visibility:hidden;
+    position:absolute;
+    left:0;
+    top:0;
+    display:block;
+    background:transparent url(/static/images/extjs/default/form/exclamation.gif) no-repeat 0 2px;
+}
+.x-btn{
+	font:normal 11px tahoma, verdana, helvetica;
+	cursor:pointer;
+	white-space: nowrap;
+}
+.x-btn button{
+    border:0 none;
+    background:transparent;
+    font:normal 11px tahoma,verdana,helvetica;
+    padding-left:3px;
+    padding-right:3px;
+    cursor:pointer;
+    margin:0;
+    overflow:visible;
+    width:auto;
+    -moz-outline:0 none;
+    outline:0 none;
+}
+* html .ext-ie .x-btn button {
+    width:1px;
+}
+.ext-gecko .x-btn button {
+    padding-left:0;
+    padding-right:0;
+}
+
+ 
+.x-btn-icon .x-btn-center .x-btn-text{
+	background-position: center;
+	background-repeat: no-repeat;
+	height: 16px;
+	width: 16px;
+	cursor:pointer;
+	white-space: nowrap;
+    padding:0;
+}
+.x-btn-icon .x-btn-center{
+	padding:1px;
+}
+.x-btn em {
+    font-style:normal;
+    font-weight:normal;
+}
+
+
+.x-btn-text-icon .x-btn-center .x-btn-text{
+	background-position: 0 2px;
+	background-repeat: no-repeat;
+	padding-left:18px;
+	padding-top:3px;
+	padding-bottom:3px;
+    padding-right:0;
+}
+
+.x-btn-left, .x-btn-right{
+	font-size:1px;
+    line-height:1px;
+}
+.x-btn-left{
+	width:3px;
+	height:21px;
+	background:url(/static/images/extjs/default/basic-dialog/btn-sprite.gif) no-repeat 0 0;
+}
+.x-btn-right{
+	width:3px;
+	height:21px;
+	background:url(/static/images/extjs/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px;
+}
+.x-btn-left i, .x-btn-right i{
+	display:block;
+    width:3px;
+    overflow:hidden;
+    font-size:1px;
+    line-height:1px;
+}
+.x-btn-center{
+	background:url(/static/images/extjs/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px;
+	vertical-align: middle;
+	text-align:center;
+	padding:0 5px;
+	cursor:pointer;
+	white-space:nowrap;
+}
+.x-btn-focus .x-btn-left{
+	background-position:0 -126px;
+}
+.x-btn-focus .x-btn-right{
+	background-position:0 -147px;
+}
+.x-btn-focus .x-btn-center{
+	background-position:0 -168px;
+}
+.x-btn-over .x-btn-left{
+	background-position:0 -63px;
+}
+.x-btn-over .x-btn-right{
+	background-position:0 -84px;
+}
+.x-btn-over .x-btn-center{
+	background-position:0 -105px;
+}
+.x-btn-click .x-btn-center, .x-btn-menu-active .x-btn-center{
+	background-position:0 -126px;
+}
+.x-btn-disabled *{
+	color:gray !important;
+	cursor:default !important;
+}
+.x-btn-menu-text-wrap .x-btn-center {
+	padding:0 3px;
+}
+.ext-gecko .x-btn-menu-text-wrap .x-btn-center {
+	padding:0 1px;
+}
+.x-btn-menu-arrow-wrap .x-btn-center {
+    padding:0;
+}
+.x-btn-menu-arrow-wrap .x-btn-center button {
+	width:12px !important;
+    height:21px;
+    padding:0 !important;
+    display:block;
+    background:transparent url(/static/images/extjs/default/basic-dialog/btn-arrow.gif) no-repeat left 3px;
+}
+.x-btn-with-menu  .x-btn-center {
+    padding-right:2px !important;
+}
+.x-btn-with-menu  .x-btn-center em {
+    display:block;
+    background:transparent url(/static/images/extjs/default/toolbar/btn-arrow.gif) no-repeat right 0;
+	padding-right:10px;
+}
+
+.x-btn-text-icon .x-btn-with-menu .x-btn-center em {
+    display:block;
+    background:transparent url(/static/images/extjs/default/toolbar/btn-arrow.gif) no-repeat right 3px;
+	padding-right:10px;
+}
+.x-toolbar{
+	border: 1px solid;
+    border-color:#eaf0f7 #eaf0f7 #a9bfd3 #eaf0f7;
+    display: block;
+	padding:2px;
+    background:#d0def0 url(/static/images/extjs/default/layout/panel-title-light-bg.gif) repeat-x;
+}
+.x-toolbar td {
+	vertical-align:middle;
+}
+.mso .x-toolbar, .x-grid-mso .x-toolbar{
+	border: 0 none;
+	background: url(/static/images/extjs/default/grid/mso-hd.gif);
+}
+.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{
+	white-space: nowrap;
+    font:normal 11px tahoma, arial, helvetica, sans-serif;
+}
+.x-toolbar .x-item-disabled {
+	color:gray;
+	cursor:default;
+	opacity:.6;
+	-moz-opacity:.6;
+	filter:alpha(opacity=60);
+}
+.x-toolbar .x-item-disabled * {
+	color:gray;
+	cursor:default;
+}
+.x-toolbar .x-btn-left{
+	background:none;
+}
+.x-toolbar .x-btn-right{
+	background:none;
+}
+.x-toolbar .x-btn-center{
+	background:none;
+	padding:0 0;
+}
+.x-toolbar .x-btn-menu-text-wrap .x-btn-center button{
+	padding-right:2px;
+}
+.ext-gecko .x-toolbar .x-btn-menu-text-wrap .x-btn-center button{
+	padding-right:0;
+}
+.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{
+	padding:0 2px;
+}
+.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button {
+    width:12px;
+    background:transparent url(/static/images/extjs/default/toolbar/btn-arrow.gif) no-repeat 0 3px;
+}
+.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button {
+    width:12px;
+    background:transparent url(/static/images/extjs/default/toolbar/btn-arrow.gif) no-repeat 0 3px;
+}
+.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button {
+	background-position: 0 -47px;
+}
+.x-toolbar .x-btn-over .x-btn-left{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
+}
+.x-toolbar .x-btn-over .x-btn-right{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
+}
+.x-toolbar .x-btn-over .x-btn-center{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
+}
+
+.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
+}
+.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
+}
+.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
+}
+
+.x-toolbar .ytb-text{
+   padding:2px;
+}
+.x-toolbar .ytb-sep {
+	background-image: url(/static/images/extjs/default/grid/grid-split.gif);
+	background-position: center;
+	background-repeat: no-repeat;
+	display: block;
+	font-size: 1px;
+	height: 16px;
+	width:4px;
+	overflow: hidden;
+	cursor:default;
+	margin: 0 2px 0;
+	border:0;
+}
+.x-toolbar .ytb-spacer {
+    width:2px;
+}
+.mso .x-toolbar .ytb-sep, .x-grid-mso .x-toolbar .ytb-sep{
+	background-image: url(/static/images/extjs/default/grid/grid-blue-split.gif);
+}
+
+
+.ext-ie .x-toolbar .x-form-field-wrap {
+	padding-bottom:1px;
+}
+.ext-ie .x-toolbar .x-form-field-wrap .x-form-trigger {
+	top:1px;
+}
+
+
+
+.x-grid-page-number{
+	width:24px;
+	height:14px;
+}
+.x-grid-page-first .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-first.gif);
+}
+.x-grid-loading .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/done.gif);
+}
+.x-grid-page-last .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-last.gif);
+}
+.x-grid-page-next .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-next.gif);
+}
+.x-grid-page-prev .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-prev.gif);
+}
+.x-item-disabled .x-grid-loading .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/loading.gif);
+}
+.x-item-disabled .x-grid-page-first .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-first-disabled.gif);
+}
+.x-item-disabled .x-grid-page-last .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-last-disabled.gif);
+}
+.x-item-disabled .x-grid-page-next .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-next-disabled.gif);
+}
+.x-item-disabled .x-grid-page-prev .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-prev-disabled.gif);
+}
+.x-paging-info {
+    position:absolute;
+    top:8px;
+    right: 8px;
+    color:#15428b;
+}
+
+.x-resizable-handle {
+    position:absolute;
+    z-index:100;
+    
+    font-size:1px;
+    line-height:6px;
+    overflow:hidden;
+	 background:white;
+	 filter:alpha(opacity=0);
+	 opacity:0;
+	 zoom:1;
+}
+.x-resizable-handle-east{
+    width:6px;
+    cursor:e-resize;
+    right:0;
+    top:0;
+    height:100%;
+}
+.ext-ie .x-resizable-handle-east {
+      margin-right:-1px; 
+}
+.x-resizable-handle-south{
+    width:100%;
+    cursor:s-resize;
+    left:0;
+    bottom:0;
+    height:6px;
+}
+.ext-ie .x-resizable-handle-south {
+     margin-bottom:-1px; 
+}
+.x-resizable-handle-west{
+    width:6px;
+    cursor:w-resize;
+    left:0;
+    top:0;
+    height:100%;
+}
+.x-resizable-handle-north{
+    width:100%;
+    cursor:n-resize;
+    left:0;
+    top:0;
+    height:6px;
+}
+.x-resizable-handle-southeast{
+    width:6px;
+    cursor:se-resize;
+    right:0;
+    bottom:0;
+    height:6px;
+    z-index:101;
+}
+.x-resizable-handle-northwest{
+    width:6px;
+    cursor:nw-resize;
+    left:0;
+    top:0;
+    height:6px;
+    z-index:101;
+}
+.x-resizable-handle-northeast{
+    width:6px;
+    cursor:ne-resize;
+    right:0;
+    top:0;
+    height:6px;
+    z-index:101;
+}
+.x-resizable-handle-southwest{
+    width:6px;
+    cursor:sw-resize;
+    left:0;
+    bottom:0;
+    height:6px;
+    z-index:101;
+}
+.x-resizable-over .x-resizable-handle, .x-resizable-pinned .x-resizable-handle{
+    filter:alpha(opacity=100);
+	 opacity:1;
+}
+.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
+    background:url(/static/images/extjs/default/sizer/e-handle.gif);
+	 background-position: left;
+}
+.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west{
+    background:url(/static/images/extjs/default/sizer/e-handle.gif);
+	 background-position: left;
+}
+.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
+    background:url(/static/images/extjs/default/sizer/s-handle.gif);
+    background-position: top;
+}
+.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north{
+    background:url(/static/images/extjs/default/sizer/s-handle.gif);
+    background-position: top;
+}
+.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
+    background:url(/static/images/extjs/default/sizer/se-handle.gif);
+    background-position: top left;
+}
+.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{
+    background:url(/static/images/extjs/default/sizer/nw-handle.gif);
+    background-position:bottom right;
+}
+.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{
+    background:url(/static/images/extjs/default/sizer/ne-handle.gif);
+    background-position: bottom left;
+}
+.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{
+    background:url(/static/images/extjs/default/sizer/sw-handle.gif);
+    background-position: top right;
+}
+.x-resizable-proxy{
+    border: 1px dashed #6593cf;
+    position:absolute;
+    overflow:hidden;
+    visibility:hidden;
+	 left:0;top:0;
+    z-index:50000;
+}
+.x-resizable-overlay{
+    width:100%;
+	 height:100%;
+	 display:none;
+	 position:absolute;
+	 left:0;
+	 top:0;
+	 background:white;
+	 z-index:200000;
+	 -moz-opacity: 0;
+    opacity:0;
+    filter: alpha(opacity=0);
+}
+
+
+.x-grid {
+	position:relative;
+	overflow:hidden;
+    background:#fff;
+}
+.x-grid-scroller {
+	overflow:auto;
+}
+.x-grid-viewport, .x-grid-locked{
+	position:absolute;
+	left:0; top: 0;
+	z-index:2;
+	overflow:hidden;
+	visibility:hidden;
+}
+.x-grid-cell-inner, .x-grid-hd-inner{
+	overflow:hidden;
+	-o-text-overflow: ellipsis;
+	text-overflow: ellipsis;
+}
+.x-grid-hd-row td, .x-grid-row td{
+	font:normal 11px arial, tahoma, helvetica, sans-serif;
+    line-height:13px;
+    white-space: nowrap;
+	vertical-align: top;
+	-moz-outline: none;
+	-moz-user-focus: normal;
+}
+.x-grid-hd-row td {
+    line-height:14px;
+}
+.x-grid-col {
+	border-right: 1px solid #ebebeb;
+	border-bottom: 1px solid #ebebeb;
+}
+
+
+.x-grid-locked .x-grid-body td {
+	background: #FBFDFF;
+	border-right: 1px solid #deecfd;
+	border-bottom: 1px solid #deecfd !important;
+}
+.x-grid-locked .x-grid-body td .x-grid-cell-inner {
+	border-top:0 none;
+}
+.x-grid-locked .x-grid-row-alt td{
+	background: #F5FAFE;
+}
+
+.x-grid-locked .x-grid-header table{
+    border-right:1px solid transparent;
+}
+.x-grid-locked .x-grid-body table{
+    border-right:1px solid #c3daf9;
+}
+
+.x-grid-locked .x-grid-body td .x-grid-cell-inner {
+	
+}
+.x-grid-row {
+	cursor: default;
+}
+.x-grid-row-alt{
+	background:#f1f1f1;
+}
+.x-grid-row-over td{
+	background:#d9e8fb;
+}
+.x-grid-resize-proxy {
+	width:3px;
+	background:#cccccc;
+	cursor: e-resize;
+	cursor: col-resize;
+	position:absolute;
+	top:0;
+	height:100px;
+	overflow:hidden;
+	visibility:hidden;
+	border:0 none;
+	z-index:7;
+}
+.x-grid-focus {
+	position:absolute;
+	top:0;
+	-moz-outline:0 none;
+    outline:0 none;
+    -moz-user-select: normal;
+    -khtml-user-select: normal;
+}
+
+
+.x-grid-header{
+	background: #ebeadb url(/static/images/extjs/default/grid/grid-hrow.gif) repeat-x;
+	overflow:hidden;
+	position:relative;
+	cursor:default;
+	width:100%;
+}
+.x-grid-hd-row{
+	height:22px;
+}
+.x-grid-hd {
+	padding-right:1px;
+}
+.x-grid-hd-over .x-grid-hd-inner {
+	border-bottom: 1px solid #c3daf9;
+}
+.x-grid-hd-over .x-grid-hd-text {
+	background: #fafafa url(/static/images/extjs/default/grid/grid-hrow.gif) repeat-x 0 1px;
+	padding-bottom:1px;
+    border-bottom: 1px solid #b3cae9;
+}
+.x-grid-sort-icon{
+	background-repeat: no-repeat;
+	display: none;
+	height: 4px;
+	width: 13px;
+	margin-left:3px;
+	vertical-align: middle;
+}
+.x-grid-header .sort-asc .x-grid-sort-icon {
+	background-image: url(/static/images/extjs/default/grid/sort_asc.gif);
+	display: inline;
+}
+.x-grid-header .sort-desc .x-grid-sort-icon {
+	background-image: url(/static/images/extjs/default/grid/sort_desc.gif);
+	display: inline;
+}
+
+
+.x-grid-body {
+	overflow:hidden;
+	position:relative;
+	width:100%;
+	zoom:1;
+}
+
+.x-grid-cell-text,.x-grid-hd-text {
+	display: block;
+	padding: 3px 5px 3px 5px;
+	-moz-user-select: none;
+	-khtml-user-select: none;
+	color:black;
+}
+.x-grid-hd-text {
+    padding-top:4px;
+}
+.x-grid-split {
+	background-image: url(/static/images/extjs/default/grid/grid-split.gif);
+	background-position: center;
+	background-repeat: no-repeat;
+	cursor: e-resize;
+	cursor: col-resize;
+	display: block;
+	font-size: 1px;
+	height: 16px;
+	overflow: hidden;
+	position: absolute;
+	top: 2px;
+	width: 6px;
+	z-index: 3;
+}
+
+.x-grid-hd-text {
+	color:#15428b;
+}
+
+.x-dd-drag-proxy .x-grid-hd-inner{
+	background: #ebeadb url(/static/images/extjs/default/grid/grid-hrow.gif) repeat-x;
+	height:22px;
+	width:120px;
+}
+
+.col-move-top, .col-move-bottom{
+	width:9px;
+	height:9px;
+	position:absolute;
+	top:0;
+	line-height:1px;
+	font-size:1px;
+	overflow:hidden;
+	visibility:hidden;
+	z-index:20000;
+}
+.col-move-top{
+	background:transparent url(/static/images/extjs/default/grid/col-move-top.gif) no-repeat left top;
+}
+.col-move-bottom{
+	background:transparent url(/static/images/extjs/default/grid/col-move-bottom.gif) no-repeat left top;
+}
+
+
+.x-grid-row-selected td, .x-grid-locked .x-grid-row-selected td{
+	background-color: #316ac5 !important;
+	color: white;
+}
+.x-grid-row-selected span, .x-grid-row-selected b, .x-grid-row-selected div, .x-grid-row-selected strong, .x-grid-row-selected i{
+	color: white !important;
+}
+.x-grid-row-selected .x-grid-cell-text{
+	color: white;
+}
+.x-grid-cell-selected{
+	background-color: #316ac5 !important;
+	color: white;
+}
+.x-grid-cell-selected span{
+	color: white !important;
+}
+.x-grid-cell-selected .x-grid-cell-text{
+	color: white;
+}
+
+.x-grid-locked td.x-grid-row-marker, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker{
+    background: #ebeadb url(/static/images/extjs/default/grid/grid-hrow.gif) repeat-x 0 bottom !important;
+    vertical-align:middle !important;
+    color:black;
+    padding:0;
+    border-top:1px solid white;
+    border-bottom:none !important;
+    border-right:1px solid #6fa0df !important;
+    text-align:center;
+}
+.x-grid-locked td.x-grid-row-marker div, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker div{
+    padding:0 4px;
+    color:#15428b !important;
+    text-align:center;
+}
+
+
+.x-grid-dirty-cell {
+    background: transparent url(/static/images/extjs/default/grid/dirty.gif) no-repeat 0 0;
+}
+
+
+.x-grid-topbar, .x-grid-bottombar{
+	font:normal 11px arial, tahoma, helvetica, sans-serif;
+    overflow:hidden;
+	display:none;
+	zoom:1;
+    position:relative;
+}
+.x-grid-topbar .x-toolbar{
+	border-right:0 none;
+}
+.x-grid-bottombar .x-toolbar{
+	border-right:0 none;
+	border-bottom:0 none;
+	border-top:1px solid #a9bfd3;
+}
+
+.x-props-grid .x-grid-cell-selected .x-grid-cell-text{
+	 background-color: #316ac5 !important;
+}
+.x-props-grid .x-grid-col-value .x-grid-cell-text{
+	background-color: white;
+}
+.x-props-grid .x-grid-col-name{
+	 background-color: #c3daf9;
+}
+.x-props-grid .x-grid-col-name .x-grid-cell-text{
+	background-color: white;
+    margin-left:10px;
+}
+.x-props-grid .x-grid-split-value {
+    visibility:hidden;
+}
+
+
+.xg-hmenu-sort-asc .x-menu-item-icon{
+	background-image: url(/static/images/extjs/default/grid/hmenu-asc.gif);
+}
+.xg-hmenu-sort-desc .x-menu-item-icon{
+	background-image: url(/static/images/extjs/default/grid/hmenu-desc.gif);
+}
+.xg-hmenu-lock .x-menu-item-icon{
+	background-image: url(/static/images/extjs/default/grid/hmenu-lock.gif);
+}
+.xg-hmenu-unlock .x-menu-item-icon{
+	background-image: url(/static/images/extjs/default/grid/hmenu-unlock.gif);
+}
+
+
+.x-dd-drag-ghost .x-grid-dd-wrap {
+    padding:1px 3px 3px 1px;
+}
+.x-layout-container{
+    width:100%;
+    height:100%;
+    overflow:hidden;
+	 background-color:#c3daf9;
+}
+.x-layout-container .x-layout-tabs-body{
+	border:0 none;
+}
+.x-layout-collapsed{
+    position:absolute;
+    left:-10000px;
+    top:-10000px;
+    visibility:hidden;
+    background-color:#c3daf9;
+    width:20px;
+    height:20px;
+    overflow:hidden;
+	border:1px solid #98c0f4;
+	z-index:20;
+}
+.ext-border-box .x-layout-collapsed{
+    width:22px;
+    height:22px;
+}
+.x-layout-collapsed-over{
+    cursor:pointer;
+	 background-color:#d9e8fb;
+}
+.x-layout-collapsed-west .x-layout-collapsed-tools, .x-layout-collapsed-east .x-layout-collapsed-tools{
+	position:absolute;
+    top:0;
+    left:0;
+    width:20px;
+    height:20px;
+}
+.x-layout-collapsed-north .x-layout-collapsed-tools, .x-layout-collapsed-south .x-layout-collapsed-tools{
+	position:absolute;
+    top:0;
+    right:0;
+    width:20px;
+    height:20px;
+}
+.x-layout-collapsed .x-layout-tools-button{
+    margin:0;
+}
+.x-layout-collapsed .x-layout-tools-button-inner{
+    width:16px;
+    height:16px;
+}
+.x-layout-inactive-content{
+    position:absolute;
+    left:-10000px;
+    top:-10000px;
+    visibility:hidden;
+}
+.x-layout-active-content{
+    visibility:visible;
+}
+.x-layout-panel{
+    position:absolute;border:1px solid #98c0f4;overflow:hidden;background-color:white;
+}
+.x-layout-panel-east, .x-layout-panel-west {
+    z-index:10;
+}
+.x-layout-panel-north, .x-layout-panel-south {
+    z-index:11;
+}
+.x-layout-collapsed-north, .x-layout-collapsed-south, .x-layout-collapsed-east, .x-layout-collapsed-west {
+    z-index:12;
+}
+.x-layout-panel-body{
+    overflow:hidden;
+}
+.x-layout-grid-wrapper{
+
+}
+.x-layout-split{
+    position:absolute;
+    height:5px;
+    width:5px;
+    line-height:1px;
+    font-size:1px;
+    z-index:3;
+    background-color:#c3daf9;
+}
+.x-layout-panel-hd{
+    background-image: url(/static/images/extjs/default/layout/panel-title-light-bg.gif);
+    color: black;
+    border-bottom:1px solid #98c0f4;
+    position:relative;
+}
+.x-layout-panel-hd-text{
+    font:normal 11px tahoma, verdana, helvetica;
+    padding: 4px;
+    padding-left: 4px;
+    display:block;
+	 white-space:nowrap;
+}
+.x-layout-panel-hd-tools{
+    position:absolute;
+    right:0;
+    top:0;
+    text-align:right;
+    padding-top:2px;
+    padding-right:2px;
+    width:60px;
+}
+.x-layout-tools-button{
+    z-index:6;
+    padding:2px;
+    cursor:pointer;
+    float:right;
+}
+.x-layout-tools-button-over{
+    padding:1px;
+    border:1px solid #98c0f4;
+    background-color:white;
+}
+.x-layout-tools-button-inner{
+    height:12px;
+    width:12px;
+    line-height:1px;
+    font-size:1px;
+    background-repeat:no-repeat;
+    background-position:center;
+}
+.x-layout-close{
+    background-image:url(/static/images/extjs/default/layout/panel-close.gif);
+}
+.x-layout-stick{
+    background-image:url(/static/images/extjs/default/layout/stick.gif);
+}
+.x-layout-collapse-west,.x-layout-expand-east{
+    background-image:url(/static/images/extjs/default/layout/collapse.gif);
+}
+.x-layout-expand-west,.x-layout-collapse-east{
+    background-image:url(/static/images/extjs/default/layout/expand.gif);
+}
+.x-layout-collapse-north,.x-layout-expand-south{
+    background-image:url(/static/images/extjs/default/layout/ns-collapse.gif);
+}
+.x-layout-expand-north,.x-layout-collapse-south{
+    background-image:url(/static/images/extjs/default/layout/ns-expand.gif);
+}
+.x-layout-split-h{
+    background-image:url(/static/images/extjs/default/sizer/e-handle.gif);
+    background-position: left;
+}
+.x-layout-split-v{
+    background-image:url(/static/images/extjs/default/sizer/s-handle.gif);
+    background-position: top;
+}
+.x-layout-panel .x-tabs-wrap{
+    background:url(/static/images/extjs/default/layout/gradient-bg.gif);
+}
+.x-layout-panel .x-tabs-body {
+    background-color:white;
+    overflow:auto;height:100%;
+}
+.x-layout-component-panel, .x-layout-nested-layout {
+	position:relative;
+   padding:0;
+	overflow:hidden;
+	width:200px;
+	height:200px;
+}
+.x-layout-nested-layout .x-layout-panel {
+	  border:0 none;
+}
+.x-layout-nested-layout .x-layout-panel-north {
+	  border-bottom:1px solid #98c0f4;
+}
+.x-layout-nested-layout .x-layout-panel-south {
+	  border-top:1px solid #98c0f4;
+}
+.x-layout-nested-layout .x-layout-panel-east {
+	  border-left:1px solid #98c0f4;
+}
+.x-layout-nested-layout .x-layout-panel-west {
+	  border-right:1px solid #98c0f4;
+}
+
+.x-layout-panel-dragover {
+	border: 2px solid #6593cf;
+}
+.x-layout-panel-proxy {
+	background-image: url(/static/images/extjs/default/layout/gradient-bg.gif);
+	background-color:#c3daf9;
+	border:1px dashed #6593cf;
+	z-index:10001;
+	overflow:hidden;
+	position:absolute;
+	left:0;top:0;
+}
+.x-layout-slider {
+	z-index:15;
+	overflow:hidden;
+	position:absolute;
+}
+
+.x-scroller-up, .x-scroller-down {
+	background-color:#c3daf9;
+	border: 1px solid #6593cf;
+	border-top-color: #fff;
+	border-left-color: #fff;
+	border-right:0 none;
+	cursor:pointer;
+	overflow:hidden;
+	line-height:16px;
+}
+.x-scroller-down {
+	border-bottom: 0 none;
+	border-top: 1px solid #6593cf;
+}
+.x-scroller-btn-over {
+	background-color: #d9e8f8;
+}
+.x-scroller-btn-click {
+	background-color: #AECEF7;
+}
+.x-scroller-btn-disabled {
+	cursor:default;
+	background-color: #c3daf9;
+	-moz-opacity: 0.3;
+   opacity:.30;
+   filter: alpha(opacity=30);
+}
+
+
+
+.x-reader .x-layout-panel-north {
+    border:0 none;
+}
+.x-reader .x-layout-panel-center{
+    border:0 none;
+}
+.x-reader .x-layout-nested-layout .x-layout-panel-center{
+    border:1px solid #99bbe8;
+    border-top:0 none;
+}
+.x-reader .x-layout-nested-layout .x-layout-panel-south{
+    border:1px solid #99bbe8;
+}
+.x-dlg-proxy {
+	background-image: url(/static/images/extjs/default/gradient-bg.gif);
+	background-color:#c3daf9;
+	border:1px solid #6593cf;
+	z-index:10001;
+	overflow:hidden;
+	position:absolute;
+	left:0;top:0;
+}
+.x-dlg-shadow{
+	background:#aaaaaa;
+	position:absolute;
+	left:0;top:0;
+}
+.x-dlg-focus{
+	-moz-outline:0 none;
+	outline:0 none;
+	width:0;
+	height:0;
+	overflow:hidden;
+	position:absolute;
+	top:0;
+	left:0;
+}
+.x-dlg-mask{
+	z-index:10000;   
+   display:none;
+   position:absolute;
+   top:0;
+   left:0;
+   -moz-opacity: 0.5;
+   opacity:.50;
+   filter: alpha(opacity=50);
+   background-color:#CCC;
+}
+body.x-body-masked select {
+	visibility:hidden;
+}
+body.x-body-masked .x-dlg select {
+	visibility:visible;
+}
+.x-dlg{
+	z-index:10001;
+	overflow:hidden;
+	position:absolute;
+	left:300;top:0;
+}
+.x-dlg .x-dlg-hd {
+	background: url(/static/images/extjs/default/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
+	background-color:navy;
+	color:#FFF;
+	font:bold 12px "sans serif", tahoma, verdana, helvetica;
+	overflow:hidden;
+	padding:5px;
+    white-space: nowrap;
+}
+.x-dlg .x-dlg-hd-left {
+	background: url(/static/images/extjs/default/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
+	padding-left:3px;
+	margin:0;
+}
+.x-dlg .x-dlg-hd-right {
+	background: url(/static/images/extjs/default/basic-dialog/hd-sprite.gif) no-repeat right 0;
+	padding-right:3px;
+}
+.x-dlg .x-dlg-dlg-body{
+	background:url(/static/images/extjs/default/layout/gradient-bg.gif);
+	border:1px solid #6593cf;
+	border-top:0 none;
+	padding:10px;
+	position:absolute;
+	top:24px;left:0;
+	z-index:1;
+	overflow:hidden;
+}
+.x-dlg-collapsed .x-resizable-handle{
+    display:none;
+}
+.x-dlg .x-dlg-bd{
+	overflow:hidden;
+}
+.x-dlg .x-dlg-ft{
+	overflow:hidden;
+	padding:5px;
+	padding-bottom:0;
+}
+.x-dlg .x-tabs-body{
+	background:white;
+	overflow:auto;
+}
+.x-dlg .x-tabs-top .x-tabs-body{
+	border:1px solid #6593cf;
+	border-top:0 none;
+}
+.x-dlg .x-tabs-bottom .x-tabs-body{
+	border:1px solid #6593cf;
+	border-bottom:0 none;
+}
+.x-dlg .x-layout-container  .x-tabs-body{
+	border:0 none;
+}
+.x-dlg .inner-tab{
+	margin:5px;
+}
+.x-dlg .x-dlg-ft .x-btn{
+	margin-right:5px;
+	float:right;
+	clear:none;
+}
+.x-dlg .x-dlg-ft .x-dlg-btns td {
+	border:0;
+	padding:0;
+}
+.x-dlg .x-dlg-ft .x-dlg-btns-right table{
+	float:right;
+	clear:none;
+}
+.x-dlg .x-dlg-ft .x-dlg-btns-left table{
+	float:left;
+	clear:none;
+}
+.x-dlg .x-dlg-ft .x-dlg-btns-center{
+	text-align:center; 
+}
+.x-dlg .x-dlg-ft .x-dlg-btns-center table{
+	margin:0 auto; 
+}
+.x-dlg-draggable .x-dlg-hd{
+	cursor:move;
+}
+.x-dlg-closable .x-dlg-hd{
+	padding-right:22px;
+}
+.x-dlg-toolbox {
+    position:absolute;
+	top:4px;
+	right:4px;
+	z-index:6;
+    width:40px;
+    cursor:default;
+    height:15px;
+    background:transparent;
+}
+.x-dlg .x-dlg-close, .x-dlg .x-dlg-collapse {
+    float:right;
+    height:15px;
+	width:15px;
+	margin:0;
+    margin-left:2px;
+    padding:0;
+	line-height:1px;
+	font-size:1px;
+	background-repeat:no-repeat;
+	cursor:pointer;
+	visibility:inherit;
+}
+.x-dlg .x-dlg-close {
+    background-image:url(/static/images/extjs/default/basic-dialog/close.gif);
+}
+.x-dlg .x-dlg-collapse {
+    background-image:url(/static/images/extjs/default/basic-dialog/collapse.gif);
+}
+.x-dlg-collapsed .x-dlg-collapse {
+    background-image:url(/static/images/extjs/default/basic-dialog/expand.gif);
+}
+.x-dlg .x-dlg-close-over, .x-dlg .x-dlg-collapse-over {
+    
+}
+.x-dlg div.x-resizable-handle-east{
+	background-image:url(/static/images/extjs/default/basic-dialog/e-handle.gif);
+	border:0;
+	background-position:right;
+	margin-right:0;
+}
+.x-dlg div.x-resizable-handle-south{
+	background-image:url(/static/images/extjs/default/sizer/s-handle-dark.gif);
+	border:0;
+	height:6px;
+}
+.x-dlg div.x-resizable-handle-west{
+	background-image:url(/static/images/extjs/default/basic-dialog/e-handle.gif);
+	border:0;
+	background-position:1px;
+}
+.x-dlg div.x-resizable-handle-north{
+	background-image:url(/static/images/extjs/default/s.gif);
+	border:0;
+}
+.x-dlg div.x-resizable-handle-northeast, .ytheme-gray .x-dlg div.x-resizable-handle-northeast{
+	background-image:url(/static/images/extjs/default/s.gif);
+	border:0;
+}
+.x-dlg div.x-resizable-handle-northwest, .ytheme-gray .x-dlg div.x-resizable-handle-northwest{
+	background-image:url(/static/images/extjs/default/s.gif);
+	border:0;
+}
+.x-dlg div.x-resizable-handle-southeast{
+	background-image:url(/static/images/extjs/default/basic-dialog/se-handle.gif);
+	background-position: bottom right;
+	width:8px;
+	height:8px;
+	border:0;
+}
+.x-dlg div.x-resizable-handle-southwest{
+	background-image:url(/static/images/extjs/default/sizer/sw-handle-dark.gif);
+	background-position: top right;
+	margin-left:1px;
+	margin-bottom:1px;
+	border:0;
+}
+
+#x-msg-box .x-dlg-ft .x-btn{
+	float:none;
+	clear:none;
+	margin:0 3px;
+}
+
+#x-msg-box .x-dlg-bd {
+	padding:5px;
+	overflow:hidden !important;
+	font:normal 13px verdana,tahoma,sans-serif;
+}
+#x-msg-box .ext-mb-input {
+	margin-top:4px;
+	width:95%;
+}
+#x-msg-box .ext-mb-textarea {
+	margin-top:4px;
+	font:normal 13px verdana,tahoma,sans-serif;
+}
+#x-msg-box .ext-mb-progress-wrap {
+	margin-top:4px;
+	border:1px solid #6593cf;
+}
+#x-msg-box .ext-mb-progress {
+	height:18px;
+	background: #e0e8f3 url(/static/images/extjs/default/qtip/bg.gif) repeat-x;
+}
+#x-msg-box .ext-mb-progress-bar {
+	height:18px;
+	overflow:hidden;
+	width:0;
+	background:#8BB8F3;
+	border-top:1px solid #B2D0F7;
+	border-bottom:1px solid #65A1EF;
+	border-right:1px solid #65A1EF;
+}
+
+#x-msg-box .x-msg-box-wait {
+	background: transparent url(/static/images/extjs/default/grid/loading.gif) no-repeat left;
+    display:block;
+    width:300px;
+    padding-left:18px;
+    line-height:18px;
+}
+.x-dd-drag-proxy{
+	position:absolute;
+	left:0;top:0;
+	visibility:hidden;
+	z-index:15000;
+}
+.x-dd-drag-ghost{
+	color: black;
+	font: normal 11px arial, helvetica, sans-serif;
+	-moz-opacity: 0.85;
+   opacity:.85;
+   filter: alpha(opacity=85);
+	border-top:1px solid #dddddd;
+	border-left:1px solid #dddddd;
+	border-right:1px solid #bbbbbb;
+	border-bottom:1px solid #bbbbbb;
+	padding:3px;
+	padding-left:20px;
+	background-color:white;
+	white-space:nowrap;
+}
+.x-dd-drag-repair .x-dd-drag-ghost{
+	-moz-opacity: 0.4;
+   opacity:.4;
+   filter: alpha(opacity=40);
+	border:0 none;
+	padding:0;
+	background-color:transparent;
+}
+.x-dd-drag-repair .x-dd-drop-icon{
+	visibility:hidden;
+}
+.x-dd-drop-icon{
+  position:absolute;
+	top:3px;
+	left:3px;
+	display:block;
+	width:16px;
+	height:16px;
+	background-color:transparent;
+	background-position: center;
+	background-repeat: no-repeat;
+	z-index:1;
+}
+.x-dd-drop-nodrop .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/dd/drop-no.gif);
+}
+.x-dd-drop-ok .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/dd/drop-yes.gif);
+}
+.x-dd-drop-ok-add .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/dd/drop-add.gif);
+}
+.x-tree-icon, .x-tree-ec-icon, .x-tree-elbow-line, .x-tree-elbow, .x-tree-elbow-end, .x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{
+	border: 0 none;
+	height: 18px;
+	margin: 0;
+	padding: 0;
+	vertical-align: middle;
+	width: 16px;
+    background-repeat: no-repeat;
+}
+.x-tree-node-collapsed .x-tree-node-icon, .x-tree-node-expanded .x-tree-node-icon, .x-tree-node-leaf .x-tree-node-icon{
+	border: 0 none;
+	height: 18px;
+	margin: 0;
+	padding: 0;
+	vertical-align: middle;
+	width: 16px;
+	background-position:center;
+    background-repeat: no-repeat;
+}
+
+
+.x-tree-node-collapsed .x-tree-node-icon{
+	background-image:url(/static/images/extjs/default/tree/folder.gif);
+}
+.x-tree-node-expanded .x-tree-node-icon{
+	background-image:url(/static/images/extjs/default/tree/folder-open.gif);
+}
+.x-tree-node-leaf .x-tree-node-icon{
+	background-image:url(/static/images/extjs/default/tree/leaf.gif);
+}
+
+.x-tree-noicon .x-tree-node-icon{
+	width:0; height:0;
+}
+
+.x-tree-node-loading .x-tree-node-icon{
+	background-image:url(/static/images/extjs/default/tree/loading.gif) !important;
+}
+.x-tree-node-loading a span{
+	 font-style: italic;
+	 color:#444444;
+}
+
+
+.x-tree-lines .x-tree-elbow{
+	background-image:url(/static/images/extjs/default/tree/elbow.gif);
+}
+.x-tree-lines .x-tree-elbow-plus{
+	background-image:url(/static/images/extjs/default/tree/elbow-plus.gif);
+}
+.x-tree-lines .x-tree-elbow-minus{
+	background-image:url(/static/images/extjs/default/tree/elbow-minus.gif);
+}
+.x-tree-lines .x-tree-elbow-end{
+	background-image:url(/static/images/extjs/default/tree/elbow-end.gif);
+}
+.x-tree-lines .x-tree-elbow-end-plus{
+	background-image:url(/static/images/extjs/default/tree/elbow-end-plus.gif);
+}
+.x-tree-lines .x-tree-elbow-end-minus{
+	background-image:url(/static/images/extjs/default/tree/elbow-end-minus.gif);
+}
+.x-tree-lines .x-tree-elbow-line{
+	background-image:url(/static/images/extjs/default/tree/elbow-line.gif);
+}
+
+
+.x-tree-no-lines .x-tree-elbow{
+	background:transparent;
+}
+.x-tree-no-lines .x-tree-elbow-plus{
+	background-image:url(/static/images/extjs/default/tree/elbow-plus-nl.gif);
+}
+.x-tree-no-lines .x-tree-elbow-minus{
+	background-image:url(/static/images/extjs/default/tree/elbow-minus-nl.gif);
+}
+.x-tree-no-lines .x-tree-elbow-end{
+	background:transparent;
+}
+.x-tree-no-lines .x-tree-elbow-end-plus{
+	background-image:url(/static/images/extjs/default/tree/elbow-end-plus-nl.gif);
+}
+.x-tree-no-lines .x-tree-elbow-end-minus{
+	background-image:url(/static/images/extjs/default/tree/elbow-end-minus-nl.gif);
+}
+.x-tree-no-lines .x-tree-elbow-line{
+	background:transparent;
+}
+
+.x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{
+	cursor:pointer;
+}
+.ext-ie ul.x-tree-node-ct{
+    font-size:0;
+    line-height:0;
+}
+.x-tree-node{
+	color: black;
+	font: normal 11px arial, tahoma, helvetica, sans-serif;
+	white-space: nowrap;
+}
+.x-tree-node a, .x-dd-drag-ghost a{
+	text-decoration:none;
+	color:black;
+	-khtml-user-select:none;
+	-moz-user-select:none;
+    -kthml-user-focus:normal;
+    -moz-user-focus:normal;
+    -moz-outline: 0 none;
+    outline:0 none;
+}
+.x-tree-node a span, .x-dd-drag-ghost a span{
+	text-decoration:none;
+	color:black;
+	padding:1px 3px 1px 2px;
+}
+.x-tree-node .x-tree-node-disabled a span{
+	color:gray !important;
+}
+.x-tree-node .x-tree-node-disabled .x-tree-node-icon{
+	-moz-opacity: 0.5;
+   opacity:.5;
+   filter: alpha(opacity=50);
+}
+.x-tree-node .x-tree-node-inline-icon{
+	background:transparent;
+}
+.x-tree-node a:hover, .x-dd-drag-ghost a:hover{
+	text-decoration:none;
+}
+.x-tree-node div.x-tree-drag-insert-below{
+ 	 border-bottom:1px dotted #3366cc;
+}
+.x-tree-node div.x-tree-drag-insert-above{
+	 border-top:1px dotted #3366cc;
+}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{
+ 	 border-bottom:0 none;
+}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{
+	 border-top:0 none;
+}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{
+ 	 border-bottom:2px solid #3366cc;
+}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{
+	 border-top:2px solid #3366cc;
+}
+.x-tree-node .x-tree-drag-append a span{
+	 background:#dddddd;
+	 border:1px dotted gray;
+}
+.x-tree-node .x-tree-selected a span{
+	background:#3366cc;
+	color:white;
+}
+.x-dd-drag-ghost .x-tree-node-indent, .x-dd-drag-ghost .x-tree-ec-icon{
+	display:none !important;
+}
+.x-tree-drop-ok-append .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/tree/drop-add.gif);
+}
+.x-tree-drop-ok-above .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/tree/drop-over.gif);
+}
+.x-tree-drop-ok-below .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/tree/drop-under.gif);
+}
+.x-tree-drop-ok-between .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/tree/drop-between.gif);
+}
+
+.x-tip{
+	position: absolute;
+	top: 0;
+    left:0;
+    visibility: hidden;
+	z-index: 20000;
+    border:0 none;
+}
+.x-tip .x-tip-close{
+	background-image: url(/static/images/extjs/default/qtip/close.gif);
+	height: 15px;
+	float:right;
+	width: 15px;
+    margin:0 0 2px 2px;
+    cursor:pointer;
+    display:none;
+}
+.x-tip .x-tip-top {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat 0 -12px;
+	height:6px;
+    overflow:hidden;
+}
+.x-tip .x-tip-top-left {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat 0 0;
+	padding-left:6px;
+    zoom:1;
+}
+.x-tip .x-tip-top-right {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat right 0;
+	padding-right:6px;
+    zoom:1;
+}
+.x-tip .x-tip-ft {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat 0 -18px;
+	height:6px;
+    overflow:hidden;
+}
+.x-tip .x-tip-ft-left {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat 0 -6px;
+	padding-left:6px;
+    zoom:1;
+}
+.x-tip .x-tip-ft-right {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat right -6px;
+	padding-right:6px;
+    zoom:1;
+}
+.x-tip .x-tip-bd {
+    border:0 none;
+    font: normal 11px tahoma,arial,helvetica,sans-serif;
+}
+.x-tip .x-tip-bd-left {
+	background: #fff url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat 0 -24px;
+	padding-left:6px;
+    zoom:1;
+}
+.x-tip .x-tip-bd-right {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat right -24px;
+	padding-right:6px;
+    zoom:1;
+}
+
+.x-tip h3 {
+    font: bold 12px tahoma,arial,helvetica,sans-serif;
+    margin:0;
+    padding:2px 2px;
+    color:#222;
+}
+.x-tip .x-tip-bd-inner {
+    margin:0 !important;
+    line-height:14px;
+    color:#222;
+    padding:0;
+    float:left;
+}
+
+
+.x-form-invalid-tip {
+}
+
+.x-form-invalid-tip .x-tip-top {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-top-left {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-top-right {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-ft {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-ft-left {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-ft-right {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-bd-left {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-bd-right {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-bd .x-tip-bd-inner {
+    padding-left:24px;
+    background:transparent url(/static/images/extjs/default/form/exclamation.gif) no-repeat 2px 2px;
+}
+.x-form-invalid-tip .x-tip-bd-inner {
+    padding:2px;
+}
+.x-date-picker {
+    border: 1px solid #1b376c;
+    border-top:0 none;
+    background:#fff;
+}
+.x-date-picker a {
+    -moz-outline:0 none;
+    outline:0 none;
+}
+.x-date-inner, .x-date-inner td, .x-date-inner th{
+    border-collapse:separate;
+}
+.x-date-middle,.x-date-left,.x-date-right {
+	background: url(/static/images/extjs/default/basic-dialog/hd-sprite.gif) repeat-x 0 -83px;
+	color:#FFF;
+	font:bold 11px "sans serif", tahoma, verdana, helvetica;
+	overflow:hidden;
+}
+
+.x-date-middle .x-btn-left,.x-date-middle .x-btn-center,.x-date-middle .x-btn-right{
+	background:transparent !important;
+    vertical-align:middle;
+}
+.x-date-middle .x-btn .x-btn-text {
+    color:#fff;
+}
+.x-date-middle .x-btn-with-menu  .x-btn-center em {
+    background:transparent url(/static/images/extjs/default/toolbar/btn-arrow-light.gif) no-repeat right 0;
+}
+.x-date-right, .x-date-left {
+    width:18px;
+}
+.x-date-right{
+    text-align:right;
+}
+.x-date-middle {
+    padding-top:2px;padding-bottom:2px;
+}
+.x-date-right a, .x-date-left a{
+    display:block;
+    width:16px;
+	height:16px;
+	background-position: center;
+	background-repeat: no-repeat;
+	cursor:pointer;
+    -moz-opacity: 0.6;
+    opacity:.6;
+    filter: alpha(opacity=60);
+}
+.x-date-right a:hover, .x-date-left a:hover{
+    -moz-opacity: 1;
+    opacity:1;
+    filter: alpha(opacity=100);
+}
+.x-date-right a {
+    background-image: url(/static/images/extjs/default/shared/right-btn.gif);
+    margin-right:2px;
+}
+.x-date-left a{
+	background-image: url(/static/images/extjs/default/shared/left-btn.gif);
+    margin-left:2px;
+}
+table.x-date-inner {
+    width:100%;
+    table-layout:fixed;
+}
+.x-date-inner th {
+    width:25px;
+}
+.x-date-inner th {
+    background: #c3daf9;
+    text-align:right !important;
+	border-bottom: 1px solid #a3bad9;
+    font:normal 10px arial, helvetica,tahoma,sans-serif;
+	color:#233d6d;
+	cursor:default;
+    padding:0;
+    border-collapse:separate;
+}
+.x-date-inner th span {
+    display:block;
+    padding:2px;
+    padding-right:7px;
+}
+.x-date-inner td {
+    border: 1px solid #fff;
+	text-align:right;
+    padding:0;
+}
+.x-date-inner a {
+    padding:2px 5px;
+    display:block;
+    font:normal 11px arial, helvetica,tahoma,sans-serif;
+	text-decoration:none;
+    color:black;
+    text-align:right;
+    zoom:1;
+}
+.x-date-inner .x-date-active{
+	cursor:pointer;
+	color:black;
+}
+.x-date-inner .x-date-selected a{
+	background: #ddecfe;
+	border: 1px solid #a3bad9;
+    padding:1px 4px;
+}
+.x-date-inner .x-date-today a{
+	border: 1px solid darkred;
+    padding:1px 4px;
+}
+.x-date-inner .x-date-selected span{
+    font-weight:bold;
+}
+.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a {
+	color:#aaaaaa;
+}
+.x-date-bottom {
+    padding:4px;
+    border-top: 1px solid #a3bad9;
+    background: #c3daf9;
+}
+
+.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{
+    text-decoration:none;
+    color:black;
+    background: #ddecfe;
+}
+
+.x-date-inner .x-date-disabled a {
+	cursor:default;
+	background:#eeeeee;
+	color:#bbbbbb;
+}
+.x-date-mmenu{
+    background:#eeeeee !important;
+}
+.x-date-mmenu .x-menu-item {
+	font-size:10px;
+	padding:1px 24px 1px 4px;
+	white-space: nowrap;
+	color:#000;
+}
+.x-date-mmenu .x-menu-item .x-menu-item-icon {
+    width:10px;height:10px;margin-right:5px;
+    background-position:center -4px !important;
+}
+.x-menu {
+	border:1px solid;
+    border-color: #a3bad9 #8BB8F3 #8BB8F3 #a3bad9;
+    z-index: 15000;
+	background: #fff url(/static/images/extjs/default/menu/menu.gif) repeat-y;
+}
+.ext-ie .x-menu {
+    zoom:1;
+    overflow:hidden;
+}
+.x-menu-list{
+    border:1px solid #fff;
+}
+.x-menu li{
+	line-height:100%;
+}
+.x-menu li.x-menu-sep-li{
+	line-height:1px;
+}
+.x-menu-list-item{
+	font:normal 11px "Segoe UI",tahoma,"Lucida Sans Unicode",arial, sans-serif;
+    white-space: nowrap;
+    -moz-user-select: none;
+	-khtml-user-select: none;
+	display:block;
+	padding:1px;
+}
+.x-menu-item-arrow{
+	background:transparent url(/static/images/extjs/default/menu/menu-parent.gif) no-repeat right;
+}
+.x-menu-sep {
+	display:block;
+	font-size:1px;
+	background:#c3daf9;
+	margin: 3px 3px 3px 32px;
+    height:1px;
+}
+.x-menu-focus {
+	position:absolute;
+	left:0;
+	top:-5px;
+	width:0;
+	height:0;
+    line-height:1px;
+}
+.x-menu-item {
+	display:block;
+	line-height:14px;
+	padding:3px 21px 3px 3px;
+	white-space: nowrap;
+	text-decoration:none;
+	color:#233d6d;
+	-moz-outline: 0 none;
+	outline: 0 none;
+	cursor:pointer;
+}
+.x-menu-item-active {
+	color:#233d6d;
+	background:#c3daf9;
+	border:1px solid #8BB8F3;
+	padding:0;
+}
+.x-menu-item-icon {
+	border: 0 none;
+	height: 16px;
+	padding: 0;
+	vertical-align: middle;
+	width: 16px;
+	margin: 0 11px 0 0;
+    background-position:center;
+}
+
+.x-menu-check-item .x-menu-item-icon{
+	background: transparent url(/static/images/extjs/default/menu/unchecked.gif) no-repeat center;
+}
+
+.x-menu-item-checked .x-menu-item-icon{
+	background-image:url(/static/images/extjs/default/menu/checked.gif);
+}
+.x-menu-group-item .x-menu-item-icon{
+	background: transparent;
+}
+
+.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{
+    background: transparent url(/static/images/extjs/default/menu/group-checked.gif) no-repeat center;
+}
+
+.x-menu-plain {
+	background:#fff;
+}
+.x-menu-date-item{
+	padding:0;
+}
+
+.x-menu .x-color-palette, .x-menu .x-date-picker{
+    margin-left:32px;
+	margin-right:4px;
+}
+.x-menu .x-date-picker{
+    border:1px solid #a3bad9;
+    margin-top:2px;
+    margin-bottom:2px;
+}
+.x-menu-plain .x-color-palette, .x-menu-plain .x-date-picker{
+	margin:0;
+    border:0 none;
+}
+
+
+
+.x-box-tl {
+	background: transparent url(/static/images/extjs/default/box/corners.gif) no-repeat 0 0;
+    zoom:1;
+}
+
+.x-box-tc {
+	height: 8px;
+	background: transparent url(/static/images/extjs/default/box/tb.gif) repeat-x 0 0;
+	overflow: hidden;
+}
+
+.x-box-tr {
+	background: transparent url(/static/images/extjs/default/box/corners.gif) no-repeat right -8px;
+}
+
+.x-box-ml {
+	background: transparent url(/static/images/extjs/default/box/l.gif) repeat-y 0;
+	padding-left: 4px;
+	overflow: hidden;
+    zoom:1;
+}
+
+.x-box-mc {
+	background: #eee url(/static/images/extjs/default/box/tb.gif) repeat-x 0 -16px;
+	padding: 4px 10px;
+	font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;
+	color: #393939;
+	font-size: 12px;
+}
+
+.x-box-mc h3 {
+	font-size: 14px;
+	font-weight: bold;
+	margin: 0 0 4 0;
+    zoom:1;
+}
+
+.x-box-mr {
+	background: transparent url(/static/images/extjs/default/box/r.gif) repeat-y right;
+	padding-right: 4px;
+	overflow: hidden;
+}
+
+.x-box-bl {
+	background: transparent url(/static/images/extjs/default/box/corners.gif) no-repeat 0 -16px;
+    zoom:1;
+}
+
+.x-box-bc {
+	background: transparent url(/static/images/extjs/default/box/tb.gif) repeat-x 0 -8px;
+	height: 8px;
+	overflow: hidden;
+}
+
+.x-box-br {
+	background: transparent url(/static/images/extjs/default/box/corners.gif) no-repeat right -24px;
+}
+
+.x-box-tl, .x-box-bl {
+	padding-left: 8px;
+	overflow: hidden;
+}
+
+.x-box-tr, .x-box-br {
+	padding-right: 8px;
+	overflow: hidden;
+}
+
+.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr {
+	background-image: url(/static/images/extjs/default/box/corners-blue.gif);
+}
+
+.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc {
+	background-image: url(/static/images/extjs/default/box/tb-blue.gif);
+}
+
+.x-box-blue .x-box-mc {
+	background-color: #c3daf9;
+}
+
+.x-box-blue .x-box-mc h3 {
+	color: #17385b;
+}
+
+.x-box-blue .x-box-ml {
+	background-image: url(/static/images/extjs/default/box/l-blue.gif);
+}
+
+.x-box-blue .x-box-mr {
+	background-image: url(/static/images/extjs/default/box/r-blue.gif);
+}
+#x-debug-browser .x-tree .x-tree-node a span {
+    color:#222297;
+    font-size:12px;
+    padding-top:2px;
+    font-family:"courier","courier new";
+    line-height:18px;
+}
+#x-debug-browser .x-tree a i {
+    color:#FF4545;
+    font-style:normal;
+}
+#x-debug-browser .x-tree a em {
+    color:#999;
+}
+#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span{
+    background:#c3daf9;
+}
+#x-debug-browser pre, .x-debug-browser pre xmp {
+    font:normal 11px tahoma, arial, helvetica, sans-serif !important;
+    white-space: -moz-pre-wrap;
+    white-space: -pre-wrap;
+    white-space: -o-pre-wrap;
+    word-wrap: break-word;
+}
+#x-debug-browser pre {
+    display:block;
+    padding:5px !important;
+    border-bottom:1px solid #eeeeee !important;
+}
+#x-debug-browser pre xmp {
+    padding:0 !important;
+    margin:0 !important;
+}
+#x-debug-console .x-layout-panel-center, #x-debug-inspector .x-layout-panel-center {
+      border-right:1px solid #98c0f4;
+}
+#x-debug-console textarea {
+    border: 0 none;
+    font-size:12px;
+    font-family:"courier","courier new";
+    padding-top:4px;
+    padding-left:4px;
+}
+.x-debug-frame {
+    background:#eeeeee;
+    border:1px dashed #aaaaaa;
+}
+.x-combo-list {
+    border:1px solid #98c0f4;
+    background:#ddecfe;
+    zoom:1;
+    overflow:hidden;
+}
+.x-combo-list-inner {
+    overflow:auto;
+    background:white;
+    position:relative; 
+}
+.x-combo-list-hd {
+    font:bold 11px tahoma, arial, helvetica, sans-serif;
+    color:#15428b;
+    background-image: url(/static/images/extjs/default/layout/panel-title-light-bg.gif);
+    border-bottom:1px solid #98c0f4;
+    padding:3px;
+}
+.x-resizable-pinned .x-combo-list-inner {
+    border-bottom:1px solid #98c0f4;
+}
+.x-combo-list-item {
+    font:normal 12px tahoma, arial, helvetica, sans-serif;
+    padding:2px;
+    border:1px solid #fff;
+    zoom:1;
+    white-space: nowrap;
+    overflow:hidden;
+    text-overflow: ellipsis;
+}
+.x-combo-list .x-combo-selected{
+	background-color: #c3daf9 !important;
+    cursor:pointer;
+    border:1px solid #336699;
+}
+.x-combo-noedit{
+    cursor:pointer;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/form.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/form.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,337 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+/* all fields */
+.x-form-field{
+    margin: 0 0 0 0;
+    font:normal 12px tahoma, arial, helvetica, sans-serif;
+}
+
+/* ---- text fields ---- */
+.x-form-text, textarea.x-form-field{
+    padding: 1px 3px;
+    background:#fff url(/static/images/extjs/default/form/text-bg.gif) repeat-x 0 0;
+    border: 1px solid #B5B8C8;
+}
+.x-form-text {
+    height:22px;
+    line-height:18px;
+    vertical-align:middle;
+}
+.ext-ie .x-form-text {
+    margin-top:-1px; /* ie bogus margin bug */
+    margin-bottom:-1px;
+    height:22px; /* ie quirks */
+    line-height:18px;
+}
+.ext-strict .x-form-text {
+    height:18px;
+}
+.ext-safari .x-form-text {
+    height:20px; /* safari always same size */
+}
+.ext-gecko .x-form-text {
+    padding-top:2px; /* FF won't center the text vertically */
+    padding-bottom:0;
+}
+/* select boxes */
+
+.x-form-select-one {
+    height:20px;
+    line-height:18px;
+    vertical-align:middle;
+    background-color:#fff; /* opera */
+    border: 1px solid #B5B8C8;
+}
+
+/* multi select boxes */
+
+/* --- TODO --- */
+
+/* checkboxes */
+
+/* --- TODO --- */
+
+/* radios */
+
+/* --- TODO --- */
+
+
+/* wrapped fields and triggers */
+
+.x-form-field-wrap {
+    position:relative;
+    zoom:1;
+    white-space: nowrap;
+}
+
+.x-editor .x-form-check-wrap {
+    background:#fff;
+}
+.x-form-field-wrap .x-form-trigger{
+    width:17px;
+    height:21px;
+    border:0;
+    background:transparent url(/static/images/extjs/default/form/trigger.gif) no-repeat 0 0;
+    cursor:pointer;
+    border-bottom: 1px solid #B5B8C8;
+    position:absolute;
+    top:0;
+}
+.ext-safari .x-form-field-wrap .x-form-trigger{
+    height:19px; /* safari doesn't allow height adjustments to the fields, so adjust trigger */
+}
+.x-form-field-wrap .x-form-trigger-over{
+    background-position:-17px 0;
+}
+.x-form-field-wrap .x-form-trigger-click{
+    background-position:-34px 0;
+}
+.x-item-disabled .x-form-trigger-over{
+    background-position:0 0 !important;
+}
+.x-item-disabled .x-form-trigger-click{
+    background-position:0 0 !important;
+}
+.x-form-field-wrap .x-form-date-trigger{
+    background:transparent url(/static/images/extjs/default/form/date-trigger.gif) no-repeat 0 0;
+    cursor:pointer;
+}
+.ext-safari .x-form-field-wrap .x-form-date-trigger{
+    right:0;
+}
+
+/* field focus style */
+.x-form-focus{
+	border: 1px solid #7eadd9;
+}
+
+/* invalid fields */
+.x-form-invalid{
+	background:#fff url(/static/images/extjs/default/grid/invalid_line.gif) repeat-x bottom;
+	border: 1px solid #dd7870;
+}
+.ext-safari .x-form-invalid{
+	background-color:#ffeeee;
+	border: 1px solid #ff7870;
+}
+
+/* editors */
+
+.x-editor {
+    visibility:hidden;
+    padding:0;
+    margin:0;
+}
+.x-form-check-wrap {
+    line-height:18px;
+}
+.ext-ie .x-form-check-wrap input {
+    width:15px;
+    height:15px;
+}
+.x-editor .x-form-check-wrap {
+    padding:3px;
+}
+.x-editor .x-form-checkbox {
+    height:13px;
+    border: 0 none;
+}
+/* If you override the default field font above, you would need to change this font as well */
+.x-form-grow-sizer {
+	font:normal 12px tahoma, arial, helvetica, sans-serif;
+    left: -10000px;
+	padding: 8px 3px;
+    position: absolute;
+    visibility:hidden;
+    top: -10000px;
+	white-space: pre-wrap;
+    white-space: -moz-pre-wrap;
+    white-space: -pre-wrap;
+    white-space: -o-pre-wrap;
+    word-wrap: break-word;
+    zoom:1;
+}
+
+/* This CSS is not final and is subject to change - jvs 03/07/07 */
+
+.x-form-item {
+    font:normal 12px tahoma, arial, helvetica, sans-serif;
+    display:block;
+    margin-bottom:4px;
+}
+
+.x-form-item label {
+    display:block;
+    float:left;
+    width:100px;
+    padding:3px;
+    padding-left:0;
+    clear:left;
+}
+
+.x-form-element {
+    padding-left:105px;
+    position:relative;
+}
+
+.x-form-invalid-msg {
+    color:#ee0000;
+    padding:2px;
+    padding-left:18px;
+    font:normal 11px tahoma, arial, helvetica, sans-serif;
+    background: transparent url(/static/images/extjs/default/shared/warning.gif) no-repeat 0 2px;
+    line-height:16px;
+    width:200px;
+}
+
+.x-form-label-right label {
+   text-align:right;
+}
+
+.x-form-label-top .x-form-item label {
+    width:auto;
+    float:none;
+    clear:none;
+    display:inline;
+    margin-bottom:4px;
+}
+.x-form-label-top .x-form-element {
+    padding-left:0;
+    padding-top:4px;
+}
+.x-form-label-top .x-form-item {
+    padding-bottom:4px;
+}
+.x-form fieldset {
+    border:1px solid #B5B8C8;
+    padding:10px 10px 5px 10px;
+    margin-bottom:10px;
+}
+.x-form fieldset legend {
+    font:bold 11px tahoma, arial, helvetica, sans-serif;
+    color:#15428b;
+}
+.ext-ie .x-form fieldset legend {
+    margin-bottom:10px;
+}
+.x-form-empty-field {
+    color:gray;
+}
+/* Editor small font for grid, toolbar and tree */
+.x-small-editor .x-form-field {
+    font:normal 11px arial, tahoma, helvetica, sans-serif;
+}
+.x-small-editor .x-form-text {
+    height:20px;
+    line-height:16px;
+    vertical-align:middle;
+}
+.ext-ie .x-small-editor .x-form-text {
+    margin-top:-1px !important; /* ie bogus margin bug */
+    margin-bottom:-1px !important;
+    height:20px !important; /* ie quirks */
+    line-height:16px !important;
+}
+.ext-strict .x-small-editor .x-form-text {
+    height:16px !important;
+}
+.ext-safari .x-small-editor .x-form-field {
+    /* safari text field will not size so needs bigger font */
+    font:normal 12px arial, tahoma, helvetica, sans-serif;
+}
+.ext-ie .x-small-editor .x-form-text {
+    height:20px;
+    line-height:16px;
+}
+.ext-border-box .x-small-editor .x-form-text {
+    height:20px;
+}
+
+.x-small-editor .x-form-select-one {
+    height:20px;
+    line-height:16px;
+    vertical-align:middle;
+}
+.x-small-editor .x-form-num-field {
+    text-align:right;
+}
+.x-small-editor .x-form-field-wrap .x-form-trigger{
+    height:19px;
+}
+
+
+.x-form-clear {
+    clear:both;
+    height:0;
+    overflow:hidden;
+    line-height:0;
+    font-size:0;
+}
+.x-form-clear-left {
+    clear:left;
+    height:0;
+    overflow:hidden;
+    line-height:0;
+    font-size:0;
+}
+
+.x-form-cb-label {
+    width:'auto' !important;
+    float:none !important;
+    clear:none !important;
+    display:inline !important;
+    margin-left:4px;
+}
+
+.x-form-column {
+    float:left;
+    padding:0;
+    margin:0;
+    width:48%;
+    overflow:hidden;
+    zoom:1;
+}
+
+/* buttons */
+.x-form .x-form-btns-ct .x-btn{
+	float:right;
+	clear:none;
+}
+.x-form .x-form-btns-ct .x-form-btns td {
+	border:0;
+	padding:0;
+}
+.x-form .x-form-btns-ct .x-form-btns-right table{
+	float:right;
+	clear:none;
+}
+.x-form .x-form-btns-ct .x-form-btns-left table{
+	float:left;
+	clear:none;
+}
+.x-form .x-form-btns-ct .x-form-btns-center{
+	text-align:center; /*ie*/
+}
+.x-form .x-form-btns-ct .x-form-btns-center table{
+	margin:0 auto; /*everyone else*/
+}
+.x-form .x-form-btns-ct table td.x-form-btn-td{
+	padding:3px;
+}
+
+.x-form-invalid-icon {
+    width:16px;
+    height:18px;
+    visibility:hidden;
+    position:absolute;
+    left:0;
+    top:0;
+    display:block;
+    background:transparent url(/static/images/extjs/default/form/exclamation.gif) no-repeat 0 2px;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/grid.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/grid.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,295 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+/* Grid2 styles */
+.x-grid {
+	position:relative;
+	overflow:hidden;
+    background:#fff;
+}
+.x-grid-scroller {
+	overflow:auto;
+}
+.x-grid-viewport, .x-grid-locked{
+	position:absolute;
+	left:0; top: 0;
+	z-index:2;
+	overflow:hidden;
+	visibility:hidden;
+}
+.x-grid-cell-inner, .x-grid-hd-inner{
+	overflow:hidden;
+	-o-text-overflow: ellipsis;
+	text-overflow: ellipsis;
+}
+.x-grid-hd-row td, .x-grid-row td{
+	font:normal 11px arial, tahoma, helvetica, sans-serif;
+    line-height:13px;
+    white-space: nowrap;
+	vertical-align: top;
+	-moz-outline: none;
+	-moz-user-focus: normal;
+}
+.x-grid-hd-row td {
+    line-height:14px;
+}
+.x-grid-col {
+	border-right: 1px solid #ebebeb;
+	border-bottom: 1px solid #ebebeb;
+}
+/* Locked styles */
+
+.x-grid-locked .x-grid-body td {
+	background: #FBFDFF;
+	border-right: 1px solid #deecfd;
+	border-bottom: 1px solid #deecfd !important;
+}
+.x-grid-locked .x-grid-body td .x-grid-cell-inner {
+	border-top:0 none;
+}
+.x-grid-locked .x-grid-row-alt td{
+	background: #F5FAFE;
+}
+
+.x-grid-locked .x-grid-header table{
+    border-right:1px solid transparent;
+}
+.x-grid-locked .x-grid-body table{
+    border-right:1px solid #c3daf9;
+}
+
+.x-grid-locked .x-grid-body td .x-grid-cell-inner {
+	
+}
+.x-grid-row {
+	cursor: default;
+}
+.x-grid-row-alt{
+	background:#f1f1f1;
+}
+.x-grid-row-over td{
+	background:#d9e8fb;
+}
+.x-grid-resize-proxy {
+	width:3px;
+	background:#cccccc;
+	cursor: e-resize;
+	cursor: col-resize;
+	position:absolute;
+	top:0;
+	height:100px;
+	overflow:hidden;
+	visibility:hidden;
+	border:0 none;
+	z-index:7;
+}
+.x-grid-focus {
+	position:absolute;
+	top:0;
+	-moz-outline:0 none;
+    outline:0 none;
+    -moz-user-select: normal;
+    -khtml-user-select: normal;
+}
+
+/* header styles */
+.x-grid-header{
+	background: #ebeadb url(/static/images/extjs/default/grid/grid-hrow.gif) repeat-x;
+	overflow:hidden;
+	position:relative;
+	cursor:default;
+	width:100%;
+}
+.x-grid-hd-row{
+	height:22px;
+}
+.x-grid-hd {
+	padding-right:1px;
+}
+.x-grid-hd-over .x-grid-hd-inner {
+	border-bottom: 1px solid #c3daf9;
+}
+.x-grid-hd-over .x-grid-hd-text {
+	background: #fafafa url(/static/images/extjs/default/grid/grid-hrow.gif) repeat-x 0 1px;
+	padding-bottom:1px;
+    border-bottom: 1px solid #b3cae9;
+}
+.x-grid-sort-icon{
+	background-repeat: no-repeat;
+	display: none;
+	height: 4px;
+	width: 13px;
+	margin-left:3px;
+	vertical-align: middle;
+}
+.x-grid-header .sort-asc .x-grid-sort-icon {
+	background-image: url(/static/images/extjs/default/grid/sort_asc.gif);
+	display: inline;
+}
+.x-grid-header .sort-desc .x-grid-sort-icon {
+	background-image: url(/static/images/extjs/default/grid/sort_desc.gif);
+	display: inline;
+}
+
+/* Body Styles */
+.x-grid-body {
+	overflow:hidden;
+	position:relative;
+	width:100%;
+	zoom:1;
+}
+
+.x-grid-cell-text,.x-grid-hd-text {
+	display: block;
+	padding: 3px 5px 3px 5px;
+	-moz-user-select: none;
+	-khtml-user-select: none;
+	color:black;
+}
+.x-grid-hd-text {
+    padding-top:4px;
+}
+.x-grid-split {
+	background-image: url(/static/images/extjs/default/grid/grid-split.gif);
+	background-position: center;
+	background-repeat: no-repeat;
+	cursor: e-resize;
+	cursor: col-resize;
+	display: block;
+	font-size: 1px;
+	height: 16px;
+	overflow: hidden;
+	position: absolute;
+	top: 2px;
+	width: 6px;
+	z-index: 3;
+}
+
+.x-grid-hd-text {
+	color:#15428b;
+}
+/* Column Reorder DD */
+.x-dd-drag-proxy .x-grid-hd-inner{
+	background: #ebeadb url(/static/images/extjs/default/grid/grid-hrow.gif) repeat-x;
+	height:22px;
+	width:120px;
+}
+
+.col-move-top, .col-move-bottom{
+	width:9px;
+	height:9px;
+	position:absolute;
+	top:0;
+	line-height:1px;
+	font-size:1px;
+	overflow:hidden;
+	visibility:hidden;
+	z-index:20000;
+}
+.col-move-top{
+	background:transparent url(/static/images/extjs/default/grid/col-move-top.gif) no-repeat left top;
+}
+.col-move-bottom{
+	background:transparent url(/static/images/extjs/default/grid/col-move-bottom.gif) no-repeat left top;
+}
+
+/* Selection Styles */
+.x-grid-row-selected td, .x-grid-locked .x-grid-row-selected td{
+	background-color: #316ac5 !important;
+	color: white;
+}
+.x-grid-row-selected span, .x-grid-row-selected b, .x-grid-row-selected div, .x-grid-row-selected strong, .x-grid-row-selected i{
+	color: white !important;
+}
+.x-grid-row-selected .x-grid-cell-text{
+	color: white;
+}
+.x-grid-cell-selected{
+	background-color: #316ac5 !important;
+	color: white;
+}
+.x-grid-cell-selected span{
+	color: white !important;
+}
+.x-grid-cell-selected .x-grid-cell-text{
+	color: white;
+}
+
+.x-grid-locked td.x-grid-row-marker, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker{
+    background: #ebeadb url(/static/images/extjs/default/grid/grid-hrow.gif) repeat-x 0 bottom !important;
+    vertical-align:middle !important;
+    color:black;
+    padding:0;
+    border-top:1px solid white;
+    border-bottom:none !important;
+    border-right:1px solid #6fa0df !important;
+    text-align:center;
+}
+.x-grid-locked td.x-grid-row-marker div, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker div{
+    padding:0 4px;
+    color:#15428b !important;
+    text-align:center;
+}
+
+/* dirty cells */
+.x-grid-dirty-cell {
+    background: transparent url(/static/images/extjs/default/grid/dirty.gif) no-repeat 0 0;
+}
+
+/* Grid Toolbars */
+.x-grid-topbar, .x-grid-bottombar{
+	font:normal 11px arial, tahoma, helvetica, sans-serif;
+    overflow:hidden;
+	display:none;
+	zoom:1;
+    position:relative;
+}
+.x-grid-topbar .x-toolbar{
+	border-right:0 none;
+}
+.x-grid-bottombar .x-toolbar{
+	border-right:0 none;
+	border-bottom:0 none;
+	border-top:1px solid #a9bfd3;
+}
+/* Props Grid Styles */
+.x-props-grid .x-grid-cell-selected .x-grid-cell-text{
+	 background-color: #316ac5 !important;
+}
+.x-props-grid .x-grid-col-value .x-grid-cell-text{
+	background-color: white;
+}
+.x-props-grid .x-grid-col-name{
+	 background-color: #c3daf9;
+}
+.x-props-grid .x-grid-col-name .x-grid-cell-text{
+	background-color: white;
+    margin-left:10px;
+}
+.x-props-grid .x-grid-split-value {
+    visibility:hidden;
+}
+
+/* header menu */
+.xg-hmenu-sort-asc .x-menu-item-icon{
+	background-image: url(/static/images/extjs/default/grid/hmenu-asc.gif);
+}
+.xg-hmenu-sort-desc .x-menu-item-icon{
+	background-image: url(/static/images/extjs/default/grid/hmenu-desc.gif);
+}
+.xg-hmenu-lock .x-menu-item-icon{
+	background-image: url(/static/images/extjs/default/grid/hmenu-lock.gif);
+}
+.xg-hmenu-unlock .x-menu-item-icon{
+	background-image: url(/static/images/extjs/default/grid/hmenu-unlock.gif);
+}
+
+/* dd */
+.x-dd-drag-ghost .x-grid-dd-wrap {
+    padding:1px 3px 3px 1px;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/layout.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/layout.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,252 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-layout-container{
+    width:100%;
+    height:100%;
+    overflow:hidden;
+	 background-color:#c3daf9;
+}
+.x-layout-container .x-layout-tabs-body{
+	border:0 none;
+}
+.x-layout-collapsed{
+    position:absolute;
+    left:-10000px;
+    top:-10000px;
+    visibility:hidden;
+    background-color:#c3daf9;
+    width:20px;
+    height:20px;
+    overflow:hidden;
+	border:1px solid #98c0f4;
+	z-index:20;
+}
+.ext-border-box .x-layout-collapsed{
+    width:22px;
+    height:22px;
+}
+.x-layout-collapsed-over{
+    cursor:pointer;
+	 background-color:#d9e8fb;
+}
+.x-layout-collapsed-west .x-layout-collapsed-tools, .x-layout-collapsed-east .x-layout-collapsed-tools{
+	position:absolute;
+    top:0;
+    left:0;
+    width:20px;
+    height:20px;
+}
+.x-layout-collapsed-north .x-layout-collapsed-tools, .x-layout-collapsed-south .x-layout-collapsed-tools{
+	position:absolute;
+    top:0;
+    right:0;
+    width:20px;
+    height:20px;
+}
+.x-layout-collapsed .x-layout-tools-button{
+    margin:0;
+}
+.x-layout-collapsed .x-layout-tools-button-inner{
+    width:16px;
+    height:16px;
+}
+.x-layout-inactive-content{
+    position:absolute;
+    left:-10000px;
+    top:-10000px;
+    visibility:hidden;
+}
+.x-layout-active-content{
+    visibility:visible;
+}
+.x-layout-panel{
+    position:absolute;border:1px solid #98c0f4;overflow:hidden;background-color:white;
+}
+.x-layout-panel-east, .x-layout-panel-west {
+    z-index:10;
+}
+.x-layout-panel-north, .x-layout-panel-south {
+    z-index:11;
+}
+.x-layout-collapsed-north, .x-layout-collapsed-south, .x-layout-collapsed-east, .x-layout-collapsed-west {
+    z-index:12;
+}
+.x-layout-panel-body{
+    overflow:hidden;
+}
+.x-layout-grid-wrapper{
+
+}
+.x-layout-split{
+    position:absolute;
+    height:5px;
+    width:5px;
+    line-height:1px;
+    font-size:1px;
+    z-index:3;
+    background-color:#c3daf9;
+}
+.x-layout-panel-hd{
+    background-image: url(/static/images/extjs/default/layout/panel-title-light-bg.gif);
+    color: black;
+    border-bottom:1px solid #98c0f4;
+    position:relative;
+}
+.x-layout-panel-hd-text{
+    font:normal 11px tahoma, verdana, helvetica;
+    padding: 4px;
+    padding-left: 4px;
+    display:block;
+	 white-space:nowrap;
+}
+.x-layout-panel-hd-tools{
+    position:absolute;
+    right:0;
+    top:0;
+    text-align:right;
+    padding-top:2px;
+    padding-right:2px;
+    width:60px;
+}
+.x-layout-tools-button{
+    z-index:6;
+    padding:2px;
+    cursor:pointer;
+    float:right;
+}
+.x-layout-tools-button-over{
+    padding:1px;
+    border:1px solid #98c0f4;
+    background-color:white;
+}
+.x-layout-tools-button-inner{
+    height:12px;
+    width:12px;
+    line-height:1px;
+    font-size:1px;
+    background-repeat:no-repeat;
+    background-position:center;
+}
+.x-layout-close{
+    background-image:url(/static/images/extjs/default/layout/panel-close.gif);
+}
+.x-layout-stick{
+    background-image:url(/static/images/extjs/default/layout/stick.gif);
+}
+.x-layout-collapse-west,.x-layout-expand-east{
+    background-image:url(/static/images/extjs/default/layout/collapse.gif);
+}
+.x-layout-expand-west,.x-layout-collapse-east{
+    background-image:url(/static/images/extjs/default/layout/expand.gif);
+}
+.x-layout-collapse-north,.x-layout-expand-south{
+    background-image:url(/static/images/extjs/default/layout/ns-collapse.gif);
+}
+.x-layout-expand-north,.x-layout-collapse-south{
+    background-image:url(/static/images/extjs/default/layout/ns-expand.gif);
+}
+.x-layout-split-h{
+    background-image:url(/static/images/extjs/default/sizer/e-handle.gif);
+    background-position: left;
+}
+.x-layout-split-v{
+    background-image:url(/static/images/extjs/default/sizer/s-handle.gif);
+    background-position: top;
+}
+.x-layout-panel .x-tabs-wrap{
+    background:url(/static/images/extjs/default/layout/gradient-bg.gif);
+}
+.x-layout-panel .x-tabs-body {
+    background-color:white;
+    overflow:auto;height:100%;
+}
+.x-layout-component-panel, .x-layout-nested-layout {
+	position:relative;
+   padding:0;
+	overflow:hidden;
+	width:200px;
+	height:200px;
+}
+.x-layout-nested-layout .x-layout-panel {
+	  border:0 none;
+}
+.x-layout-nested-layout .x-layout-panel-north {
+	  border-bottom:1px solid #98c0f4;
+}
+.x-layout-nested-layout .x-layout-panel-south {
+	  border-top:1px solid #98c0f4;
+}
+.x-layout-nested-layout .x-layout-panel-east {
+	  border-left:1px solid #98c0f4;
+}
+.x-layout-nested-layout .x-layout-panel-west {
+	  border-right:1px solid #98c0f4;
+}
+
+.x-layout-panel-dragover {
+	border: 2px solid #6593cf;
+}
+.x-layout-panel-proxy {
+	background-image: url(/static/images/extjs/default/layout/gradient-bg.gif);
+	background-color:#c3daf9;
+	border:1px dashed #6593cf;
+	z-index:10001;
+	overflow:hidden;
+	position:absolute;
+	left:0;top:0;
+}
+.x-layout-slider {
+	z-index:15;
+	overflow:hidden;
+	position:absolute;
+}
+
+.x-scroller-up, .x-scroller-down {
+	background-color:#c3daf9;
+	border: 1px solid #6593cf;
+	border-top-color: #fff;
+	border-left-color: #fff;
+	border-right:0 none;
+	cursor:pointer;
+	overflow:hidden;
+	line-height:16px;
+}
+.x-scroller-down {
+	border-bottom: 0 none;
+	border-top: 1px solid #6593cf;
+}
+.x-scroller-btn-over {
+	background-color: #d9e8f8;
+}
+.x-scroller-btn-click {
+	background-color: #AECEF7;
+}
+.x-scroller-btn-disabled {
+	cursor:default;
+	background-color: #c3daf9;
+	-moz-opacity: 0.3;
+   opacity:.30;
+   filter: alpha(opacity=30);
+}
+
+/* Reader Layout */
+
+.x-reader .x-layout-panel-north {
+    border:0 none;
+}
+.x-reader .x-layout-panel-center{
+    border:0 none;
+}
+.x-reader .x-layout-nested-layout .x-layout-panel-center{
+    border:1px solid #99bbe8;
+    border-top:0 none;
+}
+.x-reader .x-layout-nested-layout .x-layout-panel-south{
+    border:1px solid #99bbe8;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/menu.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/menu.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,115 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-menu {
+	border:1px solid;
+    border-color: #a3bad9 #8BB8F3 #8BB8F3 #a3bad9;
+    z-index: 15000;
+	background: #fff url(/static/images/extjs/default/menu/menu.gif) repeat-y;
+}
+.ext-ie .x-menu {
+    zoom:1;
+    overflow:hidden;
+}
+.x-menu-list{
+    border:1px solid #fff;
+}
+.x-menu li{
+	line-height:100%;
+}
+.x-menu li.x-menu-sep-li{
+	line-height:1px;
+}
+.x-menu-list-item{
+	font:normal 11px "Segoe UI",tahoma,"Lucida Sans Unicode",arial, sans-serif;
+    white-space: nowrap;
+    -moz-user-select: none;
+	-khtml-user-select: none;
+	display:block;
+	padding:1px;
+}
+.x-menu-item-arrow{
+	background:transparent url(/static/images/extjs/default/menu/menu-parent.gif) no-repeat right;
+}
+.x-menu-sep {
+	display:block;
+	font-size:1px;
+	background:#c3daf9;
+	margin: 3px 3px 3px 32px;
+    height:1px;
+}
+.x-menu-focus {
+	position:absolute;
+	left:0;
+	top:-5px;
+	width:0;
+	height:0;
+    line-height:1px;
+}
+.x-menu-item {
+	display:block;
+	line-height:14px;
+	padding:3px 21px 3px 3px;
+	white-space: nowrap;
+	text-decoration:none;
+	color:#233d6d;
+	-moz-outline: 0 none;
+	outline: 0 none;
+	cursor:pointer;
+}
+.x-menu-item-active {
+	color:#233d6d;
+	background:#c3daf9;
+	border:1px solid #8BB8F3;
+	padding:0;
+}
+.x-menu-item-icon {
+	border: 0 none;
+	height: 16px;
+	padding: 0;
+	vertical-align: middle;
+	width: 16px;
+	margin: 0 11px 0 0;
+    background-position:center;
+}
+
+.x-menu-check-item .x-menu-item-icon{
+	background: transparent url(/static/images/extjs/default/menu/unchecked.gif) no-repeat center;
+}
+
+.x-menu-item-checked .x-menu-item-icon{
+	background-image:url(/static/images/extjs/default/menu/checked.gif);
+}
+.x-menu-group-item .x-menu-item-icon{
+	background: transparent;
+}
+
+.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{
+    background: transparent url(/static/images/extjs/default/menu/group-checked.gif) no-repeat center;
+}
+
+.x-menu-plain {
+	background:#fff;
+}
+.x-menu-date-item{
+	padding:0;
+}
+
+.x-menu .x-color-palette, .x-menu .x-date-picker{
+    margin-left:32px;
+	margin-right:4px;
+}
+.x-menu .x-date-picker{
+    border:1px solid #a3bad9;
+    margin-top:2px;
+    margin-bottom:2px;
+}
+.x-menu-plain .x-color-palette, .x-menu-plain .x-date-picker{
+	margin:0;
+    border:0 none;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/qtips.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/qtips.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,119 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-tip{
+	position: absolute;
+	top: 0;
+    left:0;
+    visibility: hidden;
+	z-index: 20000;
+    border:0 none;
+}
+.x-tip .x-tip-close{
+	background-image: url(/static/images/extjs/default/qtip/close.gif);
+	height: 15px;
+	float:right;
+	width: 15px;
+    margin:0 0 2px 2px;
+    cursor:pointer;
+    display:none;
+}
+.x-tip .x-tip-top {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat 0 -12px;
+	height:6px;
+    overflow:hidden;
+}
+.x-tip .x-tip-top-left {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat 0 0;
+	padding-left:6px;
+    zoom:1;
+}
+.x-tip .x-tip-top-right {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat right 0;
+	padding-right:6px;
+    zoom:1;
+}
+.x-tip .x-tip-ft {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat 0 -18px;
+	height:6px;
+    overflow:hidden;
+}
+.x-tip .x-tip-ft-left {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat 0 -6px;
+	padding-left:6px;
+    zoom:1;
+}
+.x-tip .x-tip-ft-right {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat right -6px;
+	padding-right:6px;
+    zoom:1;
+}
+.x-tip .x-tip-bd {
+    border:0 none;
+    font: normal 11px tahoma,arial,helvetica,sans-serif;
+}
+.x-tip .x-tip-bd-left {
+	background: #fff url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat 0 -24px;
+	padding-left:6px;
+    zoom:1;
+}
+.x-tip .x-tip-bd-right {
+	background: transparent url(/static/images/extjs/default/qtip/tip-sprite.gif) no-repeat right -24px;
+	padding-right:6px;
+    zoom:1;
+}
+
+.x-tip h3 {
+    font: bold 12px tahoma,arial,helvetica,sans-serif;
+    margin:0;
+    padding:2px 2px;
+    color:#222;
+}
+.x-tip .x-tip-bd-inner {
+    margin:0 !important;
+    line-height:14px;
+    color:#222;
+    padding:0;
+    float:left;
+}
+
+
+.x-form-invalid-tip {
+}
+
+.x-form-invalid-tip .x-tip-top {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-top-left {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-top-right {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-ft {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-ft-left {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-ft-right {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-bd-left {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-bd-right {
+	background-image: url(/static/images/extjs/default/form/error-tip-corners.gif);
+}
+.x-form-invalid-tip .x-tip-bd .x-tip-bd-inner {
+    padding-left:24px;
+    background:transparent url(/static/images/extjs/default/form/exclamation.gif) no-repeat 2px 2px;
+}
+.x-form-invalid-tip .x-tip-bd-inner {
+    padding:2px;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/reset-min.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/reset-min.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,9 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.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

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/resizable.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/resizable.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,143 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-resizable-handle {
+    position:absolute;
+    z-index:100;
+    /* ie needs these */
+    font-size:1px;
+    line-height:6px;
+    overflow:hidden;
+	 background:white;
+	 filter:alpha(opacity=0);
+	 opacity:0;
+	 zoom:1;
+}
+.x-resizable-handle-east{
+    width:6px;
+    cursor:e-resize;
+    right:0;
+    top:0;
+    height:100%;
+}
+.ext-ie .x-resizable-handle-east {
+      margin-right:-1px; /*IE rounding error*/
+}
+.x-resizable-handle-south{
+    width:100%;
+    cursor:s-resize;
+    left:0;
+    bottom:0;
+    height:6px;
+}
+.ext-ie .x-resizable-handle-south {
+     margin-bottom:-1px; /*IE rounding error*/
+}
+.x-resizable-handle-west{
+    width:6px;
+    cursor:w-resize;
+    left:0;
+    top:0;
+    height:100%;
+}
+.x-resizable-handle-north{
+    width:100%;
+    cursor:n-resize;
+    left:0;
+    top:0;
+    height:6px;
+}
+.x-resizable-handle-southeast{
+    width:6px;
+    cursor:se-resize;
+    right:0;
+    bottom:0;
+    height:6px;
+    z-index:101;
+}
+.x-resizable-handle-northwest{
+    width:6px;
+    cursor:nw-resize;
+    left:0;
+    top:0;
+    height:6px;
+    z-index:101;
+}
+.x-resizable-handle-northeast{
+    width:6px;
+    cursor:ne-resize;
+    right:0;
+    top:0;
+    height:6px;
+    z-index:101;
+}
+.x-resizable-handle-southwest{
+    width:6px;
+    cursor:sw-resize;
+    left:0;
+    bottom:0;
+    height:6px;
+    z-index:101;
+}
+.x-resizable-over .x-resizable-handle, .x-resizable-pinned .x-resizable-handle{
+    filter:alpha(opacity=100);
+	 opacity:1;
+}
+.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
+    background:url(/static/images/extjs/default/sizer/e-handle.gif);
+	 background-position: left;
+}
+.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west{
+    background:url(/static/images/extjs/default/sizer/e-handle.gif);
+	 background-position: left;
+}
+.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
+    background:url(/static/images/extjs/default/sizer/s-handle.gif);
+    background-position: top;
+}
+.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north{
+    background:url(/static/images/extjs/default/sizer/s-handle.gif);
+    background-position: top;
+}
+.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
+    background:url(/static/images/extjs/default/sizer/se-handle.gif);
+    background-position: top left;
+}
+.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{
+    background:url(/static/images/extjs/default/sizer/nw-handle.gif);
+    background-position:bottom right;
+}
+.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{
+    background:url(/static/images/extjs/default/sizer/ne-handle.gif);
+    background-position: bottom left;
+}
+.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{
+    background:url(/static/images/extjs/default/sizer/sw-handle.gif);
+    background-position: top right;
+}
+.x-resizable-proxy{
+    border: 1px dashed #6593cf;
+    position:absolute;
+    overflow:hidden;
+    visibility:hidden;
+	 left:0;top:0;
+    z-index:50000;
+}
+.x-resizable-overlay{
+    width:100%;
+	 height:100%;
+	 display:none;
+	 position:absolute;
+	 left:0;
+	 top:0;
+	 background:white;
+	 z-index:200000;
+	 -moz-opacity: 0;
+    opacity:0;
+    filter: alpha(opacity=0);
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/tabs.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/tabs.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,134 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-tabs-wrap {
+	border-bottom:1px solid #6593cf;
+	padding-top:2px;
+}
+.x-tabs-strip-wrap{
+	width:100%;	
+}
+.x-tabs-wrap table{
+	position:relative;
+	top:0; left:0;
+}
+.x-tabs-strip td{
+	padding:0;
+	padding-left:2px;
+}
+.x-tabs-strip a, .x-tabs-strip span, .x-tabs-strip em {
+	display:block;
+}
+.x-tabs-strip a {
+	text-decoration:none !important;
+	-moz-outline: none;
+	outline: none;
+	cursor:pointer;
+}
+.x-tabs-strip .x-tabs-text {
+	font:bold 11px tahoma,arial,helvetica;
+	color:#666;
+	overflow:hidden;
+	white-space: nowrap;
+	cursor:pointer;
+	text-overflow: ellipsis;
+}
+.x-tabs-strip .on .x-tabs-text {
+	cursor:default;
+	color:#083772;
+}
+.x-tabs-strip .disabled .x-tabs-text {
+	cursor:default;
+	color:#aaaaaa;
+}
+.x-tabs-strip .x-tabs-inner {
+	 padding:4px 10px;	
+}
+
+.x-tabs-strip .on .x-tabs-right {
+	 background: url(/static/images/extjs/default/tabs/tab-sprite.gif) no-repeat right 0;
+}
+.x-tabs-strip .on .x-tabs-left {
+	 background: url(/static/images/extjs/default/tabs/tab-sprite.gif) no-repeat 0 -100px;
+}
+.x-tabs-strip .x-tabs-right {
+	 background: url(/static/images/extjs/default/tabs/tab-sprite.gif) no-repeat right -50px;
+}
+.x-tabs-strip .x-tabs-left {
+	 background: url(/static/images/extjs/default/tabs/tab-sprite.gif) no-repeat 0 -150px;
+}
+
+.x-tabs-strip  a {
+	position:relative;
+	top:1px; left:0;
+}
+.x-tabs-strip .on a {
+	position:relative;
+}
+.x-tabs-strip .on .x-tabs-inner {
+	padding-bottom:5px;
+}
+/** closable tabs */
+.x-tabs-strip .x-tabs-closable .x-tabs-inner{
+	padding-right:22px;
+	position:relative;
+}
+.x-tabs-strip .x-tabs-closable .close-icon{
+	line-height: 1px;
+	font-size:1px;
+	background-image:url(/static/images/extjs/default/layout/tab-close.gif);
+	display:block;
+	position:absolute;
+	right:5px;top:4px;
+	width:11px;height:11px;
+	cursor:pointer;
+}
+.x-tabs-strip .on .close-icon{
+	background-image:url(/static/images/extjs/default/layout/tab-close-on.gif);
+}
+.x-tabs-strip .x-tabs-closable .close-over{
+	background-image:url(/static/images/extjs/default/layout/tab-close-on.gif);
+}
+.x-tabs-body {
+    border:1px solid #6593cf;
+    border-top:0 none;
+}
+.x-tabs-bottom .x-tabs-wrap {
+	border-top:1px solid #6593cf;
+	border-bottom:0 none;
+	padding-top:0;
+	padding-bottom:2px;
+}
+.x-tabs-bottom .x-tabs-strip .x-tabs-right {
+	 background: url(/static/images/extjs/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
+}
+.x-tabs-bottom .x-tabs-strip .x-tabs-left {
+	 background: url(/static/images/extjs/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
+	 background: url(/static/images/extjs/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
+	 background: url(/static/images/extjs/default/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
+}
+.x-tabs-bottom .x-tabs-strip  a {
+	position:relative;
+	top:0; left:0;
+}
+.x-tabs-bottom .x-tabs-strip .on a {
+	margin-top:-1px;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-inner {
+	padding-top:5px;
+}
+
+.x-tabs-bottom .x-tabs-body {
+    border:1px solid #6593cf;
+    border-bottom:0 none;
+}
+

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/toolbar.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/toolbar.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,160 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-toolbar{
+	border: 1px solid;
+    border-color:#eaf0f7 #eaf0f7 #a9bfd3 #eaf0f7;
+    display: block;
+	padding:2px;
+    background:#d0def0 url(/static/images/extjs/default/layout/panel-title-light-bg.gif) repeat-x;
+}
+.x-toolbar td {
+	vertical-align:middle;
+}
+.mso .x-toolbar, .x-grid-mso .x-toolbar{
+	border: 0 none;
+	background: url(/static/images/extjs/default/grid/mso-hd.gif);
+}
+.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{
+	white-space: nowrap;
+    font:normal 11px tahoma, arial, helvetica, sans-serif;
+}
+.x-toolbar .x-item-disabled {
+	color:gray;
+	cursor:default;
+	opacity:.6;
+	-moz-opacity:.6;
+	filter:alpha(opacity=60);
+}
+.x-toolbar .x-item-disabled * {
+	color:gray;
+	cursor:default;
+}
+.x-toolbar .x-btn-left{
+	background:none;
+}
+.x-toolbar .x-btn-right{
+	background:none;
+}
+.x-toolbar .x-btn-center{
+	background:none;
+	padding:0 0;
+}
+.x-toolbar .x-btn-menu-text-wrap .x-btn-center button{
+	padding-right:2px;
+}
+.ext-gecko .x-toolbar .x-btn-menu-text-wrap .x-btn-center button{
+	padding-right:0;
+}
+.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{
+	padding:0 2px;
+}
+.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button {
+    width:12px;
+    background:transparent url(/static/images/extjs/default/toolbar/btn-arrow.gif) no-repeat 0 3px;
+}
+.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button {
+    width:12px;
+    background:transparent url(/static/images/extjs/default/toolbar/btn-arrow.gif) no-repeat 0 3px;
+}
+.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button {
+	background-position: 0 -47px;
+}
+.x-toolbar .x-btn-over .x-btn-left{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
+}
+.x-toolbar .x-btn-over .x-btn-right{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
+}
+.x-toolbar .x-btn-over .x-btn-center{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
+}
+
+.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
+}
+.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
+}
+.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
+	background:url(/static/images/extjs/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
+}
+
+.x-toolbar .ytb-text{
+   padding:2px;
+}
+.x-toolbar .ytb-sep {
+	background-image: url(/static/images/extjs/default/grid/grid-split.gif);
+	background-position: center;
+	background-repeat: no-repeat;
+	display: block;
+	font-size: 1px;
+	height: 16px;
+	width:4px;
+	overflow: hidden;
+	cursor:default;
+	margin: 0 2px 0;
+	border:0;
+}
+.x-toolbar .ytb-spacer {
+    width:2px;
+}
+.mso .x-toolbar .ytb-sep, .x-grid-mso .x-toolbar .ytb-sep{
+	background-image: url(/static/images/extjs/default/grid/grid-blue-split.gif);
+}
+
+/* IE refuses to respect the negative margins in the toolbar */
+.ext-ie .x-toolbar .x-form-field-wrap {
+	padding-bottom:1px;
+}
+.ext-ie .x-toolbar .x-form-field-wrap .x-form-trigger {
+	top:1px;
+}
+
+/* Paging Toolbar */
+
+.x-grid-page-number{
+	width:24px;
+	height:14px;
+}
+.x-grid-page-first .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-first.gif);
+}
+.x-grid-loading .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/done.gif);
+}
+.x-grid-page-last .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-last.gif);
+}
+.x-grid-page-next .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-next.gif);
+}
+.x-grid-page-prev .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-prev.gif);
+}
+.x-item-disabled .x-grid-loading .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/loading.gif);
+}
+.x-item-disabled .x-grid-page-first .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-first-disabled.gif);
+}
+.x-item-disabled .x-grid-page-last .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-last-disabled.gif);
+}
+.x-item-disabled .x-grid-page-next .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-next-disabled.gif);
+}
+.x-item-disabled .x-grid-page-prev .x-btn-text{
+	background-image: url(/static/images/extjs/default/grid/page-prev-disabled.gif);
+}
+.x-paging-info {
+    position:absolute;
+    top:8px;
+    right: 8px;
+    color:#15428b;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/tree.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/tree.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,179 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.x-tree-icon, .x-tree-ec-icon, .x-tree-elbow-line, .x-tree-elbow, .x-tree-elbow-end, .x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{
+	border: 0 none;
+	height: 18px;
+	margin: 0;
+	padding: 0;
+	vertical-align: middle;
+	width: 16px;
+    background-repeat: no-repeat;
+}
+.x-tree-node-collapsed .x-tree-node-icon, .x-tree-node-expanded .x-tree-node-icon, .x-tree-node-leaf .x-tree-node-icon{
+	border: 0 none;
+	height: 18px;
+	margin: 0;
+	padding: 0;
+	vertical-align: middle;
+	width: 16px;
+	background-position:center;
+    background-repeat: no-repeat;
+}
+
+/* some default icons for leaf/folder */
+.x-tree-node-collapsed .x-tree-node-icon{
+	background-image:url(/static/images/extjs/default/tree/folder.gif);
+}
+.x-tree-node-expanded .x-tree-node-icon{
+	background-image:url(/static/images/extjs/default/tree/folder-open.gif);
+}
+.x-tree-node-leaf .x-tree-node-icon{
+	background-image:url(/static/images/extjs/default/tree/leaf.gif);
+}
+
+.x-tree-noicon .x-tree-node-icon{
+	width:0; height:0;
+}
+/* loading icon */
+.x-tree-node-loading .x-tree-node-icon{
+	background-image:url(/static/images/extjs/default/tree/loading.gif) !important;
+}
+.x-tree-node-loading a span{
+	 font-style: italic;
+	 color:#444444;
+}
+
+/* Line styles */
+.x-tree-lines .x-tree-elbow{
+	background-image:url(/static/images/extjs/default/tree/elbow.gif);
+}
+.x-tree-lines .x-tree-elbow-plus{
+	background-image:url(/static/images/extjs/default/tree/elbow-plus.gif);
+}
+.x-tree-lines .x-tree-elbow-minus{
+	background-image:url(/static/images/extjs/default/tree/elbow-minus.gif);
+}
+.x-tree-lines .x-tree-elbow-end{
+	background-image:url(/static/images/extjs/default/tree/elbow-end.gif);
+}
+.x-tree-lines .x-tree-elbow-end-plus{
+	background-image:url(/static/images/extjs/default/tree/elbow-end-plus.gif);
+}
+.x-tree-lines .x-tree-elbow-end-minus{
+	background-image:url(/static/images/extjs/default/tree/elbow-end-minus.gif);
+}
+.x-tree-lines .x-tree-elbow-line{
+	background-image:url(/static/images/extjs/default/tree/elbow-line.gif);
+}
+
+/* No line styles */
+.x-tree-no-lines .x-tree-elbow{
+	background:transparent;
+}
+.x-tree-no-lines .x-tree-elbow-plus{
+	background-image:url(/static/images/extjs/default/tree/elbow-plus-nl.gif);
+}
+.x-tree-no-lines .x-tree-elbow-minus{
+	background-image:url(/static/images/extjs/default/tree/elbow-minus-nl.gif);
+}
+.x-tree-no-lines .x-tree-elbow-end{
+	background:transparent;
+}
+.x-tree-no-lines .x-tree-elbow-end-plus{
+	background-image:url(/static/images/extjs/default/tree/elbow-end-plus-nl.gif);
+}
+.x-tree-no-lines .x-tree-elbow-end-minus{
+	background-image:url(/static/images/extjs/default/tree/elbow-end-minus-nl.gif);
+}
+.x-tree-no-lines .x-tree-elbow-line{
+	background:transparent;
+}
+
+.x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{
+	cursor:pointer;
+}
+.ext-ie ul.x-tree-node-ct{
+    font-size:0;
+    line-height:0;
+}
+.x-tree-node{
+	color: black;
+	font: normal 11px arial, tahoma, helvetica, sans-serif;
+	white-space: nowrap;
+}
+.x-tree-node a, .x-dd-drag-ghost a{
+	text-decoration:none;
+	color:black;
+	-khtml-user-select:none;
+	-moz-user-select:none;
+    -kthml-user-focus:normal;
+    -moz-user-focus:normal;
+    -moz-outline: 0 none;
+    outline:0 none;
+}
+.x-tree-node a span, .x-dd-drag-ghost a span{
+	text-decoration:none;
+	color:black;
+	padding:1px 3px 1px 2px;
+}
+.x-tree-node .x-tree-node-disabled a span{
+	color:gray !important;
+}
+.x-tree-node .x-tree-node-disabled .x-tree-node-icon{
+	-moz-opacity: 0.5;
+   opacity:.5;
+   filter: alpha(opacity=50);
+}
+.x-tree-node .x-tree-node-inline-icon{
+	background:transparent;
+}
+.x-tree-node a:hover, .x-dd-drag-ghost a:hover{
+	text-decoration:none;
+}
+.x-tree-node div.x-tree-drag-insert-below{
+ 	 border-bottom:1px dotted #3366cc;
+}
+.x-tree-node div.x-tree-drag-insert-above{
+	 border-top:1px dotted #3366cc;
+}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{
+ 	 border-bottom:0 none;
+}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{
+	 border-top:0 none;
+}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{
+ 	 border-bottom:2px solid #3366cc;
+}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{
+	 border-top:2px solid #3366cc;
+}
+.x-tree-node .x-tree-drag-append a span{
+	 background:#dddddd;
+	 border:1px dotted gray;
+}
+.x-tree-node .x-tree-selected a span{
+	background:#3366cc;
+	color:white;
+}
+.x-dd-drag-ghost .x-tree-node-indent, .x-dd-drag-ghost .x-tree-ec-icon{
+	display:none !important;
+}
+.x-tree-drop-ok-append .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/tree/drop-add.gif);
+}
+.x-tree-drop-ok-above .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/tree/drop-over.gif);
+}
+.x-tree-drop-ok-below .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/tree/drop-under.gif);
+}
+.x-tree-drop-ok-between .x-dd-drop-icon{
+  background-image: url(/static/images/extjs/default/tree/drop-between.gif);
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ytheme-aero.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ytheme-aero.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,499 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+/* menus */
+.x-menu {
+	border:1px solid;
+    border-color: #96b9e6 #8BB8F3 #8BB8F3 #96b9e6;
+    z-index: 15000;
+	zoom:1;
+    background:#c3daf9;
+    padding:2px;
+    
+}
+.x-menu-list{
+    background: #fafafa;
+    border:1px solid #fff;
+    border-color:#a3bad9;
+}
+.x-menu-item-icon {
+	margin-right:8px;
+}
+.x-menu-sep {
+    margin-left:3px;
+}
+.x-menu-item-active {
+	color:#233d6d;
+	background:#c3daf9;
+	border:1px solid #fff;
+	padding:0;
+}
+
+.x-date-mmenu .x-menu-list{
+    padding:0;
+}
+.x-date-mmenu .x-menu-list{
+    border:0 none;
+}
+
+.x-menu .x-color-palette, .x-menu .x-date-picker{
+    margin-left:26px;
+}
+.x-menu-plain .x-color-palette, .x-menu-plain .x-date-picker{
+	margin:0;
+    border:0 none;
+}
+/**
+* Tabs
+*/
+.x-tabs-wrap, .x-layout-panel .x-tabs-top .x-tabs-wrap {
+   background:#deecfd;
+	border:1px solid #8db2e3;
+	padding-bottom:2px;
+	padding-top:0;
+}
+.x-tabs-strip-wrap{
+	padding-top:1px;
+	background:#cedff5 url(/static/images/extjs/aero/tabs/tab-strip-bg.gif) repeat-x bottom;
+	border-bottom:1px solid #8db2e3;
+}
+.x-tabs-strip .x-tabs-text {
+	color:#15428b;
+	font:bold 11px tahoma,arial,verdana,sans-serif;
+}
+.x-tabs-strip .on .x-tabs-text {
+	cursor:default;
+	color:#15428b;
+}
+.x-tabs-top .x-tabs-strip .on .x-tabs-right {
+	 background: url(/static/images/extjs/aero/tabs/tab-sprite.gif) no-repeat right 0;
+}
+.x-tabs-top .x-tabs-strip .on .x-tabs-left,.x-tabs-top .x-tabs-strip .on a:hover .x-tabs-left{
+	 background: url(/static/images/extjs/aero/tabs/tab-sprite.gif) no-repeat 0 -100px;
+}
+.x-tabs-top .x-tabs-strip .x-tabs-right {
+	 background:transparent url(/static/images/extjs/aero/tabs/tab-sprite.gif) no-repeat right -50px;
+}
+.x-tabs-top .x-tabs-strip .x-tabs-left {
+	background:transparent url(/static/images/extjs/aero/tabs/tab-sprite.gif) no-repeat 0 -150px;
+}
+.x-tabs-top .x-tabs-body {
+	border:1px solid #8db2e3;
+	border-top:0 none;
+}
+.x-tabs-bottom .x-tabs-wrap, .x-layout-panel .x-tabs-bottom .x-tabs-wrap {
+   background:#deecfd;
+	border:1px solid #8db2e3;
+	padding-top:2px;
+	padding-bottom:0;
+}
+.x-tabs-bottom .x-tabs-strip-wrap{
+	padding-top:0;
+	padding-bottom:1px;
+	background:#cedff5 url(/static/images/extjs/aero/tabs/tab-strip-btm-bg.gif) repeat-x top;
+	border-top:1px solid #8db2e3;
+	border-bottom:0 none;
+}
+.x-tabs-bottom .x-tabs-strip .x-tabs-right {
+	background:transparent url(/static/images/extjs/aero/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;
+}
+.x-tabs-bottom .x-tabs-strip .x-tabs-left {
+	background:transparent url(/static/images/extjs/aero/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-right,.x-tabs-bottom .x-tabs-strip .on a:hover {
+	 background: url(/static/images/extjs/aero/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-left,.x-tabs-bottom .x-tabs-strip .on a:hover .x-tabs-left {
+	 background: url(/static/images/extjs/aero/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
+}
+.x-tabs-bottom .x-tabs-body {
+	border:1px solid #8db2e3;
+	border-bottom:0 none;
+}
+/*
+* Basic-Dialog 
+*/
+.x-dlg-proxy {
+	background:#C7DFFC;
+	border:1px solid #A5CCF9;
+}
+.x-dlg-shadow{
+	background:#cccccc;
+   opacity:.3;
+   -moz-opacity:.3;
+   filter: alpha(opacity=30);
+}
+.x-dlg {
+	background:transparent;
+}
+.x-dlg .x-dlg-hd {
+	background: url(/static/images/extjs/aero/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
+	background-color:#aabaca;
+	color:#15428b;
+	zoom:1;
+	padding-top:7px;
+}
+.x-dlg .x-dlg-hd-left {
+	opacity:.85;
+    -moz-opacity:.85;
+    filter:alpha(opacity=80);
+	background: url(/static/images/extjs/aero/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
+	zoom:1;
+}
+.x-dlg-modal .x-dlg-hd-left {
+	opacity:.75;
+    -moz-opacity:.75;
+    filter:alpha(opacity=70);
+}
+
+.x-dlg .x-dlg-hd-right {
+	background: url(/static/images/extjs/aero/basic-dialog/hd-sprite.gif) no-repeat right 0;
+	zoom:1;
+}
+.x-dlg .x-dlg-dlg-body{
+	padding:0 0 0;
+	position:absolute;
+	top:24px;left:0;
+	z-index:1;
+	border:0 none;
+	background:transparent;
+}
+.x-dlg .x-dlg-bd{
+	background:#fff;
+	border:1px solid #96b9e6;
+}
+.x-dlg .x-dlg-ft{
+	border:0 none;
+	background:transparent;
+	padding-bottom:8px;
+}
+.x-dlg .x-dlg-bg{
+	filter:alpha(opacity=80);
+	opacity:.85; 
+	-moz-opacity:.85; 
+	zoom:1;
+}
+.x-dlg-modal .x-dlg-bg {
+	opacity:.75;
+    -moz-opacity:.75;
+    filter:alpha(opacity=70);
+}
+.x-dlg .x-dlg-bg-center {
+	padding: 2px 7px 7px 7px;
+	background:transparent url(/static/images/extjs/aero/basic-dialog/bg-center.gif) repeat-x bottom;
+	zoom:1;
+}
+.x-dlg .x-dlg-bg-left{
+	padding-left:7px;
+	background:transparent url(/static/images/extjs/aero/basic-dialog/bg-left.gif) no-repeat bottom left;
+	zoom:1;
+}
+.x-dlg .x-dlg-bg-right{
+	padding-right:7px;
+	background:transparent url(/static/images/extjs/aero/basic-dialog/bg-right.gif) no-repeat bottom right;
+	zoom:1;
+}
+.x-dlg-auto-tabs .x-dlg-dlg-body, .x-dlg-auto-layout .x-dlg-dlg-body{
+	background:transparent;
+	border:0 none;
+}
+.x-dlg-auto-tabs .x-dlg-bd, .x-dlg-auto-layout .x-dlg-bd{
+	background:#fff;
+	border:1px solid #e9f3f5;
+}
+.x-dlg-auto-tabs .x-tabs-top .x-tabs-body,.x-dlg-auto-tabs .x-tabs-bottom .x-tabs-body{
+    border-color:#8db2e3;
+}
+.x-dlg-auto-tabs .x-tabs-top .x-tabs-wrap,.x-dlg-auto-tabs .x-tabs-bottom .x-tabs-wrap{
+    border-color:#8db2e3;
+}
+.x-dlg .x-dlg-toolbox {
+    width:50px;
+    height:20px;
+    right:5px;
+    top:5px;
+}
+.x-dlg .x-dlg-close, .x-dlg .x-dlg-collapse {
+	width:21px;
+	height:20px;
+    margin:0;
+}
+.x-dlg .x-dlg-close {
+    background-image:url(/static/images/extjs/aero/basic-dialog/aero-close.gif);
+}
+.x-dlg .x-dlg-collapse {
+    background-image:url(/static/images/extjs/aero/basic-dialog/collapse.gif);
+}
+.x-dlg-collapsed {
+    border-bottom:1px solid #96b9e6;
+}
+.x-dlg .x-dlg-close-over {
+	background-image:url(/static/images/extjs/aero/basic-dialog/aero-close-over.gif);
+}
+.x-dlg .x-dlg-collapse-over {
+	background-image:url(/static/images/extjs/aero/basic-dialog/collapse-over.gif);
+}
+.x-dlg-collapsed .x-dlg-collapse {
+    background-image:url(/static/images/extjs/aero/basic-dialog/expand.gif);
+}
+.x-dlg-collapsed .x-dlg-collapse-over {
+    background-image:url(/static/images/extjs/aero/basic-dialog/expand-over.gif);
+}
+.x-dlg div.x-resizable-handle-east{
+	background-image:url(/static/images/extjs/aero/s.gif);
+	border:0 none;
+}
+.x-dlg div.x-resizable-handle-south{
+	background-image:url(/static/images/extjs/aero/s.gif);
+	border:0 none;
+}
+.x-dlg div.x-resizable-handle-west{
+	background-image:url(/static/images/extjs/aero/s.gif);
+	border:0 none;
+}
+.x-dlg div.x-resizable-handle-southeast{
+	background-image:url(/static/images/extjs/aero/basic-dialog/se-handle.gif);
+	background-position: bottom right;
+	width:9px;
+	height:9px;
+	border:0;
+	right:2px;
+	bottom:2px;
+}
+.x-dlg div.x-resizable-handle-southwest{
+	background-image:url(/static/images/extjs/aero/s.gif);
+	background-position: top right;
+	margin-left:1px;
+	margin-bottom:1px;
+	border:0;
+}
+.x-dlg div.x-resizable-handle-north{
+	background-image:url(/static/images/extjs/aero/s.gif);
+	border:0 none;
+}
+
+#x-msg-box .x-dlg-bd{
+	background:#CFE0F5;
+	border:0 none;
+}
+body.x-masked #x-msg-box .x-dlg-bd, body.x-body-masked #x-msg-box .x-dlg-bd{
+	background:#c4d2e3;
+	border:0 none;
+}
+/* BorderLayout */
+
+.x-layout-container{
+    background:#deecfd;
+}
+.x-layout-collapsed{
+    background-color:#deecfd;
+	 border:1px solid #99bbe8;
+}
+.x-layout-collapsed-over{
+	 background-color:#F5F9FE;
+}
+.x-layout-panel{
+    border:1px solid #99bbe8;
+}
+.x-layout-nested-layout .x-layout-panel {
+	  border:0 none;
+}
+.x-layout-split{
+    background-color:#deecfd;
+}
+.x-layout-panel-hd{
+    background: #ebeadb url(/static/images/extjs/aero/grid/grid-hrow.gif) repeat-x;
+    border-bottom:1px solid #99bbe8;
+}
+.x-layout-panel-hd-text {
+	color:#15428b;
+	font:bold 11px tahoma,arial,verdana,sans-serif;
+}
+
+.x-layout-split-h{
+    background:#deecfd;
+}
+.x-layout-split-v{
+    background:#deecfd;
+}
+.x-layout-panel .x-tabs-top .x-tabs-wrap{
+    border:0 none;
+	 border-bottom:1px solid #8db2e3;
+}
+.x-layout-panel .x-tabs-bottom .x-tabs-wrap{
+    border:0 none;
+	 border-top:1px solid #8db2e3;
+}
+
+.x-layout-nested-layout .x-layout-panel-north {
+	  border-bottom:1px solid #99bbe8;
+}
+.x-layout-nested-layout .x-layout-panel-south {
+	  border-top:1px solid #99bbe8;
+}
+.x-layout-nested-layout .x-layout-panel-east {
+	  border-left:1px solid #99bbe8;
+}
+.x-layout-nested-layout .x-layout-panel-west {
+	  border-right:1px solid #99bbe8;
+}
+.x-layout-panel-dragover {
+	border: 2px solid #99bbe8;
+}
+.x-layout-panel-proxy {
+	background-image: url(/static/images/extjs/aero/layout/gradient-bg.gif);
+	background-color:#f3f2e7;
+	border:1px dashed #99bbe8;
+}
+
+.x-layout-container .x-layout-tabs-body{
+	border:0 none;
+}
+/** Resizable */
+
+.x-resizable-proxy{
+    border: 1px dashed #3b5a82;
+}
+
+/* grid */
+.x-grid-hd-text {
+	color:#15428b;
+    font-weight:bold;
+}
+.x-grid-locked .x-grid-body td {
+	background: #FBFDFF;
+	border-right: 1px solid #deecfd;
+	border-bottom: 1px solid #deecfd !important;
+}
+.x-grid-locked .x-grid-body td .x-grid-cell-inner {
+	border-top:0 none;
+}
+.x-grid-locked .x-grid-row-alt td{
+	background: #F5FAFE;
+}
+.x-grid-locked .x-grid-row-selected td{
+	color: #fff !important;
+	background-color: #316ac5 !important;
+}
+.x-grid-hd{
+	border-bottom:0;
+	background:none;
+}
+.x-grid-hd-row{
+	height:auto;
+}
+.x-grid-hd-over {
+	border-bottom:0 none;
+}
+.x-grid-hd-over .x-grid-hd-body{
+	background:none;
+	border-bottom:0 none;
+}
+.x-grid-hd-over .x-grid-hd-body{
+	background-color: transparent;
+	border-bottom:0;
+}
+.x-grid-split {
+	background-image: url(/static/images/extjs/aero/grid/grid-blue-split.gif);
+}
+.x-grid-header{
+	background: url(/static/images/extjs/aero/grid/grid-hrow.gif);
+	border:0 none;
+	border-bottom:1px solid #6f99cf;
+}
+.x-grid-row-alt{
+	background-color: #f5f5f5;
+}
+.x-grid-row-over td, .x-grid-locked .x-grid-row-over td{
+	background:#d9e8fb;
+}
+.x-grid-col {
+	border-right: 1px solid #eee;
+	border-bottom: 1px solid #eee;
+}
+.x-grid-header .x-grid-hd-inner {
+	padding-bottom: 1px;
+}
+.x-grid-header  .x-grid-hd-text {
+	padding-bottom: 3px;
+}
+.x-grid-hd-over .x-grid-hd-inner {
+	border-bottom: 1px solid #316ac5;
+	padding-bottom: 0;
+}
+.x-grid-hd-over .x-grid-hd-text {
+	background: #d5e4f5;
+	border-bottom: 1px solid #fff;
+	padding-bottom: 2px;
+}
+.x-grid-header .sort-asc .x-grid-hd-inner, .x-grid-header .sort-desc .x-grid-hd-inner {
+	border-bottom: 1px solid #316ac5;
+	padding-bottom: 0;
+}
+.x-grid-header .sort-asc  .x-grid-hd-text, .x-grid-header .sort-desc .x-grid-hd-text {
+	border-bottom: 0 none;
+	padding-bottom: 3px;
+}
+.x-grid-header .sort-asc .x-grid-sort-icon {
+	background-image: url(/static/images/extjs/aero/grid/sort_asc.gif);
+}
+.x-grid-header .sort-desc .x-grid-sort-icon {
+	background-image: url(/static/images/extjs/aero/grid/sort_desc.gif);
+}
+.x-dd-drag-proxy .x-grid-hd-inner{
+	background: #ebeadb url(/static/images/extjs/aero/grid/grid-hrow.gif) repeat-x;
+	height:22px;
+	width:120px;
+}
+
+
+.x-grid-locked td.x-grid-row-marker, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker{
+    background: #ebeadb url(/static/images/extjs/aero/grid/grid-hrow.gif) repeat-x 0 0 !important;
+    vertical-align:middle !important;
+    color:black;
+    padding:0;
+    border-top:1px solid white;
+    border-bottom:1px solid #6f99cf !important;
+    border-right:1px solid #6f99cf !important;
+    text-align:center;
+}
+.x-grid-locked td.x-grid-row-marker div, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker div{
+    padding:0 4px;
+    color:#15428b !important;
+    text-align:center;
+}
+
+/** Toolbar */
+.x-toolbar{
+	padding:2px 2px 2px 2px;
+    background:#d0def0 url(/static/images/extjs/default/toolbar/tb-bg.gif) repeat-x;
+}
+
+.x-toolbar .ytb-sep{
+	background-image: url(/static/images/extjs/aero/grid/grid-blue-split.gif);
+}
+
+.x-toolbar .x-btn-over .x-btn-left{
+	background:url(/static/images/extjs/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
+}
+.x-toolbar .x-btn-over .x-btn-right{
+	background:url(/static/images/extjs/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
+}
+.x-toolbar .x-btn-over .x-btn-center{
+	background:url(/static/images/extjs/aero/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
+}
+
+.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
+	background:url(/static/images/extjs/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
+}
+.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
+	background:url(/static/images/extjs/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
+}
+.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
+	background:url(/static/images/extjs/aero/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ytheme-gray.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ytheme-gray.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,438 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+
+.ext-el-mask-msg {
+    border:1px solid #aaa;
+    background: #ddd url(/static/images/extjs/default/box/tb.gif) repeat-x 0 -16px;
+}
+.ext-el-mask-msg div {
+    border:1px solid #ccc;
+}
+
+/*
+ Menu
+ */
+.x-menu {
+	border-color: #999 #999 #999 #999;
+    background-image:url(/static/images/extjs/gray/menu/menu.gif);
+}
+.x-menu-item-arrow{
+	background-image:url(/static/images/extjs/gray/menu/menu-parent.gif);
+}
+.x-menu-item {
+	color:#222;
+}
+.x-menu-item-active {
+	background:#ddd;
+    border:1px solid #aaa;
+}
+.x-menu-sep {
+	background:#aaa;
+}
+
+/* grid */
+.x-grid-header{
+	background: #ebeadb url(/static/images/extjs/gray/grid/grid-hrow.gif) repeat-x;
+	overflow:hidden;
+	position:relative;
+	cursor:default;
+	width:100%;
+}
+.x-grid-hd-row{
+	height:22px;
+}
+.x-grid-hd {
+	padding-right:1px;
+}
+.x-grid-hd-over .x-grid-hd-inner {
+	border-bottom: 1px solid #fcc247;
+}
+.x-grid-hd-over .x-grid-hd-text {
+	background: #faf9f4;
+    padding-bottom:1px;
+    border-bottom: 1px solid #f9a900;
+}
+
+.x-grid-hd-text {
+	color:#000000;
+}
+
+.x-grid-col {
+	border-right: 1px solid #f1efe2;
+	border-bottom: 1px solid #f1efe2;
+}
+.x-grid-row-alt{
+	background:#fcfaf6;
+}
+.x-grid-row-over td{
+	background:#f1f1f1;
+}
+
+
+.x-grid-locked .x-grid-body td {
+	background: #f0efe4;
+	border-right: 1px solid #D6D2C2;
+	border-bottom: 1px solid #D6D2C2 !important;
+}
+
+.x-grid-locked .x-grid-header table{
+    border-right:1px solid transparent;
+}
+.x-grid-locked .x-grid-body table{
+    border-right:1px solid #c6c2b2;
+}
+
+.x-grid-bottombar .x-toolbar{
+	border-right:0 none;
+	border-bottom:0 none;
+	border-top:1px solid #f1efe2;
+}
+
+.x-props-grid .x-grid-col-name{
+	 background-color: #f1efe2;
+}
+
+
+
+.x-grid-locked td.x-grid-row-marker, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker{
+    background: #ebeadb url(/static/images/extjs/gray/grid/grid-hrow.gif) repeat-x 0 bottom !important;
+    vertical-align:middle !important;
+    color:black;
+    padding:0;
+    border-top:1px solid white;
+    border-bottom:none !important;
+    border-right:1px solid #d6d2c2 !important;
+    text-align:center;
+}
+.x-grid-locked td.x-grid-row-marker div, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker div{
+    padding:0 4px;
+    color:black !important;
+    text-align:center;
+}
+
+/**
+* Basic-Dialog 
+*/
+.x-dlg-proxy {
+	background-image: url(/static/images/extjs/gray/layout/gradient-bg.gif);
+	background-color:#EAE8D5;
+	border:1px solid #b3b6b0;
+}
+.x-dlg-shadow{
+	background:#aaaaaa;
+}
+.x-dlg-proxy .tabset{
+    background:url(/static/images/extjs/gray/layout/gradient-bg.gif);
+}
+.x-dlg .x-dlg-hd {
+	background: url(/static/images/extjs/gray/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
+	background-color:#333333;
+}
+.x-dlg .x-dlg-hd-left {
+	background: url(/static/images/extjs/gray/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
+}
+.x-dlg .x-dlg-hd-right {
+	background: url(/static/images/extjs/gray/basic-dialog/hd-sprite.gif) no-repeat right 0;
+}
+.x-dlg .x-dlg-dlg-body{
+	background:#efefec;
+	border:1px solid #b3b6b0;
+	border-top:0 none;
+}
+.x-dlg .x-tabs-top .x-tabs-body{
+	border:1px solid #b3b6b0;
+	border-top:0 none;
+}
+.x-dlg .x-tabs-bottom .x-tabs-body{
+	border:1px solid #b3b6b0;
+	border-bottom:0 none;
+}
+.x-dlg .x-layout-container  .x-tabs-body{
+	border:0 none;
+}
+.x-dlg .x-dlg-close {
+	background-image:url(/static/images/extjs/gray/basic-dialog/close.gif);
+}
+.x-dlg .x-dlg-collapse {
+    background-image:url(/static/images/extjs/gray/basic-dialog/collapse.gif);
+}
+.x-dlg-collapsed .x-dlg-collapse {
+    background-image:url(/static/images/extjs/gray/basic-dialog/expand.gif);
+}
+.x-dlg div.x-resizable-handle-east{
+	background-image:url(/static/images/extjs/gray/basic-dialog/e-handle.gif);
+	border:0 none;
+}
+.x-dlg div.x-resizable-handle-south{
+	background-image:url(/static/images/extjs/gray/basic-dialog/s-handle.gif);
+	border:0 none;
+}
+.x-dlg div.x-resizable-handle-west{
+	background-image:url(/static/images/extjs/gray/basic-dialog/e-handle.gif);
+	border:0 none;
+}
+.x-dlg div.x-resizable-handle-southeast{
+	background-image:url(/static/images/extjs/gray/basic-dialog/se-handle.gif);
+	background-position: bottom right;
+	width:8px;
+	height:8px;
+	border:0;
+}
+.x-dlg div.x-resizable-handle-southwest{
+	background-image:url(/static/images/extjs/gray/sizer/sw-handle-dark.gif);
+	background-position: top right;
+	margin-left:1px;
+	margin-bottom:1px;
+	border:0;
+}
+.x-dlg div.x-resizable-handle-north{
+	background-image:url(/static/images/extjs/gray/s.gif);
+	border:0 none;
+}
+
+/** 
+* Tabs
+*/
+.x-tabs-wrap {
+	border-bottom:1px solid #aca899;
+}
+.x-tabs-strip .on .x-tabs-text {
+	cursor:default;
+	color:#333333;
+}
+.x-tabs-top .x-tabs-strip .on .x-tabs-right {
+	 background: url(/static/images/extjs/gray/tabs/tab-sprite.gif) no-repeat right 0;
+}
+.x-tabs-top .x-tabs-strip .on .x-tabs-left {
+	 background: url(/static/images/extjs/gray/tabs/tab-sprite.gif) no-repeat 0px -100px;
+}
+.x-tabs-top .x-tabs-strip .x-tabs-right {
+	 background: url(/static/images/extjs/gray/tabs/tab-sprite.gif) no-repeat right -50px;
+}
+.x-tabs-top .x-tabs-strip .x-tabs-left {
+	 background: url(/static/images/extjs/gray/tabs/tab-sprite.gif) no-repeat 0px -150px;
+}
+.x-tabs-strip .x-tabs-closable .close-icon{
+	background-image:url(/static/images/extjs/gray/layout/tab-close.gif);
+}
+.x-tabs-strip .on .close-icon{
+	background-image:url(/static/images/extjs/gray/layout/tab-close-on.gif);
+}
+.x-tabs-strip .x-tabs-closable .close-over{
+	background-image:url(/static/images/extjs/gray/layout/tab-close-on.gif);
+}
+.x-tabs-body {
+    border:1px solid #aca899;
+    border-top:0 none;
+}
+.x-tabs-bottom .x-tabs-wrap {
+	border-bottom:0 none;
+	padding-top:0;
+	border-top:1px solid #aca899;
+}
+.x-tabs-bottom .x-tabs-strip .x-tabs-right {
+	 background: url(/static/images/extjs/gray/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
+}
+.x-tabs-bottom .x-tabs-strip .x-tabs-left {
+	 background: url(/static/images/extjs/gray/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
+	 background: url(/static/images/extjs/gray/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
+	 background: url(/static/images/extjs/gray/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
+}
+
+.x-tabs-bottom .x-tabs-body {
+    border:1px solid #aca899;
+    border-bottom:0 none;
+}
+
+.x-layout-container .x-layout-tabs-body{
+	border:0 none;
+}
+/* QuickTips */
+
+.x-tip .x-tip-top {
+	background-image: url(/static/images/extjs/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-top-left {
+	background-image: url(/static/images/extjs/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-top-right {
+	background-image: url(/static/images/extjs/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-ft {
+	background-image: url(/static/images/extjs/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-ft-left {
+	background-image: url(/static/images/extjs/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-ft-right {
+	background-image: url(/static/images/extjs/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-bd-left {
+	background-image: url(/static/images/extjs/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-bd-right {
+	background-image: url(/static/images/extjs/gray/qtip/tip-sprite.gif);
+}
+
+/* BorderLayout */
+
+.x-layout-container{
+    background-color:#f3f2e7;
+}
+.x-layout-collapsed{
+    background-color:#f3f2e7;
+	 border:1px solid #aca899;
+}
+.x-layout-collapsed-over{
+	 background-color:#fbfbef;
+}
+.x-layout-panel{
+    border:1px solid #aca899;
+}
+.x-layout-nested-layout .x-layout-panel {
+	  border:0 none;
+}
+.x-layout-split{
+    background-color:#f3f2e7;
+}
+.x-layout-panel-hd{
+    background-image: url(/static/images/extjs/gray/layout/panel-title-light-bg.gif);
+    border-bottom:1px solid #aca899;
+}
+.x-layout-tools-button-over{
+    border:1px solid #aca899;
+}
+.x-layout-close{
+    background-image:url(/static/images/extjs/gray/layout/panel-close.gif);
+}
+.x-layout-stick{
+    background-image:url(/static/images/extjs/gray/layout/stick.gif);
+}
+.x-layout-collapse-west,.x-layout-expand-east{
+    background-image:url(/static/images/extjs/gray/layout/collapse.gif);
+}
+.x-layout-expand-west,.x-layout-collapse-east{
+    background-image:url(/static/images/extjs/gray/layout/expand.gif);
+}
+.x-layout-collapse-north,.x-layout-expand-south{
+    background-image:url(/static/images/extjs/gray/layout/ns-collapse.gif);
+}
+.x-layout-expand-north,.x-layout-collapse-south{
+    background-image:url(/static/images/extjs/gray/layout/ns-expand.gif);
+}
+.x-layout-split-h{
+    background-image:url(/static/images/extjs/gray/sizer/e-handle-dark.gif);
+}
+.x-layout-split-v{
+    background-image:url(/static/images/extjs/gray/sizer/s-handle-dark.gif);
+}
+.x-layout-panel .x-tabs-wrap{
+    background:url(/static/images/extjs/gray/layout/gradient-bg.gif);
+}
+.x-layout-nested-layout .x-layout-panel-north {
+	  border-bottom:1px solid #aca899;
+}
+.x-layout-nested-layout .x-layout-panel-south {
+	  border-top:1px solid #aca899;
+}
+.x-layout-nested-layout .x-layout-panel-east {
+	  border-left:1px solid #aca899;
+}
+.x-layout-nested-layout .x-layout-panel-west {
+	  border-right:1px solid #aca899;
+}
+.x-layout-panel-dragover {
+	border: 2px solid #aca899;
+}
+.x-layout-panel-proxy {
+	background-image: url(/static/images/extjs/gray/layout/gradient-bg.gif);
+	background-color:#f3f2e7;
+	border:1px dashed #aca899;
+}
+/** Resizable */
+
+.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
+    background:url(/static/images/extjs/gray/sizer/e-handle.gif);
+	 background-position: left;
+}
+.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-west{
+    background:url(/static/images/extjs/gray/sizer/e-handle.gif);
+	 background-position: left;
+}
+.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
+    background:url(/static/images/extjs/gray/sizer/s-handle.gif);
+    background-position: top;
+}
+.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-north{
+    background:url(/static/images/extjs/gray/sizer/s-handle.gif);
+    background-position: top;
+}
+.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
+    background:url(/static/images/extjs/gray/sizer/se-handle.gif);
+    background-position: top left;
+}
+.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{
+    background:url(/static/images/extjs/gray/sizer/nw-handle.gif);
+    background-position:bottom right;
+}
+.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{
+    background:url(/static/images/extjs/gray/sizer/ne-handle.gif);
+    background-position: bottom left;
+}
+.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{
+    background:url(/static/images/extjs/gray/sizer/sw-handle.gif);
+    background-position: top right;
+}
+.x-resizable-proxy{
+    border: 1px dashed #615e55;
+}
+
+/** Toolbar */
+.x-toolbar{
+	border:0 none;
+	background: #efefe3 url(/static/images/extjs/gray/toolbar/gray-bg.gif) repeat-x;
+	padding:3px;
+}
+.x-toolbar .x-btn-over .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
+	background:url(/static/images/extjs/gray/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
+}
+.x-toolbar .x-btn-over .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
+	background:url(/static/images/extjs/gray/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
+}
+.x-toolbar .x-btn-over .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
+	background:url(/static/images/extjs/gray/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
+}
+.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button {
+	background-position: 0 -47px;
+}
+.x-paging-info {
+    color:#222222;
+}
+
+/* combo box */
+.x-combo-list {
+    border:1px solid #999;
+    background:#dddddd;
+}
+.x-combo-list-hd {
+    color:#222;
+    background-image: url(/static/images/extjs/gray/layout/panel-title-light-bg.gif);
+    border-bottom:1px solid #aca899;
+}
+.x-resizable-pinned .x-combo-list-inner {
+    border-bottom:1px solid #aaa;
+}
+.x-combo-list .x-combo-selected{
+	background:#ddd !important;
+    border:1px solid #aaa;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ytheme-vista.css
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/css/extjs/ytheme-vista.css	Mon May  7 16:28:32 2007
@@ -0,0 +1,511 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+.ext-el-mask-msg {
+    border:1px solid #aaa;
+    background: #ddd url(/static/images/extjs/default/box/tb.gif) repeat-x 0 -16px;
+}
+.ext-el-mask-msg div {
+    border:1px solid #ccc;
+}
+/*
+ Menu
+ */
+.x-menu {
+	border-color: #999 #999 #999 #999;
+    background-image:url(/static/images/extjs/gray/menu/menu.gif);
+}
+.x-menu-item-arrow{
+	background-image:url(/static/images/extjs/gray/menu/menu-parent.gif);
+}
+.x-menu-item {
+	color:#222;
+}
+.x-menu-item-active {
+	background:#ddd;
+    border:1px solid #aaa;
+}
+.x-menu-sep {
+	background:#aaa;
+}
+/** 
+* Tabs
+*/
+.x-tabs-wrap {
+	background:#4f4f4f;
+	border-bottom:1px solid #b3b6b0;
+}
+.x-tabs-strip .x-tabs-text {
+	color:white;
+	font-weight:normal;
+}
+.x-tabs-strip .on .x-tabs-text {
+	cursor:default;
+	color:#333333;
+}
+.x-tabs-top .x-tabs-strip a.x-tabs-right {
+	background:transparent url(/static/images/extjs/vista/tabs/tab-sprite.gif) no-repeat right -50px;
+}
+.x-tabs-top .x-tabs-strip a .x-tabs-left{
+	background:transparent url(/static/images/extjs/vista/tabs/tab-sprite.gif) no-repeat 0px -150px;
+}
+.x-tabs-top .x-tabs-strip .on .x-tabs-right {
+	 background: url(/static/images/extjs/vista/tabs/tab-sprite.gif) no-repeat right 0;
+}
+.x-tabs-top .x-tabs-strip .on .x-tabs-left{
+	 background: url(/static/images/extjs/vista/tabs/tab-sprite.gif) no-repeat 0px -100px;
+}
+.x-tabs-strip .x-tabs-closable .close-icon{
+	background-image:url(/static/images/extjs/vista/layout/tab-close.gif);
+}
+.x-tabs-strip .on .close-icon{
+	background-image:url(/static/images/extjs/vista/layout/tab-close-on.gif);
+}
+.x-tabs-strip .x-tabs-closable .close-over{
+	background-image:url(/static/images/extjs/vista/layout/tab-close-on.gif);
+}
+.x-tabs-body {
+    border:1px solid #b3b6b0;
+    border-top:0 none;
+}
+
+.x-tabs-bottom .x-tabs-strip {
+	background:#4f4f4f;
+}
+.x-tabs-bottom .x-tabs-strip a.x-tabs-right {
+	background:transparent url(/static/images/extjs/vista/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;
+}
+.x-tabs-bottom .x-tabs-strip a .x-tabs-left{
+	background:transparent url(/static/images/extjs/vista/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;
+}
+.x-tabs-bottom .x-tabs-wrap {
+	border-bottom:0 none;
+	padding-top:0;
+	border-top:1px solid #b3b6b0;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
+	 background: url(/static/images/extjs/vista/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
+}
+.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
+	 background: url(/static/images/extjs/vista/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
+}
+
+.x-tabs-bottom .x-tabs-body {
+    border:1px solid #b3b6b0;
+    border-bottom:0 none;
+}
+/**
+* Basic-Dialog 
+*/
+.x-dlg-proxy {
+	background:#d3d6d0;
+	border:2px solid #b3b6b0;
+}
+.x-dlg-shadow{
+	background:#cccccc;
+   opacity:.3;
+   -moz-opacity:.3;
+   filter: alpha(opacity=30);
+}
+.x-dlg .x-dlg-hd {
+	background: url(/static/images/extjs/vista/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
+	background-color:#333333;
+	zoom:1;
+}
+.x-dlg .x-dlg-hd-left {
+	opacity:.95;-moz-opacity:.95;filter:alpha(opacity=90);
+	background: url(/static/images/extjs/vista/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
+	zoom:1;
+}
+.x-dlg .x-dlg-hd-right {
+	background: url(/static/images/extjs/vista/basic-dialog/hd-sprite.gif) no-repeat right 0;
+	zoom:1;
+}
+.x-dlg .x-dlg-dlg-body{
+	background:#fff;
+	border:0 none;
+	border-top:0 none;
+	padding:0 0px 0px;
+	position:absolute;
+	top:24px;left:0;
+	z-index:1;
+}
+.x-dlg-auto-tabs .x-dlg-dlg-body{
+	background:transparent;
+}
+.x-dlg-auto-tabs .x-tabs-top .x-tabs-wrap{
+	background:transparent;
+}
+.x-dlg .x-dlg-ft{
+	border-top:1px solid #b3b6b0;
+	background:#F0F0F0;
+	padding-bottom:8px;
+}
+.x-dlg .x-dlg-bg{
+	opacity:.90;-moz-opacity:.90;filter:alpha(opacity=85);
+	zoom:1;
+}
+.x-dlg .x-dlg-bg-left,.x-dlg .x-dlg-bg-center,.x-dlg .x-dlg-bg-right{
+}
+.x-dlg .x-dlg-bg-center {
+	padding: 0px 4px 4px 4px;
+	background:transparent url(/static/images/extjs/vista/basic-dialog/bg-center.gif) repeat-x bottom;
+	zoom:1;
+}
+.x-dlg .x-dlg-bg-left{
+	padding-left:4px;
+	background:transparent url(/static/images/extjs/vista/basic-dialog/bg-left.gif) no-repeat bottom left;
+	zoom:1;
+}
+.x-dlg .x-dlg-bg-right{
+	padding-right:4px;
+	background:transparent url(/static/images/extjs/vista/basic-dialog/bg-right.gif) no-repeat bottom right;
+	zoom:1;
+}
+.x-dlg .x-tabs-top .x-tabs-body{
+	border:0 none;
+}
+.x-dlg .x-tabs-bottom .x-tabs-body{
+	border:1px solid #b3b6b0;
+	border-bottom:0 none;
+}
+.x-dlg .x-layout-container  .x-tabs-body{
+	border:0 none;
+}
+.x-dlg .x-dlg-close {
+    background-image:url(/static/images/extjs/vista/basic-dialog/close.gif);
+}
+.x-dlg .x-dlg-collapse {
+    background-image:url(/static/images/extjs/vista/basic-dialog/collapse.gif);
+}
+.x-dlg-collapsed .x-dlg-collapse {
+    background-image:url(/static/images/extjs/vista/basic-dialog/expand.gif);
+}
+.x-dlg div.x-resizable-handle-east{
+	background-image:url(/static/images/extjs/vista/s.gif);
+	border:0 none;
+}
+.x-dlg div.x-resizable-handle-south{
+	background-image:url(/static/images/extjs/vista/s.gif);
+	border:0 none;
+}
+.x-dlg div.x-resizable-handle-west{
+	background-image:url(/static/images/extjs/vista/s.gif);
+	border:0 none;
+}
+.x-dlg div.x-resizable-handle-southeast{
+	background-image:url(/static/images/extjs/vista/s.gif);
+	background-position: bottom right;
+	width:8px;
+	height:8px;
+	border:0;
+}
+.x-dlg div.x-resizable-handle-southwest{
+	background-image:url(/static/images/extjs/vista/s.gif);
+	background-position: top right;
+	margin-left:1px;
+	margin-bottom:1px;
+	border:0;
+}
+.x-dlg div.x-resizable-handle-north{
+	background-image:url(/static/images/extjs/vista/s.gif);
+	border:0 none;
+}
+
+/* QuickTips */
+
+.x-tip .x-tip-top {
+	background-image: url(/static/images/extjs/vista/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-top-left {
+	background-image: url(/static/images/extjs/vista/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-top-right {
+	background-image: url(/static/images/extjs/vista/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-ft {
+	background-image: url(/static/images/extjs/vista/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-ft-left {
+	background-image: url(/static/images/extjs/vista/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-ft-right {
+	background-image: url(/static/images/extjs/vista/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-bd-left {
+	background-image: url(/static/images/extjs/vista/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-bd-right {
+	background-image: url(/static/images/extjs/vista/qtip/tip-sprite.gif);
+}
+
+.x-tip .x-tip-bd-inner {
+    padding:2px;
+}
+
+/* BorderLayout */
+.x-layout-container{
+    background:#4f4f4f;
+}
+.x-layout-collapsed{
+    background-color:#9f9f9f;
+	 border:1px solid #4c535c;
+}
+.x-layout-collapsed-over{
+	 background-color:#bfbfbf;
+}
+.x-layout-panel{
+    border:1px solid #4c535c;
+}
+.x-layout-nested-layout .x-layout-panel {
+	  border:0 none;
+}
+.x-layout-split{
+    background-color:#f3f2e7;
+}
+.x-layout-panel-hd{
+    background-image: url(/static/images/extjs/vista/layout/panel-title-bg.gif);
+    border-bottom:1px solid #b5bac1;
+    color:white;
+}
+.x-layout-panel-hd-text{
+	color:white;
+}
+.x-layout-tools-button-over{
+    border:1px solid #4c535c;
+	 background:#9f9f9f url(/static/images/extjs/vista/layout/panel-title-bg.gif) repeat-x;
+}
+.x-layout-close{
+    background-image:url(/static/images/extjs/vista/layout/tab-close.gif);
+}
+
+.x-layout-stick{
+    background-image:url(/static/images/extjs/vista/layout/stick.gif);
+}
+.x-layout-collapse-west,.x-layout-expand-east{
+    background-image:url(/static/images/extjs/vista/layout/collapse.gif);
+}
+.x-layout-expand-west,.x-layout-collapse-east{
+    background-image:url(/static/images/extjs/vista/layout/expand.gif);
+}
+.x-layout-collapse-north,.x-layout-expand-south{
+    background-image:url(/static/images/extjs/vista/layout/ns-collapse.gif);
+}
+.x-layout-expand-north,.x-layout-collapse-south{
+    background-image:url(/static/images/extjs/vista/layout/ns-expand.gif);
+}
+.x-layout-split-h{
+    background:#9f9f9f;
+}
+.x-layout-split-v{
+    background:#9f9f9f;
+}
+.x-layout-panel .x-tabs-wrap{
+    background:#4f4f4f;
+}
+.x-layout-nested-layout .x-layout-panel-north {
+	  border-bottom:1px solid #4c535c;
+}
+.x-layout-nested-layout .x-layout-panel-south {
+	  border-top:1px solid #4c535c;
+}
+.x-layout-nested-layout .x-layout-panel-east {
+	  border-left:1px solid #4c535c;
+}
+.x-layout-nested-layout .x-layout-panel-west {
+	  border-right:1px solid #4c535c;
+}
+.x-layout-panel-dragover {
+	border: 2px solid #4c535c;
+}
+.x-layout-panel-proxy {
+	background-image: url(/static/images/extjs/vista/layout/gradient-bg.gif);
+	background-color:#f3f2e7;
+	border:1px dashed #4c535c;
+}
+
+.x-layout-container .x-layout-tabs-body{
+	border:0 none;
+}
+/** Resizable */
+
+.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
+    background:url(/static/images/extjs/vista/sizer/e-handle.gif);
+	 background-position: left;
+}
+.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-west{
+    background:url(/static/images/extjs/vista/sizer/e-handle.gif);
+	 background-position: left;
+}
+.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
+    background:url(/static/images/extjs/vista/sizer/s-handle.gif);
+    background-position: top;
+}
+.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-north{
+    background:url(/static/images/extjs/vista/sizer/s-handle.gif);
+    background-position: top;
+}
+.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
+    background:url(/static/images/extjs/vista/sizer/se-handle.gif);
+    background-position: top left;
+}
+.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{
+    background:url(/static/images/extjs/vista/sizer/nw-handle.gif);
+    background-position:bottom right;
+}
+.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{
+    background:url(/static/images/extjs/vista/sizer/ne-handle.gif);
+    background-position: bottom left;
+}
+.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{
+    background:url(/static/images/extjs/vista/sizer/sw-handle.gif);
+    background-position: top right;
+}
+.x-resizable-proxy{
+    border: 1px dashed #615e55;
+}
+
+/** Toolbar */
+.x-toolbar{
+	border:0 none;
+	background: #efefe3 url(/static/images/extjs/vista/toolbar/gray-bg.gif) repeat-x;
+	padding:3px;
+}
+.x-toolbar .ytb-button-over{
+	border:1px solid transparent;
+	border-bottom:1px solid #bbbbbb;
+	border-top:1px solid #eeeeee;
+	background:#9f9f9f url(/static/images/extjs/vista/grid/grid-vista-hd.gif) repeat-x;
+}
+
+.x-paging-info {
+    color:#000;
+}
+/* grid */
+.x-grid-topbar .x-toolbar{
+	border:0;
+	border-bottom:1px solid #555;
+}
+.x-grid-bottombar .x-toolbar{
+	border:0;
+	border-top:1px solid #555;
+}
+.x-grid-locked .x-grid-body td {
+	background: #fafafa;
+	border-right: 1px solid #e1e1e1;
+	border-bottom: 1px solid #e1e1e1 !important;
+}
+.x-grid-locked .x-grid-body td .x-grid-cell-inner {
+	border-top:0 none;
+}
+.x-grid-locked .x-grid-row-alt td{
+	background: #f1f1f1;
+}
+.x-grid-locked .x-grid-row-selected td{
+	color: #fff !important;
+	background-color: #316ac5 !important;
+}
+.x-grid-hd{
+	border-bottom:0;
+	background:none;
+}
+.x-grid-hd-row{
+	height:auto;
+}
+.x-grid-split {
+	background-image: url(/static/images/extjs/vista/grid/grid-split.gif);
+}
+.x-grid-header{
+	background: url(/static/images/extjs/vista/grid/grid-vista-hd.gif);
+	border:0 none;
+    border-bottom:1px solid #555;
+}
+.x-grid-row-alt{
+	background-color: #f5f5f5;
+}
+.x-grid-row-over td{
+	background:#eeeeee;
+}
+.x-grid-col {
+	border-right: 1px solid #eee;
+	border-bottom: 1px solid #eee;
+}
+.x-grid-header .x-grid-hd-inner {
+	padding-bottom: 1px;
+}
+.x-grid-header  .x-grid-hd-text {
+	padding-bottom: 3px;
+    color:#333333;
+}
+.x-grid-hd-over .x-grid-hd-inner {
+	border-bottom: 1px solid #555;
+	padding-bottom: 0;
+}
+.x-grid-hd-over .x-grid-hd-text {
+	background-color: #fafafa;
+	border-bottom: 1px solid #555;
+	padding-bottom: 2px;
+}
+.x-grid-header .sort-asc .x-grid-hd-inner, .x-grid-header .sort-desc .x-grid-hd-inner {
+	border-bottom: 1px solid #555;
+	padding-bottom: 0;
+}
+.x-grid-header .sort-asc  .x-grid-hd-text, .x-grid-header .sort-desc .x-grid-hd-text {
+	border-bottom: 1px solid #3b5a82;
+	padding-bottom: 2px;
+}
+.x-dd-drag-proxy .x-grid-hd-inner{
+	background: url(/static/images/extjs/vista/grid/grid-vista-hd.gif) repeat-x;
+	height:22px;
+	width:120px;
+}
+.x-props-grid .x-grid-col-name{
+	 background-color: #eee;
+}
+/* toolbar */
+.x-toolbar .ytb-sep{
+	background-image: url(/static/images/extjs/vista/grid/grid-split.gif);
+}
+
+.x-toolbar .x-btn-over .x-btn-left{
+	background:url(/static/images/extjs/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 0px;
+}
+.x-toolbar .x-btn-over .x-btn-right{
+	background:url(/static/images/extjs/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
+}
+.x-toolbar .x-btn-over .x-btn-center{
+	background:url(/static/images/extjs/vista/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
+}
+
+.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
+	background:url(/static/images/extjs/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
+}
+.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
+	background:url(/static/images/extjs/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
+}
+.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
+	background:url(/static/images/extjs/vista/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
+}
+
+/* combo box */
+.x-combo-list {
+    border:1px solid #999;
+    background:#dddddd;
+}
+.x-combo-list-hd {
+    background-image: url(/static/images/extjs/vista/layout/panel-title-bg.gif);
+    border-bottom:1px solid #b5bac1;
+    color:white;
+}
+.x-resizable-pinned .x-combo-list-inner {
+    border-bottom:1px solid #aaa;
+}
+.x-combo-list .x-combo-selected{
+	background:#ddd !important;
+    border:1px solid #aaa;
+}

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/aero-close-over.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/aero-close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-center.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-left.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/bg-right.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/collapse-over.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/e-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/expand-over.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/hd-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/s-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/se-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/basic-dialog/w-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/gradient-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-blue-split.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-hrow.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-split.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/grid-vista-hd.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/pspbrwse.jbf
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort-col-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort_asc.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/grid/sort_desc.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/gradient-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/ns-collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/ns-expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-title-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/panel-title-light-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/tab-close-on.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/layout/tab-close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/qtip/bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/s.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/e-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/e-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/ne-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/ne-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/nw-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/nw-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/s-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/s-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/se-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/se-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/sw-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/sizer/sw-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-inactive-left-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-inactive-right-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-left-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-btm-right-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-bg.png
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/tabs/tab-strip-btm-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/toolbar/bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/aero/toolbar/tb-btn-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/btn-arrow.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/btn-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/e-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/hd-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/progress.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/progress2.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/s-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/basic-dialog/se-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/corners-blue.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/corners.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/l-blue.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/l.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/r-blue.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/r.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/tb-blue.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/box/tb.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-add.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-no.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/dd/drop-yes.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/form/date-trigger.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/form/error-tip-corners.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/form/exclamation.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/form/text-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/form/trigger.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/gradient-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/Thumbs.db
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/arrow-left-white.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/arrow-right-white.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/col-move-bottom.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/col-move-top.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/dirty.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/done.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/drop-no.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/drop-yes.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/footer-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-blue-hd.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-blue-split.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-hrow.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-loading.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-split.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/grid-vista-hd.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-asc.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-desc.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-lock.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-lock.png
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-unlock.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/hmenu-unlock.png
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/invalid_line.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/loading.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/mso-hd.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/nowait.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-first-disabled.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-first.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-last-disabled.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-last.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-next-disabled.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-next.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-prev-disabled.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/page-prev.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/pick-button.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/refresh.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/sort_asc.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/sort_desc.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/grid/wait.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/gradient-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/ns-collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/ns-expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-title-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/panel-title-light-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/stick.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/stuck.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/tab-close-on.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/layout/tab-close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/menu/checked.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/menu/group-checked.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/menu/menu-parent.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/menu/menu.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/menu/unchecked.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/qtip/bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/qtip/close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/qtip/tip-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/s.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shadow-lr.png
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shadow.png
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shared/calendar.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shared/left-btn.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shared/right-btn.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/shared/warning.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/e-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/e-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/ne-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/ne-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/nw-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/nw-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/s-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/s-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/se-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/se-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/square.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/sw-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/sizer/sw-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-inactive-left-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-inactive-right-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-left-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-btm-right-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tabs/tab-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-arrow-light.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-arrow.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/btn-over-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/gray-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/tb-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/toolbar/tb-btn-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-add.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-between.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-no.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-over.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-under.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/drop-yes.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-minus-nl.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-minus.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-plus-nl.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end-plus.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-end.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-line.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-minus-nl.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-minus.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-plus-nl.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow-plus.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/elbow.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/folder-open.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/folder.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/leaf.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/loading.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/default/tree/s.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/dlg-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/e-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/hd-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/s-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/basic-dialog/se-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/gradient-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/grid/grid-hrow.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/gradient-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/ns-collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/ns-expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-title-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/panel-title-light-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/stick.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/tab-close-on.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/layout/tab-close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/menu/checked.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/menu/group-checked.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/menu/menu-parent.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/menu/menu.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/menu/unchecked.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/qtip/bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/qtip/tip-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/s.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/e-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/e-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/ne-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/ne-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/nw-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/nw-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/s-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/s-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/se-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/se-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/sw-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/sizer/sw-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-inactive-left-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-inactive-right-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-left-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-btm-right-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/tabs/tab-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/toolbar/gray-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/gray/toolbar/tb-btn-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-center.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-left.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/bg-right.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/dlg-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/e-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/hd-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/s-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/se-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/basic-dialog/w-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/gradient-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/grid/grid-split.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/grid/grid-vista-hd.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/gradient-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/ns-collapse.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/ns-expand.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-title-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/panel-title-light-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/stick.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/tab-close-on.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/layout/tab-close.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/qtip/bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/qtip/tip-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/s.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/e-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/e-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/ne-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/ne-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/nw-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/nw-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/s-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/s-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/se-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/se-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/sw-handle-dark.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/sizer/sw-handle.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-inactive-left-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-inactive-right-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-left-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-btm-right-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/tabs/tab-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/toolbar/gray-bg.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/images/extjs/vista/toolbar/tb-btn-sprite.gif
==============================================================================
Binary file. No diff available.

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/jquery/ext-jquery-adapter.js
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/jquery/ext-jquery-adapter.js	Mon May  7 16:28:32 2007
@@ -0,0 +1,12 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+Ext={};window["undefined"]=window["undefined"];Ext.apply=function(o,c,_3){if(_3){Ext.apply(o,_3);}if(o&&c&&typeof c=="object"){for(var p in c){o[p]=c[p];}}return o;};(function(){var _5=0;var ua=navigator.userAgent.toLowerCase();var _7=document.compatMode=="CSS1Compat",_8=ua.indexOf("opera")>-1,_9=(/webkit|khtml/).test(ua),_a=ua.indexOf("msie")>-1,_b=ua.indexOf("msie 7")>-1,_c=!_9&&ua.indexOf("gecko")>-1,_d=_a&&!_7,_e=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),_f=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1);if(_a&&!_b){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}Ext.apply(Ext,{isStrict:_7,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;},id:function(el,_14){_14=_14||"ext-gen";el=Ext.getDom(el);var id=_14+(++_5);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];}};return function(sc,sp,_1b){var F=function(){},scp,spp=sp.prototype;F.prototype=spp;scp=sc.prototype=new F();scp.constructor=sc;sc.superclass=spp;if(spp.constructor==Object.prototype.constructor){spp.constructor=sp;}sc.override=function(o){Ext.override(sc,o);};scp.override=io;Ext.override(sc,_1b);return sc;};}(),override:function(_20,_21){if(_21){var p=_20.prototype;for(var _23 in _21){p[_23]=_21[_23];}}},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];var _2e=typeof ov;if(_2e=="undefined"){buf.push(encodeURIComponent(key),"=&");}else{if(_2e!="function"&&_2e!="object"){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov),"&");}else{if(ov instanceof Array){for(var i=0,len=ov.length;i<len;i++){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov[i]===undefined?"":ov[i]),"&");}}}}}buf.pop();return buf.join("");},urlDecode:function(_31,_32){if(!_31||!_31.length){return {};}var obj={};var _34=_31.split("&");var _35,_36,_37;for(var i=0,len=_34.length;i<len;i++){_35=_34[i].split("=");_36=_35[0];_37=_35[1];if(_32!==true){if(typeof obj[_36]=="undefined"){obj[_36]=_37;}else{if(typeof obj[_36]=="string"){obj[_36]=[obj[_36]];obj[_36].push(_37);}else{obj[_36].push(_37);}}}else{obj[_36]=_37;}}return obj;},each:function(_3a,fn,_3c){if(typeof _3a.length=="undefined"||typeof _3a=="string"){_3a=[_3a];}for(var i=0,len=_3a.length;i<len;i++){if(fn.call(_3c||_3a[i],_3a[i],i,_3a)===false){return i;}}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(a instanceof Array){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,_46,_47,_48){if(typeof cb=="function"){if(_48){cb.defer(_48,_46,_47||[]);}else{cb.apply(_46,_47||[]);}}},getDom:function(el){if(!el){return null;}return el.dom?el.dom:(typeof el=="string"?document.getElementById(el):el);},num:function(v,_4b){if(typeof v!="number"){return _4b;}return v;},isOpera:_8,isSafari:_9,isIE:_a,isIE7:_b,isGecko:_c,isBorderBox:_d,isWindows:_e,isMac:_f,useShims:((_a&&!_b)||(_c&&_f))});})();Ext.namespace("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib");Ext.apply(Function.prototype,{createCallback:function(){var _4c=arguments;var _4d=this;return function(){return _4d.apply(window,_4c);};},createDelegate:function(obj,_4f,_50){var _51=this;return function(){var _52=_4f||arguments;if(_50===true){_52=Array.prototype.slice.call(arguments,0);_52=_52.concat(_4f);}else{if(typeof _50=="number"){_52=Array.prototype.slice.call(arguments,0);var _53=[_50,0].concat(_4f);Array.prototype.splice.apply(_52,_53);}}return _51.apply(obj||window,_52);};},defer:function(_54,obj,_56,_57){var fn=this.createDelegate(obj,_56,_57);if(_54){return setTimeout(fn,_54);}fn();return 0;},createSequence:function(fcn,_5a){if(typeof fcn!="function"){return this;}var _5b=this;return function(){var _5c=_5b.apply(this||window,arguments);fcn.apply(_5a||this||window,arguments);return _5c;};},createInterceptor:function(fcn,_5e){if(typeof fcn!="function"){return this;}var _5f=this;return function(){fcn.target=this;fcn.method=_5f;if(fcn.apply(_5e||this||window,arguments)===false){return;}return _5f.apply(this||window,arguments);};}});Ext.applyIf(String,{escape:function(_60){return _60.replace(/('|\\)/g,"\\$1");},leftPad:function(val,_62,ch){var _64=new String(val);if(ch==null){ch=" ";}while(_64.length<_62){_64=ch+_64;}return _64;},format:function(_65){var _66=Array.prototype.slice.call(arguments,1);return _65.replace(/\{(\d+)\}/g,function(m,i){return _66[i];});}});String.prototype.toggle=function(_69,_6a){return this==_69?_6a:_69;};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 _71=this.indexOf(o);if(_71!=-1){this.splice(_71,1);}}});Date.prototype.getElapsed=function(_72){return Math.abs((_72||new Date()).getTime()-this.getTime());};
+
+if(typeof jQuery=="undefined"){throw "Unable to load Ext, jQuery not found.";}(function(){Ext.lib.Dom={getViewWidth:function(_1){return _1?Math.max(jQuery(document).width(),jQuery(window).width()):jQuery(window).width();},getViewHeight:function(_2){return _2?Math.max(jQuery(document).height(),jQuery(window).height()):jQuery(window).height();},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 _5=c.parentNode;while(_5){if(_5==p){return true;}else{if(!_5.tagName||_5.tagName.toUpperCase()=="HTML"){return false;}}_5=_5.parentNode;}return false;}}},getRegion:function(el){return Ext.lib.Region.getRegion(el);},getY:function(el){return jQuery(el).offset().top;},getX:function(el){return jQuery(el).offset().left;},getXY:function(el){var o=jQuery(el).offset();return [o.left,o.top];},setXY:function(el,xy){el=Ext.fly(el,"_setXY");el.position();var _d=el.translatePoints(xy);if(xy[0]!==false){el.dom.style.left=_d.left+"px";}if(xy[1]!==false){el.dom.style.top=_d.top+"px";}},setX:function(el,x){this.setXY(el,[x,false]);},setY:function(el,y){this.setXY(el,[false,y]);}};Ext.lib.Event={getPageX:function(e){e=e.browserEvent||e;return e.pageX;},getPageY:function(e){e=e.browserEvent||e;return e.pageY;},getXY:function(e){e=e.browserEvent||e;return [e.pageX,e.pageY];},getTarget:function(e){return e.target;},on:function(el,_17,fn,_19,_1a){jQuery(el).bind(_17,fn);},un:function(el,_1c,fn){jQuery(el).unbind(_1c,fn);},purgeElement:function(el){jQuery(el).unbind();},preventDefault:function(e){e=e.browserEvent||e;e.preventDefault();},stopPropagation:function(e){e=e.browserEvent||e;e.stopPropagation();},stopEvent:function(e){e=e.browserEvent||e;e.preventDefault();e.stopPropagation();},onAvailable:function(id,fn,_24){var _25=new Date();var f=function(){if(_25.getElapsed()>10000){clearInterval(iid);}var el=document.getElementById(id);if(el){clearInterval(iid);fn.call(_24||window,el);}};var iid=setInterval(f,50);},resolveTextNode:function(_29){if(_29&&3==_29.nodeType){return _29.parentNode;}else{return _29;}},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);}};Ext.lib.Ajax=function(){var _2c=function(cb){return function(xhr,_2f){if((_2f=="error"||_2f=="timeout")&&cb.failure){cb.failure.call(cb.scope||window,{responseText:xhr.responseText,responseXML:xhr.responseXML,argument:cb.argument});}else{if(cb.success){cb.success.call(cb.scope||window,{responseText:xhr.responseText,responseXML:xhr.responseXML,argument:cb.argument});}}};};return {request:function(_30,uri,cb,_33){jQuery.ajax({type:_30,url:uri,data:_33,timeout:cb.timeout,complete:_2c(cb)});},formRequest:function(_34,uri,cb,_37,_38,_39){jQuery.ajax({type:"POST",url:uri,data:jQuery(_34).formSerialize()+(_37?"&"+_37:""),timeout:cb.timeout,complete:_2c(cb)});},isCallInProgress:function(_3a){return false;},abort:function(_3b){return false;},serializeForm:function(_3c){return jQuery(_3c.dom||_3c).formSerialize();}};}();Ext.lib.Anim=function(){var _3d=function(cb,_3f){var _40=true;return {stop:function(_41){},isAnimated:function(){return _40;},proxyCallback:function(){_40=false;Ext.callback(cb,_3f);}};};return {scroll:function(el,_43,_44,_45,cb,_47){var _48=_3d(cb,_47);el=Ext.getDom(el);el.scrollLeft=_43.to[0];el.scrollTop=_43.to[1];_48.proxyCallback();return _48;},motion:function(el,_4a,_4b,_4c,cb,_4e){return this.run(el,_4a,_4b,_4c,cb,_4e);},color:function(el,_50,_51,_52,cb,_54){var _55=_3d(cb,_54);_55.proxyCallback();return _55;},run:function(el,_57,_58,_59,cb,_5b,_5c){var _5d=_3d(cb,_5b);var o={};for(var k in _57){switch(k){case "points":var by,pts,e=Ext.fly(el,"_animrun");e.position();if(by=_57.points.by){var xy=e.getXY();pts=e.translatePoints([xy[0]+by[0],xy[1]+by[1]]);}else{pts=e.translatePoints(_57.points.to);}o.left=pts.left;o.top=pts.top;if(!parseInt(e.getStyle("left"),10)){e.setLeft(0);}if(!parseInt(e.getStyle("top"),10)){e.setTop(0);}break;case "width":o.width=_57.width.to;break;case "height":o.height=_57.height.to;break;case "opacity":o.opacity=_57.opacity.to;break;default:o[k]=_57[k].to;break;}}jQuery(el).animate(o,_58*1000,undefined,_5d.proxyCallback);return _5d;}};}();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(_68){return (_68.left>=this.left&&_68.right<=this.right&&_68.top>=this.top&&_68.bottom<=this.bottom);},getArea:function(){return ((this.bottom-this.top)*(this.right-this.left));},intersect:function(_69){var t=Math.max(this.top,_69.top);var r=Math.min(this.right,_69.right);var b=Math.min(this.bottom,_69.bottom);var l=Math.max(this.left,_69.left);if(b>=t&&r>=l){return new Ext.lib.Region(t,r,b,l);}else{return null;}},union:function(_6e){var t=Math.min(this.top,_6e.top);var r=Math.max(this.right,_6e.right);var b=Math.max(this.bottom,_6e.bottom);var l=Math.min(this.left,_6e.left);return new Ext.lib.Region(t,r,b,l);},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(x instanceof Array){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();if(Ext.isIE){jQuery(window).unload(function(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;});}})();
+

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/prototype/ext-prototype-adapter.js
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/prototype/ext-prototype-adapter.js	Mon May  7 16:28:32 2007
@@ -0,0 +1,12 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+Ext={};window["undefined"]=window["undefined"];Ext.apply=function(o,c,_3){if(_3){Ext.apply(o,_3);}if(o&&c&&typeof c=="object"){for(var p in c){o[p]=c[p];}}return o;};(function(){var _5=0;var ua=navigator.userAgent.toLowerCase();var _7=document.compatMode=="CSS1Compat",_8=ua.indexOf("opera")>-1,_9=(/webkit|khtml/).test(ua),_a=ua.indexOf("msie")>-1,_b=ua.indexOf("msie 7")>-1,_c=!_9&&ua.indexOf("gecko")>-1,_d=_a&&!_7,_e=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),_f=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1);if(_a&&!_b){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}Ext.apply(Ext,{isStrict:_7,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;},id:function(el,_14){_14=_14||"ext-gen";el=Ext.getDom(el);var id=_14+(++_5);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];}};return function(sc,sp,_1b){var F=function(){},scp,spp=sp.prototype;F.prototype=spp;scp=sc.prototype=new F();scp.constructor=sc;sc.superclass=spp;if(spp.constructor==Object.prototype.constructor){spp.constructor=sp;}sc.override=function(o){Ext.override(sc,o);};scp.override=io;Ext.override(sc,_1b);return sc;};}(),override:function(_20,_21){if(_21){var p=_20.prototype;for(var _23 in _21){p[_23]=_21[_23];}}},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];var _2e=typeof ov;if(_2e=="undefined"){buf.push(encodeURIComponent(key),"=&");}else{if(_2e!="function"&&_2e!="object"){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov),"&");}else{if(ov instanceof Array){for(var i=0,len=ov.length;i<len;i++){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov[i]===undefined?"":ov[i]),"&");}}}}}buf.pop();return buf.join("");},urlDecode:function(_31,_32){if(!_31||!_31.length){return {};}var obj={};var _34=_31.split("&");var _35,_36,_37;for(var i=0,len=_34.length;i<len;i++){_35=_34[i].split("=");_36=_35[0];_37=_35[1];if(_32!==true){if(typeof obj[_36]=="undefined"){obj[_36]=_37;}else{if(typeof obj[_36]=="string"){obj[_36]=[obj[_36]];obj[_36].push(_37);}else{obj[_36].push(_37);}}}else{obj[_36]=_37;}}return obj;},each:function(_3a,fn,_3c){if(typeof _3a.length=="undefined"||typeof _3a=="string"){_3a=[_3a];}for(var i=0,len=_3a.length;i<len;i++){if(fn.call(_3c||_3a[i],_3a[i],i,_3a)===false){return i;}}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(a instanceof Array){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,_46,_47,_48){if(typeof cb=="function"){if(_48){cb.defer(_48,_46,_47||[]);}else{cb.apply(_46,_47||[]);}}},getDom:function(el){if(!el){return null;}return el.dom?el.dom:(typeof el=="string"?document.getElementById(el):el);},num:function(v,_4b){if(typeof v!="number"){return _4b;}return v;},isOpera:_8,isSafari:_9,isIE:_a,isIE7:_b,isGecko:_c,isBorderBox:_d,isWindows:_e,isMac:_f,useShims:((_a&&!_b)||(_c&&_f))});})();Ext.namespace("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib");Ext.apply(Function.prototype,{createCallback:function(){var _4c=arguments;var _4d=this;return function(){return _4d.apply(window,_4c);};},createDelegate:function(obj,_4f,_50){var _51=this;return function(){var _52=_4f||arguments;if(_50===true){_52=Array.prototype.slice.call(arguments,0);_52=_52.concat(_4f);}else{if(typeof _50=="number"){_52=Array.prototype.slice.call(arguments,0);var _53=[_50,0].concat(_4f);Array.prototype.splice.apply(_52,_53);}}return _51.apply(obj||window,_52);};},defer:function(_54,obj,_56,_57){var fn=this.createDelegate(obj,_56,_57);if(_54){return setTimeout(fn,_54);}fn();return 0;},createSequence:function(fcn,_5a){if(typeof fcn!="function"){return this;}var _5b=this;return function(){var _5c=_5b.apply(this||window,arguments);fcn.apply(_5a||this||window,arguments);return _5c;};},createInterceptor:function(fcn,_5e){if(typeof fcn!="function"){return this;}var _5f=this;return function(){fcn.target=this;fcn.method=_5f;if(fcn.apply(_5e||this||window,arguments)===false){return;}return _5f.apply(this||window,arguments);};}});Ext.applyIf(String,{escape:function(_60){return _60.replace(/('|\\)/g,"\\$1");},leftPad:function(val,_62,ch){var _64=new String(val);if(ch==null){ch=" ";}while(_64.length<_62){_64=ch+_64;}return _64;},format:function(_65){var _66=Array.prototype.slice.call(arguments,1);return _65.replace(/\{(\d+)\}/g,function(m,i){return _66[i];});}});String.prototype.toggle=function(_69,_6a){return this==_69?_6a:_69;};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 _71=this.indexOf(o);if(_71!=-1){this.splice(_71,1);}}});Date.prototype.getElapsed=function(_72){return Math.abs((_72||new Date()).getTime()-this.getTime());};
+
+(function(){var _1;Ext.lib.Dom={getViewWidth:function(_2){return _2?this.getDocumentWidth():this.getViewportWidth();},getViewHeight:function(_3){return _3?this.getDocumentHeight():this.getViewportHeight();},getDocumentHeight:function(){var _4=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;return Math.max(_4,this.getViewportHeight());},getDocumentWidth:function(){var _5=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;return Math.max(_5,this.getViewportWidth());},getViewportHeight:function(){var _6=self.innerHeight;var _7=document.compatMode;if((_7||Ext.isIE)&&!Ext.isOpera){_6=(_7=="CSS1Compat")?document.documentElement.clientHeight:document.body.clientHeight;}return _6;},getViewportWidth:function(){var _8=self.innerWidth;var _9=document.compatMode;if(_9||Ext.isIE){_8=(_9=="CSS1Compat")?document.documentElement.clientWidth:document.body.clientWidth;}return _8;},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 _c=c.parentNode;while(_c){if(_c==p){return true;}else{if(!_c.tagName||_c.tagName.toUpperCase()=="HTML"){return false;}}_c=_c.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,_14,bd=document.body;el=Ext.getDom(el);if(el.getBoundingClientRect){b=el.getBoundingClientRect();_14=fly(document).getScroll();return [b.left+_14.left,b.top+_14.top];}else{var x=el.offsetLeft,y=el.offsetTop;p=el.offsetParent;var _18=false;if(p!=el){while(p){x+=p.offsetLeft;y+=p.offsetTop;if(Ext.isSafari&&!_18&&fly(p).getStyle("position")=="absolute"){_18=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&&(_18||fly(el).getStyle("position")=="absolute")){x-=bd.offsetLeft;y-=bd.offsetTop;}}p=el.parentNode;while(p&&p!=bd){if(!Ext.isOpera||(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={getPageX:function(e){return Event.pointerX(e.browserEvent||e);},getPageY:function(e){return Event.pointerY(e.browserEvent||e);},getXY:function(e){e=e.browserEvent||e;return [Event.pointerX(e),Event.pointerY(e)];},getTarget:function(e){return Event.element(e.browserEvent||e);},resolveTextNode:function(_26){if(_26&&3==_26.nodeType){return _26.parentNode;}else{return _26;}},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);},on:function(el,_2a,fn){Event.observe(el,_2a,fn,false);},un:function(el,_2d,fn){Event.stopObserving(el,_2d,fn,false);},purgeElement:function(el){},preventDefault:function(e){e=e.browserEvent||e;if(e.preventDefault){e.preventDefault();}else{e.returnValue=false;}},stopPropagation:function(e){e=e.browserEvent||e;if(e.stopPropagation){e.stopPropagation();}else{e.cancelBubble=true;}},stopEvent:function(e){Event.stop(e.browserEvent||e);},onAvailable:function(el,fn,_35,_36){var _37=new Date(),iid;var f=function(){if(_37.getElapsed()>10000){clearInterval(iid);}var el=document.getElementById(id);if(el){clearInterval(iid);fn.call(_35||window,el);}};iid=setInterval(f,50);}};Ext.lib.Ajax=function(){var _3b=function(cb){return cb.success?function(xhr){cb.success.call(cb.scope||window,{responseText:xhr.responseText,responseXML:xhr.responseXML,argument:cb.argument});}:Ext.emptyFn;};var _3e=function(cb){return cb.failure?function(xhr){cb.failure.call(cb.scope||window,{responseText:xhr.responseText,responseXML:xhr.responseXML,argument:cb.argument});}:Ext.emptyFn;};return {request:function(_41,uri,cb,_44){new Ajax.Request(uri,{method:_41,parameters:_44||"",timeout:cb.timeout,onSuccess:_3b(cb),onFailure:_3e(cb)});},formRequest:function(_45,uri,cb,_48,_49,_4a){new Ajax.Request(uri,{method:"POST",parameters:Form.serialize(_45)+(_48?"&"+_48:""),timeout:cb.timeout,onSuccess:_3b(cb),onFailure:_3e(cb)});},isCallInProgress:function(_4b){return false;},abort:function(_4c){return false;},serializeForm:function(_4d){return Form.serialize(_4d.dom||_4d,true);}};}();Ext.lib.Anim=function(){var _4e={easeOut:function(pos){return 1-Math.pow(1-pos,2);},easeIn:function(pos){return 1-Math.pow(1-pos,2);}};var _51=function(cb,_53){return {stop:function(_54){this.effect.cancel();},isAnimated:function(){return this.effect.state=="running";},proxyCallback:function(){Ext.callback(cb,_53);}};};return {scroll:function(el,_56,_57,_58,cb,_5a){var _5b=_51(cb,_5a);el=Ext.getDom(el);el.scrollLeft=_56.to[0];el.scrollTop=_56.to[1];_5b.proxyCallback();return _5b;},motion:function(el,_5d,_5e,_5f,cb,_61){return this.run(el,_5d,_5e,_5f,cb,_61);},color:function(el,_63,_64,_65,cb,_67){return this.run(el,_63,_64,_65,cb,_67);},run:function(el,_69,_6a,_6b,cb,_6d,_6e){var o={};for(var k in _69){switch(k){case "points":var by,pts,e=Ext.fly(el,"_animrun");e.position();if(by=_69.points.by){var xy=e.getXY();pts=e.translatePoints([xy[0]+by[0],xy[1]+by[1]]);}else{pts=e.translatePoints(_69.points.to);}o.left=pts.left+"px";o.top=pts.top+"px";break;case "width":o.width=_69.width.to+"px";break;case "height":o.height=_69.height.to+"px";break;case "opacity":o.opacity=String(_69.opacity.to);break;default:o[k]=String(_69[k].to);break;}}var _75=_51(cb,_6d);_75.effect=new Effect.Morph(Ext.id(el),{duration:_6a,afterFinish:_75.proxyCallback,transition:_4e[_6b]||Effect.Transitions.linear,style:o});return _75;}};}();function fly(el){if(!_1){_1=new Ext.Element.Flyweight();}_1.dom=el;return _1;}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(_7b){return (_7b.left>=this.left&&_7b.right<=this.right&&_7b.top>=this.top&&_7b.bottom<=this.bottom);},getArea:function(){return ((this.bottom-this.top)*(this.right-this.left));},intersect:function(_7c){var t=Math.max(this.top,_7c.top);var r=Math.min(this.right,_7c.right);var b=Math.min(this.bottom,_7c.bottom);var l=Math.max(this.left,_7c.left);if(b>=t&&r>=l){return new Ext.lib.Region(t,r,b,l);}else{return null;}},union:function(_81){var t=Math.min(this.top,_81.top);var r=Math.max(this.right,_81.right);var b=Math.max(this.bottom,_81.bottom);var l=Math.min(this.left,_81.left);return new Ext.lib.Region(t,r,b,l);},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(x instanceof Array){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();if(Ext.isIE){Event.observe(window,"unload",function(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;});}})();
+

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/yui/ext-yui-adapter.js
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/yui/ext-yui-adapter.js	Mon May  7 16:28:32 2007
@@ -0,0 +1,12 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+Ext={};window["undefined"]=window["undefined"];Ext.apply=function(o,c,_3){if(_3){Ext.apply(o,_3);}if(o&&c&&typeof c=="object"){for(var p in c){o[p]=c[p];}}return o;};(function(){var _5=0;var ua=navigator.userAgent.toLowerCase();var _7=document.compatMode=="CSS1Compat",_8=ua.indexOf("opera")>-1,_9=(/webkit|khtml/).test(ua),_a=ua.indexOf("msie")>-1,_b=ua.indexOf("msie 7")>-1,_c=!_9&&ua.indexOf("gecko")>-1,_d=_a&&!_7,_e=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),_f=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1);if(_a&&!_b){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}Ext.apply(Ext,{isStrict:_7,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;},id:function(el,_14){_14=_14||"ext-gen";el=Ext.getDom(el);var id=_14+(++_5);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];}};return function(sc,sp,_1b){var F=function(){},scp,spp=sp.prototype;F.prototype=spp;scp=sc.prototype=new F();scp.constructor=sc;sc.superclass=spp;if(spp.constructor==Object.prototype.constructor){spp.constructor=sp;}sc.override=function(o){Ext.override(sc,o);};scp.override=io;Ext.override(sc,_1b);return sc;};}(),override:function(_20,_21){if(_21){var p=_20.prototype;for(var _23 in _21){p[_23]=_21[_23];}}},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];var _2e=typeof ov;if(_2e=="undefined"){buf.push(encodeURIComponent(key),"=&");}else{if(_2e!="function"&&_2e!="object"){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov),"&");}else{if(ov instanceof Array){for(var i=0,len=ov.length;i<len;i++){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov[i]===undefined?"":ov[i]),"&");}}}}}buf.pop();return buf.join("");},urlDecode:function(_31,_32){if(!_31||!_31.length){return {};}var obj={};var _34=_31.split("&");var _35,_36,_37;for(var i=0,len=_34.length;i<len;i++){_35=_34[i].split("=");_36=_35[0];_37=_35[1];if(_32!==true){if(typeof obj[_36]=="undefined"){obj[_36]=_37;}else{if(typeof obj[_36]=="string"){obj[_36]=[obj[_36]];obj[_36].push(_37);}else{obj[_36].push(_37);}}}else{obj[_36]=_37;}}return obj;},each:function(_3a,fn,_3c){if(typeof _3a.length=="undefined"||typeof _3a=="string"){_3a=[_3a];}for(var i=0,len=_3a.length;i<len;i++){if(fn.call(_3c||_3a[i],_3a[i],i,_3a)===false){return i;}}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(a instanceof Array){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,_46,_47,_48){if(typeof cb=="function"){if(_48){cb.defer(_48,_46,_47||[]);}else{cb.apply(_46,_47||[]);}}},getDom:function(el){if(!el){return null;}return el.dom?el.dom:(typeof el=="string"?document.getElementById(el):el);},num:function(v,_4b){if(typeof v!="number"){return _4b;}return v;},isOpera:_8,isSafari:_9,isIE:_a,isIE7:_b,isGecko:_c,isBorderBox:_d,isWindows:_e,isMac:_f,useShims:((_a&&!_b)||(_c&&_f))});})();Ext.namespace("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib");Ext.apply(Function.prototype,{createCallback:function(){var _4c=arguments;var _4d=this;return function(){return _4d.apply(window,_4c);};},createDelegate:function(obj,_4f,_50){var _51=this;return function(){var _52=_4f||arguments;if(_50===true){_52=Array.prototype.slice.call(arguments,0);_52=_52.concat(_4f);}else{if(typeof _50=="number"){_52=Array.prototype.slice.call(arguments,0);var _53=[_50,0].concat(_4f);Array.prototype.splice.apply(_52,_53);}}return _51.apply(obj||window,_52);};},defer:function(_54,obj,_56,_57){var fn=this.createDelegate(obj,_56,_57);if(_54){return setTimeout(fn,_54);}fn();return 0;},createSequence:function(fcn,_5a){if(typeof fcn!="function"){return this;}var _5b=this;return function(){var _5c=_5b.apply(this||window,arguments);fcn.apply(_5a||this||window,arguments);return _5c;};},createInterceptor:function(fcn,_5e){if(typeof fcn!="function"){return this;}var _5f=this;return function(){fcn.target=this;fcn.method=_5f;if(fcn.apply(_5e||this||window,arguments)===false){return;}return _5f.apply(this||window,arguments);};}});Ext.applyIf(String,{escape:function(_60){return _60.replace(/('|\\)/g,"\\$1");},leftPad:function(val,_62,ch){var _64=new String(val);if(ch==null){ch=" ";}while(_64.length<_62){_64=ch+_64;}return _64;},format:function(_65){var _66=Array.prototype.slice.call(arguments,1);return _65.replace(/\{(\d+)\}/g,function(m,i){return _66[i];});}});String.prototype.toggle=function(_69,_6a){return this==_69?_6a:_69;};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 _71=this.indexOf(o);if(_71!=-1){this.splice(_71,1);}}});Date.prototype.getElapsed=function(_72){return Math.abs((_72||new Date()).getTime()-this.getTime());};
+
+if(typeof YAHOO=="undefined"){throw "Unable to load Ext, core YUI utilities (yahoo, dom, event) not found.";}(function(){var E=YAHOO.util.Event;var D=YAHOO.util.Dom;var CN=YAHOO.util.Connect;var ES=YAHOO.util.Easing;var A=YAHOO.util.Anim;var _6;Ext.lib.Dom={getViewWidth:function(_7){return _7?D.getDocumentWidth():D.getViewportWidth();},getViewHeight:function(_8){return _8?D.getDocumentHeight():D.getViewportHeight();},isAncestor:function(_9,_a){return D.isAncestor(_9,_a);},getRegion:function(el){return D.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,_12,bd=document.body;el=Ext.getDom(el);if(el.getBoundingClientRect){b=el.getBoundingClientRect();_12=fly(document).getScroll();return [b.left+_12.left,b.top+_12.top];}else{var x=el.offsetLeft,y=el.offsetTop;p=el.offsetParent;var _16=false;if(p!=el){while(p){x+=p.offsetLeft;y+=p.offsetTop;if(Ext.isSafari&&!_16&&fly(p).getStyle("position")=="absolute"){_16=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&&(_16||fly(el).getStyle("position")=="absolute")){x-=bd.offsetLeft;y-=bd.offsetTop;}}p=el.parentNode;while(p&&p!=bd){if(!Ext.isOpera||(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={getPageX:function(e){return E.getPageX(e.browserEvent||e);},getPageY:function(e){return E.getPageY(e.browserEvent||e);},getXY:function(e){return E.getXY(e.browserEvent||e);},getTarget:function(e){return E.getTarget(e.browserEvent||e);},getRelatedTarget:function(e){return E.getRelatedTarget(e.browserEvent||e);},on:function(el,_26,fn,_28,_29){E.on(el,_26,fn,_28,_29);},un:function(el,_2b,fn){E.removeListener(el,_2b,fn);},purgeElement:function(el){E.purgeElement(el);},preventDefault:function(e){E.preventDefault(e.browserEvent||e);},stopPropagation:function(e){E.stopPropagation(e.browserEvent||e);},stopEvent:function(e){E.stopEvent(e.browserEvent||e);},onAvailable:function(el,fn,_33,_34){return E.onAvailable(el,fn,_33,_34);}};Ext.lib.Ajax={request:function(_35,uri,cb,_38){return CN.asyncRequest(_35,uri,cb,_38);},formRequest:function(_39,uri,cb,_3c,_3d,_3e){CN.setForm(_39,_3d,_3e);return CN.asyncRequest("POST",uri,cb,_3c);},isCallInProgress:function(_3f){return CN.isCallInProgress(_3f);},abort:function(_40){return CN.abort(_40);},serializeForm:function(_41){var d=CN.setForm(_41.dom||_41);CN.resetFormState();return d;}};Ext.lib.Region=YAHOO.util.Region;Ext.lib.Point=YAHOO.util.Point;Ext.lib.Anim={scroll:function(el,_44,_45,_46,cb,_48){this.run(el,_44,_45,_46,cb,_48,YAHOO.util.Scroll);},motion:function(el,_4a,_4b,_4c,cb,_4e){this.run(el,_4a,_4b,_4c,cb,_4e,YAHOO.util.Motion);},color:function(el,_50,_51,_52,cb,_54){this.run(el,_50,_51,_52,cb,_54,YAHOO.util.ColorAnim);},run:function(el,_56,_57,_58,cb,_5a,_5b){_5b=_5b||YAHOO.util.Anim;if(typeof _58=="string"){_58=YAHOO.util.Easing[_58];}var _5c=new _5b(el,_56,_57,_58);_5c.animateX(function(){Ext.callback(cb,_5a);});return _5c;}};function fly(el){if(!_6){_6=new Ext.Element.Flyweight();}_6.dom=el;return _6;}if(Ext.isIE){YAHOO.util.Event.on(window,"unload",function(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;});}if(YAHOO.util.Anim){YAHOO.util.Anim.prototype.animateX=function(_5f,_60){var f=function(){this.onComplete.unsubscribe(f);if(typeof _5f=="function"){_5f.call(_60||this,this);}};this.onComplete.subscribe(f,this,true);this.animate();};}if(YAHOO.util.DragDrop&&Ext.dd.DragDrop){YAHOO.util.DragDrop.defaultPadding=Ext.dd.DragDrop.defaultPadding;YAHOO.util.DragDrop.constrainTo=Ext.dd.DragDrop.constrainTo;}YAHOO.util.Dom.getXY=function(el){var f=function(el){return Ext.lib.Dom.getXY(el);};return YAHOO.util.Dom.batch(el,f,YAHOO.util.Dom,true);};if(YAHOO.util.AnimMgr){YAHOO.util.AnimMgr.fps=1000;}YAHOO.util.Region.prototype.adjust=function(t,l,b,r){this.top+=t;this.left+=l;this.right+=r;this.bottom+=b;return this;};})();
+

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/yui/yui-utilities.js
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/adapter/yui/yui-utilities.js	Mon May  7 16:28:32 2007
@@ -0,0 +1,18 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+if(typeof YAHOO=="undefined"){var YAHOO={};}YAHOO.namespace=function(){var a=arguments,o=null,i,j,d;for(i=0;i<a.length;i=i+1){d=a[i].split(".");o=YAHOO;for(j=(d[0]=="YAHOO")?1:0;j<d.length;j=j+1){o[d[j]]=o[d[j]]||{};o=o[d[j]];}}return o;};YAHOO.log=function(_6,_7,_8){var l=YAHOO.widget.Logger;if(l&&l.log){return l.log(_6,_7,_8);}else{return false;}};YAHOO.init=function(){this.namespace("util","widget","example");if(typeof YAHOO_config!="undefined"){var l=YAHOO_config.listener,ls=YAHOO.env.listeners,_c=true,i;if(l){for(i=0;i<ls.length;i=i+1){if(ls[i]==l){_c=false;break;}}if(_c){ls.push(l);}}}};YAHOO.register=function(_e,_f,_10){var _11=YAHOO.env.modules;if(!_11[_e]){_11[_e]={versions:[],builds:[]};}var m=_11[_e],v=_10.version,b=_10.build,ls=YAHOO.env.listeners;m.name=_e;m.version=v;m.build=b;m.versions.push(v);m.builds.push(b);m.mainClass=_f;for(var i=0;i<ls.length;i=i+1){ls[i](m);}if(_f){_f.VERSION=v;_f.BUILD=b;}else{YAHOO.log("mainClass is undefined for module "+_e,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[],getVersion:function(_17){return YAHOO.env.modules[_17]||null;}};YAHOO.lang={isArray:function(obj){if(obj.constructor&&obj.constructor.toString().indexOf("Array")>-1){return true;}else{return YAHOO.lang.isObject(obj)&&obj.constructor==Array;}},isBoolean:function(obj){return typeof obj=="boolean";},isFunction:function(obj){return typeof obj=="function";},isNull:function(obj){return obj===null;},isNumber:function(obj){return typeof obj=="number"&&isFinite(obj);},isObject:function(obj){return typeof obj=="object"||YAHOO.lang.isFunction(obj);},isString:function(obj){return typeof obj=="string";},isUndefined:function(obj){return typeof obj=="undefined";},hasOwnProperty:function(obj,_21){if(Object.prototype.hasOwnProperty){return obj.hasOwnProperty(_21);}return !YAHOO.lang.isUndefined(obj[_21])&&obj.constructor.prototype[_21]!==obj[_21];},extend:function(_22,_23,_24){var F=function(){};F.prototype=_23.prototype;_22.prototype=new F();_22.prototype.constructor=_22;_22.superclass=_23.prototype;if(_23.prototype.constructor==Object.prototype.constructor){_23.prototype.constructor=_23;}if(_24){for(var i in _24){_22.prototype[i]=_24[i];}}},augment:function(r,s){var rp=r.prototype,sp=s.prototype,a=arguments,i,p;if(a[2]){for(i=2;i<a.length;i=i+1){rp[a[i]]=sp[a[i]];}}else{for(p in sp){if(!rp[p]){rp[p]=sp[p];}}}}};YAHOO.init();YAHOO.util.Lang=YAHOO.lang;YAHOO.augment=YAHOO.lang.augment;YAHOO.extend=YAHOO.lang.extend;YAHOO.register("yahoo",YAHOO,{version:"2.2.0",build:"127"});
+
+(function(){var Y=YAHOO.util,_2,_3,_4=0,_5={};var ua=navigator.userAgent.toLowerCase(),_7=(ua.indexOf("opera")>-1),_8=(ua.indexOf("safari")>-1),_9=(!_7&&!_8&&ua.indexOf("gecko")>-1),_a=(!_7&&ua.indexOf("msie")>-1);var _b={HYPHEN:/(-[a-z])/i};var _c=function(_d){if(!_b.HYPHEN.test(_d)){return _d;}if(_5[_d]){return _5[_d];}while(_b.HYPHEN.exec(_d)){_d=_d.replace(RegExp.$1,RegExp.$1.substr(1).toUpperCase());}_5[_d]=_d;return _d;};if(document.defaultView&&document.defaultView.getComputedStyle){_2=function(el,_f){var _10=null;var _11=document.defaultView.getComputedStyle(el,"");if(_11){_10=_11[_c(_f)];}return el.style[_f]||_10;};}else{if(document.documentElement.currentStyle&&_a){_2=function(el,_13){switch(_c(_13)){case "opacity":var val=100;try{val=el.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(e){try{val=el.filters("alpha").opacity;}catch(e){}}return val/100;break;default:var _15=el.currentStyle?el.currentStyle[_13]:null;return (el.style[_13]||_15);}};}else{_2=function(el,_17){return el.style[_17];};}}if(_a){_3=function(el,_19,val){switch(_19){case "opacity":if(typeof el.style.filter=="string"){el.style.filter="alpha(opacity="+val*100+")";if(!el.currentStyle||!el.currentStyle.hasLayout){el.style.zoom=1;}}break;default:el.style[_19]=val;}};}else{_3=function(el,_1c,val){el.style[_1c]=val;};}YAHOO.util.Dom={get:function(el){if(!el){return null;}if(typeof el!="string"&&!(el instanceof Array)){return el;}if(typeof el=="string"){return document.getElementById(el);}else{var _1f=[];for(var i=0,len=el.length;i<len;++i){_1f[_1f.length]=Y.Dom.get(el[i]);}return _1f;}return null;},getStyle:function(el,_23){_23=_c(_23);var f=function(_25){return _2(_25,_23);};return Y.Dom.batch(el,f,Y.Dom,true);},setStyle:function(el,_27,val){_27=_c(_27);var f=function(_2a){_3(_2a,_27,val);};Y.Dom.batch(el,f,Y.Dom,true);},getXY:function(el){var f=function(el){if(el.parentNode===null||el.offsetParent===null||this.getStyle(el,"display")=="none"){return false;}var _2e=null;var pos=[];var box;if(el.getBoundingClientRect){box=el.getBoundingClientRect();var doc=document;if(!this.inDocument(el)&&parent.document!=document){doc=parent.document;if(!this.isAncestor(doc.documentElement,el)){return false;}}var _32=Math.max(doc.documentElement.scrollTop,doc.body.scrollTop);var _33=Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft);return [box.left+_33,box.top+_32];}else{pos=[el.offsetLeft,el.offsetTop];_2e=el.offsetParent;if(_2e!=el){while(_2e){pos[0]+=_2e.offsetLeft;pos[1]+=_2e.offsetTop;_2e=_2e.offsetParent;}}if(_8&&this.getStyle(el,"position")=="absolute"){pos[0]-=document.body.offsetLeft;pos[1]-=document.body.offsetTop;}}if(el.parentNode){_2e=el.parentNode;}else{_2e=null;}while(_2e&&_2e.tagName.toUpperCase()!="BODY"&&_2e.tagName.toUpperCase()!="HTML"){if(Y.Dom.getStyle(_2e,"display")!="inline"){pos[0]-=_2e.scrollLeft;pos[1]-=_2e.scrollTop;}if(_2e.parentNode){_2e=_2e.parentNode;}else{_2e=null;}}return pos;};return Y.Dom.batch(el,f,Y.Dom,true);},getX:function(el){var f=function(el){return Y.Dom.getXY(el)[0];};return Y.Dom.batch(el,f,Y.Dom,true);},getY:function(el){var f=function(el){return Y.Dom.getXY(el)[1];};return Y.Dom.batch(el,f,Y.Dom,true);},setXY:function(el,pos,_3c){var f=function(el){var _3f=this.getStyle(el,"position");if(_3f=="static"){this.setStyle(el,"position","relative");_3f="relative";}var _40=this.getXY(el);if(_40===false){return false;}var _41=[parseInt(this.getStyle(el,"left"),10),parseInt(this.getStyle(el,"top"),10)];if(isNaN(_41[0])){_41[0]=(_3f=="relative")?0:el.offsetLeft;}if(isNaN(_41[1])){_41[1]=(_3f=="relative")?0:el.offsetTop;}if(pos[0]!==null){el.style.left=pos[0]-_40[0]+_41[0]+"px";}if(pos[1]!==null){el.style.top=pos[1]-_40[1]+_41[1]+"px";}if(!_3c){var _42=this.getXY(el);if((pos[0]!==null&&_42[0]!=pos[0])||(pos[1]!==null&&_42[1]!=pos[1])){this.setXY(el,pos,true);}}};Y.Dom.batch(el,f,Y.Dom,true);},setX:function(el,x){Y.Dom.setXY(el,[x,null]);},setY:function(el,y){Y.Dom.setXY(el,[null,y]);},getRegion:function(el){var f=function(el){var _4a=new Y.Region.getRegion(el);return _4a;};return Y.Dom.batch(el,f,Y.Dom,true);},getClientWidth:function(){return Y.Dom.getViewportWidth();},getClientHeight:function(){return Y.Dom.getViewportHeight();},getElementsByClassName:function(_4b,tag,_4d){var _4e=function(el){return Y.Dom.hasClass(el,_4b);};return Y.Dom.getElementsBy(_4e,tag,_4d);},hasClass:function(el,_51){var re=new RegExp("(?:^|\\s+)"+_51+"(?:\\s+|$)");var f=function(el){return re.test(el["className"]);};return Y.Dom.batch(el,f,Y.Dom,true);},addClass:function(el,_56){var f=function(el){if(this.hasClass(el,_56)){return;}el["className"]=[el["className"],_56].join(" ");};Y.Dom.batch(el,f,Y.Dom,true);},removeClass:function(el,_5a){var re=new RegExp("(?:^|\\s+)"+_5a+"(?:\\s+|$)","g");var f=function(el){if(!this.hasClass(el,_5a)){return;}var c=el["className"];el["className"]=c.replace(re," ");if(this.hasClass(el,_5a)){this.removeClass(el,_5a);}};Y.Dom.batch(el,f,Y.Dom,true);},replaceClass:function(el,_60,_61){if(_60===_61){return false;}var re=new RegExp("(?:^|\\s+)"+_60+"(?:\\s+|$)","g");var f=function(el){if(!this.hasClass(el,_60)){this.addClass(el,_61);return;}el["className"]=el["className"].replace(re," "+_61+" ");if(this.hasClass(el,_60)){this.replaceClass(el,_60,_61);}};Y.Dom.batch(el,f,Y.Dom,true);},generateId:function(el,_66){_66=_66||"yui-gen";el=el||{};var f=function(el){if(el){el=Y.Dom.get(el);}else{el={};}if(!el.id){el.id=_66+_4++;}return el.id;};return Y.Dom.batch(el,f,Y.Dom,true);},isAncestor:function(_69,_6a){_69=Y.Dom.get(_69);if(!_69||!_6a){return false;}var f=function(_6c){if(_69.contains&&!_8){return _69.contains(_6c);}else{if(_69.compareDocumentPosition){return !!(_69.compareDocumentPosition(_6c)&16);}else{var _6d=_6c.parentNode;while(_6d){if(_6d==_69){return true;}else{if(!_6d.tagName||_6d.tagName.toUpperCase()=="HTML"){return false;}}_6d=_6d.parentNode;}return false;}}};return Y.Dom.batch(_6a,f,Y.Dom,true);},inDocument:function(el){var f=function(el){return this.isAncestor(document.documentElement,el);};return Y.Dom.batch(el,f,Y.Dom,true);},getElementsBy:function(_71,tag,_73){tag=tag||"*";var _74=[];if(_73){_73=Y.Dom.get(_73);if(!_73){return _74;}}else{_73=document;}var _75=_73.getElementsByTagName(tag);if(!_75.length&&(tag=="*"&&_73.all)){_75=_73.all;}for(var i=0,len=_75.length;i<len;++i){if(_71(_75[i])){_74[_74.length]=_75[i];}}return _74;},batch:function(el,_79,o,_7b){var id=el;el=Y.Dom.get(el);var _7d=(_7b)?o:window;if(!el||el.tagName||!el.length){if(!el){return false;}return _79.call(_7d,el,o);}var _7e=[];for(var i=0,len=el.length;i<len;++i){if(!el[i]){id=el[i];}_7e[_7e.length]=_79.call(_7d,el[i],o);}return _7e;},getDocumentHeight:function(){var _81=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;var h=Math.max(_81,Y.Dom.getViewportHeight());return h;},getDocumentWidth:function(){var _83=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;var w=Math.max(_83,Y.Dom.getViewportWidth());return w;},getViewportHeight:function(){var _85=self.innerHeight;var _86=document.compatMode;if((_86||_a)&&!_7){_85=(_86=="CSS1Compat")?document.documentElement.clientHeight:document.body.clientHeight;}return _85;},getViewportWidth:function(){var _87=self.innerWidth;var _88=document.compatMode;if(_88||_a){_87=(_88=="CSS1Compat")?document.documentElement.clientWidth:document.body.clientWidth;}return _87;}};})();YAHOO.util.Region=function(t,r,b,l){this.top=t;this[1]=t;this.right=r;this.bottom=b;this.left=l;this[0]=l;};YAHOO.util.Region.prototype.contains=function(_8d){return (_8d.left>=this.left&&_8d.right<=this.right&&_8d.top>=this.top&&_8d.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return ((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(_8e){var t=Math.max(this.top,_8e.top);var r=Math.min(this.right,_8e.right);var b=Math.min(this.bottom,_8e.bottom);var l=Math.max(this.left,_8e.left);if(b>=t&&r>=l){return new YAHOO.util.Region(t,r,b,l);}else{return null;}};YAHOO.util.Region.prototype.union=function(_93){var t=Math.min(this.top,_93.top);var r=Math.max(this.right,_93.right);var b=Math.max(this.bottom,_93.bottom);var l=Math.min(this.left,_93.left);return new YAHOO.util.Region(t,r,b,l);};YAHOO.util.Region.prototype.toString=function(){return ("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+"}");};YAHOO.util.Region.getRegion=function(el){var p=YAHOO.util.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 YAHOO.util.Region(t,r,b,l);};YAHOO.util.Point=function(x,y){if(x instanceof Array){y=x[1];x=x[0];}this.x=this.right=this.left=this[0]=x;this.y=this.top=this.bottom=this[1]=y;};YAHOO.util.Point.prototype=new YAHOO.util.Region();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.2.0",build:"127"});
+
+if(!YAHOO.util.Event){YAHOO.util.Event=function(){var _1=false;var _2=[];var _3=[];var _4=[];var _5=[];var _6=0;var _7=[];var _8=[];var _9=0;var _a=null;return {POLL_RETRYS:200,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,OBJ:3,ADJ_SCOPE:4,isSafari:(/KHTML/gi).test(navigator.userAgent),webkit:function(){var v=navigator.userAgent.match(/AppleWebKit\/([^ ]*)/);if(v&&v[1]){return v[1];}return null;}(),isIE:(!this.webkit&&!navigator.userAgent.match(/opera/gi)&&navigator.userAgent.match(/msie/gi)),_interval:null,startInterval:function(){if(!this._interval){var _c=this;var _d=function(){_c._tryPreloadAttach();};this._interval=setInterval(_d,this.POLL_INTERVAL);}},onAvailable:function(_e,_f,_10,_11){_7.push({id:_e,fn:_f,obj:_10,override:_11,checkReady:false});_6=this.POLL_RETRYS;this.startInterval();},onContentReady:function(_12,_13,_14,_15){_7.push({id:_12,fn:_13,obj:_14,override:_15,checkReady:true});_6=this.POLL_RETRYS;this.startInterval();},addListener:function(el,_17,fn,obj,_1a){if(!fn||!fn.call){return false;}if(this._isValidCollection(el)){var ok=true;for(var i=0,len=el.length;i<len;++i){ok=this.on(el[i],_17,fn,obj,_1a)&&ok;}return ok;}else{if(typeof el=="string"){var oEl=this.getEl(el);if(oEl){el=oEl;}else{this.onAvailable(el,function(){YAHOO.util.Event.on(el,_17,fn,obj,_1a);});return true;}}}if(!el){return false;}if("unload"==_17&&obj!==this){_3[_3.length]=[el,_17,fn,obj,_1a];return true;}var _1f=el;if(_1a){if(_1a===true){_1f=obj;}else{_1f=_1a;}}var _20=function(e){return fn.call(_1f,YAHOO.util.Event.getEvent(e),obj);};var li=[el,_17,fn,_20,_1f];var _23=_2.length;_2[_23]=li;if(this.useLegacyEvent(el,_17)){var _24=this.getLegacyIndex(el,_17);if(_24==-1||el!=_4[_24][0]){_24=_4.length;_8[el.id+_17]=_24;_4[_24]=[el,_17,el["on"+_17]];_5[_24]=[];el["on"+_17]=function(e){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(e),_24);};}_5[_24].push(li);}else{try{this._simpleAdd(el,_17,_20,false);}catch(ex){this.lastError=ex;this.removeListener(el,_17,fn);return false;}}return true;},fireLegacyEvent:function(e,_27){var ok=true,le,lh,li,_2c,ret;lh=_5[_27];for(var i=0,len=lh.length;i<len;++i){li=lh[i];if(li&&li[this.WFN]){_2c=li[this.ADJ_SCOPE];ret=li[this.WFN].call(_2c,e);ok=(ok&&ret);}}le=_4[_27];if(le&&le[2]){le[2](e);}return ok;},getLegacyIndex:function(el,_31){var key=this.generateId(el)+_31;if(typeof _8[key]=="undefined"){return -1;}else{return _8[key];}},useLegacyEvent:function(el,_34){if(this.webkit&&("click"==_34||"dblclick"==_34)){var v=parseInt(this.webkit,10);if(!isNaN(v)&&v<418){return true;}}return false;},removeListener:function(el,_37,fn){var i,len;if(typeof el=="string"){el=this.getEl(el);}else{if(this._isValidCollection(el)){var ok=true;for(i=0,len=el.length;i<len;++i){ok=(this.removeListener(el[i],_37,fn)&&ok);}return ok;}}if(!fn||!fn.call){return this.purgeElement(el,false,_37);}if("unload"==_37){for(i=0,len=_3.length;i<len;i++){var li=_3[i];if(li&&li[0]==el&&li[1]==_37&&li[2]==fn){_3.splice(i,1);return true;}}return false;}var _3d=null;var _3e=arguments[3];if("undefined"==typeof _3e){_3e=this._getCacheIndex(el,_37,fn);}if(_3e>=0){_3d=_2[_3e];}if(!el||!_3d){return false;}if(this.useLegacyEvent(el,_37)){var _3f=this.getLegacyIndex(el,_37);var _40=_5[_3f];if(_40){for(i=0,len=_40.length;i<len;++i){li=_40[i];if(li&&li[this.EL]==el&&li[this.TYPE]==_37&&li[this.FN]==fn){_40.splice(i,1);break;}}}}else{try{this._simpleRemove(el,_37,_3d[this.WFN],false);}catch(ex){this.lastError=ex;return false;}}delete _2[_3e][this.WFN];delete _2[_3e][this.FN];_2.splice(_3e,1);return true;},getTarget:function(ev,_42){var t=ev.target||ev.srcElement;return this.resolveTextNode(t);},resolveTextNode:function(_44){if(_44&&3==_44.nodeType){return _44.parentNode;}else{return _44;}},getPageX:function(ev){var x=ev.pageX;if(!x&&0!==x){x=ev.clientX||0;if(this.isIE){x+=this._getScrollLeft();}}return x;},getPageY:function(ev){var y=ev.pageY;if(!y&&0!==y){y=ev.clientY||0;if(this.isIE){y+=this._getScrollTop();}}return y;},getXY:function(ev){return [this.getPageX(ev),this.getPageY(ev)];},getRelatedTarget:function(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){if(!ev.time){var t=new Date().getTime();try{ev.time=t;}catch(ex){this.lastError=ex;return t;}}return ev.time;},stopEvent:function(ev){this.stopPropagation(ev);this.preventDefault(ev);},stopPropagation:function(ev){if(ev.stopPropagation){ev.stopPropagation();}else{ev.cancelBubble=true;}},preventDefault:function(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){return ev.charCode||ev.keyCode||0;},_getCacheIndex:function(el,_56,fn){for(var i=0,len=_2.length;i<len;++i){var li=_2[i];if(li&&li[this.FN]==fn&&li[this.EL]==el&&li[this.TYPE]==_56){return i;}}return -1;},generateId:function(el){var id=el.id;if(!id){id="yuievtautoid-"+_9;++_9;el.id=id;}return id;},_isValidCollection:function(o){return (o&&o.length&&typeof o!="string"&&!o.tagName&&!o.alert&&typeof o[0]!="undefined");},elCache:{},getEl:function(id){return document.getElementById(id);},clearCache:function(){},_load:function(e){_1=true;var EU=YAHOO.util.Event;if(this.isIE){EU._simpleRemove(window,"load",EU._load);}},_tryPreloadAttach:function(){if(this.locked){return false;}this.locked=true;var _61=!_1;if(!_61){_61=(_6>0);}var _62=[];for(var i=0,len=_7.length;i<len;++i){var _65=_7[i];if(_65){var el=this.getEl(_65.id);if(el){if(!_65.checkReady||_1||el.nextSibling||(document&&document.body)){var _67=el;if(_65.override){if(_65.override===true){_67=_65.obj;}else{_67=_65.override;}}_65.fn.call(_67,_65.obj);_7[i]=null;}}else{_62.push(_65);}}}_6=(_62.length===0)?0:_6-1;if(_61){this.startInterval();}else{clearInterval(this._interval);this._interval=null;}this.locked=false;return true;},purgeElement:function(el,_69,_6a){var _6b=this.getListeners(el,_6a);if(_6b){for(var i=0,len=_6b.length;i<len;++i){var l=_6b[i];this.removeListener(el,l.type,l.fn);}}if(_69&&el&&el.childNodes){for(i=0,len=el.childNodes.length;i<len;++i){this.purgeElement(el.childNodes[i],_69,_6a);}}},getListeners:function(el,_70){var _71=[],_72;if(!_70){_72=[_2,_3];}else{if(_70=="unload"){_72=[_3];}else{_72=[_2];}}for(var j=0;j<_72.length;++j){var _74=_72[j];if(_74&&_74.length>0){for(var i=0,len=_74.length;i<len;++i){var l=_74[i];if(l&&l[this.EL]===el&&(!_70||_70===l[this.TYPE])){_71.push({type:l[this.TYPE],fn:l[this.FN],obj:l[this.OBJ],adjust:l[this.ADJ_SCOPE],index:i});}}}}return (_71.length)?_71:null;},_unload:function(e){var EU=YAHOO.util.Event,i,j,l,len,_7e;for(i=0,len=_3.length;i<len;++i){l=_3[i];if(l){var _7f=window;if(l[EU.ADJ_SCOPE]){if(l[EU.ADJ_SCOPE]===true){_7f=l[EU.OBJ];}else{_7f=l[EU.ADJ_SCOPE];}}l[EU.FN].call(_7f,EU.getEvent(e),l[EU.OBJ]);_3[i]=null;l=null;_7f=null;}}_3=null;if(_2&&_2.length>0){j=_2.length;while(j){_7e=j-1;l=_2[_7e];if(l){EU.removeListener(l[EU.EL],l[EU.TYPE],l[EU.FN],_7e);}j=j-1;}l=null;EU.clearCache();}for(i=0,len=_4.length;i<len;++i){_4[i][0]=null;_4[i]=null;}_4=null;EU._simpleRemove(window,"unload",EU._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_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];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(el,_83,fn,_85){el.addEventListener(_83,fn,(_85));};}else{if(window.attachEvent){return function(el,_87,fn,_89){el.attachEvent("on"+_87,fn);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(el,_8b,fn,_8d){el.removeEventListener(_8b,fn,(_8d));};}else{if(window.detachEvent){return function(el,_8f,fn){el.detachEvent("on"+_8f,fn);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;if(document&&document.body){EU._load();}else{EU._simpleAdd(window,"load",EU._load);}EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.CustomEvent=function(_92,_93,_94,_95){this.type=_92;this.scope=_93||window;this.silent=_94;this.signature=_95||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var _96="_YUICEOnSubscribe";if(_92!==_96){this.subscribeEvent=new YAHOO.util.CustomEvent(_96,this,true);}};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(fn,obj,_99){if(this.subscribeEvent){this.subscribeEvent.fire(fn,obj,_99);}this.subscribers.push(new YAHOO.util.Subscriber(fn,obj,_99));},unsubscribe:function(fn,obj){if(!fn){return this.unsubscribeAll();}var _9c=false;for(var i=0,len=this.subscribers.length;i<len;++i){var s=this.subscribers[i];if(s&&s.contains(fn,obj)){this._delete(i);_9c=true;}}return _9c;},fire:function(){var len=this.subscribers.length;if(!len&&this.silent){return true;}var _a1=[],ret=true,i;for(i=0;i<arguments.length;++i){_a1.push(arguments[i]);}var _a4=_a1.length;if(!this.silent){}for(i=0;i<len;++i){var s=this.subscribers[i];if(s){if(!this.silent){}var _a6=s.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var _a7=null;if(_a1.length>0){_a7=_a1[0];}ret=s.fn.call(_a6,_a7,s.obj);}else{ret=s.fn.call(_a6,this.type,_a1,s.obj);}if(false===ret){if(!this.silent){}return false;}}}return true;},unsubscribeAll:function(){for(var i=0,len=this.subscribers.length;i<len;++i){this._delete(len-1-i);}return i;},_delete:function(_aa){var s=this.subscribers[_aa];if(s){delete s.fn;delete s.obj;}this.subscribers.splice(_aa,1);},toString:function(){return "CustomEvent: "+"'"+this.type+"', "+"scope: "+this.scope;}};YAHOO.util.Subscriber=function(fn,obj,_ae){this.fn=fn;this.obj=obj||null;this.override=_ae;};YAHOO.util.Subscriber.prototype.getScope=function(_af){if(this.override){if(this.override===true){return this.obj;}else{return this.override;}}return _af;};YAHOO.util.Subscriber.prototype.contains=function(fn,obj){if(obj){return (this.fn==fn&&this.obj==obj);}else{return (this.fn==fn);}};YAHOO.util.Subscriber.prototype.toString=function(){return "Subscriber { obj: "+(this.obj||"")+", override: "+(this.override||"no")+" }";};YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(_b2,_b3,_b4,_b5){this.__yui_events=this.__yui_events||{};var ce=this.__yui_events[_b2];if(ce){ce.subscribe(_b3,_b4,_b5);}else{this.__yui_subscribers=this.__yui_subscribers||{};var _b7=this.__yui_subscribers;if(!_b7[_b2]){_b7[_b2]=[];}_b7[_b2].push({fn:_b3,obj:_b4,override:_b5});}},unsubscribe:function(_b8,_b9,_ba){this.__yui_events=this.__yui_events||{};var ce=this.__yui_events[_b8];if(ce){return ce.unsubscribe(_b9,_ba);}else{return false;}},unsubscribeAll:function(_bc){return this.unsubscribe(_bc);},createEvent:function(_bd,_be){this.__yui_events=this.__yui_events||{};var _bf=_be||{};var _c0=this.__yui_events;if(_c0[_bd]){}else{var _c1=_bf.scope||this;var _c2=_bf.silent||null;var ce=new YAHOO.util.CustomEvent(_bd,_c1,_c2,YAHOO.util.CustomEvent.FLAT);_c0[_bd]=ce;if(_bf.onSubscribeCallback){ce.subscribeEvent.subscribe(_bf.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var qs=this.__yui_subscribers[_bd];if(qs){for(var i=0;i<qs.length;++i){ce.subscribe(qs[i].fn,qs[i].obj,qs[i].override);}}}return _c0[_bd];},fireEvent:function(_c6,_c7,_c8,etc){this.__yui_events=this.__yui_events||{};var ce=this.__yui_events[_c6];if(ce){var _cb=[];for(var i=1;i<arguments.length;++i){_cb.push(arguments[i]);}return ce.fire.apply(ce,_cb);}else{return null;}},hasEvent:function(_cd){if(this.__yui_events){if(this.__yui_events[_cd]){return true;}}return false;}};YAHOO.util.KeyListener=function(_ce,_cf,_d0,_d1){if(!_ce){}else{if(!_cf){}else{if(!_d0){}}}if(!_d1){_d1=YAHOO.util.KeyListener.KEYDOWN;}var _d2=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(typeof _ce=="string"){_ce=document.getElementById(_ce);}if(typeof _d0=="function"){_d2.subscribe(_d0);}else{_d2.subscribe(_d0.fn,_d0.scope,_d0.correctScope);}function handleKeyPress(e,obj){if(!_cf.shift){_cf.shift=false;}if(!_cf.alt){_cf.alt=false;}if(!_cf.ctrl){_cf.ctrl=false;}if(e.shiftKey==_cf.shift&&e.altKey==_cf.alt&&e.ctrlKey==_cf.ctrl){var _d5;var _d6;if(_cf.keys instanceof Array){for(var i=0;i<_cf.keys.length;i++){_d5=_cf.keys[i];if(_d5==e.charCode){_d2.fire(e.charCode,e);break;}else{if(_d5==e.keyCode){_d2.fire(e.keyCode,e);break;}}}}else{_d5=_cf.keys;if(_d5==e.charCode){_d2.fire(e.charCode,e);}else{if(_d5==e.keyCode){_d2.fire(e.keyCode,e);}}}}}this.enable=function(){if(!this.enabled){YAHOO.util.Event.addListener(_ce,_d1,handleKeyPress);this.enabledEvent.fire(_cf);}this.enabled=true;};this.disable=function(){if(this.enabled){YAHOO.util.Event.removeListener(_ce,_d1,handleKeyPress);this.disabledEvent.fire(_cf);}this.enabled=false;};this.toString=function(){return "KeyListener ["+_cf.keys+"] "+_ce.tagName+(_ce.id?"["+_ce.id+"]":"");};};YAHOO.util.KeyListener.KEYDOWN="keydown";YAHOO.util.KeyListener.KEYUP="keyup";YAHOO.register("event",YAHOO.util.Event,{version:"2.2.0",build:"127"});
+
+YAHOO.util.Connect={_msxml_progid:["MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,setProgId:function(id){this._msxml_progid.unshift(id);},setDefaultPostHeader:function(b){this._use_default_post_header=b;},setDefaultXhrHeader:function(b){this._use_default_xhr_header=b;},setPollingInterval:function(i){if(typeof i=="number"&&isFinite(i)){this._polling_interval=i;}},createXhrObject:function(_5){var _6,_7;try{_7=new XMLHttpRequest();_6={conn:_7,tId:_5};}catch(e){for(var i=0;i<this._msxml_progid.length;++i){try{_7=new ActiveXObject(this._msxml_progid[i]);_6={conn:_7,tId:_5};break;}catch(e){}}}finally{return _6;}},getConnectionObject:function(){var o;var _a=this._transaction_id;try{o=this.createXhrObject(_a);if(o){this._transaction_id++;}}catch(e){}finally{return o;}},asyncRequest:function(_b,_c,_d,_e){var o=this.getConnectionObject();if(!o){return null;}else{if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(o.tId,_d,_c,_e);this.releaseObject(o);return;}if(_b.toUpperCase()=="GET"){if(this._sFormData.length!=0){_c+=((_c.indexOf("?")==-1)?"?":"&")+this._sFormData;}else{_c+="?"+this._sFormData;}}else{if(_b.toUpperCase()=="POST"){_e=_e?this._sFormData+"&"+_e:this._sFormData;}}}o.conn.open(_b,_c,true);if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if(this._isFormSubmit||(_e&&this._use_default_post_header)){this.initHeader("Content-Type",this._default_post_header);if(this._isFormSubmit){this.resetFormState();}}if(this._has_default_headers||this._has_http_headers){this.setHeader(o);}this.handleReadyState(o,_d);o.conn.send(_e||null);return o;}},handleReadyState:function(o,_11){var _12=this;if(_11&&_11.timeout){this._timeOut[o.tId]=window.setTimeout(function(){_12.abort(o,_11,true);},_11.timeout);}this._poll[o.tId]=window.setInterval(function(){if(o.conn&&o.conn.readyState==4){window.clearInterval(_12._poll[o.tId]);delete _12._poll[o.tId];if(_11&&_11.timeout){delete _12._timeOut[o.tId];}_12.handleTransactionResponse(o,_11);}},this._polling_interval);},handleTransactionResponse:function(o,_14,_15){if(!_14){this.releaseObject(o);return;}var _16,_17;try{if(o.conn.status!==undefined&&o.conn.status!=0){_16=o.conn.status;}else{_16=13030;}}catch(e){_16=13030;}if(_16>=200&&_16<300){_17=this.createResponseObject(o,_14.argument);if(_14.success){if(!_14.scope){_14.success(_17);}else{_14.success.apply(_14.scope,[_17]);}}}else{switch(_16){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:_17=this.createExceptionObject(o.tId,_14.argument,(_15?_15:false));if(_14.failure){if(!_14.scope){_14.failure(_17);}else{_14.failure.apply(_14.scope,[_17]);}}break;default:_17=this.createResponseObject(o,_14.argument);if(_14.failure){if(!_14.scope){_14.failure(_17);}else{_14.failure.apply(_14.scope,[_17]);}}}}this.releaseObject(o);_17=null;},createResponseObject:function(o,_19){var obj={};var _1b={};try{var _1c=o.conn.getAllResponseHeaders();var _1d=_1c.split("\n");for(var i=0;i<_1d.length;i++){var _1f=_1d[i].indexOf(":");if(_1f!=-1){_1b[_1d[i].substring(0,_1f)]=_1d[i].substring(_1f+2);}}}catch(e){}obj.tId=o.tId;obj.status=o.conn.status;obj.statusText=o.conn.statusText;obj.getResponseHeader=_1b;obj.getAllResponseHeaders=_1c;obj.responseText=o.conn.responseText;obj.responseXML=o.conn.responseXML;if(typeof _19!==undefined){obj.argument=_19;}return obj;},createExceptionObject:function(tId,_21,_22){var _23=0;var _24="communication failure";var _25=-1;var _26="transaction aborted";var obj={};obj.tId=tId;if(_22){obj.status=_25;obj.statusText=_26;}else{obj.status=_23;obj.statusText=_24;}if(_21){obj.argument=_21;}return obj;},initHeader:function(_28,_29,_2a){var _2b=(_2a)?this._default_headers:this._http_headers;if(_2b[_28]===undefined){_2b[_28]=_29;}else{_2b[_28]=_29+","+_2b[_28];}if(_2a){this._has_default_headers=true;}else{this._has_http_headers=true;}},setHeader:function(o){if(this._has_default_headers){for(var _2d in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,_2d)){o.conn.setRequestHeader(_2d,this._default_headers[_2d]);}}}if(this._has_http_headers){for(var _2d in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,_2d)){o.conn.setRequestHeader(_2d,this._http_headers[_2d]);}}delete this._http_headers;this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){delete this._default_headers;this._default_headers={};this._has_default_headers=false;},setForm:function(_2e,_2f,_30){this.resetFormState();var _31;if(typeof _2e=="string"){_31=(document.getElementById(_2e)||document.forms[_2e]);}else{if(typeof _2e=="object"){_31=_2e;}else{return;}}if(_2f){this.createFrame(_30?_30:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=_31;return;}var _32,_33,_34,_35;var _36=false;for(var i=0;i<_31.elements.length;i++){_32=_31.elements[i];_35=_31.elements[i].disabled;_33=_31.elements[i].name;_34=_31.elements[i].value;if(!_35&&_33){switch(_32.type){case "select-one":case "select-multiple":for(var j=0;j<_32.options.length;j++){if(_32.options[j].selected){if(window.ActiveXObject){this._sFormData+=encodeURIComponent(_33)+"="+encodeURIComponent(_32.options[j].attributes["value"].specified?_32.options[j].value:_32.options[j].text)+"&";}else{this._sFormData+=encodeURIComponent(_33)+"="+encodeURIComponent(_32.options[j].hasAttribute("value")?_32.options[j].value:_32.options[j].text)+"&";}}}break;case "radio":case "checkbox":if(_32.checked){this._sFormData+=encodeURIComponent(_33)+"="+encodeURIComponent(_34)+"&";}break;case "file":case undefined:case "reset":case "button":break;case "submit":if(_36==false){this._sFormData+=encodeURIComponent(_33)+"="+encodeURIComponent(_34)+"&";_36=true;}break;default:this._sFormData+=encodeURIComponent(_33)+"="+encodeURIComponent(_34)+"&";break;}}}this._isFormSubmit=true;this._sFormData=this._sFormData.substr(0,this._sFormData.length-1);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";},createFrame:function(_39){var _3a="yuiIO"+this._transaction_id;if(window.ActiveXObject){var io=document.createElement("<iframe id=\""+_3a+"\" name=\""+_3a+"\" />");if(typeof _39=="boolean"){io.src="javascript:false";}else{if(typeof secureURI=="string"){io.src=_39;}}}else{var io=document.createElement("iframe");io.id=_3a;io.name=_3a;}io.style.position="absolute";io.style.top="-1000px";io.style.left="-1000px";document.body.appendChild(io);},appendPostData:function(_3c){var _3d=[];var _3e=_3c.split("&");for(var i=0;i<_3e.length;i++){var _40=_3e[i].indexOf("=");if(_40!=-1){_3d[i]=document.createElement("input");_3d[i].type="hidden";_3d[i].name=_3e[i].substring(0,_40);_3d[i].value=_3e[i].substring(_40+1);this._formNode.appendChild(_3d[i]);}}return _3d;},uploadFile:function(id,_42,uri,_44){var _45="yuiIO"+id;var _46="multipart/form-data";var io=document.getElementById(_45);this._formNode.action=uri;this._formNode.method="POST";this._formNode.target=_45;if(this._formNode.encoding){this._formNode.encoding=_46;}else{this._formNode.enctype=_46;}if(_44){var _48=this.appendPostData(_44);}this._formNode.submit();if(_48&&_48.length>0){for(var i=0;i<_48.length;i++){this._formNode.removeChild(_48[i]);}}this.resetFormState();var _4a=function(){var obj={};obj.tId=id;obj.argument=_42.argument;try{obj.responseText=io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;obj.responseXML=io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;}catch(e){}if(_42&&_42.upload){if(!_42.scope){_42.upload(obj);}else{_42.upload.apply(_42.scope,[obj]);}}if(YAHOO.util.Event){YAHOO.util.Event.removeListener(io,"load",_4a);}else{if(window.detachEvent){io.detachEvent("onload",_4a);}else{io.removeEventListener("load",_4a,false);}}setTimeout(function(){document.body.removeChild(io);},100);};if(YAHOO.util.Event){YAHOO.util.Event.addListener(io,"load",_4a);}else{if(window.attachEvent){io.attachEvent("onload",_4a);}else{io.addEventListener("load",_4a,false);}}},abort:function(o,_4d,_4e){if(this.isCallInProgress(o)){o.conn.abort();window.clearInterval(this._poll[o.tId]);delete this._poll[o.tId];if(_4e){delete this._timeOut[o.tId];}this.handleTransactionResponse(o,_4d,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;}};YAHOO.register("connection",YAHOO.widget.Module,{version:"2.2.0",build:"127"});
+
+YAHOO.util.Anim=function(el,_2,_3,_4){if(el){this.init(el,_2,_3,_4);}};YAHOO.util.Anim.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(_7,_8,_9){return this.method(this.currentFrame,_8,_9-_8,this.totalFrames);},setAttribute:function(_a,_b,_c){if(this.patterns.noNegatives.test(_a)){_b=(_b>0)?_b:0;}YAHOO.util.Dom.setStyle(this.getEl(),_a,_b+_c);},getAttribute:function(_d){var el=this.getEl();var _f=YAHOO.util.Dom.getStyle(el,_d);if(_f!=="auto"&&!this.patterns.offsetUnit.test(_f)){return parseFloat(_f);}var a=this.patterns.offsetAttribute.exec(_d)||[];var pos=!!(a[3]);var box=!!(a[2]);if(box||(YAHOO.util.Dom.getStyle(el,"position")=="absolute"&&pos)){_f=el["offset"+a[0].charAt(0).toUpperCase()+a[0].substr(1)];}else{_f=0;}return _f;},getDefaultUnit:function(_13){if(this.patterns.defaultUnit.test(_13)){return "px";}return "";},setRuntimeAttribute:function(_14){var _15;var end;var _17=this.attributes;this.runtimeAttributes[_14]={};var _18=function(_19){return (typeof _19!=="undefined");};if(!_18(_17[_14]["to"])&&!_18(_17[_14]["by"])){return false;}_15=(_18(_17[_14]["from"]))?_17[_14]["from"]:this.getAttribute(_14);if(_18(_17[_14]["to"])){end=_17[_14]["to"];}else{if(_18(_17[_14]["by"])){if(_15.constructor==Array){end=[];for(var i=0,len=_15.length;i<len;++i){end[i]=_15[i]+_17[_14]["by"][i];}}else{end=_15+_17[_14]["by"];}}}this.runtimeAttributes[_14].start=_15;this.runtimeAttributes[_14].end=end;this.runtimeAttributes[_14].unit=(_18(_17[_14].unit))?_17[_14]["unit"]:this.getDefaultUnit(_14);},init:function(el,_1d,_1e,_1f){var _20=false;var _21=null;var _22=0;el=YAHOO.util.Dom.get(el);this.attributes=_1d||{};this.duration=_1e||1;this.method=_1f||YAHOO.util.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=YAHOO.util.AnimMgr.fps;this.getEl=function(){return el;};this.isAnimated=function(){return _20;};this.getStartTime=function(){return _21;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(YAHOO.util.AnimMgr.fps*this.duration):this.duration;YAHOO.util.AnimMgr.registerElement(this);};this.stop=function(_23){if(_23){this.currentFrame=this.totalFrames;this._onTween.fire();}YAHOO.util.AnimMgr.stop(this);};var _24=function(){this.onStart.fire();this.runtimeAttributes={};for(var _25 in this.attributes){this.setRuntimeAttribute(_25);}_20=true;_22=0;_21=new Date();};var _26=function(){var _27={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};_27.toString=function(){return ("duration: "+_27.duration+", currentFrame: "+_27.currentFrame);};this.onTween.fire(_27);var _28=this.runtimeAttributes;for(var _29 in _28){this.setAttribute(_29,this.doMethod(_29,_28[_29].start,_28[_29].end),_28[_29].unit);}_22+=1;};var _2a=function(){var _2b=(new Date()-_21)/1000;var _2c={duration:_2b,frames:_22,fps:_22/_2b};_2c.toString=function(){return ("duration: "+_2c.duration+", frames: "+_2c.frames+", fps: "+_2c.fps);};_20=false;_22=0;this.onComplete.fire(_2c);};this._onStart=new YAHOO.util.CustomEvent("_start",this,true);this.onStart=new YAHOO.util.CustomEvent("start",this);this.onTween=new YAHOO.util.CustomEvent("tween",this);this._onTween=new YAHOO.util.CustomEvent("_tween",this,true);this.onComplete=new YAHOO.util.CustomEvent("complete",this);this._onComplete=new YAHOO.util.CustomEvent("_complete",this,true);this._onStart.subscribe(_24);this._onTween.subscribe(_26);this._onComplete.subscribe(_2a);}};YAHOO.util.AnimMgr=new function(){var _2d=null;var _2e=[];var _2f=0;this.fps=1000;this.delay=1;this.registerElement=function(_30){_2e[_2e.length]=_30;_2f+=1;_30._onStart.fire();this.start();};this.unRegister=function(_31,_32){_31._onComplete.fire();_32=_32||_33(_31);if(_32!=-1){_2e.splice(_32,1);}_2f-=1;if(_2f<=0){this.stop();}};this.start=function(){if(_2d===null){_2d=setInterval(this.run,this.delay);}};this.stop=function(_34){if(!_34){clearInterval(_2d);for(var i=0,len=_2e.length;i<len;++i){if(_2e[0].isAnimated()){this.unRegister(_2e[0],0);}}_2e=[];_2d=null;_2f=0;}else{this.unRegister(_34);}};this.run=function(){for(var i=0,len=_2e.length;i<len;++i){var _39=_2e[i];if(!_39||!_39.isAnimated()){continue;}if(_39.currentFrame<_39.totalFrames||_39.totalFrames===null){_39.currentFrame+=1;if(_39.useSeconds){_3a(_39);}_39._onTween.fire();}else{YAHOO.util.AnimMgr.stop(_39,i);}}};var _33=function(_3b){for(var i=0,len=_2e.length;i<len;++i){if(_2e[i]==_3b){return i;}}return -1;};var _3a=function(_3e){var _3f=_3e.totalFrames;var _40=_3e.currentFrame;var _41=(_3e.currentFrame*_3e.duration*1000/_3e.totalFrames);var _42=(new Date()-_3e.getStartTime());var _43=0;if(_42<_3e.duration*1000){_43=Math.round((_42/_41-1)*_3e.currentFrame);}else{_43=_3f-(_40+1);}if(_43>0&&isFinite(_43)){if(_3e.currentFrame+_43>=_3f){_43=_3f-(_40+1);}_3e.currentFrame+=_43;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(_44,t){var n=_44.length;var tmp=[];for(var i=0;i<n;++i){tmp[i]=[_44[i][0],_44[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(){YAHOO.util.ColorAnim=function(el,_4b,_4c,_4d){YAHOO.util.ColorAnim.superclass.constructor.call(this,el,_4b,_4c,_4d);};YAHOO.extend(YAHOO.util.ColorAnim,YAHOO.util.Anim);var Y=YAHOO.util;var _4f=Y.ColorAnim.superclass;var _50=Y.ColorAnim.prototype;_50.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return ("ColorAnim "+id);};_50.patterns.color=/color$/i;_50.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;_50.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;_50.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;_50.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;_50.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;};_50.getAttribute=function(_55){var el=this.getEl();if(this.patterns.color.test(_55)){var val=YAHOO.util.Dom.getStyle(el,_55);if(this.patterns.transparent.test(val)){var _58=el.parentNode;val=Y.Dom.getStyle(_58,_55);while(_58&&this.patterns.transparent.test(val)){_58=_58.parentNode;val=Y.Dom.getStyle(_58,_55);if(_58.tagName.toUpperCase()=="HTML"){val="#fff";}}}}else{val=_4f.getAttribute.call(this,_55);}return val;};_50.doMethod=function(_59,_5a,end){var val;if(this.patterns.color.test(_59)){val=[];for(var i=0,len=_5a.length;i<len;++i){val[i]=_4f.doMethod.call(this,_59,_5a[i],end[i]);}val="rgb("+Math.floor(val[0])+","+Math.floor(val[1])+","+Math.floor(val[2])+")";}else{val=_4f.doMethod.call(this,_59,_5a,end);}return val;};_50.setRuntimeAttribute=function(_5f){_4f.setRuntimeAttribute.call(this,_5f);if(this.patterns.color.test(_5f)){var _60=this.attributes;var _61=this.parseColor(this.runtimeAttributes[_5f].start);var end=this.parseColor(this.runtimeAttributes[_5f].end);if(typeof _60[_5f]["to"]==="undefined"&&typeof _60[_5f]["by"]!=="undefined"){end=this.parseColor(_60[_5f].by);for(var i=0,len=_61.length;i<len;++i){end[i]=_61[i]+end[i];}}this.runtimeAttributes[_5f].start=_61;this.runtimeAttributes[_5f].end=end;}};})();YAHOO.util.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*0.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*0.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*(0.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 -0.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)*0.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-YAHOO.util.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+0.75)+b;}else{if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+0.9375)+b;}}}return c*(7.5625*(t-=(2.625/2.75))*t+0.984375)+b;},bounceBoth:function(t,b,c,d){if(t<d/2){return YAHOO.util.Easing.bounceIn(t*2,0,c,d)*0.5+b;}return YAHOO.util.Easing.bounceOut(t*2-d,0,c,d)*0.5+c*0.5+b;}};(function(){YAHOO.util.Motion=function(el,_b2,_b3,_b4){if(el){YAHOO.util.Motion.superclass.constructor.call(this,el,_b2,_b3,_b4);}};YAHOO.extend(YAHOO.util.Motion,YAHOO.util.ColorAnim);var Y=YAHOO.util;var _b6=Y.Motion.superclass;var _b7=Y.Motion.prototype;_b7.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return ("Motion "+id);};_b7.patterns.points=/^points$/i;_b7.setAttribute=function(_ba,val,_bc){if(this.patterns.points.test(_ba)){_bc=_bc||"px";_b6.setAttribute.call(this,"left",val[0],_bc);_b6.setAttribute.call(this,"top",val[1],_bc);}else{_b6.setAttribute.call(this,_ba,val,_bc);}};_b7.getAttribute=function(_bd){if(this.patterns.points.test(_bd)){var val=[_b6.getAttribute.call(this,"left"),_b6.getAttribute.call(this,"top")];}else{val=_b6.getAttribute.call(this,_bd);}return val;};_b7.doMethod=function(_bf,_c0,end){var val=null;if(this.patterns.points.test(_bf)){var t=this.method(this.currentFrame,0,100,this.totalFrames)/100;val=Y.Bezier.getPosition(this.runtimeAttributes[_bf],t);}else{val=_b6.doMethod.call(this,_bf,_c0,end);}return val;};_b7.setRuntimeAttribute=function(_c4){if(this.patterns.points.test(_c4)){var el=this.getEl();var _c6=this.attributes;var _c7;var _c8=_c6["points"]["control"]||[];var end;var i,len;if(_c8.length>0&&!(_c8[0] instanceof Array)){_c8=[_c8];}else{var tmp=[];for(i=0,len=_c8.length;i<len;++i){tmp[i]=_c8[i];}_c8=tmp;}if(Y.Dom.getStyle(el,"position")=="static"){Y.Dom.setStyle(el,"position","relative");}if(_cd(_c6["points"]["from"])){Y.Dom.setXY(el,_c6["points"]["from"]);}else{Y.Dom.setXY(el,Y.Dom.getXY(el));}_c7=this.getAttribute("points");if(_cd(_c6["points"]["to"])){end=_ce.call(this,_c6["points"]["to"],_c7);var _cf=Y.Dom.getXY(this.getEl());for(i=0,len=_c8.length;i<len;++i){_c8[i]=_ce.call(this,_c8[i],_c7);}}else{if(_cd(_c6["points"]["by"])){end=[_c7[0]+_c6["points"]["by"][0],_c7[1]+_c6["points"]["by"][1]];for(i=0,len=_c8.length;i<len;++i){_c8[i]=[_c7[0]+_c8[i][0],_c7[1]+_c8[i][1]];}}}this.runtimeAttributes[_c4]=[_c7];if(_c8.length>0){this.runtimeAttributes[_c4]=this.runtimeAttributes[_c4].concat(_c8);}this.runtimeAttributes[_c4][this.runtimeAttributes[_c4].length]=end;}else{_b6.setRuntimeAttribute.call(this,_c4);}};var _ce=function(val,_d1){var _d2=Y.Dom.getXY(this.getEl());val=[val[0]-_d2[0]+_d1[0],val[1]-_d2[1]+_d1[1]];return val;};var _cd=function(_d3){return (typeof _d3!=="undefined");};})();(function(){YAHOO.util.Scroll=function(el,_d5,_d6,_d7){if(el){YAHOO.util.Scroll.superclass.constructor.call(this,el,_d5,_d6,_d7);}};YAHOO.extend(YAHOO.util.Scroll,YAHOO.util.ColorAnim);var Y=YAHOO.util;var _d9=Y.Scroll.superclass;var _da=Y.Scroll.prototype;_da.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return ("Scroll "+id);};_da.doMethod=function(_dd,_de,end){var val=null;if(_dd=="scroll"){val=[this.method(this.currentFrame,_de[0],end[0]-_de[0],this.totalFrames),this.method(this.currentFrame,_de[1],end[1]-_de[1],this.totalFrames)];}else{val=_d9.doMethod.call(this,_dd,_de,end);}return val;};_da.getAttribute=function(_e1){var val=null;var el=this.getEl();if(_e1=="scroll"){val=[el.scrollLeft,el.scrollTop];}else{val=_d9.getAttribute.call(this,_e1);}return val;};_da.setAttribute=function(_e4,val,_e6){var el=this.getEl();if(_e4=="scroll"){el.scrollLeft=val[0];el.scrollTop=val[1];}else{_d9.setAttribute.call(this,_e4,val,_e6);}};})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.2.0",build:"127"});
+

Added: jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/ext-all.js
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/plugins/ExtJS/share/web/static/js/extjs/ext-all.js	Mon May  7 16:28:32 2007
@@ -0,0 +1,254 @@
+/*
+ * Ext JS Library 1.0
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * licensing at extjs.com
+ * 
+ * http://www.extjs.com/license
+ */
+
+Ext.DomHelper=function(){var _1=null;var _2=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var _3=function(o){if(typeof o=="string"){return o;}var b="";if(!o.tag){o.tag="div";}b+="<"+o.tag;for(var _6 in o){if(_6=="tag"||_6=="children"||_6=="cn"||_6=="html"||typeof o[_6]=="function"){continue;}if(_6=="style"){var s=o["style"];if(typeof s=="function"){s=s.call();}if(typeof s=="string"){b+=" style=\""+s+"\"";}else{if(typeof s=="object"){b+=" style=\"";for(var _8 in s){if(typeof s[_8]!="function"){b+=_8+":"+s[_8]+";";}}b+="\"";}}}else{if(_6=="cls"){b+=" class=\""+o["cls"]+"\"";}else{if(_6=="htmlFor"){b+=" for=\""+o["htmlFor"]+"\"";}else{b+=" "+_6+"=\""+o[_6]+"\"";}}}}if(_2.test(o.tag)){b+="/>";}else{b+=">";var cn=o.children||o.cn;if(cn){if(cn instanceof Array){for(var i=0,_b=cn.length;i<_b;i++){b+=_3(cn[i],b);}}else{b+=_3(cn,b);}}if(o.html){b+=o.html;}b+="</"+o.tag+">";}return b;};var _c=function(o,_e){var el=document.createElement(o.tag);var _10=el.setAttribute?true:false;for(var _11 in o){if(_11=="tag"||_11=="children"||_11=="cn"||_11=="html"||_11=="style"||typeof o[_11]=="function"){continue;}if(_11=="cls"){el.className=o["cls"];}else{if(_10){el.setAttribute(_11,o[_11]);}else{el[_11]=o[_11];}}}Ext.DomHelper.applyStyles(el,o.style);var cn=o.children||o.cn;if(cn){if(cn instanceof Array){for(var i=0,len=cn.length;i<len;i++){_c(cn[i],b);}}else{_c(cn,b);}}if(o.html){el.innerHTML=o.html;}if(_e){_e.appendChild(el);}return el;};var _15=function(_16,s,h,e){_1.innerHTML=[s,h,e].join("");var i=-1,el=_1;while(++i<_16){el=el.firstChild;}return el;};var ts="<table>",te="</table>",tbs=ts+"<tbody>",tbe="</tbody>"+te,trs=tbs+"<tr>",tre="</tr>"+tbe;var _22=function(tag,_24,el,_26){if(!_1){_1=document.createElement("div");}var _27;var _28=null;if(tag=="td"){if(_24=="afterbegin"||_24=="beforeend"){return;}if(_24=="beforebegin"){_28=el;el=el.parentNode;}else{_28=el.nextSibling;el=el.parentNode;}_27=_15(4,trs,_26,tre);}else{if(tag=="tr"){if(_24=="beforebegin"){_28=el;el=el.parentNode;_27=_15(3,tbs,_26,tbe);}else{if(_24=="afterend"){_28=el.nextSibling;el=el.parentNode;_27=_15(3,tbs,_26,tbe);}else{if(_24=="afterbegin"){_28=el.firstChild;}_27=_15(4,trs,_26,tre);}}}else{if(tag=="tbody"){if(_24=="beforebegin"){_28=el;el=el.parentNode;_27=_15(2,ts,_26,te);}else{if(_24=="afterend"){_28=el.nextSibling;el=el.parentNode;_27=_15(2,ts,_26,te);}else{if(_24=="afterbegin"){_28=el.firstChild;}_27=_15(3,tbs,_26,tbe);}}}else{if(_24=="beforebegin"||_24=="afterend"){return;}if(_24=="afterbegin"){_28=el.firstChild;}_27=_15(2,ts,_26,te);}}}el.insertBefore(_27,_28);return _27;};return {useDom:false,markup:function(o){return _3(o);},applyStyles:function(el,_2b){if(_2b){el=Ext.fly(el);if(typeof _2b=="string"){var re=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;var _2d;while((_2d=re.exec(_2b))!=null){el.setStyle(_2d[1],_2d[2]);}}else{if(typeof _2b=="object"){for(var _2e in _2b){el.setStyle(_2e,_2b[_2e]);}}else{if(typeof _2b=="function"){Ext.DomHelper.applyStyles(el,_2b.call());}}}}},insertHtml:function(_2f,el,_31){_2f=_2f.toLowerCase();if(el.insertAdjacentHTML){var tag=el.tagName.toLowerCase();if(tag=="table"||tag=="tbody"||tag=="tr"||tag=="td"){var rs;if(rs=_22(tag,_2f,el,_31)){return rs;}}switch(_2f){case "beforebegin":el.insertAdjacentHTML(_2f,_31);return el.previousSibling;case "afterbegin":el.insertAdjacentHTML(_2f,_31);return el.firstChild;case "beforeend":el.insertAdjacentHTML(_2f,_31);return el.lastChild;case "afterend":el.insertAdjacentHTML(_2f,_31);return el.nextSibling;}throw "Illegal insertion point -> \""+_2f+"\"";}var _34=el.ownerDocument.createRange();var _35;switch(_2f){case "beforebegin":_34.setStartBefore(el);_35=_34.createContextualFragment(_31);el.parentNode.insertBefore(_35,el);return el.previousSibling;case "afterbegin":if(el.firstChild){_34.setStartBefore(el.firstChild);}else{_34.selectNodeContents(el);_34.collapse(true);}_35=_34.createContextualFragment(_31);el.insertBefore(_35,el.firstChild);return el.firstChild;case "beforeend":if(el.lastChild){_34.setStartAfter(el.lastChild);}else{_34.selectNodeContents(el);_34.collapse(false);}_35=_34.createContextualFragment(_31);el.appendChild(_35);return el.lastChild;case "afterend":_34.setStartAfter(el);_35=_34.createContextualFragment(_31);el.parentNode.insertBefore(_35,el.nextSibling);return el.nextSibling;}throw "Illegal insertion point -> \""+_2f+"\"";},insertBefore:function(el,o,_38){return this.doInsert(el,o,_38,"beforeBegin");},insertAfter:function(el,o,_3b){return this.doInsert(el,o,_3b,"afterEnd","nextSibling");},insertFirst:function(el,o,_3e){return this.doInsert(el,o,_3e,"afterBegin");},doInsert:function(el,o,_41,pos,_43){el=Ext.getDom(el);var _44;if(this.useDom){_44=_c(o,null);el.parentNode.insertBefore(_44,_43?el[_43]:el);}else{var _45=_3(o);_44=this.insertHtml(pos,el,_45);}return _41?Ext.get(_44,true):_44;},append:function(el,o,_48){el=Ext.getDom(el);var _49;if(this.useDom){_49=_c(o,null);el.appendChild(_49);}else{var _4a=_3(o);_49=this.insertHtml("beforeEnd",el,_4a);}return _48?Ext.get(_49,true):_49;},overwrite:function(el,o,_4d){el=Ext.getDom(el);el.innerHTML=_3(o);return _4d?Ext.get(el.firstChild,true):el.firstChild;},createTemplate:function(o){var _4f=_3(o);return new Ext.Template(_4f);}};}();
+
+Ext.Template=function(_1){if(_1 instanceof Array){_1=_1.join("");}else{if(arguments.length>1){_1=Array.prototype.join.call(arguments,"");}}this.html=_1;};Ext.Template.prototype={applyTemplate:function(_2){if(this.compiled){return this.compiled(_2);}var _3=this.disableFormats!==true;var fm=Ext.util.Format,_5=this;var fn=function(m,_8,_9,_a){if(_9&&_3){if(_9.substr(0,5)=="this."){return _5.call(_9.substr(5),_2[_8]);}else{if(_a){var re=/^\s*['"](.*)["']\s*$/;_a=_a.split(",");for(var i=0,_d=_a.length;i<_d;i++){_a[i]=_a[i].replace(re,"$1");}_a=[_2[_8]].concat(_a);}else{_a=[_2[_8]];}return fm[_9].apply(fm,_a);}}else{return _2[_8]!==undefined?_2[_8]:"";}};return this.html.replace(this.re,fn);},set:function(_e,_f){this.html=_e;this.compiled=null;if(_f){this.compile();}return this;},disableFormats:false,re:/\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,compile:function(){var fm=Ext.util.Format;var _11=this.disableFormats!==true;var sep=Ext.isGecko?"+":",";var fn=function(m,_15,_16,_17){if(_16&&_11){_17=_17?","+_17:"";if(_16.substr(0,5)!="this."){_16="fm."+_16+"(";}else{_16="this.call(\""+_16.substr(5)+"\", ";_17="";}}else{_17="",_16="(values['"+_15+"'] == undefined ? '' : ";}return "'"+sep+_16+"values['"+_15+"']"+_17+")"+sep+"'";};var _18;if(Ext.isGecko){_18="this.compiled = function(values){ return '"+this.html.replace(/(\r\n|\n)/g,"\\n").replace("'","\\'").replace(this.re,fn)+"';};";}else{_18=["this.compiled = function(values){ return ['"];_18.push(this.html.replace(/(\r\n|\n)/g,"\\n").replace("'","\\'").replace(this.re,fn));_18.push("'].join('');};");_18=_18.join("");}eval(_18);return this;},call:function(_19,_1a){return this[_19](_1a);},insertBefore:function(el,_1c,_1d){el=Ext.getDom(el);var _1e=Ext.DomHelper.insertHtml("beforeBegin",el,this.applyTemplate(_1c));return _1d?Ext.get(_1e,true):_1e;},insertAfter:function(el,_20,_21){el=Ext.getDom(el);var _22=Ext.DomHelper.insertHtml("afterEnd",el,this.applyTemplate(_20));return _21?Ext.get(_22,true):_22;},append:function(el,_24,_25){el=Ext.getDom(el);var _26=Ext.DomHelper.insertHtml("beforeEnd",el,this.applyTemplate(_24));return _25?Ext.get(_26,true):_26;},overwrite:function(el,_28,_29){el=Ext.getDom(el);el.innerHTML=this.applyTemplate(_28);return _29?Ext.get(el.firstChild,true):el.firstChild;}};Ext.Template.prototype.apply=Ext.Template.prototype.applyTemplate;Ext.DomHelper.Template=Ext.Template;Ext.Template.from=function(el){el=Ext.getDom(el);return new Ext.Template(el.value||el.innerHTML);};Ext.MasterTemplate=function(){Ext.MasterTemplate.superclass.constructor.apply(this,arguments);this.originalHtml=this.html;var st={};var m,re=this.subTemplateRe;re.lastIndex=0;var _2e=0;while(m=re.exec(this.html)){var _2f=m[1],_30=m[2];st[_2e]={name:_2f,index:_2e,buffer:[],tpl:new Ext.Template(_30)};if(_2f){st[_2f]=st[_2e];}st[_2e].tpl.compile();st[_2e].tpl.call=this.call.createDelegate(this);_2e++;}this.subCount=_2e;this.subs=st;};Ext.extend(Ext.MasterTemplate,Ext.Template,{subTemplateRe:/<tpl(?:\sname="([\w-]+)")?>((?:.|\n)*?)<\/tpl>/gi,add:function(_31,_32){if(arguments.length==1){_32=arguments[0];_31=0;}var s=this.subs[_31];s.buffer[s.buffer.length]=s.tpl.apply(_32);return this;},fill:function(_34,_35,_36){var a=arguments;if(a.length==1||(a.length==2&&typeof a[1]=="boolean")){_35=a[0];_34=0;_36=a[1];}if(_36){this.reset();}for(var i=0,len=_35.length;i<len;i++){this.add(_34,_35[i]);}return this;},reset:function(){var s=this.subs;for(var i=0;i<this.subCount;i++){s[i].buffer=[];}return this;},applyTemplate:function(_3c){var s=this.subs;var _3e=-1;this.html=this.originalHtml.replace(this.subTemplateRe,function(m,_40){return s[++_3e].buffer.join("");});return Ext.MasterTemplate.superclass.applyTemplate.call(this,_3c);},apply:function(){return this.applyTemplate.apply(this,arguments);},compile:function(){return this;}});Ext.MasterTemplate.prototype.addAll=Ext.MasterTemplate.prototype.fill;Ext.MasterTemplate.from=function(el){el=Ext.getDom(el);return new Ext.MasterTemplate(el.value||el.innerHTML);};
+
+Ext.DomQuery=function(){var _1={},_2={},_3={};var _4=/\S/;var _5=/^\s+|\s+$/g;var _6=/\{(\d+)\}/g;var _7=/^(\s?[\/>]\s?|\s|$)/;var _8=/^(#)?([\w-\*]+)/;function child(p,_a){var i=0;var n=p.firstChild;while(n){if(n.nodeType==1){if(++i==_a){return n;}}n=n.nextSibling;}return null;}function next(n){while((n=n.nextSibling)&&n.nodeType!=1){}return n;}function prev(n){while((n=n.previousSibling)&&n.nodeType!=1){}return n;}function clean(d){var n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!_4.test(n.nodeValue)){d.removeChild(n);}else{n.nodeIndex=++ni;}n=nx;}return this;}function byClassName(c,a,v,re,cn){if(!v){return c;}var r=[];for(var i=0,ci;ci=c[i];i++){cn=ci.className;if(cn&&(" "+cn+" ").indexOf(v)!=-1){r[r.length]=ci;}}return r;}function attrValue(n,_1c){if(!n.tagName&&typeof n.length!="undefined"){n=n[0];}if(!n){return null;}if(_1c=="for"){return n.htmlFor;}if(_1c=="class"||_1c=="className"){return n.className;}return n.getAttribute(_1c)||n[_1c];}function getNodes(ns,_1e,_1f){var _20=[],cs;if(!ns){return _20;}_1e=_1e?_1e.replace(_5,""):"";_1f=_1f||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns];}if(_1e!="/"&&_1e!=">"){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(_1f);for(var j=0,ci;ci=cs[j];j++){_20[_20.length]=ci;}}}else{for(var i=0,ni;ni=ns[i];i++){var cn=ni.getElementsByTagName(_1f);for(var j=0,cj;cj=cn[j];j++){if(cj.parentNode==ni){_20[_20.length]=cj;}}}}return _20;}function concat(a,b){if(b.slice){return a.concat(b);}for(var i=0,l=b.length;i<l;i++){a[a.length]=b[i];}return a;}function byTag(cs,_2d){if(cs.tagName||cs==document){cs=[cs];}if(!_2d){return cs;}var r=[];_2d=_2d.toLowerCase();for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType==1&&ci.tagName.toLowerCase()==_2d){r[r.length]=ci;}}return r;}function byId(cs,_32,id){if(cs.tagName||cs==document){cs=[cs];}if(!id){return cs;}var r=[];for(var i=0,ci;ci=cs[i];i++){if(ci&&ci.id==id){r[r.length]=ci;return r;}}return r;}function byAttribute(cs,_38,_39,op,_3b){var r=[],st=_3b=="{";var f=Ext.DomQuery.operators[op];for(var i=0;ci=cs[i];i++){var a;if(st){a=Ext.DomQuery.getStyle(ci,_38);}else{if(_38=="class"||_38=="className"){a=ci.className;}else{if(_38=="for"){a=ci.htmlFor;}else{if(_38=="href"){a=ci.getAttribute("href",2);}else{a=ci.getAttribute(_38);}}}}if((f&&f(a,_39))||(!f&&a)){r[r.length]=ci;}}return r;}function byPseudo(cs,_42,_43){return Ext.DomQuery.pseudos[_42](cs,_43);}var _44=window.ActiveXObject?true:false;var key=30803;function nodupIEXml(cs){var d=++key;cs[0].setAttribute("_nodup",d);var r=[cs[0]];for(var i=1,len=cs.length;i<len;i++){var c=cs[i];if(!c.getAttribute("_nodup")!=d){c.setAttribute("_nodup",d);r[r.length]=c;}}for(var i=0,len=cs.length;i<len;i++){cs[i].removeAttribute("_nodup");}return r;}function nodup(cs){if(!cs){return [];}var len=cs.length,c,i,r=cs,cj;if(!len||typeof cs.nodeType!="undefined"||len==1){return cs;}if(_44&&typeof cs[0].selectSingleNode!="undefined"){return nodupIEXml(cs);}var d=++key;cs[0]._nodup=d;for(i=1;c=cs[i];i++){if(c._nodup!=d){c._nodup=d;}else{r=[];for(var j=0;j<i;j++){r[r.length]=cs[j];}for(j=i+1;cj=cs[j];j++){if(cj._nodup!=d){cj._nodup=d;r[r.length]=cj;}}return r;}}return r;}function quickDiffIEXml(c1,c2){var d=++key;for(var i=0,len=c1.length;i<len;i++){c1[i].setAttribute("_qdiff",d);}var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i].getAttribute("_qdiff")!=d){r[r.length]=c2[i];}}for(var i=0,len=c1.length;i<len;i++){c1[i].removeAttribute("_qdiff");}return r;}function quickDiff(c1,c2){var _5c=c1.length;if(!_5c){return c2;}if(_44&&c1[0].selectSingleNode){return quickDiffIEXml(c1,c2);}var d=++key;for(var i=0;i<_5c;i++){c1[i]._qdiff=d;}var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i]._qdiff!=d){r[r.length]=c2[i];}}return r;}function quickId(ns,_62,_63,id){if(ns==_63){var d=_63.ownerDocument||_63;return d.getElementById(id);}ns=getNodes(ns,_62,"*");return byId(ns,null,id);}return {getStyle:function(el,_67){return Ext.fly(el).getStyle(_67);},compile:function(_68,_69){while(_68.substr(0,1)=="/"){_68=_68.substr(1);}_69=_69||"select";var fn=["var f = function(root){\n var mode; var n = root || document;\n"];var q=_68,_6c,lq;var tk=Ext.DomQuery.matchers;var _6f=tk.length;var mm;while(q&&lq!=q){lq=q;var tm=q.match(_8);if(_69=="select"){if(tm){if(tm[1]=="#"){fn[fn.length]="n = quickId(n, mode, root, \""+tm[2]+"\");";}else{fn[fn.length]="n = getNodes(n, mode, \""+tm[2]+"\");";}q=q.replace(tm[0],"");}else{if(q.substr(0,1)!="@"){fn[fn.length]="n = getNodes(n, mode, \"*\");";}}}else{if(tm){if(tm[1]=="#"){fn[fn.length]="n = byId(n, null, \""+tm[2]+"\");";}else{fn[fn.length]="n = byTag(n, \""+tm[2]+"\");";}q=q.replace(tm[0],"");}}while(!(mm=q.match(_7))){var _72=false;for(var j=0;j<_6f;j++){var t=tk[j];var m=q.match(t.re);if(m){fn[fn.length]=t.select.replace(_6,function(x,i){return m[i];});q=q.replace(m[0],"");_72=true;break;}}if(!_72){throw "Error parsing selector, parsing failed at \""+q+"\"";}}if(mm[1]){fn[fn.length]="mode=\""+mm[1]+"\";";q=q.replace(mm[1],"");}}fn[fn.length]="return nodup(n);\n}";eval(fn.join(""));return f;},select:function(_78,_79,_7a){if(!_79||_79==document){_79=document;}if(typeof _79=="string"){_79=document.getElementById(_79);}var _7b=_78.split(",");var _7c=[];for(var i=0,len=_7b.length;i<len;i++){var p=_7b[i].replace(_5,"");if(!_1[p]){_1[p]=Ext.DomQuery.compile(p);if(!_1[p]){throw p+" is not a valid selector";}}var _80=_1[p](_79);if(_80&&_80!=document){_7c=_7c.concat(_80);}}return _7c;},selectNode:function(_81,_82){return Ext.DomQuery.select(_81,_82)[0];},selectValue:function(_83,_84,_85){_83=_83.replace(_5,"");if(!_3[_83]){_3[_83]=Ext.DomQuery.compile(_83,"select");}var n=_3[_83](_84);n=n[0]?n[0]:n;var v=(n&&n.firstChild?n.firstChild.nodeValue:null);return (v===null?_85:v);},selectNumber:function(_88,_89,_8a){var v=Ext.DomQuery.selectValue(_88,_89,_8a||0);return parseFloat(v);},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el);}var _8e=(el instanceof Array);var _8f=Ext.DomQuery.filter(_8e?el:[el],ss);return _8e?(_8f.length==el.length):(_8f.length>0);},filter:function(els,ss,_92){ss=ss.replace(_5,"");if(!_2[ss]){_2[ss]=Ext.DomQuery.compile(ss,"simple");}var _93=_2[ss](els);return _92?quickDiff(_93,els):_93;},matchers:[{re:/^\.([\w-]+)/,select:"n = byClassName(n, null, \" {1} \");"},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:"n = byPseudo(n, \"{1}\", \"{2}\");"},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:"n = byAttribute(n, \"{2}\", \"{4}\", \"{3}\", \"{1}\");"},{re:/^#([\w-]+)/,select:"n = byId(n, null, \"{1}\");"},{re:/^@([\w-]+)/,select:"return {firstChild:{nodeValue:attrValue(n, \"{1}\")}};"}],operators:{"=":function(a,v){return a==v;},"!=":function(a,v){return a!=v;},"^=":function(a,v){return a&&a.substr(0,v.length)==v;},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v;},"*=":function(a,v){return a&&a.indexOf(v)!==-1;},"%=":function(a,v){return (a%v)==0;}},pseudos:{"first-child":function(c){var r=[],n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[r.length]=ci;}}return r;},"last-child":function(c){var r=[];for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[r.length]=ci;}}return r;},"nth-child":function(c,a){var r=[];if(a!="odd"&&a!="even"){for(var i=0,ci;ci=c[i];i++){var m=child(ci.parentNode,a);if(m==ci){r[r.length]=m;}}return r;}var p;for(var i=0,l=c.length;i<l;i++){var cp=c[i].parentNode;if(cp!=p){clean(cp);p=cp;}}for(var i=0,ci;ci=c[i];i++){var m=false;if(a=="odd"){m=((ci.nodeIndex+1)%2==1);}else{if(a=="even"){m=((ci.nodeIndex+1)%2==0);}}if(m){r[r.length]=ci;}}return r;},"only-child":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[r.length]=ci;}}return r;},"empty":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,_bd=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){_bd=false;break;}}if(_bd){r[r.length]=ci;}}return r;},"contains":function(c,v){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.innerHTML.indexOf(v)!==-1){r[r.length]=ci;}}return r;},"nodeValue":function(c,v){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[r.length]=ci;}}return r;},"checked":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[r.length]=ci;}}return r;},"not":function(c,ss){return Ext.DomQuery.filter(c,ss,true);},"odd":function(c){return this["nth-child"](c,"odd");},"even":function(c){return this["nth-child"](c,"even");},"nth":function(c,a){return c[a-1]||[];},"first":function(c){return c[0]||[];},"last":function(c){return c[c.length-1]||[];},"has":function(c,ss){var s=Ext.DomQuery.select;var r=[];for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[r.length]=ci;}}return r;},"next":function(c,ss){var is=Ext.DomQuery.is;var r=[];for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[r.length]=ci;}}return r;},"prev":function(c,ss){var is=Ext.DomQuery.is;var r=[];for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[r.length]=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(){var ce=this.events[arguments[0].toLowerCase()];if(typeof ce=="object"){return ce.fire.apply(ce,Array.prototype.slice.call(arguments,1));}else{return true;}},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(_2,fn,_4,o){if(typeof _2=="object"){o=_2;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;}o=(!o||typeof o=="boolean")?{}:o;_2=_2.toLowerCase();var ce=this.events[_2]||true;if(typeof ce=="boolean"){ce=new Ext.util.Event(this,_2);this.events[_2]=ce;}ce.addListener(fn,_4,o);},removeListener:function(_8,fn,_a){var ce=this.events[_8.toLowerCase()];if(typeof ce=="object"){ce.removeListener(fn,_a);}},purgeListeners:function(){for(var _c in this.events){if(typeof this.events[_c]=="object"){this.events[_c].clearListeners();}}},relayEvents:function(o,_e){var _f=function(_10){return function(){return this.fireEvent.apply(this,Ext.combine(_10,Array.prototype.slice.call(arguments,0)));};};for(var i=0,len=_e.length;i<len;i++){var _13=_e[i];if(!this.events[_13]){this.events[_13]=true;}o.on(_13,_f(_13),this);}},addEvents:function(o){if(!this.events){this.events={};}Ext.applyIf(this.events,o);},hasListener:function(_15){var e=this.events[_15];return typeof e=="object"&&e.listeners.length>0;}};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,_19){o.fireEvent=o.fireEvent.createInterceptor(fn,_19);};Ext.util.Observable.releaseCapture=function(o){o.fireEvent=Ext.util.Observable.prototype.fireEvent;};(function(){var _1b=function(h,o,_1e){var _1f=new Ext.util.DelayedTask();return function(){_1f.delay(o.buffer,h,_1e,Array.prototype.slice.call(arguments,0));};};var _20=function(h,e,fn,_24){return function(){e.removeListener(fn,_24);return h.apply(_24,arguments);};};var _25=function(h,o,_28){return function(){var _29=Array.prototype.slice.call(arguments,0);setTimeout(function(){h.apply(_28,_29);},o.delay||10);};};Ext.util.Event=function(obj,_2b){this.name=_2b;this.obj=obj;this.listeners=[];};Ext.util.Event.prototype={addListener:function(fn,_2d,_2e){var o=_2e||{};_2d=_2d||this.obj;if(!this.isListening(fn,_2d)){var l={fn:fn,scope:_2d,options:o};var h=fn;if(o.delay){h=_25(h,o,_2d);}if(o.single){h=_20(h,this,fn,_2d);}if(o.buffer){h=_1b(h,o,_2d);}l.fireFn=h;if(!this.firing){this.listeners.push(l);}else{this.listeners=this.listeners.slice(0);this.listeners.push(l);}}},findListener:function(fn,_33){_33=_33||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==_33){return i;}}return -1;},isListening:function(fn,_39){return this.findListener(fn,_39)!=-1;},removeListener:function(fn,_3b){var _3c;if((_3c=this.findListener(fn,_3b))!=-1){if(!this.firing){this.listeners.splice(_3c,1);}else{this.listeners=this.listeners.slice(0);this.listeners.splice(_3c,1);}return true;}return false;},clearListeners:function(){this.listeners=[];},fire:function(){var ls=this.listeners,_3e,len=ls.length;if(len>0){this.firing=true;var _40=Array.prototype.slice.call(arguments,0);for(var i=0;i<len;i++){var l=ls[i];if(l.fireFn.apply(l.scope,arguments)===false){this.firing=false;return false;}}this.firing=false;}return true;}};})();
+
+Ext.EventManager=function(){var _1,_2,_3=false;var _4,_5,_6,_7;var E=Ext.lib.Event;var D=Ext.lib.Dom;var _a=function(){if(!_3){_3=true;if(_2){clearInterval(_2);}if(Ext.isGecko||Ext.isOpera){document.removeEventListener("DOMContentLoaded",_a,false);}if(_1){_1.fire();_1.clearListeners();}}};var _b=function(){_1=new Ext.util.Event();if(Ext.isGecko||Ext.isOpera){document.addEventListener("DOMContentLoaded",_a,false);}else{if(Ext.isIE){document.write("<s"+"cript id=\"ie-deferred-loader\" defer=\"defer\" src=\"/"+"/:\"></s"+"cript>");E.on("ie-deferred-loader","readystatechange",function(){if(this.readyState=="complete"){_a();}});}else{if(Ext.isSafari){_2=setInterval(function(){var rs=document.readyState;if(rs=="complete"){_a();}},10);}}}E.on(window,"load",_a);};var _d=function(h,o){var _10=new Ext.util.DelayedTask(h);return function(e){e=new Ext.EventObjectImpl(e);_10.delay(o.buffer,h,null,[e]);};};var _12=function(h,el,_15,fn){return function(e){Ext.EventManager.removeListener(el,_15,fn);h(e);};};var _18=function(h,o){return function(e){e=new Ext.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var _1c=function(_1d,_1e,opt,fn,_21){var o=(!opt||typeof opt=="boolean")?{}:opt;fn=fn||o.fn;_21=_21||o.scope;var el=Ext.getDom(_1d);if(!el){throw "Error listening for "+_1e+". Element "+_1d+" doesn't exist.";}var h=function(e){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(_21||el,e,t,o);};if(o.delay){h=_18(h,o);}if(o.single){h=_12(h,el,_1e,fn);}if(o.buffer){h=_d(h,o);}fn._handlers=fn._handlers||[];fn._handlers.push([Ext.id(el),_1e,h]);E.on(el,_1e,h);if(_1e=="mousewheel"&&el.addEventListener){el.addEventListener("DOMMouseScroll",h,false);E.on(window,"unload",function(){el.removeEventListener("DOMMouseScroll",h,false);});}if(_1e=="mousedown"&&el==document){Ext.EventManager.stoppedMouseDownEvent.addListener(h);}return h;};var _27=function(el,_29,fn){var id=Ext.id(el),hds=fn._handlers;if(hds){for(var i=0,len=hds.length;i<len;i++){var h=hds[i];if(h[0]==id&&h[1]==_29){var hd=h[2];hds.splice(i,1);return E.un(el,_29,hd);}}}E.un(el,_29,fn);el=Ext.getDom(el);if(_29=="mousewheel"&&el.addEventListener){el.removeEventListener("DOMMouseScroll",fn,false);}if(_29=="mousedown"&&el==document){Ext.EventManager.stoppedMouseDownEvent.removeListener(fn);}};var _31=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized)$/;var pub={wrap:function(fn,_34,_35){return function(e){Ext.EventObject.setEvent(e);fn.call(_35?_34||window:window,Ext.EventObject,_34);};},addListener:function(_37,_38,fn,_3a,_3b){if(typeof _38=="object"){var o=_38;for(var e in o){if(_31.test(e)){continue;}if(typeof o[e]=="function"){_1c(_37,e,o,o[e],o.scope);}else{_1c(_37,e,o[e]);}}return;}return _1c(_37,_38,_3b,fn,_3a);},removeListener:function(_3e,_3f,fn){return _27(_3e,_3f,fn);},onDocumentReady:function(fn,_42,_43){if(_3){fn.call(_42||window,_42);return;}if(!_1){_b();}_1.addListener(fn,_42,_43);},onWindowResize:function(fn,_45,_46){if(!_4){_4=new Ext.util.Event();_5=new Ext.util.DelayedTask(function(){_4.fire(D.getViewWidth(),D.getViewHeight());});E.on(window,"resize",function(){if(Ext.isIE){_5.delay(50);}else{_4.fire(D.getViewWidth(),D.getViewHeight());}});}_4.addListener(fn,_45,_46);},onTextResize:function(fn,_48,_49){if(!_6){_6=new Ext.util.Event();var _4a=new Ext.Element(document.createElement("div"));_4a.dom.className="x-text-resize";_4a.dom.innerHTML="X";_4a.appendTo(document.body);_7=_4a.dom.offsetHeight;setInterval(function(){if(_4a.dom.offsetHeight!=_7){_6.fire(_7,_7=_4a.dom.offsetHeight);}},this.textResizeInterval);}_6.addListener(fn,_48,_49);},removeResizeListener:function(fn,_4c){if(_4){_4.removeListener(fn,_4c);}},fireResize:function(){if(_4){_4.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;Ext.onReady(function(){var bd=Ext.get(document.body);if(!bd){return;}var cls=Ext.isIE?"ext-ie":Ext.isGecko?"ext-gecko":Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":"";if(Ext.isBorderBox){cls+=" ext-border-box";}if(Ext.isStrict){cls+=" ext-strict";}bd.addClass(cls);});Ext.EventObject=function(){var E=Ext.lib.Event;var _50={63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35};var _51=Ext.isIE?{1:0,4:1,2:2}:(Ext.isSafari?{1:0,2:1,3:2}:{0:0,1:1,2:2});Ext.EventObjectImpl=function(e){if(e){this.setEvent(e.browserEvent||e);}};Ext.EventObjectImpl.prototype={browserEvent:null,button:-1,shiftKey:false,ctrlKey:false,altKey:false,BACKSPACE:8,TAB:9,RETURN:13,ENTER:13,SHIFT:16,CONTROL:17,ESC:27,SPACE:32,PAGEUP:33,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46,F5:116,setEvent:function(e){if(e==this||(e&&e.browserEvent)){return e;}this.browserEvent=e;if(e){this.button=e.button?_51[e.button]:(e.which?e.which-1:-1);this.shiftKey=e.shiftKey;this.ctrlKey=e.ctrlKey||e.metaKey;this.altKey=e.altKey;this.keyCode=e.keyCode;this.charCode=e.charCode;this.target=E.getTarget(e);this.xy=E.getXY(e);}else{this.button=-1;this.shiftKey=false;this.ctrlKey=false;this.altKey=false;this.keyCode=0;this.charCode=0;this.target=null;this.xy=[0,0];}return this;},stopEvent:function(){if(this.browserEvent){if(this.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(this);}E.stopEvent(this.browserEvent);}},preventDefault:function(){if(this.browserEvent){E.preventDefault(this.browserEvent);}},isNavKeyPress:function(){var k=this.keyCode;k=Ext.isSafari?(_50[k]||k):k;return (k>=33&&k<=40)||k==this.RETURN||k==this.TAB||k==this.ESC;},isSpecialKey:function(){var k=this.keyCode;return k==9||k==13||k==40||k==27||(k==16)||(k==17)||(k>=18&&k<=20)||(k>=33&&k<=35)||(k>=36&&k<=39)||(k>=44&&k<=45);},stopPropagation:function(){if(this.browserEvent){if(this.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(this);}E.stopPropagation(this.browserEvent);}},getCharCode:function(){return this.charCode||this.keyCode;},getKey:function(){var k=this.keyCode||this.charCode;return Ext.isSafari?(_50[k]||k):k;},getPageX:function(){return this.xy[0];},getPageY:function(){return this.xy[1];},getTime:function(){if(this.browserEvent){return E.getTime(this.browserEvent);}return null;},getXY:function(){return this.xy;},getTarget:function(_57,_58,_59){return _57?Ext.fly(this.target).findParent(_57,_58,_59):this.target;},getRelatedTarget:function(){if(this.browserEvent){return E.getRelatedTarget(this.browserEvent);}return null;},getWheelDelta:function(){var e=this.browserEvent;var _5b=0;if(e.wheelDelta){_5b=e.wheelDelta/120;if(window.opera){_5b=-_5b;}}else{if(e.detail){_5b=-e.detail/3;}}return _5b;},hasModifier:function(){return ((this.ctrlKey||this.altKey)||this.shiftKey)?true:false;},within:function(el,_5d){var t=this[_5d?"getRelatedTarget":"getTarget"]();return t&&Ext.fly(el).contains(t);},getPoint:function(){return new Ext.lib.Point(this.xy[0],this.xy[1]);}};return new Ext.EventObjectImpl();}();
+
+(function(){var D=Ext.lib.Dom;var E=Ext.lib.Event;var A=Ext.lib.Anim;var _4={};var _5=/(-[a-z])/gi;var _6=function(m,a){return a.charAt(1).toUpperCase();};var _9=document.defaultView;Ext.Element=function(_a,_b){var _c=typeof _a=="string"?document.getElementById(_a):_a;if(!_c){return null;}if(!_b&&Ext.Element.cache[_c.id]){return Ext.Element.cache[_c.id];}this.dom=_c;this.id=_c.id||Ext.id(_c);};var El=Ext.Element;El.prototype={originalDisplay:"",visibilityMode:1,defaultUnit:"px",setVisibilityMode:function(_e){this.visibilityMode=_e;return this;},enableDisplayMode:function(_f){this.setVisibilityMode(El.DISPLAY);if(typeof _f!="undefined"){this.originalDisplay=_f;}return this;},findParent:function(_10,_11,_12){var p=this.dom,b=document.body,_15=0,dq=Ext.DomQuery,_17;_11=_11||50;if(typeof _11!="number"){_17=Ext.getDom(_11);_11=10;}while(p&&p.nodeType==1&&_15<_11&&p!=b&&p!=_17){if(dq.is(p,_10)){return _12?Ext.get(p):p;}_15++;p=p.parentNode;}return null;},findParentNode:function(_18,_19,_1a){var p=Ext.fly(this.dom.parentNode,"_internal");return p?p.findParent(_18,_19,_1a):null;},up:function(_1c,_1d){return this.findParentNode(_1c,_1d,true);},is:function(_1e){return Ext.DomQuery.is(this.dom,_1e);},animate:function(_1f,_20,_21,_22,_23){this.anim(_1f,{duration:_20,callback:_21,easing:_22},_23);return this;},anim:function(_24,opt,_26,_27,_28,cb){_26=_26||"run";opt=opt||{};var _2a=Ext.lib.Anim[_26](this.dom,_24,(opt.duration||_27)||0.35,(opt.easing||_28)||"easeOut",function(){Ext.callback(cb,this);Ext.callback(opt.callback,opt.scope||this,[this,opt]);},this);opt.anim=_2a;return _2a;},preanim:function(a,i){return !a[i]?false:(typeof a[i]=="object"?a[i]:{duration:a[i+1],callback:a[i+2],easing:a[i+3]});},clean:function(_2d){if(this.isCleaned&&_2d!==true){return this;}var ns=/\S/;var d=this.dom,n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!ns.test(n.nodeValue)){d.removeChild(n);}else{n.nodeIndex=++ni;}n=nx;}this.isCleaned=true;return this;},calcOffsetsTo:function(el){el=Ext.get(el),d=el.dom;var _34=false;if(el.getStyle("position")=="static"){el.position("relative");_34=true;}var x=0,y=0;var op=this.dom;while(op&&op!=d&&op.tagName!="HTML"){x+=op.offsetLeft;y+=op.offsetTop;op=op.offsetParent;}if(_34){el.position("static");}return [x,y];},scrollIntoView:function(_38,_39){var c=Ext.getDom(_38)||document.body;var el=this.dom;var o=this.calcOffsetsTo(c),l=o[0],t=o[1],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(t<ct){c.scrollTop=t;}else{if(b>cb){c.scrollTop=b-ch;}}if(_39!==false){if(l<cl){c.scrollLeft=l;}else{if(r>cr){c.scrollLeft=r-c.clientWidth;}}}return this;},scrollChildIntoView:function(_46){Ext.fly(_46,"_scrollChildIntoView").scrollIntoView(this);},autoHeight:function(_47,_48,_49,_4a){var _4b=this.getHeight();this.clip();this.setHeight(1);setTimeout(function(){var _4c=parseInt(this.dom.scrollHeight,10);if(!_47){this.setHeight(_4c);this.unclip();if(typeof _49=="function"){_49();}}else{this.setHeight(_4b);this.setHeight(_4c,_47,_48,function(){this.unclip();if(typeof _49=="function"){_49();}}.createDelegate(this),_4a);}}.createDelegate(this),0);return this;},contains:function(el){if(!el){return false;}return D.isAncestor(this.dom,el.dom?el.dom:el);},isVisible:function(_4e){var vis=!(this.getStyle("visibility")=="hidden"||this.getStyle("display")=="none");if(_4e!==true||!vis){return vis;}var p=this.dom.parentNode;while(p&&p.tagName.toLowerCase()!="body"){if(!Ext.fly(p,"_isVisible").isVisible()){return false;}p=p.parentNode;}return true;},select:function(_51,_52){return El.select("#"+Ext.id(this.dom)+" "+_51,_52);},query:function(_53,_54){return Ext.DomQuery.select(_53,this.dom);},child:function(_55,_56){var n=Ext.DomQuery.selectNode(_55,this.dom);return _56?n:Ext.get(n);},initDD:function(_58,_59,_5a){var dd=new Ext.dd.DD(Ext.id(this.dom),_58,_59);return Ext.apply(dd,_5a);},initDDProxy:function(_5c,_5d,_5e){var dd=new Ext.dd.DDProxy(Ext.id(this.dom),_5c,_5d);return Ext.apply(dd,_5e);},initDDTarget:function(_60,_61,_62){var dd=new Ext.dd.DDTarget(Ext.id(this.dom),_60,_61);return Ext.apply(dd,_62);},setVisible:function(_64,_65){if(!_65||!A){if(this.visibilityMode==El.DISPLAY){this.setDisplayed(_64);}else{this.fixDisplay();this.dom.style.visibility=_64?"visible":"hidden";}}else{var dom=this.dom;var _67=this.visibilityMode;if(_64){this.setOpacity(0.01);this.setVisible(true);}this.anim({opacity:{to:(_64?1:0)}},this.preanim(arguments,1),null,0.35,"easeIn",function(){if(!_64){if(_67==El.DISPLAY){dom.style.display="none";}else{dom.style.visibility="hidden";}Ext.get(dom).setOpacity(1);}});}return this;},isDisplayed:function(){return this.getStyle("display")!="none";},toggle:function(_68){this.setVisible(!this.isVisible(),this.preanim(arguments,0));return this;},setDisplayed:function(_69){if(typeof _69=="boolean"){_69=_69?this.originalDisplay:"none";}this.setStyle("display",_69);return this;},focus:function(){try{this.dom.focus();}catch(e){}return this;},blur:function(){try{this.dom.blur();}catch(e){}return this;},addClass:function(_6a){if(_6a instanceof Array){for(var i=0,len=_6a.length;i<len;i++){this.addClass(_6a[i]);}}else{if(_6a&&!this.hasClass(_6a)){this.dom.className=this.dom.className+" "+_6a;}}return this;},radioClass:function(_6d){var _6e=this.dom.parentNode.childNodes;for(var i=0;i<_6e.length;i++){var s=_6e[i];if(s.nodeType==1){Ext.get(s).removeClass(_6d);}}this.addClass(_6d);return this;},removeClass:function(_71){if(!_71||!this.dom.className){return this;}if(_71 instanceof Array){for(var i=0,len=_71.length;i<len;i++){this.removeClass(_71[i]);}}else{if(this.hasClass(_71)){var re=this.classReCache[_71];if(!re){re=new RegExp("(?:^|\\s+)"+_71+"(?:\\s+|$)","g");this.classReCache[_71]=re;}this.dom.className=this.dom.className.replace(re," ");}}return this;},classReCache:{},toggleClass:function(_75){if(this.hasClass(_75)){this.removeClass(_75);}else{this.addClass(_75);}return this;},hasClass:function(_76){return _76&&(" "+this.dom.className+" ").indexOf(" "+_76+" ")!=-1;},replaceClass:function(_77,_78){this.removeClass(_77);this.addClass(_78);return this;},getStyles:function(){var a=arguments,len=a.length,r={};for(var i=0;i<len;i++){r[a[i]]=this.getStyle(a[i]);}return r;},getStyle:function(){return _9&&_9.getComputedStyle?function(_7d){var el=this.dom,v,cs,_81;if(_7d=="float"){_7d="cssFloat";}if(v=el.style[_7d]){return v;}if(cs=_9.getComputedStyle(el,"")){if(!(_81=_4[_7d])){_81=_4[_7d]=_7d.replace(_5,_6);}return cs[_81];}return null;}:function(_82){var el=this.dom,v,cs,_86;if(_82=="opacity"){if(typeof el.filter=="string"){var fv=parseFloat(el.filter.match(/alpha\(opacity=(.*)\)/i)[1]);if(!isNaN(fv)){return fv?fv/100:0;}}return 1;}else{if(_82=="float"){_82="styleFloat";}}if(!(_86=_4[_82])){_86=_4[_82]=_82.replace(_5,_6);}if(v=el.style[_86]){return v;}if(cs=el.currentStyle){return cs[_86];}return null;};}(),setStyle:function(_88,_89){if(typeof _88=="string"){var _8a;if(!(_8a=_4[_88])){_8a=_4[_88]=_88.replace(_5,_6);}if(_8a=="opacity"){this.setOpacity(_89);}else{this.dom.style[_8a]=_89;}}else{for(var _8b in _88){if(typeof _88[_8b]!="function"){this.setStyle(_8b,_88[_8b]);}}}return this;},applyStyles:function(_8c){Ext.DomHelper.applyStyles(this.dom,_8c);return this;},getX:function(){return D.getX(this.dom);},getY:function(){return D.getY(this.dom);},getXY:function(){return D.getXY(this.dom);},setX:function(x,_8e){if(!_8e||!A){D.setX(this.dom,x);}else{this.setXY([x,this.getY()],this.preanim(arguments,1));}return this;},setY:function(y,_90){if(!_90||!A){D.setY(this.dom,y);}else{this.setXY([this.getX(),y],this.preanim(arguments,1));}return this;},setLeft:function(_91){this.setStyle("left",this.addUnits(_91));return this;},setTop:function(top){this.setStyle("top",this.addUnits(top));return this;},setRight:function(_93){this.setStyle("right",this.addUnits(_93));return this;},setBottom:function(_94){this.setStyle("bottom",this.addUnits(_94));return this;},setXY:function(pos,_96){if(!_96||!A){D.setXY(this.dom,pos);}else{this.anim({points:{to:pos}},this.preanim(arguments,1),"motion");}return this;},setLocation:function(x,y,_99){this.setXY([x,y],this.preanim(arguments,2));return this;},moveTo:function(x,y,_9c){this.setXY([x,y],this.preanim(arguments,2));return this;},getRegion:function(){return D.getRegion(this.dom);},getHeight:function(_9d){var h=this.dom.offsetHeight||0;return _9d!==true?h:h-this.getBorderWidth("tb")-this.getPadding("tb");},getWidth:function(_9f){var w=this.dom.offsetWidth||0;return _9f!==true?w:w-this.getBorderWidth("lr")-this.getPadding("lr");},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(_a3){return {width:this.getWidth(_a3),height:this.getHeight(_a3)};},getValue:function(_a4){return _a4?parseInt(this.dom.value,10):this.dom.value;},adjustWidth:function(_a5){if(typeof _a5=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){_a5-=(this.getBorderWidth("lr")+this.getPadding("lr"));}if(_a5<0){_a5=0;}}return _a5;},adjustHeight:function(_a6){if(typeof _a6=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){_a6-=(this.getBorderWidth("tb")+this.getPadding("tb"));}if(_a6<0){_a6=0;}}return _a6;},setWidth:function(_a7,_a8){_a7=this.adjustWidth(_a7);if(!_a8||!A){this.dom.style.width=this.addUnits(_a7);}else{this.anim({width:{to:_a7}},this.preanim(arguments,1));}return this;},setHeight:function(_a9,_aa){_a9=this.adjustHeight(_a9);if(!_aa||!A){this.dom.style.height=this.addUnits(_a9);}else{this.anim({height:{to:_a9}},this.preanim(arguments,1));}return this;},setSize:function(_ab,_ac,_ad){if(typeof _ab=="object"){_ac=_ab.height;_ab=_ab.width;}_ab=this.adjustWidth(_ab);_ac=this.adjustHeight(_ac);if(!_ad||!A){this.dom.style.width=this.addUnits(_ab);this.dom.style.height=this.addUnits(_ac);}else{this.anim({width:{to:_ab},height:{to:_ac}},this.preanim(arguments,2));}return this;},setBounds:function(x,y,_b0,_b1,_b2){if(!_b2||!A){this.setSize(_b0,_b1);this.setLocation(x,y);}else{_b0=this.adjustWidth(_b0);_b1=this.adjustHeight(_b1);this.anim({points:{to:[x,y]},width:{to:_b0},height:{to:_b1}},this.preanim(arguments,4),"motion");}return this;},setRegion:function(_b3,_b4){this.setBounds(_b3.left,_b3.top,_b3.right-_b3.left,_b3.bottom-_b3.top,this.preanim(arguments,1));return this;},addListener:function(_b5,fn,_b7,_b8){Ext.EventManager.on(this.dom,_b5,fn,_b7||this,_b8);},removeListener:function(_b9,fn){Ext.EventManager.removeListener(this.dom,_b9,fn);return this;},removeAllListeners:function(){E.purgeElement(this.dom);return this;},relayEvent:function(_bb,_bc){this.on(_bb,function(e){_bc.fireEvent(_bb,e);});},setOpacity:function(_be,_bf){if(!_bf||!A){var s=this.dom.style;if(Ext.isIE){s.zoom=1;s.filter=(s.filter||"").replace(/alpha\([^\)]*\)/gi,"")+(_be==1?"":"alpha(opacity="+_be*100+")");}else{s.opacity=_be;}}else{this.anim({opacity:{to:_be}},this.preanim(arguments,1),null,0.35,"easeIn");}return this;},getLeft:function(_c1){if(!_c1){return this.getX();}else{return parseInt(this.getStyle("left"),10)||0;}},getRight:function(_c2){if(!_c2){return this.getX()+this.getWidth();}else{return (this.getLeft(true)+this.getWidth())||0;}},getTop:function(_c3){if(!_c3){return this.getY();}else{return parseInt(this.getStyle("top"),10)||0;}},getBottom:function(_c4){if(!_c4){return this.getY()+this.getHeight();}else{return (this.getTop(true)+this.getHeight())||0;}},position:function(pos,_c6,x,y){if(!pos){if(this.getStyle("position")=="static"){this.setStyle("position","relative");}}else{this.setStyle("position",pos);}if(_c6){this.setStyle("z-index",_c6);}if(x!==undefined&&y!==undefined){this.setXY([x,y]);}else{if(x!==undefined){this.setX(x);}else{if(y!==undefined){this.setY(y);}}}},clearPositioning:function(_c9){_c9=_c9||"";this.setStyle({"left":_c9,"right":_c9,"top":_c9,"bottom":_c9,"z-index":"","position":"static"});return this;},getPositioning:function(){var l=this.getStyle("left");var t=this.getStyle("top");return {"position":this.getStyle("position"),"left":l,"right":l?"":this.getStyle("right"),"top":t,"bottom":t?"":this.getStyle("bottom"),"z-index":this.getStyle("z-index")};},getBorderWidth:function(_cc){return this.addStyles(_cc,El.borders);},getPadding:function(_cd){return this.addStyles(_cd,El.paddings);},setPositioning:function(pc){this.applyStyles(pc);if(pc.right=="auto"){this.dom.style.right="";}if(pc.bottom=="auto"){this.dom.style.bottom="";}return this;},fixDisplay:function(){if(this.getStyle("display")=="none"){this.setStyle("visibility","hidden");this.setStyle("display",this.originalDisplay);if(this.getStyle("display")=="none"){this.setStyle("display","block");}}},setLeftTop:function(_cf,top){this.dom.style.left=this.addUnits(_cf);this.dom.style.top=this.addUnits(top);return this;},move:function(_d1,_d2,_d3){var xy=this.getXY();_d1=_d1.toLowerCase();switch(_d1){case "l":case "left":this.moveTo(xy[0]-_d2,xy[1],this.preanim(arguments,2));break;case "r":case "right":this.moveTo(xy[0]+_d2,xy[1],this.preanim(arguments,2));break;case "t":case "top":case "up":this.moveTo(xy[0],xy[1]-_d2,this.preanim(arguments,2));break;case "b":case "bottom":case "down":this.moveTo(xy[0],xy[1]+_d2,this.preanim(arguments,2));break;}return this;},clip:function(){if(!this.isClipped){this.isClipped=true;this.originalClip={"o":this.getStyle("overflow"),"x":this.getStyle("overflow-x"),"y":this.getStyle("overflow-y")};this.setStyle("overflow","hidden");this.setStyle("overflow-x","hidden");this.setStyle("overflow-y","hidden");}return this;},unclip:function(){if(this.isClipped){this.isClipped=false;var o=this.originalClip;if(o.o){this.setStyle("overflow",o.o);}if(o.x){this.setStyle("overflow-x",o.x);}if(o.y){this.setStyle("overflow-y",o.y);}}return this;},getAnchorXY:function(_d6,_d7,s){var w,h,vp=false;if(!s){var d=this.dom;if(d==document.body||d==document){vp=true;w=D.getViewWidth();h=D.getViewHeight();}else{w=this.getWidth();h=this.getHeight();}}else{w=s.width;h=s.height;}var x=0,y=0,r=Math.round;switch((_d6||"tl").toLowerCase()){case "c":x=r(w*0.5);y=r(h*0.5);break;case "t":x=r(w*0.5);y=0;break;case "l":x=0;y=r(h*0.5);break;case "r":x=w;y=r(h*0.5);break;case "b":x=r(w*0.5);y=h;break;case "tl":x=0;y=0;break;case "bl":x=0;y=h;break;case "br":x=w;y=h;break;case "tr":x=w;y=0;break;}if(_d7===true){return [x,y];}if(vp){var sc=this.getScroll();return [x+sc.left,y+sc.top];}var o=this.getXY();return [x+o[0],y+o[1]];},getAlignToXY:function(el,p,o){el=Ext.get(el),d=this.dom;if(!el.dom){throw "Element.alignTo with an element that doesn't exist";}var c=false;var p1="",p2="";o=o||[0,0];if(!p){p="tl-bl";}else{if(p=="?"){p="tl-bl?";}else{if(p.indexOf("-")==-1){p="tl-"+p;}}}p=p.toLowerCase();var m=p.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!m){throw "Element.alignTo with an invalid alignment "+p;}p1=m[1],p2=m[2],c=m[3]?true:false;var a1=this.getAnchorXY(p1,true);var a2=el.getAnchorXY(p2,false);var x=a2[0]-a1[0]+o[0];var y=a2[1]-a1[1]+o[1];if(c){var w=this.getWidth(),h=this.getHeight(),r=el.getRegion();var dw=D.getViewWidth()-5,dh=D.getViewHeight()-5;var p1y=p1.charAt(0),p1x=p1.charAt(p1.length-1);var p2y=p2.charAt(0),p2x=p2.charAt(p2.length-1);var _f6=((p1y=="t"&&p2y=="b")||(p1y=="b"&&p2y=="t"));var _f7=((p1x=="r"&&p2x=="l")||(p1x=="l"&&p2x=="r"));var doc=document;var _f9=(doc.documentElement.scrollLeft||doc.body.scrollLeft||0)+5;var _fa=(doc.documentElement.scrollTop||doc.body.scrollTop||0)+5;if((x+w)>dw){x=_f7?r.left-w:dw-w;}if(x<_f9){x=_f7?r.right:_f9;}if((y+h)>dh){y=_f6?r.top-h:dh-h;}if(y<_fa){y=_f6?r.bottom:_fa;}}return [x,y];},alignTo:function(_fb,_fc,_fd,_fe){var xy=this.getAlignToXY(_fb,_fc,_fd);this.setXY(xy,this.preanim(arguments,3));return this;},anchorTo:function(el,_101,_102,_103,_104,_105){var _106=function(){this.alignTo(el,_101,_102,_103);Ext.callback(_105,this);};Ext.EventManager.onWindowResize(_106,this);var tm=typeof _104;if(tm!="undefined"){Ext.EventManager.on(window,"scroll",_106,this,{buffer:tm=="number"?_104:50});}_106.call(this);return this;},clearOpacity:function(){if(window.ActiveXObject){this.dom.style.filter="";}else{this.dom.style.opacity="";this.dom.style["-moz-opacity"]="";this.dom.style["-khtml-opacity"]="";}return this;},hide:function(_108){this.setVisible(false,this.preanim(arguments,0));return this;},show:function(_109){this.setVisible(true,this.preanim(arguments,0));return this;},addUnits:function(size){return Ext.Element.addUnits(size,this.defaultUnit);},beginMeasure:function(){var el=this.dom;if(el.offsetWidth||el.offsetHeight){return this;}var _10c=[];var p=this.dom,b=document.body;while((!el.offsetWidth&&!el.offsetHeight)&&p&&p.tagName&&p!=b){var pe=Ext.get(p);if(pe.getStyle("display")=="none"){_10c.push({el:p,visibility:pe.getStyle("visibility")});p.style.visibility="hidden";p.style.display="block";}p=p.parentNode;}this._measureChanged=_10c;return this;},endMeasure:function(){var _110=this._measureChanged;if(_110){for(var i=0,len=_110.length;i<len;i++){var r=_110[i];r.el.style.visibility=r.visibility;r.el.style.display="none";}this._measureChanged=null;}return this;},update:function(html,_115,_116){if(typeof html=="undefined"){html="";}if(_115!==true){this.dom.innerHTML=html;if(typeof _116=="function"){_116();}return this;}var id=Ext.id();var dom=this.dom;html+="<span id=\""+id+"\"></span>";E.onAvailable(id,function(){var hd=document.getElementsByTagName("head")[0];var re=/(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/img;var _11b=/\ssrc=([\'\"])(.*?)\1/i;var _11c;while(_11c=re.exec(html)){var _11d=_11c[1]?_11c[1].match(_11b):false;if(_11d&&_11d[2]){var s=document.createElement("script");s.src=_11d[2];hd.appendChild(s);}else{if(_11c[2]&&_11c[2].length>0){eval(_11c[2]);}}}var el=document.getElementById(id);if(el){el.parentNode.removeChild(el);}if(typeof _116=="function"){_116();}});dom.innerHTML=html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/img,"");return this;},load:function(){var um=this.getUpdateManager();um.update.apply(um,arguments);return this;},getUpdateManager:function(){if(!this.updateManager){this.updateManager=new Ext.UpdateManager(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(_121){this.alignTo(_121||document,"c-c");return this;},isBorderBox:function(){return _122[this.dom.tagName.toLowerCase()]||Ext.isBorderBox;},getBox:function(_123,_124){var xy;if(!_124){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(!_123){bx={x:xy[0],y: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,width:w-(l+r),height:h-(t+b)};}bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(_130){return this.getPadding(_130)+this.getBorderWidth(_130);},setBox:function(box,_132,_133){var w=box.width,h=box.height;if((_132&&!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(_138,_139){var val=0;for(var i=0,len=_138.length;i<len;i++){var w=parseInt(this.getStyle(_139[_138.charAt(i)]),10);if(!isNaN(w)){val+=w;}}return val;},createProxy:function(_13e,_13f,_140){if(_13f){_13f=Ext.getDom(_13f);}else{_13f=document.body;}_13e=typeof _13e=="object"?_13e:{tag:"div",cls:_13e};var _141=Ext.DomHelper.append(_13f,_13e,true);if(_140){_141.setBox(this.getBox());}return _141;},mask:function(msg,_143){if(this.getStyle("position")=="static"){this.setStyle("position","relative");}if(!this._mask){this._mask=Ext.DomHelper.append(this.dom,{tag:"div",cls:"ext-el-mask"},true);}this.addClass("x-masked");this._mask.setDisplayed(true);if(typeof msg=="string"){if(!this._maskMsg){this._maskMsg=Ext.DomHelper.append(this.dom,{tag:"div",cls:"ext-el-mask-msg",cn:{tag:"div"}},true);}var mm=this._maskMsg;mm.dom.className=_143?"ext-el-mask-msg "+_143:"ext-el-mask-msg";mm.dom.firstChild.innerHTML=msg;mm.setDisplayed(true);mm.center(this);}return this._mask;},unmask:function(_145){if(this._mask){if(_145===true){this._mask.remove();delete this._mask;if(this._maskMsg){this._maskMsg.remove();delete this._maskMsg;}}else{this._mask.setDisplayed(false);if(this._maskMsg){this._maskMsg.setDisplayed(false);}}}this.removeClass("x-masked");},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var _146={tag:"iframe",frameBorder:"no",cls:"yiframe-shim",style:"position:absolute;visibility:hidden;left:0;top:0;overflow:hidden;",src:Ext.SSL_SECURE_URL};var shim=Ext.DomHelper.insertBefore(this.dom,_146,true);shim.setOpacity(0.01);shim.setBox(this.getBox());return shim;},remove:function(){if(this.dom.parentNode){this.dom.parentNode.removeChild(this.dom);}delete El.cache[this.dom.id];},addClassOnOver:function(_148,_149){this.on("mouseover",function(){Ext.fly(this,"_internal").addClass(_148);},this.dom);var _14a=function(e){if(_149!==true||!e.within(this,true)){Ext.fly(this,"_internal").removeClass(_148);}};this.on("mouseout",_14a,this.dom);return this;},addClassOnFocus:function(_14c){this.on("focus",function(){Ext.fly(this,"_internal").addClass(_14c);},this.dom);this.on("blur",function(){Ext.fly(this,"_internal").removeClass(_14c);},this.dom);return this;},addClassOnClick:function(_14d){var dom=this.dom;this.on("mousedown",function(){Ext.fly(dom,"_internal").addClass(_14d);var d=Ext.get(document);var fn=function(){Ext.fly(dom,"_internal").removeClass(_14d);d.removeListener("mouseup",fn);};d.on("mouseup",fn);});return this;},swallowEvent:function(_151,_152){var fn=function(e){e.stopPropagation();if(_152){e.preventDefault();}};if(_151 instanceof Array){for(var i=0,len=_151.length;i<len;i++){this.on(_151[i],fn);}return this;}this.on(_151,fn);return this;},fitToParent:function(_157,_158){var p=Ext.get(_158||this.dom.parentNode);this.setSize(p.getComputedWidth()-p.getFrameWidth("lr"),p.getComputedHeight()-p.getFrameWidth("tb"));if(_157===true){Ext.EventManager.onWindowResize(this.fitToParent.createDelegate(this,[]));}return this;},getNextSibling:function(){var n=this.dom.nextSibling;while(n&&n.nodeType!=1){n=n.nextSibling;}return n;},getPrevSibling:function(){var n=this.dom.previousSibling;while(n&&n.nodeType!=1){n=n.previousSibling;}return n;},appendChild:function(el){el=Ext.get(el);el.appendTo(this);return this;},createChild:function(_15d,_15e,_15f){_15d=_15d||{tag:"div"};if(_15e){return Ext.DomHelper.insertBefore(_15e,_15d,_15f!==true);}return Ext.DomHelper.append(this.dom,_15d,_15f!==true);},appendTo:function(el){el=Ext.getDom(el);el.appendChild(this.dom);return this;},insertBefore:function(el){el=Ext.getDom(el);el.parentNode.insertBefore(this.dom,el);return this;},insertAfter:function(el){el=Ext.getDom(el);el.parentNode.insertBefore(this.dom,el.nextSibling);return this;},insertFirst:function(el,_164){el=el||{};if(typeof el=="object"&&!el.nodeType){return this.createChild(el,this.dom.firstChild,_164);}else{el=Ext.getDom(el);this.dom.insertBefore(el,this.dom.firstChild);return !_164?Ext.get(el):el;}},insertSibling:function(el,_166,_167){_166=_166?_166.toLowerCase():"before";el=el||{};var rt,_169=_166=="before"?this.dom:this.dom.nextSibling;if(typeof el=="object"&&!el.nodeType){if(_166=="after"&&!this.dom.nextSibling){rt=Ext.DomHelper.append(this.dom.parentNode,el,!_167);}else{rt=Ext.DomHelper[_166=="after"?"insertAfter":"insertBefore"](this.dom,el,!_167);}}else{rt=this.dom.parentNode.insertBefore(Ext.getDom(el),_166=="before"?this.dom:this.dom.nextSibling);if(!_167){rt=Ext.get(rt);}}return rt;},wrap:function(_16a,_16b){if(!_16a){_16a={tag:"div"};}var _16c=Ext.DomHelper.insertBefore(this.dom,_16a,!_16b);_16c.dom?_16c.dom.appendChild(this.dom):_16c.appendChild(this.dom);return _16c;},replace:function(el){el=Ext.get(el);this.insertBefore(el);el.remove();return this;},insertHtml:function(_16e,html){return Ext.DomHelper.insertHtml(_16e,this.dom,html);},set:function(o,_171){var el=this.dom;_171=typeof _171=="undefined"?(el.setAttribute?true:false):_171;for(var attr in o){if(attr=="style"||typeof o[attr]=="function"){continue;}if(attr=="cls"){el.className=o["cls"];}else{if(_171){el.setAttribute(attr,o[attr]);}else{el[attr]=o[attr];}}}Ext.DomHelper.applyStyles(el,o.style);return this;},addKeyListener:function(key,fn,_176){var _177;if(typeof key!="object"||key instanceof Array){_177={key:key,fn:fn,scope:_176};}else{_177={key:key.key,shift:key.shift,ctrl:key.ctrl,alt:key.alt,fn:fn,scope:_176};}return new Ext.KeyMap(this,_177);},addKeyMap:function(_178){return new Ext.KeyMap(this,_178);},isScrollable:function(){var dom=this.dom;return dom.scrollHeight>dom.clientHeight||dom.scrollWidth>dom.clientWidth;},scrollTo:function(side,_17b,_17c){var prop=side.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!_17c||!A){this.dom[prop]=_17b;}else{var to=prop=="scrollLeft"?[_17b,this.dom.scrollTop]:[this.dom.scrollLeft,_17b];this.anim({scroll:{"to":to}},this.preanim(arguments,2),"scroll");}return this;},scroll:function(_17f,_180,_181){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;_17f=_17f.toLowerCase();var _189=false;var a=this.preanim(arguments,2);switch(_17f){case "l":case "left":if(w-l>cw){var v=Math.min(l+_180,w-cw);this.scrollTo("left",v,a);_189=true;}break;case "r":case "right":if(l>0){var v=Math.max(l-_180,0);this.scrollTo("left",v,a);_189=true;}break;case "t":case "top":case "up":if(t>0){var v=Math.max(t-_180,0);this.scrollTo("top",v,a);_189=true;}break;case "b":case "bottom":case "down":if(h-t>ch){var v=Math.min(t+_180,h-ch);this.scrollTo("top",v,a);_189=true;}break;}return _189;},translatePoints:function(x,y){if(typeof x=="object"||x instanceof Array){y=x[1];x=x[0];}var p=this.getStyle("position");var o=this.getXY();var l=parseInt(this.getStyle("left"),10);var t=parseInt(this.getStyle("top"),10);if(isNaN(l)){l=(p=="relative")?0:this.dom.offsetLeft;}if(isNaN(t)){t=(p=="relative")?0:this.dom.offsetTop;}return {left:(x-o[0]+l),top:(y-o[1]+t)};},getScroll:function(){var d=this.dom,doc=document;if(d==doc||d==doc.body){var l=window.pageXOffset||doc.documentElement.scrollLeft||doc.body.scrollLeft||0;var t=window.pageYOffset||doc.documentElement.scrollTop||doc.body.scrollTop||0;return {left:l,top:t};}else{return {left:d.scrollLeft,top:d.scrollTop};}},getColor:function(attr,_197,_198){var v=this.getStyle(attr);if(!v||v=="transparent"||v=="inherit"){return _197;}var _19a=typeof _198=="undefined"?"#":_198;if(v.substr(0,4)=="rgb("){var rvs=v.slice(4,v.length-1).split(",");for(var i=0;i<3;i++){var h=parseInt(rvs[i]).toString(16);if(h<16){h="0"+h;}_19a+=h;}}else{if(v.substr(0,1)=="#"){if(v.length==4){for(var i=1;i<4;i++){var c=v.charAt(i);_19a+=c+c;}}else{if(v.length==7){_19a+=v.substr(1);}}}}return (_19a.length>5?_19a.toLowerCase():_197);},boxWrap:function(cls){cls=cls||"x-box";var el=Ext.get(this.insertHtml("beforeBegin",String.format("<div class=\"{0}\"><div class=\"{0}-tl\"><div class=\"{0}-tr\"><div class=\"{0}-tc\"></div></div></div><div class=\"{0}-ml\"><div class=\"{0}-mr\"><div class=\"{0}-mc\"></div></div></div><div class=\"{0}-bl\"><div class=\"{0}-br\"><div class=\"{0}-bc\"></div></div></div></div>",cls)));el.child("."+cls+"-mc").dom.appendChild(this.dom);return el;},getAttributeNS:Ext.isIE?function(ns,name){var d=this.dom;var type=typeof d[ns+":"+name];if(type!="undefined"&&type!="unknown"){return d[ns+":"+name];}return d[name];}:function(ns,name){var d=this.dom;return d.getAttributeNS(ns,name)||d.getAttribute(ns+":"+name)||d.getAttribute(name)||d[name];}};var ep=El.prototype;ep.on=ep.addListener;ep.mon=ep.addListener;ep.un=ep.removeListener;ep.autoBoxAdjust=true;ep.autoDisplayMode=true;El.unitPattern=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;El.addUnits=function(v,_1aa){if(v===""||v=="auto"){return v;}if(v===undefined){return "";}if(typeof v=="number"||!El.unitPattern.test(v)){return v+(_1aa||"px");}return v;};El.VISIBILITY=1;El.DISPLAY=2;El.borders={l:"border-left-width",r:"border-right-width",t:"border-top-width",b:"border-bottom-width"};El.paddings={l:"padding-left",r:"padding-right",t:"padding-top",b:"padding-bottom"};El.margins={l:"margin-left",r:"margin-right",t:"margin-top",b:"margin-bottom"};El.cache={};var _1ab;El.get=function(el){var ex,elm,id;if(!el){return null;}if(typeof el=="string"){if(!(elm=document.getElementById(el))){return null;}if(ex=El.cache[el]){ex.dom=elm;}else{ex=El.cache[el]=new El(elm);}return ex;}else{if(el.tagName){if(!(id=el.id)){id=Ext.id(el);}if(ex=El.cache[id]){ex.dom=el;}else{ex=El.cache[id]=new El(el);}return ex;}else{if(el instanceof El){if(el!=_1ab){el.dom=document.getElementById(el.id)||el.dom;El.cache[el.id]=el;}return el;}else{if(el.isComposite){return el;}else{if(el instanceof Array){return El.select(el);}else{if(el==document){if(!_1ab){var f=function(){};f.prototype=El.prototype;_1ab=new f();_1ab.dom=document;}return _1ab;}}}}}}return null;};El.Flyweight=function(dom){this.dom=dom;};El.Flyweight.prototype=El.prototype;El._flyweights={};El.fly=function(el,_1b3){_1b3=_1b3||"_global";el=Ext.getDom(el);if(!el){return null;}if(!El._flyweights[_1b3]){El._flyweights[_1b3]=new El.Flyweight();}El._flyweights[_1b3].dom=el;return El._flyweights[_1b3];};Ext.get=El.get;Ext.fly=El.fly;var _122=Ext.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Ext.isIE||Ext.isGecko){_122["button"]=1;}})();
+
+Ext.enableFx=true;Ext.Fx={slideIn:function(_1,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){_1=_1||"t";this.fixDisplay();var r=this.getFxRestore();var b=this.getBox();this.setSize(b);var _6=this.fxWrap(r.pos,o,"hidden");var st=this.dom.style;st.visibility="visible";st.position="absolute";var _8=function(){el.fxUnwrap(_6,r.pos,o);st.width=r.width;st.height=r.height;el.afterFx(o);};var a,pt={to:[b.x,b.y]},bw={to:b.width},bh={to:b.height};switch(_1.toLowerCase()){case "t":_6.setSize(b.width,0);st.left=st.bottom="0";a={height:bh};break;case "l":_6.setSize(0,b.height);st.right=st.top="0";a={width:bw};break;case "r":_6.setSize(0,b.height);_6.setX(b.right);st.left=st.top="0";a={width:bw,points:pt};break;case "b":_6.setSize(b.width,0);_6.setY(b.bottom);st.left=st.top="0";a={height:bh,points:pt};break;case "tl":_6.setSize(0,0);st.right=st.bottom="0";a={width:bw,height:bh};break;case "bl":_6.setSize(0,0);_6.setY(b.y+b.height);st.right=st.top="0";a={width:bw,height:bh,points:pt};break;case "br":_6.setSize(0,0);_6.setXY([b.right,b.bottom]);st.left=st.top="0";a={width:bw,height:bh,points:pt};break;case "tr":_6.setSize(0,0);_6.setX(b.x+b.width);st.left=st.bottom="0";a={width:bw,height:bh,points:pt};break;}this.dom.style.visibility="visible";_6.show();arguments.callee.anim=_6.fxanim(a,o,"motion",0.5,"easeOut",_8);});return this;},slideOut:function(_d,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){_d=_d||"t";var r=this.getFxRestore();var b=this.getBox();this.setSize(b);var _12=this.fxWrap(r.pos,o,"visible");var st=this.dom.style;st.visibility="visible";st.position="absolute";_12.setSize(b);var _14=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}el.fxUnwrap(_12,r.pos,o);st.width=r.width;st.height=r.height;el.afterFx(o);};var a,_16={to:0};switch(_d.toLowerCase()){case "t":st.left=st.bottom="0";a={height:_16};break;case "l":st.right=st.top="0";a={width:_16};break;case "r":st.left=st.top="0";a={width:_16,points:{to:[b.right,b.y]}};break;case "b":st.left=st.top="0";a={height:_16,points:{to:[b.x,b.bottom]}};break;case "tl":st.right=st.bottom="0";a={width:_16,height:_16};break;case "bl":st.right=st.top="0";a={width:_16,height:_16,points:{to:[b.x,b.bottom]}};break;case "br":st.left=st.top="0";a={width:_16,height:_16,points:{to:[b.x+b.width,b.bottom]}};break;case "tr":st.left=st.bottom="0";a={width:_16,height:_16,points:{to:[b.right,b.y]}};break;}arguments.callee.anim=_12.fxanim(a,o,"motion",0.5,"easeOut",_14);});return this;},puff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.show();var r=this.getFxRestore();var st=this.dom.style;var _1b=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;st.fontSize="";el.afterFx(o);};var _1c=this.getWidth();var _1d=this.getHeight();arguments.callee.anim=this.fxanim({width:{to:this.adjustWidth(_1c*2)},height:{to:this.adjustHeight(_1d*2)},points:{by:[-(_1c*0.5),-(_1d*0.5)]},opacity:{to:0},fontSize:{to:200,unit:"%"}},o,"motion",0.5,"easeOut",_1b);});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 _22=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,0.1,null,function(){this.clearOpacity();(function(){this.fxanim({height:{to:1},points:{by:[0,this.getHeight()*0.5]}},o,"motion",0.3,"easeIn",_22);}).defer(100,this);});});return this;},highlight:function(_23,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){_23=_23||"ffff9c";attr=o.attr||"backgroundColor";this.clearOpacity();this.show();var _26=this.getColor(attr);var _27=this.dom.style[attr];endColor=(o.endColor||_26)||"ffffff";var _28=function(){el.dom.style[attr]=_27;el.afterFx(o);};var a={};a[attr]={from:_23,to:endColor};arguments.callee.anim=this.fxanim(a,o,"color",1,"easeIn",_28);});return this;},frame:function(_2a,_2b,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){_2a=_2a||"#C3DAF9";if(_2a.length==6){_2a="#"+_2a;}_2b=_2b||1;duration=o.duration||1;this.show();var b=this.getBox();var _2f=function(){var _30=this.createProxy({tag:"div",style:{visbility:"hidden",position:"absolute","z-index":"35000",border:"0px solid "+_2a}});var _31=Ext.isBorderBox?2:1;_30.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*_31))},width:{from:b.width,to:(b.width+(20*_31))}},duration,function(){_30.remove();});if(--_2b>0){_2f.defer((duration/2)*1000,this);}else{el.afterFx(o);}};_2f.call(this);});return this;},pause:function(_32){var el=this.getFxEl();var o={};el.queueFx(o,function(){setTimeout(function(){el.afterFx(o);},_32*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,0.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,0.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)};}if(h!==undefined){a.height={to:this.adjustHeight(h)};}if(x!==undefined||y!==undefined){a.points={to:[x!==undefined?x:this.getX(),y!==undefined?y:this.getY()]};}if(op!==undefined){a.opacity={to:op};}if(o.xy!==undefined){a.points={to:o.xy};}arguments.callee.anim=this.fxanim(a,o,"motion",0.35,"easeOut",function(){el.afterFx(o);});});return this;},ghost:function(_45,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){_45=_45||"b";var r=this.getFxRestore();var w=this.getWidth(),h=this.getHeight();var st=this.dom.style;var _4c=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);};var a={opacity:{to:0},points:{}},pt=a.points;switch(_45.toLowerCase()){case "t":pt.by=[0,-h];break;case "l":pt.by=[-w,0];break;case "r":pt.by=[w,0];break;case "b":pt.by=[0,h];break;case "tl":pt.by=[-w,-h];break;case "bl":pt.by=[-w,h];break;case "br":pt.by=[w,h];break;case "tr":pt.by=[w,-h];break;}arguments.callee.anim=this.fxanim(a,o,"motion",0.5,"easeOut",_4c);});return this;},syncFx:function(){this.fxDefaults=Ext.apply(this.fxDefaults||{},{block:false,concurrent:true,stopFx:false});return this;},sequenceFx:function(){this.fxDefaults=Ext.apply(this.fxDefaults||{},{block:false,concurrent:false,stopFx:false});return this;},nextFx:function(){var ef=this.fxQueue[0];if(ef){ef.call(this);}},hasActiveFx:function(){return this.fxQueue&&this.fxQueue[0];},stopFx:function(){if(this.hasActiveFx()){var cur=this.fxQueue[0];if(cur&&cur.anim&&cur.anim.isAnimated()){this.fxQueue=[cur];cur.anim.stop(true);}}return this;},beforeFx:function(o){if(this.hasActiveFx()&&!o.concurrent){if(o.stopFx){this.stopFx();return true;}return false;}return true;},hasFxBlock:function(){var q=this.fxQueue;return q&&q[0]&&q[0].block;},queueFx:function(o,fn){if(!this.fxQueue){this.fxQueue=[];}if(!this.hasFxBlock()){Ext.applyIf(o,this.fxDefaults);if(!o.concurrent){var run=this.beforeFx(o);fn.block=o.block;this.fxQueue.push(fn);if(run){this.nextFx();}}else{fn.call(this);}}return this;},fxWrap:function(pos,o,vis){var _59;if(!o.wrap||!(_59=Ext.get(o.wrap))){var _5a;if(o.fixPosition){_5a=this.getXY();}var div=document.createElement("div");div.style.visibility=vis;_59=Ext.get(this.dom.parentNode.insertBefore(div,this.dom));_59.setPositioning(pos);if(_59.getStyle("position")=="static"){_59.position("relative");}this.clearPositioning("auto");_59.clip();_59.dom.appendChild(this.dom);if(_5a){_59.setXY(_5a);}}return _59;},fxUnwrap:function(_5c,pos,o){this.clearPositioning();this.setPositioning(pos);if(!o.wrap){_5c.dom.parentNode.insertBefore(this.dom,_5c.dom);_5c.remove();}},getFxRestore:function(){var st=this.dom.style;return {pos:this.getPositioning(),width:st.width,height:st.height};},afterFx:function(o){if(o.afterStyle){this.applyStyles(o.afterStyle);}if(o.remove===true){this.remove();}Ext.callback(o.callback,o.scope,[this]);if(!o.concurrent){this.fxQueue.shift();this.nextFx();}},getFxEl:function(){return Ext.get(this.dom);},fxanim:function(_61,opt,_63,_64,_65,cb){_63=_63||"run";opt=opt||{};var _67=Ext.lib.Anim[_63](this.dom,_61,(opt.duration||_64)||0.35,(opt.easing||_65)||"easeOut",function(){Ext.callback(cb,this);},this);opt.anim=_67;return _67;}};Ext.Fx.resize=Ext.Fx.scale;Ext.apply(Ext.Element.prototype,Ext.Fx);
+
+Ext.CompositeElement=function(_1){this.elements=[];this.addElements(_1);};Ext.CompositeElement.prototype={isComposite:true,addElements:function(_2){if(!_2){return this;}if(typeof _2=="string"){_2=Ext.Element.selectorFunction(_2);}var _3=this.elements;var _4=_3.length-1;for(var i=0,_6=_2.length;i<_6;i++){_3[++_4]=Ext.get(_2[i],true);}return this;},invoke:function(fn,_8){var _9=this.elements;for(var i=0,_b=_9.length;i<_b;i++){Ext.Element.prototype[fn].apply(_9[i],_8);}return this;},add:function(_c){if(typeof _c=="string"){this.addElements(Ext.Element.selectorFunction(_c));}else{if(_c.length!==undefined){this.addElements(_c);}else{this.addElements([_c]);}}return this;},each:function(fn,_e){var _f=this.elements;for(var i=0,len=_f.length;i<len;i++){if(fn.call(_e||_f[i],_f[i],this,i)===false){break;}}return this;},item:function(_12){return this.elements[_12];}};(function(){Ext.CompositeElement.createCall=function(_13,_14){if(!_13[_14]){_13[_14]=function(){return this.invoke(_14,arguments);};}};for(var _15 in Ext.Element.prototype){if(typeof Ext.Element.prototype[_15]=="function"){Ext.CompositeElement.createCall(Ext.CompositeElement.prototype,_15);}}})();Ext.CompositeElementLite=function(els){Ext.CompositeElementLite.superclass.constructor.call(this,els);var _17=function(){};_17.prototype=Ext.Element.prototype;this.el=new Ext.Element.Flyweight();};Ext.extend(Ext.CompositeElementLite,Ext.CompositeElement,{addElements:function(els){if(els){if(els instanceof Array){this.elements=this.elements.concat(els);}else{var _19=this.elements;var _1a=_19.length-1;for(var i=0,len=els.length;i<len;i++){_19[++_1a]=els[i];}}}return this;},invoke:function(fn,_1e){var els=this.elements;var el=this.el;for(var i=0,len=els.length;i<len;i++){el.dom=els[i];Ext.Element.prototype[fn].apply(el,_1e);}return this;},item:function(_23){this.el.dom=this.elements[_23];return this.el;},addListener:function(_24,_25,_26,opt){var els=this.elements;for(var i=0,len=els.length;i<len;i++){Ext.EventManager.on(els[i],_24,_25,_26||els[i],opt);}return this;},each:function(fn,_2c){var els=this.elements;var el=this.el;for(var i=0,len=els.length;i<len;i++){el.dom=els[i];if(fn.call(_2c||el,el,this,i)===false){break;}}return this;}});Ext.CompositeElementLite.prototype.on=Ext.CompositeElementLite.prototype.addListener;if(Ext.DomQuery){Ext.Element.selectorFunction=Ext.DomQuery.select;}Ext.Element.select=function(_31,_32){var els;if(typeof _31=="string"){els=Ext.Element.selectorFunction(_31);}else{if(_31.length!==undefined){els=_31;}else{throw "Invalid selector";}}if(_32===true){return new Ext.CompositeElement(els);}else{return new Ext.CompositeElementLite(els);}};Ext.select=Ext.Element.select;
+
+Ext.UpdateManager=function(el,_2){el=Ext.get(el);if(!_2&&el.updateManager){return el.updateManager;}this.el=el;this.defaultUrl=null;this.events={"beforeupdate":true,"update":true,"failure":true};var d=Ext.UpdateManager.defaults;this.sslBlankUrl=d.sslBlankUrl;this.disableCaching=d.disableCaching;this.indicatorText=d.indicatorText;this.showLoadIndicator=d.showLoadIndicator;this.timeout=d.timeout;this.loadScripts=d.loadScripts;this.transaction=null;this.autoRefreshProcId=null;this.refreshDelegate=this.refresh.createDelegate(this);this.updateDelegate=this.update.createDelegate(this);this.formUpdateDelegate=this.formUpdate.createDelegate(this);this.successDelegate=this.processSuccess.createDelegate(this);this.failureDelegate=this.processFailure.createDelegate(this);this.renderer=new Ext.UpdateManager.BasicRenderer();Ext.UpdateManager.superclass.constructor.call(this);};Ext.extend(Ext.UpdateManager,Ext.util.Observable,{getEl:function(){return this.el;},update:function(_4,_5,_6,_7){if(this.fireEvent("beforeupdate",this.el,_4,_5)!==false){var _8=this.method;if(typeof _4=="object"){var _9=_4;_4=_9.url;_5=_5||_9.params;_6=_6||_9.callback;_7=_7||_9.discardUrl;if(_6&&_9.scope){_6=_6.createDelegate(_9.scope);}if(typeof _9.method!="undefined"){_8=_9.method;}if(typeof _9.nocache!="undefined"){this.disableCaching=_9.nocache;}if(typeof _9.text!="undefined"){this.indicatorText="<div class=\"loading-indicator\">"+_9.text+"</div>";}if(typeof _9.scripts!="undefined"){this.loadScripts=_9.scripts;}if(typeof _9.timeout!="undefined"){this.timeout=_9.timeout;}}this.showLoading();if(!_7){this.defaultUrl=_4;}if(typeof _4=="function"){_4=_4.call(this);}if(typeof _5=="function"){_5=_5();}if(_5&&typeof _5!="string"){var _a=[];for(var _b in _5){if(typeof _5[_b]!="function"){_a.push(encodeURIComponent(_b),"=",encodeURIComponent(_5[_b]),"&");}}delete _a[_a.length-1];_5=_a.join("");}var cb={success:this.successDelegate,failure:this.failureDelegate,timeout:(this.timeout*1000),argument:{"url":_4,"form":null,"callback":_6,"params":_5}};_8=_8||(_5?"POST":"GET");if(_8=="GET"){_4=this.prepareUrl(_4);}this.transaction=Ext.lib.Ajax.request(_8,_4,cb,_5);}},formUpdate:function(_d,_e,_f,_10){if(this.fireEvent("beforeupdate",this.el,_d,_e)!==false){formEl=Ext.getDom(_d);if(typeof _e=="function"){_e=_e.call(this);}if(typeof params=="function"){params=params();}_e=_e||formEl.action;var cb={success:this.successDelegate,failure:this.failureDelegate,timeout:(this.timeout*1000),argument:{"url":_e,"form":formEl,"callback":_10,"reset":_f}};var _12=false;var _13=formEl.getAttribute("enctype");if(_13&&_13.toLowerCase()=="multipart/form-data"){_12=true;cb.upload=this.successDelegate;}this.transaction=Ext.lib.Ajax.formRequest(formEl,_e,cb,null,_12,this.sslBlankUrl);this.showLoading.defer(1,this);}},refresh:function(_14){if(this.defaultUrl==null){return;}this.update(this.defaultUrl,null,_14,true);},startAutoRefresh:function(_15,url,_17,_18,_19){if(_19){this.update(url||this.defaultUrl,_17,_18,true);}if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);}this.autoRefreshProcId=setInterval(this.update.createDelegate(this,[url||this.defaultUrl,_17,_18,true]),_15*1000);},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);delete this.autoRefreshProcId;}},isAutoRefreshing:function(){return this.autoRefreshProcId?true:false;},showLoading:function(){if(this.showLoadIndicator){this.el.update(this.indicatorText);}},prepareUrl:function(url){if(this.disableCaching){var _1b="_dc="+(new Date().getTime());if(url.indexOf("?")!==-1){url+="&"+_1b;}else{url+="?"+_1b;}}return url;},processSuccess:function(_1c){this.transaction=null;if(_1c.argument.form&&_1c.argument.reset){try{_1c.argument.form.reset();}catch(e){}}if(this.loadScripts){this.renderer.render(this.el,_1c,this,this.updateComplete.createDelegate(this,[_1c]));}else{this.renderer.render(this.el,_1c,this);this.updateComplete(_1c);}},updateComplete:function(_1d){this.fireEvent("update",this.el,_1d);if(typeof _1d.argument.callback=="function"){_1d.argument.callback(this.el,true,_1d);}},processFailure:function(_1e){this.transaction=null;this.fireEvent("failure",this.el,_1e);if(typeof _1e.argument.callback=="function"){_1e.argument.callback(this.el,false,_1e);}},setRenderer:function(_1f){this.renderer=_1f;},getRenderer:function(){return this.renderer;},setDefaultUrl:function(_20){this.defaultUrl=_20;},abort:function(){if(this.transaction){Ext.lib.Ajax.abort(this.transaction);}},isUpdating:function(){if(this.transaction){return Ext.lib.Ajax.isCallInProgress(this.transaction);}return false;}});Ext.UpdateManager.defaults={timeout:30,loadScripts:false,sslBlankUrl:(Ext.SSL_SECURE_URL||"javascript:false"),disableCaching:false,showLoadIndicator:true,indicatorText:"<div class=\"loading-indicator\">Loading...</div>"};Ext.UpdateManager.updateElement=function(el,url,_23,_24){var um=Ext.get(el,true).getUpdateManager();Ext.apply(um,_24);um.update(url,_23,_24?_24.callback:null);};Ext.UpdateManager.update=Ext.UpdateManager.updateElement;Ext.UpdateManager.BasicRenderer=function(){};Ext.UpdateManager.BasicRenderer.prototype={render:function(el,_27,_28,_29){el.update(_27.responseText,_28.loadScripts,_29);}};
+
+Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(_1){if(Date.formatFunctions[_1]==null){Date.createNewFormat(_1);}var _2=Date.formatFunctions[_1];return this[_2]();};Date.prototype.format=Date.prototype.dateFormat;Date.createNewFormat=function(_3){var _4="format"+Date.formatFunctions.count++;Date.formatFunctions[_3]=_4;var _5="Date.prototype."+_4+" = function(){return ";var _6=false;var ch="";for(var i=0;i<_3.length;++i){ch=_3.charAt(i);if(!_6&&ch=="\\"){_6=true;}else{if(_6){_6=false;_5+="'"+String.escape(ch)+"' + ";}else{_5+=Date.getFormatCode(ch);}}}eval(_5.substring(0,_5.length-3)+";}");};Date.getFormatCode=function(_9){switch(_9){case "d":return "String.leftPad(this.getDate(), 2, '0') + ";case "D":return "Date.dayNames[this.getDay()].substring(0, 3) + ";case "j":return "this.getDate() + ";case "l":return "Date.dayNames[this.getDay()] + ";case "S":return "this.getSuffix() + ";case "w":return "this.getDay() + ";case "z":return "this.getDayOfYear() + ";case "W":return "this.getWeekOfYear() + ";case "F":return "Date.monthNames[this.getMonth()] + ";case "m":return "String.leftPad(this.getMonth() + 1, 2, '0') + ";case "M":return "Date.monthNames[this.getMonth()].substring(0, 3) + ";case "n":return "(this.getMonth() + 1) + ";case "t":return "this.getDaysInMonth() + ";case "L":return "(this.isLeapYear() ? 1 : 0) + ";case "Y":return "this.getFullYear() + ";case "y":return "('' + this.getFullYear()).substring(2, 4) + ";case "a":return "(this.getHours() < 12 ? 'am' : 'pm') + ";case "A":return "(this.getHours() < 12 ? 'AM' : 'PM') + ";case "g":return "((this.getHours() %12) ? this.getHours() % 12 : 12) + ";case "G":return "this.getHours() + ";case "h":return "String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + ";case "H":return "String.leftPad(this.getHours(), 2, '0') + ";case "i":return "String.leftPad(this.getMinutes(), 2, '0') + ";case "s":return "String.leftPad(this.getSeconds(), 2, '0') + ";case "O":return "this.getGMTOffset() + ";case "T":return "this.getTimezone() + ";case "Z":return "(this.getTimezoneOffset() * -60) + ";default:return "'"+String.escape(_9)+"' + ";}};Date.parseDate=function(_a,_b){if(Date.parseFunctions[_b]==null){Date.createParser(_b);}var _c=Date.parseFunctions[_b];return Date[_c](_a);};Date.createParser=function(_d){var _e="parse"+Date.parseFunctions.count++;var _f=Date.parseRegexes.length;var _10=1;Date.parseFunctions[_d]=_e;var _11="Date."+_e+" = function(input){\n"+"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1;\n"+"var d = new Date();\n"+"y = d.getFullYear();\n"+"m = d.getMonth();\n"+"d = d.getDate();\n"+"var results = input.match(Date.parseRegexes["+_f+"]);\n"+"if (results && results.length > 0) {";var _12="";var _13=false;var ch="";for(var i=0;i<_d.length;++i){ch=_d.charAt(i);if(!_13&&ch=="\\"){_13=true;}else{if(_13){_13=false;_12+=String.escape(ch);}else{var obj=Date.formatCodeToRegex(ch,_10);_10+=obj.g;_12+=obj.s;if(obj.g&&obj.c){_11+=obj.c;}}}}_11+="if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"+"{return new Date(y, m, d, h, i, s);}\n"+"else if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"+"{return new Date(y, m, d, h, i);}\n"+"else if (y > 0 && m >= 0 && d > 0 && h >= 0)\n"+"{return new Date(y, m, d, h);}\n"+"else if (y > 0 && m >= 0 && d > 0)\n"+"{return new Date(y, m, d);}\n"+"else if (y > 0 && m >= 0)\n"+"{return new Date(y, m);}\n"+"else if (y > 0)\n"+"{return new Date(y);}\n"+"}return null;}";Date.parseRegexes[_f]=new RegExp("^"+_12+"$");eval(_11);};Date.formatCodeToRegex=function(_17,_18){switch(_17){case "D":return {g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case "j":case "d":return {g:1,c:"d = parseInt(results["+_18+"], 10);\n",s:"(\\d{1,2})"};case "l":return {g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case "S":return {g:0,c:null,s:"(?:st|nd|rd|th)"};case "w":return {g:0,c:null,s:"\\d"};case "z":return {g:0,c:null,s:"(?:\\d{1,3})"};case "W":return {g:0,c:null,s:"(?:\\d{2})"};case "F":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+_18+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"};case "M":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+_18+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case "n":case "m":return {g:1,c:"m = parseInt(results["+_18+"], 10) - 1;\n",s:"(\\d{1,2})"};case "t":return {g:0,c:null,s:"\\d{1,2}"};case "L":return {g:0,c:null,s:"(?:1|0)"};case "Y":return {g:1,c:"y = parseInt(results["+_18+"], 10);\n",s:"(\\d{4})"};case "y":return {g:1,c:"var ty = parseInt(results["+_18+"], 10);\n"+"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"};case "a":return {g:1,c:"if (results["+_18+"] == 'am') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case "A":return {g:1,c:"if (results["+_18+"] == 'AM') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"};case "g":case "G":case "h":case "H":return {g:1,c:"h = parseInt(results["+_18+"], 10);\n",s:"(\\d{1,2})"};case "i":return {g:1,c:"i = parseInt(results["+_18+"], 10);\n",s:"(\\d{2})"};case "s":return {g:1,c:"s = parseInt(results["+_18+"], 10);\n",s:"(\\d{2})"};case "O":return {g:0,c:null,s:"[+-]\\d{4}"};case "T":return {g:0,c:null,s:"[A-Z]{3}"};case "Z":return {g:0,c:null,s:"[+-]\\d{1,5}"};default:return {g:0,c:null,s:String.escape(_17)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");};Date.prototype.getGMTOffset=function(){return (this.getTimezoneOffset()>0?"-":"+")+String.leftPad(Math.floor(this.getTimezoneOffset()/60),2,"0")+String.leftPad(this.getTimezoneOffset()%60,2,"0");};Date.prototype.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;};Date.prototype.getWeekOfYear=function(){var now=this.getDayOfYear()+(4-this.getDay());var _1c=new Date(this.getFullYear(),0,1);var _1d=(7-_1c.getDay()+4);return String.leftPad(((now-_1d)/7)+1,2,"0");};Date.prototype.isLeapYear=function(){var _1e=this.getFullYear();return ((_1e&3)==0&&(_1e%100||(_1e%400==0&&_1e)));};Date.prototype.getFirstDayOfMonth=function(){var day=(this.getDay()-(this.getDate()-1))%7;return (day<0)?(day+7):day;};Date.prototype.getLastDayOfMonth=function(){var day=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return (day<0)?(day+7):day;};Date.prototype.getFirstDateOfMonth=function(){return new Date(this.getFullYear(),this.getMonth(),1);};Date.prototype.getLastDateOfMonth=function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth());};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.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";}};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];Date.dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];Date.y2kYear=50;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.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.clearTime=function(_21){if(_21){return this.clone().clearTime();}this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};if(Ext.isSafari){Date.brokenSetMonth=Date.prototype.setMonth;Date.prototype.setMonth=function(num){if(num<=-1){var n=Math.ceil(-num);var _24=Math.ceil(n/12);var _25=(n%12)?12-n%12:0;this.setFullYear(this.getFullYear()-_24);return Date.brokenSetMonth.call(this,_25);}else{return Date.brokenSetMonth.apply(this,arguments);}};}Date.MILLI="ms";Date.SECOND="s";Date.MINUTE="mi";Date.HOUR="h";Date.DAY="d";Date.MONTH="mo";Date.YEAR="y";Date.prototype.add=function(_26,_27){var d=this.clone();if(!_26||_27===0){return d;}switch(_26.toLowerCase()){case Date.MILLI:d.setMilliseconds(this.getMilliseconds()+_27);break;case Date.SECOND:d.setSeconds(this.getSeconds()+_27);break;case Date.MINUTE:d.setMinutes(this.getMinutes()+_27);break;case Date.HOUR:d.setHours(this.getHours()+_27);break;case Date.DAY:d.setDate(this.getDate()+_27);break;case Date.MONTH:var day=this.getDate();if(day>28){day=Math.min(day,this.getFirstDateOfMonth().add("mo",_27).getLastDateOfMonth().getDate());}d.setDate(day);d.setMonth(this.getMonth()+_27);break;case Date.YEAR:d.setFullYear(this.getFullYear()+_27);break;}return d;};
+
+Ext.util.DelayedTask=function(fn,_2,_3){var id=null,d,t;var _7=function(){var _8=new Date().getTime();if(_8-t>=d){clearInterval(id);id=null;fn.apply(_2,_3||[]);}};this.delay=function(_9,_a,_b,_c){if(id&&_9!=d){this.cancel();}d=_9;t=new Date().getTime();fn=_a||fn;_2=_b||_2;_3=_c||_3;if(!id){id=setInterval(_7,d);}};this.cancel=function(){if(id){clearInterval(id);id=null;}};};
+
+Ext.util.TaskRunner=function(_1){_1=_1||10;var _2=[],_3=[];var id=0;var _5=false;var _6=function(){_5=false;clearInterval(id);id=0;};var _7=function(){if(!_5){_5=true;id=setInterval(_8,_1);}};var _9=function(_a){_3.push(_a);if(_a.onStop){_a.onStop();}};var _8=function(){if(_3.length>0){for(var i=0,_c=_3.length;i<_c;i++){_2.remove(_3[i]);}_3=[];if(_2.length<1){_6();return;}}var _d=new Date().getTime();for(var i=0,_c=_2.length;i<_c;++i){var t=_2[i];var _f=_d-t.taskRunTime;if(t.interval<=_f){var rt=t.run.apply(t.scope||t,t.args||[++t.taskRunCount]);t.taskRunTime=_d;if(rt===false||t.taskRunCount===t.repeat){_9(t);return;}}if(t.duration&&t.duration<=(_d-t.taskStartTime)){_9(t);}}};this.start=function(_11){_2.push(_11);_11.taskStartTime=new Date().getTime();_11.taskRunTime=0;_11.taskRunCount=0;_7();return _11;};this.stop=function(_12){_9(_12);return _12;};this.stopAll=function(){_6();for(var i=0,len=_2.length;i<len;i++){if(_2[i].onStop){_2[i].onStop();}}_2=[];_3=[];};};Ext.TaskMgr=new Ext.util.TaskRunner();
+
+Ext.util.MixedCollection=function(_1,_2){this.items=[];this.map={};this.keys=[];this.length=0;this.events={"clear":true,"add":true,"replace":true,"remove":true,"sort":true};this.allowFunctions=_1===true;if(_2){this.getKey=_2;}Ext.util.MixedCollection.superclass.constructor.call(this);};Ext.extend(Ext.util.MixedCollection,Ext.util.Observable,{allowFunctions:false,add:function(_3,o){if(arguments.length==1){o=arguments[0];_3=this.getKey(o);}if(typeof _3=="undefined"||_3===null){this.length++;this.items.push(o);this.keys.push(null);}else{var _5=this.map[_3];if(_5){return this.replace(_3,o);}this.length++;this.items.push(o);this.map[_3]=o;this.keys.push(_3);}this.fireEvent("add",this.length-1,o,_3);return o;},getKey:function(o){return o.id;},replace:function(_7,o){if(arguments.length==1){o=arguments[0];_7=this.getKey(o);}var _9=this.item(_7);if(typeof _7=="undefined"||_7===null||typeof _9=="undefined"){return this.add(_7,o);}var _a=this.indexOfKey(_7);this.items[_a]=o;this.map[_7]=o;this.fireEvent("replace",_7,_9,o);return o;},addAll:function(_b){if(arguments.length>1||_b instanceof Array){var _c=arguments.length>1?arguments:_b;for(var i=0,_e=_c.length;i<_e;i++){this.add(_c[i]);}}else{for(var _f in _b){if(this.allowFunctions||typeof _b[_f]!="function"){this.add(_b[_f],_f);}}}},each:function(fn,_11){var _12=[].concat(this.items);for(var i=0,len=_12.length;i<len;i++){if(fn.call(_11||_12[i],_12[i],i,len)===false){break;}}},eachKey:function(fn,_16){for(var i=0,len=this.keys.length;i<len;i++){fn.call(_16||window,this.keys[i],this.items[i],i,len);}},find:function(fn,_1a){for(var i=0,len=this.items.length;i<len;i++){if(fn.call(_1a||window,this.items[i],this.keys[i])){return this.items[i];}}return null;},insert:function(_1d,key,o){if(arguments.length==2){o=arguments[1];key=this.getKey(o);}if(_1d>=this.length){return this.add(key,o);}this.length++;this.items.splice(_1d,0,o);if(typeof key!="undefined"&&key!=null){this.map[key]=o;}this.keys.splice(_1d,0,key);this.fireEvent("add",_1d,o,key);return o;},remove:function(o){return this.removeAt(this.indexOf(o));},removeAt:function(_21){if(_21<this.length&&_21>=0){this.length--;var o=this.items[_21];this.items.splice(_21,1);var key=this.keys[_21];if(typeof key!="undefined"){delete this.map[key];}this.keys.splice(_21,1);this.fireEvent("remove",o,key);}},removeKey:function(key){return this.removeAt(this.indexOfKey(key));},getCount:function(){return this.length;},indexOf:function(o){if(!this.items.indexOf){for(var i=0,len=this.items.length;i<len;i++){if(this.items[i]==o){return i;}}return -1;}else{return this.items.indexOf(o);}},indexOfKey:function(key){if(!this.keys.indexOf){for(var i=0,len=this.keys.length;i<len;i++){if(this.keys[i]==key){return i;}}return -1;}else{return this.keys.indexOf(key);}},item:function(key){var _2c=typeof this.map[key]!="undefined"?this.map[key]:this.items[key];return typeof _2c!="function"||this.allowFunctions?_2c:null;},itemAt:function(_2d){return this.items[_2d];},key:function(key){return this.map[key];},contains:function(o){return this.indexOf(o)!=-1;},containsKey:function(key){return typeof this.map[key]!="undefined";},clear:function(){this.length=0;this.items=[];this.keys=[];this.map={};this.fireEvent("clear");},first:function(){return this.items[0];},last:function(){return this.items[this.length-1];},_sort:function(_31,dir,fn){var dsc=String(dir).toUpperCase()=="DESC"?-1:1;fn=fn||function(a,b){return a-b;};var c=[],k=this.keys,_39=this.items;for(var i=0,len=_39.length;i<len;i++){c[c.length]={key:k[i],value:_39[i],index:i};}c.sort(function(a,b){var v=fn(a[_31],b[_31])*dsc;if(v==0){v=(a.index<b.index?-1:1);}return v;});for(var i=0,len=c.length;i<len;i++){_39[i]=c[i].value;k[i]=c[i].key;}this.fireEvent("sort",this);},sort:function(dir,fn){this._sort("value",dir,fn);},keySort:function(dir,fn){this._sort("key",dir,fn||function(a,b){return String(a).toUpperCase()-String(b).toUpperCase();});},getRange:function(_45,end){var _47=this.items;if(_47.length<1){return [];}_45=_45||0;end=Math.min(typeof end=="undefined"?this.length-1:end,this.length-1);var r=[];if(_45<=end){for(var i=_45;i<=end;i++){r[r.length]=_47[i];}}else{for(var i=_45;i>=end;i--){r[r.length]=_47[i];}}return r;},filter:function(_4a,_4b){if(!_4b.exec){_4b=String(_4b);if(_4b.length==0){return this.clone();}_4b=new RegExp("^"+Ext.escapeRe(_4b),"i");}return this.filterBy(function(o){return o&&_4b.test(o[_4a]);});},filterBy:function(fn,_4e){var r=new Ext.util.MixedCollection();r.getKey=this.getKey;var k=this.keys,it=this.items;for(var i=0,len=it.length;i<len;i++){if(fn.call(_4e||this,it[i],k[i])){r.add(k[i],it[i]);}}return r;},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.util.JSON=new (function(){var _1={}.hasOwnProperty?true:false;var _2=function(n){return n<10?"0"+n:n;};var m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\"":"\\\"","\\":"\\\\"};var _5=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)+(c%16).toString(16);})+"\"";}return "\""+s+"\"";};var _a=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i<l;i+=1){v=o[i];switch(typeof v){case "undefined":case "function":case "unknown":break;default:if(b){a.push(",");}a.push(v===null?"null":Ext.util.JSON.encode(v));b=true;}}a.push("]");return a.join("");};var _11=function(o){return "\""+o.getFullYear()+"-"+_2(o.getMonth()+1)+"-"+_2(o.getDate())+"T"+_2(o.getHours())+":"+_2(o.getMinutes())+":"+_2(o.getSeconds())+"\"";};this.encode=function(o){if(typeof o=="undefined"||o===null){return "null";}else{if(o instanceof Array){return _a(o);}else{if(o instanceof Date){return _11(o);}else{if(typeof o=="string"){return _5(o);}else{if(typeof o=="number"){return isFinite(o)?String(o):"null";}else{if(typeof o=="boolean"){return String(o);}else{var a=["{"],b,i,v;for(i in o){if(!_1||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case "undefined":case "function":case "unknown":break;default:if(b){a.push(",");}a.push(this.encode(i),":",v===null?"null":this.encode(v));b=true;}}}a.push("}");return a.join("");}}}}}}};this.decode=function(_18){return eval("("+_18+")");};})();Ext.encode=Ext.util.JSON.encode;Ext.decode=Ext.util.JSON.decode;
+
+Ext.util.Format=function(){var _1=/^\s+|\s+$/g;return {ellipsis:function(_2,_3){if(_2&&_2.length>_3){return _2.substr(0,_3-3)+"...";}return _2;},undef:function(_4){return typeof _4!="undefined"?_4:"";},htmlEncode:function(_5){return !_5?_5:String(_5).replace(/&/g,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;").replace(/"/g,"&quot;");},trim:function(_6){return String(_6).replace(_1,"");},substr:function(_7,_8,_9){return String(_7).substr(_8,_9);},lowercase:function(_a){return String(_a).toLowerCase();},uppercase:function(_b){return String(_b).toUpperCase();},capitalize:function(_c){return !_c?_c:_c.charAt(0).toUpperCase()+_c.substr(1).toLowerCase();},call:function(_d,fn){if(arguments.length>2){var _f=Array.prototype.slice.call(arguments,2);_f.unshift(_d);return eval(fn).apply(window,_f);}else{return eval(fn).call(window,_d);}},usMoney:function(v){v=(Math.round((v-0)*100))/100;v=(v==Math.floor(v))?v+".00":((v*10==Math.floor(v*10))?v+"0":v);return "$"+v;},date:function(v,_12){if(!v){return "";}if(!(v instanceof Date)){v=new Date(Date.parse(v));}return v.dateFormat(_12||"m/d/Y");},dateRenderer:function(_13){return function(v){return Ext.util.Format.date(v,_13);};},stripTagsRE:/<\/?[^>]+>/gi,stripTags:function(v){return !v?v:String(v).replace(this.stripTagsRE,"");}};}();
+
+Ext.util.CSS=function(){var _1=null;var _2=document;var _3=/(-[a-z])/gi;var _4=function(m,a){return a.charAt(1).toUpperCase();};return {createStyleSheet:function(_7){var ss;if(Ext.isIE){ss=_2.createStyleSheet();ss.cssText=_7;}else{var _9=_2.getElementsByTagName("head")[0];var _a=_2.createElement("style");_a.setAttribute("type","text/css");try{_a.appendChild(_2.createTextNode(_7));}catch(e){_a.cssText=_7;}_9.appendChild(_a);ss=_a.styleSheet?_a.styleSheet:(_a.sheet||_2.styleSheets[_2.styleSheets.length-1]);}this.cacheStyleSheet(ss);return ss;},removeStyleSheet:function(id){var _c=_2.getElementById(id);if(_c){_c.parentNode.removeChild(_c);}},swapStyleSheet:function(id,_e){this.removeStyleSheet(id);var ss=_2.createElement("link");ss.setAttribute("rel","stylesheet");ss.setAttribute("type","text/css");ss.setAttribute("id",id);ss.setAttribute("href",_e);_2.getElementsByTagName("head")[0].appendChild(ss);},refreshCache:function(){return this.getRules(true);},cacheStyleSheet:function(ss){if(!_1){_1={};}try{var _11=ss.cssRules||ss.rules;for(var j=_11.length-1;j>=0;--j){_1[_11[j].selectorText]=_11[j];}}catch(e){}},getRules:function(_13){if(_1==null||_13){_1={};var ds=_2.styleSheets;for(var i=0,len=ds.length;i<len;i++){try{this.cacheStyleSheet(ds[i]);}catch(e){}}}return _1;},getRule:function(_17,_18){var rs=this.getRules(_18);if(!(_17 instanceof Array)){return rs[_17];}for(var i=0;i<_17.length;i++){if(rs[_17[i]]){return rs[_17[i]];}}return null;},updateRule:function(_1b,_1c,_1d){if(!(_1b instanceof Array)){var _1e=this.getRule(_1b);if(_1e){_1e.style[_1c.replace(_3,_4)]=_1d;return true;}}else{for(var i=0;i<_1b.length;i++){if(this.updateRule(_1b[i],_1c,_1d)){return true;}}}return false;}};}();
+
+Ext.util.ClickRepeater=function(el,_2){this.el=Ext.get(el);this.el.unselectable();Ext.apply(this,_2);this.events={"mousedown":true,"click":true,"mouseup":true};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,docEl:Ext.get(document),handleMouseDown:function(){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass);}this.mousedownTime=new Date();this.docEl.on("mouseup",this.handleMouseUp,this);this.el.on("mouseout",this.handleMouseOut,this);this.fireEvent("mousedown",this);this.fireEvent("click",this);this.timer=this.click.defer(this.delay||this.interval,this);},click:function(){this.fireEvent("click",this);this.timer=this.click.defer(this.getInterval(),this);},getInterval:function(){if(!this.accelerate){return this.interval;}var _4=this.mousedownTime.getElapsed();if(_4<500){return 400;}else{if(_4<1700){return 320;}else{if(_4<2600){return 250;}else{if(_4<3500){return 180;}else{if(_4<4400){return 140;}else{if(_4<5300){return 80;}else{if(_4<6200){return 50;}else{return 10;}}}}}}}},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);if(this.pressClass){this.el.addClass(this.pressClass);}this.click();},handleMouseUp:function(){clearTimeout(this.timer);this.el.un("mouseover",this.handleMouseReturn);this.el.un("mouseout",this.handleMouseOut);this.docEl.un("mouseup",this.handleMouseUp);this.el.removeClass(this.pressClass);this.fireEvent("mouseup",this);}});
+
+Ext.KeyNav=function(el,_2){this.el=Ext.get(el);Ext.apply(this,_2);if(!this.disabled){this.disabled=true;this.enable();}};Ext.KeyNav.prototype={disabled:false,defaultEventAction:"stopEvent",prepareEvent:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(Ext.isSafari&&h&&k>=37&&k<=40){e.stopEvent();}},relay:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(h&&this[h]){if(this.doRelay(e,this[h],h)!==true){e[this.defaultEventAction]();}}},doRelay:function(e,h,_b){return h.call(this.scope||this,e);},enter:false,left:false,right:false,up:false,down:false,tab:false,esc:false,pageUp:false,pageDown:false,del:false,home:false,end:false,keyToHandler:{37:"left",39:"right",38:"up",40:"down",33:"pageUp",34:"pageDown",46:"del",36:"home",35:"end",13:"enter",27:"esc",9:"tab"},enable:function(){if(this.disabled){if(Ext.isIE){this.el.on("keydown",this.relay,this);}else{this.el.on("keydown",this.prepareEvent,this);this.el.on("keypress",this.relay,this);}this.disabled=false;}},disable:function(){if(!this.disabled){if(Ext.isIE){this.el.un("keydown",this.relay);}else{this.el.un("keydown",this.prepareEvent);this.el.un("keypress",this.relay);}this.disabled=true;}}};
+
+Ext.KeyMap=function(el,_2,_3){this.el=Ext.get(el);this.eventName=_3||"keydown";this.bindings=[];if(_2 instanceof Array){for(var i=0,_5=_2.length;i<_5;i++){this.addBinding(_2[i]);}}else{this.addBinding(_2);}this.keyDownDelegate=Ext.EventManager.wrap(this.handleKeyDown,this,true);this.enable();};Ext.KeyMap.prototype={stopEvent:false,addBinding:function(_6){var _7=_6.key,_8=_6.shift,_9=_6.ctrl,_a=_6.alt,fn=_6.fn,_c=_6.scope;if(typeof _7=="string"){var ks=[];var _e=_7.toUpperCase();for(var j=0,len=_e.length;j<len;j++){ks.push(_e.charCodeAt(j));}_7=ks;}var _11=_7 instanceof Array;var _12=function(e){if((!_8||e.shiftKey)&&(!_9||e.ctrlKey)&&(!_a||e.altKey)){var k=e.getKey();if(_11){for(var i=0,len=_7.length;i<len;i++){if(_7[i]==k){if(this.stopEvent){e.stopEvent();}fn.call(_c||window,k,e);return;}}}else{if(k==_7){if(this.stopEvent){e.stopEvent();}fn.call(_c||window,k,e);}}}};this.bindings.push(_12);},handleKeyDown:function(e){if(this.enabled){var b=this.bindings;for(var i=0,len=b.length;i<len;i++){b[i].call(this,e);}}},isEnabled:function(){return this.enabled;},enable:function(){if(!this.enabled){this.el.on(this.eventName,this.keyDownDelegate);this.enabled=true;}},disable:function(){if(this.enabled){this.el.removeListener(this.eventName,this.keyDownDelegate);this.enabled=false;}}};
+
+Ext.util.TextMetrics=function(){var _1;return {measure:function(el,_3,_4){if(!_1){_1=Ext.util.TextMetrics.Instance(el,_4);}_1.bind(el);_1.setFixedWidth(_4||"auto");return _1.getSize(_3);},createInstance:function(el,_6){return Ext.util.TextMetrics.Instance(el,_6);}};}();Ext.util.TextMetrics.Instance=function(_7,_8){var ml=new Ext.Element(document.createElement("div"));document.body.appendChild(ml.dom);ml.position("absolute");ml.setLeftTop(-1000,-1000);ml.hide();if(_8){mi.setWidth(_8);}var _a={getSize:function(_b){ml.update(_b);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"));},setFixedWidth:function(_e){ml.setWidth(_e);},getWidth:function(_f){ml.dom.style.width="auto";return this.getSize(_f).width;},getHeight:function(_10){return this.getSize(_10).height;}};_a.bind(_7);return _a;};Ext.Element.measureText=Ext.util.TextMetrics.measure;
+
+Ext.state.Provider=function(){Ext.state.Provider.superclass.constructor.call(this);this.events={"statechange":true};this.state={};Ext.state.Provider.superclass.constructor.call(this);};Ext.extend(Ext.state.Provider,Ext.util.Observable,{get:function(_1,_2){return typeof this.state[_1]=="undefined"?_2:this.state[_1];},clear:function(_3){delete this.state[_3];this.fireEvent("statechange",this,_3,null);},set:function(_4,_5){this.state[_4]=_5;this.fireEvent("statechange",this,_4,_5);},decodeValue:function(_6){var re=/^(a|n|d|b|s|o)\:(.*)$/;var _8=re.exec(unescape(_6));if(!_8||!_8[1]){return;}var _9=_8[1];var v=_8[2];switch(_9){case "n":return parseFloat(v);case "d":return new Date(Date.parse(v));case "b":return (v=="1");case "a":var _b=[];var _c=v.split("^");for(var i=0,_e=_c.length;i<_e;i++){_b.push(this.decodeValue(_c[i]));}return _b;case "o":var _b={};var _c=v.split("^");for(var i=0,_e=_c.length;i<_e;i++){var kv=_c[i].split("=");_b[kv[0]]=this.decodeValue(kv[1]);}return _b;default:return v;}},encodeValue:function(v){var enc;if(typeof v=="number"){enc="n:"+v;}else{if(typeof v=="boolean"){enc="b:"+(v?"1":"0");}else{if(v instanceof Date){enc="d:"+v.toGMTString();}else{if(v instanceof Array){var _12="";for(var i=0,len=v.length;i<len;i++){_12+=this.encodeValue(v[i]);if(i!=len-1){_12+="^";}}enc="a:"+_12;}else{if(typeof v=="object"){var _12="";for(var key in v){if(typeof v[key]!="function"){_12+=key+"="+this.encodeValue(v[key])+"^";}}enc="o:"+_12.substring(0,_12.length-1);}else{enc="s:"+v;}}}}}return escape(enc);}});Ext.state.Manager=function(){var _16=new Ext.state.Provider();return {setProvider:function(_17){_16=_17;},get:function(key,_19){return _16.get(key,_19);},set:function(key,_1b){_16.set(key,_1b);},clear:function(key){_16.clear(key);},getProvider:function(){return _16;}};}();Ext.state.CookieProvider=function(_1d){Ext.state.CookieProvider.superclass.constructor.call(this);this.path="/";this.expires=new Date(new Date().getTime()+(1000*60*60*24*7));this.domain=null;this.secure=false;Ext.apply(this,_1d);this.state=this.readCookies();};Ext.extend(Ext.state.CookieProvider,Ext.state.Provider,{set:function(_1e,_1f){if(typeof _1f=="undefined"||_1f===null){this.clear(_1e);return;}this.setCookie(_1e,_1f);Ext.state.CookieProvider.superclass.set.call(this,_1e,_1f);},clear:function(_20){this.clearCookie(_20);Ext.state.CookieProvider.superclass.clear.call(this,_20);},readCookies:function(){var _21={};var c=document.cookie+";";var re=/\s?(.*?)=(.*?);/g;var _24;while((_24=re.exec(c))!=null){var _25=_24[1];var _26=_24[2];if(_25&&_25.substring(0,3)=="ys-"){_21[_25.substr(3)]=this.decodeValue(_26);}}return _21;},setCookie:function(_27,_28){document.cookie="ys-"+_27+"="+this.encodeValue(_28)+((this.expires==null)?"":("; expires="+this.expires.toGMTString()))+((this.path==null)?"":("; path="+this.path))+((this.domain==null)?"":("; domain="+this.domain))+((this.secure==true)?"; secure":"");},clearCookie:function(_29){document.cookie="ys-"+_29+"=null; expires=Thu, 01-Jan-70 00:00:01 GMT"+((this.path==null)?"":("; path="+this.path))+((this.domain==null)?"":("; domain="+this.domain))+((this.secure==true)?"; secure":"");}});
+
+(function(){var _1=Ext.EventManager;var _2=Ext.lib.Dom;Ext.dd.DragDrop=function(id,_4,_5){if(id){this.init(id,_4,_5);}};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(_1d,pad,_1f){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(_1d);var c=ce.dom==document.body?{x:0,y:0,width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()}:ce.getBox(_1f||false);var _23=b.y-c.y;var _24=b.x-c.x;this.resetConstraints();this.setXConstraint(_24-(pad.left||0),c.width-_24-b.width-(pad.right||0));this.setYConstraint(_23-(pad.top||0),c.height-_23-b.height-(pad.bottom||0));},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id);}return this._domRef;},getDragEl:function(){return Ext.getDom(this.dragElId);},init:function(id,_26,_27){this.initTarget(id,_26,_27);_1.on(this.id,"mousedown",this.handleMouseDown,this);},initTarget:function(id,_29,_2a){this.config=_2a||{};this.DDM=Ext.dd.DDM;this.groups={};if(typeof id!=="string"){id=Ext.id(id);}this.id=id;this.addToGroup((_29)?_29:"default");this.handleElId=id;this.setDragElId(id);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();this.handleOnAvailable();},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(_2b,_2c,_2d,_2e){if(!_2c&&0!==_2c){this.padding=[_2b,_2b,_2b,_2b];}else{if(!_2d&&0!==_2d){this.padding=[_2b,_2c,_2b,_2c];}else{this.padding=[_2b,_2c,_2d,_2e];}}},setInitPosition:function(_2f,_30){var el=this.getEl();if(!this.DDM.verifyEl(el)){return;}var dx=_2f||0;var dy=_30||0;var p=_2.getXY(el);this.initPageX=p[0]-dx;this.initPageY=p[1]-dy;this.lastPageX=p[0];this.lastPageY=p[1];this.setStartPosition(p);},setStartPosition:function(pos){var p=pos||_2.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=p[0];this.startPageY=p[1];},addToGroup:function(_37){this.groups[_37]=true;this.DDM.regDragDrop(this,_37);},removeFromGroup:function(_38){if(this.groups[_38]){delete this.groups[_38];}this.DDM.removeDDFromGroup(this,_38);},setDragElId:function(id){this.dragElId=id;},setHandleElId:function(id){if(typeof id!=="string"){id=Ext.id(id);}this.handleElId=id;this.DDM.regHandle(this.id,id);},setOuterHandleElId:function(id){if(typeof id!=="string"){id=Ext.id(id);}_1.on(id,"mousedown",this.handleMouseDown,this);this.setHandleElId(id);this.hasOuterHandles=true;},unreg:function(){_1.un(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return (this.DDM.isLocked()||this.locked);},handleMouseDown:function(e,oDD){if(this.primaryButtonOnly&&e.button!=0){return;}if(this.isLocked()){return;}this.DDM.refreshCache(this.groups);var pt=new Ext.lib.Point(Ext.lib.Event.getPageX(e),Ext.lib.Event.getPageY(e));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(pt,this)){}else{if(this.clickValidator(e)){this.setStartPosition();this.b4MouseDown(e);this.onMouseDown(e);this.DDM.handleMouseDown(e,this);this.DDM.stopEvent(e);}else{}}},clickValidator:function(e){var _40=Ext.lib.Event.getTarget(e);return (this.isValidHandleChild(_40)&&(this.id==this.handleElId||this.DDM.handleWasClicked(_40,this.id)));},addInvalidHandleType:function(_41){var _42=_41.toUpperCase();this.invalidHandleTypes[_42]=_42;},addInvalidHandleId:function(id){if(typeof id!=="string"){id=Ext.id(id);}this.invalidHandleIds[id]=id;},addInvalidHandleClass:function(_44){this.invalidHandleClasses.push(_44);},removeInvalidHandleType:function(_45){var _46=_45.toUpperCase();delete this.invalidHandleTypes[_46];},removeInvalidHandleId:function(id){if(typeof id!=="string"){id=Ext.id(id);}delete this.invalidHandleIds[id];},removeInvalidHandleClass:function(_48){for(var i=0,len=this.invalidHandleClasses.length;i<len;++i){if(this.invalidHandleClasses[i]==_48){delete this.invalidHandleClasses[i];}}},isValidHandleChild:function(_4b){var _4c=true;var _4d;try{_4d=_4b.nodeName.toUpperCase();}catch(e){_4d=_4b.nodeName;}_4c=_4c&&!this.invalidHandleTypes[_4d];_4c=_4c&&!this.invalidHandleIds[_4b.id];for(var i=0,len=this.invalidHandleClasses.length;_4c&&i<len;++i){_4c=!_2.hasClass(_4b,this.invalidHandleClasses[i]);}return _4c;},setXTicks:function(_50,_51){this.xTicks=[];this.xTickSize=_51;var _52={};for(var i=this.initPageX;i>=this.minX;i=i-_51){if(!_52[i]){this.xTicks[this.xTicks.length]=i;_52[i]=true;}}for(i=this.initPageX;i<=this.maxX;i=i+_51){if(!_52[i]){this.xTicks[this.xTicks.length]=i;_52[i]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(_54,_55){this.yTicks=[];this.yTickSize=_55;var _56={};for(var i=this.initPageY;i>=this.minY;i=i-_55){if(!_56[i]){this.yTicks[this.yTicks.length]=i;_56[i]=true;}}for(i=this.initPageY;i<=this.maxY;i=i+_55){if(!_56[i]){this.yTicks[this.yTicks.length]=i;_56[i]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(_58,_59,_5a){this.leftConstraint=_58;this.rightConstraint=_59;this.minX=this.initPageX-_58;this.maxX=this.initPageX+_59;if(_5a){this.setXTicks(this.initPageX,_5a);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(iUp,_5c,_5d){this.topConstraint=iUp;this.bottomConstraint=_5c;this.minY=this.initPageY-iUp;this.maxY=this.initPageY+_5c;if(_5d){this.setYTicks(this.initPageY,_5d);}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var dx=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var dy=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(dx,dy);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(val,_61){if(!_61){return val;}else{if(_61[0]>=val){return _61[0];}else{for(var i=0,len=_61.length;i<len;++i){var _64=i+1;if(_61[_64]&&_61[_64]>=val){var _65=val-_61[i];var _66=_61[_64]-val;return (_66>_65)?_61[i]:_61[_64];}}return _61[_61.length-1];}}},toString:function(){return ("DragDrop "+this.id);}};})();if(!Ext.dd.DragDropMgr){Ext.dd.DragDropMgr=function(){var _67=Ext.EventManager;return {ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initalized:false,locked:false,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,mode:0,_execOnAll:function(_68,_69){for(var i in this.ids){for(var j in this.ids[i]){var oDD=this.ids[i][j];if(!this.isTypeOfDD(oDD)){continue;}oDD[_68].apply(oDD,_69);}}},_onLoad:function(){this.init();_67.on(document,"mouseup",this.handleMouseUp,this,true);_67.on(document,"mousemove",this.handleMouseMove,this,true);_67.on(window,"unload",this._onUnload,this,true);_67.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,_6f){if(!this.initialized){this.init();}if(!this.ids[_6f]){this.ids[_6f]={};}this.ids[_6f][oDD.id]=oDD;},removeDDFromGroup:function(oDD,_71){if(!this.ids[_71]){this.ids[_71]={};}var obj=this.ids[_71];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];}}delete this.handleIds[oDD.id];},regHandle:function(_75,_76){if(!this.handleIds[_75]){this.handleIds[_75]={};}this.handleIds[_75][_76]=_76;},isDragDrop:function(id){return (this.getDDById(id))?true:false;},getRelated:function(_78,_79){var _7a=[];for(var i in _78.groups){for(j in this.ids[i]){var dd=this.ids[i][j];if(!this.isTypeOfDD(dd)){continue;}if(!_79||dd.isTarget){_7a[_7a.length]=dd;}}}return _7a;},isLegalTarget:function(oDD,_7e){var _7f=this.getRelated(oDD,true);for(var i=0,len=_7f.length;i<len;++i){if(_7f[i].id==_7e.id){return true;}}return false;},isTypeOfDD:function(oDD){return (oDD&&oDD.__ygDragDrop);},isHandle:function(_83,_84){return (this.handleIds[_83]&&this.handleIds[_83][_84]);},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){this.currentTarget=Ext.lib.Event.getTarget(e);this.dragCurrent=oDD;var el=oDD.getEl();this.startX=Ext.lib.Event.getPageX(e);this.startY=Ext.lib.Event.getPageY(e);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(!this.dragCurrent){return;}clearTimeout(this.clickTimeout);if(this.dragThreshMet){this.fireEvents(e,true);}else{}this.stopDrag(e);this.stopEvent(e);},stopEvent:function(e){if(this.stopPropagation){e.stopPropagation();}if(this.preventDefault){e.preventDefault();}},stopDrag:function(e){if(this.dragCurrent){if(this.dragThreshMet){this.dragCurrent.b4EndDrag(e);this.dragCurrent.endDrag(e);}this.dragCurrent.onMouseUp(e);}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(e){if(!this.dragCurrent){return true;}if(Ext.isIE&&(e.button!==0&&e.button!==1&&e.button!==2)){this.stopEvent(e);return this.handleMouseUp(e);}if(!this.dragThreshMet){var _91=Math.abs(this.startX-Ext.lib.Event.getPageX(e));var _92=Math.abs(this.startY-Ext.lib.Event.getPageY(e));if(_91>this.clickPixelThresh||_92>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){this.dragCurrent.b4Drag(e);this.dragCurrent.onDrag(e);this.fireEvents(e,false);}this.stopEvent(e);return true;},fireEvents:function(e,_94){var dc=this.dragCurrent;if(!dc||dc.isLocked()){return;}var x=Ext.lib.Event.getPageX(e);var y=Ext.lib.Event.getPageY(e);var pt=new Ext.lib.Point(x,y);var _99=[];var _9a=[];var _9b=[];var _9c=[];var _9d=[];for(var i in this.dragOvers){var ddo=this.dragOvers[i];if(!this.isTypeOfDD(ddo)){continue;}if(!this.isOverTarget(pt,ddo,this.mode)){_9a.push(ddo);}_99[i]=true;delete this.dragOvers[i];}for(var _a0 in dc.groups){if("string"!=typeof _a0){continue;}for(i in this.ids[_a0]){var oDD=this.ids[_a0][i];if(!this.isTypeOfDD(oDD)){continue;}if(oDD.isTarget&&!oDD.isLocked()&&oDD!=dc){if(this.isOverTarget(pt,oDD,this.mode)){if(_94){_9c.push(oDD);}else{if(!_99[oDD.id]){_9d.push(oDD);}else{_9b.push(oDD);}this.dragOvers[oDD.id]=oDD;}}}}}if(this.mode){if(_9a.length){dc.b4DragOut(e,_9a);dc.onDragOut(e,_9a);}if(_9d.length){dc.onDragEnter(e,_9d);}if(_9b.length){dc.b4DragOver(e,_9b);dc.onDragOver(e,_9b);}if(_9c.length){dc.b4DragDrop(e,_9c);dc.onDragDrop(e,_9c);}}else{var len=0;for(i=0,len=_9a.length;i<len;++i){dc.b4DragOut(e,_9a[i].id);dc.onDragOut(e,_9a[i].id);}for(i=0,len=_9d.length;i<len;++i){dc.onDragEnter(e,_9d[i].id);}for(i=0,len=_9b.length;i<len;++i){dc.b4DragOver(e,_9b[i].id);dc.onDragOver(e,_9b[i].id);}for(i=0,len=_9c.length;i<len;++i){dc.b4DragDrop(e,_9c[i].id);dc.onDragDrop(e,_9c[i].id);}}if(_94&&!_9c.length){dc.onInvalidDrop(e);}},getBestMatch:function(dds){var _a4=null;var len=dds.length;if(len==1){_a4=dds[0];}else{for(var i=0;i<len;++i){var dd=dds[i];if(dd.cursorIsOver){_a4=dd;break;}else{if(!_a4||_a4.overlap.getArea()<dd.overlap.getArea()){_a4=dd;}}}}return _a4;},refreshCache:function(_a8){for(var _a9 in _a8){if("string"!=typeof _a9){continue;}for(var i in this.ids[_a9]){var oDD=this.ids[_a9][i];if(this.isTypeOfDD(oDD)){var loc=this.getLocation(oDD);if(loc){this.locationCache[oDD.id]=loc;}else{delete this.locationCache[oDD.id];}}}}},verifyEl:function(el){try{if(el){var _ae=el.offsetParent;if(_ae){return true;}}}catch(e){}return false;},getLocation:function(oDD){if(!this.isTypeOfDD(oDD)){return null;}var el=oDD.getEl(),pos,x1,x2,y1,y2,t,r,b,l;try{pos=Ext.lib.Dom.getXY(el);}catch(e){}if(!pos){return null;}x1=pos[0];x2=x1+el.offsetWidth;y1=pos[1];y2=y1+el.offsetHeight;t=y1-oDD.padding[0];r=x2+oDD.padding[1];b=y2+oDD.padding[2];l=x1-oDD.padding[3];return new Ext.lib.Region(t,r,b,l);},isOverTarget:function(pt,_bb,_bc){var loc=this.locationCache[_bb.id];if(!loc||!this.useCache){loc=this.getLocation(_bb);this.locationCache[_bb.id]=loc;}if(!loc){return false;}_bb.cursorIsOver=loc.contains(pt);var dc=this.dragCurrent;if(!dc||!dc.getTargetCoord||(!_bc&&!dc.constrainX&&!dc.constrainY)){return _bb.cursorIsOver;}_bb.overlap=null;var pos=dc.getTargetCoord(pt.x,pt.y);var el=dc.getDragEl();var _c1=new Ext.lib.Region(pos.y,pos.x+el.offsetWidth,pos.y+el.offsetHeight,pos.x);var _c2=_c1.intersect(loc);if(_c2){_bb.overlap=_c2;return (_bc)?true:_bb.cursorIsOver;}else{return false;}},_onUnload:function(e,me){Ext.dd.DragDropMgr.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}this._execOnAll("unreg",[]);for(i in this.elementCache){delete this.elementCache[i];}this.elementCache={};this.ids={};},elementCache:{},getElWrapper:function(id){var _c6=this.elementCache[id];if(!_c6||!_c6.el){_c6=this.elementCache[id]=new this.ElementWrapper(Ext.getDom(id));}return _c6;},getElement:function(id){return Ext.getDom(id);},getCss:function(id){var el=Ext.getDom(id);return (el)?el.style:null;},ElementWrapper:function(el){this.el=el||null;this.id=this.el&&el.id;this.css=this.el&&el.style;},getPosX:function(el){return Ext.lib.Dom.getX(el);},getPosY:function(el){return Ext.lib.Dom.getY(el);},swapNode:function(n1,n2){if(n1.swapNode){n1.swapNode(n2);}else{var p=n2.parentNode;var s=n2.nextSibling;if(s==n1){p.insertBefore(n1,n2);}else{if(n2==n1.nextSibling){p.insertBefore(n2,n1);}else{n1.parentNode.replaceChild(n2,n1);p.insertBefore(n1,s);}}}},getScroll:function(){var t,l,dde=document.documentElement,db=document.body;if(dde&&(dde.scrollTop||dde.scrollLeft)){t=dde.scrollTop;l=dde.scrollLeft;}else{if(db){t=db.scrollTop;l=db.scrollLeft;}else{}}return {top:t,left:l};},getStyle:function(el,_d6){return Ext.fly(el).getStyle(_d6);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:function(){return this.getScroll().left;},moveToEl:function(_d7,_d8){var _d9=Ext.lib.Dom.getXY(_d8);Ext.lib.Dom.setXY(_d7,_d9);},numericSort:function(a,b){return (a-b);},_timeoutCount:0,_addListeners:function(){var DDM=Ext.dd.DDM;if(Ext.lib.Event&&document){DDM._onLoad();}else{if(DDM._timeoutCount>2000){}else{setTimeout(DDM._addListeners,10);if(document&&document.body){DDM._timeoutCount+=1;}}}},handleWasClicked:function(_dd,id){if(this.isHandle(id,_dd.id)){return true;}else{var p=_dd.parentNode;while(p){if(this.isHandle(id,p.id)){return true;}else{p=p.parentNode;}}}return false;}};}();Ext.dd.DDM=Ext.dd.DragDropMgr;Ext.dd.DDM._addListeners();}Ext.dd.DD=function(id,_e1,_e2){if(id){this.init(id,_e1,_e2);}};Ext.extend(Ext.dd.DD,Ext.dd.DragDrop,{scroll:true,autoOffset:function(_e3,_e4){var x=_e3-this.startPageX;var y=_e4-this.startPageY;this.setDelta(x,y);},setDelta:function(_e7,_e8){this.deltaX=_e7;this.deltaY=_e8;},setDragElPos:function(_e9,_ea){var el=this.getDragEl();this.alignElWithMouse(el,_e9,_ea);},alignElWithMouse:function(el,_ed,_ee){var _ef=this.getTargetCoord(_ed,_ee);var fly=Ext.fly(el);if(!this.deltaSetXY){var _f1=[_ef.x,_ef.y];fly.setXY(_f1);var _f2=fly.getLeft(true);var _f3=fly.getTop(true);this.deltaSetXY=[_f2-_ef.x,_f3-_ef.y];}else{fly.setLeftTop(_ef.x+this.deltaSetXY[0],_ef.y+this.deltaSetXY[1]);}this.cachePosition(_ef.x,_ef.y);this.autoScroll(_ef.x,_ef.y,el.offsetHeight,el.offsetWidth);},cachePosition:function(_f4,_f5){if(_f4){this.lastPageX=_f4;this.lastPageY=_f5;}else{var _f6=Ext.lib.Dom.getXY(this.getEl());this.lastPageX=_f6[0];this.lastPageY=_f6[1];}},autoScroll:function(x,y,h,w){if(this.scroll){var _fb=Ext.lib.Dom.getViewWidth();var _fc=Ext.lib.Dom.getViewHeight();var st=this.DDM.getScrollTop();var sl=this.DDM.getScrollLeft();var bot=h+y;var _100=w+x;var _101=(_fb+st-y-this.deltaY);var _102=(_fc+sl-x-this.deltaX);var _103=40;var _104=(document.all)?80:30;if(bot>_fb&&_101<_103){window.scrollTo(sl,st+_104);}if(y<st&&st>0&&y-st<_103){window.scrollTo(sl,st-_104);}if(_100>_fc&&_102<_103){window.scrollTo(sl+_104,st);}if(x<sl&&sl>0&&x-sl<_103){window.scrollTo(sl-_104,st);}}},getTargetCoord:function(_105,_106){var x=_105-this.deltaX;var y=_106-this.deltaY;if(this.constrainX){if(x<this.minX){x=this.minX;}if(x>this.maxX){x=this.maxX;}}if(this.constrainY){if(y<this.minY){y=this.minY;}if(y>this.maxY){y=this.maxY;}}x=this.getTick(x,this.xTicks);y=this.getTick(y,this.yTicks);return {x:x,y:y};},applyConfig:function(){Ext.dd.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(e){this.autoOffset(Ext.lib.Event.getPageX(e),Ext.lib.Event.getPageY(e));},b4Drag:function(e){this.setDragElPos(Ext.lib.Event.getPageX(e),Ext.lib.Event.getPageY(e));},toString:function(){return ("DD "+this.id);}});Ext.dd.DDProxy=function(id,_10c,_10d){if(id){this.init(id,_10c,_10d);this.initFrame();}};Ext.dd.DDProxy.dragElId="ygddfdiv";Ext.extend(Ext.dd.DDProxy,Ext.dd.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var self=this;var body=document.body;if(!body||!body.firstChild){setTimeout(function(){self.createFrame();},50);return;}var div=this.getDragEl();if(!div){div=document.createElement("div");div.id=this.dragElId;var s=div.style;s.position="absolute";s.visibility="hidden";s.cursor="move";s.border="2px solid #aaa";s.zIndex=999;body.insertBefore(div,body.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){Ext.dd.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||Ext.dd.DDProxy.dragElId);},showFrame:function(_112,_113){var el=this.getEl();var _115=this.getDragEl();var s=_115.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(s.width,10)/2),Math.round(parseInt(s.height,10)/2));}this.setDragElPos(_112,_113);Ext.fly(_115).show();},_resizeProxy:function(){if(this.resizeFrame){var el=this.getEl();Ext.fly(this.getDragEl()).setSize(el.offsetWidth,el.offsetHeight);}},b4MouseDown:function(e){var x=Ext.lib.Event.getPageX(e);var y=Ext.lib.Event.getPageY(e);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="";lel.style.visibility="hidden";Ext.dd.DDM.moveToEl(lel,del);del.style.visibility="hidden";lel.style.visibility="";},toString:function(){return ("DDProxy "+this.id);}});Ext.dd.DDTarget=function(id,_122,_123){if(id){this.initTarget(id,_122,_123);}};Ext.extend(Ext.dd.DDTarget,Ext.dd.DragDrop,{toString:function(){return ("DDTarget "+this.id);}});
+
+Ext.dd.ScrollManager=function(){var _1=Ext.dd.DragDropMgr;var _2={};var _3=null;var _4={};var _5=function(e){_3=null;_7();};var _8=function(){if(_1.dragCurrent){_1.refreshCache(_1.dragCurrent.groups);}};var _9=function(){if(_1.dragCurrent){var _a=Ext.dd.ScrollManager;if(!_a.animate){if(_4.el.scroll(_4.dir,_a.increment)){_8();}}else{_4.el.scroll(_4.dir,_a.increment,true,_a.animDuration,_8);}}};var _7=function(){if(_4.id){clearInterval(_4.id);}_4.id=0;_4.el=null;_4.dir="";};var _b=function(el,_d){_7();_4.el=el;_4.dir=_d;_4.id=setInterval(_9,Ext.dd.ScrollManager.frequency);};var _e=function(e,_10){if(_10||!_1.dragCurrent){return;}var dds=Ext.dd.ScrollManager;if(!_3||_3!=_1.dragCurrent){_3=_1.dragCurrent;dds.refreshCache();}var xy=Ext.lib.Event.getXY(e);var pt=new Ext.lib.Point(xy[0],xy[1]);for(var id in _2){var el=_2[id],r=el._region;if(r.contains(pt)&&el.isScrollable()){if(r.bottom-pt.y<=dds.thresh){if(_4.el!=el){_b(el,"down");}return;}else{if(r.right-pt.x<=dds.thresh){if(_4.el!=el){_b(el,"left");}return;}else{if(pt.y-r.top<=dds.thresh){if(_4.el!=el){_b(el,"up");}return;}else{if(pt.x-r.left<=dds.thresh){if(_4.el!=el){_b(el,"right");}return;}}}}}}_7();};_1.fireEvents=_1.fireEvents.createSequence(_e,_1);_1.stopDrag=_1.stopDrag.createSequence(_5,_1);return {register:function(el){if(el instanceof Array){for(var i=0,len=el.length;i<len;i++){this.register(el[i]);}}else{el=Ext.get(el);_2[el.id]=el;}},unregister:function(el){if(el instanceof Array){for(var i=0,len=el.length;i<len;i++){this.unregister(el[i]);}}else{el=Ext.get(el);delete _2[el.id];}},thresh:25,increment:100,frequency:500,animate:true,animDuration:0.4,refreshCache:function(){for(var id in _2){if(typeof _2[id]=="object"){_2[id]._region=_2[id].getRegion();}}}};}();
+
+Ext.dd.Registry=function(){var _1={};var _2={};var _3=0;var _4=function(el,_6){if(typeof el=="string"){return el;}var id=el.id;if(!id&&_6!==false){id="yddgen-"+(++_3);el.id=id;}return id;};return {register:function(el,_9){_9=_9||{};if(typeof el=="string"){el=document.getElementById(el);}_9.ddel=el;_1[_4(el)]=_9;if(_9.isHandle!==false){_2[_9.ddel.id]=_9;}if(_9.handles){var hs=_9.handles;for(var i=0,_c=hs.length;i<_c;i++){_2[_4(hs[i])]=_9;}}},unregister:function(el){var id=_4(el,false);var _f=_1[id];if(_f){delete _1[id];if(_f.handles){var hs=_f.handles;for(var i=0,len=hs.length;i<len;i++){delete _2[_4(hs[i],false)];}}}},getHandle:function(id){if(typeof id!="string"){id=id.id;}return _2[id];},getHandleFromEvent:function(e){var t=Ext.lib.Event.getTarget(e);return t?_2[t.id]:null;},getTarget:function(id){if(typeof id!="string"){id=id.id;}return _1[id];},getTargetFromEvent:function(e){var t=Ext.lib.Event.getTarget(e);return t?_1[t.id]||_2[t.id]:null;}};}();
+
+Ext.dd.StatusProxy=function(_1){Ext.apply(this,_1);this.id=this.id||Ext.id();this.el=new Ext.Layer({dh:{id:this.id,tag:"div",cls:"x-dd-drag-proxy "+this.dropNotAllowed,children:[{tag:"div",cls:"x-dd-drop-icon"},{tag:"div",cls:"x-dd-drag-ghost"}]},shadow:!_1||_1.shadow!==false});this.ghost=Ext.get(this.el.dom.childNodes[1]);this.dropStatus=this.dropNotAllowed;};Ext.dd.StatusProxy.prototype={dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",setStatus:function(_2){_2=_2||this.dropNotAllowed;if(this.dropStatus!=_2){this.el.replaceClass(this.dropStatus,_2);this.dropStatus=_2;}},reset:function(_3){this.el.dom.className="x-dd-drag-proxy "+this.dropNotAllowed;this.dropStatus=this.dropNotAllowed;if(_3){this.ghost.update("");}},update:function(_4){if(typeof _4=="string"){this.ghost.update(_4);}else{this.ghost.update("");_4.style.margin="0";this.ghost.dom.appendChild(_4);}},getEl:function(){return this.el;},getGhost:function(){return this.ghost;},hide:function(_5){this.el.hide();if(_5){this.reset(true);}},stop:function(){if(this.anim&&this.anim.isAnimated&&this.anim.isAnimated()){this.anim.stop();}},show:function(){this.el.show();},sync:function(){this.el.sync();},repair:function(xy,_7,_8){this.callback=_7;this.scope=_8;if(xy&&this.animRepair!==false){this.el.addClass("x-dd-drag-repair");this.el.hideUnders(true);this.anim=this.el.shift({duration:this.repairDuration||0.5,easing:"easeOut",xy:xy,stopFx:true,callback:this.afterRepair,scope:this});}else{this.afterRepair();}},afterRepair:function(){this.hide(true);if(typeof this.callback=="function"){this.callback.call(this.scope||this);}this.callback==null;this.scope==null;}};
+
+Ext.dd.DragSource=function(el,_2){this.el=Ext.get(el);this.dragData={};Ext.apply(this,_2);if(!this.proxy){this.proxy=new Ext.dd.StatusProxy();}this.el.on("mouseup",this.handleMouseUp);Ext.dd.DragSource.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{dragElId:this.proxy.id,resizeFrame:false,isTarget:false,scroll:this.scroll===true});this.dragging=false;};Ext.extend(Ext.dd.DragSource,Ext.dd.DDProxy,{dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",getDragData:function(e){return this.dragData;},onDragEnter:function(e,id){var _6=Ext.dd.DragDropMgr.getDDById(id);this.cachedTarget=_6;if(this.beforeDragEnter(_6,e,id)!==false){if(_6.isNotifyTarget){var _7=_6.notifyEnter(this,e,this.dragData);this.proxy.setStatus(_7);}else{this.proxy.setStatus(this.dropAllowed);}if(this.afterDragEnter){this.afterDragEnter(_6,e,id);}}},beforeDragEnter:function(_8,e,id){return true;},alignElWithMouse:function(){Ext.dd.DragSource.superclass.alignElWithMouse.apply(this,arguments);this.proxy.sync();},onDragOver:function(e,id){var _d=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(id);if(this.beforeDragOver(_d,e,id)!==false){if(_d.isNotifyTarget){var _e=_d.notifyOver(this,e,this.dragData);this.proxy.setStatus(_e);}if(this.afterDragOver){this.afterDragOver(_d,e,id);}}},beforeDragOver:function(_f,e,id){return true;},onDragOut:function(e,id){var _14=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(id);if(this.beforeDragOut(_14,e,id)!==false){if(_14.isNotifyTarget){_14.notifyOut(this,e,this.dragData);}this.proxy.reset();if(this.afterDragOut){this.afterDragOut(_14,e,id);}}this.cachedTarget=null;},beforeDragOut:function(_15,e,id){return true;},onDragDrop:function(e,id){var _1a=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(id);if(this.beforeDragDrop(_1a,e,id)!==false){if(_1a.isNotifyTarget){if(_1a.notifyDrop(this,e,this.dragData)){this.onValidDrop(_1a,e,id);}else{this.onInvalidDrop(_1a,e,id);}}else{this.onValidDrop(_1a,e,id);}if(this.afterDragDrop){this.afterDragDrop(_1a,e,id);}}},beforeDragDrop:function(_1b,e,id){return true;},onValidDrop:function(_1e,e,id){this.hideProxy();},getRepairXY:function(e,_22){return this.el.getXY();},onInvalidDrop:function(_23,e,id){this.beforeInvalidDrop(_23,e,id);if(this.cachedTarget){if(this.cachedTarget.isNotifyTarget){this.cachedTarget.notifyOut(this,e,this.dragData);}this.cacheTarget=null;}this.proxy.repair(this.getRepairXY(e,this.dragData),this.afterRepair,this);if(this.afterInvalidDrop){this.afterInvalidDrop(e,id);}},afterRepair:function(){if(Ext.enableFx){this.el.highlight(this.hlColor||"c3daf9");}this.dragging=false;},beforeInvalidDrop:function(_26,e,id){return true;},handleMouseDown:function(e){if(this.dragging){return;}if(Ext.QuickTips){Ext.QuickTips.disable();}var _2a=this.getDragData(e);if(_2a&&this.onBeforeDrag(_2a,e)!==false){this.dragData=_2a;this.proxy.stop();Ext.dd.DragSource.superclass.handleMouseDown.apply(this,arguments);}},handleMouseUp:function(e){if(Ext.QuickTips){Ext.QuickTips.enable();}},onBeforeDrag:function(_2c,e){return true;},onStartDrag:Ext.emptyFn,startDrag:function(e){this.proxy.reset();this.dragging=true;this.proxy.update("");this.onInitDrag(e);this.proxy.show();},onInitDrag:function(e){var _30=this.el.dom.cloneNode(true);_30.id=Ext.id();this.proxy.update(_30);this.onStartDrag(e);return true;},getProxy:function(){return this.proxy;},hideProxy:function(){this.proxy.hide();this.proxy.reset(true);this.dragging=false;},triggerCacheRefresh:function(){Ext.dd.DDM.refreshCache(this.groups);},b4EndDrag:function(e){},endDrag:function(e){this.onEndDrag(this.dragData,e);},onEndDrag:function(_33,e){},autoOffset:function(x,y){this.setDelta(-12,-20);}});
+
+Ext.dd.DropTarget=function(el,_2){this.el=Ext.get(el);Ext.apply(this,_2);if(this.containerScroll){Ext.dd.ScrollManager.register(this.el);}Ext.dd.DropTarget.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{isTarget:true});};Ext.extend(Ext.dd.DropTarget,Ext.dd.DDTarget,{dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",isTarget:true,isNotifyTarget:true,notifyEnter:function(dd,e,_5){if(this.overClass){this.el.addClass(this.overClass);}return this.dropAllowed;},notifyOver:function(dd,e,_8){return this.dropAllowed;},notifyOut:function(dd,e,_b){if(this.overClass){this.el.removeClass(this.overClass);}},notifyDrop:function(dd,e,_e){return false;}});
+
+Ext.dd.DragZone=function(el,_2){Ext.dd.DragZone.superclass.constructor.call(this,el,_2);if(this.containerScroll){Ext.dd.ScrollManager.register(this.el);}};Ext.extend(Ext.dd.DragZone,Ext.dd.DragSource,{getDragData:function(e){return Ext.dd.Registry.getHandleFromEvent(e);},onInitDrag:function(e){this.proxy.update(this.dragData.ddel.cloneNode(true));this.onStartDrag(e);return true;},afterRepair:function(){if(Ext.enableFx){Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor||"c3daf9");}this.dragging=false;},getRepairXY:function(e){return Ext.Element.fly(this.dragData.ddel).getXY();}});
+
+Ext.dd.DropZone=function(el,_2){Ext.dd.DropZone.superclass.constructor.call(this,el,_2);};Ext.extend(Ext.dd.DropZone,Ext.dd.DropTarget,{getTargetFromEvent:function(e){return Ext.dd.Registry.getTargetFromEvent(e);},onNodeEnter:function(n,dd,e,_7){},onNodeOver:function(n,dd,e,_b){return this.dropAllowed;},onNodeOut:function(n,dd,e,_f){},onNodeDrop:function(n,dd,e,_13){return false;},onContainerOver:function(dd,e,_16){return this.dropNotAllowed;},onContainerDrop:function(dd,e,_19){return false;},notifyEnter:function(dd,e,_1c){return this.dropNotAllowed;},notifyOver:function(dd,e,_1f){var n=this.getTargetFromEvent(e);if(!n){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,_1f);this.lastOverNode=null;}return this.onContainerOver(dd,e,_1f);}if(this.lastOverNode!=n){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,_1f);}this.onNodeEnter(n,dd,e,_1f);this.lastOverNode=n;}return this.onNodeOver(n,dd,e,_1f);},notifyOut:function(dd,e,_23){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,_23);this.lastOverNode=null;}},notifyDrop:function(dd,e,_26){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,_26);this.lastOverNode=null;}var n=this.getTargetFromEvent(e);return n?this.onNodeDrop(n,dd,e,_26):this.onContainerDrop(dd,e,_26);},triggerCacheRefresh:function(){Ext.dd.DDM.refreshCache(this.groups);}});
+
+Ext.data.SortTypes={none:function(s){return s;},stripTagsRE:/<\/?[^>]+>/gi,asText:function(s){return String(s).replace(this.stripTagsRE,"");},asUCText:function(s){return String(s).toUpperCase().replace(this.stripTagsRE,"");},asUCString:function(s){return String(s).toUpperCase();},asDate:function(s){if(!s){return 0;}if(s instanceof Date){return s.getTime();}return Date.parse(String(s));},asFloat:function(s){var _7=parseFloat(String(s).replace(/,/g,""));if(isNaN(_7)){_7=0;}return _7;},asInt:function(s){var _9=parseInt(String(s).replace(/,/g,""));if(isNaN(_9)){_9=0;}return _9;}};
+
+Ext.data.Record=function(_1,id){this.id=(id||id===0)?id:++Ext.data.Record.AUTO_ID;this.data=_1;};Ext.data.Record.create=function(o){var f=function(){f.superclass.constructor.apply(this,arguments);};Ext.extend(f,Ext.data.Record);var p=f.prototype;p.fields=new Ext.util.MixedCollection(false,function(_6){return _6.name;});for(var i=0,_8=o.length;i<_8;i++){p.fields.add(new Ext.data.Field(o[i]));}f.getField=function(_9){return p.fields.get(_9);};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(_a){this.store=_a;},set:function(_b,_c){if(this.data[_b]==_c){return;}this.dirty=true;if(!this.modified){this.modified={};}if(typeof this.modified[_b]=="undefined"){this.modified[_b]=this.data[_b];}this.data[_b]=_c;if(!this.editing){this.store.afterEdit(this);}},get:function(_d){return this.data[_d];},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(){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){this.store.afterReject(this);}},commit:function(){this.dirty=false;delete this.modified;this.editing=false;if(this.store){this.store.afterCommit(this);}},hasError:function(){return this.error!=null;},clearError:function(){this.error=null;}};
+
+Ext.data.Store=function(_1){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"};Ext.apply(this,_1);if(this.reader&&!this.recordType){this.recordType=this.reader.recordType;}this.fields=this.recordType.prototype.fields;this.modified=[];this.events={datachanged:true,add:true,remove:true,update:true,clear:true,beforeload:true,load:true,loadexception:true};if(this.proxy){this.relayEvents(this.proxy,["loadexception"]);}this.sortToggle={};Ext.data.Store.superclass.constructor.call(this);};Ext.extend(Ext.data.Store,Ext.util.Observable,{remoteSort:false,lastOptions:null,add:function(_3){_3=[].concat(_3);for(var i=0,_5=_3.length;i<_5;i++){_3[i].join(this);}var _6=this.data.length;this.data.addAll(_3);this.fireEvent("add",this,_3,_6);},remove:function(_7){var _8=this.data.indexOf(_7);this.data.removeAt(_8);this.fireEvent("remove",this,_7,_8);},removeAll:function(){this.data.clear();this.fireEvent("clear",this);},insert:function(_9,_a){_a=[].concat(_a);for(var i=0,_c=_a.length;i<_c;i++){this.data.insert(_9,_a[i]);_a[i].join(this);}this.fireEvent("add",this,_a,_9);},indexOf:function(_d){return this.data.indexOf(_d);},indexOfId:function(id){return this.data.indexOfKey(id);},getById:function(id){return this.data.key(id);},getAt:function(_10){return this.data.itemAt(_10);},getRange:function(_11,end){return this.data.getRange(_11,end);},storeOptions:function(o){o=Ext.apply({},o);delete o.callback;delete o.scope;this.lastOptions=o;},load:function(_14){_14=_14||{};if(this.fireEvent("beforeload",this,_14)!==false){this.storeOptions(_14);var p=Ext.apply(_14.params||{},this.baseParams);if(this.sortInfo&&this.remoteSort){var pn=this.paramNames;p[pn["sort"]]=this.sortInfo.field;p[pn["dir"]]=this.sortInfo.direction;}this.proxy.load(p,this.reader,this.loadRecords,this,_14);}},reload:function(_17){this.load(Ext.applyIf(_17||{},this.lastOptions));},loadRecords:function(o,_19,_1a){if(!o||_1a===false){if(_1a!==false){this.fireEvent("load",this,[],_19);}if(_19.callback){_19.callback.call(_19.scope||this,[],_19,false);}return;}var r=o.records,t=o.totalRecords||r.length;for(var i=0,len=r.length;i<len;i++){r[i].join(this);}if(!_19||_19.add!==true){this.data.clear();this.data.addAll(r);this.totalLength=t;this.applySort();this.fireEvent("datachanged",this);}else{this.totalLength=Math.max(t,this.data.length+r.length);this.data.addAll(r);}this.fireEvent("load",this,r,_19);if(_19.callback){_19.callback.call(_19.scope||this,r,_19,true);}},loadData:function(o,_20){var r=this.reader.readRecords(o);this.loadRecords(r,{add:_20},true);},getCount:function(){return this.data.length||0;},getTotalCount:function(){return this.totalLength||0;},getSortState:function(){return this.sortInfo;},applySort:function(){if(this.sortInfo&&!this.remoteSort){var s=this.sortInfo,f=s.field;var st=this.fields.get(f).sortType;var fn=function(r1,r2){var v1=st(r1.data[f]),v2=st(r2.data[f]);return v1>v2?1:(v1<v2?-1:0);};this.data.sort(s.direction,fn);if(this.snapshot&&this.snapshot!=this.data){this.snapshot.sort(s.direction,fn);}}},setDefaultSort:function(_2a,dir){this.sortInfo={field:_2a,direction:dir?dir.toUpperCase():"ASC&qu