From 01c45f734dc84f71380dd7d0019b39f29222da29 Mon Sep 17 00:00:00 2001 From: Duncan Mac-Vicar P Date: Tue, 13 Nov 2007 16:08:03 +0100 Subject: [PATCH] add ext library to use advanced widgets --- examples/ext/ext-all-debug.js | 30217 ++++++++++++++++ examples/ext/ext-all.js | 135 + examples/ext/ext-core-debug.js | 5485 +++ examples/ext/ext-core.js | 19 + examples/ext/resources/css/README.txt | 3 + examples/ext/resources/css/basic-dialog.css | 286 + examples/ext/resources/css/box.css | 111 + examples/ext/resources/css/button.css | 148 + examples/ext/resources/css/combo.css | 50 + examples/ext/resources/css/core.css | 291 + examples/ext/resources/css/date-picker.css | 246 + examples/ext/resources/css/dd.css | 61 + examples/ext/resources/css/debug.css | 55 + examples/ext/resources/css/editor.css | 66 + examples/ext/resources/css/ext-all.css | 637 + examples/ext/resources/css/form.css | 407 + examples/ext/resources/css/grid.css | 298 + examples/ext/resources/css/layout.css | 252 + examples/ext/resources/css/menu.css | 119 + examples/ext/resources/css/qtips.css | 120 + examples/ext/resources/css/reset-min.css | 9 + examples/ext/resources/css/resizable.css | 143 + examples/ext/resources/css/tabs.css | 134 + examples/ext/resources/css/toolbar.css | 165 + examples/ext/resources/css/tree.css | 192 + examples/ext/resources/css/xtheme-aero.css | 701 + examples/ext/resources/css/xtheme-gray.css | 437 + examples/ext/resources/css/xtheme-vista.css | 511 + .../aero/basic-dialog/aero-close-over.gif | Bin 0 -> 1109 bytes .../images/aero/basic-dialog/aero-close.gif | Bin 0 -> 882 bytes .../images/aero/basic-dialog/bg-center.gif | Bin 0 -> 863 bytes .../images/aero/basic-dialog/bg-left.gif | Bin 0 -> 1201 bytes .../images/aero/basic-dialog/bg-right.gif | Bin 0 -> 1202 bytes .../images/aero/basic-dialog/close.gif | Bin 0 -> 350 bytes .../aero/basic-dialog/collapse-over.gif | Bin 0 -> 1030 bytes .../images/aero/basic-dialog/collapse.gif | Bin 0 -> 851 bytes .../images/aero/basic-dialog/e-handle.gif | Bin 0 -> 995 bytes .../images/aero/basic-dialog/expand-over.gif | Bin 0 -> 1044 bytes .../images/aero/basic-dialog/expand.gif | Bin 0 -> 875 bytes .../images/aero/basic-dialog/hd-sprite.gif | Bin 0 -> 980 bytes .../images/aero/basic-dialog/s-handle.gif | Bin 0 -> 992 bytes .../images/aero/basic-dialog/se-handle.gif | Bin 0 -> 838 bytes .../images/aero/basic-dialog/w-handle.gif | Bin 0 -> 817 bytes .../ext/resources/images/aero/gradient-bg.gif | Bin 0 -> 1472 bytes .../images/aero/grid/grid-blue-split.gif | Bin 0 -> 817 bytes .../resources/images/aero/grid/grid-hrow.gif | Bin 0 -> 838 bytes .../resources/images/aero/grid/grid-split.gif | Bin 0 -> 817 bytes .../images/aero/grid/grid-vista-hd.gif | Bin 0 -> 829 bytes .../resources/images/aero/grid/pspbrwse.jbf | Bin 0 -> 6112 bytes .../images/aero/grid/sort-col-bg.gif | Bin 0 -> 855 bytes .../resources/images/aero/grid/sort_asc.gif | Bin 0 -> 830 bytes .../resources/images/aero/grid/sort_desc.gif | Bin 0 -> 833 bytes .../resources/images/aero/layout/collapse.gif | Bin 0 -> 842 bytes .../resources/images/aero/layout/expand.gif | Bin 0 -> 842 bytes .../images/aero/layout/gradient-bg.gif | Bin 0 -> 1202 bytes .../images/aero/layout/ns-collapse.gif | Bin 0 -> 842 bytes .../images/aero/layout/ns-expand.gif | Bin 0 -> 843 bytes .../images/aero/layout/panel-close.gif | Bin 0 -> 829 bytes .../images/aero/layout/panel-title-bg.gif | Bin 0 -> 830 bytes .../aero/layout/panel-title-light-bg.gif | Bin 0 -> 833 bytes .../images/aero/layout/tab-close-on.gif | Bin 0 -> 880 bytes .../images/aero/layout/tab-close.gif | Bin 0 -> 844 bytes .../resources/images/aero/menu/checked.gif | Bin 0 -> 959 bytes .../resources/images/aero/menu/item-over.gif | Bin 0 -> 820 bytes .../ext/resources/images/aero/menu/menu.gif | Bin 0 -> 834 bytes .../resources/images/aero/menu/unchecked.gif | Bin 0 -> 941 bytes .../ext/resources/images/aero/qtip/bg.gif | Bin 0 -> 1024 bytes examples/ext/resources/images/aero/s.gif | Bin 0 -> 43 bytes .../images/aero/sizer/e-handle-dark.gif | Bin 0 -> 1062 bytes .../resources/images/aero/sizer/e-handle.gif | Bin 0 -> 1586 bytes .../images/aero/sizer/ne-handle-dark.gif | Bin 0 -> 839 bytes .../resources/images/aero/sizer/ne-handle.gif | Bin 0 -> 854 bytes .../images/aero/sizer/nw-handle-dark.gif | Bin 0 -> 839 bytes .../resources/images/aero/sizer/nw-handle.gif | Bin 0 -> 853 bytes .../images/aero/sizer/s-handle-dark.gif | Bin 0 -> 1060 bytes .../resources/images/aero/sizer/s-handle.gif | Bin 0 -> 1318 bytes .../images/aero/sizer/se-handle-dark.gif | Bin 0 -> 838 bytes .../resources/images/aero/sizer/se-handle.gif | Bin 0 -> 853 bytes .../images/aero/sizer/sw-handle-dark.gif | Bin 0 -> 839 bytes .../resources/images/aero/sizer/sw-handle.gif | Bin 0 -> 855 bytes .../aero/tabs/tab-btm-inactive-left-bg.gif | Bin 0 -> 891 bytes .../aero/tabs/tab-btm-inactive-right-bg.gif | Bin 0 -> 1618 bytes .../images/aero/tabs/tab-btm-left-bg.gif | Bin 0 -> 875 bytes .../images/aero/tabs/tab-btm-right-bg.gif | Bin 0 -> 1604 bytes .../resources/images/aero/tabs/tab-sprite.gif | Bin 0 -> 3866 bytes .../images/aero/tabs/tab-strip-bg.gif | Bin 0 -> 826 bytes .../images/aero/tabs/tab-strip-bg.png | Bin 0 -> 259 bytes .../images/aero/tabs/tab-strip-btm-bg.gif | Bin 0 -> 826 bytes .../ext/resources/images/aero/toolbar/bg.gif | Bin 0 -> 904 bytes .../images/aero/toolbar/tb-btn-sprite.gif | Bin 0 -> 1127 bytes .../images/default/basic-dialog/btn-arrow.gif | Bin 0 -> 870 bytes .../default/basic-dialog/btn-sprite.gif | Bin 0 -> 1341 bytes .../images/default/basic-dialog/close.gif | Bin 0 -> 893 bytes .../images/default/basic-dialog/collapse.gif | Bin 0 -> 865 bytes .../images/default/basic-dialog/e-handle.gif | Bin 0 -> 995 bytes .../images/default/basic-dialog/expand.gif | Bin 0 -> 884 bytes .../images/default/basic-dialog/hd-sprite.gif | Bin 0 -> 1099 bytes .../images/default/basic-dialog/progress.gif | Bin 0 -> 19442 bytes .../images/default/basic-dialog/progress2.gif | Bin 0 -> 14113 bytes .../images/default/basic-dialog/s-handle.gif | Bin 0 -> 992 bytes .../images/default/basic-dialog/se-handle.gif | Bin 0 -> 833 bytes .../images/default/box/corners-blue.gif | Bin 0 -> 1010 bytes .../resources/images/default/box/corners.gif | Bin 0 -> 1005 bytes .../resources/images/default/box/l-blue.gif | Bin 0 -> 810 bytes .../ext/resources/images/default/box/l.gif | Bin 0 -> 810 bytes .../resources/images/default/box/r-blue.gif | Bin 0 -> 810 bytes .../ext/resources/images/default/box/r.gif | Bin 0 -> 810 bytes .../resources/images/default/box/tb-blue.gif | Bin 0 -> 851 bytes .../ext/resources/images/default/box/tb.gif | Bin 0 -> 839 bytes .../resources/images/default/dd/drop-add.gif | Bin 0 -> 1001 bytes .../resources/images/default/dd/drop-no.gif | Bin 0 -> 949 bytes .../resources/images/default/dd/drop-yes.gif | Bin 0 -> 1016 bytes .../images/default/editor/tb-sprite.gif | Bin 0 -> 2072 bytes .../images/default/form/clear-trigger.gif | Bin 0 -> 1988 bytes .../images/default/form/clear-trigger.psd | Bin 0 -> 11804 bytes .../images/default/form/date-trigger.gif | Bin 0 -> 1603 bytes .../images/default/form/date-trigger.psd | Bin 0 -> 12377 bytes .../images/default/form/error-tip-corners.gif | Bin 0 -> 4183 bytes .../images/default/form/exclamation.gif | Bin 0 -> 995 bytes .../images/default/form/search-trigger.gif | Bin 0 -> 2182 bytes .../images/default/form/search-trigger.psd | Bin 0 -> 15601 bytes .../resources/images/default/form/text-bg.gif | Bin 0 -> 819 bytes .../images/default/form/trigger-tpl.gif | Bin 0 -> 1487 bytes .../resources/images/default/form/trigger.gif | Bin 0 -> 1816 bytes .../resources/images/default/form/trigger.psd | Bin 0 -> 10829 bytes .../resources/images/default/gradient-bg.gif | Bin 0 -> 1472 bytes .../resources/images/default/grid/Thumbs.db | Bin 0 -> 33792 bytes .../images/default/grid/arrow-left-white.gif | Bin 0 -> 825 bytes .../images/default/grid/arrow-right-white.gif | Bin 0 -> 825 bytes .../images/default/grid/col-move-bottom.gif | Bin 0 -> 868 bytes .../images/default/grid/col-move-top.gif | Bin 0 -> 869 bytes .../resources/images/default/grid/dirty.gif | Bin 0 -> 832 bytes .../resources/images/default/grid/done.gif | Bin 0 -> 133 bytes .../resources/images/default/grid/drop-no.gif | Bin 0 -> 947 bytes .../images/default/grid/drop-yes.gif | Bin 0 -> 860 bytes .../images/default/grid/footer-bg.gif | Bin 0 -> 834 bytes .../images/default/grid/grid-blue-hd.gif | Bin 0 -> 829 bytes .../images/default/grid/grid-blue-split.gif | Bin 0 -> 817 bytes .../images/default/grid/grid-hrow.gif | Bin 0 -> 855 bytes .../images/default/grid/grid-loading.gif | Bin 0 -> 701 bytes .../images/default/grid/grid-split.gif | Bin 0 -> 817 bytes .../images/default/grid/grid-vista-hd.gif | Bin 0 -> 829 bytes .../images/default/grid/grid3-hd-btn.gif | Bin 0 -> 1229 bytes .../images/default/grid/grid3-hrow-over.gif | Bin 0 -> 823 bytes .../images/default/grid/grid3-hrow.gif | Bin 0 -> 836 bytes .../default/grid/grid3-special-col-bg.gif | Bin 0 -> 837 bytes .../default/grid/grid3-special-col-sel-bg.gif | Bin 0 -> 843 bytes .../resources/images/default/grid/hd-pop.gif | Bin 0 -> 839 bytes .../images/default/grid/hmenu-asc.gif | Bin 0 -> 931 bytes .../images/default/grid/hmenu-desc.gif | Bin 0 -> 930 bytes .../images/default/grid/hmenu-lock.gif | Bin 0 -> 955 bytes .../images/default/grid/hmenu-lock.png | Bin 0 -> 648 bytes .../images/default/grid/hmenu-unlock.gif | Bin 0 -> 971 bytes .../images/default/grid/hmenu-unlock.png | Bin 0 -> 697 bytes .../images/default/grid/invalid_line.gif | Bin 0 -> 815 bytes .../resources/images/default/grid/loading.gif | Bin 0 -> 771 bytes .../resources/images/default/grid/mso-hd.gif | Bin 0 -> 875 bytes .../resources/images/default/grid/nowait.gif | Bin 0 -> 884 bytes .../default/grid/page-first-disabled.gif | Bin 0 -> 925 bytes .../images/default/grid/page-first.gif | Bin 0 -> 925 bytes .../default/grid/page-last-disabled.gif | Bin 0 -> 923 bytes .../images/default/grid/page-last.gif | Bin 0 -> 923 bytes .../default/grid/page-next-disabled.gif | Bin 0 -> 875 bytes .../images/default/grid/page-next.gif | Bin 0 -> 875 bytes .../default/grid/page-prev-disabled.gif | Bin 0 -> 879 bytes .../images/default/grid/page-prev.gif | Bin 0 -> 879 bytes .../images/default/grid/pick-button.gif | Bin 0 -> 1036 bytes .../resources/images/default/grid/refresh.gif | Bin 0 -> 1015 bytes .../images/default/grid/row-check-sprite.gif | Bin 0 -> 1083 bytes .../images/default/grid/row-expand-sprite.gif | Bin 0 -> 955 bytes .../images/default/grid/row-over.gif | Bin 0 -> 823 bytes .../resources/images/default/grid/row-sel.gif | Bin 0 -> 823 bytes .../images/default/grid/sort_asc.gif | Bin 0 -> 825 bytes .../images/default/grid/sort_desc.gif | Bin 0 -> 826 bytes .../resources/images/default/grid/wait.gif | Bin 0 -> 1100 bytes .../images/default/layout/collapse.gif | Bin 0 -> 842 bytes .../images/default/layout/expand.gif | Bin 0 -> 842 bytes .../images/default/layout/gradient-bg.gif | Bin 0 -> 1472 bytes .../images/default/layout/ns-collapse.gif | Bin 0 -> 842 bytes .../images/default/layout/ns-expand.gif | Bin 0 -> 843 bytes .../images/default/layout/panel-close.gif | Bin 0 -> 829 bytes .../images/default/layout/panel-title-bg.gif | Bin 0 -> 838 bytes .../default/layout/panel-title-light-bg.gif | Bin 0 -> 835 bytes .../resources/images/default/layout/stick.gif | Bin 0 -> 874 bytes .../resources/images/default/layout/stuck.gif | Bin 0 -> 92 bytes .../images/default/layout/tab-close-on.gif | Bin 0 -> 880 bytes .../images/default/layout/tab-close.gif | Bin 0 -> 859 bytes .../resources/images/default/menu/checked.gif | Bin 0 -> 982 bytes .../images/default/menu/group-checked.gif | Bin 0 -> 891 bytes .../images/default/menu/menu-parent.gif | Bin 0 -> 854 bytes .../resources/images/default/menu/menu.gif | Bin 0 -> 842 bytes .../images/default/menu/unchecked.gif | Bin 0 -> 917 bytes .../images/default/panel/tool-sprites.gif | Bin 0 -> 2988 bytes .../ext/resources/images/default/qtip/bg.gif | Bin 0 -> 1091 bytes .../resources/images/default/qtip/close.gif | Bin 0 -> 972 bytes .../images/default/qtip/tip-sprite.gif | Bin 0 -> 4032 bytes examples/ext/resources/images/default/s.gif | Bin 0 -> 43 bytes .../ext/resources/images/default/shadow-c.png | Bin 0 -> 182 bytes .../resources/images/default/shadow-lr.png | Bin 0 -> 135 bytes .../ext/resources/images/default/shadow.png | Bin 0 -> 311 bytes .../images/default/shared/calendar.gif | Bin 0 -> 979 bytes .../images/default/shared/glass-bg.gif | Bin 0 -> 873 bytes .../images/default/shared/left-btn.gif | Bin 0 -> 870 bytes .../images/default/shared/right-btn.gif | Bin 0 -> 871 bytes .../images/default/shared/warning.gif | Bin 0 -> 960 bytes .../images/default/sizer/e-handle-dark.gif | Bin 0 -> 1062 bytes .../images/default/sizer/e-handle.gif | Bin 0 -> 1586 bytes .../images/default/sizer/ne-handle-dark.gif | Bin 0 -> 839 bytes .../images/default/sizer/ne-handle.gif | Bin 0 -> 854 bytes .../images/default/sizer/nw-handle-dark.gif | Bin 0 -> 839 bytes .../images/default/sizer/nw-handle.gif | Bin 0 -> 853 bytes .../images/default/sizer/s-handle-dark.gif | Bin 0 -> 1060 bytes .../images/default/sizer/s-handle.gif | Bin 0 -> 1318 bytes .../images/default/sizer/se-handle-dark.gif | Bin 0 -> 838 bytes .../images/default/sizer/se-handle.gif | Bin 0 -> 853 bytes .../resources/images/default/sizer/square.gif | Bin 0 -> 864 bytes .../images/default/sizer/sw-handle-dark.gif | Bin 0 -> 839 bytes .../images/default/sizer/sw-handle.gif | Bin 0 -> 855 bytes .../default/tabs/tab-btm-inactive-left-bg.gif | Bin 0 -> 875 bytes .../tabs/tab-btm-inactive-right-bg.gif | Bin 0 -> 1601 bytes .../images/default/tabs/tab-btm-left-bg.gif | Bin 0 -> 877 bytes .../images/default/tabs/tab-btm-right-bg.gif | Bin 0 -> 1606 bytes .../images/default/tabs/tab-sprite.gif | Bin 0 -> 3088 bytes .../default/toolbar/btn-arrow-light.gif | Bin 0 -> 916 bytes .../images/default/toolbar/btn-arrow.gif | Bin 0 -> 919 bytes .../images/default/toolbar/btn-over-bg.gif | Bin 0 -> 837 bytes .../images/default/toolbar/gray-bg.gif | Bin 0 -> 832 bytes .../images/default/toolbar/tb-bg.gif | Bin 0 -> 862 bytes .../images/default/toolbar/tb-btn-sprite.gif | Bin 0 -> 1091 bytes .../images/default/tree/drop-add.gif | Bin 0 -> 1001 bytes .../images/default/tree/drop-between.gif | Bin 0 -> 907 bytes .../resources/images/default/tree/drop-no.gif | Bin 0 -> 949 bytes .../images/default/tree/drop-over.gif | Bin 0 -> 911 bytes .../images/default/tree/drop-under.gif | Bin 0 -> 911 bytes .../images/default/tree/drop-yes.gif | Bin 0 -> 1016 bytes .../default/tree/elbow-end-minus-nl.gif | Bin 0 -> 898 bytes .../images/default/tree/elbow-end-minus.gif | Bin 0 -> 905 bytes .../images/default/tree/elbow-end-plus-nl.gif | Bin 0 -> 900 bytes .../images/default/tree/elbow-end-plus.gif | Bin 0 -> 907 bytes .../images/default/tree/elbow-end.gif | Bin 0 -> 844 bytes .../images/default/tree/elbow-line.gif | Bin 0 -> 846 bytes .../images/default/tree/elbow-minus-nl.gif | Bin 0 -> 898 bytes .../images/default/tree/elbow-minus.gif | Bin 0 -> 908 bytes .../images/default/tree/elbow-plus-nl.gif | Bin 0 -> 900 bytes .../images/default/tree/elbow-plus.gif | Bin 0 -> 910 bytes .../resources/images/default/tree/elbow.gif | Bin 0 -> 850 bytes .../images/default/tree/folder-open.gif | Bin 0 -> 956 bytes .../resources/images/default/tree/folder.gif | Bin 0 -> 952 bytes .../resources/images/default/tree/leaf.gif | Bin 0 -> 945 bytes .../resources/images/default/tree/loading.gif | Bin 0 -> 771 bytes .../ext/resources/images/default/tree/s.gif | Bin 0 -> 43 bytes .../images/gray/basic-dialog/close.gif | Bin 0 -> 893 bytes .../images/gray/basic-dialog/collapse.gif | Bin 0 -> 900 bytes .../images/gray/basic-dialog/dlg-bg.gif | Bin 0 -> 27857 bytes .../images/gray/basic-dialog/e-handle.gif | Bin 0 -> 995 bytes .../images/gray/basic-dialog/expand.gif | Bin 0 -> 911 bytes .../images/gray/basic-dialog/hd-sprite.gif | Bin 0 -> 1060 bytes .../images/gray/basic-dialog/s-handle.gif | Bin 0 -> 992 bytes .../images/gray/basic-dialog/se-handle.gif | Bin 0 -> 833 bytes .../ext/resources/images/gray/gradient-bg.gif | Bin 0 -> 1472 bytes .../resources/images/gray/grid/grid-hrow.gif | Bin 0 -> 825 bytes .../resources/images/gray/layout/collapse.gif | Bin 0 -> 842 bytes .../resources/images/gray/layout/expand.gif | Bin 0 -> 842 bytes .../images/gray/layout/gradient-bg.gif | Bin 0 -> 1202 bytes .../images/gray/layout/ns-collapse.gif | Bin 0 -> 842 bytes .../images/gray/layout/ns-expand.gif | Bin 0 -> 843 bytes .../images/gray/layout/panel-close.gif | Bin 0 -> 829 bytes .../images/gray/layout/panel-title-bg.gif | Bin 0 -> 838 bytes .../gray/layout/panel-title-light-bg.gif | Bin 0 -> 842 bytes .../resources/images/gray/layout/stick.gif | Bin 0 -> 874 bytes .../images/gray/layout/tab-close-on.gif | Bin 0 -> 880 bytes .../images/gray/layout/tab-close.gif | Bin 0 -> 859 bytes .../resources/images/gray/menu/checked.gif | Bin 0 -> 982 bytes .../images/gray/menu/group-checked.gif | Bin 0 -> 891 bytes .../images/gray/menu/menu-parent.gif | Bin 0 -> 846 bytes .../ext/resources/images/gray/menu/menu.gif | Bin 0 -> 842 bytes .../resources/images/gray/menu/unchecked.gif | Bin 0 -> 917 bytes .../ext/resources/images/gray/qtip/bg.gif | Bin 0 -> 1024 bytes .../resources/images/gray/qtip/tip-sprite.gif | Bin 0 -> 4032 bytes examples/ext/resources/images/gray/s.gif | Bin 0 -> 43 bytes .../images/gray/sizer/e-handle-dark.gif | Bin 0 -> 1062 bytes .../resources/images/gray/sizer/e-handle.gif | Bin 0 -> 1586 bytes .../images/gray/sizer/ne-handle-dark.gif | Bin 0 -> 839 bytes .../resources/images/gray/sizer/ne-handle.gif | Bin 0 -> 854 bytes .../images/gray/sizer/nw-handle-dark.gif | Bin 0 -> 839 bytes .../resources/images/gray/sizer/nw-handle.gif | Bin 0 -> 853 bytes .../images/gray/sizer/s-handle-dark.gif | Bin 0 -> 1060 bytes .../resources/images/gray/sizer/s-handle.gif | Bin 0 -> 1318 bytes .../images/gray/sizer/se-handle-dark.gif | Bin 0 -> 838 bytes .../resources/images/gray/sizer/se-handle.gif | Bin 0 -> 853 bytes .../images/gray/sizer/sw-handle-dark.gif | Bin 0 -> 839 bytes .../resources/images/gray/sizer/sw-handle.gif | Bin 0 -> 855 bytes .../gray/tabs/tab-btm-inactive-left-bg.gif | Bin 0 -> 875 bytes .../gray/tabs/tab-btm-inactive-right-bg.gif | Bin 0 -> 1601 bytes .../images/gray/tabs/tab-btm-left-bg.gif | Bin 0 -> 875 bytes .../images/gray/tabs/tab-btm-right-bg.gif | Bin 0 -> 1601 bytes .../resources/images/gray/tabs/tab-sprite.gif | Bin 0 -> 3037 bytes .../resources/images/gray/toolbar/gray-bg.gif | Bin 0 -> 832 bytes .../images/gray/toolbar/tb-btn-sprite.gif | Bin 0 -> 963 bytes .../images/vista/basic-dialog/bg-center.gif | Bin 0 -> 865 bytes .../images/vista/basic-dialog/bg-left.gif | Bin 0 -> 1039 bytes .../images/vista/basic-dialog/bg-right.gif | Bin 0 -> 1039 bytes .../images/vista/basic-dialog/close.gif | Bin 0 -> 350 bytes .../images/vista/basic-dialog/collapse.gif | Bin 0 -> 333 bytes .../images/vista/basic-dialog/dlg-bg.gif | Bin 0 -> 27857 bytes .../images/vista/basic-dialog/e-handle.gif | Bin 0 -> 995 bytes .../images/vista/basic-dialog/expand.gif | Bin 0 -> 351 bytes .../images/vista/basic-dialog/hd-sprite.gif | Bin 0 -> 462 bytes .../images/vista/basic-dialog/s-handle.gif | Bin 0 -> 992 bytes .../images/vista/basic-dialog/se-handle.gif | Bin 0 -> 833 bytes .../images/vista/basic-dialog/w-handle.gif | Bin 0 -> 817 bytes .../resources/images/vista/gradient-bg.gif | Bin 0 -> 1472 bytes .../images/vista/grid/grid-split.gif | Bin 0 -> 817 bytes .../images/vista/grid/grid-vista-hd.gif | Bin 0 -> 829 bytes .../images/vista/layout/collapse.gif | Bin 0 -> 842 bytes .../resources/images/vista/layout/expand.gif | Bin 0 -> 842 bytes .../images/vista/layout/gradient-bg.gif | Bin 0 -> 1202 bytes .../images/vista/layout/ns-collapse.gif | Bin 0 -> 842 bytes .../images/vista/layout/ns-expand.gif | Bin 0 -> 843 bytes .../images/vista/layout/panel-close.gif | Bin 0 -> 829 bytes .../images/vista/layout/panel-title-bg.gif | Bin 0 -> 888 bytes .../vista/layout/panel-title-light-bg.gif | Bin 0 -> 846 bytes .../resources/images/vista/layout/stick.gif | Bin 0 -> 872 bytes .../images/vista/layout/tab-close-on.gif | Bin 0 -> 880 bytes .../images/vista/layout/tab-close.gif | Bin 0 -> 844 bytes .../ext/resources/images/vista/qtip/bg.gif | Bin 0 -> 1024 bytes .../images/vista/qtip/tip-sprite.gif | Bin 0 -> 4183 bytes examples/ext/resources/images/vista/s.gif | Bin 0 -> 43 bytes .../images/vista/sizer/e-handle-dark.gif | Bin 0 -> 1062 bytes .../resources/images/vista/sizer/e-handle.gif | Bin 0 -> 1586 bytes .../images/vista/sizer/ne-handle-dark.gif | Bin 0 -> 839 bytes .../images/vista/sizer/ne-handle.gif | Bin 0 -> 854 bytes .../images/vista/sizer/nw-handle-dark.gif | Bin 0 -> 839 bytes .../images/vista/sizer/nw-handle.gif | Bin 0 -> 853 bytes .../images/vista/sizer/s-handle-dark.gif | Bin 0 -> 1060 bytes .../resources/images/vista/sizer/s-handle.gif | Bin 0 -> 1318 bytes .../images/vista/sizer/se-handle-dark.gif | Bin 0 -> 838 bytes .../images/vista/sizer/se-handle.gif | Bin 0 -> 853 bytes .../images/vista/sizer/sw-handle-dark.gif | Bin 0 -> 839 bytes .../images/vista/sizer/sw-handle.gif | Bin 0 -> 855 bytes .../vista/tabs/tab-btm-inactive-left-bg.gif | Bin 0 -> 879 bytes .../vista/tabs/tab-btm-inactive-right-bg.gif | Bin 0 -> 1609 bytes .../images/vista/tabs/tab-btm-left-bg.gif | Bin 0 -> 895 bytes .../images/vista/tabs/tab-btm-right-bg.gif | Bin 0 -> 1608 bytes .../images/vista/tabs/tab-sprite.gif | Bin 0 -> 3150 bytes .../images/vista/toolbar/gray-bg.gif | Bin 0 -> 839 bytes .../images/vista/toolbar/tb-btn-sprite.gif | Bin 0 -> 1110 bytes examples/ext/resources/license.txt | 27 + examples/ext/resources/raw-images/shadow.psd | Bin 0 -> 59114 bytes examples/ext/resources/resources.jsb | 563 + 350 files changed, 41888 insertions(+) create mode 100644 examples/ext/ext-all-debug.js create mode 100644 examples/ext/ext-all.js create mode 100644 examples/ext/ext-core-debug.js create mode 100644 examples/ext/ext-core.js create mode 100644 examples/ext/resources/css/README.txt create mode 100644 examples/ext/resources/css/basic-dialog.css create mode 100644 examples/ext/resources/css/box.css create mode 100644 examples/ext/resources/css/button.css create mode 100644 examples/ext/resources/css/combo.css create mode 100644 examples/ext/resources/css/core.css create mode 100644 examples/ext/resources/css/date-picker.css create mode 100644 examples/ext/resources/css/dd.css create mode 100644 examples/ext/resources/css/debug.css create mode 100644 examples/ext/resources/css/editor.css create mode 100644 examples/ext/resources/css/ext-all.css create mode 100644 examples/ext/resources/css/form.css create mode 100644 examples/ext/resources/css/grid.css create mode 100644 examples/ext/resources/css/layout.css create mode 100644 examples/ext/resources/css/menu.css create mode 100644 examples/ext/resources/css/qtips.css create mode 100644 examples/ext/resources/css/reset-min.css create mode 100644 examples/ext/resources/css/resizable.css create mode 100644 examples/ext/resources/css/tabs.css create mode 100644 examples/ext/resources/css/toolbar.css create mode 100644 examples/ext/resources/css/tree.css create mode 100644 examples/ext/resources/css/xtheme-aero.css create mode 100644 examples/ext/resources/css/xtheme-gray.css create mode 100644 examples/ext/resources/css/xtheme-vista.css create mode 100644 examples/ext/resources/images/aero/basic-dialog/aero-close-over.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/aero-close.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/bg-center.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/bg-left.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/bg-right.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/close.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/collapse-over.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/collapse.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/e-handle.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/expand-over.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/expand.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/hd-sprite.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/s-handle.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/se-handle.gif create mode 100644 examples/ext/resources/images/aero/basic-dialog/w-handle.gif create mode 100644 examples/ext/resources/images/aero/gradient-bg.gif create mode 100644 examples/ext/resources/images/aero/grid/grid-blue-split.gif create mode 100644 examples/ext/resources/images/aero/grid/grid-hrow.gif create mode 100644 examples/ext/resources/images/aero/grid/grid-split.gif create mode 100644 examples/ext/resources/images/aero/grid/grid-vista-hd.gif create mode 100644 examples/ext/resources/images/aero/grid/pspbrwse.jbf create mode 100644 examples/ext/resources/images/aero/grid/sort-col-bg.gif create mode 100644 examples/ext/resources/images/aero/grid/sort_asc.gif create mode 100644 examples/ext/resources/images/aero/grid/sort_desc.gif create mode 100644 examples/ext/resources/images/aero/layout/collapse.gif create mode 100644 examples/ext/resources/images/aero/layout/expand.gif create mode 100644 examples/ext/resources/images/aero/layout/gradient-bg.gif create mode 100644 examples/ext/resources/images/aero/layout/ns-collapse.gif create mode 100644 examples/ext/resources/images/aero/layout/ns-expand.gif create mode 100644 examples/ext/resources/images/aero/layout/panel-close.gif create mode 100644 examples/ext/resources/images/aero/layout/panel-title-bg.gif create mode 100644 examples/ext/resources/images/aero/layout/panel-title-light-bg.gif create mode 100644 examples/ext/resources/images/aero/layout/tab-close-on.gif create mode 100644 examples/ext/resources/images/aero/layout/tab-close.gif create mode 100644 examples/ext/resources/images/aero/menu/checked.gif create mode 100644 examples/ext/resources/images/aero/menu/item-over.gif create mode 100644 examples/ext/resources/images/aero/menu/menu.gif create mode 100644 examples/ext/resources/images/aero/menu/unchecked.gif create mode 100644 examples/ext/resources/images/aero/qtip/bg.gif create mode 100644 examples/ext/resources/images/aero/s.gif create mode 100644 examples/ext/resources/images/aero/sizer/e-handle-dark.gif create mode 100644 examples/ext/resources/images/aero/sizer/e-handle.gif create mode 100644 examples/ext/resources/images/aero/sizer/ne-handle-dark.gif create mode 100644 examples/ext/resources/images/aero/sizer/ne-handle.gif create mode 100644 examples/ext/resources/images/aero/sizer/nw-handle-dark.gif create mode 100644 examples/ext/resources/images/aero/sizer/nw-handle.gif create mode 100644 examples/ext/resources/images/aero/sizer/s-handle-dark.gif create mode 100644 examples/ext/resources/images/aero/sizer/s-handle.gif create mode 100644 examples/ext/resources/images/aero/sizer/se-handle-dark.gif create mode 100644 examples/ext/resources/images/aero/sizer/se-handle.gif create mode 100644 examples/ext/resources/images/aero/sizer/sw-handle-dark.gif create mode 100644 examples/ext/resources/images/aero/sizer/sw-handle.gif create mode 100644 examples/ext/resources/images/aero/tabs/tab-btm-inactive-left-bg.gif create mode 100644 examples/ext/resources/images/aero/tabs/tab-btm-inactive-right-bg.gif create mode 100644 examples/ext/resources/images/aero/tabs/tab-btm-left-bg.gif create mode 100644 examples/ext/resources/images/aero/tabs/tab-btm-right-bg.gif create mode 100644 examples/ext/resources/images/aero/tabs/tab-sprite.gif create mode 100644 examples/ext/resources/images/aero/tabs/tab-strip-bg.gif create mode 100644 examples/ext/resources/images/aero/tabs/tab-strip-bg.png create mode 100644 examples/ext/resources/images/aero/tabs/tab-strip-btm-bg.gif create mode 100644 examples/ext/resources/images/aero/toolbar/bg.gif create mode 100644 examples/ext/resources/images/aero/toolbar/tb-btn-sprite.gif create mode 100644 examples/ext/resources/images/default/basic-dialog/btn-arrow.gif create mode 100644 examples/ext/resources/images/default/basic-dialog/btn-sprite.gif create mode 100644 examples/ext/resources/images/default/basic-dialog/close.gif create mode 100644 examples/ext/resources/images/default/basic-dialog/collapse.gif create mode 100644 examples/ext/resources/images/default/basic-dialog/e-handle.gif create mode 100644 examples/ext/resources/images/default/basic-dialog/expand.gif create mode 100644 examples/ext/resources/images/default/basic-dialog/hd-sprite.gif create mode 100644 examples/ext/resources/images/default/basic-dialog/progress.gif create mode 100644 examples/ext/resources/images/default/basic-dialog/progress2.gif create mode 100644 examples/ext/resources/images/default/basic-dialog/s-handle.gif create mode 100644 examples/ext/resources/images/default/basic-dialog/se-handle.gif create mode 100644 examples/ext/resources/images/default/box/corners-blue.gif create mode 100644 examples/ext/resources/images/default/box/corners.gif create mode 100644 examples/ext/resources/images/default/box/l-blue.gif create mode 100644 examples/ext/resources/images/default/box/l.gif create mode 100644 examples/ext/resources/images/default/box/r-blue.gif create mode 100644 examples/ext/resources/images/default/box/r.gif create mode 100644 examples/ext/resources/images/default/box/tb-blue.gif create mode 100644 examples/ext/resources/images/default/box/tb.gif create mode 100644 examples/ext/resources/images/default/dd/drop-add.gif create mode 100644 examples/ext/resources/images/default/dd/drop-no.gif create mode 100644 examples/ext/resources/images/default/dd/drop-yes.gif create mode 100644 examples/ext/resources/images/default/editor/tb-sprite.gif create mode 100644 examples/ext/resources/images/default/form/clear-trigger.gif create mode 100644 examples/ext/resources/images/default/form/clear-trigger.psd create mode 100644 examples/ext/resources/images/default/form/date-trigger.gif create mode 100644 examples/ext/resources/images/default/form/date-trigger.psd create mode 100644 examples/ext/resources/images/default/form/error-tip-corners.gif create mode 100644 examples/ext/resources/images/default/form/exclamation.gif create mode 100644 examples/ext/resources/images/default/form/search-trigger.gif create mode 100644 examples/ext/resources/images/default/form/search-trigger.psd create mode 100644 examples/ext/resources/images/default/form/text-bg.gif create mode 100644 examples/ext/resources/images/default/form/trigger-tpl.gif create mode 100644 examples/ext/resources/images/default/form/trigger.gif create mode 100644 examples/ext/resources/images/default/form/trigger.psd create mode 100644 examples/ext/resources/images/default/gradient-bg.gif create mode 100644 examples/ext/resources/images/default/grid/Thumbs.db create mode 100644 examples/ext/resources/images/default/grid/arrow-left-white.gif create mode 100644 examples/ext/resources/images/default/grid/arrow-right-white.gif create mode 100644 examples/ext/resources/images/default/grid/col-move-bottom.gif create mode 100644 examples/ext/resources/images/default/grid/col-move-top.gif create mode 100644 examples/ext/resources/images/default/grid/dirty.gif create mode 100644 examples/ext/resources/images/default/grid/done.gif create mode 100644 examples/ext/resources/images/default/grid/drop-no.gif create mode 100644 examples/ext/resources/images/default/grid/drop-yes.gif create mode 100644 examples/ext/resources/images/default/grid/footer-bg.gif create mode 100644 examples/ext/resources/images/default/grid/grid-blue-hd.gif create mode 100644 examples/ext/resources/images/default/grid/grid-blue-split.gif create mode 100644 examples/ext/resources/images/default/grid/grid-hrow.gif create mode 100644 examples/ext/resources/images/default/grid/grid-loading.gif create mode 100644 examples/ext/resources/images/default/grid/grid-split.gif create mode 100644 examples/ext/resources/images/default/grid/grid-vista-hd.gif create mode 100644 examples/ext/resources/images/default/grid/grid3-hd-btn.gif create mode 100644 examples/ext/resources/images/default/grid/grid3-hrow-over.gif create mode 100644 examples/ext/resources/images/default/grid/grid3-hrow.gif create mode 100644 examples/ext/resources/images/default/grid/grid3-special-col-bg.gif create mode 100644 examples/ext/resources/images/default/grid/grid3-special-col-sel-bg.gif create mode 100644 examples/ext/resources/images/default/grid/hd-pop.gif create mode 100644 examples/ext/resources/images/default/grid/hmenu-asc.gif create mode 100644 examples/ext/resources/images/default/grid/hmenu-desc.gif create mode 100644 examples/ext/resources/images/default/grid/hmenu-lock.gif create mode 100644 examples/ext/resources/images/default/grid/hmenu-lock.png create mode 100644 examples/ext/resources/images/default/grid/hmenu-unlock.gif create mode 100644 examples/ext/resources/images/default/grid/hmenu-unlock.png create mode 100644 examples/ext/resources/images/default/grid/invalid_line.gif create mode 100644 examples/ext/resources/images/default/grid/loading.gif create mode 100644 examples/ext/resources/images/default/grid/mso-hd.gif create mode 100644 examples/ext/resources/images/default/grid/nowait.gif create mode 100644 examples/ext/resources/images/default/grid/page-first-disabled.gif create mode 100644 examples/ext/resources/images/default/grid/page-first.gif create mode 100644 examples/ext/resources/images/default/grid/page-last-disabled.gif create mode 100644 examples/ext/resources/images/default/grid/page-last.gif create mode 100644 examples/ext/resources/images/default/grid/page-next-disabled.gif create mode 100644 examples/ext/resources/images/default/grid/page-next.gif create mode 100644 examples/ext/resources/images/default/grid/page-prev-disabled.gif create mode 100644 examples/ext/resources/images/default/grid/page-prev.gif create mode 100644 examples/ext/resources/images/default/grid/pick-button.gif create mode 100644 examples/ext/resources/images/default/grid/refresh.gif create mode 100644 examples/ext/resources/images/default/grid/row-check-sprite.gif create mode 100644 examples/ext/resources/images/default/grid/row-expand-sprite.gif create mode 100644 examples/ext/resources/images/default/grid/row-over.gif create mode 100644 examples/ext/resources/images/default/grid/row-sel.gif create mode 100644 examples/ext/resources/images/default/grid/sort_asc.gif create mode 100644 examples/ext/resources/images/default/grid/sort_desc.gif create mode 100644 examples/ext/resources/images/default/grid/wait.gif create mode 100644 examples/ext/resources/images/default/layout/collapse.gif create mode 100644 examples/ext/resources/images/default/layout/expand.gif create mode 100644 examples/ext/resources/images/default/layout/gradient-bg.gif create mode 100644 examples/ext/resources/images/default/layout/ns-collapse.gif create mode 100644 examples/ext/resources/images/default/layout/ns-expand.gif create mode 100644 examples/ext/resources/images/default/layout/panel-close.gif create mode 100644 examples/ext/resources/images/default/layout/panel-title-bg.gif create mode 100644 examples/ext/resources/images/default/layout/panel-title-light-bg.gif create mode 100644 examples/ext/resources/images/default/layout/stick.gif create mode 100644 examples/ext/resources/images/default/layout/stuck.gif create mode 100644 examples/ext/resources/images/default/layout/tab-close-on.gif create mode 100644 examples/ext/resources/images/default/layout/tab-close.gif create mode 100644 examples/ext/resources/images/default/menu/checked.gif create mode 100644 examples/ext/resources/images/default/menu/group-checked.gif create mode 100644 examples/ext/resources/images/default/menu/menu-parent.gif create mode 100644 examples/ext/resources/images/default/menu/menu.gif create mode 100644 examples/ext/resources/images/default/menu/unchecked.gif create mode 100644 examples/ext/resources/images/default/panel/tool-sprites.gif create mode 100644 examples/ext/resources/images/default/qtip/bg.gif create mode 100644 examples/ext/resources/images/default/qtip/close.gif create mode 100644 examples/ext/resources/images/default/qtip/tip-sprite.gif create mode 100644 examples/ext/resources/images/default/s.gif create mode 100644 examples/ext/resources/images/default/shadow-c.png create mode 100644 examples/ext/resources/images/default/shadow-lr.png create mode 100644 examples/ext/resources/images/default/shadow.png create mode 100644 examples/ext/resources/images/default/shared/calendar.gif create mode 100644 examples/ext/resources/images/default/shared/glass-bg.gif create mode 100644 examples/ext/resources/images/default/shared/left-btn.gif create mode 100644 examples/ext/resources/images/default/shared/right-btn.gif create mode 100644 examples/ext/resources/images/default/shared/warning.gif create mode 100644 examples/ext/resources/images/default/sizer/e-handle-dark.gif create mode 100644 examples/ext/resources/images/default/sizer/e-handle.gif create mode 100644 examples/ext/resources/images/default/sizer/ne-handle-dark.gif create mode 100644 examples/ext/resources/images/default/sizer/ne-handle.gif create mode 100644 examples/ext/resources/images/default/sizer/nw-handle-dark.gif create mode 100644 examples/ext/resources/images/default/sizer/nw-handle.gif create mode 100644 examples/ext/resources/images/default/sizer/s-handle-dark.gif create mode 100644 examples/ext/resources/images/default/sizer/s-handle.gif create mode 100644 examples/ext/resources/images/default/sizer/se-handle-dark.gif create mode 100644 examples/ext/resources/images/default/sizer/se-handle.gif create mode 100644 examples/ext/resources/images/default/sizer/square.gif create mode 100644 examples/ext/resources/images/default/sizer/sw-handle-dark.gif create mode 100644 examples/ext/resources/images/default/sizer/sw-handle.gif create mode 100644 examples/ext/resources/images/default/tabs/tab-btm-inactive-left-bg.gif create mode 100644 examples/ext/resources/images/default/tabs/tab-btm-inactive-right-bg.gif create mode 100644 examples/ext/resources/images/default/tabs/tab-btm-left-bg.gif create mode 100644 examples/ext/resources/images/default/tabs/tab-btm-right-bg.gif create mode 100644 examples/ext/resources/images/default/tabs/tab-sprite.gif create mode 100644 examples/ext/resources/images/default/toolbar/btn-arrow-light.gif create mode 100644 examples/ext/resources/images/default/toolbar/btn-arrow.gif create mode 100644 examples/ext/resources/images/default/toolbar/btn-over-bg.gif create mode 100644 examples/ext/resources/images/default/toolbar/gray-bg.gif create mode 100644 examples/ext/resources/images/default/toolbar/tb-bg.gif create mode 100644 examples/ext/resources/images/default/toolbar/tb-btn-sprite.gif create mode 100644 examples/ext/resources/images/default/tree/drop-add.gif create mode 100644 examples/ext/resources/images/default/tree/drop-between.gif create mode 100644 examples/ext/resources/images/default/tree/drop-no.gif create mode 100644 examples/ext/resources/images/default/tree/drop-over.gif create mode 100644 examples/ext/resources/images/default/tree/drop-under.gif create mode 100644 examples/ext/resources/images/default/tree/drop-yes.gif create mode 100644 examples/ext/resources/images/default/tree/elbow-end-minus-nl.gif create mode 100644 examples/ext/resources/images/default/tree/elbow-end-minus.gif create mode 100644 examples/ext/resources/images/default/tree/elbow-end-plus-nl.gif create mode 100644 examples/ext/resources/images/default/tree/elbow-end-plus.gif create mode 100644 examples/ext/resources/images/default/tree/elbow-end.gif create mode 100644 examples/ext/resources/images/default/tree/elbow-line.gif create mode 100644 examples/ext/resources/images/default/tree/elbow-minus-nl.gif create mode 100644 examples/ext/resources/images/default/tree/elbow-minus.gif create mode 100644 examples/ext/resources/images/default/tree/elbow-plus-nl.gif create mode 100644 examples/ext/resources/images/default/tree/elbow-plus.gif create mode 100644 examples/ext/resources/images/default/tree/elbow.gif create mode 100644 examples/ext/resources/images/default/tree/folder-open.gif create mode 100644 examples/ext/resources/images/default/tree/folder.gif create mode 100644 examples/ext/resources/images/default/tree/leaf.gif create mode 100644 examples/ext/resources/images/default/tree/loading.gif create mode 100644 examples/ext/resources/images/default/tree/s.gif create mode 100644 examples/ext/resources/images/gray/basic-dialog/close.gif create mode 100644 examples/ext/resources/images/gray/basic-dialog/collapse.gif create mode 100644 examples/ext/resources/images/gray/basic-dialog/dlg-bg.gif create mode 100644 examples/ext/resources/images/gray/basic-dialog/e-handle.gif create mode 100644 examples/ext/resources/images/gray/basic-dialog/expand.gif create mode 100644 examples/ext/resources/images/gray/basic-dialog/hd-sprite.gif create mode 100644 examples/ext/resources/images/gray/basic-dialog/s-handle.gif create mode 100644 examples/ext/resources/images/gray/basic-dialog/se-handle.gif create mode 100644 examples/ext/resources/images/gray/gradient-bg.gif create mode 100644 examples/ext/resources/images/gray/grid/grid-hrow.gif create mode 100644 examples/ext/resources/images/gray/layout/collapse.gif create mode 100644 examples/ext/resources/images/gray/layout/expand.gif create mode 100644 examples/ext/resources/images/gray/layout/gradient-bg.gif create mode 100644 examples/ext/resources/images/gray/layout/ns-collapse.gif create mode 100644 examples/ext/resources/images/gray/layout/ns-expand.gif create mode 100644 examples/ext/resources/images/gray/layout/panel-close.gif create mode 100644 examples/ext/resources/images/gray/layout/panel-title-bg.gif create mode 100644 examples/ext/resources/images/gray/layout/panel-title-light-bg.gif create mode 100644 examples/ext/resources/images/gray/layout/stick.gif create mode 100644 examples/ext/resources/images/gray/layout/tab-close-on.gif create mode 100644 examples/ext/resources/images/gray/layout/tab-close.gif create mode 100644 examples/ext/resources/images/gray/menu/checked.gif create mode 100644 examples/ext/resources/images/gray/menu/group-checked.gif create mode 100644 examples/ext/resources/images/gray/menu/menu-parent.gif create mode 100644 examples/ext/resources/images/gray/menu/menu.gif create mode 100644 examples/ext/resources/images/gray/menu/unchecked.gif create mode 100644 examples/ext/resources/images/gray/qtip/bg.gif create mode 100644 examples/ext/resources/images/gray/qtip/tip-sprite.gif create mode 100644 examples/ext/resources/images/gray/s.gif create mode 100644 examples/ext/resources/images/gray/sizer/e-handle-dark.gif create mode 100644 examples/ext/resources/images/gray/sizer/e-handle.gif create mode 100644 examples/ext/resources/images/gray/sizer/ne-handle-dark.gif create mode 100644 examples/ext/resources/images/gray/sizer/ne-handle.gif create mode 100644 examples/ext/resources/images/gray/sizer/nw-handle-dark.gif create mode 100644 examples/ext/resources/images/gray/sizer/nw-handle.gif create mode 100644 examples/ext/resources/images/gray/sizer/s-handle-dark.gif create mode 100644 examples/ext/resources/images/gray/sizer/s-handle.gif create mode 100644 examples/ext/resources/images/gray/sizer/se-handle-dark.gif create mode 100644 examples/ext/resources/images/gray/sizer/se-handle.gif create mode 100644 examples/ext/resources/images/gray/sizer/sw-handle-dark.gif create mode 100644 examples/ext/resources/images/gray/sizer/sw-handle.gif create mode 100644 examples/ext/resources/images/gray/tabs/tab-btm-inactive-left-bg.gif create mode 100644 examples/ext/resources/images/gray/tabs/tab-btm-inactive-right-bg.gif create mode 100644 examples/ext/resources/images/gray/tabs/tab-btm-left-bg.gif create mode 100644 examples/ext/resources/images/gray/tabs/tab-btm-right-bg.gif create mode 100644 examples/ext/resources/images/gray/tabs/tab-sprite.gif create mode 100644 examples/ext/resources/images/gray/toolbar/gray-bg.gif create mode 100644 examples/ext/resources/images/gray/toolbar/tb-btn-sprite.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/bg-center.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/bg-left.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/bg-right.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/close.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/collapse.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/dlg-bg.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/e-handle.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/expand.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/hd-sprite.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/s-handle.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/se-handle.gif create mode 100644 examples/ext/resources/images/vista/basic-dialog/w-handle.gif create mode 100644 examples/ext/resources/images/vista/gradient-bg.gif create mode 100644 examples/ext/resources/images/vista/grid/grid-split.gif create mode 100644 examples/ext/resources/images/vista/grid/grid-vista-hd.gif create mode 100644 examples/ext/resources/images/vista/layout/collapse.gif create mode 100644 examples/ext/resources/images/vista/layout/expand.gif create mode 100644 examples/ext/resources/images/vista/layout/gradient-bg.gif create mode 100644 examples/ext/resources/images/vista/layout/ns-collapse.gif create mode 100644 examples/ext/resources/images/vista/layout/ns-expand.gif create mode 100644 examples/ext/resources/images/vista/layout/panel-close.gif create mode 100644 examples/ext/resources/images/vista/layout/panel-title-bg.gif create mode 100644 examples/ext/resources/images/vista/layout/panel-title-light-bg.gif create mode 100644 examples/ext/resources/images/vista/layout/stick.gif create mode 100644 examples/ext/resources/images/vista/layout/tab-close-on.gif create mode 100644 examples/ext/resources/images/vista/layout/tab-close.gif create mode 100644 examples/ext/resources/images/vista/qtip/bg.gif create mode 100644 examples/ext/resources/images/vista/qtip/tip-sprite.gif create mode 100644 examples/ext/resources/images/vista/s.gif create mode 100644 examples/ext/resources/images/vista/sizer/e-handle-dark.gif create mode 100644 examples/ext/resources/images/vista/sizer/e-handle.gif create mode 100644 examples/ext/resources/images/vista/sizer/ne-handle-dark.gif create mode 100644 examples/ext/resources/images/vista/sizer/ne-handle.gif create mode 100644 examples/ext/resources/images/vista/sizer/nw-handle-dark.gif create mode 100644 examples/ext/resources/images/vista/sizer/nw-handle.gif create mode 100644 examples/ext/resources/images/vista/sizer/s-handle-dark.gif create mode 100644 examples/ext/resources/images/vista/sizer/s-handle.gif create mode 100644 examples/ext/resources/images/vista/sizer/se-handle-dark.gif create mode 100644 examples/ext/resources/images/vista/sizer/se-handle.gif create mode 100644 examples/ext/resources/images/vista/sizer/sw-handle-dark.gif create mode 100644 examples/ext/resources/images/vista/sizer/sw-handle.gif create mode 100644 examples/ext/resources/images/vista/tabs/tab-btm-inactive-left-bg.gif create mode 100644 examples/ext/resources/images/vista/tabs/tab-btm-inactive-right-bg.gif create mode 100644 examples/ext/resources/images/vista/tabs/tab-btm-left-bg.gif create mode 100644 examples/ext/resources/images/vista/tabs/tab-btm-right-bg.gif create mode 100644 examples/ext/resources/images/vista/tabs/tab-sprite.gif create mode 100644 examples/ext/resources/images/vista/toolbar/gray-bg.gif create mode 100644 examples/ext/resources/images/vista/toolbar/tb-btn-sprite.gif create mode 100644 examples/ext/resources/license.txt create mode 100644 examples/ext/resources/raw-images/shadow.psd create mode 100644 examples/ext/resources/resources.jsb diff --git a/examples/ext/ext-all-debug.js b/examples/ext/ext-all-debug.js new file mode 100644 index 0000000..28c30e2 --- /dev/null +++ b/examples/ext/ext-all-debug.js @@ -0,0 +1,30217 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + + +Ext.DomHelper = function(){ + var tempTableEl = null; + var emptyTags = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i; + var tableRe = /^table|tbody|tr|td$/i; + + + + var createHtml = function(o){ + if(typeof o == 'string'){ + return o; + } + var b = ""; + if(!o.tag){ + o.tag = "div"; + } + b += "<" + o.tag; + for(var attr in o){ + if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || typeof o[attr] == "function") continue; + if(attr == "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 key in s){ + if(typeof s[key] != "function"){ + b += key + ":" + s[key] + ";"; + } + } + b += '"'; + } + }else{ + if(attr == "cls"){ + b += ' class="' + o["cls"] + '"'; + }else if(attr == "htmlFor"){ + b += ' for="' + o["htmlFor"] + '"'; + }else{ + b += " " + attr + '="' + o[attr] + '"'; + } + } + } + if(emptyTags.test(o.tag)){ + b += "/>"; + }else{ + b += ">"; + var cn = o.children || o.cn; + if(cn){ + if(cn instanceof Array){ + for(var i = 0, len = cn.length; i < len; i++) { + b += createHtml(cn[i], b); + } + }else{ + b += createHtml(cn, b); + } + } + if(o.html){ + b += o.html; + } + b += ""; + } + return b; + }; + + + + var createDom = function(o, parentNode){ + var el = document.createElement(o.tag||'div'); + var useSet = el.setAttribute ? true : false; + for(var attr in o){ + if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || attr == "style" || typeof o[attr] == "function") continue; + if(attr=="cls"){ + el.className = o["cls"]; + }else{ + if(useSet) el.setAttribute(attr, o[attr]); + else el[attr] = o[attr]; + } + } + 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++) { + createDom(cn[i], el); + } + }else{ + createDom(cn, el); + } + } + if(o.html){ + el.innerHTML = o.html; + } + if(parentNode){ + parentNode.appendChild(el); + } + return el; + }; + + var ieTable = function(depth, s, h, e){ + tempTableEl.innerHTML = [s, h, e].join(''); + var i = -1, el = tempTableEl; + while(++i < depth){ + el = el.firstChild; + } + return el; + }; + + + var ts = '', + te = '
', + tbs = ts+'', + tbe = ''+te, + trs = tbs + '', + tre = ''+tbe; + + + var insertIntoTable = function(tag, where, el, html){ + if(!tempTableEl){ + tempTableEl = document.createElement('div'); + } + var node; + var before = null; + if(tag == 'td'){ + if(where == 'afterbegin' || where == 'beforeend'){ + return; + } + if(where == 'beforebegin'){ + before = el; + el = el.parentNode; + } else{ + before = el.nextSibling; + el = el.parentNode; + } + node = ieTable(4, trs, html, tre); + } + else if(tag == 'tr'){ + if(where == 'beforebegin'){ + before = el; + el = el.parentNode; + node = ieTable(3, tbs, html, tbe); + } else if(where == 'afterend'){ + before = el.nextSibling; + el = el.parentNode; + node = ieTable(3, tbs, html, tbe); + } else{ + if(where == 'afterbegin'){ + before = el.firstChild; + } + node = ieTable(4, trs, html, tre); + } + } else if(tag == 'tbody'){ + if(where == 'beforebegin'){ + before = el; + el = el.parentNode; + node = ieTable(2, ts, html, te); + } else if(where == 'afterend'){ + before = el.nextSibling; + el = el.parentNode; + node = ieTable(2, ts, html, te); + } else{ + if(where == 'afterbegin'){ + before = el.firstChild; + } + node = ieTable(3, tbs, html, tbe); + } + } else{ + if(where == 'beforebegin' || where == 'afterend'){ + return; + } + if(where == 'afterbegin'){ + before = el.firstChild; + } + node = ieTable(2, ts, html, te); + } + el.insertBefore(node, before); + return node; + }; + + return { + + useDom : false, + + + markup : function(o){ + return createHtml(o); + }, + + + applyStyles : function(el, styles){ + if(styles){ + el = Ext.fly(el); + if(typeof styles == "string"){ + var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi; + var matches; + while ((matches = re.exec(styles)) != null){ + el.setStyle(matches[1], matches[2]); + } + }else if (typeof styles == "object"){ + for (var style in styles){ + el.setStyle(style, styles[style]); + } + }else if (typeof styles == "function"){ + Ext.DomHelper.applyStyles(el, styles.call()); + } + } + }, + + + insertHtml : function(where, el, html){ + where = where.toLowerCase(); + if(el.insertAdjacentHTML){ + if(tableRe.test(el.tagName)){ + var rs; + if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){ + return rs; + } + } + switch(where){ + case "beforebegin": + el.insertAdjacentHTML('BeforeBegin', html); + return el.previousSibling; + case "afterbegin": + el.insertAdjacentHTML('AfterBegin', html); + return el.firstChild; + case "beforeend": + el.insertAdjacentHTML('BeforeEnd', html); + return el.lastChild; + case "afterend": + el.insertAdjacentHTML('AfterEnd', html); + return el.nextSibling; + } + throw 'Illegal insertion point -> "' + where + '"'; + } + var range = el.ownerDocument.createRange(); + var frag; + switch(where){ + case "beforebegin": + range.setStartBefore(el); + frag = range.createContextualFragment(html); + el.parentNode.insertBefore(frag, el); + return el.previousSibling; + case "afterbegin": + if(el.firstChild){ + range.setStartBefore(el.firstChild); + frag = range.createContextualFragment(html); + el.insertBefore(frag, el.firstChild); + return el.firstChild; + }else{ + el.innerHTML = html; + return el.firstChild; + } + case "beforeend": + if(el.lastChild){ + range.setStartAfter(el.lastChild); + frag = range.createContextualFragment(html); + el.appendChild(frag); + return el.lastChild; + }else{ + el.innerHTML = html; + return el.lastChild; + } + case "afterend": + range.setStartAfter(el); + frag = range.createContextualFragment(html); + el.parentNode.insertBefore(frag, el.nextSibling); + return el.nextSibling; + } + throw 'Illegal insertion point -> "' + where + '"'; + }, + + + insertBefore : function(el, o, returnElement){ + return this.doInsert(el, o, returnElement, "beforeBegin"); + }, + + + insertAfter : function(el, o, returnElement){ + return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling"); + }, + + + insertFirst : function(el, o, returnElement){ + return this.doInsert(el, o, returnElement, "afterBegin"); + }, + + + doInsert : function(el, o, returnElement, pos, sibling){ + el = Ext.getDom(el); + var newNode; + if(this.useDom){ + newNode = createDom(o, null); + el.parentNode.insertBefore(newNode, sibling ? el[sibling] : el); + }else{ + var html = createHtml(o); + newNode = this.insertHtml(pos, el, html); + } + return returnElement ? Ext.get(newNode, true) : newNode; + }, + + + append : function(el, o, returnElement){ + el = Ext.getDom(el); + var newNode; + if(this.useDom){ + newNode = createDom(o, null); + el.appendChild(newNode); + }else{ + var html = createHtml(o); + newNode = this.insertHtml("beforeEnd", el, html); + } + return returnElement ? Ext.get(newNode, true) : newNode; + }, + + + overwrite : function(el, o, returnElement){ + el = Ext.getDom(el); + el.innerHTML = createHtml(o); + return returnElement ? Ext.get(el.firstChild, true) : el.firstChild; + }, + + + createTemplate : function(o){ + var html = createHtml(o); + return new Ext.Template(html); + } + }; +}(); + + +Ext.Template = function(html){ + if(html instanceof Array){ + html = html.join(""); + }else if(arguments.length > 1){ + html = Array.prototype.join.call(arguments, ""); + } + + this.html = html; + +}; +Ext.Template.prototype = { + + applyTemplate : function(values){ + if(this.compiled){ + return this.compiled(values); + } + var useF = this.disableFormats !== true; + var fm = Ext.util.Format, tpl = this; + var fn = function(m, name, format, args){ + if(format && useF){ + if(format.substr(0, 5) == "this."){ + return tpl.call(format.substr(5), values[name], values); + }else{ + if(args){ + + + + var re = /^\s*['"](.*)["']\s*$/; + args = args.split(','); + for(var i = 0, len = args.length; i < len; i++){ + args[i] = args[i].replace(re, "$1"); + } + args = [values[name]].concat(args); + }else{ + args = [values[name]]; + } + return fm[format].apply(fm, args); + } + }else{ + return values[name] !== undefined ? values[name] : ""; + } + }; + return this.html.replace(this.re, fn); + }, + + + set : function(html, compile){ + this.html = html; + this.compiled = null; + if(compile){ + this.compile(); + } + return this; + }, + + + disableFormats : false, + + + re : /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, + + + compile : function(){ + var fm = Ext.util.Format; + var useF = this.disableFormats !== true; + var sep = Ext.isGecko ? "+" : ","; + var fn = function(m, name, format, args){ + if(format && useF){ + args = args ? ',' + args : ""; + if(format.substr(0, 5) != "this."){ + format = "fm." + format + '('; + }else{ + format = 'this.call("'+ format.substr(5) + '", '; + args = ", values"; + } + }else{ + args= ''; format = "(values['" + name + "'] == undefined ? '' : "; + } + return "'"+ sep + format + "values['" + name + "']" + args + ")"+sep+"'"; + }; + var body; + + if(Ext.isGecko){ + body = "this.compiled = function(values){ return '" + + this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn) + + "';};"; + }else{ + body = ["this.compiled = function(values){ return ['"]; + body.push(this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn)); + body.push("'].join('');};"); + body = body.join(''); + } + eval(body); + return this; + }, + + + call : function(fnName, value, allValues){ + return this[fnName](value, allValues); + }, + + + insertFirst: function(el, values, returnElement){ + return this.doInsert('afterBegin', el, values, returnElement); + }, + + + insertBefore: function(el, values, returnElement){ + return this.doInsert('beforeBegin', el, values, returnElement); + }, + + + insertAfter : function(el, values, returnElement){ + return this.doInsert('afterEnd', el, values, returnElement); + }, + + + append : function(el, values, returnElement){ + return this.doInsert('beforeEnd', el, values, returnElement); + }, + + doInsert : function(where, el, values, returnEl){ + el = Ext.getDom(el); + var newNode = Ext.DomHelper.insertHtml(where, el, this.applyTemplate(values)); + return returnEl ? Ext.get(newNode, true) : newNode; + }, + + + overwrite : function(el, values, returnElement){ + el = Ext.getDom(el); + el.innerHTML = this.applyTemplate(values); + return returnElement ? 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.DomQuery = function(){ + var cache = {}, simpleCache = {}, valueCache = {}; + var nonSpace = /\S/; + var trimRe = /^\s+|\s+$/g; + var tplRe = /\{(\d+)\}/g; + var modeRe = /^(\s?[\/>+~]\s?|\s|$)/; + var tagTokenRe = /^(#)?([\w-\*]+)/; + var nthRe = /(\d*)n\+?(\d*)/, nthRe2 = /\D/; + + function child(p, index){ + var i = 0; + var n = p.firstChild; + while(n){ + if(n.nodeType == 1){ + if(++i == index){ + 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 children(d){ + var n = d.firstChild, ni = -1; + while(n){ + var nx = n.nextSibling; + if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){ + d.removeChild(n); + }else{ + n.nodeIndex = ++ni; + } + n = nx; + } + return this; + }; + + function byClassName(c, a, v){ + if(!v){ + return c; + } + var r = [], ri = -1, cn; + for(var i = 0, ci; ci = c[i]; i++){ + if((' '+ci.className+' ').indexOf(v) != -1){ + r[++ri] = ci; + } + } + return r; + }; + + function attrValue(n, attr){ + if(!n.tagName && typeof n.length != "undefined"){ + n = n[0]; + } + if(!n){ + return null; + } + if(attr == "for"){ + return n.htmlFor; + } + if(attr == "class" || attr == "className"){ + return n.className; + } + return n.getAttribute(attr) || n[attr]; + + }; + + function getNodes(ns, mode, tagName){ + var result = [], ri = -1, cs; + if(!ns){ + return result; + } + tagName = tagName || "*"; + if(typeof ns.getElementsByTagName != "undefined"){ + ns = [ns]; + } + if(!mode){ + for(var i = 0, ni; ni = ns[i]; i++){ + cs = ni.getElementsByTagName(tagName); + for(var j = 0, ci; ci = cs[j]; j++){ + result[++ri] = ci; + } + } + }else if(mode == "/" || mode == ">"){ + var utag = tagName.toUpperCase(); + for(var i = 0, ni, cn; ni = ns[i]; i++){ + cn = ni.children || ni.childNodes; + for(var j = 0, cj; cj = cn[j]; j++){ + if(cj.nodeName == utag || cj.nodeName == tagName || tagName == '*'){ + result[++ri] = cj; + } + } + } + }else if(mode == "+"){ + var utag = tagName.toUpperCase(); + for(var i = 0, n; n = ns[i]; i++){ + while((n = n.nextSibling) && n.nodeType != 1); + if(n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')){ + result[++ri] = n; + } + } + }else if(mode == "~"){ + for(var i = 0, n; n = ns[i]; i++){ + while((n = n.nextSibling) && (n.nodeType != 1 || (tagName == '*' || n.tagName.toLowerCase()!=tagName))); + if(n){ + result[++ri] = n; + } + } + } + return result; + }; + + 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, tagName){ + if(cs.tagName || cs == document){ + cs = [cs]; + } + if(!tagName){ + return cs; + } + var r = [], ri = -1; + tagName = tagName.toLowerCase(); + for(var i = 0, ci; ci = cs[i]; i++){ + if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){ + r[++ri] = ci; + } + } + return r; + }; + + function byId(cs, attr, id){ + if(cs.tagName || cs == document){ + cs = [cs]; + } + if(!id){ + return cs; + } + var r = [], ri = -1; + for(var i = 0,ci; ci = cs[i]; i++){ + if(ci && ci.id == id){ + r[++ri] = ci; + return r; + } + } + return r; + }; + + function byAttribute(cs, attr, value, op, custom){ + var r = [], ri = -1, st = custom=="{"; + var f = Ext.DomQuery.operators[op]; + for(var i = 0, ci; ci = cs[i]; i++){ + var a; + if(st){ + a = Ext.DomQuery.getStyle(ci, attr); + } + else if(attr == "class" || attr == "className"){ + a = ci.className; + }else if(attr == "for"){ + a = ci.htmlFor; + }else if(attr == "href"){ + a = ci.getAttribute("href", 2); + }else{ + a = ci.getAttribute(attr); + } + if((f && f(a, value)) || (!f && a)){ + r[++ri] = ci; + } + } + return r; + }; + + function byPseudo(cs, name, value){ + return Ext.DomQuery.pseudos[name](cs, value); + }; + + + + + var isIE = window.ActiveXObject ? true : false; + + + + eval("var batch = 30803;"); + + 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, ri = -1; + if(!len || typeof cs.nodeType != "undefined" || len == 1){ + return cs; + } + if(isIE && 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[++ri] = cs[j]; + } + for(j = i+1; cj = cs[j]; j++){ + if(cj._nodup != d){ + cj._nodup = d; + r[++ri] = 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 len1 = c1.length; + if(!len1){ + return c2; + } + if(isIE && c1[0].selectSingleNode){ + return quickDiffIEXml(c1, c2); + } + var d = ++key; + for(var i = 0; i < len1; 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, mode, root, id){ + if(ns == root){ + var d = root.ownerDocument || root; + return d.getElementById(id); + } + ns = getNodes(ns, mode, "*"); + return byId(ns, null, id); + } + + return { + getStyle : function(el, name){ + return Ext.fly(el).getStyle(name); + }, + + compile : function(path, type){ + type = type || "select"; + + var fn = ["var f = function(root){\n var mode; ++batch; var n = root || document;\n"]; + var q = path, mode, lq; + var tk = Ext.DomQuery.matchers; + var tklen = tk.length; + var mm; + + + var lmode = q.match(modeRe); + if(lmode && lmode[1]){ + fn[fn.length] = 'mode="'+lmode[1].replace(trimRe, "")+'";'; + q = q.replace(lmode[1], ""); + } + + while(path.substr(0, 1)=="/"){ + path = path.substr(1); + } + + while(q && lq != q){ + lq = q; + var tm = q.match(tagTokenRe); + if(type == "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(modeRe))){ + var matched = false; + for(var j = 0; j < tklen; j++){ + var t = tk[j]; + var m = q.match(t.re); + if(m){ + fn[fn.length] = t.select.replace(tplRe, function(x, i){ + return m[i]; + }); + q = q.replace(m[0], ""); + matched = true; + break; + } + } + + if(!matched){ + throw 'Error parsing selector, parsing failed at "' + q + '"'; + } + } + if(mm[1]){ + fn[fn.length] = 'mode="'+mm[1].replace(trimRe, "")+'";'; + q = q.replace(mm[1], ""); + } + } + fn[fn.length] = "return nodup(n);\n}"; + eval(fn.join("")); + return f; + }, + + + select : function(path, root, type){ + if(!root || root == document){ + root = document; + } + if(typeof root == "string"){ + root = document.getElementById(root); + } + var paths = path.split(","); + var results = []; + for(var i = 0, len = paths.length; i < len; i++){ + var p = paths[i].replace(trimRe, ""); + if(!cache[p]){ + cache[p] = Ext.DomQuery.compile(p); + if(!cache[p]){ + throw p + " is not a valid selector"; + } + } + var result = cache[p](root); + if(result && result != document){ + results = results.concat(result); + } + } + if(paths.length > 1){ + return nodup(results); + } + return results; + }, + + + selectNode : function(path, root){ + return Ext.DomQuery.select(path, root)[0]; + }, + + + selectValue : function(path, root, defaultValue){ + path = path.replace(trimRe, ""); + if(!valueCache[path]){ + valueCache[path] = Ext.DomQuery.compile(path, "select"); + } + var n = valueCache[path](root); + n = n[0] ? n[0] : n; + var v = (n && n.firstChild ? n.firstChild.nodeValue : null); + return ((v === null||v === undefined||v==='') ? defaultValue : v); + }, + + + selectNumber : function(path, root, defaultValue){ + var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0); + return parseFloat(v); + }, + + + is : function(el, ss){ + if(typeof el == "string"){ + el = document.getElementById(el); + } + var isArray = (el instanceof Array); + var result = Ext.DomQuery.filter(isArray ? el : [el], ss); + return isArray ? (result.length == el.length) : (result.length > 0); + }, + + + filter : function(els, ss, nonMatches){ + ss = ss.replace(trimRe, ""); + if(!simpleCache[ss]){ + simpleCache[ss] = Ext.DomQuery.compile(ss, "simple"); + } + var result = simpleCache[ss](els); + return nonMatches ? quickDiff(result, els) : result; + }, + + + 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; + }, + "|=" : function(a, v){ + return a && (a == v || a.substr(0, v.length+1) == v+'-'); + }, + "~=" : function(a, v){ + return a && (' '+a+' ').indexOf(' '+v+' ') != -1; + } + }, + + + pseudos : { + "first-child" : function(c){ + var r = [], ri = -1, n; + for(var i = 0, ci; ci = n = c[i]; i++){ + while((n = n.previousSibling) && n.nodeType != 1); + if(!n){ + r[++ri] = ci; + } + } + return r; + }, + + "last-child" : function(c){ + var r = [], ri = -1, n; + for(var i = 0, ci; ci = n = c[i]; i++){ + while((n = n.nextSibling) && n.nodeType != 1); + if(!n){ + r[++ri] = ci; + } + } + return r; + }, + + "nth-child" : function(c, a) { + var r = [], ri = -1; + var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a); + var f = (m[1] || 1) - 0, l = m[2] - 0; + for(var i = 0, n; n = c[i]; i++){ + var pn = n.parentNode; + if (batch != pn._batch) { + var j = 0; + for(var cn = pn.firstChild; cn; cn = cn.nextSibling){ + if(cn.nodeType == 1){ + cn.nodeIndex = ++j; + } + } + pn._batch = batch; + } + if (f == 1) { + if (l == 0 || n.nodeIndex == l){ + r[++ri] = n; + } + } else if ((n.nodeIndex + l) % f == 0){ + r[++ri] = n; + } + } + + return r; + }, + + "only-child" : function(c){ + var r = [], ri = -1;; + for(var i = 0, ci; ci = c[i]; i++){ + if(!prev(ci) && !next(ci)){ + r[++ri] = ci; + } + } + return r; + }, + + "empty" : function(c){ + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + var cns = ci.childNodes, j = 0, cn, empty = true; + while(cn = cns[j]){ + ++j; + if(cn.nodeType == 1 || cn.nodeType == 3){ + empty = false; + break; + } + } + if(empty){ + r[++ri] = ci; + } + } + return r; + }, + + "contains" : function(c, v){ + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + if((ci.textContent||ci.innerText||'').indexOf(v) != -1){ + r[++ri] = ci; + } + } + return r; + }, + + "nodeValue" : function(c, v){ + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + if(ci.firstChild && ci.firstChild.nodeValue == v){ + r[++ri] = ci; + } + } + return r; + }, + + "checked" : function(c){ + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + if(ci.checked == true){ + r[++ri] = 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 = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + if(s(ss, ci).length > 0){ + r[++ri] = ci; + } + } + return r; + }, + + "next" : function(c, ss){ + var is = Ext.DomQuery.is; + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + var n = next(ci); + if(n && is(n, ss)){ + r[++ri] = ci; + } + } + return r; + }, + + "prev" : function(c, ss){ + var is = Ext.DomQuery.is; + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + var n = prev(ci); + if(n && is(n, ss)){ + r[++ri] = ci; + } + } + return r; + } + } + }; +}(); + + +Ext.query = Ext.DomQuery.select; + + +Ext.util.Observable = function(){ + if(this.listeners){ + this.on(this.listeners); + delete this.listeners; + } +}; +Ext.util.Observable.prototype = { + + fireEvent : function(){ + 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(eventName, fn, scope, o){ + if(typeof eventName == "object"){ + o = eventName; + for(var e in o){ + if(this.filterOptRe.test(e)){ + continue; + } + if(typeof o[e] == "function"){ + this.addListener(e, o[e], o.scope, o); + }else{ + this.addListener(e, o[e].fn, o[e].scope, o[e]); + } + } + return; + } + o = (!o || typeof o == "boolean") ? {} : o; + eventName = eventName.toLowerCase(); + var ce = this.events[eventName] || true; + if(typeof ce == "boolean"){ + ce = new Ext.util.Event(this, eventName); + this.events[eventName] = ce; + } + ce.addListener(fn, scope, o); + }, + + + removeListener : function(eventName, fn, scope){ + var ce = this.events[eventName.toLowerCase()]; + if(typeof ce == "object"){ + ce.removeListener(fn, scope); + } + }, + + + purgeListeners : function(){ + for(var evt in this.events){ + if(typeof this.events[evt] == "object"){ + this.events[evt].clearListeners(); + } + } + }, + + relayEvents : function(o, events){ + var createHandler = function(ename){ + return function(){ + return this.fireEvent.apply(this, Ext.combine(ename, Array.prototype.slice.call(arguments, 0))); + }; + }; + for(var i = 0, len = events.length; i < len; i++){ + var ename = events[i]; + if(!this.events[ename]){ this.events[ename] = true; }; + o.on(ename, createHandler(ename), this); + } + }, + + + addEvents : function(o){ + if(!this.events){ + this.events = {}; + } + Ext.applyIf(this.events, o); + }, + + + hasListener : function(eventName){ + var e = this.events[eventName]; + 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, scope){ + o.fireEvent = o.fireEvent.createInterceptor(fn, scope); +}; + + +Ext.util.Observable.releaseCapture = function(o){ + o.fireEvent = Ext.util.Observable.prototype.fireEvent; +}; + +(function(){ + + var createBuffered = function(h, o, scope){ + var task = new Ext.util.DelayedTask(); + return function(){ + task.delay(o.buffer, h, scope, Array.prototype.slice.call(arguments, 0)); + }; + }; + + var createSingle = function(h, e, fn, scope){ + return function(){ + e.removeListener(fn, scope); + return h.apply(scope, arguments); + }; + }; + + var createDelayed = function(h, o, scope){ + return function(){ + var args = Array.prototype.slice.call(arguments, 0); + setTimeout(function(){ + h.apply(scope, args); + }, o.delay || 10); + }; + }; + + Ext.util.Event = function(obj, name){ + this.name = name; + this.obj = obj; + this.listeners = []; + }; + + Ext.util.Event.prototype = { + addListener : function(fn, scope, options){ + var o = options || {}; + scope = scope || this.obj; + if(!this.isListening(fn, scope)){ + var l = {fn: fn, scope: scope, options: o}; + var h = fn; + if(o.delay){ + h = createDelayed(h, o, scope); + } + if(o.single){ + h = createSingle(h, this, fn, scope); + } + if(o.buffer){ + h = createBuffered(h, o, scope); + } + l.fireFn = h; + if(!this.firing){ this.listeners.push(l); + }else{ + this.listeners = this.listeners.slice(0); + this.listeners.push(l); + } + } + }, + + findListener : function(fn, scope){ + scope = scope || this.obj; + var ls = this.listeners; + for(var i = 0, len = ls.length; i < len; i++){ + var l = ls[i]; + if(l.fn == fn && l.scope == scope){ + return i; + } + } + return -1; + }, + + isListening : function(fn, scope){ + return this.findListener(fn, scope) != -1; + }, + + removeListener : function(fn, scope){ + var index; + if((index = this.findListener(fn, scope)) != -1){ + if(!this.firing){ + this.listeners.splice(index, 1); + }else{ + this.listeners = this.listeners.slice(0); + this.listeners.splice(index, 1); + } + return true; + } + return false; + }, + + clearListeners : function(){ + this.listeners = []; + }, + + fire : function(){ + var ls = this.listeners, scope, len = ls.length; + if(len > 0){ + this.firing = true; + var args = Array.prototype.slice.call(arguments, 0); + for(var i = 0; i < len; i++){ + var l = ls[i]; + if(l.fireFn.apply(l.scope||this.obj||window, arguments) === false){ + this.firing = false; + return false; + } + } + this.firing = false; + } + return true; + } + }; +})(); + +Ext.EventManager = function(){ + var docReadyEvent, docReadyProcId, docReadyState = false; + var resizeEvent, resizeTask, textEvent, textSize; + var E = Ext.lib.Event; + var D = Ext.lib.Dom; + + + var fireDocReady = function(){ + if(!docReadyState){ + docReadyState = true; + Ext.isReady = true; + if(docReadyProcId){ + clearInterval(docReadyProcId); + } + if(Ext.isGecko || Ext.isOpera) { + document.removeEventListener("DOMContentLoaded", fireDocReady, false); + } + if(Ext.isIE){ + var defer = document.getElementById("ie-deferred-loader"); + if(defer){ + defer.onreadystatechange = null; + defer.parentNode.removeChild(defer); + } + } + if(docReadyEvent){ + docReadyEvent.fire(); + docReadyEvent.clearListeners(); + } + } + }; + + var initDocReady = function(){ + docReadyEvent = new Ext.util.Event(); + if(Ext.isGecko || Ext.isOpera) { + document.addEventListener("DOMContentLoaded", fireDocReady, false); + }else if(Ext.isIE){ + document.write(""); + var defer = document.getElementById("ie-deferred-loader"); + defer.onreadystatechange = function(){ + if(this.readyState == "complete"){ + fireDocReady(); + } + }; + }else if(Ext.isSafari){ + docReadyProcId = setInterval(function(){ + var rs = document.readyState; + if(rs == "complete") { + fireDocReady(); + } + }, 10); + } + + E.on(window, "load", fireDocReady); + }; + + var createBuffered = function(h, o){ + var task = new Ext.util.DelayedTask(h); + return function(e){ + + e = new Ext.EventObjectImpl(e); + task.delay(o.buffer, h, null, [e]); + }; + }; + + var createSingle = function(h, el, ename, fn){ + return function(e){ + Ext.EventManager.removeListener(el, ename, fn); + h(e); + }; + }; + + var createDelayed = function(h, o){ + return function(e){ + + e = new Ext.EventObjectImpl(e); + setTimeout(function(){ + h(e); + }, o.delay || 10); + }; + }; + + var listen = function(element, ename, opt, fn, scope){ + var o = (!opt || typeof opt == "boolean") ? {} : opt; + fn = fn || o.fn; scope = scope || o.scope; + var el = Ext.getDom(element); + if(!el){ + throw "Error listening for \"" + ename + '\". Element "' + element + '" doesn\'t exist.'; + } + 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(scope || el, e, t, o); + }; + if(o.delay){ + h = createDelayed(h, o); + } + if(o.single){ + h = createSingle(h, el, ename, fn); + } + if(o.buffer){ + h = createBuffered(h, o); + } + fn._handlers = fn._handlers || []; + fn._handlers.push([Ext.id(el), ename, h]); + + E.on(el, ename, h); + if(ename == "mousewheel" && el.addEventListener){ + el.addEventListener("DOMMouseScroll", h, false); + E.on(window, 'unload', function(){ + el.removeEventListener("DOMMouseScroll", h, false); + }); + } + if(ename == "mousedown" && el == document){ + Ext.EventManager.stoppedMouseDownEvent.addListener(h); + } + return h; + }; + + var stopListening = function(el, ename, fn){ + var id = Ext.id(el), hds = fn._handlers, hd = fn; + if(hds){ + for(var i = 0, len = hds.length; i < len; i++){ + var h = hds[i]; + if(h[0] == id && h[1] == ename){ + hd = h[2]; + hds.splice(i, 1); + break; + } + } + } + E.un(el, ename, hd); + el = Ext.getDom(el); + if(ename == "mousewheel" && el.addEventListener){ + el.removeEventListener("DOMMouseScroll", hd, false); + } + if(ename == "mousedown" && el == document){ + Ext.EventManager.stoppedMouseDownEvent.removeListener(hd); + } + }; + + var propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/; + var pub = { + + + wrap : function(fn, scope, override){ + return function(e){ + Ext.EventObject.setEvent(e); + fn.call(override ? scope || window : window, Ext.EventObject, scope); + }; + }, + + + addListener : function(element, eventName, fn, scope, options){ + if(typeof eventName == "object"){ + var o = eventName; + for(var e in o){ + if(propRe.test(e)){ + continue; + } + if(typeof o[e] == "function"){ + + listen(element, e, o, o[e], o.scope); + }else{ + + listen(element, e, o[e]); + } + } + return; + } + return listen(element, eventName, options, fn, scope); + }, + + + removeListener : function(element, eventName, fn){ + return stopListening(element, eventName, fn); + }, + + + onDocumentReady : function(fn, scope, options){ + if(docReadyState){ + docReadyEvent.addListener(fn, scope, options); + docReadyEvent.fire(); + docReadyEvent.clearListeners(); + return; + } + if(!docReadyEvent){ + initDocReady(); + } + docReadyEvent.addListener(fn, scope, options); + }, + + + onWindowResize : function(fn, scope, options){ + if(!resizeEvent){ + resizeEvent = new Ext.util.Event(); + resizeTask = new Ext.util.DelayedTask(function(){ + resizeEvent.fire(D.getViewWidth(), D.getViewHeight()); + }); + E.on(window, "resize", function(){ + if(Ext.isIE){ + resizeTask.delay(50); + }else{ + resizeEvent.fire(D.getViewWidth(), D.getViewHeight()); + } + }); + } + resizeEvent.addListener(fn, scope, options); + }, + + + onTextResize : function(fn, scope, options){ + if(!textEvent){ + textEvent = new Ext.util.Event(); + var textEl = new Ext.Element(document.createElement('div')); + textEl.dom.className = 'x-text-resize'; + textEl.dom.innerHTML = 'X'; + textEl.appendTo(document.body); + textSize = textEl.dom.offsetHeight; + setInterval(function(){ + if(textEl.dom.offsetHeight != textSize){ + textEvent.fire(textSize, textSize = textEl.dom.offsetHeight); + } + }, this.textResizeInterval); + } + textEvent.addListener(fn, scope, options); + }, + + + removeResizeListener : function(fn, scope){ + if(resizeEvent){ + resizeEvent.removeListener(fn, scope); + } + }, + + + fireResize : function(){ + if(resizeEvent){ + resizeEvent.fire(D.getViewWidth(), D.getViewHeight()); + } + }, + + ieDeferSrc : false, + + textResizeInterval : 50 + }; + + pub.on = pub.addListener; + pub.un = pub.removeListener; + + pub.stoppedMouseDownEvent = new Ext.util.Event(); + return pub; +}(); + +Ext.onReady = Ext.EventManager.onDocumentReady; + +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.isMac){ + cls.push("ext-mac"); + } + if(Ext.isLinux){ + cls.push("ext-linux"); + } + if(Ext.isBorderBox){ + cls.push('ext-border-box'); + } + if(Ext.isStrict){ + var p = bd.dom.parentNode; + if(p){ + p.className += ' ext-strict'; + } + } + bd.addClass(cls.join(' ')); +}); + + +Ext.EventObject = function(){ + + var E = Ext.lib.Event; + + + var safariKeys = { + 63234 : 37, + 63235 : 39, + 63232 : 38, + 63233 : 40, + 63276 : 33, + 63277 : 34, + 63272 : 46, + 63273 : 36, + 63275 : 35 + }; + + + var btnMap = 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 ? btnMap[e.button] : (e.which ? e.which-1 : -1); + if(e.type == 'click' && this.button == -1){ + this.button = 0; + } + this.type = e.type; + 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 ? (safariKeys[k] || k) : k; + return (k >= 33 && k <= 40) || k == this.RETURN || k == this.TAB || k == this.ESC; + }, + + isSpecialKey : function(){ + var k = this.keyCode; + return (this.type == 'keypress' && this.ctrlKey) || 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.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 ? (safariKeys[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(selector, maxDepth, returnEl){ + return selector ? Ext.fly(this.target).findParent(selector, maxDepth, returnEl) : this.target; + }, + + getRelatedTarget : function(){ + if(this.browserEvent){ + return E.getRelatedTarget(this.browserEvent); + } + return null; + }, + + + getWheelDelta : function(){ + var e = this.browserEvent; + var delta = 0; + if(e.wheelDelta){ + delta = e.wheelDelta/120; + }else if(e.detail){ + delta = -e.detail/3; + } + return delta; + }, + + + hasModifier : function(){ + return !!((this.ctrlKey || this.altKey) || this.shiftKey); + }, + + + within : function(el, related){ + var t = this[related ? "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 propCache = {}; +var camelRe = /(-[a-z])/gi; +var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); }; +var view = document.defaultView; + +Ext.Element = function(element, forceNew){ + var dom = typeof element == "string" ? + document.getElementById(element) : element; + if(!dom){ + return null; + } + var id = dom.id; + if(forceNew !== true && id && Ext.Element.cache[id]){ + return Ext.Element.cache[id]; + } + + + this.dom = dom; + + + this.id = id || Ext.id(dom); +}; + +var El = Ext.Element; + +El.prototype = { + + originalDisplay : "", + + visibilityMode : 1, + + defaultUnit : "px", + + setVisibilityMode : function(visMode){ + this.visibilityMode = visMode; + return this; + }, + + enableDisplayMode : function(display){ + this.setVisibilityMode(El.DISPLAY); + if(typeof display != "undefined") this.originalDisplay = display; + return this; + }, + + + findParent : function(simpleSelector, maxDepth, returnEl){ + var p = this.dom, b = document.body, depth = 0, dq = Ext.DomQuery, stopEl; + maxDepth = maxDepth || 50; + if(typeof maxDepth != "number"){ + stopEl = Ext.getDom(maxDepth); + maxDepth = 10; + } + while(p && p.nodeType == 1 && depth < maxDepth && p != b && p != stopEl){ + if(dq.is(p, simpleSelector)){ + return returnEl ? Ext.get(p) : p; + } + depth++; + p = p.parentNode; + } + return null; + }, + + + + findParentNode : function(simpleSelector, maxDepth, returnEl){ + var p = Ext.fly(this.dom.parentNode, '_internal'); + return p ? p.findParent(simpleSelector, maxDepth, returnEl) : null; + }, + + + up : function(simpleSelector, maxDepth){ + return this.findParentNode(simpleSelector, maxDepth, true); + }, + + + + + is : function(simpleSelector){ + return Ext.DomQuery.is(this.dom, simpleSelector); + }, + + + animate : function(args, duration, onComplete, easing, animType){ + this.anim(args, {duration: duration, callback: onComplete, easing: easing}, animType); + return this; + }, + + + anim : function(args, opt, animType, defaultDur, defaultEase, cb){ + animType = animType || 'run'; + opt = opt || {}; + var anim = Ext.lib.Anim[animType]( + this.dom, args, + (opt.duration || defaultDur) || .35, + (opt.easing || defaultEase) || 'easeOut', + function(){ + Ext.callback(cb, this); + Ext.callback(opt.callback, opt.scope || this, [this, opt]); + }, + this + ); + opt.anim = anim; + return anim; + }, + + + 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(forceReclean){ + if(this.isCleaned && forceReclean !== 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); + var d = el.dom; + var restorePos = false; + if(el.getStyle('position') == 'static'){ + el.position('relative'); + restorePos = 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(restorePos){ + el.position('static'); + } + return [x, y]; + }, + + + scrollIntoView : function(container, hscroll){ + var c = Ext.getDom(container) || 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(hscroll !== false){ + if(l < cl){ + c.scrollLeft = l; + }else if(r > cr){ + c.scrollLeft = r-c.clientWidth; + } + } + return this; + }, + + + scrollChildIntoView : function(child, hscroll){ + Ext.fly(child, '_scrollChildIntoView').scrollIntoView(this, hscroll); + }, + + + autoHeight : function(animate, duration, onComplete, easing){ + var oldHeight = this.getHeight(); + this.clip(); + this.setHeight(1); + setTimeout(function(){ + var height = parseInt(this.dom.scrollHeight, 10); + if(!animate){ + this.setHeight(height); + this.unclip(); + if(typeof onComplete == "function"){ + onComplete(); + } + }else{ + this.setHeight(oldHeight); + this.setHeight(height, animate, duration, function(){ + this.unclip(); + if(typeof onComplete == "function") onComplete(); + }.createDelegate(this), easing); + } + }.createDelegate(this), 0); + return this; + }, + + + contains : function(el){ + if(!el){return false;} + return D.isAncestor(this.dom, el.dom ? el.dom : el); + }, + + + isVisible : function(deep) { + var vis = !(this.getStyle("visibility") == "hidden" || this.getStyle("display") == "none"); + if(deep !== 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(selector, unique){ + return El.select(selector, unique, this.dom); + }, + + + query : function(selector, unique){ + return Ext.DomQuery.select(selector, this.dom); + }, + + + child : function(selector, returnDom){ + var n = Ext.DomQuery.selectNode(selector, this.dom); + return returnDom ? n : Ext.get(n); + }, + + + down : function(selector, returnDom){ + var n = Ext.DomQuery.selectNode(" > " + selector, this.dom); + return returnDom ? n : Ext.get(n); + }, + + + initDD : function(group, config, overrides){ + var dd = new Ext.dd.DD(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + }, + + + initDDProxy : function(group, config, overrides){ + var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + }, + + + initDDTarget : function(group, config, overrides){ + var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + }, + + + setVisible : function(visible, animate){ + if(!animate || !A){ + if(this.visibilityMode == El.DISPLAY){ + this.setDisplayed(visible); + }else{ + this.fixDisplay(); + this.dom.style.visibility = visible ? "visible" : "hidden"; + } + }else{ + + var dom = this.dom; + var visMode = this.visibilityMode; + if(visible){ + this.setOpacity(.01); + this.setVisible(true); + } + this.anim({opacity: { to: (visible?1:0) }}, + this.preanim(arguments, 1), + null, .35, 'easeIn', function(){ + if(!visible){ + if(visMode == 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(animate){ + this.setVisible(!this.isVisible(), this.preanim(arguments, 0)); + return this; + }, + + + setDisplayed : function(value) { + if(typeof value == "boolean"){ + value = value ? this.originalDisplay : "none"; + } + this.setStyle("display", value); + return this; + }, + + + focus : function() { + try{ + this.dom.focus(); + }catch(e){} + return this; + }, + + + blur : function() { + try{ + this.dom.blur(); + }catch(e){} + return this; + }, + + + addClass : function(className){ + if(className instanceof Array){ + for(var i = 0, len = className.length; i < len; i++) { + this.addClass(className[i]); + } + }else{ + if(className && !this.hasClass(className)){ + this.dom.className = this.dom.className + " " + className; + } + } + return this; + }, + + + radioClass : function(className){ + var siblings = this.dom.parentNode.childNodes; + for(var i = 0; i < siblings.length; i++) { + var s = siblings[i]; + if(s.nodeType == 1){ + Ext.get(s).removeClass(className); + } + } + this.addClass(className); + return this; + }, + + + removeClass : function(className){ + if(!className || !this.dom.className){ + return this; + } + if(className instanceof Array){ + for(var i = 0, len = className.length; i < len; i++) { + this.removeClass(className[i]); + } + }else{ + if(this.hasClass(className)){ + var re = this.classReCache[className]; + if (!re) { + re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)', "g"); + this.classReCache[className] = re; + } + this.dom.className = + this.dom.className.replace(re, " "); + } + } + return this; + }, + + + classReCache: {}, + + + toggleClass : function(className){ + if(this.hasClass(className)){ + this.removeClass(className); + }else{ + this.addClass(className); + } + return this; + }, + + + hasClass : function(className){ + return className && (' '+this.dom.className+' ').indexOf(' '+className+' ') != -1; + }, + + + replaceClass : function(oldClassName, newClassName){ + this.removeClass(oldClassName); + this.addClass(newClassName); + 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 view && view.getComputedStyle ? + function(prop){ + var el = this.dom, v, cs, camel; + if(prop == 'float'){ + prop = "cssFloat"; + } + if(v = el.style[prop]){ + return v; + } + if(cs = view.getComputedStyle(el, "")){ + if(!(camel = propCache[prop])){ + camel = propCache[prop] = prop.replace(camelRe, camelFn); + } + return cs[camel]; + } + return null; + } : + function(prop){ + var el = this.dom, v, cs, camel; + if(prop == 'opacity'){ + if(typeof el.style.filter == 'string'){ + var m = el.style.filter.match(/alpha\(opacity=(.*)\)/i); + if(m){ + var fv = parseFloat(m[1]); + if(!isNaN(fv)){ + return fv ? fv / 100 : 0; + } + } + } + return 1; + }else if(prop == 'float'){ + prop = "styleFloat"; + } + if(!(camel = propCache[prop])){ + camel = propCache[prop] = prop.replace(camelRe, camelFn); + } + if(v = el.style[camel]){ + return v; + } + if(cs = el.currentStyle){ + return cs[camel]; + } + return null; + }; + }(), + + + setStyle : function(prop, value){ + if(typeof prop == "string"){ + var camel; + if(!(camel = propCache[prop])){ + camel = propCache[prop] = prop.replace(camelRe, camelFn); + } + if(camel == 'opacity') { + this.setOpacity(value); + }else{ + this.dom.style[camel] = value; + } + }else{ + for(var style in prop){ + if(typeof prop[style] != "function"){ + this.setStyle(style, prop[style]); + } + } + } + return this; + }, + + + applyStyles : function(style){ + Ext.DomHelper.applyStyles(this.dom, style); + 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, animate){ + if(!animate || !A){ + D.setX(this.dom, x); + }else{ + this.setXY([x, this.getY()], this.preanim(arguments, 1)); + } + return this; + }, + + + setY : function(y, animate){ + if(!animate || !A){ + D.setY(this.dom, y); + }else{ + this.setXY([this.getX(), y], this.preanim(arguments, 1)); + } + return this; + }, + + + setLeft : function(left){ + this.setStyle("left", this.addUnits(left)); + return this; + }, + + + setTop : function(top){ + this.setStyle("top", this.addUnits(top)); + return this; + }, + + + setRight : function(right){ + this.setStyle("right", this.addUnits(right)); + return this; + }, + + + setBottom : function(bottom){ + this.setStyle("bottom", this.addUnits(bottom)); + return this; + }, + + + setXY : function(pos, animate){ + if(!animate || !A){ + D.setXY(this.dom, pos); + }else{ + this.anim({points: {to: pos}}, this.preanim(arguments, 1), 'motion'); + } + return this; + }, + + + setLocation : function(x, y, animate){ + this.setXY([x, y], this.preanim(arguments, 2)); + return this; + }, + + + moveTo : function(x, y, animate){ + this.setXY([x, y], this.preanim(arguments, 2)); + return this; + }, + + + getRegion : function(){ + return D.getRegion(this.dom); + }, + + + getHeight : function(contentHeight){ + var h = this.dom.offsetHeight || 0; + return contentHeight !== true ? h : h-this.getBorderWidth("tb")-this.getPadding("tb"); + }, + + + getWidth : function(contentWidth){ + var w = this.dom.offsetWidth || 0; + return contentWidth !== 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(contentSize){ + return {width: this.getWidth(contentSize), height: this.getHeight(contentSize)}; + }, + + + getViewSize : function(){ + var d = this.dom, doc = document, aw = 0, ah = 0; + if(d == doc || d == doc.body){ + return {width : D.getViewWidth(), height: D.getViewHeight()}; + }else{ + return { + width : d.clientWidth, + height: d.clientHeight + }; + } + }, + + + getValue : function(asNumber){ + return asNumber ? parseInt(this.dom.value, 10) : this.dom.value; + }, + + + adjustWidth : function(width){ + if(typeof width == "number"){ + if(this.autoBoxAdjust && !this.isBorderBox()){ + width -= (this.getBorderWidth("lr") + this.getPadding("lr")); + } + if(width < 0){ + width = 0; + } + } + return width; + }, + + + adjustHeight : function(height){ + if(typeof height == "number"){ + if(this.autoBoxAdjust && !this.isBorderBox()){ + height -= (this.getBorderWidth("tb") + this.getPadding("tb")); + } + if(height < 0){ + height = 0; + } + } + return height; + }, + + + setWidth : function(width, animate){ + width = this.adjustWidth(width); + if(!animate || !A){ + this.dom.style.width = this.addUnits(width); + }else{ + this.anim({width: {to: width}}, this.preanim(arguments, 1)); + } + return this; + }, + + + setHeight : function(height, animate){ + height = this.adjustHeight(height); + if(!animate || !A){ + this.dom.style.height = this.addUnits(height); + }else{ + this.anim({height: {to: height}}, this.preanim(arguments, 1)); + } + return this; + }, + + + setSize : function(width, height, animate){ + if(typeof width == "object"){ + height = width.height; width = width.width; + } + width = this.adjustWidth(width); height = this.adjustHeight(height); + if(!animate || !A){ + this.dom.style.width = this.addUnits(width); + this.dom.style.height = this.addUnits(height); + }else{ + this.anim({width: {to: width}, height: {to: height}}, this.preanim(arguments, 2)); + } + return this; + }, + + + setBounds : function(x, y, width, height, animate){ + if(!animate || !A){ + this.setSize(width, height); + this.setLocation(x, y); + }else{ + width = this.adjustWidth(width); height = this.adjustHeight(height); + this.anim({points: {to: [x, y]}, width: {to: width}, height: {to: height}}, + this.preanim(arguments, 4), 'motion'); + } + return this; + }, + + + setRegion : function(region, animate){ + this.setBounds(region.left, region.top, region.right-region.left, region.bottom-region.top, this.preanim(arguments, 1)); + return this; + }, + + + addListener : function(eventName, fn, scope, options){ + Ext.EventManager.on(this.dom, eventName, fn, scope || this, options); + }, + + + removeListener : function(eventName, fn){ + Ext.EventManager.removeListener(this.dom, eventName, fn); + return this; + }, + + + removeAllListeners : function(){ + E.purgeElement(this.dom); + return this; + }, + + relayEvent : function(eventName, observable){ + this.on(eventName, function(e){ + observable.fireEvent(eventName, e); + }); + }, + + + setOpacity : function(opacity, animate){ + if(!animate || !A){ + var s = this.dom.style; + if(Ext.isIE){ + s.zoom = 1; + s.filter = (s.filter || '').replace(/alpha\([^\)]*\)/gi,"") + + (opacity == 1 ? "" : "alpha(opacity=" + opacity * 100 + ")"); + }else{ + s.opacity = opacity; + } + }else{ + this.anim({opacity: {to: opacity}}, this.preanim(arguments, 1), null, .35, 'easeIn'); + } + return this; + }, + + + getLeft : function(local){ + if(!local){ + return this.getX(); + }else{ + return parseInt(this.getStyle("left"), 10) || 0; + } + }, + + + getRight : function(local){ + if(!local){ + return this.getX() + this.getWidth(); + }else{ + return (this.getLeft(true) + this.getWidth()) || 0; + } + }, + + + getTop : function(local) { + if(!local){ + return this.getY(); + }else{ + return parseInt(this.getStyle("top"), 10) || 0; + } + }, + + + getBottom : function(local){ + if(!local){ + return this.getY() + this.getHeight(); + }else{ + return (this.getTop(true) + this.getHeight()) || 0; + } + }, + + + position : function(pos, zIndex, x, y){ + if(!pos){ + if(this.getStyle('position') == 'static'){ + this.setStyle('position', 'relative'); + } + }else{ + this.setStyle("position", pos); + } + if(zIndex){ + this.setStyle("z-index", zIndex); + } + 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(value){ + value = value ||''; + this.setStyle({ + "left": value, + "right": value, + "top": value, + "bottom": value, + "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(side){ + return this.addStyles(side, El.borders); + }, + + + getPadding : function(side){ + return this.addStyles(side, 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(left, top){ + this.dom.style.left = this.addUnits(left); + this.dom.style.top = this.addUnits(top); + return this; + }, + + + move : function(direction, distance, animate){ + var xy = this.getXY(); + direction = direction.toLowerCase(); + switch(direction){ + case "l": + case "left": + this.moveTo(xy[0]-distance, xy[1], this.preanim(arguments, 2)); + break; + case "r": + case "right": + this.moveTo(xy[0]+distance, xy[1], this.preanim(arguments, 2)); + break; + case "t": + case "top": + case "up": + this.moveTo(xy[0], xy[1]-distance, this.preanim(arguments, 2)); + break; + case "b": + case "bottom": + case "down": + this.moveTo(xy[0], xy[1]+distance, 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(anchor, local, 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((anchor || "tl").toLowerCase()){ + case "c": + x = r(w*.5); + y = r(h*.5); + break; + case "t": + x = r(w*.5); + y = 0; + break; + case "l": + x = 0; + y = r(h*.5); + break; + case "r": + x = w; + y = r(h*.5); + break; + case "b": + x = r(w*.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(local === 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); + var 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]; + + + + 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 swapY = ((p1y=="t" && p2y=="b") || (p1y=="b" && p2y=="t")); + var swapX = ((p1x=="r" && p2x=="l") || (p1x=="l" && p2x=="r")); + + var doc = document; + var scrollX = (doc.documentElement.scrollLeft || doc.body.scrollLeft || 0)+5; + var scrollY = (doc.documentElement.scrollTop || doc.body.scrollTop || 0)+5; + + if((x+w) > dw + scrollX){ + x = swapX ? r.left-w : dw+scrollX-w; + } + if(x < scrollX){ + x = swapX ? r.right : scrollX; + } + if((y+h) > dh + scrollY){ + y = swapY ? r.top-h : dh+scrollY-h; + } + if (y < scrollY){ + y = swapY ? r.bottom : scrollY; + } + } + return [x,y]; + }, + + + getConstrainToXY : function(){ + var os = {top:0, left:0, bottom:0, right: 0}; + + return function(el, local, offsets, proposedXY){ + el = Ext.get(el); + offsets = offsets ? Ext.applyIf(offsets, os) : os; + + var vw, vh, vx = 0, vy = 0; + if(el.dom == document.body || el.dom == document){ + vw = Ext.lib.Dom.getViewWidth(); + vh = Ext.lib.Dom.getViewHeight(); + }else{ + vw = el.dom.clientWidth; + vh = el.dom.clientHeight; + if(!local){ + var vxy = el.getXY(); + vx = vxy[0]; + vy = vxy[1]; + } + } + + var s = el.getScroll(); + + vx += offsets.left + s.left; + vy += offsets.top + s.top; + + vw -= offsets.right; + vh -= offsets.bottom; + + var vr = vx+vw; + var vb = vy+vh; + + var xy = proposedXY || (!local ? this.getXY() : [this.getLeft(true), this.getTop(true)]); + var x = xy[0], y = xy[1]; + var w = this.dom.offsetWidth, h = this.dom.offsetHeight; + + + var moved = false; + + + if((x + w) > vr){ + x = vr - w; + moved = true; + } + if((y + h) > vb){ + y = vb - h; + moved = true; + } + + if(x < vx){ + x = vx; + moved = true; + } + if(y < vy){ + y = vy; + moved = true; + } + return moved ? [x, y] : false; + }; + }(), + + + adjustForConstraints : function(xy, parent, offsets){ + return this.getConstrainToXY(parent || document, false, offsets, xy) || xy; + }, + + + alignTo : function(element, position, offsets, animate){ + var xy = this.getAlignToXY(element, position, offsets); + this.setXY(xy, this.preanim(arguments, 3)); + return this; + }, + + + anchorTo : function(el, alignment, offsets, animate, monitorScroll, callback){ + var action = function(){ + this.alignTo(el, alignment, offsets, animate); + Ext.callback(callback, this); + }; + Ext.EventManager.onWindowResize(action, this); + var tm = typeof monitorScroll; + if(tm != 'undefined'){ + Ext.EventManager.on(window, 'scroll', action, this, + {buffer: tm == 'number' ? monitorScroll : 50}); + } + action.call(this); + return this; + }, + + clearOpacity : function(){ + if (window.ActiveXObject) { + if(typeof this.dom.style.filter == 'string' && (/alpha/i).test(this.dom.style.filter)){ + this.dom.style.filter = ""; + } + } else { + this.dom.style.opacity = ""; + this.dom.style["-moz-opacity"] = ""; + this.dom.style["-khtml-opacity"] = ""; + } + return this; + }, + + + hide : function(animate){ + this.setVisible(false, this.preanim(arguments, 0)); + return this; + }, + + + show : function(animate){ + 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 changed = []; + 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'){ + changed.push({el: p, visibility: pe.getStyle("visibility")}); + p.style.visibility = "hidden"; + p.style.display = "block"; + } + p = p.parentNode; + } + this._measureChanged = changed; + return this; + + }, + + + endMeasure : function(){ + var changed = this._measureChanged; + if(changed){ + for(var i = 0, len = changed.length; i < len; i++) { + var r = changed[i]; + r.el.style.visibility = r.visibility; + r.el.style.display = "none"; + } + this._measureChanged = null; + } + return this; + }, + + + update : function(html, loadScripts, callback){ + if(typeof html == "undefined"){ + html = ""; + } + if(loadScripts !== true){ + this.dom.innerHTML = html; + if(typeof callback == "function"){ + callback(); + } + return this; + } + var id = Ext.id(); + var dom = this.dom; + + html += ''; + + E.onAvailable(id, function(){ + var hd = document.getElementsByTagName("head")[0]; + var re = /(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig; + var srcRe = /\ssrc=([\'\"])(.*?)\1/i; + var typeRe = /\stype=([\'\"])(.*?)\1/i; + + var match; + while(match = re.exec(html)){ + var attrs = match[1]; + var srcMatch = attrs ? attrs.match(srcRe) : false; + if(srcMatch && srcMatch[2]){ + var s = document.createElement("script"); + s.src = srcMatch[2]; + var typeMatch = attrs.match(typeRe); + if(typeMatch && typeMatch[2]){ + s.type = typeMatch[2]; + } + hd.appendChild(s); + }else if(match[2] && match[2].length > 0){ + if(window.execScript) { + window.execScript(match[2]); + } else { + window.eval(match[2]); + } + } + } + var el = document.getElementById(id); + if(el){el.parentNode.removeChild(el);} + if(typeof callback == "function"){ + callback(); + } + }); + dom.innerHTML = html.replace(/(?:)((\n|\r|.)*?)(?:<\/script>)/ig, ""); + 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(centerIn){ + this.alignTo(centerIn || document, 'c-c'); + return this; + }, + + + isBorderBox : function(){ + return noBoxAdjust[this.dom.tagName.toLowerCase()] || Ext.isBorderBox; + }, + + + getBox : function(contentBox, local){ + var xy; + if(!local){ + xy = this.getXY(); + }else{ + var left = parseInt(this.getStyle("left"), 10) || 0; + var top = parseInt(this.getStyle("top"), 10) || 0; + xy = [left, top]; + } + var el = this.dom, w = el.offsetWidth, h = el.offsetHeight, bx; + if(!contentBox){ + bx = {x: xy[0], y: xy[1], 0: xy[0], 1: xy[1], width: w, height: h}; + }else{ + var l = this.getBorderWidth("l")+this.getPadding("l"); + var r = this.getBorderWidth("r")+this.getPadding("r"); + var t = this.getBorderWidth("t")+this.getPadding("t"); + var b = this.getBorderWidth("b")+this.getPadding("b"); + bx = {x: xy[0]+l, y: xy[1]+t, 0: xy[0]+l, 1: xy[1]+t, width: w-(l+r), height: h-(t+b)}; + } + bx.right = bx.x + bx.width; + bx.bottom = bx.y + bx.height; + return bx; + }, + + + getFrameWidth : function(sides, onlyContentBox){ + return onlyContentBox && Ext.isBorderBox ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides)); + }, + + + setBox : function(box, adjust, animate){ + var w = box.width, h = box.height; + if((adjust && !this.autoBoxAdjust) && !this.isBorderBox()){ + w -= (this.getBorderWidth("lr") + this.getPadding("lr")); + h -= (this.getBorderWidth("tb") + this.getPadding("tb")); + } + this.setBounds(box.x, box.y, w, h, this.preanim(arguments, 2)); + return this; + }, + + + repaint : function(){ + var dom = this.dom; + this.addClass("x-repaint"); + setTimeout(function(){ + Ext.get(dom).removeClass("x-repaint"); + }, 1); + return this; + }, + + + getMargins : function(side){ + if(!side){ + return { + top: parseInt(this.getStyle("margin-top"), 10) || 0, + left: parseInt(this.getStyle("margin-left"), 10) || 0, + bottom: parseInt(this.getStyle("margin-bottom"), 10) || 0, + right: parseInt(this.getStyle("margin-right"), 10) || 0 + }; + }else{ + return this.addStyles(side, El.margins); + } + }, + + + addStyles : function(sides, styles){ + var val = 0, v, w; + for(var i = 0, len = sides.length; i < len; i++){ + v = this.getStyle(styles[sides.charAt(i)]); + if(v){ + w = parseInt(v, 10); + if(w){ val += w; } + } + } + return val; + }, + + + createProxy : function(config, renderTo, matchBox){ + if(renderTo){ + renderTo = Ext.getDom(renderTo); + }else{ + renderTo = document.body; + } + config = typeof config == "object" ? + config : {tag : "div", cls: config}; + var proxy = Ext.DomHelper.append(renderTo, config, true); + if(matchBox){ + proxy.setBox(this.getBox()); + } + return proxy; + }, + + + mask : function(msg, msgCls){ + if(this.getStyle("position") == "static"){ + this.setStyle("position", "relative"); + } + if(!this._mask){ + this._mask = Ext.DomHelper.append(this.dom, {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, {cls:"ext-el-mask-msg", cn:{tag:'div'}}, true); + } + var mm = this._maskMsg; + mm.dom.className = msgCls ? "ext-el-mask-msg " + msgCls : "ext-el-mask-msg"; + mm.dom.firstChild.innerHTML = msg; + mm.setDisplayed(true); + mm.center(this); + } + if(Ext.isIE && !(Ext.isIE7 && Ext.isStrict) && this.getStyle('height') == 'auto'){ + this._mask.setHeight(this.getHeight()); + } + return this._mask; + }, + + + unmask : function(removeEl){ + if(this._mask){ + if(removeEl === 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 el = document.createElement('iframe'); + el.frameBorder = 'no'; + el.className = 'ext-shim'; + if(Ext.isIE && Ext.isSecure){ + el.src = Ext.SSL_SECURE_URL; + } + var shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom)); + shim.autoBoxAdjust = false; + return shim; + }, + + + remove : function(){ + if(this.dom.parentNode){ + this.dom.parentNode.removeChild(this.dom); + } + delete El.cache[this.dom.id]; + }, + + + addClassOnOver : function(className, preventFlicker){ + this.on("mouseover", function(){ + Ext.fly(this, '_internal').addClass(className); + }, this.dom); + var removeFn = function(e){ + if(preventFlicker !== true || !e.within(this, true)){ + Ext.fly(this, '_internal').removeClass(className); + } + }; + this.on("mouseout", removeFn, this.dom); + return this; + }, + + + addClassOnFocus : function(className){ + this.on("focus", function(){ + Ext.fly(this, '_internal').addClass(className); + }, this.dom); + this.on("blur", function(){ + Ext.fly(this, '_internal').removeClass(className); + }, this.dom); + return this; + }, + + addClassOnClick : function(className){ + var dom = this.dom; + this.on("mousedown", function(){ + Ext.fly(dom, '_internal').addClass(className); + var d = Ext.get(document); + var fn = function(){ + Ext.fly(dom, '_internal').removeClass(className); + d.removeListener("mouseup", fn); + }; + d.on("mouseup", fn); + }); + return this; + }, + + + swallowEvent : function(eventName, preventDefault){ + var fn = function(e){ + e.stopPropagation(); + if(preventDefault){ + e.preventDefault(); + } + }; + if(eventName instanceof Array){ + for(var i = 0, len = eventName.length; i < len; i++){ + this.on(eventName[i], fn); + } + return this; + } + this.on(eventName, fn); + return this; + }, + + + fitToParentDelegate : Ext.emptyFn, + + + fitToParent : function(monitorResize, targetParent) { + Ext.EventManager.removeResizeListener(this.fitToParentDelegate); + this.fitToParentDelegate = Ext.emptyFn; + if (monitorResize === true && !this.dom.parentNode) { + return; + } + var p = Ext.get(targetParent || this.dom.parentNode); + this.setSize(p.getComputedWidth() - p.getFrameWidth('lr'), p.getComputedHeight() - p.getFrameWidth('tb')); + if (monitorResize === true) { + this.fitToParentDelegate = this.fitToParent.createDelegate(this, [true, targetParent]); + Ext.EventManager.onWindowResize(this.fitToParentDelegate); + } + 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(config, insertBefore, returnDom){ + config = config || {tag:'div'}; + if(insertBefore){ + return Ext.DomHelper.insertBefore(insertBefore, config, returnDom !== true); + } + return Ext.DomHelper[!this.dom.firstChild ? 'overwrite' : 'append'](this.dom, config, returnDom !== 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, returnDom){ + el = el || {}; + if(typeof el == 'object' && !el.nodeType){ + return this.createChild(el, this.dom.firstChild, returnDom); + }else{ + el = Ext.getDom(el); + this.dom.insertBefore(el, this.dom.firstChild); + return !returnDom ? Ext.get(el) : el; + } + }, + + + insertSibling: function(el, where, returnDom){ + where = where ? where.toLowerCase() : 'before'; + el = el || {}; + var rt, refNode = where == 'before' ? this.dom : this.dom.nextSibling; + + if(typeof el == 'object' && !el.nodeType){ + if(where == 'after' && !this.dom.nextSibling){ + rt = Ext.DomHelper.append(this.dom.parentNode, el, !returnDom); + }else{ + rt = Ext.DomHelper[where == 'after' ? 'insertAfter' : 'insertBefore'](this.dom, el, !returnDom); + } + + }else{ + rt = this.dom.parentNode.insertBefore(Ext.getDom(el), + where == 'before' ? this.dom : this.dom.nextSibling); + if(!returnDom){ + rt = Ext.get(rt); + } + } + return rt; + }, + + + wrap: function(config, returnDom){ + if(!config){ + config = {tag: "div"}; + } + var newEl = Ext.DomHelper.insertBefore(this.dom, config, !returnDom); + newEl.dom ? newEl.dom.appendChild(this.dom) : newEl.appendChild(this.dom); + return newEl; + }, + + + replace: function(el){ + el = Ext.get(el); + this.insertBefore(el); + el.remove(); + return this; + }, + + + insertHtml : function(where, html, returnEl){ + var el = Ext.DomHelper.insertHtml(where, this.dom, html); + return returnEl ? Ext.get(el) : el; + }, + + + set : function(o, useSet){ + var el = this.dom; + useSet = typeof useSet == 'undefined' ? (el.setAttribute ? true : false) : useSet; + for(var attr in o){ + if(attr == "style" || typeof o[attr] == "function") continue; + if(attr=="cls"){ + el.className = o["cls"]; + }else{ + if(useSet) el.setAttribute(attr, o[attr]); + else el[attr] = o[attr]; + } + } + if(o.style){ + Ext.DomHelper.applyStyles(el, o.style); + } + return this; + }, + + + addKeyListener : function(key, fn, scope){ + var config; + if(typeof key != "object" || key instanceof Array){ + config = { + key: key, + fn: fn, + scope: scope + }; + }else{ + config = { + key : key.key, + shift : key.shift, + ctrl : key.ctrl, + alt : key.alt, + fn: fn, + scope: scope + }; + } + return new Ext.KeyMap(this, config); + }, + + + addKeyMap : function(config){ + return new Ext.KeyMap(this, config); + }, + + + isScrollable : function(){ + var dom = this.dom; + return dom.scrollHeight > dom.clientHeight || dom.scrollWidth > dom.clientWidth; + }, + + + + scrollTo : function(side, value, animate){ + var prop = side.toLowerCase() == "left" ? "scrollLeft" : "scrollTop"; + if(!animate || !A){ + this.dom[prop] = value; + }else{ + var to = prop == "scrollLeft" ? [value, this.dom.scrollTop] : [this.dom.scrollLeft, value]; + this.anim({scroll: {"to": to}}, this.preanim(arguments, 2), 'scroll'); + } + return this; + }, + + + scroll : function(direction, distance, animate){ + if(!this.isScrollable()){ + return; + } + var el = this.dom; + var l = el.scrollLeft, t = el.scrollTop; + var w = el.scrollWidth, h = el.scrollHeight; + var cw = el.clientWidth, ch = el.clientHeight; + direction = direction.toLowerCase(); + var scrolled = false; + var a = this.preanim(arguments, 2); + switch(direction){ + case "l": + case "left": + if(w - l > cw){ + var v = Math.min(l + distance, w-cw); + this.scrollTo("left", v, a); + scrolled = true; + } + break; + case "r": + case "right": + if(l > 0){ + var v = Math.max(l - distance, 0); + this.scrollTo("left", v, a); + scrolled = true; + } + break; + case "t": + case "top": + case "up": + if(t > 0){ + var v = Math.max(t - distance, 0); + this.scrollTo("top", v, a); + scrolled = true; + } + break; + case "b": + case "bottom": + case "down": + if(h - t > ch){ + var v = Math.min(t + distance, h-ch); + this.scrollTo("top", v, a); + scrolled = true; + } + break; + } + return scrolled; + }, + + + 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, defaultValue, prefix){ + var v = this.getStyle(attr); + if(!v || v == "transparent" || v == "inherit") { + return defaultValue; + } + var color = typeof prefix == "undefined" ? "#" : prefix; + 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; + } + color += h; + } + } else { + if(v.substr(0, 1) == "#"){ + if(v.length == 4) { + for(var i = 1; i < 4; i++){ + var c = v.charAt(i); + color += c + c; + } + }else if(v.length == 7){ + color += v.substr(1); + } + } + } + return(color.length > 5 ? color.toLowerCase() : defaultValue); + }, + + + boxWrap : function(cls){ + cls = cls || 'x-box'; + var el = Ext.get(this.insertHtml('beforeBegin', String.format('
'+El.boxMarkup+'
', 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; + + +El.unitPattern = /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i; + + +El.addUnits = function(v, defaultUnit){ + if(v === "" || v == "auto"){ + return v; + } + if(v === undefined){ + return ''; + } + if(typeof v == "number" || !El.unitPattern.test(v)){ + return v + (defaultUnit || 'px'); + } + return v; +}; + + +El.boxMarkup = '
'; + +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 docEl; + + +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 != docEl){ + 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(!docEl){ + var f = function(){}; + f.prototype = El.prototype; + docEl = new f(); + docEl.dom = document; + } + return docEl; + } + return null; +}; + + +El.uncache = function(el){ + for(var i = 0, a = arguments, len = a.length; i < len; i++) { + if(a[i]){ + delete El.cache[a[i].id || a[i]]; + } + } +}; + + + + +El.garbageCollect = function(){ + if(!Ext.enableGarbageCollector){ + clearInterval(El.collectorThread); + return; + } + for(var eid in El.cache){ + var el = El.cache[eid], d = el.dom; + + + + + + + + + + + + + + + + + + if(!d || !d.parentNode || (!d.offsetParent && !document.getElementById(eid))){ + delete El.cache[eid]; + if(d && Ext.enableListenerCollection){ + E.purgeElement(d); + } + } + } +} +El.collectorThreadId = setInterval(El.garbageCollect, 30000); + + + +El.Flyweight = function(dom){ + this.dom = dom; +}; +El.Flyweight.prototype = El.prototype; + +El._flyweights = {}; + +El.fly = function(el, named){ + named = named || '_global'; + el = Ext.getDom(el); + if(!el){ + return null; + } + if(!El._flyweights[named]){ + El._flyweights[named] = new El.Flyweight(); + } + El._flyweights[named].dom = el; + return El._flyweights[named]; +}; + + +Ext.get = El.get; + +Ext.fly = El.fly; + + +var noBoxAdjust = Ext.isStrict ? { + select:1 +} : { + input:1, select:1, textarea:1 +}; +if(Ext.isIE || Ext.isGecko){ + noBoxAdjust['button'] = 1; +} + + +Ext.EventManager.on(window, 'unload', function(){ + delete El.cache; + delete El._flyweights; +}); +})(); + +Ext.enableFx = true; + + +Ext.Fx = { + + slideIn : function(anchor, o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + + anchor = anchor || "t"; + + this.fixDisplay(); + + var r = this.getFxRestore(); + var b = this.getBox(); + this.setSize(b); + + var wrap = this.fxWrap(r.pos, o, "hidden"); + + var st = this.dom.style; + st.visibility = "visible"; + st.position = "absolute"; + + var after = function(){ + el.fxUnwrap(wrap, 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(anchor.toLowerCase()){ + case "t": + wrap.setSize(b.width, 0); + st.left = st.bottom = "0"; + a = {height: bh}; + break; + case "l": + wrap.setSize(0, b.height); + st.right = st.top = "0"; + a = {width: bw}; + break; + case "r": + wrap.setSize(0, b.height); + wrap.setX(b.right); + st.left = st.top = "0"; + a = {width: bw, points: pt}; + break; + case "b": + wrap.setSize(b.width, 0); + wrap.setY(b.bottom); + st.left = st.top = "0"; + a = {height: bh, points: pt}; + break; + case "tl": + wrap.setSize(0, 0); + st.right = st.bottom = "0"; + a = {width: bw, height: bh}; + break; + case "bl": + wrap.setSize(0, 0); + wrap.setY(b.y+b.height); + st.right = st.top = "0"; + a = {width: bw, height: bh, points: pt}; + break; + case "br": + wrap.setSize(0, 0); + wrap.setXY([b.right, b.bottom]); + st.left = st.top = "0"; + a = {width: bw, height: bh, points: pt}; + break; + case "tr": + wrap.setSize(0, 0); + wrap.setX(b.x+b.width); + st.left = st.bottom = "0"; + a = {width: bw, height: bh, points: pt}; + break; + } + this.dom.style.visibility = "visible"; + wrap.show(); + + arguments.callee.anim = wrap.fxanim(a, + o, + 'motion', + .5, + 'easeOut', after); + }); + return this; + }, + + + slideOut : function(anchor, o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + + anchor = anchor || "t"; + + var r = this.getFxRestore(); + + var b = this.getBox(); + this.setSize(b); + + var wrap = this.fxWrap(r.pos, o, "visible"); + + var st = this.dom.style; + st.visibility = "visible"; + st.position = "absolute"; + + wrap.setSize(b); + + var after = function(){ + if(o.useDisplay){ + el.setDisplayed(false); + }else{ + el.hide(); + } + + el.fxUnwrap(wrap, r.pos, o); + + st.width = r.width; + st.height = r.height; + + el.afterFx(o); + }; + + var a, zero = {to: 0}; + switch(anchor.toLowerCase()){ + case "t": + st.left = st.bottom = "0"; + a = {height: zero}; + break; + case "l": + st.right = st.top = "0"; + a = {width: zero}; + break; + case "r": + st.left = st.top = "0"; + a = {width: zero, points: {to:[b.right, b.y]}}; + break; + case "b": + st.left = st.top = "0"; + a = {height: zero, points: {to:[b.x, b.bottom]}}; + break; + case "tl": + st.right = st.bottom = "0"; + a = {width: zero, height: zero}; + break; + case "bl": + st.right = st.top = "0"; + a = {width: zero, height: zero, points: {to:[b.x, b.bottom]}}; + break; + case "br": + st.left = st.top = "0"; + a = {width: zero, height: zero, points: {to:[b.x+b.width, b.bottom]}}; + break; + case "tr": + st.left = st.bottom = "0"; + a = {width: zero, height: zero, points: {to:[b.right, b.y]}}; + break; + } + + arguments.callee.anim = wrap.fxanim(a, + o, + 'motion', + .5, + "easeOut", after); + }); + 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 after = function(){ + if(o.useDisplay){ + el.setDisplayed(false); + }else{ + el.hide(); + } + + el.clearOpacity(); + + el.setPositioning(r.pos); + st.width = r.width; + st.height = r.height; + st.fontSize = ''; + el.afterFx(o); + }; + + var width = this.getWidth(); + var height = this.getHeight(); + + arguments.callee.anim = this.fxanim({ + width : {to: this.adjustWidth(width * 2)}, + height : {to: this.adjustHeight(height * 2)}, + points : {by: [-(width * .5), -(height * .5)]}, + opacity : {to: 0}, + fontSize: {to:200, unit: "%"} + }, + o, + 'motion', + .5, + "easeOut", after); + }); + return this; + }, + + + switchOff : function(o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + this.clearOpacity(); + this.clip(); + + var r = this.getFxRestore(); + var st = this.dom.style; + + var after = function(){ + if(o.useDisplay){ + el.setDisplayed(false); + }else{ + el.hide(); + } + + el.clearOpacity(); + el.setPositioning(r.pos); + st.width = r.width; + st.height = r.height; + + el.afterFx(o); + }; + + this.fxanim({opacity:{to:0.3}}, null, null, .1, null, function(){ + this.clearOpacity(); + (function(){ + this.fxanim({ + height:{to:1}, + points:{by:[0, this.getHeight() * .5]} + }, o, 'motion', 0.3, 'easeIn', after); + }).defer(100, this); + }); + }); + return this; + }, + + + highlight : function(color, o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + color = color || "ffff9c"; + attr = o.attr || "backgroundColor"; + + this.clearOpacity(); + this.show(); + + var origColor = this.getColor(attr); + var restoreColor = this.dom.style[attr]; + endColor = (o.endColor || origColor) || "ffffff"; + + var after = function(){ + el.dom.style[attr] = restoreColor; + el.afterFx(o); + }; + + var a = {}; + a[attr] = {from: color, to: endColor}; + arguments.callee.anim = this.fxanim(a, + o, + 'color', + 1, + 'easeIn', after); + }); + return this; + }, + + + frame : function(color, count, o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + color = color || "#C3DAF9"; + if(color.length == 6){ + color = "#" + color; + } + count = count || 1; + duration = o.duration || 1; + this.show(); + + var b = this.getBox(); + var animFn = function(){ + var proxy = this.createProxy({ + + style:{ + visbility:"hidden", + position:"absolute", + "z-index":"35000", border:"0px solid " + color + } + }); + var scale = Ext.isBorderBox ? 2 : 1; + proxy.animate({ + top:{from:b.y, to:b.y - 20}, + left:{from:b.x, to:b.x - 20}, + borderWidth:{from:0, to:10}, + opacity:{from:1, to:0}, + height:{from:b.height, to:(b.height + (20*scale))}, + width:{from:b.width, to:(b.width + (20*scale))} + }, duration, function(){ + proxy.remove(); + }); + if(--count > 0){ + animFn.defer((duration/2)*1000, this); + }else{ + el.afterFx(o); + } + }; + animFn.call(this); + }); + return this; + }, + + + pause : function(seconds){ + var el = this.getFxEl(); + var o = {}; + + el.queueFx(o, function(){ + setTimeout(function(){ + el.afterFx(o); + }, seconds * 1000); + }); + return this; + }, + + + fadeIn : function(o){ + var el = this.getFxEl(); + o = o || {}; + el.queueFx(o, function(){ + this.setOpacity(0); + this.fixDisplay(); + this.dom.style.visibility = 'visible'; + var to = o.endOpacity || 1; + arguments.callee.anim = this.fxanim({opacity:{to:to}}, + o, null, .5, "easeOut", function(){ + if(to == 1){ + this.clearOpacity(); + } + el.afterFx(o); + }); + }); + return this; + }, + + + fadeOut : function(o){ + var el = this.getFxEl(); + o = o || {}; + el.queueFx(o, function(){ + arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}}, + o, null, .5, "easeOut", function(){ + if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){ + this.dom.style.display = "none"; + }else{ + this.dom.style.visibility = "hidden"; + } + this.clearOpacity(); + el.afterFx(o); + }); + }); + return this; + }, + + + scale : function(w, h, o){ + this.shift(Ext.apply({}, o, { + width: w, + height: h + })); + return this; + }, + + + shift : function(o){ + var el = this.getFxEl(); + o = o || {}; + el.queueFx(o, function(){ + var a = {}, w = o.width, h = o.height, x = o.x, y = o.y, op = o.opacity; + if(w !== undefined){ + a.width = {to: this.adjustWidth(w)}; + } + 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', .35, "easeOut", function(){ + el.afterFx(o); + }); + }); + return this; + }, + + + ghost : function(anchor, o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + anchor = anchor || "b"; + + var r = this.getFxRestore(); + var w = this.getWidth(), + h = this.getHeight(); + + var st = this.dom.style; + + var after = function(){ + if(o.useDisplay){ + el.setDisplayed(false); + }else{ + el.hide(); + } + + el.clearOpacity(); + el.setPositioning(r.pos); + st.width = r.width; + st.height = r.height; + + el.afterFx(o); + }; + + var a = {opacity: {to: 0}, points: {}}, pt = a.points; + switch(anchor.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', + .5, + "easeOut", after); + }); + 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 wrap; + if(!o.wrap || !(wrap = Ext.get(o.wrap))){ + var wrapXY; + if(o.fixPosition){ + wrapXY = this.getXY(); + } + var div = document.createElement("div"); + div.style.visibility = vis; + wrap = Ext.get(this.dom.parentNode.insertBefore(div, this.dom)); + wrap.setPositioning(pos); + if(wrap.getStyle("position") == "static"){ + wrap.position("relative"); + } + this.clearPositioning('auto'); + wrap.clip(); + wrap.dom.appendChild(this.dom); + if(wrapXY){ + wrap.setXY(wrapXY); + } + } + return wrap; + }, + + + fxUnwrap : function(wrap, pos, o){ + this.clearPositioning(); + this.setPositioning(pos); + if(!o.wrap){ + wrap.dom.parentNode.insertBefore(this.dom, wrap.dom); + wrap.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.afterCls){ + this.addClass(o.afterCls); + } + 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(args, opt, animType, defaultDur, defaultEase, cb){ + animType = animType || 'run'; + opt = opt || {}; + var anim = Ext.lib.Anim[animType]( + this.dom, args, + (opt.duration || defaultDur) || .35, + (opt.easing || defaultEase) || 'easeOut', + function(){ + Ext.callback(cb, this); + }, + this + ); + opt.anim = anim; + return anim; + } +}; + +Ext.Fx.resize = Ext.Fx.scale; + +Ext.apply(Ext.Element.prototype, Ext.Fx); + + +Ext.CompositeElement = function(els){ + this.elements = []; + this.addElements(els); +}; +Ext.CompositeElement.prototype = { + isComposite: true, + addElements : function(els){ + if(!els) return this; + if(typeof els == "string"){ + els = Ext.Element.selectorFunction(els); + } + var yels = this.elements; + var index = yels.length-1; + for(var i = 0, len = els.length; i < len; i++) { + yels[++index] = Ext.get(els[i]); + } + return this; + }, + + + fill : function(els){ + this.elements = []; + this.add(els); + return this; + }, + + + filter : function(selector){ + var els = []; + this.each(function(el){ + if(el.is(selector)){ + els[els.length] = el.dom; + } + }); + this.fill(els); + return this; + }, + + invoke : function(fn, args){ + var els = this.elements; + for(var i = 0, len = els.length; i < len; i++) { + Ext.Element.prototype[fn].apply(els[i], args); + } + return this; + }, + + add : function(els){ + if(typeof els == "string"){ + this.addElements(Ext.Element.selectorFunction(els)); + }else if(els.length !== undefined){ + this.addElements(els); + }else{ + this.addElements([els]); + } + return this; + }, + + each : function(fn, scope){ + var els = this.elements; + for(var i = 0, len = els.length; i < len; i++){ + if(fn.call(scope || els[i], els[i], this, i) === false) { + break; + } + } + return this; + }, + + + item : function(index){ + return this.elements[index] || null; + }, + + + first : function(){ + return this.item(0); + }, + + + last : function(){ + return this.item(this.elements.length-1); + }, + + + getCount : function(){ + return this.elements.length; + }, + + + contains : function(el){ + return this.indexOf(el) !== -1; + }, + + + indexOf : function(el){ + return this.elements.indexOf(Ext.get(el)); + }, + + + + removeElement : function(el, removeDom){ + if(el instanceof Array){ + for(var i = 0, len = el.length; i < len; i++){ + this.removeElement(el[i]); + } + return this; + } + var index = typeof el == 'number' ? el : this.indexOf(el); + if(index !== -1){ + if(removeDom){ + var d = this.elements[index]; + if(d.dom){ + d.remove(); + }else{ + d.parentNode.removeChild(d); + } + } + this.elements.splice(index, 1); + } + return this; + }, + + + replaceElement : function(el, replacement, domReplace){ + var index = typeof el == 'number' ? el : this.indexOf(el); + if(index !== -1){ + if(domReplace){ + this.elements[index].replaceWith(replacement); + }else{ + this.elements.splice(index, 1, Ext.get(replacement)) + } + } + return this; + }, + + + clear : function(){ + this.elements = []; + } +}; +(function(){ +Ext.CompositeElement.createCall = function(proto, fnName){ + if(!proto[fnName]){ + proto[fnName] = function(){ + return this.invoke(fnName, arguments); + }; + } +}; +for(var fnName in Ext.Element.prototype){ + if(typeof Ext.Element.prototype[fnName] == "function"){ + Ext.CompositeElement.createCall(Ext.CompositeElement.prototype, fnName); + } +}; +})(); + + +Ext.CompositeElementLite = function(els){ + Ext.CompositeElementLite.superclass.constructor.call(this, els); + 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 yels = this.elements; + var index = yels.length-1; + for(var i = 0, len = els.length; i < len; i++) { + yels[++index] = els[i]; + } + } + } + return this; + }, + invoke : function(fn, args){ + 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, args); + } + return this; + }, + + item : function(index){ + if(!this.elements[index]){ + return null; + } + this.el.dom = this.elements[index]; + return this.el; + }, + + + addListener : function(eventName, handler, scope, opt){ + var els = this.elements; + for(var i = 0, len = els.length; i < len; i++) { + Ext.EventManager.on(els[i], eventName, handler, scope || els[i], opt); + } + return this; + }, + + + each : function(fn, scope){ + 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(scope || el, el, this, i) === false){ + break; + } + } + return this; + }, + + indexOf : function(el){ + return this.elements.indexOf(Ext.getDom(el)); + }, + + replaceElement : function(el, replacement, domReplace){ + var index = typeof el == 'number' ? el : this.indexOf(el); + if(index !== -1){ + replacement = Ext.getDom(replacement); + if(domReplace){ + var d = this.elements[index]; + d.parentNode.insertBefore(replacement, d); + d.parentNode.removeChild(d); + } + this.elements.splice(index, 1, replacement); + } + return this; + } +}); +Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener; +if(Ext.DomQuery){ + Ext.Element.selectorFunction = Ext.DomQuery.select; +} + +Ext.Element.select = function(selector, unique, root){ + var els; + if(typeof selector == "string"){ + els = Ext.Element.selectorFunction(selector, root); + }else if(selector.length !== undefined){ + els = selector; + }else{ + throw "Invalid selector"; + } + if(unique === true){ + return new Ext.CompositeElement(els); + }else{ + return new Ext.CompositeElementLite(els); + } +}; + +Ext.select = Ext.Element.select; + +Ext.data.Connection = function(config){ + Ext.apply(this, config); + this.addEvents({ + + "beforerequest" : true, + + "requestcomplete" : true, + + "requestexception" : true + }); + Ext.data.Connection.superclass.constructor.call(this); +}; + +Ext.extend(Ext.data.Connection, Ext.util.Observable, { + + + + + + timeout : 30000, + + autoAbort:false, + + + disableCaching: true, + + + request : function(o){ + if(this.fireEvent("beforerequest", this, o) !== false){ + var p = o.params; + + if(typeof p == "function"){ + p = p.call(o.scope||window, o); + } + if(typeof p == "object"){ + p = Ext.urlEncode(o.params); + } + if(this.extraParams){ + var extras = Ext.urlEncode(this.extraParams); + p = p ? (p + '&' + extras) : extras; + } + + var url = o.url || this.url; + if(typeof url == 'function'){ + url = url.call(o.scope||window, o); + } + + if(o.form){ + var form = Ext.getDom(o.form); + url = url || form.action; + + var enctype = form.getAttribute("enctype"); + if(o.isUpload || (enctype && enctype.toLowerCase() == 'multipart/form-data')){ + return this.doFormUpload(o, p, url); + } + var f = Ext.lib.Ajax.serializeForm(form); + p = p ? (p + '&' + f) : f; + } + + var hs = o.headers; + if(this.defaultHeaders){ + hs = Ext.apply(hs || {}, this.defaultHeaders); + if(!o.headers){ + o.headers = hs; + } + } + + var cb = { + success: this.handleResponse, + failure: this.handleFailure, + scope: this, + argument: {options: o}, + timeout : this.timeout + }; + + var method = o.method||this.method||(p ? "POST" : "GET"); + + if(method == 'GET' && (this.disableCaching && o.disableCaching !== false) || o.disableCaching === true){ + url += (url.indexOf('?') != -1 ? '&' : '?') + '_dc=' + (new Date().getTime()); + } + + if(typeof o.autoAbort == 'boolean'){ + if(o.autoAbort){ + this.abort(); + } + }else if(this.autoAbort !== false){ + this.abort(); + } + + if((method == 'GET' && p) || o.xmlData){ + url += (url.indexOf('?') != -1 ? '&' : '?') + p; + p = ''; + } + this.transId = Ext.lib.Ajax.request(method, url, cb, p, o); + return this.transId; + }else{ + Ext.callback(o.callback, o.scope, [o, null, null]); + return null; + } + }, + + + isLoading : function(transId){ + if(transId){ + return Ext.lib.Ajax.isCallInProgress(transId); + }else{ + return this.transId ? true : false; + } + }, + + + abort : function(transId){ + if(transId || this.isLoading()){ + Ext.lib.Ajax.abort(transId || this.transId); + } + }, + + + handleResponse : function(response){ + this.transId = false; + var options = response.argument.options; + response.argument = options ? options.argument : null; + this.fireEvent("requestcomplete", this, response, options); + Ext.callback(options.success, options.scope, [response, options]); + Ext.callback(options.callback, options.scope, [options, true, response]); + }, + + + handleFailure : function(response, e){ + this.transId = false; + var options = response.argument.options; + response.argument = options ? options.argument : null; + this.fireEvent("requestexception", this, response, options, e); + Ext.callback(options.failure, options.scope, [response, options]); + Ext.callback(options.callback, options.scope, [options, false, response]); + }, + + + doFormUpload : function(o, ps, url){ + var id = Ext.id(); + var frame = document.createElement('iframe'); + frame.id = id; + frame.name = id; + frame.className = 'x-hidden'; + if(Ext.isIE){ + frame.src = Ext.SSL_SECURE_URL; + } + document.body.appendChild(frame); + + if(Ext.isIE){ + document.frames[id].name = id; + } + + var form = Ext.getDom(o.form); + form.target = id; + form.method = 'POST'; + form.enctype = form.encoding = 'multipart/form-data'; + if(url){ + form.action = url; + } + + var hiddens, hd; + if(ps){ + hiddens = []; + ps = Ext.urlDecode(ps, false); + for(var k in ps){ + if(ps.hasOwnProperty(k)){ + hd = document.createElement('input'); + hd.type = 'hidden'; + hd.name = k; + hd.value = ps[k]; + form.appendChild(hd); + hiddens.push(hd); + } + } + } + + function cb(){ + var r = { + responseText : '', + responseXML : null + }; + + r.argument = o ? o.argument : null; + + try { + var doc; + if(Ext.isIE){ + doc = frame.contentWindow.document; + }else { + doc = (frame.contentDocument || window.frames[id].document); + } + if(doc && doc.body){ + r.responseText = doc.body.innerHTML; + } + if(doc && doc.XMLDocument){ + r.responseXML = doc.XMLDocument; + }else { + r.responseXML = doc; + } + } + catch(e) { + + } + + Ext.EventManager.removeListener(frame, 'load', cb, this); + + this.fireEvent("requestcomplete", this, r, o); + Ext.callback(o.success, o.scope, [r, o]); + Ext.callback(o.callback, o.scope, [o, true, r]); + + setTimeout(function(){document.body.removeChild(frame);}, 100); + } + + Ext.EventManager.on(frame, 'load', cb, this); + form.submit(); + + if(hiddens){ + for(var i = 0, len = hiddens.length; i < len; i++){ + form.removeChild(hiddens[i]); + } + } + } +}); + + +Ext.Ajax = new Ext.data.Connection({ + + + + + + + + + + + + + + + + + + + autoAbort : false, + + + serializeForm : function(form){ + return Ext.lib.Ajax.serializeForm(form); + } +}); + +Ext.UpdateManager = function(el, forceNew){ + el = Ext.get(el); + if(!forceNew && el.updateManager){ + return el.updateManager; + } + + this.el = el; + + this.defaultUrl = null; + + this.addEvents({ + + "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); + + if(!this.renderer){ + + 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(url, params, callback, discardUrl){ + if(this.fireEvent("beforeupdate", this.el, url, params) !== false){ + var method = this.method, cfg; + if(typeof url == "object"){ + cfg = url; + url = cfg.url; + params = params || cfg.params; + callback = callback || cfg.callback; + discardUrl = discardUrl || cfg.discardUrl; + if(callback && cfg.scope){ + callback = callback.createDelegate(cfg.scope); + } + if(typeof cfg.method != "undefined"){method = cfg.method;}; + if(typeof cfg.nocache != "undefined"){this.disableCaching = cfg.nocache;}; + if(typeof cfg.text != "undefined"){this.indicatorText = '
'+cfg.text+"
";}; + if(typeof cfg.scripts != "undefined"){this.loadScripts = cfg.scripts;}; + if(typeof cfg.timeout != "undefined"){this.timeout = cfg.timeout;}; + } + this.showLoading(); + if(!discardUrl){ + this.defaultUrl = url; + } + if(typeof url == "function"){ + url = url.call(this); + } + + method = method || (params ? "POST" : "GET"); + if(method == "GET"){ + url = this.prepareUrl(url); + } + + var o = Ext.apply(cfg ||{}, { + url : url, + params: params, + success: this.successDelegate, + failure: this.failureDelegate, + callback: undefined, + timeout: (this.timeout*1000), + argument: {"url": url, "form": null, "callback": callback, "params": params} + }); + + this.transaction = Ext.Ajax.request(o); + } + }, + + + formUpdate : function(form, url, reset, callback){ + if(this.fireEvent("beforeupdate", this.el, form, url) !== false){ + if(typeof url == "function"){ + url = url.call(this); + } + form = Ext.getDom(form) + this.transaction = Ext.Ajax.request({ + form: form, + url:url, + success: this.successDelegate, + failure: this.failureDelegate, + timeout: (this.timeout*1000), + argument: {"url": url, "form": form, "callback": callback, "reset": reset} + }); + this.showLoading.defer(1, this); + } + }, + + + refresh : function(callback){ + if(this.defaultUrl == null){ + return; + } + this.update(this.defaultUrl, null, callback, true); + }, + + + startAutoRefresh : function(interval, url, params, callback, refreshNow){ + if(refreshNow){ + this.update(url || this.defaultUrl, params, callback, true); + } + if(this.autoRefreshProcId){ + clearInterval(this.autoRefreshProcId); + } + this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [url || this.defaultUrl, params, callback, true]), interval*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 append = "_dc=" + (new Date().getTime()); + if(url.indexOf("?") !== -1){ + url += "&" + append; + }else{ + url += "?" + append; + } + } + return url; + }, + + + processSuccess : function(response){ + this.transaction = null; + if(response.argument.form && response.argument.reset){ + try{ + response.argument.form.reset(); + }catch(e){} + } + if(this.loadScripts){ + this.renderer.render(this.el, response, this, + this.updateComplete.createDelegate(this, [response])); + }else{ + this.renderer.render(this.el, response, this); + this.updateComplete(response); + } + }, + + updateComplete : function(response){ + this.fireEvent("update", this.el, response); + if(typeof response.argument.callback == "function"){ + response.argument.callback(this.el, true, response); + } + }, + + + processFailure : function(response){ + this.transaction = null; + this.fireEvent("failure", this.el, response); + if(typeof response.argument.callback == "function"){ + response.argument.callback(this.el, false, response); + } + }, + + + setRenderer : function(renderer){ + this.renderer = renderer; + }, + + getRenderer : function(){ + return this.renderer; + }, + + + setDefaultUrl : function(defaultUrl){ + this.defaultUrl = defaultUrl; + }, + + + abort : function(){ + if(this.transaction){ + Ext.Ajax.abort(this.transaction); + } + }, + + + isUpdating : function(){ + if(this.transaction){ + return Ext.Ajax.isLoading(this.transaction); + } + return false; + } +}); + + + Ext.UpdateManager.defaults = { + + timeout : 30, + + + loadScripts : false, + + + sslBlankUrl : (Ext.SSL_SECURE_URL || "javascript:false"), + + disableCaching : false, + + showLoadIndicator : true, + + indicatorText : '
Loading...
' + }; + + +Ext.UpdateManager.updateElement = function(el, url, params, options){ + var um = Ext.get(el, true).getUpdateManager(); + Ext.apply(um, options); + um.update(url, params, options ? options.callback : null); +}; + +Ext.UpdateManager.update = Ext.UpdateManager.updateElement; + +Ext.UpdateManager.BasicRenderer = function(){}; + +Ext.UpdateManager.BasicRenderer.prototype = { + + render : function(el, response, updateManager, callback){ + el.update(response.responseText, updateManager.loadScripts, callback); + } +}; + + + + + + +Date.parseFunctions = {count:0}; + +Date.parseRegexes = []; + +Date.formatFunctions = {count:0}; + + +Date.prototype.dateFormat = function(format) { + if (Date.formatFunctions[format] == null) { + Date.createNewFormat(format); + } + var func = Date.formatFunctions[format]; + return this[func](); +}; + + + +Date.prototype.format = Date.prototype.dateFormat; + + +Date.createNewFormat = function(format) { + var funcName = "format" + Date.formatFunctions.count++; + Date.formatFunctions[format] = funcName; + var code = "Date.prototype." + funcName + " = function(){return "; + var special = false; + var ch = ''; + for (var i = 0; i < format.length; ++i) { + ch = format.charAt(i); + if (!special && ch == "\\") { + special = true; + } + else if (special) { + special = false; + code += "'" + String.escape(ch) + "' + "; + } + else { + code += Date.getFormatCode(ch); + } + } + eval(code.substring(0, code.length - 3) + ";}"); +}; + + +Date.getFormatCode = function(character) { + switch (character) { + 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(character) + "' + "; + } +}; + + +Date.parseDate = function(input, format) { + if (Date.parseFunctions[format] == null) { + Date.createParser(format); + } + var func = Date.parseFunctions[format]; + return Date[func](input); +}; + + +Date.createParser = function(format) { + var funcName = "parse" + Date.parseFunctions.count++; + var regexNum = Date.parseRegexes.length; + var currentGroup = 1; + Date.parseFunctions[format] = funcName; + + var code = "Date." + funcName + " = function(input){\n" + + "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, o, z, v;\n" + + "var d = new Date();\n" + + "y = d.getFullYear();\n" + + "m = d.getMonth();\n" + + "d = d.getDate();\n" + + "var results = input.match(Date.parseRegexes[" + regexNum + "]);\n" + + "if (results && results.length > 0) {"; + var regex = ""; + + var special = false; + var ch = ''; + for (var i = 0; i < format.length; ++i) { + ch = format.charAt(i); + if (!special && ch == "\\") { + special = true; + } + else if (special) { + special = false; + regex += String.escape(ch); + } + else { + var obj = Date.formatCodeToRegex(ch, currentGroup); + currentGroup += obj.g; + regex += obj.s; + if (obj.g && obj.c) { + code += obj.c; + } + } + } + + code += "if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n" + + "{v = new Date(y, m, d, h, i, s);}\n" + + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n" + + "{v = new Date(y, m, d, h, i);}\n" + + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n" + + "{v = new Date(y, m, d, h);}\n" + + "else if (y >= 0 && m >= 0 && d > 0)\n" + + "{v = new Date(y, m, d);}\n" + + "else if (y >= 0 && m >= 0)\n" + + "{v = new Date(y, m);}\n" + + "else if (y >= 0)\n" + + "{v = new Date(y);}\n" + + "}return (v && (z || o))?\n" + + " ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n" + + " v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n" + + ";}"; + + Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$"); + eval(code); +}; + + +Date.formatCodeToRegex = function(character, currentGroup) { + switch (character) { + case "D": + return {g:0, + c:null, + s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"}; + case "j": + return {g:1, + c:"d = parseInt(results[" + currentGroup + "], 10);\n", + s:"(\\d{1,2})"}; + case "d": + return {g:1, + c:"d = parseInt(results[" + currentGroup + "], 10);\n", + s:"(\\d{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[" + currentGroup + "].substring(0, 3)], 10);\n", + s:"(" + Date.monthNames.join("|") + ")"}; + case "M": + return {g:1, + c:"m = parseInt(Date.monthNumbers[results[" + currentGroup + "]], 10);\n", + s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"}; + case "n": + return {g:1, + c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n", + s:"(\\d{1,2})"}; + case "m": + return {g:1, + c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n", + s:"(\\d{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[" + currentGroup + "], 10);\n", + s:"(\\d{4})"}; + case "y": + return {g:1, + c:"var ty = parseInt(results[" + currentGroup + "], 10);\n" + + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n", + s:"(\\d{1,2})"}; + case "a": + return {g:1, + c:"if (results[" + currentGroup + "] == '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[" + currentGroup + "] == 'AM') {\n" + + "if (h == 12) { h = 0; }\n" + + "} else { if (h < 12) { h += 12; }}", + s:"(AM|PM)"}; + case "g": + case "G": + return {g:1, + c:"h = parseInt(results[" + currentGroup + "], 10);\n", + s:"(\\d{1,2})"}; + case "h": + case "H": + return {g:1, + c:"h = parseInt(results[" + currentGroup + "], 10);\n", + s:"(\\d{2})"}; + case "i": + return {g:1, + c:"i = parseInt(results[" + currentGroup + "], 10);\n", + s:"(\\d{2})"}; + case "s": + return {g:1, + c:"s = parseInt(results[" + currentGroup + "], 10);\n", + s:"(\\d{2})"}; + case "O": + return {g:1, + c:[ + "o = results[", currentGroup, "];\n", + "var sn = o.substring(0,1);\n", + "var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);\n", + "var mn = o.substring(3,5) % 60;\n", + "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n", + " (sn + String.leftPad(hr, 2, 0) + String.leftPad(mn, 2, 0)) : null;\n" + ].join(""), + s:"([+\-]\\d{4})"}; + case "T": + return {g:0, + c:null, + s:"[A-Z]{1,4}"}; + case "Z": + return {g:1, + c:"z = results[" + currentGroup + "];\n" + + "z = (-43200 <= z*1 && z*1 <= 50400)? z : null;\n", + s:"([+\-]?\\d{1,5})"}; + default: + return {g:0, + c:null, + s:String.escape(character)}; + } +}; + + +Date.prototype.getTimezone = function() { + return this.toString().replace(/^.*? ([A-Z]{1,4})[\-+][0-9]{4} .*$/, "$1"); +}; + + +Date.prototype.getGMTOffset = function() { + return (this.getTimezoneOffset() > 0 ? "-" : "+") + + String.leftPad(Math.abs(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 jan1 = new Date(this.getFullYear(), 0, 1); + var then = (7 - jan1.getDay() + 4); + return String.leftPad(((now - then) / 7) + 1, 2, "0"); +}; + + +Date.prototype.isLeapYear = function() { + var year = this.getFullYear(); + return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year))); +}; + + +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(clone){ + if(clone){ + 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 back_year = Math.ceil(n/12); + var month = (n % 12) ? 12 - n % 12 : 0 ; + this.setFullYear(this.getFullYear() - back_year); + return Date.brokenSetMonth.call(this, month); + } else { + return Date.brokenSetMonth.apply(this, arguments); + } + }; +} + + +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(interval, value){ + var d = this.clone(); + if (!interval || value === 0) return d; + switch(interval.toLowerCase()){ + case Date.MILLI: + d.setMilliseconds(this.getMilliseconds() + value); + break; + case Date.SECOND: + d.setSeconds(this.getSeconds() + value); + break; + case Date.MINUTE: + d.setMinutes(this.getMinutes() + value); + break; + case Date.HOUR: + d.setHours(this.getHours() + value); + break; + case Date.DAY: + d.setDate(this.getDate() + value); + break; + case Date.MONTH: + var day = this.getDate(); + if(day > 28){ + day = Math.min(day, this.getFirstDateOfMonth().add('mo', value).getLastDateOfMonth().getDate()); + } + d.setDate(day); + d.setMonth(this.getMonth() + value); + break; + case Date.YEAR: + d.setFullYear(this.getFullYear() + value); + break; + } + return d; +}; + +Ext.util.DelayedTask = function(fn, scope, args){ + var id = null, d, t; + + var call = function(){ + var now = new Date().getTime(); + if(now - t >= d){ + clearInterval(id); + id = null; + fn.apply(scope, args || []); + } + }; + + this.delay = function(delay, newFn, newScope, newArgs){ + if(id && delay != d){ + this.cancel(); + } + d = delay; + t = new Date().getTime(); + fn = newFn || fn; + scope = newScope || scope; + args = newArgs || args; + if(!id){ + id = setInterval(call, d); + } + }; + + + this.cancel = function(){ + if(id){ + clearInterval(id); + id = null; + } + }; +}; +Ext.util.TaskRunner = function(interval){ + interval = interval || 10; + var tasks = [], removeQueue = []; + var id = 0; + var running = false; + + var stopThread = function(){ + running = false; + clearInterval(id); + id = 0; + }; + + var startThread = function(){ + if(!running){ + running = true; + id = setInterval(runTasks, interval); + } + }; + + var removeTask = function(task){ + removeQueue.push(task); + if(task.onStop){ + task.onStop(); + } + }; + + var runTasks = function(){ + if(removeQueue.length > 0){ + for(var i = 0, len = removeQueue.length; i < len; i++){ + tasks.remove(removeQueue[i]); + } + removeQueue = []; + if(tasks.length < 1){ + stopThread(); + return; + } + } + var now = new Date().getTime(); + for(var i = 0, len = tasks.length; i < len; ++i){ + var t = tasks[i]; + var itime = now - t.taskRunTime; + if(t.interval <= itime){ + var rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]); + t.taskRunTime = now; + if(rt === false || t.taskRunCount === t.repeat){ + removeTask(t); + return; + } + } + if(t.duration && t.duration <= (now - t.taskStartTime)){ + removeTask(t); + } + } + }; + + + this.start = function(task){ + tasks.push(task); + task.taskStartTime = new Date().getTime(); + task.taskRunTime = 0; + task.taskRunCount = 0; + startThread(); + return task; + }; + + this.stop = function(task){ + removeTask(task); + return task; + }; + + this.stopAll = function(){ + stopThread(); + for(var i = 0, len = tasks.length; i < len; i++){ + if(tasks[i].onStop){ + tasks[i].onStop(); + } + } + tasks = []; + removeQueue = []; + }; +}; + +Ext.TaskMgr = new Ext.util.TaskRunner(); + +Ext.util.MixedCollection = function(allowFunctions, keyFn){ + this.items = []; + this.map = {}; + this.keys = []; + this.length = 0; + this.addEvents({ + + "clear" : true, + + "add" : true, + + "replace" : true, + + "remove" : true, + "sort" : true + }); + this.allowFunctions = allowFunctions === true; + if(keyFn){ + this.getKey = keyFn; + } + Ext.util.MixedCollection.superclass.constructor.call(this); +}; + +Ext.extend(Ext.util.MixedCollection, Ext.util.Observable, { + allowFunctions : false, + + + add : function(key, o){ + if(arguments.length == 1){ + o = arguments[0]; + key = this.getKey(o); + } + if(typeof key == "undefined" || key === null){ + this.length++; + this.items.push(o); + this.keys.push(null); + }else{ + var old = this.map[key]; + if(old){ + return this.replace(key, o); + } + this.length++; + this.items.push(o); + this.map[key] = o; + this.keys.push(key); + } + this.fireEvent("add", this.length-1, o, key); + return o; + }, + + + getKey : function(o){ + return o.id; + }, + + + replace : function(key, o){ + if(arguments.length == 1){ + o = arguments[0]; + key = this.getKey(o); + } + var old = this.item(key); + if(typeof key == "undefined" || key === null || typeof old == "undefined"){ + return this.add(key, o); + } + var index = this.indexOfKey(key); + this.items[index] = o; + this.map[key] = o; + this.fireEvent("replace", key, old, o); + return o; + }, + + + addAll : function(objs){ + if(arguments.length > 1 || objs instanceof Array){ + var args = arguments.length > 1 ? arguments : objs; + for(var i = 0, len = args.length; i < len; i++){ + this.add(args[i]); + } + }else{ + for(var key in objs){ + if(this.allowFunctions || typeof objs[key] != "function"){ + this.add(key, objs[key]); + } + } + } + }, + + + each : function(fn, scope){ + var items = [].concat(this.items); + for(var i = 0, len = items.length; i < len; i++){ + if(fn.call(scope || items[i], items[i], i, len) === false){ + break; + } + } + }, + + + eachKey : function(fn, scope){ + for(var i = 0, len = this.keys.length; i < len; i++){ + fn.call(scope || window, this.keys[i], this.items[i], i, len); + } + }, + + + find : function(fn, scope){ + for(var i = 0, len = this.items.length; i < len; i++){ + if(fn.call(scope || window, this.items[i], this.keys[i])){ + return this.items[i]; + } + } + return null; + }, + + + insert : function(index, key, o){ + if(arguments.length == 2){ + o = arguments[1]; + key = this.getKey(o); + } + if(index >= this.length){ + return this.add(key, o); + } + this.length++; + this.items.splice(index, 0, o); + if(typeof key != "undefined" && key != null){ + this.map[key] = o; + } + this.keys.splice(index, 0, key); + this.fireEvent("add", index, o, key); + return o; + }, + + + remove : function(o){ + return this.removeAt(this.indexOf(o)); + }, + + + removeAt : function(index){ + if(index < this.length && index >= 0){ + this.length--; + var o = this.items[index]; + this.items.splice(index, 1); + var key = this.keys[index]; + if(typeof key != "undefined"){ + delete this.map[key]; + } + this.keys.splice(index, 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 item = typeof this.map[key] != "undefined" ? this.map[key] : this.items[key]; + return typeof item != 'function' || this.allowFunctions ? item : null; + }, + + + itemAt : function(index){ + return this.items[index]; + }, + + + 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(property, dir, fn){ + var dsc = String(dir).toUpperCase() == "DESC" ? -1 : 1; + fn = fn || function(a, b){ + return a-b; + }; + var c = [], k = this.keys, items = this.items; + for(var i = 0, len = items.length; i < len; i++){ + c[c.length] = {key: k[i], value: items[i], index: i}; + } + c.sort(function(a, b){ + var v = fn(a[property], b[property]) * dsc; + if(v == 0){ + v = (a.index < b.index ? -1 : 1); + } + return v; + }); + for(var i = 0, len = c.length; i < len; i++){ + items[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(start, end){ + var items = this.items; + if(items.length < 1){ + return []; + } + start = start || 0; + end = Math.min(typeof end == "undefined" ? this.length-1 : end, this.length-1); + var r = []; + if(start <= end){ + for(var i = start; i <= end; i++) { + r[r.length] = items[i]; + } + }else{ + for(var i = start; i >= end; i--) { + r[r.length] = items[i]; + } + } + return r; + }, + + + filter : function(property, value){ + if(!value.exec){ + value = String(value); + if(value.length == 0){ + return this.clone(); + } + value = new RegExp("^" + Ext.escapeRe(value), "i"); + } + return this.filterBy(function(o){ + return o && value.test(o[property]); + }); + }, + + + filterBy : function(fn, scope){ + 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(scope||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 useHasOwn = {}.hasOwnProperty ? true : false; + + + + + var pad = function(n) { + return n < 10 ? "0" + n : n; + }; + + var m = { + "\b": '\\b', + "\t": '\\t', + "\n": '\\n', + "\f": '\\f', + "\r": '\\r', + '"' : '\\"', + "\\": '\\\\' + }; + + var encodeString = function(s){ + if (/["\\\x00-\x1f]/.test(s)) { + return '"' + s.replace(/([\x00-\x1f\\"])/g, function(a, b) { + var c = m[b]; + if(c){ + return c; + } + c = b.charCodeAt(); + return "\\u00" + + Math.floor(c / 16).toString(16) + + (c % 16).toString(16); + }) + '"'; + } + return '"' + s + '"'; + }; + + var encodeArray = 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 encodeDate = function(o){ + return '"' + o.getFullYear() + "-" + + pad(o.getMonth() + 1) + "-" + + pad(o.getDate()) + "T" + + pad(o.getHours()) + ":" + + pad(o.getMinutes()) + ":" + + pad(o.getSeconds()) + '"'; + }; + + + this.encode = function(o){ + if(typeof o == "undefined" || o === null){ + return "null"; + }else if(o instanceof Array){ + return encodeArray(o); + }else if(o instanceof Date){ + return encodeDate(o); + }else if(typeof o == "string"){ + return encodeString(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(!useHasOwn || 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(json){ + return eval("(" + json + ')'); + }; +})(); + +Ext.encode = Ext.util.JSON.encode; + +Ext.decode = Ext.util.JSON.decode; + + +Ext.util.Format = function(){ + var trimRe = /^\s+|\s+$/g; + return { + + ellipsis : function(value, len){ + if(value && value.length > len){ + return value.substr(0, len-3)+"..."; + } + return value; + }, + + + undef : function(value){ + return typeof value != "undefined" ? value : ""; + }, + + + htmlEncode : function(value){ + return !value ? value : String(value).replace(/&/g, "&").replace(/>/g, ">").replace(/").replace(/</g, "<").replace(/"/g, '"'); + }, + + + trim : function(value){ + return String(value).replace(trimRe, ""); + }, + + + substr : function(value, start, length){ + return String(value).substr(start, length); + }, + + + lowercase : function(value){ + return String(value).toLowerCase(); + }, + + + uppercase : function(value){ + return String(value).toUpperCase(); + }, + + + capitalize : function(value){ + return !value ? value : value.charAt(0).toUpperCase() + value.substr(1).toLowerCase(); + }, + + + call : function(value, fn){ + if(arguments.length > 2){ + var args = Array.prototype.slice.call(arguments, 2); + args.unshift(value); + return eval(fn).apply(window, args); + }else{ + return eval(fn).call(window, value); + } + }, + + + 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); + v = String(v); + var ps = v.split('.'); + var whole = ps[0]; + var sub = ps[1] ? '.'+ ps[1] : '.00'; + var r = /(\d+)(\d{3})/; + while (r.test(whole)) { + whole = whole.replace(r, '$1' + ',' + '$2'); + } + return "$" + whole + sub ; + }, + + + date : function(v, format){ + if(!v){ + return ""; + } + if(!(v instanceof Date)){ + v = new Date(Date.parse(v)); + } + return v.dateFormat(format || "m/d/Y"); + }, + + + dateRenderer : function(format){ + return function(v){ + return Ext.util.Format.date(v, format); + }; + }, + + + stripTagsRE : /<\/?[^>]+>/gi, + + + stripTags : function(v){ + return !v ? v : String(v).replace(this.stripTagsRE, ""); + } + }; +}(); + +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 subIndex = 0; + while(m = re.exec(this.html)){ + var name = m[1], content = m[2]; + st[subIndex] = { + name: name, + index: subIndex, + buffer: [], + tpl : new Ext.Template(content) + }; + if(name){ + st[name] = st[subIndex]; + } + st[subIndex].tpl.compile(); + st[subIndex].tpl.call = this.call.createDelegate(this); + subIndex++; + } + this.subCount = subIndex; + this.subs = st; +}; +Ext.extend(Ext.MasterTemplate, Ext.Template, { + + subTemplateRe : /((?:.|\n)*?)<\/tpl>/gi, + + + add : function(name, values){ + if(arguments.length == 1){ + values = arguments[0]; + name = 0; + } + var s = this.subs[name]; + s.buffer[s.buffer.length] = s.tpl.apply(values); + return this; + }, + + + fill : function(name, values, reset){ + var a = arguments; + if(a.length == 1 || (a.length == 2 && typeof a[1] == "boolean")){ + values = a[0]; + name = 0; + reset = a[1]; + } + if(reset){ + this.reset(); + } + for(var i = 0, len = values.length; i < len; i++){ + this.add(name, values[i]); + } + return this; + }, + + + reset : function(){ + var s = this.subs; + for(var i = 0; i < this.subCount; i++){ + s[i].buffer = []; + } + return this; + }, + + applyTemplate : function(values){ + var s = this.subs; + var replaceIndex = -1; + this.html = this.originalHtml.replace(this.subTemplateRe, function(m, name){ + return s[++replaceIndex].buffer.join(""); + }); + return Ext.MasterTemplate.superclass.applyTemplate.call(this, values); + }, + + 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, config){ + el = Ext.getDom(el); + return new Ext.MasterTemplate(el.value || el.innerHTML, config || ''); +}; +Ext.XTemplate = function(){ + Ext.XTemplate.superclass.constructor.apply(this, arguments); + var s = this.html; + + s = ['', s, ''].join(''); + + var re = /]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/; + + var nameRe = /^]*?for="(.*?)"/; + var ifRe = /^]*?if="(.*?)"/; + var execRe = /^]*?exec="(.*?)"/; + var m, id = 0; + var tpls = []; + + while(m = s.match(re)){ + var m2 = m[0].match(nameRe); + var m3 = m[0].match(ifRe); + var m4 = m[0].match(execRe); + var exp = null, fn = null, exec = null; + var name = m2 && m2[1] ? m2[1] : ''; + if(m3){ + exp = m3 && m3[1] ? m3[1] : null; + if(exp){ + fn = new Function('values', 'parent', 'with(values){ return '+(Ext.util.Format.htmlDecode(exp))+'; }'); + } + } + if(m4){ + exp = m4 && m4[1] ? m4[1] : null; + if(exp){ + exec = new Function('values', 'parent', 'with(values){ '+(Ext.util.Format.htmlDecode(exp))+'; }'); + } + } + if(name){ + switch(name){ + case '.': name = new Function('values', 'parent', 'with(values){ return values; }'); break; + case '..': name = new Function('values', 'parent', 'with(values){ return parent; }'); break; + default: name = new Function('values', 'parent', 'with(values){ return '+name+'; }'); + } + } + tpls.push({ + id: id, + target: name, + exec: exec, + test: fn, + body: m[1]||'' + }); + s = s.replace(m[0], '{xtpl'+ id + '}'); + ++id; + } + for(var i = tpls.length-1; i >= 0; --i){ + this.compileTpl(tpls[i]); + } + this.master = tpls[tpls.length-1]; + this.tpls = tpls; +}; +Ext.extend(Ext.XTemplate, Ext.Template, { + + re : /\{([\w-\.]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, + + applySubTemplate : function(id, values, parent){ + var t = this.tpls[id]; + if(t.test && !t.test.call(this, values, parent)){ + return ''; + } + if(t.exec && t.exec.call(this, values, parent)){ + return ''; + } + var vs = t.target ? t.target.call(this, values, parent) : values; + parent = t.target ? values : parent; + if(t.target && vs instanceof Array){ + var buf = []; + for(var i = 0, len = vs.length; i < len; i++){ + buf[buf.length] = t.compiled.call(this, vs[i], parent); + } + return buf.join(''); + } + return t.compiled.call(this, vs, parent); + }, + + compileTpl : function(tpl){ + var fm = Ext.util.Format; + var useF = this.disableFormats !== true; + var sep = Ext.isGecko ? "+" : ","; + var fn = function(m, name, format, args){ + if(name.substr(0, 4) == 'xtpl'){ + return "'"+ sep +'this.applySubTemplate('+name.substr(4)+', values, parent)'+sep+"'"; + } + var v; + if(name.indexOf('.') != -1){ + v = name; + }else{ + v = "values['" + name + "']"; + } + if(format && useF){ + args = args ? ',' + args : ""; + if(format.substr(0, 5) != "this."){ + format = "fm." + format + '('; + }else{ + format = 'this.call("'+ format.substr(5) + '", '; + args = ", values"; + } + }else{ + args= ''; format = "("+v+" === undefined ? '' : "; + } + return "'"+ sep + format + v + args + ")"+sep+"'"; + }; + var body; + + if(Ext.isGecko){ + body = "tpl.compiled = function(values, parent){ return '" + + tpl.body.replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn) + + "';};"; + }else{ + body = ["tpl.compiled = function(values, parent){ return ['"]; + body.push(tpl.body.replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn)); + body.push("'].join('');};"); + body = body.join(''); + } + eval(body); + return this; + }, + + applyTemplate : function(values){ + return this.master.compiled.call(this, values, {}); + var s = this.subs; + }, + + apply : function(){ + return this.applyTemplate.apply(this, arguments); + }, + + compile : function(){return this;} +}); + +Ext.XTemplate.from = function(el){ + el = Ext.getDom(el); + return new Ext.XTemplate(el.value || el.innerHTML); +}; + +Ext.util.CSS = function(){ + var rules = null; + var doc = document; + + var camelRe = /(-[a-z])/gi; + var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); }; + + return { + + createStyleSheet : function(cssText, id){ + var ss; + var head = doc.getElementsByTagName("head")[0]; + var rules = doc.createElement("style"); + rules.setAttribute("type", "text/css"); + if(id){ + rules.setAttribute("id", id); + } + if(Ext.isIE){ + head.appendChild(rules); + ss = rules.styleSheet; + ss.cssText = cssText; + }else{ + try{ + rules.appendChild(doc.createTextNode(cssText)); + }catch(e){ + rules.cssText = cssText; + } + head.appendChild(rules); + ss = rules.styleSheet ? rules.styleSheet : (rules.sheet || doc.styleSheets[doc.styleSheets.length-1]); + } + this.cacheStyleSheet(ss); + return ss; + }, + + + removeStyleSheet : function(id){ + var existing = doc.getElementById(id); + if(existing){ + existing.parentNode.removeChild(existing); + } + }, + + + swapStyleSheet : function(id, url){ + this.removeStyleSheet(id); + var ss = doc.createElement("link"); + ss.setAttribute("rel", "stylesheet"); + ss.setAttribute("type", "text/css"); + ss.setAttribute("id", id); + ss.setAttribute("href", url); + doc.getElementsByTagName("head")[0].appendChild(ss); + }, + + + refreshCache : function(){ + return this.getRules(true); + }, + + + cacheStyleSheet : function(ss){ + if(!rules){ + rules = {}; + } + try{ + var ssRules = ss.cssRules || ss.rules; + for(var j = ssRules.length-1; j >= 0; --j){ + rules[ssRules[j].selectorText] = ssRules[j]; + } + }catch(e){} + }, + + + getRules : function(refreshCache){ + if(rules == null || refreshCache){ + rules = {}; + var ds = doc.styleSheets; + for(var i =0, len = ds.length; i < len; i++){ + try{ + this.cacheStyleSheet(ds[i]); + }catch(e){} + } + } + return rules; + }, + + + getRule : function(selector, refreshCache){ + var rs = this.getRules(refreshCache); + if(!(selector instanceof Array)){ + return rs[selector]; + } + for(var i = 0; i < selector.length; i++){ + if(rs[selector[i]]){ + return rs[selector[i]]; + } + } + return null; + }, + + + + updateRule : function(selector, property, value){ + if(!(selector instanceof Array)){ + var rule = this.getRule(selector); + if(rule){ + rule.style[property.replace(camelRe, camelFn)] = value; + return true; + } + }else{ + for(var i = 0; i < selector.length; i++){ + if(this.updateRule(selector[i], property, value)){ + return true; + } + } + } + return false; + } + }; +}(); + +Ext.util.ClickRepeater = function(el, config) +{ + this.el = Ext.get(el); + this.el.unselectable(); + + Ext.apply(this, config); + + this.addEvents({ + + "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, + + handleMouseDown : function(){ + clearTimeout(this.timer); + this.el.blur(); + if(this.pressClass){ + this.el.addClass(this.pressClass); + } + this.mousedownTime = new Date(); + + Ext.get(document).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 pressTime = this.mousedownTime.getElapsed(); + if(pressTime < 500){ + return 400; + }else if(pressTime < 1700){ + return 320; + }else if(pressTime < 2600){ + return 250; + }else if(pressTime < 3500){ + return 180; + }else if(pressTime < 4400){ + return 140; + }else if(pressTime < 5300){ + return 80; + }else if(pressTime < 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); + Ext.get(document).un("mouseup", this.handleMouseUp); + this.el.removeClass(this.pressClass); + this.fireEvent("mouseup", this); + } +}); + +Ext.KeyNav = function(el, config){ + this.el = Ext.get(el); + Ext.apply(this, config); + if(!this.disabled){ + this.disabled = true; + this.enable(); + } +}; + +Ext.KeyNav.prototype = { + + disabled : false, + + defaultEventAction: "stopEvent", + + forceKeyDown : false, + + 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, hname){ + 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(this.forceKeyDown || Ext.isIE || Ext.isAir){ + 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(this.forceKeyDown || Ext.isIE || Ext.isAir){ + 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, config, eventName){ + this.el = Ext.get(el); + this.eventName = eventName || "keydown"; + this.bindings = []; + if(config){ + this.addBinding(config); + } + this.enable(); +}; + +Ext.KeyMap.prototype = { + + stopEvent : false, + + + addBinding : function(config){ + if(config instanceof Array){ + for(var i = 0, len = config.length; i < len; i++){ + this.addBinding(config[i]); + } + return; + } + var keyCode = config.key, + shift = config.shift, + ctrl = config.ctrl, + alt = config.alt, + fn = config.fn, + scope = config.scope; + if(typeof keyCode == "string"){ + var ks = []; + var keyString = keyCode.toUpperCase(); + for(var j = 0, len = keyString.length; j < len; j++){ + ks.push(keyString.charCodeAt(j)); + } + keyCode = ks; + } + var keyArray = keyCode instanceof Array; + var handler = function(e){ + if((!shift || e.shiftKey) && (!ctrl || e.ctrlKey) && (!alt || e.altKey)){ + var k = e.getKey(); + if(keyArray){ + for(var i = 0, len = keyCode.length; i < len; i++){ + if(keyCode[i] == k){ + if(this.stopEvent){ + e.stopEvent(); + } + fn.call(scope || window, k, e); + return; + } + } + }else{ + if(k == keyCode){ + if(this.stopEvent){ + e.stopEvent(); + } + fn.call(scope || window, k, e); + } + } + } + }; + this.bindings.push(handler); + }, + + + on : function(key, fn, scope){ + var keyCode, shift, ctrl, alt; + if(typeof key == "object" && !(key instanceof Array)){ + keyCode = key.key; + shift = key.shift; + ctrl = key.ctrl; + alt = key.alt; + }else{ + keyCode = key; + } + this.addBinding({ + key: keyCode, + shift: shift, + ctrl: ctrl, + alt: alt, + fn: fn, + scope: scope + }) + }, + + + 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.handleKeyDown, this); + this.enabled = true; + } + }, + + + disable: function(){ + if(this.enabled){ + this.el.removeListener(this.eventName, this.handleKeyDown, this); + this.enabled = false; + } + } +}; + +Ext.util.TextMetrics = function(){ + var shared; + return { + + measure : function(el, text, fixedWidth){ + if(!shared){ + shared = Ext.util.TextMetrics.Instance(el, fixedWidth); + } + shared.bind(el); + shared.setFixedWidth(fixedWidth || 'auto'); + return shared.getSize(text); + }, + + + createInstance : function(el, fixedWidth){ + return Ext.util.TextMetrics.Instance(el, fixedWidth); + } + }; +}(); + +Ext.util.TextMetrics.Instance = function(bindTo, fixedWidth){ + var ml = new Ext.Element(document.createElement('div')); + document.body.appendChild(ml.dom); + ml.position('absolute'); + ml.setLeftTop(-1000, -1000); + ml.hide(); + + if(fixedWidth){ + ml.setWidth(fixedWidth); + } + + var instance = { + + getSize : function(text){ + ml.update(text); + var s = ml.getSize(); + ml.update(''); + return s; + }, + + + bind : function(el){ + ml.setStyle( + Ext.fly(el).getStyles('font-size','font-style', 'font-weight', 'font-family','line-height') + ); + }, + + + setFixedWidth : function(width){ + ml.setWidth(width); + }, + + + getWidth : function(text){ + ml.dom.style.width = 'auto'; + return this.getSize(text).width; + }, + + + getHeight : function(text){ + return this.getSize(text).height; + } + }; + + instance.bind(bindTo); + + return instance; +}; + +Ext.Element.measureText = Ext.util.TextMetrics.measure; + +Ext.state.Provider = function(){ + + this.addEvents({ + "statechange": true + }); + this.state = {}; + Ext.state.Provider.superclass.constructor.call(this); +}; +Ext.extend(Ext.state.Provider, Ext.util.Observable, { + + get : function(name, defaultValue){ + return typeof this.state[name] == "undefined" ? + defaultValue : this.state[name]; + }, + + + clear : function(name){ + delete this.state[name]; + this.fireEvent("statechange", this, name, null); + }, + + + set : function(name, value){ + this.state[name] = value; + this.fireEvent("statechange", this, name, value); + }, + + + decodeValue : function(cookie){ + var re = /^(a|n|d|b|s|o)\:(.*)$/; + var matches = re.exec(unescape(cookie)); + if(!matches || !matches[1]) return; + var type = matches[1]; + var v = matches[2]; + switch(type){ + case "n": + return parseFloat(v); + case "d": + return new Date(Date.parse(v)); + case "b": + return (v == "1"); + case "a": + var all = []; + var values = v.split("^"); + for(var i = 0, len = values.length; i < len; i++){ + all.push(this.decodeValue(values[i])); + } + return all; + case "o": + var all = {}; + var values = v.split("^"); + for(var i = 0, len = values.length; i < len; i++){ + var kv = values[i].split("="); + all[kv[0]] = this.decodeValue(kv[1]); + } + return all; + 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 flat = ""; + for(var i = 0, len = v.length; i < len; i++){ + flat += this.encodeValue(v[i]); + if(i != len-1) flat += "^"; + } + enc = "a:" + flat; + }else if(typeof v == "object"){ + var flat = ""; + for(var key in v){ + if(typeof v[key] != "function"){ + flat += key + "=" + this.encodeValue(v[key]) + "^"; + } + } + enc = "o:" + flat.substring(0, flat.length-1); + }else{ + enc = "s:" + v; + } + return escape(enc); + } +}); + + +Ext.state.Manager = function(){ + var provider = new Ext.state.Provider(); + + return { + + setProvider : function(stateProvider){ + provider = stateProvider; + }, + + + get : function(key, defaultValue){ + return provider.get(key, defaultValue); + }, + + + set : function(key, value){ + provider.set(key, value); + }, + + + clear : function(key){ + provider.clear(key); + }, + + + getProvider : function(){ + return provider; + } + }; +}(); + + +Ext.state.CookieProvider = function(config){ + 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, config); + this.state = this.readCookies(); +}; + +Ext.extend(Ext.state.CookieProvider, Ext.state.Provider, { + + set : function(name, value){ + if(typeof value == "undefined" || value === null){ + this.clear(name); + return; + } + this.setCookie(name, value); + Ext.state.CookieProvider.superclass.set.call(this, name, value); + }, + + + clear : function(name){ + this.clearCookie(name); + Ext.state.CookieProvider.superclass.clear.call(this, name); + }, + + + readCookies : function(){ + var cookies = {}; + var c = document.cookie + ";"; + var re = /\s?(.*?)=(.*?);/g; + var matches; + while((matches = re.exec(c)) != null){ + var name = matches[1]; + var value = matches[2]; + if(name && name.substring(0,3) == "ys-"){ + cookies[name.substr(3)] = this.decodeValue(value); + } + } + return cookies; + }, + + + setCookie : function(name, value){ + document.cookie = "ys-"+ name + "=" + this.encodeValue(value) + + ((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(name){ + document.cookie = "ys-" + name + "=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 Event=Ext.EventManager; +var Dom=Ext.lib.Dom; + + +Ext.dd.DragDrop = function(id, sGroup, config) { + if (id) { + this.init(id, sGroup, config); + } +}; + +Ext.dd.DragDrop.prototype = { + + + id: null, + + + config: null, + + + dragElId: null, + + + handleElId: null, + + + invalidHandleTypes: null, + + + invalidHandleIds: null, + + + invalidHandleClasses: null, + + + startPageX: 0, + + + startPageY: 0, + + + groups: null, + + + locked: false, + + + lock: function() { this.locked = true; }, + + + unlock: function() { this.locked = false; }, + + + isTarget: true, + + + padding: null, + + + _domRef: null, + + + __ygDragDrop: true, + + + constrainX: false, + + + constrainY: false, + + + minX: 0, + + + maxX: 0, + + + minY: 0, + + + maxY: 0, + + + maintainOffset: false, + + + xTicks: null, + + + yTicks: null, + + + primaryButtonOnly: true, + + + available: false, + + + hasOuterHandles: false, + + + b4StartDrag: function(x, y) { }, + + + startDrag: function(x, y) { }, + + + b4Drag: function(e) { }, + + + onDrag: function(e) { }, + + + onDragEnter: function(e, id) { }, + + + b4DragOver: function(e) { }, + + + onDragOver: function(e, id) { }, + + + b4DragOut: function(e) { }, + + + onDragOut: function(e, id) { }, + + + b4DragDrop: function(e) { }, + + + onDragDrop: function(e, id) { }, + + + onInvalidDrop: function(e) { }, + + + b4EndDrag: function(e) { }, + + + endDrag: function(e) { }, + + + b4MouseDown: function(e) { }, + + + onMouseDown: function(e) { }, + + + onMouseUp: function(e) { }, + + + onAvailable: function () { + }, + + + defaultPadding : {left:0, right:0, top:0, bottom:0}, + + + constrainTo : function(constrainTo, pad, inContent){ + if(typeof pad == "number"){ + pad = {left: pad, right:pad, top:pad, bottom:pad}; + } + pad = pad || this.defaultPadding; + var b = Ext.get(this.getEl()).getBox(); + var ce = Ext.get(constrainTo); + var s = ce.getScroll(); + var c, cd = ce.dom; + if(cd == document.body){ + c = { x: s.left, y: s.top, width: Ext.lib.Dom.getViewWidth(), height: Ext.lib.Dom.getViewHeight()}; + }else{ + xy = ce.getXY(); + c = {x : xy[0]+s.left, y: xy[1]+s.top, width: cd.clientWidth, height: cd.clientHeight}; + } + + + var topSpace = b.y - c.y; + var leftSpace = b.x - c.x; + + this.resetConstraints(); + this.setXConstraint(leftSpace - (pad.left||0), + c.width - leftSpace - b.width - (pad.right||0) + ); + this.setYConstraint(topSpace - (pad.top||0), + c.height - topSpace - 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, sGroup, config) { + this.initTarget(id, sGroup, config); + Event.on(this.id, "mousedown", this.handleMouseDown, this); + + }, + + + initTarget: function(id, sGroup, config) { + + + this.config = config || {}; + + + this.DDM = Ext.dd.DDM; + + this.groups = {}; + + + + if (typeof id !== "string") { + id = Ext.id(id); + } + + + this.id = id; + + + this.addToGroup((sGroup) ? sGroup : "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(iTop, iRight, iBot, iLeft) { + + if (!iRight && 0 !== iRight) { + this.padding = [iTop, iTop, iTop, iTop]; + } else if (!iBot && 0 !== iBot) { + this.padding = [iTop, iRight, iTop, iRight]; + } else { + this.padding = [iTop, iRight, iBot, iLeft]; + } + }, + + + setInitPosition: function(diffX, diffY) { + var el = this.getEl(); + + if (!this.DDM.verifyEl(el)) { + return; + } + + var dx = diffX || 0; + var dy = diffY || 0; + + var p = Dom.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 || Dom.getXY( this.getEl() ); + this.deltaSetXY = null; + + this.startPageX = p[0]; + this.startPageY = p[1]; + }, + + + addToGroup: function(sGroup) { + this.groups[sGroup] = true; + this.DDM.regDragDrop(this, sGroup); + }, + + + removeFromGroup: function(sGroup) { + if (this.groups[sGroup]) { + delete this.groups[sGroup]; + } + + this.DDM.removeDDFromGroup(this, sGroup); + }, + + + 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); + } + Event.on(id, "mousedown", + this.handleMouseDown, this); + this.setHandleElId(id); + + this.hasOuterHandles = true; + }, + + + unreg: function() { + Event.un(this.id, "mousedown", + this.handleMouseDown); + this._domRef = null; + this.DDM._remove(this); + }, + + destroy : function(){ + this.unreg(); + }, + + + 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 target = e.getTarget(); + return ( this.isValidHandleChild(target) && + (this.id == this.handleElId || + this.DDM.handleWasClicked(target, this.id)) ); + }, + + + addInvalidHandleType: function(tagName) { + var type = tagName.toUpperCase(); + this.invalidHandleTypes[type] = type; + }, + + + addInvalidHandleId: function(id) { + if (typeof id !== "string") { + id = Ext.id(id); + } + this.invalidHandleIds[id] = id; + }, + + + addInvalidHandleClass: function(cssClass) { + this.invalidHandleClasses.push(cssClass); + }, + + + removeInvalidHandleType: function(tagName) { + var type = tagName.toUpperCase(); + + delete this.invalidHandleTypes[type]; + }, + + + removeInvalidHandleId: function(id) { + if (typeof id !== "string") { + id = Ext.id(id); + } + delete this.invalidHandleIds[id]; + }, + + + removeInvalidHandleClass: function(cssClass) { + for (var i=0, len=this.invalidHandleClasses.length; i= this.minX; i = i - iTickSize) { + if (!tickMap[i]) { + this.xTicks[this.xTicks.length] = i; + tickMap[i] = true; + } + } + + for (i = this.initPageX; i <= this.maxX; i = i + iTickSize) { + if (!tickMap[i]) { + this.xTicks[this.xTicks.length] = i; + tickMap[i] = true; + } + } + + this.xTicks.sort(this.DDM.numericSort) ; + }, + + + setYTicks: function(iStartY, iTickSize) { + this.yTicks = []; + this.yTickSize = iTickSize; + + var tickMap = {}; + + for (var i = this.initPageY; i >= this.minY; i = i - iTickSize) { + if (!tickMap[i]) { + this.yTicks[this.yTicks.length] = i; + tickMap[i] = true; + } + } + + for (i = this.initPageY; i <= this.maxY; i = i + iTickSize) { + if (!tickMap[i]) { + this.yTicks[this.yTicks.length] = i; + tickMap[i] = true; + } + } + + this.yTicks.sort(this.DDM.numericSort) ; + }, + + + setXConstraint: function(iLeft, iRight, iTickSize) { + this.leftConstraint = iLeft; + this.rightConstraint = iRight; + + this.minX = this.initPageX - iLeft; + this.maxX = this.initPageX + iRight; + if (iTickSize) { this.setXTicks(this.initPageX, iTickSize); } + + 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, iDown, iTickSize) { + this.topConstraint = iUp; + this.bottomConstraint = iDown; + + this.minY = this.initPageY - iUp; + this.maxY = this.initPageY + iDown; + if (iTickSize) { this.setYTicks(this.initPageY, iTickSize); } + + 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, tickArray) { + + if (!tickArray) { + + + return val; + } else if (tickArray[0] >= val) { + + + return tickArray[0]; + } else { + for (var i=0, len=tickArray.length; i= val) { + var diff1 = val - tickArray[i]; + var diff2 = tickArray[next] - val; + return (diff2 > diff1) ? tickArray[i] : tickArray[next]; + } + } + + + + return tickArray[tickArray.length - 1]; + } + }, + + + toString: function() { + return ("DragDrop " + this.id); + } + +}; + +})(); + + + + +if (!Ext.dd.DragDropMgr) { + + +Ext.dd.DragDropMgr = function() { + + var Event = 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(sMethod, args) { + 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[sMethod].apply(oDD, args); + } + } + }, + + + _onLoad: function() { + + this.init(); + + + Event.on(document, "mouseup", this.handleMouseUp, this, true); + Event.on(document, "mousemove", this.handleMouseMove, this, true); + Event.on(window, "unload", this._onUnload, this, true); + Event.on(window, "resize", this._onResize, this, true); + + + }, + + + _onResize: function(e) { + this._execOnAll("resetConstraints", []); + }, + + + lock: function() { this.locked = true; }, + + + unlock: function() { this.locked = false; }, + + + isLocked: function() { return this.locked; }, + + + locationCache: {}, + + + useCache: true, + + + clickPixelThresh: 3, + + + clickTimeThresh: 350, + + + dragThreshMet: false, + + + clickTimeout: null, + + + startX: 0, + + + startY: 0, + + + regDragDrop: function(oDD, sGroup) { + if (!this.initialized) { this.init(); } + + if (!this.ids[sGroup]) { + this.ids[sGroup] = {}; + } + this.ids[sGroup][oDD.id] = oDD; + }, + + + removeDDFromGroup: function(oDD, sGroup) { + if (!this.ids[sGroup]) { + this.ids[sGroup] = {}; + } + + var obj = this.ids[sGroup]; + if (obj && obj[oDD.id]) { + delete obj[oDD.id]; + } + }, + + + _remove: function(oDD) { + for (var g in oDD.groups) { + if (g && this.ids[g][oDD.id]) { + delete this.ids[g][oDD.id]; + } + } + delete this.handleIds[oDD.id]; + }, + + + regHandle: function(sDDId, sHandleId) { + if (!this.handleIds[sDDId]) { + this.handleIds[sDDId] = {}; + } + this.handleIds[sDDId][sHandleId] = sHandleId; + }, + + + isDragDrop: function(id) { + return ( this.getDDById(id) ) ? true : false; + }, + + + getRelated: function(p_oDD, bTargetsOnly) { + var oDDs = []; + for (var i in p_oDD.groups) { + for (j in this.ids[i]) { + var dd = this.ids[i][j]; + if (! this.isTypeOfDD(dd)) { + continue; + } + if (!bTargetsOnly || dd.isTarget) { + oDDs[oDDs.length] = dd; + } + } + } + + return oDDs; + }, + + + isLegalTarget: function (oDD, oTargetDD) { + var targets = this.getRelated(oDD, true); + for (var i=0, len=targets.length;i this.clickPixelThresh || + diffY > this.clickPixelThresh) { + this.startDrag(this.startX, this.startY); + } + } + + if (this.dragThreshMet) { + this.dragCurrent.b4Drag(e); + this.dragCurrent.onDrag(e); + if(!this.dragCurrent.moveOnly){ + this.fireEvents(e, false); + } + } + + this.stopEvent(e); + + return true; + }, + + + fireEvents: function(e, isDrop) { + var dc = this.dragCurrent; + + + + if (!dc || dc.isLocked()) { + return; + } + + var pt = e.getPoint(); + + + var oldOvers = []; + + var outEvts = []; + var overEvts = []; + var dropEvts = []; + var enterEvts = []; + + + + for (var i in this.dragOvers) { + + var ddo = this.dragOvers[i]; + + if (! this.isTypeOfDD(ddo)) { + continue; + } + + if (! this.isOverTarget(pt, ddo, this.mode)) { + outEvts.push( ddo ); + } + + oldOvers[i] = true; + delete this.dragOvers[i]; + } + + for (var sGroup in dc.groups) { + + if ("string" != typeof sGroup) { + continue; + } + + for (i in this.ids[sGroup]) { + var oDD = this.ids[sGroup][i]; + if (! this.isTypeOfDD(oDD)) { + continue; + } + + if (oDD.isTarget && !oDD.isLocked() && oDD != dc) { + if (this.isOverTarget(pt, oDD, this.mode)) { + + if (isDrop) { + dropEvts.push( oDD ); + + } else { + + + if (!oldOvers[oDD.id]) { + enterEvts.push( oDD ); + + } else { + overEvts.push( oDD ); + } + + this.dragOvers[oDD.id] = oDD; + } + } + } + } + } + + if (this.mode) { + if (outEvts.length) { + dc.b4DragOut(e, outEvts); + dc.onDragOut(e, outEvts); + } + + if (enterEvts.length) { + dc.onDragEnter(e, enterEvts); + } + + if (overEvts.length) { + dc.b4DragOver(e, overEvts); + dc.onDragOver(e, overEvts); + } + + if (dropEvts.length) { + dc.b4DragDrop(e, dropEvts); + dc.onDragDrop(e, dropEvts); + } + + } else { + + var len = 0; + for (i=0, len=outEvts.length; i 2000) { + } else { + setTimeout(DDM._addListeners, 10); + if (document && document.body) { + DDM._timeoutCount += 1; + } + } + } + }, + + + handleWasClicked: function(node, id) { + if (this.isHandle(id, node.id)) { + return true; + } else { + + var p = node.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, sGroup, config) { + if (id) { + this.init(id, sGroup, config); + } +}; + +Ext.extend(Ext.dd.DD, Ext.dd.DragDrop, { + + + scroll: true, + + + autoOffset: function(iPageX, iPageY) { + var x = iPageX - this.startPageX; + var y = iPageY - this.startPageY; + this.setDelta(x, y); + }, + + + setDelta: function(iDeltaX, iDeltaY) { + this.deltaX = iDeltaX; + this.deltaY = iDeltaY; + }, + + + setDragElPos: function(iPageX, iPageY) { + + + + var el = this.getDragEl(); + this.alignElWithMouse(el, iPageX, iPageY); + }, + + + alignElWithMouse: function(el, iPageX, iPageY) { + var oCoord = this.getTargetCoord(iPageX, iPageY); + var fly = el.dom ? el : Ext.fly(el); + if (!this.deltaSetXY) { + var aCoord = [oCoord.x, oCoord.y]; + fly.setXY(aCoord); + var newLeft = fly.getLeft(true); + var newTop = fly.getTop(true); + this.deltaSetXY = [ newLeft - oCoord.x, newTop - oCoord.y ]; + } else { + fly.setLeftTop(oCoord.x + this.deltaSetXY[0], oCoord.y + this.deltaSetXY[1]); + } + + this.cachePosition(oCoord.x, oCoord.y); + this.autoScroll(oCoord.x, oCoord.y, el.offsetHeight, el.offsetWidth); + return oCoord; + }, + + + cachePosition: function(iPageX, iPageY) { + if (iPageX) { + this.lastPageX = iPageX; + this.lastPageY = iPageY; + } else { + var aCoord = Ext.lib.Dom.getXY(this.getEl()); + this.lastPageX = aCoord[0]; + this.lastPageY = aCoord[1]; + } + }, + + + autoScroll: function(x, y, h, w) { + + if (this.scroll) { + + var clientH = Ext.lib.Dom.getViewWidth(); + + + var clientW = Ext.lib.Dom.getViewHeight(); + + + var st = this.DDM.getScrollTop(); + + + var sl = this.DDM.getScrollLeft(); + + + var bot = h + y; + + + var right = w + x; + + + + + var toBot = (clientH + st - y - this.deltaY); + + + var toRight = (clientW + sl - x - this.deltaX); + + + + + var thresh = 40; + + + + + var scrAmt = (document.all) ? 80 : 30; + + + + if ( bot > clientH && toBot < thresh ) { + window.scrollTo(sl, st + scrAmt); + } + + + + if ( y < st && st > 0 && y - st < thresh ) { + window.scrollTo(sl, st - scrAmt); + } + + + + if ( right > clientW && toRight < thresh ) { + window.scrollTo(sl + scrAmt, st); + } + + + + if ( x < sl && sl > 0 && x - sl < thresh ) { + window.scrollTo(sl - scrAmt, st); + } + } + }, + + + getTargetCoord: function(iPageX, iPageY) { + + + var x = iPageX - this.deltaX; + var y = iPageY - 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(e.getPageX(), + e.getPageY()); + }, + + + b4Drag: function(e) { + this.setDragElPos(e.getPageX(), + e.getPageY()); + }, + + toString: function() { + return ("DD " + this.id); + } + + + + + + +}); + +Ext.dd.DDProxy = function(id, sGroup, config) { + if (id) { + this.init(id, sGroup, config); + 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(iPageX, iPageY) { + var el = this.getEl(); + var dragEl = this.getDragEl(); + var s = dragEl.style; + + this._resizeProxy(); + + if (this.centerFrame) { + this.setDelta( Math.round(parseInt(s.width, 10)/2), + Math.round(parseInt(s.height, 10)/2) ); + } + + this.setDragElPos(iPageX, iPageY); + + Ext.fly(dragEl).show(); + }, + + + _resizeProxy: function() { + if (this.resizeFrame) { + var el = this.getEl(); + Ext.fly(this.getDragEl()).setSize(el.offsetWidth, el.offsetHeight); + } + }, + + + b4MouseDown: function(e) { + var x = e.getPageX(); + var y = e.getPageY(); + this.autoOffset(x, y); + this.setDragElPos(x, y); + }, + + + b4StartDrag: function(x, y) { + + this.showFrame(x, y); + }, + + + b4EndDrag: function(e) { + Ext.fly(this.getDragEl()).hide(); + }, + + + + + endDrag: function(e) { + + var lel = this.getEl(); + var del = this.getDragEl(); + + + del.style.visibility = ""; + + this.beforeMove(); + + + lel.style.visibility = "hidden"; + Ext.dd.DDM.moveToEl(lel, del); + del.style.visibility = "hidden"; + lel.style.visibility = ""; + + this.afterDrag(); + }, + + beforeMove : function(){ + + }, + + afterDrag : function(){ + + }, + + toString: function() { + return ("DDProxy " + this.id); + } + +}); + +Ext.dd.DDTarget = function(id, sGroup, config) { + if (id) { + this.initTarget(id, sGroup, config); + } +}; + + +Ext.extend(Ext.dd.DDTarget, Ext.dd.DragDrop, { + toString: function() { + return ("DDTarget " + this.id); + } +}); + + +Ext.dd.ScrollManager = function(){ + var ddm = Ext.dd.DragDropMgr; + var els = {}; + var dragEl = null; + var proc = {}; + + var onStop = function(e){ + dragEl = null; + clearProc(); + }; + + var triggerRefresh = function(){ + if(ddm.dragCurrent){ + ddm.refreshCache(ddm.dragCurrent.groups); + } + }; + + var doScroll = function(){ + if(ddm.dragCurrent){ + var dds = Ext.dd.ScrollManager; + if(!dds.animate){ + if(proc.el.scroll(proc.dir, dds.increment)){ + triggerRefresh(); + } + }else{ + proc.el.scroll(proc.dir, dds.increment, true, dds.animDuration, triggerRefresh); + } + } + }; + + var clearProc = function(){ + if(proc.id){ + clearInterval(proc.id); + } + proc.id = 0; + proc.el = null; + proc.dir = ""; + }; + + var startProc = function(el, dir){ + clearProc(); + proc.el = el; + proc.dir = dir; + proc.id = setInterval(doScroll, Ext.dd.ScrollManager.frequency); + }; + + var onFire = function(e, isDrop){ + if(isDrop || !ddm.dragCurrent){ return; } + var dds = Ext.dd.ScrollManager; + if(!dragEl || dragEl != ddm.dragCurrent){ + dragEl = ddm.dragCurrent; + + dds.refreshCache(); + } + + var xy = Ext.lib.Event.getXY(e); + var pt = new Ext.lib.Point(xy[0], xy[1]); + for(var id in els){ + var el = els[id], r = el._region; + if(r && r.contains(pt) && el.isScrollable()){ + if(r.bottom - pt.y <= dds.thresh){ + if(proc.el != el){ + startProc(el, "down"); + } + return; + }else if(r.right - pt.x <= dds.thresh){ + if(proc.el != el){ + startProc(el, "left"); + } + return; + }else if(pt.y - r.top <= dds.thresh){ + if(proc.el != el){ + startProc(el, "up"); + } + return; + }else if(pt.x - r.left <= dds.thresh){ + if(proc.el != el){ + startProc(el, "right"); + } + return; + } + } + } + clearProc(); + }; + + ddm.fireEvents = ddm.fireEvents.createSequence(onFire, ddm); + ddm.stopDrag = ddm.stopDrag.createSequence(onStop, ddm); + + 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); + els[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 els[el.id]; + } + }, + + + thresh : 25, + + + increment : 100, + + + frequency : 500, + + + animate: true, + + + animDuration: .4, + + + refreshCache : function(){ + for(var id in els){ + if(typeof els[id] == 'object'){ + els[id]._region = els[id].getRegion(); + } + } + } + }; +}(); + +Ext.dd.Registry = function(){ + var elements = {}; + var handles = {}; + var autoIdSeed = 0; + + var getId = function(el, autogen){ + if(typeof el == "string"){ + return el; + } + var id = el.id; + if(!id && autogen !== false){ + id = "extdd-" + (++autoIdSeed); + el.id = id; + } + return id; + }; + + return { + + register : function(el, data){ + data = data || {}; + if(typeof el == "string"){ + el = document.getElementById(el); + } + data.ddel = el; + elements[getId(el)] = data; + if(data.isHandle !== false){ + handles[data.ddel.id] = data; + } + if(data.handles){ + var hs = data.handles; + for(var i = 0, len = hs.length; i < len; i++){ + handles[getId(hs[i])] = data; + } + } + }, + + + unregister : function(el){ + var id = getId(el, false); + var data = elements[id]; + if(data){ + delete elements[id]; + if(data.handles){ + var hs = data.handles; + for(var i = 0, len = hs.length; i < len; i++){ + delete handles[getId(hs[i], false)]; + } + } + } + }, + + + getHandle : function(id){ + if(typeof id != "string"){ + id = id.id; + } + return handles[id]; + }, + + + getHandleFromEvent : function(e){ + var t = Ext.lib.Event.getTarget(e); + return t ? handles[t.id] : null; + }, + + + getTarget : function(id){ + if(typeof id != "string"){ + id = id.id; + } + return elements[id]; + }, + + + getTargetFromEvent : function(e){ + var t = Ext.lib.Event.getTarget(e); + return t ? elements[t.id] || handles[t.id] : null; + } + }; +}(); + +Ext.dd.StatusProxy = function(config){ + Ext.apply(this, config); + 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: !config || config.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(cssClass){ + cssClass = cssClass || this.dropNotAllowed; + if(this.dropStatus != cssClass){ + this.el.replaceClass(this.dropStatus, cssClass); + this.dropStatus = cssClass; + } + }, + + + reset : function(clearGhost){ + this.el.dom.className = "x-dd-drag-proxy " + this.dropNotAllowed; + this.dropStatus = this.dropNotAllowed; + if(clearGhost){ + this.ghost.update(""); + } + }, + + + update : function(html){ + if(typeof html == "string"){ + this.ghost.update(html); + }else{ + this.ghost.update(""); + html.style.margin = "0"; + this.ghost.dom.appendChild(html); + } + }, + + + getEl : function(){ + return this.el; + }, + + + getGhost : function(){ + return this.ghost; + }, + + + hide : function(clear){ + this.el.hide(); + if(clear){ + 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, callback, scope){ + this.callback = callback; + this.scope = scope; + if(xy && this.animRepair !== false){ + this.el.addClass("x-dd-drag-repair"); + this.el.hideUnders(true); + this.anim = this.el.shift({ + duration: this.repairDuration || .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, config){ + this.el = Ext.get(el); + this.dragData = {}; + + Ext.apply(this, config); + + if(!this.proxy){ + this.proxy = new Ext.dd.StatusProxy(); + } + + 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 target = Ext.dd.DragDropMgr.getDDById(id); + this.cachedTarget = target; + if(this.beforeDragEnter(target, e, id) !== false){ + if(target.isNotifyTarget){ + var status = target.notifyEnter(this, e, this.dragData); + this.proxy.setStatus(status); + }else{ + this.proxy.setStatus(this.dropAllowed); + } + + if(this.afterDragEnter){ + + this.afterDragEnter(target, e, id); + } + } + }, + + + beforeDragEnter : function(target, e, id){ + return true; + }, + + + alignElWithMouse: function() { + Ext.dd.DragSource.superclass.alignElWithMouse.apply(this, arguments); + this.proxy.sync(); + }, + + + onDragOver : function(e, id){ + var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id); + if(this.beforeDragOver(target, e, id) !== false){ + if(target.isNotifyTarget){ + var status = target.notifyOver(this, e, this.dragData); + this.proxy.setStatus(status); + } + + if(this.afterDragOver){ + + this.afterDragOver(target, e, id); + } + } + }, + + + beforeDragOver : function(target, e, id){ + return true; + }, + + + onDragOut : function(e, id){ + var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id); + if(this.beforeDragOut(target, e, id) !== false){ + if(target.isNotifyTarget){ + target.notifyOut(this, e, this.dragData); + } + this.proxy.reset(); + if(this.afterDragOut){ + + this.afterDragOut(target, e, id); + } + } + this.cachedTarget = null; + }, + + + beforeDragOut : function(target, e, id){ + return true; + }, + + + onDragDrop : function(e, id){ + var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id); + if(this.beforeDragDrop(target, e, id) !== false){ + if(target.isNotifyTarget){ + if(target.notifyDrop(this, e, this.dragData)){ + this.onValidDrop(target, e, id); + }else{ + this.onInvalidDrop(target, e, id); + } + }else{ + this.onValidDrop(target, e, id); + } + + if(this.afterDragDrop){ + + this.afterDragDrop(target, e, id); + } + } + delete this.cachedTarget; + }, + + + beforeDragDrop : function(target, e, id){ + return true; + }, + + + onValidDrop : function(target, e, id){ + this.hideProxy(); + if(this.afterValidDrop){ + + this.afterValidDrop(target, e, id); + } + }, + + + getRepairXY : function(e, data){ + return this.el.getXY(); + }, + + + onInvalidDrop : function(target, e, id){ + this.beforeInvalidDrop(target, 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(target, e, id){ + return true; + }, + + + handleMouseDown : function(e){ + if(this.dragging) { + return; + } + var data = this.getDragData(e); + if(data && this.onBeforeDrag(data, e) !== false){ + this.dragData = data; + this.proxy.stop(); + Ext.dd.DragSource.superclass.handleMouseDown.apply(this, arguments); + } + }, + + + onBeforeDrag : function(data, e){ + return true; + }, + + + onStartDrag : Ext.emptyFn, + + + startDrag : function(x, y){ + this.proxy.reset(); + this.dragging = true; + this.proxy.update(""); + this.onInitDrag(x, y); + this.proxy.show(); + }, + + + onInitDrag : function(x, y){ + var clone = this.el.dom.cloneNode(true); + clone.id = Ext.id(); + this.proxy.update(clone); + this.onStartDrag(x, y); + 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(data, e){ + }, + + + autoOffset : function(x, y) { + this.setDelta(-12, -20); + } +}); + +Ext.dd.DropTarget = function(el, config){ + this.el = Ext.get(el); + + Ext.apply(this, config); + + 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, data){ + if(this.overClass){ + this.el.addClass(this.overClass); + } + return this.dropAllowed; + }, + + + notifyOver : function(dd, e, data){ + return this.dropAllowed; + }, + + + notifyOut : function(dd, e, data){ + if(this.overClass){ + this.el.removeClass(this.overClass); + } + }, + + + notifyDrop : function(dd, e, data){ + return false; + } +}); + +Ext.dd.DragZone = function(el, config){ + Ext.dd.DragZone.superclass.constructor.call(this, el, config); + 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(x, y){ + this.proxy.update(this.dragData.ddel.cloneNode(true)); + this.onStartDrag(x, y); + 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, config){ + Ext.dd.DropZone.superclass.constructor.call(this, el, config); +}; + +Ext.extend(Ext.dd.DropZone, Ext.dd.DropTarget, { + + getTargetFromEvent : function(e){ + return Ext.dd.Registry.getTargetFromEvent(e); + }, + + + onNodeEnter : function(n, dd, e, data){ + + }, + + + onNodeOver : function(n, dd, e, data){ + return this.dropAllowed; + }, + + + onNodeOut : function(n, dd, e, data){ + + }, + + + onNodeDrop : function(n, dd, e, data){ + return false; + }, + + + onContainerOver : function(dd, e, data){ + return this.dropNotAllowed; + }, + + + onContainerDrop : function(dd, e, data){ + return false; + }, + + + notifyEnter : function(dd, e, data){ + return this.dropNotAllowed; + }, + + + notifyOver : function(dd, e, data){ + var n = this.getTargetFromEvent(e); + if(!n){ + if(this.lastOverNode){ + this.onNodeOut(this.lastOverNode, dd, e, data); + this.lastOverNode = null; + } + return this.onContainerOver(dd, e, data); + } + if(this.lastOverNode != n){ + if(this.lastOverNode){ + this.onNodeOut(this.lastOverNode, dd, e, data); + } + this.onNodeEnter(n, dd, e, data); + this.lastOverNode = n; + } + return this.onNodeOver(n, dd, e, data); + }, + + + notifyOut : function(dd, e, data){ + if(this.lastOverNode){ + this.onNodeOut(this.lastOverNode, dd, e, data); + this.lastOverNode = null; + } + }, + + + notifyDrop : function(dd, e, data){ + if(this.lastOverNode){ + this.onNodeOut(this.lastOverNode, dd, e, data); + this.lastOverNode = null; + } + var n = this.getTargetFromEvent(e); + return n ? + this.onNodeDrop(n, dd, e, data) : + this.onContainerDrop(dd, e, data); + }, + + + 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 val = parseFloat(String(s).replace(/,/g, "")); + if(isNaN(val)) val = 0; + return val; + }, + + + asInt : function(s) { + var val = parseInt(String(s).replace(/,/g, "")); + if(isNaN(val)) val = 0; + return val; + } +}; + +Ext.data.Record = function(data, id){ + this.id = (id || id === 0) ? id : ++Ext.data.Record.AUTO_ID; + this.data = data; +}; + + +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(field){ + return field.name; + }); + for(var i = 0, len = o.length; i < len; i++){ + p.fields.add(new Ext.data.Field(o[i])); + } + f.getField = function(name){ + return p.fields.get(name); + }; + return f; +}; + +Ext.data.Record.AUTO_ID = 1000; +Ext.data.Record.EDIT = 'edit'; +Ext.data.Record.REJECT = 'reject'; +Ext.data.Record.COMMIT = 'commit'; + +Ext.data.Record.prototype = { + + dirty : false, + editing : false, + error: null, + modified: null, + + + join : function(store){ + this.store = store; + }, + + + set : function(name, value){ + if(this.data[name] == value){ + return; + } + this.dirty = true; + if(!this.modified){ + this.modified = {}; + } + if(typeof this.modified[name] == 'undefined'){ + this.modified[name] = this.data[name]; + } + this.data[name] = value; + if(!this.editing){ + this.store.afterEdit(this); + } + }, + + + get : function(name){ + return this.data[name]; + }, + + + beginEdit : function(){ + this.editing = true; + this.modified = {}; + }, + + + cancelEdit : function(){ + this.editing = false; + delete this.modified; + }, + + + endEdit : function(){ + this.editing = false; + if(this.dirty && this.store){ + this.store.afterEdit(this); + } + }, + + + reject : function(){ + 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; + }, + + + copy : function(newId) { + return new this.constructor(Ext.apply({}, this.data), newId || this.id); + } +}; + +Ext.data.Store = function(config){ + this.data = new Ext.util.MixedCollection(false); + this.data.getKey = function(o){ + return o.id; + }; + this.baseParams = {}; + + this.paramNames = { + "start" : "start", + "limit" : "limit", + "sort" : "sort", + "dir" : "dir" + }; + + if(config && config.data){ + this.inlineData = config.data; + delete config.data; + } + + Ext.apply(this, config); + + if(this.reader){ + if(!this.recordType){ + this.recordType = this.reader.recordType; + } + if(this.reader.onMetaChange){ + this.reader.onMetaChange = this.onMetaChange.createDelegate(this); + } + } + + if(this.recordType){ + this.fields = this.recordType.prototype.fields; + } + this.modified = []; + + this.addEvents({ + + datachanged : true, + + metachange : 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); + + if(this.inlineData){ + this.loadData(this.inlineData); + delete this.inlineData; + } +}; +Ext.extend(Ext.data.Store, Ext.util.Observable, { + + + + + + + remoteSort : false, + + + pruneModifiedRecords : false, + + + lastOptions : null, + + + add : function(records){ + records = [].concat(records); + for(var i = 0, len = records.length; i < len; i++){ + records[i].join(this); + } + var index = this.data.length; + this.data.addAll(records); + this.fireEvent("add", this, records, index); + }, + + + remove : function(record){ + var index = this.data.indexOf(record); + this.data.removeAt(index); + if(this.pruneModifiedRecords){ + this.modified.remove(record); + } + this.fireEvent("remove", this, record, index); + }, + + + removeAll : function(){ + this.data.clear(); + if(this.pruneModifiedRecords){ + this.modified = []; + } + this.fireEvent("clear", this); + }, + + + insert : function(index, records){ + records = [].concat(records); + for(var i = 0, len = records.length; i < len; i++){ + this.data.insert(index, records[i]); + records[i].join(this); + } + this.fireEvent("add", this, records, index); + }, + + + indexOf : function(record){ + return this.data.indexOf(record); + }, + + + indexOfId : function(id){ + return this.data.indexOfKey(id); + }, + + + getById : function(id){ + return this.data.key(id); + }, + + + getAt : function(index){ + return this.data.itemAt(index); + }, + + + getRange : function(start, end){ + return this.data.getRange(start, end); + }, + + + storeOptions : function(o){ + o = Ext.apply({}, o); + delete o.callback; + delete o.scope; + this.lastOptions = o; + }, + + + load : function(options){ + options = options || {}; + if(this.fireEvent("beforeload", this, options) !== false){ + this.storeOptions(options); + var p = Ext.apply(options.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, options); + } + }, + + + reload : function(options){ + this.load(Ext.applyIf(options||{}, this.lastOptions)); + }, + + + + loadRecords : function(o, options, success){ + if(!o || success === false){ + if(success !== false){ + this.fireEvent("load", this, [], options); + } + if(options.callback){ + options.callback.call(options.scope || this, [], options, false); + } + return; + } + var r = o.records, t = o.totalRecords || r.length; + if(!options || options.add !== true){ + if(this.pruneModifiedRecords){ + this.modified = []; + } + for(var i = 0, len = r.length; i < len; i++){ + r[i].join(this); + } + if(this.snapshot){ + this.data = this.snapshot; + delete this.snapshot; + } + 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.add(r); + } + this.fireEvent("load", this, r, options); + if(options.callback){ + options.callback.call(options.scope || this, r, options, true); + } + }, + + + loadData : function(o, append){ + var r = this.reader.readRecords(o); + this.loadRecords(r, {add: append}, 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(field, dir){ + this.sortInfo = {field: field, direction: dir ? dir.toUpperCase() : "ASC"}; + }, + + + sort : function(fieldName, dir){ + var f = this.fields.get(fieldName); + if(!dir){ + if(this.sortInfo && this.sortInfo.field == f.name){ + dir = (this.sortToggle[f.name] || "ASC").toggle("ASC", "DESC"); + }else{ + dir = f.sortDir; + } + } + this.sortToggle[f.name] = dir; + this.sortInfo = {field: f.name, direction: dir}; + if(!this.remoteSort){ + this.applySort(); + this.fireEvent("datachanged", this); + }else{ + this.load(this.lastOptions); + } + }, + + + each : function(fn, scope){ + this.data.each(fn, scope); + }, + + + getModifiedRecords : function(){ + return this.modified; + }, + + + createFilterFn : function(property, value, anyMatch){ + if(!value.exec){ + value = String(value); + if(value.length == 0){ + return false; + } + value = new RegExp((anyMatch === true ? '' : '^') + Ext.escapeRe(value), "i"); + } + return function(r){ + return value.test(r.data[property]); + }; + }, + + + sum : function(property, start, end){ + var rs = this.data.items, v = 0; + start = start || 0; + end = (end || end === 0) ? end : rs.length-1; + + for(var i = start; i <= end; i++){ + v += (rs[i].data[property] || 0); + } + return v; + }, + + + filter : function(property, value, anyMatch){ + var fn = this.createFilterFn(property, value, anyMatch); + return fn ? this.filterBy(fn) : this.clearFilter(); + }, + + + filterBy : function(fn, scope){ + this.snapshot = this.snapshot || this.data; + this.data = this.queryBy(fn, scope||this); + this.fireEvent("datachanged", this); + }, + + + query : function(property, value, anyMatch){ + var fn = this.createFilterFn(property, value, anyMatch); + return fn ? this.queryBy(fn) : this.data.clone(); + }, + + + queryBy : function(fn, scope){ + var data = this.snapshot || this.data; + return data.filterBy(fn, scope||this); + }, + + + collect : function(dataIndex, allowNull, bypassFilter){ + var d = (bypassFilter === true && this.snapshot) ? + this.snapshot.items : this.data.items; + var v, sv, r = [], l = {}; + for(var i = 0, len = d.length; i < len; i++){ + v = d[i].data[dataIndex]; + sv = String(v); + if((allowNull || !Ext.isEmpty(v)) && !l[sv]){ + l[sv] = true; + r[r.length] = v; + } + } + return r; + }, + + + clearFilter : function(suppressEvent){ + if(this.snapshot && this.snapshot != this.data){ + this.data = this.snapshot; + delete this.snapshot; + if(suppressEvent !== true){ + this.fireEvent("datachanged", this); + } + } + }, + + + afterEdit : function(record){ + if(this.modified.indexOf(record) == -1){ + this.modified.push(record); + } + this.fireEvent("update", this, record, Ext.data.Record.EDIT); + }, + + + afterReject : function(record){ + this.modified.remove(record); + this.fireEvent("update", this, record, Ext.data.Record.REJECT); + }, + + + afterCommit : function(record){ + this.modified.remove(record); + this.fireEvent("update", this, record, Ext.data.Record.COMMIT); + }, + + + commitChanges : function(){ + var m = this.modified.slice(0); + this.modified = []; + for(var i = 0, len = m.length; i < len; i++){ + m[i].commit(); + } + }, + + + rejectChanges : function(){ + var m = this.modified.slice(0); + this.modified = []; + for(var i = 0, len = m.length; i < len; i++){ + m[i].reject(); + } + }, + + onMetaChange : function(meta, rtype, o){ + this.recordType = rtype; + this.fields = rtype.prototype.fields; + delete this.snapshot; + this.sortInfo = meta.sortInfo; + this.modified = []; + this.fireEvent('metachange', this, this.reader.meta); + } +}); + +Ext.data.SimpleStore = function(config){ + Ext.data.SimpleStore.superclass.constructor.call(this, { + reader: new Ext.data.ArrayReader({ + id: config.id + }, + Ext.data.Record.create(config.fields) + ), + proxy : new Ext.data.MemoryProxy(config.data) + }); + this.load(); +}; +Ext.extend(Ext.data.SimpleStore, Ext.data.Store); + +Ext.data.JsonStore = function(c){ + Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(c, { + proxy: !c.data ? new Ext.data.HttpProxy({url: c.url}) : undefined, + reader: new Ext.data.JsonReader(c, c.fields) + })); +}; +Ext.extend(Ext.data.JsonStore, Ext.data.Store); +Ext.data.Field = function(config){ + if(typeof config == "string"){ + config = {name: config}; + } + Ext.apply(this, config); + + if(!this.type){ + this.type = "auto"; + } + + var st = Ext.data.SortTypes; + + if(typeof this.sortType == "string"){ + this.sortType = st[this.sortType]; + } + + + if(!this.sortType){ + switch(this.type){ + case "string": + this.sortType = st.asUCString; + break; + case "date": + this.sortType = st.asDate; + break; + default: + this.sortType = st.none; + } + } + + + var stripRe = /[\$,%]/g; + + + + if(!this.convert){ + var cv, dateFormat = this.dateFormat; + switch(this.type){ + case "": + case "auto": + case undefined: + cv = function(v){ return v; }; + break; + case "string": + cv = function(v){ return (v === undefined || v === null) ? '' : String(v); }; + break; + case "int": + cv = function(v){ + return v !== undefined && v !== null && v !== '' ? + parseInt(String(v).replace(stripRe, ""), 10) : ''; + }; + break; + case "float": + cv = function(v){ + return v !== undefined && v !== null && v !== '' ? + parseFloat(String(v).replace(stripRe, ""), 10) : ''; + }; + break; + case "bool": + case "boolean": + cv = function(v){ return v === true || v === "true" || v == 1; }; + break; + case "date": + cv = function(v){ + if(!v){ + return ''; + } + if(v instanceof Date){ + return v; + } + if(dateFormat){ + if(dateFormat == "timestamp"){ + return new Date(v*1000); + } + return Date.parseDate(v, dateFormat); + } + var parsed = Date.parse(v); + return parsed ? new Date(parsed) : null; + }; + break; + + } + this.convert = cv; + } +}; + +Ext.data.Field.prototype = { + dateFormat: null, + defaultValue: "", + mapping: null, + sortType : null, + sortDir : "ASC" +}; + + +Ext.data.DataReader = function(meta, recordType){ + this.meta = meta; + this.recordType = recordType instanceof Array ? + Ext.data.Record.create(recordType) : recordType; +}; + +Ext.data.DataReader.prototype = { + +}; + +Ext.data.DataProxy = function(){ + this.addEvents({ + + beforeload : true, + + load : true, + + loadexception : true + }); + Ext.data.DataProxy.superclass.constructor.call(this); +}; + +Ext.extend(Ext.data.DataProxy, Ext.util.Observable); + +Ext.data.MemoryProxy = function(data){ + Ext.data.MemoryProxy.superclass.constructor.call(this); + this.data = data; +}; + +Ext.extend(Ext.data.MemoryProxy, Ext.data.DataProxy, { + + load : function(params, reader, callback, scope, arg){ + params = params || {}; + var result; + try { + result = reader.readRecords(this.data); + }catch(e){ + this.fireEvent("loadexception", this, arg, null, e); + callback.call(scope, null, arg, false); + return; + } + callback.call(scope, result, arg, true); + }, + + + update : function(params, records){ + + } +}); + +Ext.data.HttpProxy = function(conn){ + Ext.data.HttpProxy.superclass.constructor.call(this); + + this.conn = conn; + this.useAjax = !conn || !conn.events; +}; + +Ext.extend(Ext.data.HttpProxy, Ext.data.DataProxy, { + + getConnection : function(){ + return this.useAjax ? Ext.Ajax : this.conn; + }, + + + load : function(params, reader, callback, scope, arg){ + if(this.fireEvent("beforeload", this, params) !== false){ + var o = { + params : params || {}, + request: { + callback : callback, + scope : scope, + arg : arg + }, + reader: reader, + callback : this.loadResponse, + scope: this + }; + if(this.useAjax){ + Ext.applyIf(o, this.conn); + if(this.activeRequest){ + Ext.Ajax.abort(this.activeRequest); + } + this.activeRequest = Ext.Ajax.request(o); + }else{ + this.conn.request(o); + } + }else{ + callback.call(scope||this, null, arg, false); + } + }, + + + loadResponse : function(o, success, response){ + delete this.activeRequest; + if(!success){ + this.fireEvent("loadexception", this, o, response); + o.request.callback.call(o.request.scope, null, o.request.arg, false); + return; + } + var result; + try { + result = o.reader.read(response); + }catch(e){ + this.fireEvent("loadexception", this, o, response, e); + o.request.callback.call(o.request.scope, null, o.request.arg, false); + return; + } + this.fireEvent("load", this, o, o.request.arg); + o.request.callback.call(o.request.scope, result, o.request.arg, true); + }, + + + update : function(dataSet){ + + }, + + + updateResponse : function(dataSet){ + + } +}); + +Ext.data.ScriptTagProxy = function(config){ + Ext.data.ScriptTagProxy.superclass.constructor.call(this); + Ext.apply(this, config); + this.head = document.getElementsByTagName("head")[0]; +}; + +Ext.data.ScriptTagProxy.TRANS_ID = 1000; + +Ext.extend(Ext.data.ScriptTagProxy, Ext.data.DataProxy, { + + + timeout : 30000, + + callbackParam : "callback", + + nocache : true, + + + load : function(params, reader, callback, scope, arg){ + if(this.fireEvent("beforeload", this, params) !== false){ + + var p = Ext.urlEncode(Ext.apply(params, this.extraParams)); + + var url = this.url; + url += (url.indexOf("?") != -1 ? "&" : "?") + p; + if(this.nocache){ + url += "&_dc=" + (new Date().getTime()); + } + var transId = ++Ext.data.ScriptTagProxy.TRANS_ID; + var trans = { + id : transId, + cb : "stcCallback"+transId, + scriptId : "stcScript"+transId, + params : params, + arg : arg, + url : url, + callback : callback, + scope : scope, + reader : reader + }; + var conn = this; + + window[trans.cb] = function(o){ + conn.handleResponse(o, trans); + }; + + url += String.format("&{0}={1}", this.callbackParam, trans.cb); + + if(this.autoAbort !== false){ + this.abort(); + } + + trans.timeoutId = this.handleFailure.defer(this.timeout, this, [trans]); + + var script = document.createElement("script"); + script.setAttribute("src", url); + script.setAttribute("type", "text/javascript"); + script.setAttribute("id", trans.scriptId); + this.head.appendChild(script); + + this.trans = trans; + }else{ + callback.call(scope||this, null, arg, false); + } + }, + + + isLoading : function(){ + return this.trans ? true : false; + }, + + + abort : function(){ + if(this.isLoading()){ + this.destroyTrans(this.trans); + } + }, + + + destroyTrans : function(trans, isLoaded){ + this.head.removeChild(document.getElementById(trans.scriptId)); + clearTimeout(trans.timeoutId); + if(isLoaded){ + window[trans.cb] = undefined; + try{ + delete window[trans.cb]; + }catch(e){} + }else{ + + window[trans.cb] = function(){ + window[trans.cb] = undefined; + try{ + delete window[trans.cb]; + }catch(e){} + }; + } + }, + + + handleResponse : function(o, trans){ + this.trans = false; + this.destroyTrans(trans, true); + var result; + try { + result = trans.reader.readRecords(o); + }catch(e){ + this.fireEvent("loadexception", this, o, trans.arg, e); + trans.callback.call(trans.scope||window, null, trans.arg, false); + return; + } + this.fireEvent("load", this, o, trans.arg); + trans.callback.call(trans.scope||window, result, trans.arg, true); + }, + + + handleFailure : function(trans){ + this.trans = false; + this.destroyTrans(trans, false); + this.fireEvent("loadexception", this, null, trans.arg); + trans.callback.call(trans.scope||window, null, trans.arg, false); + } +}); + +Ext.data.JsonReader = function(meta, recordType){ + meta = meta || {}; + Ext.data.JsonReader.superclass.constructor.call(this, meta, recordType||meta.fields); +}; +Ext.extend(Ext.data.JsonReader, Ext.data.DataReader, { + + read : function(response){ + var json = response.responseText; + var o = eval("("+json+")"); + if(!o) { + throw {message: "JsonReader.read: Json object not found"}; + } + if(o.metaData){ + delete this.ef; + this.meta = o.metaData; + this.recordType = Ext.data.Record.create(o.metaData.fields); + this.onMetaChange(this.meta, this.recordType, o); + } + return this.readRecords(o); + }, + + + onMetaChange : function(meta, recordType, o){ + + }, + + + simpleAccess: function(obj, subsc) { + return obj[subsc]; + }, + + + getJsonAccessor: function(){ + var re = /[\[\.]/; + return function(expr) { + try { + return(re.test(expr)) + ? new Function("obj", "return obj." + expr) + : function(obj){ + return obj[expr]; + }; + } catch(e){} + return Ext.emptyFn; + }; + }(), + + + readRecords : function(o){ + + this.jsonData = o; + var s = this.meta, Record = this.recordType, + f = Record.prototype.fields, fi = f.items, fl = f.length; + + + if (!this.ef) { + if(s.totalProperty) { + this.getTotal = this.getJsonAccessor(s.totalProperty); + } + if(s.successProperty) { + this.getSuccess = this.getJsonAccessor(s.successProperty); + } + this.getRoot = s.root ? this.getJsonAccessor(s.root) : function(p){return p;}; + if (s.id) { + var g = this.getJsonAccessor(s.id); + this.getId = function(rec) { + var r = g(rec); + return (r === undefined || r === "") ? null : r; + }; + } else { + this.getId = function(){return null;}; + } + this.ef = []; + for(var i = 0; i < fl; i++){ + f = fi[i]; + var map = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name; + this.ef[i] = this.getJsonAccessor(map); + } + } + + var root = this.getRoot(o), c = root.length, totalRecords = c, success = true; + if(s.totalProperty){ + var v = parseInt(this.getTotal(o), 10); + if(!isNaN(v)){ + totalRecords = v; + } + } + if(s.successProperty){ + var v = this.getSuccess(o); + if(v === false || v === 'false'){ + success = false; + } + } + var records = []; + for(var i = 0; i < c; i++){ + var n = root[i]; + var values = {}; + var id = this.getId(n); + for(var j = 0; j < fl; j++){ + f = fi[j]; + var v = this.ef[j](n); + values[f.name] = f.convert((v !== undefined) ? v : f.defaultValue); + } + var record = new Record(values, id); + record.json = n; + records[i] = record; + } + return { + success : success, + records : records, + totalRecords : totalRecords + }; + } +}); + +Ext.data.XmlReader = function(meta, recordType){ + meta = meta || {}; + Ext.data.XmlReader.superclass.constructor.call(this, meta, recordType||meta.fields); +}; +Ext.extend(Ext.data.XmlReader, Ext.data.DataReader, { + + read : function(response){ + var doc = response.responseXML; + if(!doc) { + throw {message: "XmlReader.read: XML Document not available"}; + } + return this.readRecords(doc); + }, + + + readRecords : function(doc){ + + this.xmlData = doc; + var root = doc.documentElement || doc; + var q = Ext.DomQuery; + var recordType = this.recordType, fields = recordType.prototype.fields; + var sid = this.meta.id; + var totalRecords = 0, success = true; + if(this.meta.totalRecords){ + totalRecords = q.selectNumber(this.meta.totalRecords, root, 0); + } + + if(this.meta.success){ + var sv = q.selectValue(this.meta.success, root, true); + success = sv !== false && sv !== 'false'; + } + var records = []; + var ns = q.select(this.meta.record, root); + for(var i = 0, len = ns.length; i < len; i++) { + var n = ns[i]; + var values = {}; + var id = sid ? q.selectValue(sid, n) : undefined; + for(var j = 0, jlen = fields.length; j < jlen; j++){ + var f = fields.items[j]; + var v = q.selectValue(f.mapping || f.name, n, f.defaultValue); + v = f.convert(v); + values[f.name] = v; + } + var record = new recordType(values, id); + record.node = n; + records[records.length] = record; + } + + return { + success : success, + records : records, + totalRecords : totalRecords || records.length + }; + } +}); + +Ext.data.ArrayReader = function(meta, recordType){ + Ext.data.ArrayReader.superclass.constructor.call(this, meta, recordType); +}; + +Ext.extend(Ext.data.ArrayReader, Ext.data.JsonReader, { + + readRecords : function(o){ + var sid = this.meta ? this.meta.id : null; + var recordType = this.recordType, fields = recordType.prototype.fields; + var records = []; + var root = o; + for(var i = 0; i < root.length; i++){ + var n = root[i]; + var values = {}; + var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null); + for(var j = 0, jlen = fields.length; j < jlen; j++){ + var f = fields.items[j]; + var k = f.mapping !== undefined && f.mapping !== null ? f.mapping : j; + var v = n[k] !== undefined ? n[k] : f.defaultValue; + v = f.convert(v); + values[f.name] = v; + } + var record = new recordType(values, id); + record.json = n; + records[records.length] = record; + } + return { + records : records, + totalRecords : records.length + }; + } +}); + +Ext.data.Tree = function(root){ + this.nodeHash = {}; + + this.root = null; + if(root){ + this.setRootNode(root); + } + this.addEvents({ + + "append" : true, + + "remove" : true, + + "move" : true, + + "insert" : true, + + "beforeappend" : true, + + "beforeremove" : true, + + "beforemove" : true, + + "beforeinsert" : true + }); + + Ext.data.Tree.superclass.constructor.call(this); +}; + +Ext.extend(Ext.data.Tree, Ext.util.Observable, { + pathSeparator: "/", + + proxyNodeEvent : function(){ + return this.fireEvent.apply(this, arguments); + }, + + + getRootNode : function(){ + return this.root; + }, + + + setRootNode : function(node){ + this.root = node; + node.ownerTree = this; + node.isRoot = true; + this.registerNode(node); + return node; + }, + + + getNodeById : function(id){ + return this.nodeHash[id]; + }, + + registerNode : function(node){ + this.nodeHash[node.id] = node; + }, + + unregisterNode : function(node){ + delete this.nodeHash[node.id]; + }, + + toString : function(){ + return "[Tree"+(this.id?" "+this.id:"")+"]"; + } +}); + + +Ext.data.Node = function(attributes){ + + this.attributes = attributes || {}; + this.leaf = this.attributes.leaf; + + this.id = this.attributes.id; + if(!this.id){ + this.id = Ext.id(null, "ynode-"); + this.attributes.id = this.id; + } + + this.childNodes = []; + if(!this.childNodes.indexOf){ + this.childNodes.indexOf = function(o){ + for(var i = 0, len = this.length; i < len; i++){ + if(this[i] == o) return i; + } + return -1; + }; + } + + this.parentNode = null; + + this.firstChild = null; + + this.lastChild = null; + + this.previousSibling = null; + + this.nextSibling = null; + + this.addEvents({ + + "append" : true, + + "remove" : true, + + "move" : true, + + "insert" : true, + + "beforeappend" : true, + + "beforeremove" : true, + + "beforemove" : true, + + "beforeinsert" : true + }); + this.listeners = this.attributes.listeners; + Ext.data.Node.superclass.constructor.call(this); +}; + +Ext.extend(Ext.data.Node, Ext.util.Observable, { + fireEvent : function(evtName){ + + if(Ext.data.Node.superclass.fireEvent.apply(this, arguments) === false){ + return false; + } + + var ot = this.getOwnerTree(); + if(ot){ + if(ot.proxyNodeEvent.apply(ot, arguments) === false){ + return false; + } + } + return true; + }, + + + isLeaf : function(){ + return this.leaf === true; + }, + + + setFirstChild : function(node){ + this.firstChild = node; + }, + + + setLastChild : function(node){ + this.lastChild = node; + }, + + + + isLast : function(){ + return (!this.parentNode ? true : this.parentNode.lastChild == this); + }, + + + isFirst : function(){ + return (!this.parentNode ? true : this.parentNode.firstChild == this); + }, + + hasChildNodes : function(){ + return !this.isLeaf() && this.childNodes.length > 0; + }, + + + appendChild : function(node){ + var multi = false; + if(node instanceof Array){ + multi = node; + }else if(arguments.length > 1){ + multi = arguments; + } + + if(multi){ + for(var i = 0, len = multi.length; i < len; i++) { + this.appendChild(multi[i]); + } + }else{ + if(this.fireEvent("beforeappend", this.ownerTree, this, node) === false){ + return false; + } + var index = this.childNodes.length; + var oldParent = node.parentNode; + + if(oldParent){ + if(node.fireEvent("beforemove", node.getOwnerTree(), node, oldParent, this, index) === false){ + return false; + } + oldParent.removeChild(node); + } + index = this.childNodes.length; + if(index == 0){ + this.setFirstChild(node); + } + this.childNodes.push(node); + node.parentNode = this; + var ps = this.childNodes[index-1]; + if(ps){ + node.previousSibling = ps; + ps.nextSibling = node; + }else{ + node.previousSibling = null; + } + node.nextSibling = null; + this.setLastChild(node); + node.setOwnerTree(this.getOwnerTree()); + this.fireEvent("append", this.ownerTree, this, node, index); + if(oldParent){ + node.fireEvent("move", this.ownerTree, node, oldParent, this, index); + } + return node; + } + }, + + + removeChild : function(node){ + var index = this.childNodes.indexOf(node); + if(index == -1){ + return false; + } + if(this.fireEvent("beforeremove", this.ownerTree, this, node) === false){ + return false; + } + + + this.childNodes.splice(index, 1); + + + if(node.previousSibling){ + node.previousSibling.nextSibling = node.nextSibling; + } + if(node.nextSibling){ + node.nextSibling.previousSibling = node.previousSibling; + } + + + if(this.firstChild == node){ + this.setFirstChild(node.nextSibling); + } + if(this.lastChild == node){ + this.setLastChild(node.previousSibling); + } + + node.setOwnerTree(null); + + node.parentNode = null; + node.previousSibling = null; + node.nextSibling = null; + this.fireEvent("remove", this.ownerTree, this, node); + return node; + }, + + + insertBefore : function(node, refNode){ + if(!refNode){ + return this.appendChild(node); + } + + if(node == refNode){ + return false; + } + + if(this.fireEvent("beforeinsert", this.ownerTree, this, node, refNode) === false){ + return false; + } + var index = this.childNodes.indexOf(refNode); + var oldParent = node.parentNode; + var refIndex = index; + + + if(oldParent == this && this.childNodes.indexOf(node) < index){ + refIndex--; + } + + + if(oldParent){ + if(node.fireEvent("beforemove", node.getOwnerTree(), node, oldParent, this, index, refNode) === false){ + return false; + } + oldParent.removeChild(node); + } + if(refIndex == 0){ + this.setFirstChild(node); + } + this.childNodes.splice(refIndex, 0, node); + node.parentNode = this; + var ps = this.childNodes[refIndex-1]; + if(ps){ + node.previousSibling = ps; + ps.nextSibling = node; + }else{ + node.previousSibling = null; + } + node.nextSibling = refNode; + refNode.previousSibling = node; + node.setOwnerTree(this.getOwnerTree()); + this.fireEvent("insert", this.ownerTree, this, node, refNode); + if(oldParent){ + node.fireEvent("move", this.ownerTree, node, oldParent, this, refIndex, refNode); + } + return node; + }, + + + item : function(index){ + return this.childNodes[index]; + }, + + + replaceChild : function(newChild, oldChild){ + this.insertBefore(newChild, oldChild); + this.removeChild(oldChild); + return oldChild; + }, + + + indexOf : function(child){ + return this.childNodes.indexOf(child); + }, + + + getOwnerTree : function(){ + + if(!this.ownerTree){ + var p = this; + while(p){ + if(p.ownerTree){ + this.ownerTree = p.ownerTree; + break; + } + p = p.parentNode; + } + } + return this.ownerTree; + }, + + + getDepth : function(){ + var depth = 0; + var p = this; + while(p.parentNode){ + ++depth; + p = p.parentNode; + } + return depth; + }, + + + setOwnerTree : function(tree){ + + if(tree != this.ownerTree){ + if(this.ownerTree){ + this.ownerTree.unregisterNode(this); + } + this.ownerTree = tree; + var cs = this.childNodes; + for(var i = 0, len = cs.length; i < len; i++) { + cs[i].setOwnerTree(tree); + } + if(tree){ + tree.registerNode(this); + } + } + }, + + + getPath : function(attr){ + attr = attr || "id"; + var p = this.parentNode; + var b = [this.attributes[attr]]; + while(p){ + b.unshift(p.attributes[attr]); + p = p.parentNode; + } + var sep = this.getOwnerTree().pathSeparator; + return sep + b.join(sep); + }, + + + bubble : function(fn, scope, args){ + var p = this; + while(p){ + if(fn.call(scope || p, args || p) === false){ + break; + } + p = p.parentNode; + } + }, + + + cascade : function(fn, scope, args){ + if(fn.call(scope || this, args || this) !== false){ + var cs = this.childNodes; + for(var i = 0, len = cs.length; i < len; i++) { + cs[i].cascade(fn, scope, args); + } + } + }, + + + eachChild : function(fn, scope, args){ + var cs = this.childNodes; + for(var i = 0, len = cs.length; i < len; i++) { + if(fn.call(scope || this, args || cs[i]) === false){ + break; + } + } + }, + + + findChild : function(attribute, value){ + var cs = this.childNodes; + for(var i = 0, len = cs.length; i < len; i++) { + if(cs[i].attributes[attribute] == value){ + return cs[i]; + } + } + return null; + }, + + + findChildBy : function(fn, scope){ + var cs = this.childNodes; + for(var i = 0, len = cs.length; i < len; i++) { + if(fn.call(scope||cs[i], cs[i]) === true){ + return cs[i]; + } + } + return null; + }, + + + sort : function(fn, scope){ + var cs = this.childNodes; + var len = cs.length; + if(len > 0){ + var sortFn = scope ? function(){fn.apply(scope, arguments);} : fn; + cs.sort(sortFn); + for(var i = 0; i < len; i++){ + var n = cs[i]; + n.previousSibling = cs[i-1]; + n.nextSibling = cs[i+1]; + if(i == 0){ + this.setFirstChild(n); + } + if(i == len-1){ + this.setLastChild(n); + } + } + } + }, + + + contains : function(node){ + return node.isAncestor(this); + }, + + + isAncestor : function(node){ + var p = this.parentNode; + while(p){ + if(p == node){ + return true; + } + p = p.parentNode; + } + return false; + }, + + toString : function(){ + return "[Node"+(this.id?" "+this.id:"")+"]"; + } +}); + +Ext.ComponentMgr = function(){ + var all = new Ext.util.MixedCollection(); + + return { + + register : function(c){ + all.add(c); + }, + + + unregister : function(c){ + all.remove(c); + }, + + + get : function(id){ + return all.get(id); + }, + + + onAvailable : function(id, fn, scope){ + all.on("add", function(index, o){ + if(o.id == id){ + fn.call(scope || o, o); + all.un("add", fn, scope); + } + }); + } + }; +}(); + + +Ext.Component = function(config){ + config = config || {}; + if(config.tagName || config.dom || typeof config == "string"){ config = {el: config, id: config.id || config}; + } + this.initialConfig = config; + + Ext.apply(this, config); + this.addEvents({ + + disable : true, + + enable : true, + + beforeshow : true, + + show : true, + + beforehide : true, + + hide : true, + + beforerender : true, + + render : true, + + beforedestroy : true, + + destroy : true + }); + if(!this.id){ + this.id = "ext-comp-" + (++Ext.Component.AUTO_ID); + } + Ext.ComponentMgr.register(this); + Ext.Component.superclass.constructor.call(this); + this.initComponent(); + if(this.renderTo){ this.render(this.renderTo); + delete this.renderTo; + } +}; + +Ext.Component.AUTO_ID = 1000; + +Ext.extend(Ext.Component, Ext.util.Observable, { + + hidden : false, + + disabled : false, + + rendered : false, + + + disabledClass : "x-item-disabled", + + allowDomMove : true, + + hideMode: 'display', + + ctype : "Ext.Component", + + actionMode : "el", + + getActionEl : function(){ + return this[this.actionMode]; + }, + + initComponent : Ext.emptyFn, + + render : function(container, position){ + if(!this.rendered && this.fireEvent("beforerender", this) !== false){ + if(!container && this.el){ + this.el = Ext.get(this.el); + container = this.el.dom.parentNode; + this.allowDomMove = false; + } + this.container = Ext.get(container); + this.rendered = true; + if(position !== undefined){ + if(typeof position == 'number'){ + position = this.container.dom.childNodes[position]; + }else{ + position = Ext.getDom(position); + } + } + this.onRender(this.container, position || null); + if(this.cls){ + this.el.addClass(this.cls); + delete this.cls; + } + if(this.style){ + this.el.applyStyles(this.style); + delete this.style; + } + this.fireEvent("render", this); + this.afterRender(this.container); + if(this.hidden){ + this.hide(); + } + if(this.disabled){ + this.disable(); + } + } + return this; + }, + + onRender : function(ct, position){ + if(this.el){ + this.el = Ext.get(this.el); + if(this.allowDomMove !== false){ + ct.dom.insertBefore(this.el.dom, position); + } + } + }, + + getAutoCreate : function(){ + var cfg = typeof this.autoCreate == "object" ? + this.autoCreate : Ext.apply({}, this.defaultAutoCreate); + if(this.id && !cfg.id){ + cfg.id = this.id; + } + return cfg; + }, + + afterRender : Ext.emptyFn, + + + destroy : function(){ + if(this.fireEvent("beforedestroy", this) !== false){ + this.purgeListeners(); + this.beforeDestroy(); + if(this.rendered){ + this.el.removeAllListeners(); + this.el.remove(); + if(this.actionMode == "container"){ + this.container.remove(); + } + } + this.onDestroy(); + Ext.ComponentMgr.unregister(this); + this.fireEvent("destroy", this); + } + }, + + beforeDestroy : function(){ + + }, + + onDestroy : function(){ + + }, + + + getEl : function(){ + return this.el; + }, + + + getId : function(){ + return this.id; + }, + + + focus : function(selectText){ + if(this.rendered){ + this.el.focus(); + if(selectText === true){ + this.el.dom.select(); + } + } + return this; + }, + + blur : function(){ + if(this.rendered){ + this.el.blur(); + } + return this; + }, + + + disable : function(){ + if(this.rendered){ + this.onDisable(); + } + this.disabled = true; + this.fireEvent("disable", this); + return this; + }, + + onDisable : function(){ + this.getActionEl().addClass(this.disabledClass); + this.el.dom.disabled = true; + }, + + + enable : function(){ + if(this.rendered){ + this.onEnable(); + } + this.disabled = false; + this.fireEvent("enable", this); + return this; + }, + + onEnable : function(){ + this.getActionEl().removeClass(this.disabledClass); + this.el.dom.disabled = false; + }, + + + setDisabled : function(disabled){ + this[disabled ? "disable" : "enable"](); + }, + + + show: function(){ + if(this.fireEvent("beforeshow", this) !== false){ + this.hidden = false; + if(this.rendered){ + this.onShow(); + } + this.fireEvent("show", this); + } + return this; + }, + + onShow : function(){ + var ae = this.getActionEl(); + if(this.hideMode == 'visibility'){ + ae.dom.style.visibility = "visible"; + }else if(this.hideMode == 'offsets'){ + ae.removeClass('x-hidden'); + }else{ + ae.dom.style.display = ""; + } + }, + + + hide: function(){ + if(this.fireEvent("beforehide", this) !== false){ + this.hidden = true; + if(this.rendered){ + this.onHide(); + } + this.fireEvent("hide", this); + } + return this; + }, + + onHide : function(){ + var ae = this.getActionEl(); + if(this.hideMode == 'visibility'){ + ae.dom.style.visibility = "hidden"; + }else if(this.hideMode == 'offsets'){ + ae.addClass('x-hidden'); + }else{ + ae.dom.style.display = "none"; + } + }, + + + setVisible: function(visible){ + if(visible) { + this.show(); + }else{ + this.hide(); + } + return this; + }, + + + isVisible : function(){ + return this.getActionEl().isVisible(); + }, + + cloneConfig : function(overrides){ + overrides = overrides || {}; + var id = overrides.id || Ext.id(); + var cfg = Ext.applyIf(overrides, this.initialConfig); + cfg.id = id; return new this.constructor(cfg); + } +}); + +(function(){ +Ext.Layer = function(config, existingEl){ + config = config || {}; + var dh = Ext.DomHelper; + var cp = config.parentEl, pel = cp ? Ext.getDom(cp) : document.body; + if(existingEl){ + this.dom = Ext.getDom(existingEl); + } + if(!this.dom){ + var o = config.dh || {tag: "div", cls: "x-layer"}; + this.dom = dh.append(pel, o); + } + if(config.cls){ + this.addClass(config.cls); + } + this.constrain = config.constrain !== false; + this.visibilityMode = Ext.Element.VISIBILITY; + if(config.id){ + this.id = this.dom.id = config.id; + }else{ + this.id = Ext.id(this.dom); + } + this.zindex = config.zindex || this.getZIndex(); + this.position("absolute", this.zindex); + if(config.shadow){ + this.shadowOffset = config.shadowOffset || 4; + this.shadow = new Ext.Shadow({ + offset : this.shadowOffset, + mode : config.shadow + }); + }else{ + this.shadowOffset = 0; + } + this.useShim = config.shim !== false && Ext.useShims; + this.useDisplay = config.useDisplay; + this.hide(); +}; + +var supr = Ext.Element.prototype; + + +var shims = []; + +Ext.extend(Ext.Layer, Ext.Element, { + + getZIndex : function(){ + return this.zindex || parseInt(this.getStyle("z-index"), 10) || 11000; + }, + + getShim : function(){ + if(!this.useShim){ + return null; + } + if(this.shim){ + return this.shim; + } + var shim = shims.shift(); + if(!shim){ + shim = this.createShim(); + shim.enableDisplayMode('block'); + shim.dom.style.display = 'none'; + shim.dom.style.visibility = 'visible'; + } + var pn = this.dom.parentNode; + if(shim.dom.parentNode != pn){ + pn.insertBefore(shim.dom, this.dom); + } + shim.setStyle('z-index', this.getZIndex()-2); + this.shim = shim; + return shim; + }, + + hideShim : function(){ + if(this.shim){ + this.shim.setDisplayed(false); + shims.push(this.shim); + delete this.shim; + } + }, + + disableShadow : function(){ + if(this.shadow){ + this.shadowDisabled = true; + this.shadow.hide(); + this.lastShadowOffset = this.shadowOffset; + this.shadowOffset = 0; + } + }, + + enableShadow : function(show){ + if(this.shadow){ + this.shadowDisabled = false; + this.shadowOffset = this.lastShadowOffset; + delete this.lastShadowOffset; + if(show){ + this.sync(true); + } + } + }, + + + + + sync : function(doShow){ + var sw = this.shadow; + if(!this.updating && this.isVisible() && (sw || this.useShim)){ + var sh = this.getShim(); + + var w = this.getWidth(), + h = this.getHeight(); + + var l = this.getLeft(true), + t = this.getTop(true); + + if(sw && !this.shadowDisabled){ + if(doShow && !sw.isVisible()){ + sw.show(this); + }else{ + sw.realign(l, t, w, h); + } + if(sh){ + if(doShow){ + sh.show(); + } + + var a = sw.adjusts, s = sh.dom.style; + s.left = (Math.min(l, l+a.l))+"px"; + s.top = (Math.min(t, t+a.t))+"px"; + s.width = (w+a.w)+"px"; + s.height = (h+a.h)+"px"; + } + }else if(sh){ + if(doShow){ + sh.show(); + } + sh.setSize(w, h); + sh.setLeftTop(l, t); + } + + } + }, + + + destroy : function(){ + this.hideShim(); + if(this.shadow){ + this.shadow.hide(); + } + this.removeAllListeners(); + var pn = this.dom.parentNode; + if(pn){ + pn.removeChild(this.dom); + } + Ext.Element.uncache(this.id); + }, + + remove : function(){ + this.destroy(); + }, + + + beginUpdate : function(){ + this.updating = true; + }, + + + endUpdate : function(){ + this.updating = false; + this.sync(true); + }, + + + hideUnders : function(negOffset){ + if(this.shadow){ + this.shadow.hide(); + } + this.hideShim(); + }, + + + constrainXY : function(){ + if(this.constrain){ + var vw = Ext.lib.Dom.getViewWidth(), + vh = Ext.lib.Dom.getViewHeight(); + var s = Ext.get(document).getScroll(); + + var xy = this.getXY(); + var x = xy[0], y = xy[1]; + var w = this.dom.offsetWidth+this.shadowOffset, h = this.dom.offsetHeight+this.shadowOffset; + + var moved = false; + + if((x + w) > vw+s.left){ + x = vw - w - this.shadowOffset; + moved = true; + } + if((y + h) > vh+s.top){ + y = vh - h - this.shadowOffset; + moved = true; + } + + if(x < s.left){ + x = s.left; + moved = true; + } + if(y < s.top){ + y = s.top; + moved = true; + } + if(moved){ + if(this.avoidY){ + var ay = this.avoidY; + if(y <= ay && (y+h) >= ay){ + y = ay-h-5; + } + } + xy = [x, y]; + this.storeXY(xy); + supr.setXY.call(this, xy); + this.sync(); + } + } + }, + + isVisible : function(){ + return this.visible; + }, + + + showAction : function(){ + this.visible = true; + if(this.useDisplay === true){ + this.setDisplayed(""); + }else if(this.lastXY){ + supr.setXY.call(this, this.lastXY); + }else if(this.lastLT){ + supr.setLeftTop.call(this, this.lastLT[0], this.lastLT[1]); + } + }, + + + hideAction : function(){ + this.visible = false; + if(this.useDisplay === true){ + this.setDisplayed(false); + }else{ + this.setLeftTop(-10000,-10000); + } + }, + + + setVisible : function(v, a, d, c, e){ + if(v){ + this.showAction(); + } + if(a && v){ + var cb = function(){ + this.sync(true); + if(c){ + c(); + } + }.createDelegate(this); + supr.setVisible.call(this, true, true, d, cb, e); + }else{ + if(!v){ + this.hideUnders(true); + } + var cb = c; + if(a){ + cb = function(){ + this.hideAction(); + if(c){ + c(); + } + }.createDelegate(this); + } + supr.setVisible.call(this, v, a, d, cb, e); + if(v){ + this.sync(true); + }else if(!a){ + this.hideAction(); + } + } + }, + + storeXY : function(xy){ + delete this.lastLT; + this.lastXY = xy; + }, + + storeLeftTop : function(left, top){ + delete this.lastXY; + this.lastLT = [left, top]; + }, + + + beforeFx : function(){ + this.beforeAction(); + return Ext.Layer.superclass.beforeFx.apply(this, arguments); + }, + + + afterFx : function(){ + Ext.Layer.superclass.afterFx.apply(this, arguments); + this.sync(this.isVisible()); + }, + + + beforeAction : function(){ + if(!this.updating && this.shadow){ + this.shadow.hide(); + } + }, + + + setLeft : function(left){ + this.storeLeftTop(left, this.getTop(true)); + supr.setLeft.apply(this, arguments); + this.sync(); + }, + + setTop : function(top){ + this.storeLeftTop(this.getLeft(true), top); + supr.setTop.apply(this, arguments); + this.sync(); + }, + + setLeftTop : function(left, top){ + this.storeLeftTop(left, top); + supr.setLeftTop.apply(this, arguments); + this.sync(); + }, + + setXY : function(xy, a, d, c, e){ + this.fixDisplay(); + this.beforeAction(); + this.storeXY(xy); + var cb = this.createCB(c); + supr.setXY.call(this, xy, a, d, cb, e); + if(!a){ + cb(); + } + }, + + + createCB : function(c){ + var el = this; + return function(){ + el.constrainXY(); + el.sync(true); + if(c){ + c(); + } + }; + }, + + + setX : function(x, a, d, c, e){ + this.setXY([x, this.getY()], a, d, c, e); + }, + + + setY : function(y, a, d, c, e){ + this.setXY([this.getX(), y], a, d, c, e); + }, + + + setSize : function(w, h, a, d, c, e){ + this.beforeAction(); + var cb = this.createCB(c); + supr.setSize.call(this, w, h, a, d, cb, e); + if(!a){ + cb(); + } + }, + + + setWidth : function(w, a, d, c, e){ + this.beforeAction(); + var cb = this.createCB(c); + supr.setWidth.call(this, w, a, d, cb, e); + if(!a){ + cb(); + } + }, + + + setHeight : function(h, a, d, c, e){ + this.beforeAction(); + var cb = this.createCB(c); + supr.setHeight.call(this, h, a, d, cb, e); + if(!a){ + cb(); + } + }, + + + setBounds : function(x, y, w, h, a, d, c, e){ + this.beforeAction(); + var cb = this.createCB(c); + if(!a){ + this.storeXY([x, y]); + supr.setXY.call(this, [x, y]); + supr.setSize.call(this, w, h, a, d, cb, e); + cb(); + }else{ + supr.setBounds.call(this, x, y, w, h, a, d, cb, e); + } + return this; + }, + + + setZIndex : function(zindex){ + this.zindex = zindex; + this.setStyle("z-index", zindex + 2); + if(this.shadow){ + this.shadow.setZIndex(zindex + 1); + } + if(this.shim){ + this.shim.setStyle("z-index", zindex); + } + } +}); +})(); + +Ext.Shadow = function(config){ + Ext.apply(this, config); + if(typeof this.mode != "string"){ + this.mode = this.defaultMode; + } + var o = this.offset, a = {h: 0}; + var rad = Math.floor(this.offset/2); + switch(this.mode.toLowerCase()){ case "drop": + a.w = 0; + a.l = a.t = o; + a.t -= 1; + if(Ext.isIE){ + a.l -= this.offset + rad; + a.t -= this.offset + rad; + a.w -= rad; + a.h -= rad; + a.t += 1; + } + break; + case "sides": + a.w = (o*2); + a.l = -o; + a.t = o-1; + if(Ext.isIE){ + a.l -= (this.offset - rad); + a.t -= this.offset + rad; + a.l += 1; + a.w -= (this.offset - rad)*2; + a.w -= rad + 1; + a.h -= 1; + } + break; + case "frame": + a.w = a.h = (o*2); + a.l = a.t = -o; + a.t += 1; + a.h -= 2; + if(Ext.isIE){ + a.l -= (this.offset - rad); + a.t -= (this.offset - rad); + a.l += 1; + a.w -= (this.offset + rad + 1); + a.h -= (this.offset + rad); + a.h += 1; + } + break; + }; + + this.adjusts = a; +}; + +Ext.Shadow.prototype = { + + + offset: 4, + + defaultMode: "drop", + + + show : function(target){ + target = Ext.get(target); + if(!this.el){ + this.el = Ext.Shadow.Pool.pull(); + if(this.el.dom.nextSibling != target.dom){ + this.el.insertBefore(target); + } + } + this.el.setStyle("z-index", this.zIndex || parseInt(target.getStyle("z-index"), 10)-1); + if(Ext.isIE){ + this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")"; + } + this.realign( + target.getLeft(true), + target.getTop(true), + target.getWidth(), + target.getHeight() + ); + this.el.dom.style.display = "block"; + }, + + + isVisible : function(){ + return this.el ? true : false; + }, + + + realign : function(l, t, w, h){ + if(!this.el){ + return; + } + var a = this.adjusts, d = this.el.dom, s = d.style; + var iea = 0; + s.left = (l+a.l)+"px"; + s.top = (t+a.t)+"px"; + var sw = (w+a.w), sh = (h+a.h), sws = sw +"px", shs = sh + "px"; + if(s.width != sws || s.height != shs){ + s.width = sws; + s.height = shs; + if(!Ext.isIE){ + var cn = d.childNodes; + var sww = Math.max(0, (sw-12))+"px"; + cn[0].childNodes[1].style.width = sww; + cn[1].childNodes[1].style.width = sww; + cn[2].childNodes[1].style.width = sww; + cn[1].style.height = Math.max(0, (sh-12))+"px"; + } + } + }, + + + hide : function(){ + if(this.el){ + this.el.dom.style.display = "none"; + Ext.Shadow.Pool.push(this.el); + delete this.el; + } + }, + + + setZIndex : function(z){ + this.zIndex = z; + if(this.el){ + this.el.setStyle("z-index", z); + } + } +}; + +Ext.Shadow.Pool = function(){ + var p = []; + var markup = Ext.isIE ? + '
' : + '
'; + return { + pull : function(){ + var sh = p.shift(); + if(!sh){ + sh = Ext.get(Ext.DomHelper.insertHtml("beforeBegin", document.body.firstChild, markup)); + sh.autoBoxAdjust = false; + } + return sh; + }, + + push : function(sh){ + p.push(sh); + } + }; +}(); + +Ext.BoxComponent = function(config){ + Ext.BoxComponent.superclass.constructor.call(this, config); + this.addEvents({ + + resize : true, + + move : true + }); +}; + +Ext.extend(Ext.BoxComponent, Ext.Component, { + boxReady : false, + deferHeight: false, + + + setSize : function(w, h){ + if(typeof w == 'object'){ + h = w.height; + w = w.width; + } + if(!this.boxReady){ + this.width = w; + this.height = h; + return this; + } + + if(this.lastSize && this.lastSize.width == w && this.lastSize.height == h){ + return this; + } + this.lastSize = {width: w, height: h}; + + var adj = this.adjustSize(w, h); + var aw = adj.width, ah = adj.height; + if(aw !== undefined || ah !== undefined){ var rz = this.getResizeEl(); + if(!this.deferHeight && aw !== undefined && ah !== undefined){ + rz.setSize(aw, ah); + }else if(!this.deferHeight && ah !== undefined){ + rz.setHeight(ah); + }else if(aw !== undefined){ + rz.setWidth(aw); + } + this.onResize(aw, ah, w, h); + this.fireEvent('resize', this, aw, ah, w, h); + } + return this; + }, + + + getSize : function(){ + return this.el.getSize(); + }, + + + getPosition : function(local){ + if(local === true){ + return [this.el.getLeft(true), this.el.getTop(true)]; + } + return this.xy || this.el.getXY(); + }, + + + getBox : function(local){ + var s = this.el.getSize(); + if(local){ + s.x = this.el.getLeft(true); + s.y = this.el.getTop(true); + }else{ + var xy = this.xy || this.el.getXY(); + s.x = xy[0]; + s.y = xy[1]; + } + return s; + }, + + + updateBox : function(box){ + this.setSize(box.width, box.height); + this.setPagePosition(box.x, box.y); + return this; + }, + + getResizeEl : function(){ + return this.resizeEl || this.el; + }, + + getPositionEl : function(){ + return this.positionEl || this.el; + }, + + + setPosition : function(x, y){ + this.x = x; + this.y = y; + if(!this.boxReady){ + return this; + } + var adj = this.adjustPosition(x, y); + var ax = adj.x, ay = adj.y; + + var el = this.getPositionEl(); + if(ax !== undefined || ay !== undefined){ + if(ax !== undefined && ay !== undefined){ + el.setLeftTop(ax, ay); + }else if(ax !== undefined){ + el.setLeft(ax); + }else if(ay !== undefined){ + el.setTop(ay); + } + this.onPosition(ax, ay); + this.fireEvent('move', this, ax, ay); + } + return this; + }, + + + setPagePosition : function(x, y){ + this.pageX = x; + this.pageY = y; + if(!this.boxReady){ + return; + } + if(x === undefined || y === undefined){ return; + } + var p = this.el.translatePoints(x, y); + this.setPosition(p.left, p.top); + return this; + }, + + onRender : function(ct, position){ + Ext.BoxComponent.superclass.onRender.call(this, ct, position); + if(this.resizeEl){ + this.resizeEl = Ext.get(this.resizeEl); + } + if(this.positionEl){ + this.positionEl = Ext.get(this.positionEl); + } + }, + + afterRender : function(){ + Ext.BoxComponent.superclass.afterRender.call(this); + this.boxReady = true; + this.setSize(this.width, this.height); + if(this.x || this.y){ + this.setPosition(this.x, this.y); + } + if(this.pageX || this.pageY){ + this.setPagePosition(this.pageX, this.pageY); + } + }, + + + syncSize : function(){ + delete this.lastSize; + this.setSize(this.el.getWidth(), this.el.getHeight()); + return this; + }, + + + onResize : function(adjWidth, adjHeight, rawWidth, rawHeight){ + + }, + + + onPosition : function(x, y){ + + }, + + adjustSize : function(w, h){ + if(this.autoWidth){ + w = 'auto'; + } + if(this.autoHeight){ + h = 'auto'; + } + return {width : w, height: h}; + }, + + adjustPosition : function(x, y){ + return {x : x, y: y}; + } +}); + +Ext.SplitBar = function(dragElement, resizingElement, orientation, placement, existingProxy){ + + + this.el = Ext.get(dragElement, true); + this.el.dom.unselectable = "on"; + + this.resizingEl = Ext.get(resizingElement, true); + + + this.orientation = orientation || Ext.SplitBar.HORIZONTAL; + + + this.minSize = 0; + + + this.maxSize = 2000; + + + this.animate = false; + + + this.useShim = false; + + + this.shim = null; + + if(!existingProxy){ + + this.proxy = Ext.SplitBar.createProxy(this.orientation); + }else{ + this.proxy = Ext.get(existingProxy).dom; + } + + this.dd = new Ext.dd.DDProxy(this.el.dom.id, "XSplitBars", {dragElId : this.proxy.id}); + + + this.dd.b4StartDrag = this.onStartProxyDrag.createDelegate(this); + + + this.dd.endDrag = this.onEndProxyDrag.createDelegate(this); + + + this.dragSpecs = {}; + + + this.adapter = new Ext.SplitBar.BasicLayoutAdapter(); + this.adapter.init(this); + + if(this.orientation == Ext.SplitBar.HORIZONTAL){ + + this.placement = placement || (this.el.getX() > this.resizingEl.getX() ? Ext.SplitBar.LEFT : Ext.SplitBar.RIGHT); + this.el.addClass("x-splitbar-h"); + }else{ + + this.placement = placement || (this.el.getY() > this.resizingEl.getY() ? Ext.SplitBar.TOP : Ext.SplitBar.BOTTOM); + this.el.addClass("x-splitbar-v"); + } + + this.addEvents({ + + "resize" : true, + + "moved" : true, + + "beforeresize" : true, + + "beforeapply" : true + }); + + Ext.SplitBar.superclass.constructor.call(this); +}; + +Ext.extend(Ext.SplitBar, Ext.util.Observable, { + onStartProxyDrag : function(x, y){ + this.fireEvent("beforeresize", this); + if(!this.overlay){ + var o = Ext.DomHelper.insertFirst(document.body, {cls: "x-drag-overlay", html: " "}, true); + o.unselectable(); + o.enableDisplayMode("block"); + + Ext.SplitBar.prototype.overlay = o; + } + this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true)); + this.overlay.show(); + Ext.get(this.proxy).setDisplayed("block"); + var size = this.adapter.getElementSize(this); + this.activeMinSize = this.getMinimumSize();; + this.activeMaxSize = this.getMaximumSize();; + var c1 = size - this.activeMinSize; + var c2 = Math.max(this.activeMaxSize - size, 0); + if(this.orientation == Ext.SplitBar.HORIZONTAL){ + this.dd.resetConstraints(); + this.dd.setXConstraint( + this.placement == Ext.SplitBar.LEFT ? c1 : c2, + this.placement == Ext.SplitBar.LEFT ? c2 : c1 + ); + this.dd.setYConstraint(0, 0); + }else{ + this.dd.resetConstraints(); + this.dd.setXConstraint(0, 0); + this.dd.setYConstraint( + this.placement == Ext.SplitBar.TOP ? c1 : c2, + this.placement == Ext.SplitBar.TOP ? c2 : c1 + ); + } + this.dragSpecs.startSize = size; + this.dragSpecs.startPoint = [x, y]; + Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd, x, y); + }, + + + onEndProxyDrag : function(e){ + Ext.get(this.proxy).setDisplayed(false); + var endPoint = Ext.lib.Event.getXY(e); + if(this.overlay){ + this.overlay.hide(); + } + var newSize; + if(this.orientation == Ext.SplitBar.HORIZONTAL){ + newSize = this.dragSpecs.startSize + + (this.placement == Ext.SplitBar.LEFT ? + endPoint[0] - this.dragSpecs.startPoint[0] : + this.dragSpecs.startPoint[0] - endPoint[0] + ); + }else{ + newSize = this.dragSpecs.startSize + + (this.placement == Ext.SplitBar.TOP ? + endPoint[1] - this.dragSpecs.startPoint[1] : + this.dragSpecs.startPoint[1] - endPoint[1] + ); + } + newSize = Math.min(Math.max(newSize, this.activeMinSize), this.activeMaxSize); + if(newSize != this.dragSpecs.startSize){ + if(this.fireEvent('beforeapply', this, newSize) !== false){ + this.adapter.setElementSize(this, newSize); + this.fireEvent("moved", this, newSize); + this.fireEvent("resize", this, newSize); + } + } + }, + + + getAdapter : function(){ + return this.adapter; + }, + + + setAdapter : function(adapter){ + this.adapter = adapter; + this.adapter.init(this); + }, + + + getMinimumSize : function(){ + return this.minSize; + }, + + + setMinimumSize : function(minSize){ + this.minSize = minSize; + }, + + + getMaximumSize : function(){ + return this.maxSize; + }, + + + setMaximumSize : function(maxSize){ + this.maxSize = maxSize; + }, + + + setCurrentSize : function(size){ + var oldAnimate = this.animate; + this.animate = false; + this.adapter.setElementSize(this, size); + this.animate = oldAnimate; + }, + + + destroy : function(removeEl){ + if(this.shim){ + this.shim.remove(); + } + this.dd.unreg(); + this.proxy.parentNode.removeChild(this.proxy); + if(removeEl){ + this.el.remove(); + } + } +}); + + +Ext.SplitBar.createProxy = function(dir){ + var proxy = new Ext.Element(document.createElement("div")); + proxy.unselectable(); + var cls = 'x-splitbar-proxy'; + proxy.addClass(cls + ' ' + (dir == Ext.SplitBar.HORIZONTAL ? cls +'-h' : cls + '-v')); + document.body.appendChild(proxy.dom); + return proxy.dom; +}; + + +Ext.SplitBar.BasicLayoutAdapter = function(){ +}; + +Ext.SplitBar.BasicLayoutAdapter.prototype = { + + init : function(s){ + + }, + + getElementSize : function(s){ + if(s.orientation == Ext.SplitBar.HORIZONTAL){ + return s.resizingEl.getWidth(); + }else{ + return s.resizingEl.getHeight(); + } + }, + + + setElementSize : function(s, newSize, onComplete){ + if(s.orientation == Ext.SplitBar.HORIZONTAL){ + if(!s.animate){ + s.resizingEl.setWidth(newSize); + if(onComplete){ + onComplete(s, newSize); + } + }else{ + s.resizingEl.setWidth(newSize, true, .1, onComplete, 'easeOut'); + } + }else{ + + if(!s.animate){ + s.resizingEl.setHeight(newSize); + if(onComplete){ + onComplete(s, newSize); + } + }else{ + s.resizingEl.setHeight(newSize, true, .1, onComplete, 'easeOut'); + } + } + } +}; + + +Ext.SplitBar.AbsoluteLayoutAdapter = function(container){ + this.basic = new Ext.SplitBar.BasicLayoutAdapter(); + this.container = Ext.get(container); +}; + +Ext.SplitBar.AbsoluteLayoutAdapter.prototype = { + init : function(s){ + this.basic.init(s); + }, + + getElementSize : function(s){ + return this.basic.getElementSize(s); + }, + + setElementSize : function(s, newSize, onComplete){ + this.basic.setElementSize(s, newSize, this.moveSplitter.createDelegate(this, [s])); + }, + + moveSplitter : function(s){ + var yes = Ext.SplitBar; + switch(s.placement){ + case yes.LEFT: + s.el.setX(s.resizingEl.getRight()); + break; + case yes.RIGHT: + s.el.setStyle("right", (this.container.getWidth() - s.resizingEl.getLeft()) + "px"); + break; + case yes.TOP: + s.el.setY(s.resizingEl.getBottom()); + break; + case yes.BOTTOM: + s.el.setY(s.resizingEl.getTop() - s.el.getHeight()); + break; + } + } +}; + + +Ext.SplitBar.VERTICAL = 1; + + +Ext.SplitBar.HORIZONTAL = 2; + + +Ext.SplitBar.LEFT = 1; + + +Ext.SplitBar.RIGHT = 2; + + +Ext.SplitBar.TOP = 3; + + +Ext.SplitBar.BOTTOM = 4; + + +Ext.View = function(container, tpl, config){ + this.el = Ext.get(container); + if(typeof tpl == "string"){ + tpl = new Ext.Template(tpl); + } + tpl.compile(); + + this.tpl = tpl; + + Ext.apply(this, config); + + + this.addEvents({ + + "beforeclick" : true, + + "click" : true, + + "dblclick" : true, + + "contextmenu" : true, + + "selectionchange" : true, + + + "beforeselect" : true + }); + + this.el.on({ + "click": this.onClick, + "dblclick": this.onDblClick, + "contextmenu": this.onContextMenu, + scope:this + }); + + this.selections = []; + this.nodes = []; + this.cmp = new Ext.CompositeElementLite([]); + if(this.store){ + this.setStore(this.store, true); + } + Ext.View.superclass.constructor.call(this); +}; + +Ext.extend(Ext.View, Ext.util.Observable, { + + selectedClass : "x-view-selected", + + emptyText : "", + + getEl : function(){ + return this.el; + }, + + + refresh : function(){ + var t = this.tpl; + this.clearSelections(); + this.el.update(""); + var html = []; + var records = this.store.getRange(); + if(records.length < 1){ + this.el.update(this.emptyText); + return; + } + for(var i = 0, len = records.length; i < len; i++){ + var data = this.prepareData(records[i].data, i, records[i]); + html[html.length] = t.apply(data); + } + this.el.update(html.join("")); + this.nodes = this.el.dom.childNodes; + this.updateIndexes(0); + }, + + + prepareData : function(data){ + return data; + }, + + onUpdate : function(ds, record){ + this.clearSelections(); + var index = this.store.indexOf(record); + var n = this.nodes[index]; + this.tpl.insertBefore(n, this.prepareData(record.data)); + n.parentNode.removeChild(n); + this.updateIndexes(index, index); + }, + + onAdd : function(ds, records, index){ + this.clearSelections(); + if(this.nodes.length == 0){ + this.refresh(); + return; + } + var n = this.nodes[index]; + for(var i = 0, len = records.length; i < len; i++){ + var d = this.prepareData(records[i].data); + if(n){ + this.tpl.insertBefore(n, d); + }else{ + this.tpl.append(this.el, d); + } + } + this.updateIndexes(index); + }, + + onRemove : function(ds, record, index){ + this.clearSelections(); + this.el.dom.removeChild(this.nodes[index]); + this.updateIndexes(index); + }, + + + refreshNode : function(index){ + this.onUpdate(this.store, this.store.getAt(index)); + }, + + updateIndexes : function(startIndex, endIndex){ + var ns = this.nodes; + startIndex = startIndex || 0; + endIndex = endIndex || ns.length - 1; + for(var i = startIndex; i <= endIndex; i++){ + ns[i].nodeIndex = i; + } + }, + + + setStore : function(store, initial){ + if(!initial && this.store){ + this.store.un("datachanged", this.refresh); + this.store.un("add", this.onAdd); + this.store.un("remove", this.onRemove); + this.store.un("update", this.onUpdate); + this.store.un("clear", this.refresh); + } + if(store){ + store.on("datachanged", this.refresh, this); + store.on("add", this.onAdd, this); + store.on("remove", this.onRemove, this); + store.on("update", this.onUpdate, this); + store.on("clear", this.refresh, this); + } + this.store = store; + if(store){ + this.refresh(); + } + }, + + + findItemFromChild : function(node){ + var el = this.el.dom; + if(!node || node.parentNode == el){ + return node; + } + var p = node.parentNode; + while(p && p != el){ + if(p.parentNode == el){ + return p; + } + p = p.parentNode; + } + return null; + }, + + + onClick : function(e){ + var item = this.findItemFromChild(e.getTarget()); + if(item){ + var index = this.indexOf(item); + if(this.onItemClick(item, index, e) !== false){ + this.fireEvent("click", this, index, item, e); + } + }else{ + this.clearSelections(); + } + }, + + + onContextMenu : function(e){ + var item = this.findItemFromChild(e.getTarget()); + if(item){ + this.fireEvent("contextmenu", this, this.indexOf(item), item, e); + } + }, + + + onDblClick : function(e){ + var item = this.findItemFromChild(e.getTarget()); + if(item){ + this.fireEvent("dblclick", this, this.indexOf(item), item, e); + } + }, + + onItemClick : function(item, index, e){ + if(this.fireEvent("beforeclick", this, index, item, e) === false){ + return false; + } + if(this.multiSelect || this.singleSelect){ + if(this.multiSelect && e.shiftKey && this.lastSelection){ + this.select(this.getNodes(this.indexOf(this.lastSelection), index), false); + }else{ + this.select(item, this.multiSelect && e.ctrlKey); + this.lastSelection = item; + } + e.preventDefault(); + } + return true; + }, + + + getSelectionCount : function(){ + return this.selections.length; + }, + + + getSelectedNodes : function(){ + return this.selections; + }, + + + getSelectedIndexes : function(){ + var indexes = [], s = this.selections; + for(var i = 0, len = s.length; i < len; i++){ + indexes.push(s[i].nodeIndex); + } + return indexes; + }, + + + clearSelections : function(suppressEvent){ + if(this.nodes && (this.multiSelect || this.singleSelect) && this.selections.length > 0){ + this.cmp.elements = this.selections; + this.cmp.removeClass(this.selectedClass); + this.selections = []; + if(!suppressEvent){ + this.fireEvent("selectionchange", this, this.selections); + } + } + }, + + + isSelected : function(node){ + var s = this.selections; + if(s.length < 1){ + return false; + } + node = this.getNode(node); + return s.indexOf(node) !== -1; + }, + + + select : function(nodeInfo, keepExisting, suppressEvent){ + if(nodeInfo instanceof Array){ + if(!keepExisting){ + this.clearSelections(true); + } + for(var i = 0, len = nodeInfo.length; i < len; i++){ + this.select(nodeInfo[i], true, true); + } + } else{ + var node = this.getNode(nodeInfo); + if(node && !this.isSelected(node)){ + if(!keepExisting){ + this.clearSelections(true); + } + if(this.fireEvent("beforeselect", this, node, this.selections) !== false){ + Ext.fly(node).addClass(this.selectedClass); + this.selections.push(node); + if(!suppressEvent){ + this.fireEvent("selectionchange", this, this.selections); + } + } + } + } + }, + + + getNode : function(nodeInfo){ + if(typeof nodeInfo == "string"){ + return document.getElementById(nodeInfo); + }else if(typeof nodeInfo == "number"){ + return this.nodes[nodeInfo]; + } + return nodeInfo; + }, + + + getNodes : function(start, end){ + var ns = this.nodes; + start = start || 0; + end = typeof end == "undefined" ? ns.length - 1 : end; + var nodes = []; + if(start <= end){ + for(var i = start; i <= end; i++){ + nodes.push(ns[i]); + } + } else{ + for(var i = start; i >= end; i--){ + nodes.push(ns[i]); + } + } + return nodes; + }, + + + indexOf : function(node){ + node = this.getNode(node); + if(typeof node.nodeIndex == "number"){ + return node.nodeIndex; + } + var ns = this.nodes; + for(var i = 0, len = ns.length; i < len; i++){ + if(ns[i] == node){ + return i; + } + } + return -1; + } +}); + + +Ext.JsonView = function(container, tpl, config){ + Ext.JsonView.superclass.constructor.call(this, container, tpl, config); + + var um = this.el.getUpdateManager(); + um.setRenderer(this); + um.on("update", this.onLoad, this); + um.on("failure", this.onLoadException, this); + + + + + this.addEvents({ + 'beforerender' : true, + 'load' : true, + 'loadexception' : true + }); +}; +Ext.extend(Ext.JsonView, Ext.View, { + + jsonRoot : "", + + + refresh : function(){ + this.clearSelections(); + this.el.update(""); + var html = []; + var o = this.jsonData; + if(o && o.length > 0){ + for(var i = 0, len = o.length; i < len; i++){ + var data = this.prepareData(o[i], i, o); + html[html.length] = this.tpl.apply(data); + } + }else{ + html.push(this.emptyText); + } + this.el.update(html.join("")); + this.nodes = this.el.dom.childNodes; + this.updateIndexes(0); + }, + + + load : function(){ + var um = this.el.getUpdateManager(); + um.update.apply(um, arguments); + }, + + render : function(el, response){ + this.clearSelections(); + this.el.update(""); + var o; + try{ + o = Ext.util.JSON.decode(response.responseText); + if(this.jsonRoot){ + o = eval("o." + this.jsonRoot); + } + } catch(e){ + } + + this.jsonData = o; + this.beforeRender(); + this.refresh(); + }, + + + getCount : function(){ + return this.jsonData ? this.jsonData.length : 0; + }, + + + getNodeData : function(node){ + if(node instanceof Array){ + var data = []; + for(var i = 0, len = node.length; i < len; i++){ + data.push(this.getNodeData(node[i])); + } + return data; + } + return this.jsonData[this.indexOf(node)] || null; + }, + + beforeRender : function(){ + this.snapshot = this.jsonData; + if(this.sortInfo){ + this.sort.apply(this, this.sortInfo); + } + this.fireEvent("beforerender", this, this.jsonData); + }, + + onLoad : function(el, o){ + this.fireEvent("load", this, this.jsonData, o); + }, + + onLoadException : function(el, o){ + this.fireEvent("loadexception", this, o); + }, + + + filter : function(property, value){ + if(this.jsonData){ + var data = []; + var ss = this.snapshot; + if(typeof value == "string"){ + var vlen = value.length; + if(vlen == 0){ + this.clearFilter(); + return; + } + value = value.toLowerCase(); + for(var i = 0, len = ss.length; i < len; i++){ + var o = ss[i]; + if(o[property].substr(0, vlen).toLowerCase() == value){ + data.push(o); + } + } + } else if(value.exec){ + for(var i = 0, len = ss.length; i < len; i++){ + var o = ss[i]; + if(value.test(o[property])){ + data.push(o); + } + } + } else{ + return; + } + this.jsonData = data; + this.refresh(); + } + }, + + + filterBy : function(fn, scope){ + if(this.jsonData){ + var data = []; + var ss = this.snapshot; + for(var i = 0, len = ss.length; i < len; i++){ + var o = ss[i]; + if(fn.call(scope || this, o)){ + data.push(o); + } + } + this.jsonData = data; + this.refresh(); + } + }, + + + clearFilter : function(){ + if(this.snapshot && this.jsonData != this.snapshot){ + this.jsonData = this.snapshot; + this.refresh(); + } + }, + + + + sort : function(property, dir, sortType){ + this.sortInfo = Array.prototype.slice.call(arguments, 0); + if(this.jsonData){ + var p = property; + var dsc = dir && dir.toLowerCase() == "desc"; + var f = function(o1, o2){ + var v1 = sortType ? sortType(o1[p]) : o1[p]; + var v2 = sortType ? sortType(o2[p]) : o2[p]; + ; + if(v1 < v2){ + return dsc ? +1 : -1; + } else if(v1 > v2){ + return dsc ? -1 : +1; + } else{ + return 0; + } + }; + this.jsonData.sort(f); + this.refresh(); + if(this.jsonData != this.snapshot){ + this.snapshot.sort(f); + } + } + } +}); + +Ext.ColorPalette = function(config){ + Ext.ColorPalette.superclass.constructor.call(this, config); + this.addEvents({ + + select: true + }); + + if(this.handler){ + this.on("select", this.handler, this.scope, true); + } +}; +Ext.extend(Ext.ColorPalette, Ext.Component, { + + itemCls : "x-color-palette", + + value : null, + clickEvent:'click', + ctype: "Ext.ColorPalette", + + + allowReselect : false, + + + colors : [ + "000000", "993300", "333300", "003300", "003366", "000080", "333399", "333333", + "800000", "FF6600", "808000", "008000", "008080", "0000FF", "666699", "808080", + "FF0000", "FF9900", "99CC00", "339966", "33CCCC", "3366FF", "800080", "969696", + "FF00FF", "FFCC00", "FFFF00", "00FF00", "00FFFF", "00CCFF", "993366", "C0C0C0", + "FF99CC", "FFCC99", "FFFF99", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF", "FFFFFF" + ], + + onRender : function(container, position){ + var t = new Ext.MasterTemplate( + ' ' + ); + var c = this.colors; + for(var i = 0, len = c.length; i < len; i++){ + t.add([c[i]]); + } + var el = document.createElement("div"); + el.className = this.itemCls; + t.overwrite(el); + container.dom.insertBefore(el, position); + this.el = Ext.get(el); + this.el.on(this.clickEvent, this.handleClick, this, {delegate: "a"}); + if(this.clickEvent != 'click'){ + this.el.on('click', Ext.emptyFn, this, {delegate: "a", preventDefault:true}); + } + }, + + afterRender : function(){ + Ext.ColorPalette.superclass.afterRender.call(this); + if(this.value){ + var s = this.value; + this.value = null; + this.select(s); + } + }, + + handleClick : function(e, t){ + e.preventDefault(); + if(!this.disabled){ + var c = t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1]; + this.select(c.toUpperCase()); + } + }, + + + select : function(color){ + color = color.replace("#", ""); + if(color != this.value || this.allowReselect){ + var el = this.el; + if(this.value){ + el.child("a.color-"+this.value).removeClass("x-color-palette-sel"); + } + el.child("a.color-"+color).addClass("x-color-palette-sel"); + this.value = color; + this.fireEvent("select", this, color); + } + } +}); + +Ext.DatePicker = function(config){ + Ext.DatePicker.superclass.constructor.call(this, config); + + this.value = config && config.value ? + config.value.clearTime() : new Date().clearTime(); + + this.addEvents({ + + select: true + }); + + if(this.handler){ + this.on("select", this.handler, this.scope || this); + } + + if(!this.disabledDatesRE && this.disabledDates){ + var dd = this.disabledDates; + var re = "(?:"; + for(var i = 0; i < dd.length; i++){ + re += dd[i]; + if(i != dd.length-1) re += "|"; + } + this.disabledDatesRE = new RegExp(re + ")"); + } +}; + +Ext.extend(Ext.DatePicker, Ext.Component, { + + todayText : "Today", + + okText : " OK ", + + cancelText : "Cancel", + + todayTip : "{0} (Spacebar)", + + minDate : null, + + maxDate : null, + + minText : "This date is before the minimum date", + + maxText : "This date is after the maximum date", + + format : "m/d/y", + + disabledDays : null, + + disabledDaysText : "", + + disabledDatesRE : null, + + disabledDatesText : "", + + constrainToViewport : true, + + monthNames : Date.monthNames, + + dayNames : Date.dayNames, + + nextText: 'Next Month (Control+Right)', + + prevText: 'Previous Month (Control+Left)', + + monthYearText: 'Choose a month (Control+Up/Down to move years)', + + startDay : 0, + + + setValue : function(value){ + var old = this.value; + this.value = value.clearTime(true); + if(this.el){ + this.update(this.value); + } + }, + + + getValue : function(){ + return this.value; + }, + + + focus : function(){ + if(this.el){ + this.update(this.activeDate); + } + }, + + + onRender : function(container, position){ + var m = [ + '', + '', + '
  
']; + var dn = this.dayNames; + for(var i = 0; i < 7; i++){ + var d = this.startDay+i; + if(d > 6){ + d = d-7; + } + m.push(""); + } + m[m.length] = ""; + for(var i = 0; i < 42; i++) { + if(i % 7 == 0 && i != 0){ + m[m.length] = ""; + } + m[m.length] = ''; + } + m[m.length] = '
", dn[d].substr(0,1), "
'; + + var el = document.createElement("div"); + el.className = "x-date-picker"; + el.innerHTML = m.join(""); + + container.dom.insertBefore(el, position); + + this.el = Ext.get(el); + this.eventEl = Ext.get(el.firstChild); + + new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"), { + handler: this.showPrevMonth, + scope: this, + preventDefault:true, + stopDefault:true + }); + + new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"), { + handler: this.showNextMonth, + scope: this, + preventDefault:true, + stopDefault:true + }); + + this.eventEl.on("mousewheel", this.handleMouseWheel, this); + + this.monthPicker = this.el.down('div.x-date-mp'); + this.monthPicker.enableDisplayMode('block'); + + var kn = new Ext.KeyNav(this.eventEl, { + "left" : function(e){ + e.ctrlKey ? + this.showPrevMonth() : + this.update(this.activeDate.add("d", -1)); + }, + + "right" : function(e){ + e.ctrlKey ? + this.showNextMonth() : + this.update(this.activeDate.add("d", 1)); + }, + + "up" : function(e){ + e.ctrlKey ? + this.showNextYear() : + this.update(this.activeDate.add("d", -7)); + }, + + "down" : function(e){ + e.ctrlKey ? + this.showPrevYear() : + this.update(this.activeDate.add("d", 7)); + }, + + "pageUp" : function(e){ + this.showNextMonth(); + }, + + "pageDown" : function(e){ + this.showPrevMonth(); + }, + + "enter" : function(e){ + e.stopPropagation(); + return true; + }, + + scope : this + }); + + this.eventEl.on("click", this.handleDateClick, this, {delegate: "a.x-date-date"}); + + this.eventEl.addKeyListener(Ext.EventObject.SPACE, this.selectToday, this); + + this.el.unselectable(); + + this.cells = this.el.select("table.x-date-inner tbody td"); + this.textNodes = this.el.query("table.x-date-inner tbody span"); + + this.mbtn = new Ext.Button(this.el.child("td.x-date-middle", true), { + text: " ", + tooltip: this.monthYearText + }); + + this.mbtn.on('click', this.showMonthPicker, this); + this.mbtn.el.child(this.mbtn.menuClassTarget).addClass("x-btn-with-menu"); + + + var today = (new Date()).dateFormat(this.format); + var todayBtn = new Ext.Button(this.el.child("td.x-date-bottom", true), { + text: String.format(this.todayText, today), + tooltip: String.format(this.todayTip, today), + handler: this.selectToday, + scope: this + }); + + if(Ext.isIE){ + this.el.repaint(); + } + this.update(this.value); + }, + + createMonthPicker : function(){ + if(!this.monthPicker.dom.firstChild){ + var buf = ['']; + for(var i = 0; i < 6; i++){ + buf.push( + '', + '', + i == 0 ? + '' : + '' + ); + } + buf.push( + '', + '
', this.monthNames[i].substr(0, 3), '', this.monthNames[i+6].substr(0, 3), '
' + ); + this.monthPicker.update(buf.join('')); + this.monthPicker.on('click', this.onMonthClick, this); + this.monthPicker.on('dblclick', this.onMonthDblClick, this); + + this.mpMonths = this.monthPicker.select('td.x-date-mp-month'); + this.mpYears = this.monthPicker.select('td.x-date-mp-year'); + + this.mpMonths.each(function(m, a, i){ + i += 1; + if((i%2) == 0){ + m.dom.xmonth = 5 + Math.round(i * .5); + }else{ + m.dom.xmonth = Math.round((i-1) * .5); + } + }); + } + }, + + showMonthPicker : function(){ + this.createMonthPicker(); + var size = this.el.getSize(); + this.monthPicker.setSize(size); + this.monthPicker.child('table').setSize(size); + + this.mpSelMonth = (this.activeDate || this.value).getMonth(); + this.updateMPMonth(this.mpSelMonth); + this.mpSelYear = (this.activeDate || this.value).getFullYear(); + this.updateMPYear(this.mpSelYear); + + this.monthPicker.slideIn('t', {duration:.2}); + }, + + updateMPYear : function(y){ + this.mpyear = y; + var ys = this.mpYears.elements; + for(var i = 1; i <= 10; i++){ + var td = ys[i-1], y2; + if((i%2) == 0){ + y2 = y + Math.round(i * .5); + td.firstChild.innerHTML = y2; + td.xyear = y2; + }else{ + y2 = y - (5-Math.round(i * .5)); + td.firstChild.innerHTML = y2; + td.xyear = y2; + } + this.mpYears.item(i-1)[y2 == this.mpSelYear ? 'addClass' : 'removeClass']('x-date-mp-sel'); + } + }, + + updateMPMonth : function(sm){ + this.mpMonths.each(function(m, a, i){ + m[m.dom.xmonth == sm ? 'addClass' : 'removeClass']('x-date-mp-sel'); + }); + }, + + selectMPMonth: function(m){ + + }, + + onMonthClick : function(e, t){ + e.stopEvent(); + var el = new Ext.Element(t), pn; + if(el.is('button.x-date-mp-cancel')){ + this.hideMonthPicker(); + } + else if(el.is('button.x-date-mp-ok')){ + this.update(new Date(this.mpSelYear, this.mpSelMonth, (this.activeDate || this.value).getDate())); + this.hideMonthPicker(); + } + else if(pn = el.up('td.x-date-mp-month', 2)){ + this.mpMonths.removeClass('x-date-mp-sel'); + pn.addClass('x-date-mp-sel'); + this.mpSelMonth = pn.dom.xmonth; + } + else if(pn = el.up('td.x-date-mp-year', 2)){ + this.mpYears.removeClass('x-date-mp-sel'); + pn.addClass('x-date-mp-sel'); + this.mpSelYear = pn.dom.xyear; + } + else if(el.is('a.x-date-mp-prev')){ + this.updateMPYear(this.mpyear-10); + } + else if(el.is('a.x-date-mp-next')){ + this.updateMPYear(this.mpyear+10); + } + }, + + onMonthDblClick : function(e, t){ + e.stopEvent(); + var el = new Ext.Element(t), pn; + if(pn = el.up('td.x-date-mp-month', 2)){ + this.update(new Date(this.mpSelYear, pn.dom.xmonth, (this.activeDate || this.value).getDate())); + this.hideMonthPicker(); + } + else if(pn = el.up('td.x-date-mp-year', 2)){ + this.update(new Date(pn.dom.xyear, this.mpSelMonth, (this.activeDate || this.value).getDate())); + this.hideMonthPicker(); + } + }, + + hideMonthPicker : function(disableAnim){ + if(this.monthPicker){ + if(disableAnim === true){ + this.monthPicker.hide(); + }else{ + this.monthPicker.slideOut('t', {duration:.2}); + } + } + }, + + + showPrevMonth : function(e){ + this.update(this.activeDate.add("mo", -1)); + }, + + + showNextMonth : function(e){ + this.update(this.activeDate.add("mo", 1)); + }, + + + showPrevYear : function(){ + this.update(this.activeDate.add("y", -1)); + }, + + + showNextYear : function(){ + this.update(this.activeDate.add("y", 1)); + }, + + + handleMouseWheel : function(e){ + var delta = e.getWheelDelta(); + if(delta > 0){ + this.showPrevMonth(); + e.stopEvent(); + } else if(delta < 0){ + this.showNextMonth(); + e.stopEvent(); + } + }, + + + handleDateClick : function(e, t){ + e.stopEvent(); + if(t.dateValue && !Ext.fly(t.parentNode).hasClass("x-date-disabled")){ + this.setValue(new Date(t.dateValue)); + this.fireEvent("select", this, this.value); + } + }, + + + selectToday : function(){ + this.setValue(new Date().clearTime()); + this.fireEvent("select", this, this.value); + }, + + + update : function(date){ + var vd = this.activeDate; + this.activeDate = date; + if(vd && this.el){ + var t = date.getTime(); + if(vd.getMonth() == date.getMonth() && vd.getFullYear() == date.getFullYear()){ + this.cells.removeClass("x-date-selected"); + this.cells.each(function(c){ + if(c.dom.firstChild.dateValue == t){ + c.addClass("x-date-selected"); + setTimeout(function(){ + try{c.dom.firstChild.focus();}catch(e){} + }, 50); + return false; + } + }); + return; + } + } + var days = date.getDaysInMonth(); + var firstOfMonth = date.getFirstDateOfMonth(); + var startingPos = firstOfMonth.getDay()-this.startDay; + + if(startingPos <= this.startDay){ + startingPos += 7; + } + + var pm = date.add("mo", -1); + var prevStart = pm.getDaysInMonth()-startingPos; + + var cells = this.cells.elements; + var textEls = this.textNodes; + days += startingPos; + + + var day = 86400000; + var d = (new Date(pm.getFullYear(), pm.getMonth(), prevStart)).clearTime(); + var today = new Date().clearTime().getTime(); + var sel = date.clearTime().getTime(); + var min = this.minDate ? this.minDate.clearTime() : Number.NEGATIVE_INFINITY; + var max = this.maxDate ? this.maxDate.clearTime() : Number.POSITIVE_INFINITY; + var ddMatch = this.disabledDatesRE; + var ddText = this.disabledDatesText; + var ddays = this.disabledDays ? this.disabledDays.join("") : false; + var ddaysText = this.disabledDaysText; + var format = this.format; + + var setCellClass = function(cal, cell){ + cell.title = ""; + var t = d.getTime(); + cell.firstChild.dateValue = t; + if(t == today){ + cell.className += " x-date-today"; + cell.title = cal.todayText; + } + if(t == sel){ + cell.className += " x-date-selected"; + setTimeout(function(){ + try{cell.firstChild.focus();}catch(e){} + }, 50); + } + + if(t < min) { + cell.className = " x-date-disabled"; + cell.title = cal.minText; + return; + } + if(t > max) { + cell.className = " x-date-disabled"; + cell.title = cal.maxText; + return; + } + if(ddays){ + if(ddays.indexOf(d.getDay()) != -1){ + cell.title = ddaysText; + cell.className = " x-date-disabled"; + } + } + if(ddMatch && format){ + var fvalue = d.dateFormat(format); + if(ddMatch.test(fvalue)){ + cell.title = ddText.replace("%0", fvalue); + cell.className = " x-date-disabled"; + } + } + }; + + var i = 0; + for(; i < startingPos; i++) { + textEls[i].innerHTML = (++prevStart); + d.setDate(d.getDate()+1); + cells[i].className = "x-date-prevday"; + setCellClass(this, cells[i]); + } + for(; i < days; i++){ + intDay = i - startingPos + 1; + textEls[i].innerHTML = (intDay); + d.setDate(d.getDate()+1); + cells[i].className = "x-date-active"; + setCellClass(this, cells[i]); + } + var extraDays = 0; + for(; i < 42; i++) { + textEls[i].innerHTML = (++extraDays); + d.setDate(d.getDate()+1); + cells[i].className = "x-date-nextday"; + setCellClass(this, cells[i]); + } + + this.mbtn.setText(this.monthNames[date.getMonth()] + " " + date.getFullYear()); + + if(!this.internalRender){ + var main = this.el.dom.firstChild; + var w = main.offsetWidth; + this.el.setWidth(w + this.el.getBorderWidth("lr")); + Ext.fly(main).setWidth(w); + this.internalRender = true; + + + + if(Ext.isOpera && !this.secondPass){ + main.rows[0].cells[1].style.width = (w - (main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth)) + "px"; + this.secondPass = true; + this.update.defer(10, this, [date]); + } + } + } +}); + +Ext.TabPanel = function(container, config){ + + this.el = Ext.get(container, true); + if(config){ + if(typeof config == "boolean"){ + this.tabPosition = config ? "bottom" : "top"; + }else{ + Ext.apply(this, config); + } + } + if(this.tabPosition == "bottom"){ + this.bodyEl = Ext.get(this.createBody(this.el.dom)); + this.el.addClass("x-tabs-bottom"); + } + this.stripWrap = Ext.get(this.createStrip(this.el.dom), true); + this.stripEl = Ext.get(this.createStripList(this.stripWrap.dom), true); + this.stripBody = Ext.get(this.stripWrap.dom.firstChild.firstChild, true); + if(Ext.isIE){ + Ext.fly(this.stripWrap.dom.firstChild).setStyle("overflow-x", "hidden"); + } + if(this.tabPosition != "bottom"){ + + this.bodyEl = Ext.get(this.createBody(this.el.dom)); + this.el.addClass("x-tabs-top"); + } + this.items = []; + + this.bodyEl.setStyle("position", "relative"); + + this.active = null; + this.activateDelegate = this.activate.createDelegate(this); + + this.addEvents({ + + "tabchange": true, + + "beforetabchange" : true + }); + + Ext.EventManager.onWindowResize(this.onResize, this); + this.cpad = this.el.getPadding("lr"); + this.hiddenCount = 0; + + Ext.TabPanel.superclass.constructor.call(this); +}; + +Ext.extend(Ext.TabPanel, Ext.util.Observable, { + + tabPosition : "top", + + currentTabWidth : 0, + + minTabWidth : 40, + + maxTabWidth : 250, + + preferredTabWidth : 175, + + resizeTabs : false, + + monitorResize : true, + + + addTab : function(id, text, content, closable){ + var item = new Ext.TabPanelItem(this, id, text, closable); + this.addTabItem(item); + if(content){ + item.setContent(content); + } + return item; + }, + + + getTab : function(id){ + return this.items[id]; + }, + + + hideTab : function(id){ + var t = this.items[id]; + if(!t.isHidden()){ + t.setHidden(true); + this.hiddenCount++; + this.autoSizeTabs(); + } + }, + + + unhideTab : function(id){ + var t = this.items[id]; + if(t.isHidden()){ + t.setHidden(false); + this.hiddenCount--; + this.autoSizeTabs(); + } + }, + + + addTabItem : function(item){ + this.items[item.id] = item; + this.items.push(item); + if(this.resizeTabs){ + item.setWidth(this.currentTabWidth || this.preferredTabWidth); + this.autoSizeTabs(); + }else{ + item.autoSize(); + } + }, + + + removeTab : function(id){ + var items = this.items; + var tab = items[id]; + if(!tab) return; + var index = items.indexOf(tab); + if(this.active == tab && items.length > 1){ + var newTab = this.getNextAvailable(index); + if(newTab)newTab.activate(); + } + this.stripEl.dom.removeChild(tab.pnode.dom); + if(tab.bodyEl.dom.parentNode == this.bodyEl.dom){ + this.bodyEl.dom.removeChild(tab.bodyEl.dom); + } + items.splice(index, 1); + delete this.items[tab.id]; + tab.fireEvent("close", tab); + tab.purgeListeners(); + this.autoSizeTabs(); + }, + + getNextAvailable : function(start){ + var items = this.items; + var index = start; + + + while(index < items.length){ + var item = items[++index]; + if(item && !item.isHidden()){ + return item; + } + } + + index = start; + while(index >= 0){ + var item = items[--index]; + if(item && !item.isHidden()){ + return item; + } + } + return null; + }, + + + disableTab : function(id){ + var tab = this.items[id]; + if(tab && this.active != tab){ + tab.disable(); + } + }, + + + enableTab : function(id){ + var tab = this.items[id]; + tab.enable(); + }, + + + activate : function(id){ + var tab = this.items[id]; + if(!tab){ + return null; + } + if(tab == this.active || tab.disabled){ + return tab; + } + var e = {}; + this.fireEvent("beforetabchange", this, e, tab); + if(e.cancel !== true && !tab.disabled){ + if(this.active){ + this.active.hide(); + } + this.active = this.items[id]; + this.active.show(); + this.fireEvent("tabchange", this, this.active); + } + return tab; + }, + + + getActiveTab : function(){ + return this.active; + }, + + + syncHeight : function(targetHeight){ + var height = (targetHeight || this.el.getHeight())-this.el.getBorderWidth("tb")-this.el.getPadding("tb"); + var bm = this.bodyEl.getMargins(); + var newHeight = height-(this.stripWrap.getHeight()||0)-(bm.top+bm.bottom); + this.bodyEl.setHeight(newHeight); + return newHeight; + }, + + onResize : function(){ + if(this.monitorResize){ + this.autoSizeTabs(); + } + }, + + + beginUpdate : function(){ + this.updating = true; + }, + + + endUpdate : function(){ + this.updating = false; + this.autoSizeTabs(); + }, + + + autoSizeTabs : function(){ + var count = this.items.length; + var vcount = count - this.hiddenCount; + if(!this.resizeTabs || count < 1 || vcount < 1 || this.updating) return; + var w = Math.max(this.el.getWidth() - this.cpad, 10); + var availWidth = Math.floor(w / vcount); + var b = this.stripBody; + if(b.getWidth() > w){ + var tabs = this.items; + this.setTabWidth(Math.max(availWidth, this.minTabWidth)-2); + if(availWidth < this.minTabWidth){ + + } + }else{ + if(this.currentTabWidth < this.preferredTabWidth){ + this.setTabWidth(Math.min(availWidth, this.preferredTabWidth)-2); + } + } + }, + + + getCount : function(){ + return this.items.length; + }, + + + setTabWidth : function(width){ + this.currentTabWidth = width; + for(var i = 0, len = this.items.length; i < len; i++) { + if(!this.items[i].isHidden())this.items[i].setWidth(width); + } + }, + + + destroy : function(removeEl){ + Ext.EventManager.removeResizeListener(this.onResize, this); + for(var i = 0, len = this.items.length; i < len; i++){ + this.items[i].purgeListeners(); + } + if(removeEl === true){ + this.el.update(""); + this.el.remove(); + } + } +}); + + +Ext.TabPanelItem = function(tabPanel, id, text, closable){ + + this.tabPanel = tabPanel; + + this.id = id; + + this.disabled = false; + + this.text = text; + + this.loaded = false; + this.closable = closable; + + + this.bodyEl = Ext.get(tabPanel.createItemBody(tabPanel.bodyEl.dom, id)); + this.bodyEl.setVisibilityMode(Ext.Element.VISIBILITY); + this.bodyEl.setStyle("display", "block"); + this.bodyEl.setStyle("zoom", "1"); + this.hideAction(); + + var els = tabPanel.createStripElements(tabPanel.stripEl.dom, text, closable); + + this.el = Ext.get(els.el, true); + this.inner = Ext.get(els.inner, true); + this.textEl = Ext.get(this.el.dom.firstChild.firstChild.firstChild, true); + this.pnode = Ext.get(els.el.parentNode, true); + this.el.on("mousedown", this.onTabMouseDown, this); + this.el.on("click", this.onTabClick, this); + + if(closable){ + var c = Ext.get(els.close, true); + c.dom.title = this.closeText; + c.addClassOnOver("close-over"); + c.on("click", this.closeClick, this); + } + + this.addEvents({ + + "activate": true, + + "beforeclose": true, + + "close": true, + + "deactivate" : true + }); + this.hidden = false; + + Ext.TabPanelItem.superclass.constructor.call(this); +}; + +Ext.extend(Ext.TabPanelItem, Ext.util.Observable, { + purgeListeners : function(){ + Ext.util.Observable.prototype.purgeListeners.call(this); + this.el.removeAllListeners(); + }, + + show : function(){ + this.pnode.addClass("on"); + this.showAction(); + if(Ext.isOpera){ + this.tabPanel.stripWrap.repaint(); + } + this.fireEvent("activate", this.tabPanel, this); + }, + + + isActive : function(){ + return this.tabPanel.getActiveTab() == this; + }, + + + hide : function(){ + this.pnode.removeClass("on"); + this.hideAction(); + this.fireEvent("deactivate", this.tabPanel, this); + }, + + hideAction : function(){ + this.bodyEl.hide(); + this.bodyEl.setStyle("position", "absolute"); + this.bodyEl.setLeft("-20000px"); + this.bodyEl.setTop("-20000px"); + }, + + showAction : function(){ + this.bodyEl.setStyle("position", "relative"); + this.bodyEl.setTop(""); + this.bodyEl.setLeft(""); + this.bodyEl.show(); + }, + + + setTooltip : function(text){ + if(Ext.QuickTips && Ext.QuickTips.isEnabled()){ + this.textEl.dom.qtip = text; + this.textEl.dom.removeAttribute('title'); + }else{ + this.textEl.dom.title = text; + } + }, + + onTabClick : function(e){ + e.preventDefault(); + this.tabPanel.activate(this.id); + }, + + onTabMouseDown : function(e){ + e.preventDefault(); + this.tabPanel.activate(this.id); + }, + + getWidth : function(){ + return this.inner.getWidth(); + }, + + setWidth : function(width){ + var iwidth = width - this.pnode.getPadding("lr"); + this.inner.setWidth(iwidth); + this.textEl.setWidth(iwidth-this.inner.getPadding("lr")); + this.pnode.setWidth(width); + }, + + + setHidden : function(hidden){ + this.hidden = hidden; + this.pnode.setStyle("display", hidden ? "none" : ""); + }, + + + isHidden : function(){ + return this.hidden; + }, + + + getText : function(){ + return this.text; + }, + + autoSize : function(){ + + this.textEl.setWidth(1); + this.setWidth(this.textEl.dom.scrollWidth+this.pnode.getPadding("lr")+this.inner.getPadding("lr")); + + }, + + + setText : function(text){ + this.text = text; + this.textEl.update(text); + this.setTooltip(text); + if(!this.tabPanel.resizeTabs){ + this.autoSize(); + } + }, + + activate : function(){ + this.tabPanel.activate(this.id); + }, + + + disable : function(){ + if(this.tabPanel.active != this){ + this.disabled = true; + this.pnode.addClass("disabled"); + } + }, + + + enable : function(){ + this.disabled = false; + this.pnode.removeClass("disabled"); + }, + + + setContent : function(content, loadScripts){ + this.bodyEl.update(content, loadScripts); + }, + + + getUpdateManager : function(){ + return this.bodyEl.getUpdateManager(); + }, + + + setUrl : function(url, params, loadOnce){ + if(this.refreshDelegate){ + this.un('activate', this.refreshDelegate); + } + this.refreshDelegate = this._handleRefresh.createDelegate(this, [url, params, loadOnce]); + this.on("activate", this.refreshDelegate); + return this.bodyEl.getUpdateManager(); + }, + + + _handleRefresh : function(url, params, loadOnce){ + if(!loadOnce || !this.loaded){ + var updater = this.bodyEl.getUpdateManager(); + updater.update(url, params, this._setLoaded.createDelegate(this)); + } + }, + + + refresh : function(){ + if(this.refreshDelegate){ + this.loaded = false; + this.refreshDelegate(); + } + }, + + + _setLoaded : function(){ + this.loaded = true; + }, + + + closeClick : function(e){ + var o = {}; + e.stopEvent(); + this.fireEvent("beforeclose", this, o); + if(o.cancel !== true){ + this.tabPanel.removeTab(this.id); + } + }, + + closeText : "Close this tab" +}); + + +Ext.TabPanel.prototype.createStrip = function(container){ + var strip = document.createElement("div"); + strip.className = "x-tabs-wrap"; + container.appendChild(strip); + return strip; +}; + +Ext.TabPanel.prototype.createStripList = function(strip){ + + strip.innerHTML = '
'; + return strip.firstChild.firstChild.firstChild.firstChild; +}; + +Ext.TabPanel.prototype.createBody = function(container){ + var body = document.createElement("div"); + Ext.id(body, "tab-body"); + Ext.fly(body).addClass("x-tabs-body"); + container.appendChild(body); + return body; +}; + +Ext.TabPanel.prototype.createItemBody = function(bodyEl, id){ + var body = Ext.getDom(id); + if(!body){ + body = document.createElement("div"); + body.id = id; + } + Ext.fly(body).addClass("x-tabs-item-body"); + bodyEl.insertBefore(body, bodyEl.firstChild); + return body; +}; + +Ext.TabPanel.prototype.createStripElements = function(stripEl, text, closable){ + var td = document.createElement("td"); + stripEl.appendChild(td); + if(closable){ + td.className = "x-tabs-closable"; + if(!this.closeTpl){ + this.closeTpl = new Ext.Template( + '' + + '{text}' + + '
 
' + ); + } + var el = this.closeTpl.overwrite(td, {"text": text}); + var close = el.getElementsByTagName("div")[0]; + var inner = el.getElementsByTagName("em")[0]; + return {"el": el, "close": close, "inner": inner}; + } else { + if(!this.tabTpl){ + this.tabTpl = new Ext.Template( + '' + + '{text}' + ); + } + var el = this.tabTpl.overwrite(td, {"text": text}); + var inner = el.getElementsByTagName("em")[0]; + return {"el": el, "inner": inner}; + } +}; + +Ext.Button = function(renderTo, config){ + Ext.apply(this, config); + this.addEvents({ + + "click" : true, + + "toggle" : true, + + 'mouseover' : true, + + 'mouseout': true + }); + if(this.menu){ + this.menu = Ext.menu.MenuMgr.get(this.menu); + } + if(renderTo){ + this.render(renderTo); + } + Ext.Button.superclass.constructor.call(this); +}; + +Ext.extend(Ext.Button, Ext.util.Observable, { + + hidden : false, + + disabled : false, + + pressed : false, + + + tabIndex : undefined, + + + enableToggle: false, + + menu : undefined, + + menuAlign : "tl-bl?", + + + iconCls : undefined, + + type : 'button', + + + menuClassTarget: 'tr', + + + clickEvent : 'click', + + + handleMouseEvents : true, + + + tooltipType : 'qtip', + + + + + + + render : function(renderTo){ + var btn; + if(this.hideParent){ + this.parentEl = Ext.get(renderTo); + } + if(!this.dhconfig){ + if(!this.template){ + if(!Ext.Button.buttonTemplate){ + + Ext.Button.buttonTemplate = new Ext.Template( + '', + '', + "
  
"); + } + this.template = Ext.Button.buttonTemplate; + } + btn = this.template.append(renderTo, [this.text || ' ', this.type], true); + var btnEl = btn.child("button:first"); + btnEl.on('focus', this.onFocus, this); + btnEl.on('blur', this.onBlur, this); + if(this.cls){ + btn.addClass(this.cls); + } + if(this.icon){ + btnEl.setStyle('background-image', 'url(' +this.icon +')'); + } + if(this.iconCls){ + btnEl.addClass(this.iconCls); + if(!this.cls){ + btn.addClass(this.text ? 'x-btn-text-icon' : 'x-btn-icon'); + } + } + if(this.tabIndex !== undefined){ + btnEl.dom.tabIndex = this.tabIndex; + } + if(this.tooltip){ + if(typeof this.tooltip == 'object'){ + Ext.QuickTips.tips(Ext.apply({ + target: btnEl.id + }, this.tooltip)); + } else { + btnEl.dom[this.tooltipType] = this.tooltip; + } + } + }else{ + btn = Ext.DomHelper.append(Ext.get(renderTo).dom, this.dhconfig, true); + } + this.el = btn; + if(this.id){ + this.el.dom.id = this.el.id = this.id; + } + if(this.menu){ + this.el.child(this.menuClassTarget).addClass("x-btn-with-menu"); + this.menu.on("show", this.onMenuShow, this); + this.menu.on("hide", this.onMenuHide, this); + } + btn.addClass("x-btn"); + if(Ext.isIE && !Ext.isIE7){ + this.autoWidth.defer(1, this); + }else{ + this.autoWidth(); + } + if(this.handleMouseEvents){ + btn.on("mouseover", this.onMouseOver, this); + btn.on("mouseout", this.onMouseOut, this); + btn.on("mousedown", this.onMouseDown, this); + } + btn.on(this.clickEvent, this.onClick, this); + + if(this.hidden){ + this.hide(); + } + if(this.disabled){ + this.disable(); + } + Ext.ButtonToggleMgr.register(this); + if(this.pressed){ + this.el.addClass("x-btn-pressed"); + } + if(this.repeat){ + var repeater = new Ext.util.ClickRepeater(btn, + typeof this.repeat == "object" ? this.repeat : {} + ); + repeater.on("click", this.onClick, this); + } + }, + + getEl : function(){ + return this.el; + }, + + + destroy : function(){ + Ext.ButtonToggleMgr.unregister(this); + this.el.removeAllListeners(); + this.purgeListeners(); + this.el.remove(); + }, + + + autoWidth : function(){ + if(this.el){ + this.el.setWidth("auto"); + if(Ext.isIE7 && Ext.isStrict){ + var ib = this.el.child('button'); + if(ib && ib.getWidth() > 20){ + ib.clip(); + ib.setWidth(Ext.util.TextMetrics.measure(ib, this.text).width+ib.getFrameWidth('lr')); + } + } + if(this.minWidth){ + if(this.hidden){ + this.el.beginMeasure(); + } + if(this.el.getWidth() < this.minWidth){ + this.el.setWidth(this.minWidth); + } + if(this.hidden){ + this.el.endMeasure(); + } + } + } + }, + + + setHandler : function(handler, scope){ + this.handler = handler; + this.scope = scope; + }, + + + setText : function(text){ + this.text = text; + if(this.el){ + this.el.child("td.x-btn-center button.x-btn-text").update(text); + } + this.autoWidth(); + }, + + + getText : function(){ + return this.text; + }, + + + show: function(){ + this.hidden = false; + if(this.el){ + this[this.hideParent? 'parentEl' : 'el'].setStyle("display", ""); + } + }, + + + hide: function(){ + this.hidden = true; + if(this.el){ + this[this.hideParent? 'parentEl' : 'el'].setStyle("display", "none"); + } + }, + + + setVisible: function(visible){ + if(visible) { + this.show(); + }else{ + this.hide(); + } + }, + + + toggle : function(state){ + state = state === undefined ? !this.pressed : state; + if(state != this.pressed){ + if(state){ + this.el.addClass("x-btn-pressed"); + this.pressed = true; + this.fireEvent("toggle", this, true); + }else{ + this.el.removeClass("x-btn-pressed"); + this.pressed = false; + this.fireEvent("toggle", this, false); + } + if(this.toggleHandler){ + this.toggleHandler.call(this.scope || this, this, state); + } + } + }, + + + focus : function(){ + this.el.child('button:first').focus(); + }, + + + disable : function(){ + if(this.el){ + this.el.addClass("x-btn-disabled"); + } + this.disabled = true; + }, + + + enable : function(){ + if(this.el){ + this.el.removeClass("x-btn-disabled"); + } + this.disabled = false; + }, + + + setDisabled : function(v){ + this[v !== true ? "enable" : "disable"](); + }, + + + onClick : function(e){ + if(e){ + e.preventDefault(); + } + if(e.button != 0){ + return; + } + if(!this.disabled){ + if(this.enableToggle){ + this.toggle(); + } + if(this.menu && !this.menu.isVisible()){ + this.menu.show(this.el, this.menuAlign); + } + this.fireEvent("click", this, e); + if(this.handler){ + this.el.removeClass("x-btn-over"); + this.handler.call(this.scope || this, this, e); + } + } + }, + + onMouseOver : function(e){ + if(!this.disabled){ + this.el.addClass("x-btn-over"); + this.fireEvent('mouseover', this, e); + } + }, + + onMouseOut : function(e){ + if(!e.within(this.el, true)){ + this.el.removeClass("x-btn-over"); + this.fireEvent('mouseout', this, e); + } + }, + + onFocus : function(e){ + if(!this.disabled){ + this.el.addClass("x-btn-focus"); + } + }, + + onBlur : function(e){ + this.el.removeClass("x-btn-focus"); + }, + + onMouseDown : function(e){ + if(!this.disabled && e.button == 0){ + this.el.addClass("x-btn-click"); + Ext.get(document).on('mouseup', this.onMouseUp, this); + } + }, + + onMouseUp : function(e){ + if(e.button == 0){ + this.el.removeClass("x-btn-click"); + Ext.get(document).un('mouseup', this.onMouseUp, this); + } + }, + + onMenuShow : function(e){ + this.el.addClass("x-btn-menu-active"); + }, + + onMenuHide : function(e){ + this.el.removeClass("x-btn-menu-active"); + } +}); + + +Ext.ButtonToggleMgr = function(){ + var groups = {}; + + function toggleGroup(btn, state){ + if(state){ + var g = groups[btn.toggleGroup]; + for(var i = 0, l = g.length; i < l; i++){ + if(g[i] != btn){ + g[i].toggle(false); + } + } + } + } + + return { + register : function(btn){ + if(!btn.toggleGroup){ + return; + } + var g = groups[btn.toggleGroup]; + if(!g){ + g = groups[btn.toggleGroup] = []; + } + g.push(btn); + btn.on("toggle", toggleGroup); + }, + + unregister : function(btn){ + if(!btn.toggleGroup){ + return; + } + var g = groups[btn.toggleGroup]; + if(g){ + g.remove(btn); + btn.un("toggle", toggleGroup); + } + } + }; +}(); + +Ext.SplitButton = function(renderTo, config){ + Ext.SplitButton.superclass.constructor.call(this, renderTo, config); + + this.addEvents({"arrowclick":true}); +}; + +Ext.extend(Ext.SplitButton, Ext.Button, { + render : function(renderTo){ + + var tpl = new Ext.Template( + '
', + '', + '', + "
 
", + '', + '', + "
 
" + ); + var btn = tpl.append(renderTo, [this.text, this.type], true); + var btnEl = btn.child("button"); + if(this.cls){ + btn.addClass(this.cls); + } + if(this.icon){ + btnEl.setStyle('background-image', 'url(' +this.icon +')'); + } + if(this.iconCls){ + btnEl.addClass(this.iconCls); + if(!this.cls){ + btn.addClass(this.text ? 'x-btn-text-icon' : 'x-btn-icon'); + } + } + this.el = btn; + if(this.handleMouseEvents){ + btn.on("mouseover", this.onMouseOver, this); + btn.on("mouseout", this.onMouseOut, this); + btn.on("mousedown", this.onMouseDown, this); + btn.on("mouseup", this.onMouseUp, this); + } + btn.on(this.clickEvent, this.onClick, this); + if(this.tooltip){ + if(typeof this.tooltip == 'object'){ + Ext.QuickTips.tips(Ext.apply({ + target: btnEl.id + }, this.tooltip)); + } else { + btnEl.dom[this.tooltipType] = this.tooltip; + } + } + if(this.arrowTooltip){ + btn.child("button:nth(2)").dom[this.tooltipType] = this.arrowTooltip; + } + if(this.hidden){ + this.hide(); + } + if(this.disabled){ + this.disable(); + } + if(this.pressed){ + this.el.addClass("x-btn-pressed"); + } + if(Ext.isIE && !Ext.isIE7){ + this.autoWidth.defer(1, this); + }else{ + this.autoWidth(); + } + if(this.menu){ + this.menu.on("show", this.onMenuShow, this); + this.menu.on("hide", this.onMenuHide, this); + } + }, + + + autoWidth : function(){ + if(this.el){ + var tbl = this.el.child("table:first"); + var tbl2 = this.el.child("table:last"); + this.el.setWidth("auto"); + tbl.setWidth("auto"); + if(Ext.isIE7 && Ext.isStrict){ + var ib = this.el.child('button:first'); + if(ib && ib.getWidth() > 20){ + ib.clip(); + ib.setWidth(Ext.util.TextMetrics.measure(ib, this.text).width+ib.getFrameWidth('lr')); + } + } + if(this.minWidth){ + if(this.hidden){ + this.el.beginMeasure(); + } + if((tbl.getWidth()+tbl2.getWidth()) < this.minWidth){ + tbl.setWidth(this.minWidth-tbl2.getWidth()); + } + if(this.hidden){ + this.el.endMeasure(); + } + } + this.el.setWidth(tbl.getWidth()+tbl2.getWidth()); + } + }, + + setHandler : function(handler, scope){ + this.handler = handler; + this.scope = scope; + }, + + + setArrowHandler : function(handler, scope){ + this.arrowHandler = handler; + this.scope = scope; + }, + + + focus : function(){ + if(this.el){ + this.el.child("button:first").focus(); + } + }, + + + onClick : function(e){ + e.preventDefault(); + if(!this.disabled){ + if(e.getTarget(".x-btn-menu-arrow-wrap")){ + if(this.menu && !this.menu.isVisible()){ + this.menu.show(this.el, this.menuAlign); + } + this.fireEvent("arrowclick", this, e); + if(this.arrowHandler){ + this.arrowHandler.call(this.scope || this, this, e); + } + }else{ + this.fireEvent("click", this, e); + if(this.handler){ + this.handler.call(this.scope || this, this, e); + } + } + } + }, + + onMouseDown : function(e){ + if(!this.disabled){ + Ext.fly(e.getTarget("table")).addClass("x-btn-click"); + } + }, + + onMouseUp : function(e){ + Ext.fly(e.getTarget("table")).removeClass("x-btn-click"); + } +}); + + +Ext.MenuButton = Ext.SplitButton; + +Ext.Toolbar = function(container, buttons, config){ + if(container instanceof Array){ + buttons = container; + config = buttons; + container = null; + } + Ext.apply(this, config); + this.buttons = buttons; + if(container){ + this.render(container); + } +}; + +Ext.Toolbar.prototype = { + + render : function(ct){ + this.el = Ext.get(ct); + if(this.cls){ + this.el.addClass(this.cls); + } + + this.el.update('
'); + this.tr = this.el.child("tr", true); + var autoId = 0; + this.items = new Ext.util.MixedCollection(false, function(o){ + return o.id || ("item" + (++autoId)); + }); + if(this.buttons){ + this.add.apply(this, this.buttons); + delete this.buttons; + } + }, + + + add : function(){ + var a = arguments, l = a.length; + for(var i = 0; i < l; i++){ + var el = a[i]; + if(el.applyTo){ + this.addField(el); + }else if(el.render){ + this.addItem(el); + }else if(typeof el == "string"){ + if(el == "separator" || el == "-"){ + this.addSeparator(); + }else if(el == " "){ + this.addSpacer(); + }else if(el == "->"){ + this.addFill(); + }else{ + this.addText(el); + } + }else if(el.tagName){ + this.addElement(el); + }else if(typeof el == "object"){ + this.addButton(el); + } + } + }, + + + getEl : function(){ + return this.el; + }, + + + addSeparator : function(){ + return this.addItem(new Ext.Toolbar.Separator()); + }, + + + addSpacer : function(){ + return this.addItem(new Ext.Toolbar.Spacer()); + }, + + + addFill : function(){ + return this.addItem(new Ext.Toolbar.Fill()); + }, + + + addElement : function(el){ + return this.addItem(new Ext.Toolbar.Item(el)); + }, + + + addItem : function(item){ + var td = this.nextBlock(); + item.render(td); + this.items.add(item); + return item; + }, + + + addButton : function(config){ + if(config instanceof Array){ + var buttons = []; + for(var i = 0, len = config.length; i < len; i++) { + buttons.push(this.addButton(config[i])); + } + return buttons; + } + var b = config; + if(!(config instanceof Ext.Toolbar.Button)){ + b = config.split ? + new Ext.Toolbar.SplitButton(config) : + new Ext.Toolbar.Button(config); + } + var td = this.nextBlock(); + b.render(td); + this.items.add(b); + return b; + }, + + + addText : function(text){ + return this.addItem(new Ext.Toolbar.TextItem(text)); + }, + + + insertButton : function(index, item){ + if(item instanceof Array){ + var buttons = []; + for(var i = 0, len = item.length; i < len; i++) { + buttons.push(this.insertButton(index + i, item[i])); + } + return buttons; + } + if (!(item instanceof Ext.Toolbar.Button)){ + item = new Ext.Toolbar.Button(item); + } + var td = document.createElement("td"); + this.tr.insertBefore(td, this.tr.childNodes[index]); + item.render(td); + this.items.insert(index, item); + return item; + }, + + + addDom : function(config, returnEl){ + var td = this.nextBlock(); + Ext.DomHelper.overwrite(td, config); + var ti = new Ext.Toolbar.Item(td.firstChild); + ti.render(td); + this.items.add(ti); + return ti; + }, + + + addField : function(field){ + var td = this.nextBlock(); + field.render(td); + var ti = new Ext.Toolbar.Item(td.firstChild); + ti.render(td); + this.items.add(ti); + return ti; + }, + + + nextBlock : function(){ + var td = document.createElement("td"); + this.tr.appendChild(td); + return td; + }, + + + destroy : function(){ + if(this.items){ + Ext.destroy.apply(Ext, this.items.items); + } + Ext.Element.uncache(this.el, this.tr); + } +}; + + +Ext.Toolbar.Item = function(el){ + this.el = Ext.getDom(el); + this.id = Ext.id(this.el); + this.hidden = false; +}; + +Ext.Toolbar.Item.prototype = { + + + getEl : function(){ + return this.el; + }, + + + render : function(td){ + this.td = td; + td.appendChild(this.el); + }, + + + destroy : function(){ + this.td.parentNode.removeChild(this.td); + }, + + + show: function(){ + this.hidden = false; + this.td.style.display = ""; + }, + + + hide: function(){ + this.hidden = true; + this.td.style.display = "none"; + }, + + + setVisible: function(visible){ + if(visible) { + this.show(); + }else{ + this.hide(); + } + }, + + + focus : function(){ + Ext.fly(this.el).focus(); + }, + + + disable : function(){ + Ext.fly(this.td).addClass("x-item-disabled"); + this.disabled = true; + this.el.disabled = true; + }, + + + enable : function(){ + Ext.fly(this.td).removeClass("x-item-disabled"); + this.disabled = false; + this.el.disabled = false; + } +}; + + + +Ext.Toolbar.Separator = function(){ + var s = document.createElement("span"); + s.className = "ytb-sep"; + Ext.Toolbar.Separator.superclass.constructor.call(this, s); +}; +Ext.extend(Ext.Toolbar.Separator, Ext.Toolbar.Item, { + enable:Ext.emptyFn, + disable:Ext.emptyFn, + focus:Ext.emptyFn +}); + + +Ext.Toolbar.Spacer = function(){ + var s = document.createElement("div"); + s.className = "ytb-spacer"; + Ext.Toolbar.Spacer.superclass.constructor.call(this, s); +}; +Ext.extend(Ext.Toolbar.Spacer, Ext.Toolbar.Item, { + enable:Ext.emptyFn, + disable:Ext.emptyFn, + focus:Ext.emptyFn +}); + + +Ext.Toolbar.Fill = Ext.extend(Ext.Toolbar.Spacer, { + + render : function(td){ + td.style.width = '100%'; + Ext.Toolbar.Fill.superclass.render.call(this, td); + } +}); + + +Ext.Toolbar.TextItem = function(text){ + var s = document.createElement("span"); + s.className = "ytb-text"; + s.innerHTML = text; + Ext.Toolbar.TextItem.superclass.constructor.call(this, s); +}; +Ext.extend(Ext.Toolbar.TextItem, Ext.Toolbar.Item, { + enable:Ext.emptyFn, + disable:Ext.emptyFn, + focus:Ext.emptyFn +}); + + +Ext.Toolbar.Button = function(config){ + Ext.Toolbar.Button.superclass.constructor.call(this, null, config); +}; +Ext.extend(Ext.Toolbar.Button, Ext.Button, { + render : function(td){ + this.td = td; + Ext.Toolbar.Button.superclass.render.call(this, td); + }, + + + destroy : function(){ + Ext.Toolbar.Button.superclass.destroy.call(this); + this.td.parentNode.removeChild(this.td); + }, + + + show: function(){ + this.hidden = false; + this.td.style.display = ""; + }, + + + hide: function(){ + this.hidden = true; + this.td.style.display = "none"; + }, + + + disable : function(){ + Ext.fly(this.td).addClass("x-item-disabled"); + this.disabled = true; + }, + + + enable : function(){ + Ext.fly(this.td).removeClass("x-item-disabled"); + this.disabled = false; + } +}); + +Ext.ToolbarButton = Ext.Toolbar.Button; + + +Ext.Toolbar.SplitButton = function(config){ + Ext.Toolbar.SplitButton.superclass.constructor.call(this, null, config); +}; +Ext.extend(Ext.Toolbar.SplitButton, Ext.SplitButton, { + render : function(td){ + this.td = td; + Ext.Toolbar.SplitButton.superclass.render.call(this, td); + }, + + + destroy : function(){ + Ext.Toolbar.SplitButton.superclass.destroy.call(this); + this.td.parentNode.removeChild(this.td); + }, + + + show: function(){ + this.hidden = false; + this.td.style.display = ""; + }, + + + hide: function(){ + this.hidden = true; + this.td.style.display = "none"; + } +}); + + +Ext.Toolbar.MenuButton = Ext.Toolbar.SplitButton; + +Ext.PagingToolbar = function(el, ds, config){ + Ext.PagingToolbar.superclass.constructor.call(this, el, null, config); + this.ds = ds; + this.cursor = 0; + this.renderButtons(this.el); + this.bind(ds); +}; + +Ext.extend(Ext.PagingToolbar, Ext.Toolbar, { + + + pageSize: 20, + + displayMsg : 'Displaying {0} - {1} of {2}', + + emptyMsg : 'No data to display', + + beforePageText : "Page", + + afterPageText : "of {0}", + + firstText : "First Page", + + prevText : "Previous Page", + + nextText : "Next Page", + + lastText : "Last Page", + + refreshText : "Refresh", + + renderButtons : function(el){ + Ext.PagingToolbar.superclass.render.call(this, el); + this.first = this.addButton({ + tooltip: this.firstText, + cls: "x-btn-icon x-grid-page-first", + disabled: true, + handler: this.onClick.createDelegate(this, ["first"]) + }); + this.prev = this.addButton({ + tooltip: this.prevText, + cls: "x-btn-icon x-grid-page-prev", + disabled: true, + handler: this.onClick.createDelegate(this, ["prev"]) + }); + this.addSeparator(); + this.add(this.beforePageText); + this.field = Ext.get(this.addDom({ + tag: "input", + type: "text", + size: "3", + value: "1", + cls: "x-grid-page-number" + }).el); + this.field.on("keydown", this.onPagingKeydown, this); + this.field.on("focus", function(){this.dom.select();}); + this.afterTextEl = this.addText(String.format(this.afterPageText, 1)); + this.field.setHeight(18); + this.addSeparator(); + this.next = this.addButton({ + tooltip: this.nextText, + cls: "x-btn-icon x-grid-page-next", + disabled: true, + handler: this.onClick.createDelegate(this, ["next"]) + }); + this.last = this.addButton({ + tooltip: this.lastText, + cls: "x-btn-icon x-grid-page-last", + disabled: true, + handler: this.onClick.createDelegate(this, ["last"]) + }); + this.addSeparator(); + this.loading = this.addButton({ + tooltip: this.refreshText, + cls: "x-btn-icon x-grid-loading", + handler: this.onClick.createDelegate(this, ["refresh"]) + }); + + if(this.displayInfo){ + this.displayEl = Ext.fly(this.el.dom.firstChild).createChild({cls:'x-paging-info'}); + } + }, + + updateInfo : function(){ + if(this.displayEl){ + var count = this.ds.getCount(); + var msg = count == 0 ? + this.emptyMsg : + String.format( + this.displayMsg, + this.cursor+1, this.cursor+count, this.ds.getTotalCount() + ); + this.displayEl.update(msg); + } + }, + + onLoad : function(ds, r, o){ + this.cursor = o.params ? o.params.start : 0; + var d = this.getPageData(), ap = d.activePage, ps = d.pages; + + this.afterTextEl.el.innerHTML = String.format(this.afterPageText, d.pages); + this.field.dom.value = ap; + this.first.setDisabled(ap == 1); + this.prev.setDisabled(ap == 1); + this.next.setDisabled(ap == ps); + this.last.setDisabled(ap == ps); + this.loading.enable(); + this.updateInfo(); + }, + + getPageData : function(){ + var total = this.ds.getTotalCount(); + return { + total : total, + activePage : Math.ceil((this.cursor+this.pageSize)/this.pageSize), + pages : total < this.pageSize ? 1 : Math.ceil(total/this.pageSize) + }; + }, + + onLoadError : function(){ + this.loading.enable(); + }, + + onPagingKeydown : function(e){ + var k = e.getKey(); + var d = this.getPageData(); + if(k == e.RETURN){ + var v = this.field.dom.value, pageNum; + if(!v || isNaN(pageNum = parseInt(v, 10))){ + this.field.dom.value = d.activePage; + return; + } + pageNum = Math.min(Math.max(1, pageNum), d.pages) - 1; + this.ds.load({params:{start: pageNum * this.pageSize, limit: this.pageSize}}); + e.stopEvent(); + } + else if(k == e.HOME || (k == e.UP && e.ctrlKey) || (k == e.PAGEUP && e.ctrlKey) || (k == e.RIGHT && e.ctrlKey) || k == e.END || (k == e.DOWN && e.ctrlKey) || (k == e.LEFT && e.ctrlKey) || (k == e.PAGEDOWN && e.ctrlKey)) + { + var pageNum = (k == e.HOME || (k == e.DOWN && e.ctrlKey) || (k == e.LEFT && e.ctrlKey) || (k == e.PAGEDOWN && e.ctrlKey)) ? 1 : d.pages; + this.field.dom.value = pageNum; + this.ds.load({params:{start: (pageNum - 1) * this.pageSize, limit: this.pageSize}}); + e.stopEvent(); + } + else if(k == e.UP || k == e.RIGHT || k == e.PAGEUP || k == e.DOWN || k == e.LEFT || k == e.PAGEDOWN) + { + var v = this.field.dom.value, pageNum; + var increment = (e.shiftKey) ? 10 : 1; + if(k == e.DOWN || k == e.LEFT || k == e.PAGEDOWN) + increment *= -1; + if(!v || isNaN(pageNum = parseInt(v, 10))) { + this.field.dom.value = d.activePage; + return; + } + else if(parseInt(v, 10) + increment >= 1 & parseInt(v, 10) + increment <= d.pages) + { + this.field.dom.value = parseInt(v, 10) + increment; + pageNum = Math.min(Math.max(1, pageNum + increment), d.pages) - 1; + this.ds.load({params:{start: pageNum * this.pageSize, limit: this.pageSize}}); + } + e.stopEvent(); + } + }, + + beforeLoad : function(){ + if(this.loading){ + this.loading.disable(); + } + }, + + onClick : function(which){ + var ds = this.ds; + switch(which){ + case "first": + ds.load({params:{start: 0, limit: this.pageSize}}); + break; + case "prev": + ds.load({params:{start: Math.max(0, this.cursor-this.pageSize), limit: this.pageSize}}); + break; + case "next": + ds.load({params:{start: this.cursor+this.pageSize, limit: this.pageSize}}); + break; + case "last": + var total = ds.getTotalCount(); + var extra = total % this.pageSize; + var lastStart = extra ? (total - extra) : total-this.pageSize; + ds.load({params:{start: lastStart, limit: this.pageSize}}); + break; + case "refresh": + ds.load({params:{start: this.cursor, limit: this.pageSize}}); + break; + } + }, + + + unbind : function(ds){ + ds.un("beforeload", this.beforeLoad, this); + ds.un("load", this.onLoad, this); + ds.un("loadexception", this.onLoadError, this); + this.ds = undefined; + }, + + + bind : function(ds){ + ds.on("beforeload", this.beforeLoad, this); + ds.on("load", this.onLoad, this); + ds.on("loadexception", this.onLoadError, this); + this.ds = ds; + } +}); + Ext.Resizable = function(el, config){ this.el = Ext.get(el); if(config && config.wrap){ config.resizeChild = this.el; this.el = this.el.wrap(typeof config.wrap == "object" ? config.wrap : {cls:"xresizable-wrap"}); this.el.id = this.el.dom.id = config.resizeChild.id + "-rzwrap"; this.el.setStyle("overflow", "hidden"); this.el.setPositioning(config.resizeChild.getPositioning()); config.resizeChild.clearPositioning(); if(!config.width || !config.height){ var csize = config.resizeChild.getSize(); this.el.setSize(csize.width, csize.height); } if(config.pinned && !config.adjustments){ config.adjustments = "auto"; } } this.proxy = this.el.createProxy({tag: "div", cls: "x-resizable-proxy", id: this.el.id + "-rzproxy"}); this.proxy.unselectable(); this.proxy.enableDisplayMode('block'); Ext.apply(this, config); if(this.pinned){ this.disableTrackOver = true; this.el.addClass("x-resizable-pinned"); } var position = this.el.getStyle("position"); if(position != "absolute" && position != "fixed"){ this.el.setStyle("position", "relative"); } if(!this.handles){ this.handles = 's,e,se'; if(this.multiDirectional){ this.handles += ',n,w'; } } if(this.handles == "all"){ this.handles = "n s e w ne nw se sw"; } var hs = this.handles.split(/\s*?[,;]\s*?| /); var ps = Ext.Resizable.positions; for(var i = 0, len = hs.length; i < len; i++){ if(hs[i] && ps[hs[i]]){ var pos = ps[hs[i]]; this[pos] = new Ext.Resizable.Handle(this, pos, this.disableTrackOver, this.transparent); } } this.corner = this.southeast; if(this.handles.indexOf("n") != -1 || this.handles.indexOf("w") != -1){ this.updateBox = true; } this.activeHandle = null; if(this.resizeChild){ if(typeof this.resizeChild == "boolean"){ this.resizeChild = Ext.get(this.el.dom.firstChild, true); }else{ this.resizeChild = Ext.get(this.resizeChild, true); } } if(this.adjustments == "auto"){ var rc = this.resizeChild; var hw = this.west, he = this.east, hn = this.north, hs = this.south; if(rc && (hw || hn)){ rc.position("relative"); rc.setLeft(hw ? hw.el.getWidth() : 0); rc.setTop(hn ? hn.el.getHeight() : 0); } this.adjustments = [ (he ? -he.el.getWidth() : 0) + (hw ? -hw.el.getWidth() : 0), (hn ? -hn.el.getHeight() : 0) + (hs ? -hs.el.getHeight() : 0) -1 ]; } if(this.draggable){ this.dd = this.dynamic ? this.el.initDD(null) : this.el.initDDProxy(null, {dragElId: this.proxy.id}); this.dd.setHandleElId(this.resizeChild ? this.resizeChild.id : this.el.id); } this.addEvents({ "beforeresize" : true, "resize" : true }); if(this.width !== null && this.height !== null){ this.resizeTo(this.width, this.height); }else{ this.updateChildSize(); } if(Ext.isIE){ this.el.dom.style.zoom = 1; } Ext.Resizable.superclass.constructor.call(this); }; Ext.extend(Ext.Resizable, Ext.util.Observable, { resizeChild : false, adjustments : [0, 0], minWidth : 5, minHeight : 5, maxWidth : 10000, maxHeight : 10000, enabled : true, animate : false, duration : .35, dynamic : false, handles : false, multiDirectional : false, disableTrackOver : false, easing : 'easeOutStrong', widthIncrement : 0, heightIncrement : 0, pinned : false, width : null, height : null, preserveRatio : false, transparent: false, minX: 0, minY: 0, draggable: false, constrainTo: undefined, resizeRegion: undefined, resizeTo : function(width, height){ this.el.setSize(width, height); this.updateChildSize(); this.fireEvent("resize", this, width, height, null); }, startSizing : function(e, handle){ this.fireEvent("beforeresize", this, e); if(this.enabled){ if(!this.overlay){ this.overlay = this.el.createProxy({tag: "div", cls: "x-resizable-overlay", html: " "}); this.overlay.unselectable(); this.overlay.enableDisplayMode("block"); this.overlay.on("mousemove", this.onMouseMove, this); this.overlay.on("mouseup", this.onMouseUp, this); } this.overlay.setStyle("cursor", handle.el.getStyle("cursor")); this.resizing = true; this.startBox = this.el.getBox(); this.startPoint = e.getXY(); this.offsets = [(this.startBox.x + this.startBox.width) - this.startPoint[0], (this.startBox.y + this.startBox.height) - this.startPoint[1]]; this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true)); this.overlay.show(); if(this.constrainTo) { var ct = Ext.get(this.constrainTo); this.resizeRegion = ct.getRegion().adjust( ct.getFrameWidth('t'), ct.getFrameWidth('l'), -ct.getFrameWidth('b'), -ct.getFrameWidth('r') ); } this.proxy.setStyle('visibility', 'hidden'); this.proxy.show(); this.proxy.setBox(this.startBox); if(!this.dynamic){ this.proxy.setStyle('visibility', 'visible'); } } }, onMouseDown : function(handle, e){ if(this.enabled){ e.stopEvent(); this.activeHandle = handle; this.startSizing(e, handle); } }, onMouseUp : function(e){ var size = this.resizeElement(); this.resizing = false; this.handleOut(); this.overlay.hide(); this.proxy.hide(); this.fireEvent("resize", this, size.width, size.height, e); }, updateChildSize : function(){ if(this.resizeChild){ var el = this.el; var child = this.resizeChild; var adj = this.adjustments; if(el.dom.offsetWidth){ var b = el.getSize(true); child.setSize(b.width+adj[0], b.height+adj[1]); } if(Ext.isIE){ setTimeout(function(){ if(el.dom.offsetWidth){ var b = el.getSize(true); child.setSize(b.width+adj[0], b.height+adj[1]); } }, 10); } } }, snap : function(value, inc, min){ if(!inc || !value) return value; var newValue = value; var m = value % inc; if(m > 0){ if(m > (inc/2)){ newValue = value + (inc-m); }else{ newValue = value - m; } } return Math.max(min, newValue); }, resizeElement : function(){ var box = this.proxy.getBox(); if(this.updateBox){ this.el.setBox(box, false, this.animate, this.duration, null, this.easing); }else{ this.el.setSize(box.width, box.height, this.animate, this.duration, null, this.easing); } this.updateChildSize(); if(!this.dynamic){ this.proxy.hide(); } return box; }, constrain : function(v, diff, m, mx){ if(v - diff < m){ diff = v - m; }else if(v - diff > mx){ diff = mx - v; } return diff; }, onMouseMove : function(e){ if(this.enabled){ try{ if(this.resizeRegion && !this.resizeRegion.contains(e.getPoint())) { return; } var curSize = this.curSize || this.startBox; var x = this.startBox.x, y = this.startBox.y; var ox = x, oy = y; var w = curSize.width, h = curSize.height; var ow = w, oh = h; var mw = this.minWidth, mh = this.minHeight; var mxw = this.maxWidth, mxh = this.maxHeight; var wi = this.widthIncrement; var hi = this.heightIncrement; var eventXY = e.getXY(); var diffX = -(this.startPoint[0] - Math.max(this.minX, eventXY[0])); var diffY = -(this.startPoint[1] - Math.max(this.minY, eventXY[1])); var pos = this.activeHandle.position; switch(pos){ case "east": w += diffX; w = Math.min(Math.max(mw, w), mxw); break; case "south": h += diffY; h = Math.min(Math.max(mh, h), mxh); break; case "southeast": w += diffX; h += diffY; w = Math.min(Math.max(mw, w), mxw); h = Math.min(Math.max(mh, h), mxh); break; case "north": diffY = this.constrain(h, diffY, mh, mxh); y += diffY; h -= diffY; break; case "west": diffX = this.constrain(w, diffX, mw, mxw); x += diffX; w -= diffX; break; case "northeast": w += diffX; w = Math.min(Math.max(mw, w), mxw); diffY = this.constrain(h, diffY, mh, mxh); y += diffY; h -= diffY; break; case "northwest": diffX = this.constrain(w, diffX, mw, mxw); diffY = this.constrain(h, diffY, mh, mxh); y += diffY; h -= diffY; x += diffX; w -= diffX; break; case "southwest": diffX = this.constrain(w, diffX, mw, mxw); h += diffY; h = Math.min(Math.max(mh, h), mxh); x += diffX; w -= diffX; break; } var sw = this.snap(w, wi, mw); var sh = this.snap(h, hi, mh); if(sw != w || sh != h){ switch(pos){ case "northeast": y -= sh - h; break; case "north": y -= sh - h; break; case "southwest": x -= sw - w; break; case "west": x -= sw - w; break; case "northwest": x -= sw - w; y -= sh - h; break; } w = sw; h = sh; } if(this.preserveRatio){ switch(pos){ case "southeast": case "east": h = oh * (w/ow); h = Math.min(Math.max(mh, h), mxh); w = ow * (h/oh); break; case "south": w = ow * (h/oh); w = Math.min(Math.max(mw, w), mxw); h = oh * (w/ow); break; case "northeast": w = ow * (h/oh); w = Math.min(Math.max(mw, w), mxw); h = oh * (w/ow); break; case "north": var tw = w; w = ow * (h/oh); w = Math.min(Math.max(mw, w), mxw); h = oh * (w/ow); x += (tw - w) / 2; break; case "southwest": h = oh * (w/ow); h = Math.min(Math.max(mh, h), mxh); var tw = w; w = ow * (h/oh); x += tw - w; break; case "west": var th = h; h = oh * (w/ow); h = Math.min(Math.max(mh, h), mxh); y += (th - h) / 2; var tw = w; w = ow * (h/oh); x += tw - w; break; case "northwest": var tw = w; var th = h; h = oh * (w/ow); h = Math.min(Math.max(mh, h), mxh); w = ow * (h/oh); y += th - h; x += tw - w; break; } } this.proxy.setBounds(x, y, w, h); if(this.dynamic){ this.resizeElement(); } }catch(e){} } }, handleOver : function(){ if(this.enabled){ this.el.addClass("x-resizable-over"); } }, handleOut : function(){ if(!this.resizing){ this.el.removeClass("x-resizable-over"); } }, getEl : function(){ return this.el; }, getResizeChild : function(){ return this.resizeChild; }, destroy : function(removeEl){ this.proxy.remove(); if(this.overlay){ this.overlay.removeAllListeners(); this.overlay.remove(); } var ps = Ext.Resizable.positions; for(var k in ps){ if(typeof ps[k] != "function" && this[ps[k]]){ var h = this[ps[k]]; h.el.removeAllListeners(); h.el.remove(); } } if(removeEl){ this.el.update(""); this.el.remove(); } } }); Ext.Resizable.positions = { n: "north", s: "south", e: "east", w: "west", se: "southeast", sw: "southwest", nw: "northwest", ne: "northeast" }; Ext.Resizable.Handle = function(rz, pos, disableTrackOver, transparent){ if(!this.tpl){ var tpl = Ext.DomHelper.createTemplate( {tag: "div", cls: "x-resizable-handle x-resizable-handle-{0}"} ); tpl.compile(); Ext.Resizable.Handle.prototype.tpl = tpl; } this.position = pos; this.rz = rz; this.el = this.tpl.append(rz.el.dom, [this.position], true); this.el.unselectable(); if(transparent){ this.el.setOpacity(0); } this.el.on("mousedown", this.onMouseDown, this); if(!disableTrackOver){ this.el.on("mouseover", this.onMouseOver, this); this.el.on("mouseout", this.onMouseOut, this); } }; Ext.Resizable.Handle.prototype = { afterResize : function(rz){ }, onMouseDown : function(e){ this.rz.onMouseDown(this, e); }, onMouseOver : function(e){ this.rz.handleOver(this, e); }, onMouseOut : function(e){ this.rz.handleOut(this, e); } }; + +Ext.Editor = function(field, config){ + Ext.Editor.superclass.constructor.call(this, config); + this.field = field; + this.addEvents({ + + "beforestartedit" : true, + + "startedit" : true, + + "beforecomplete" : true, + + "complete" : true, + + "specialkey" : true + }); +}; + +Ext.extend(Ext.Editor, Ext.Component, { + + + + + + value : "", + + alignment: "c-c?", + + shadow : "frame", + + constrain : false, + + completeOnEnter : false, + + cancelOnEsc : false, + + updateEl : false, + + onRender : function(ct, position){ + this.el = new Ext.Layer({ + shadow: this.shadow, + cls: "x-editor", + parentEl : ct, + shim : this.shim, + shadowOffset:4, + id: this.id, + constrain: this.constrain + }); + this.el.setStyle("overflow", Ext.isGecko ? "auto" : "hidden"); + if(this.field.msgTarget != 'title'){ + this.field.msgTarget = 'qtip'; + } + this.field.render(this.el); + if(Ext.isGecko){ + this.field.el.dom.setAttribute('autocomplete', 'off'); + } + this.field.on("specialkey", this.onSpecialKey, this); + if(this.swallowKeys){ + this.field.el.swallowEvent(['keydown','keypress']); + } + this.field.show(); + this.field.on("blur", this.onBlur, this); + if(this.field.grow){ + this.field.on("autosize", this.el.sync, this.el, {delay:1}); + } + }, + + onSpecialKey : function(field, e){ + if(this.completeOnEnter && e.getKey() == e.ENTER){ + e.stopEvent(); + this.completeEdit(); + }else if(this.cancelOnEsc && e.getKey() == e.ESC){ + this.cancelEdit(); + }else{ + this.fireEvent('specialkey', field, e); + } + }, + + + startEdit : function(el, value){ + if(this.editing){ + this.completeEdit(); + } + this.boundEl = Ext.get(el); + var v = value !== undefined ? value : this.boundEl.dom.innerHTML; + if(!this.rendered){ + this.render(this.parentEl || document.body); + } + if(this.fireEvent("beforestartedit", this, this.boundEl, v) === false){ + return; + } + this.startValue = v; + this.field.setValue(v); + if(this.autoSize){ + var sz = this.boundEl.getSize(); + switch(this.autoSize){ + case "width": + this.setSize(sz.width, ""); + break; + case "height": + this.setSize("", sz.height); + break; + default: + this.setSize(sz.width, sz.height); + } + } + this.el.alignTo(this.boundEl, this.alignment); + this.editing = true; + if(Ext.QuickTips){ + Ext.QuickTips.disable(); + } + this.show(); + }, + + + setSize : function(w, h){ + this.field.setSize(w, h); + if(this.el){ + this.el.sync(); + } + }, + + + realign : function(){ + this.el.alignTo(this.boundEl, this.alignment); + }, + + + completeEdit : function(remainVisible){ + if(!this.editing){ + return; + } + var v = this.getValue(); + if(this.revertInvalid !== false && !this.field.isValid()){ + v = this.startValue; + this.cancelEdit(true); + } + if(String(v) === String(this.startValue) && this.ignoreNoChange){ + this.editing = false; + this.hide(); + return; + } + if(this.fireEvent("beforecomplete", this, v, this.startValue) !== false){ + this.editing = false; + if(this.updateEl && this.boundEl){ + this.boundEl.update(v); + } + if(remainVisible !== true){ + this.hide(); + } + this.fireEvent("complete", this, v, this.startValue); + } + }, + + onShow : function(){ + this.el.show(); + if(this.hideEl !== false){ + this.boundEl.hide(); + } + this.field.show(); + if(Ext.isIE && !this.fixIEFocus){ this.fixIEFocus = true; + this.deferredFocus.defer(50, this); + }else{ + this.field.focus(); + } + this.fireEvent("startedit", this.boundEl, this.startValue); + }, + + deferredFocus : function(){ + if(this.editing){ + this.field.focus(); + } + }, + + + cancelEdit : function(remainVisible){ + if(this.editing){ + this.setValue(this.startValue); + if(remainVisible !== true){ + this.hide(); + } + } + }, + + onBlur : function(){ + if(this.allowBlur !== true && this.editing){ + this.completeEdit(); + } + }, + + onHide : function(){ + if(this.editing){ + this.completeEdit(); + return; + } + this.field.blur(); + if(this.field.collapse){ + this.field.collapse(); + } + this.el.hide(); + if(this.hideEl !== false){ + this.boundEl.show(); + } + if(Ext.QuickTips){ + Ext.QuickTips.enable(); + } + }, + + + setValue : function(v){ + this.field.setValue(v); + }, + + + getValue : function(){ + return this.field.getValue(); + } +}); + +Ext.BasicDialog = function(el, config){ + this.el = Ext.get(el); + var dh = Ext.DomHelper; + if(!this.el && config && config.autoCreate){ + if(typeof config.autoCreate == "object"){ + if(!config.autoCreate.id){ + config.autoCreate.id = el; + } + this.el = dh.append(document.body, + config.autoCreate, true); + }else{ + this.el = dh.append(document.body, + {tag: "div", id: el, style:'visibility:hidden;'}, true); + } + } + el = this.el; + el.setDisplayed(true); + el.hide = this.hideAction; + this.id = el.id; + el.addClass("x-dlg"); + + Ext.apply(this, config); + + this.proxy = el.createProxy("x-dlg-proxy"); + this.proxy.hide = this.hideAction; + this.proxy.setOpacity(.5); + this.proxy.hide(); + + if(config.width){ + el.setWidth(config.width); + } + if(config.height){ + el.setHeight(config.height); + } + this.size = el.getSize(); + if(typeof config.x != "undefined" && typeof config.y != "undefined"){ + this.xy = [config.x,config.y]; + }else{ + this.xy = el.getCenterXY(true); + } + + this.header = el.child("> .x-dlg-hd"); + + this.body = el.child("> .x-dlg-bd"); + + this.footer = el.child("> .x-dlg-ft"); + + if(!this.header){ + this.header = el.createChild({tag: "div", cls:"x-dlg-hd", html: " "}, this.body ? this.body.dom : null); + } + if(!this.body){ + this.body = el.createChild({tag: "div", cls:"x-dlg-bd"}); + } + + this.header.unselectable(); + if(this.title){ + this.header.update(this.title); + } + + this.focusEl = el.createChild({tag: "a", href:"#", cls:"x-dlg-focus", tabIndex:"-1"}); + this.focusEl.swallowEvent("click", true); + + this.header.wrap({cls:"x-dlg-hd-right"}).wrap({cls:"x-dlg-hd-left"}, true); + + + this.bwrap = this.body.wrap({tag: "div", cls:"x-dlg-dlg-body"}); + if(this.footer){ + this.bwrap.dom.appendChild(this.footer.dom); + } + + this.bg = this.el.createChild({ + tag: "div", cls:"x-dlg-bg", + html: '
 
' + }); + this.centerBg = this.bg.child("div.x-dlg-bg-center"); + + + if(this.autoScroll !== false && !this.autoTabs){ + this.body.setStyle("overflow", "auto"); + } + + this.toolbox = this.el.createChild({cls: "x-dlg-toolbox"}); + + if(this.closable !== false){ + this.el.addClass("x-dlg-closable"); + this.close = this.toolbox.createChild({cls:"x-dlg-close"}); + this.close.on("click", this.closeClick, this); + this.close.addClassOnOver("x-dlg-close-over"); + } + if(this.collapsible !== false){ + this.collapseBtn = this.toolbox.createChild({cls:"x-dlg-collapse"}); + this.collapseBtn.on("click", this.collapseClick, this); + this.collapseBtn.addClassOnOver("x-dlg-collapse-over"); + this.header.on("dblclick", this.collapseClick, this); + } + if(this.resizable !== false){ + this.el.addClass("x-dlg-resizable"); + this.resizer = new Ext.Resizable(el, { + minWidth: this.minWidth || 80, + minHeight:this.minHeight || 80, + handles: this.resizeHandles || "all", + pinned: true + }); + this.resizer.on("beforeresize", this.beforeResize, this); + this.resizer.on("resize", this.onResize, this); + } + if(this.draggable !== false){ + el.addClass("x-dlg-draggable"); + if (!this.proxyDrag) { + var dd = new Ext.dd.DD(el.dom.id, "WindowDrag"); + } + else { + var dd = new Ext.dd.DDProxy(el.dom.id, "WindowDrag", {dragElId: this.proxy.id}); + } + dd.setHandleElId(this.header.id); + dd.endDrag = this.endMove.createDelegate(this); + dd.startDrag = this.startMove.createDelegate(this); + dd.onDrag = this.onDrag.createDelegate(this); + dd.scroll = false; + this.dd = dd; + } + if(this.modal){ + this.mask = dh.append(document.body, {tag: "div", cls:"x-dlg-mask"}, true); + this.mask.enableDisplayMode("block"); + this.mask.hide(); + this.el.addClass("x-dlg-modal"); + } + if(this.shadow){ + this.shadow = new Ext.Shadow({ + mode : typeof this.shadow == "string" ? this.shadow : "sides", + offset : this.shadowOffset + }); + }else{ + this.shadowOffset = 0; + } + if(Ext.useShims && this.shim !== false){ + this.shim = this.el.createShim(); + this.shim.hide = this.hideAction; + this.shim.hide(); + }else{ + this.shim = false; + } + if(this.autoTabs){ + this.initTabs(); + } + this.addEvents({ + + "keydown" : true, + + "move" : true, + + "resize" : true, + + "beforehide" : true, + + "hide" : true, + + "beforeshow" : true, + + "show" : true + }); + el.on("keydown", this.onKeyDown, this); + el.on("mousedown", this.toFront, this); + Ext.EventManager.onWindowResize(this.adjustViewport, this, true); + this.el.hide(); + Ext.DialogManager.register(this); + Ext.BasicDialog.superclass.constructor.call(this); +}; + +Ext.extend(Ext.BasicDialog, Ext.util.Observable, { + shadowOffset: Ext.isIE ? 6 : 5, + minHeight: 80, + minWidth: 200, + minButtonWidth: 75, + defaultButton: null, + buttonAlign: "right", + tabTag: 'div', + firstShow: true, + + + setTitle : function(text){ + this.header.update(text); + return this; + }, + + + closeClick : function(){ + this.hide(); + }, + + + collapseClick : function(){ + this[this.collapsed ? "expand" : "collapse"](); + }, + + + collapse : function(){ + if(!this.collapsed){ + this.collapsed = true; + this.el.addClass("x-dlg-collapsed"); + this.restoreHeight = this.el.getHeight(); + this.resizeTo(this.el.getWidth(), this.header.getHeight()); + } + }, + + + expand : function(){ + if(this.collapsed){ + this.collapsed = false; + this.el.removeClass("x-dlg-collapsed"); + this.resizeTo(this.el.getWidth(), this.restoreHeight); + } + }, + + + initTabs : function(){ + var tabs = this.getTabs(); + while(tabs.getTab(0)){ + tabs.removeTab(0); + } + this.el.select(this.tabTag+'.x-dlg-tab').each(function(el){ + var dom = el.dom; + tabs.addTab(Ext.id(dom), dom.title); + dom.title = ""; + }); + tabs.activate(0); + return tabs; + }, + + + beforeResize : function(){ + this.resizer.minHeight = Math.max(this.minHeight, this.getHeaderFooterHeight(true)+40); + }, + + + onResize : function(){ + this.refreshSize(); + this.syncBodyHeight(); + this.adjustAssets(); + this.focus(); + this.fireEvent("resize", this, this.size.width, this.size.height); + }, + + + onKeyDown : function(e){ + if(this.isVisible()){ + this.fireEvent("keydown", this, e); + } + }, + + + resizeTo : function(width, height){ + this.el.setSize(width, height); + this.size = {width: width, height: height}; + this.syncBodyHeight(); + if(this.fixedcenter){ + this.center(); + } + if(this.isVisible()){ + this.constrainXY(); + this.adjustAssets(); + } + this.fireEvent("resize", this, width, height); + return this; + }, + + + + setContentSize : function(w, h){ + h += this.getHeaderFooterHeight() + this.body.getMargins("tb"); + w += this.body.getMargins("lr") + this.bwrap.getMargins("lr") + this.centerBg.getPadding("lr"); + + h += this.body.getPadding("tb") + this.bwrap.getBorderWidth("tb") + this.body.getBorderWidth("tb") + this.el.getBorderWidth("tb"); + w += this.body.getPadding("lr") + this.bwrap.getBorderWidth("lr") + this.body.getBorderWidth("lr") + this.bwrap.getPadding("lr") + this.el.getBorderWidth("lr"); + + if(this.tabs){ + h += this.tabs.stripWrap.getHeight() + this.tabs.bodyEl.getMargins("tb") + this.tabs.bodyEl.getPadding("tb"); + w += this.tabs.bodyEl.getMargins("lr") + this.tabs.bodyEl.getPadding("lr"); + } + this.resizeTo(w, h); + return this; + }, + + + addKeyListener : function(key, fn, scope){ + var keyCode, shift, ctrl, alt; + if(typeof key == "object" && !(key instanceof Array)){ + keyCode = key["key"]; + shift = key["shift"]; + ctrl = key["ctrl"]; + alt = key["alt"]; + }else{ + keyCode = key; + } + var handler = function(dlg, e){ + if((!shift || e.shiftKey) && (!ctrl || e.ctrlKey) && (!alt || e.altKey)){ + var k = e.getKey(); + if(keyCode instanceof Array){ + for(var i = 0, len = keyCode.length; i < len; i++){ + if(keyCode[i] == k){ + fn.call(scope || window, dlg, k, e); + return; + } + } + }else{ + if(k == keyCode){ + fn.call(scope || window, dlg, k, e); + } + } + } + }; + this.on("keydown", handler); + return this; + }, + + + getTabs : function(){ + if(!this.tabs){ + this.el.addClass("x-dlg-auto-tabs"); + this.body.addClass(this.tabPosition == "bottom" ? "x-tabs-bottom" : "x-tabs-top"); + this.tabs = new Ext.TabPanel(this.body.dom, this.tabPosition == "bottom"); + } + return this.tabs; + }, + + + addButton : function(config, handler, scope){ + var dh = Ext.DomHelper; + if(!this.footer){ + this.footer = dh.append(this.bwrap, {tag: "div", cls:"x-dlg-ft"}, true); + } + if(!this.btnContainer){ + var tb = this.footer.createChild({ + + cls:"x-dlg-btns x-dlg-btns-"+this.buttonAlign, + html:'
' + }, null, true); + this.btnContainer = tb.firstChild.firstChild.firstChild; + } + var bconfig = { + handler: handler, + scope: scope, + minWidth: this.minButtonWidth, + hideParent:true + }; + if(typeof config == "string"){ + bconfig.text = config; + }else{ + if(config.tag){ + bconfig.dhconfig = config; + }else{ + Ext.apply(bconfig, config); + } + } + var btn = new Ext.Button( + this.btnContainer.appendChild(document.createElement("td")), + bconfig + ); + this.syncBodyHeight(); + if(!this.buttons){ + + this.buttons = []; + } + this.buttons.push(btn); + return btn; + }, + + + setDefaultButton : function(btn){ + this.defaultButton = btn; + return this; + }, + + + getHeaderFooterHeight : function(safe){ + var height = 0; + if(this.header){ + height += this.header.getHeight(); + } + if(this.footer){ + var fm = this.footer.getMargins(); + height += (this.footer.getHeight()+fm.top+fm.bottom); + } + height += this.bwrap.getPadding("tb")+this.bwrap.getBorderWidth("tb"); + height += this.centerBg.getPadding("tb"); + return height; + }, + + + syncBodyHeight : function(){ + var bd = this.body, cb = this.centerBg, bw = this.bwrap; + var height = this.size.height - this.getHeaderFooterHeight(false); + bd.setHeight(height-bd.getMargins("tb")); + var hh = this.header.getHeight(); + var h = this.size.height-hh; + cb.setHeight(h); + bw.setLeftTop(cb.getPadding("l"), hh+cb.getPadding("t")); + bw.setHeight(h-cb.getPadding("tb")); + bw.setWidth(this.el.getWidth(true)-cb.getPadding("lr")); + bd.setWidth(bw.getWidth(true)); + if(this.tabs){ + this.tabs.syncHeight(); + if(Ext.isIE){ + this.tabs.el.repaint(); + } + } + }, + + + restoreState : function(){ + var box = Ext.state.Manager.get(this.stateId || (this.el.id + "-state")); + if(box && box.width){ + this.xy = [box.x, box.y]; + this.resizeTo(box.width, box.height); + } + return this; + }, + + + beforeShow : function(){ + this.expand(); + if(this.fixedcenter){ + this.xy = this.el.getCenterXY(true); + } + if(this.modal){ + Ext.get(document.body).addClass("x-body-masked"); + this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true)); + this.mask.show(); + } + this.constrainXY(); + }, + + + animShow : function(){ + var b = Ext.get(this.animateTarget, true).getBox(); + this.proxy.setSize(b.width, b.height); + this.proxy.setLocation(b.x, b.y); + this.proxy.show(); + this.proxy.setBounds(this.xy[0], this.xy[1], this.size.width, this.size.height, + true, .35, this.showEl.createDelegate(this)); + }, + + + show : function(animateTarget){ + if (this.fireEvent("beforeshow", this) === false){ + return; + } + if(this.syncHeightBeforeShow){ + this.syncBodyHeight(); + }else if(this.firstShow){ + this.firstShow = false; + this.syncBodyHeight(); + } + this.animateTarget = animateTarget || this.animateTarget; + if(!this.el.isVisible()){ + this.beforeShow(); + if(this.animateTarget){ + this.animShow(); + }else{ + this.showEl(); + } + } + return this; + }, + + + showEl : function(){ + this.proxy.hide(); + this.el.setXY(this.xy); + this.el.show(); + this.adjustAssets(true); + this.toFront(); + this.focus(); + + if(Ext.isIE){ + this.el.repaint(); + } + this.fireEvent("show", this); + }, + + + focus : function(){ + if(this.defaultButton){ + this.defaultButton.focus(); + }else{ + this.focusEl.focus(); + } + }, + + + constrainXY : function(){ + if(this.constraintoviewport !== false){ + if(!this.viewSize){ + if(this.container){ + var s = this.container.getSize(); + this.viewSize = [s.width, s.height]; + }else{ + this.viewSize = [Ext.lib.Dom.getViewWidth(),Ext.lib.Dom.getViewHeight()]; + } + } + var s = Ext.get(this.container||document).getScroll(); + + var x = this.xy[0], y = this.xy[1]; + var w = this.size.width, h = this.size.height; + var vw = this.viewSize[0], vh = this.viewSize[1]; + + var moved = false; + + if(x + w > vw+s.left){ + x = vw - w; + moved = true; + } + if(y + h > vh+s.top){ + y = vh - h; + moved = true; + } + + if(x < s.left){ + x = s.left; + moved = true; + } + if(y < s.top){ + y = s.top; + moved = true; + } + if(moved){ + + this.xy = [x, y]; + if(this.isVisible()){ + this.el.setLocation(x, y); + this.adjustAssets(); + } + } + } + }, + + + onDrag : function(){ + if(!this.proxyDrag){ + this.xy = this.el.getXY(); + this.adjustAssets(); + } + }, + + + adjustAssets : function(doShow){ + var x = this.xy[0], y = this.xy[1]; + var w = this.size.width, h = this.size.height; + if(doShow === true){ + if(this.shadow){ + this.shadow.show(this.el); + } + if(this.shim){ + this.shim.show(); + } + } + if(this.shadow && this.shadow.isVisible()){ + this.shadow.show(this.el); + } + if(this.shim && this.shim.isVisible()){ + this.shim.setBounds(x, y, w, h); + } + }, + + + adjustViewport : function(w, h){ + if(!w || !h){ + w = Ext.lib.Dom.getViewWidth(); + h = Ext.lib.Dom.getViewHeight(); + } + + this.viewSize = [w, h]; + if(this.modal && this.mask.isVisible()){ + this.mask.setSize(w, h); + this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true)); + } + if(this.isVisible()){ + this.constrainXY(); + } + }, + + + destroy : function(removeEl){ + if(this.isVisible()){ + this.animateTarget = null; + this.hide(); + } + Ext.EventManager.removeResizeListener(this.adjustViewport, this); + if(this.tabs){ + this.tabs.destroy(removeEl); + } + Ext.destroy( + this.shim, + this.proxy, + this.resizer, + this.close, + this.mask + ); + if(this.dd){ + this.dd.unreg(); + } + if(this.buttons){ + for(var i = 0, len = this.buttons.length; i < len; i++){ + this.buttons[i].destroy(); + } + } + this.el.removeAllListeners(); + if(removeEl === true){ + this.el.update(""); + this.el.remove(); + } + Ext.DialogManager.unregister(this); + }, + + + startMove : function(){ + if(this.proxyDrag){ + this.proxy.show(); + } + if(this.constraintoviewport !== false){ + this.dd.constrainTo(document.body, {right: this.shadowOffset, bottom: this.shadowOffset}); + } + }, + + + endMove : function(){ + if(!this.proxyDrag){ + Ext.dd.DD.prototype.endDrag.apply(this.dd, arguments); + }else{ + Ext.dd.DDProxy.prototype.endDrag.apply(this.dd, arguments); + this.proxy.hide(); + } + this.refreshSize(); + this.adjustAssets(); + this.focus(); + this.fireEvent("move", this, this.xy[0], this.xy[1]); + }, + + + toFront : function(){ + Ext.DialogManager.bringToFront(this); + return this; + }, + + + toBack : function(){ + Ext.DialogManager.sendToBack(this); + return this; + }, + + + center : function(){ + var xy = this.el.getCenterXY(true); + this.moveTo(xy[0], xy[1]); + return this; + }, + + + moveTo : function(x, y){ + this.xy = [x,y]; + if(this.isVisible()){ + this.el.setXY(this.xy); + this.adjustAssets(); + } + return this; + }, + + + alignTo : function(element, position, offsets){ + this.xy = this.el.getAlignToXY(element, position, offsets); + if(this.isVisible()){ + this.el.setXY(this.xy); + this.adjustAssets(); + } + return this; + }, + + + anchorTo : function(el, alignment, offsets, monitorScroll){ + var action = function(){ + this.alignTo(el, alignment, offsets); + }; + Ext.EventManager.onWindowResize(action, this); + var tm = typeof monitorScroll; + if(tm != 'undefined'){ + Ext.EventManager.on(window, 'scroll', action, this, + {buffer: tm == 'number' ? monitorScroll : 50}); + } + action.call(this); + return this; + }, + + + isVisible : function(){ + return this.el.isVisible(); + }, + + + animHide : function(callback){ + var b = Ext.get(this.animateTarget).getBox(); + this.proxy.show(); + this.proxy.setBounds(this.xy[0], this.xy[1], this.size.width, this.size.height); + this.el.hide(); + this.proxy.setBounds(b.x, b.y, b.width, b.height, true, .35, + this.hideEl.createDelegate(this, [callback])); + }, + + + hide : function(callback){ + if (this.fireEvent("beforehide", this) === false){ + return; + } + if(this.shadow){ + this.shadow.hide(); + } + if(this.shim) { + this.shim.hide(); + } + if(this.animateTarget){ + this.animHide(callback); + }else{ + this.el.hide(); + this.hideEl(callback); + } + return this; + }, + + + hideEl : function(callback){ + this.proxy.hide(); + if(this.modal){ + this.mask.hide(); + Ext.get(document.body).removeClass("x-body-masked"); + } + this.fireEvent("hide", this); + if(typeof callback == "function"){ + callback(); + } + }, + + + hideAction : function(){ + this.setLeft("-10000px"); + this.setTop("-10000px"); + this.setStyle("visibility", "hidden"); + }, + + + refreshSize : function(){ + this.size = this.el.getSize(); + this.xy = this.el.getXY(); + Ext.state.Manager.set(this.stateId || this.el.id + "-state", this.el.getBox()); + }, + + + + setZIndex : function(index){ + if(this.modal){ + this.mask.setStyle("z-index", index); + } + if(this.shim){ + this.shim.setStyle("z-index", ++index); + } + if(this.shadow){ + this.shadow.setZIndex(++index); + } + this.el.setStyle("z-index", ++index); + if(this.proxy){ + this.proxy.setStyle("z-index", ++index); + } + if(this.resizer){ + this.resizer.proxy.setStyle("z-index", ++index); + } + + this.lastZIndex = index; + }, + + + getEl : function(){ + return this.el; + } +}); + + +Ext.DialogManager = function(){ + var list = {}; + var accessList = []; + var front = null; + + + var sortDialogs = function(d1, d2){ + return (!d1._lastAccess || d1._lastAccess < d2._lastAccess) ? -1 : 1; + }; + + + var orderDialogs = function(){ + accessList.sort(sortDialogs); + var seed = Ext.DialogManager.zseed; + for(var i = 0, len = accessList.length; i < len; i++){ + var dlg = accessList[i]; + if(dlg){ + dlg.setZIndex(seed + (i*10)); + } + } + }; + + return { + + zseed : 9000, + + + register : function(dlg){ + list[dlg.id] = dlg; + accessList.push(dlg); + }, + + + unregister : function(dlg){ + delete list[dlg.id]; + if(!accessList.indexOf){ + for(var i = 0, len = accessList.length; i < len; i++){ + if(accessList[i] == dlg){ + accessList.splice(i, 1); + return; + } + } + }else{ + var i = accessList.indexOf(dlg); + if(i != -1){ + accessList.splice(i, 1); + } + } + }, + + + get : function(id){ + return typeof id == "object" ? id : list[id]; + }, + + + bringToFront : function(dlg){ + dlg = this.get(dlg); + if(dlg != front){ + front = dlg; + dlg._lastAccess = new Date().getTime(); + orderDialogs(); + } + return dlg; + }, + + + sendToBack : function(dlg){ + dlg = this.get(dlg); + dlg._lastAccess = -(new Date().getTime()); + orderDialogs(); + return dlg; + }, + + + hideAll : function(){ + for(var id in list){ + if(list[id] && typeof list[id] != "function" && list[id].isVisible()){ + list[id].hide(); + } + } + } + }; +}(); + + +Ext.LayoutDialog = function(el, config){ + config.autoTabs = false; + Ext.LayoutDialog.superclass.constructor.call(this, el, config); + this.body.setStyle({overflow:"hidden", position:"relative"}); + this.layout = new Ext.BorderLayout(this.body.dom, config); + this.layout.monitorWindowResize = false; + this.el.addClass("x-dlg-auto-layout"); + + this.center = Ext.BasicDialog.prototype.center; + this.on("show", this.layout.layout, this.layout, true); +}; +Ext.extend(Ext.LayoutDialog, Ext.BasicDialog, { + + endUpdate : function(){ + this.layout.endUpdate(); + }, + + + beginUpdate : function(){ + this.layout.beginUpdate(); + }, + + + getLayout : function(){ + return this.layout; + }, + + showEl : function(){ + Ext.LayoutDialog.superclass.showEl.apply(this, arguments); + if(Ext.isIE7){ + this.layout.layout(); + } + }, + + + + syncBodyHeight : function(){ + Ext.LayoutDialog.superclass.syncBodyHeight.call(this); + if(this.layout){this.layout.layout();} + } +}); + +Ext.MessageBox = function(){ + var dlg, opt, mask, waitTimer; + var bodyEl, msgEl, textboxEl, textareaEl, progressEl, pp; + var buttons, activeTextEl, bwidth; + + + var handleButton = function(button){ + dlg.hide(); + Ext.callback(opt.fn, opt.scope||window, [button, activeTextEl.dom.value], 1); + }; + + + var handleHide = function(){ + if(opt && opt.cls){ + dlg.el.removeClass(opt.cls); + } + if(waitTimer){ + Ext.TaskMgr.stop(waitTimer); + waitTimer = null; + } + }; + + + var updateButtons = function(b){ + var width = 0; + if(!b){ + buttons["ok"].hide(); + buttons["cancel"].hide(); + buttons["yes"].hide(); + buttons["no"].hide(); + dlg.footer.dom.style.display = 'none'; + return width; + } + dlg.footer.dom.style.display = ''; + for(var k in buttons){ + if(typeof buttons[k] != "function"){ + if(b[k]){ + buttons[k].show(); + buttons[k].setText(typeof b[k] == "string" ? b[k] : Ext.MessageBox.buttonText[k]); + width += buttons[k].el.getWidth()+15; + }else{ + buttons[k].hide(); + } + } + } + return width; + }; + + + var handleEsc = function(d, k, e){ + if(opt && opt.closable !== false){ + dlg.hide(); + } + if(e){ + e.stopEvent(); + } + }; + + return { + + getDialog : function(){ + if(!dlg){ + dlg = new Ext.BasicDialog("x-msg-box", { + autoCreate : true, + shadow: true, + draggable: true, + resizable:false, + constraintoviewport:false, + fixedcenter:true, + collapsible : false, + shim:true, + modal: true, + width:400, height:100, + buttonAlign:"center", + closeClick : function(){ + if(opt && opt.buttons && opt.buttons.no && !opt.buttons.cancel){ + handleButton("no"); + }else{ + handleButton("cancel"); + } + } + }); + dlg.on("hide", handleHide); + mask = dlg.mask; + dlg.addKeyListener(27, handleEsc); + buttons = {}; + var bt = this.buttonText; + buttons["ok"] = dlg.addButton(bt["ok"], handleButton.createCallback("ok")); + buttons["yes"] = dlg.addButton(bt["yes"], handleButton.createCallback("yes")); + buttons["no"] = dlg.addButton(bt["no"], handleButton.createCallback("no")); + buttons["cancel"] = dlg.addButton(bt["cancel"], handleButton.createCallback("cancel")); + bodyEl = dlg.body.createChild({ + + html:'
 
' + }); + msgEl = bodyEl.dom.firstChild; + textboxEl = Ext.get(bodyEl.dom.childNodes[2]); + textboxEl.enableDisplayMode(); + textboxEl.addKeyListener([10,13], function(){ + if(dlg.isVisible() && opt && opt.buttons){ + if(opt.buttons.ok){ + handleButton("ok"); + }else if(opt.buttons.yes){ + handleButton("yes"); + } + } + }); + textareaEl = Ext.get(bodyEl.dom.childNodes[3]); + textareaEl.enableDisplayMode(); + progressEl = Ext.get(bodyEl.dom.childNodes[4]); + progressEl.enableDisplayMode(); + var pf = progressEl.dom.firstChild; + pp = Ext.get(pf.firstChild); + pp.setHeight(pf.offsetHeight); + } + return dlg; + }, + + + updateText : function(text){ + if(!dlg.isVisible() && !opt.width){ + dlg.resizeTo(this.maxWidth, 100); + } + msgEl.innerHTML = text || ' '; + var w = Math.max(Math.min(opt.width || msgEl.offsetWidth, this.maxWidth), + Math.max(opt.minWidth || this.minWidth, bwidth)); + if(opt.prompt){ + activeTextEl.setWidth(w); + } + if(dlg.isVisible()){ + dlg.fixedcenter = false; + } + dlg.setContentSize(w, bodyEl.getHeight()); + if(dlg.isVisible()){ + dlg.fixedcenter = true; + } + return this; + }, + + + updateProgress : function(value, text){ + if(text){ + this.updateText(text); + } + pp.setWidth(Math.floor(value*progressEl.dom.firstChild.offsetWidth)); + return this; + }, + + + isVisible : function(){ + return dlg && dlg.isVisible(); + }, + + + hide : function(){ + if(this.isVisible()){ + dlg.hide(); + } + }, + + + show : function(options){ + if(this.isVisible()){ + this.hide(); + } + var d = this.getDialog(); + opt = options; + d.setTitle(opt.title || " "); + d.close.setDisplayed(opt.closable !== false); + activeTextEl = textboxEl; + opt.prompt = opt.prompt || (opt.multiline ? true : false); + if(opt.prompt){ + if(opt.multiline){ + textboxEl.hide(); + textareaEl.show(); + textareaEl.setHeight(typeof opt.multiline == "number" ? + opt.multiline : this.defaultTextHeight); + activeTextEl = textareaEl; + }else{ + textboxEl.show(); + textareaEl.hide(); + } + }else{ + textboxEl.hide(); + textareaEl.hide(); + } + progressEl.setDisplayed(opt.progress === true); + this.updateProgress(0); + activeTextEl.dom.value = opt.value || ""; + if(opt.prompt){ + dlg.setDefaultButton(activeTextEl); + }else{ + var bs = opt.buttons; + var db = null; + if(bs && bs.ok){ + db = buttons["ok"]; + }else if(bs && bs.yes){ + db = buttons["yes"]; + } + dlg.setDefaultButton(db); + } + bwidth = updateButtons(opt.buttons); + this.updateText(opt.msg); + if(opt.cls){ + d.el.addClass(opt.cls); + } + d.proxyDrag = opt.proxyDrag === true; + d.modal = opt.modal !== false; + d.mask = opt.modal !== false ? mask : false; + if(!d.isVisible()){ + + document.body.appendChild(dlg.el.dom); + d.animateTarget = null; + d.show(options.animEl); + } + return this; + }, + + + progress : function(title, msg){ + this.show({ + title : title, + msg : msg, + buttons: false, + progress:true, + closable:false, + minWidth: this.minProgressWidth + }); + return this; + }, + + + alert : function(title, msg, fn, scope){ + this.show({ + title : title, + msg : msg, + buttons: this.OK, + fn: fn, + scope : scope + }); + return this; + }, + + + wait : function(msg, title){ + this.show({ + title : title, + msg : msg, + buttons: false, + closable:false, + progress:true, + modal:true, + width:300, + wait:true + }); + waitTimer = Ext.TaskMgr.start({ + run: function(i){ + Ext.MessageBox.updateProgress(((((i+20)%20)+1)*5)*.01); + }, + interval: 1000 + }); + return this; + }, + + + confirm : function(title, msg, fn, scope){ + this.show({ + title : title, + msg : msg, + buttons: this.YESNO, + fn: fn, + scope : scope + }); + return this; + }, + + + prompt : function(title, msg, fn, scope, multiline){ + this.show({ + title : title, + msg : msg, + buttons: this.OKCANCEL, + fn: fn, + minWidth:250, + scope : scope, + prompt:true, + multiline: multiline + }); + return this; + }, + + + OK : {ok:true}, + + YESNO : {yes:true, no:true}, + + OKCANCEL : {ok:true, cancel:true}, + + YESNOCANCEL : {yes:true, no:true, cancel:true}, + + + defaultTextHeight : 75, + + maxWidth : 600, + + minWidth : 100, + + minProgressWidth : 250, + + buttonText : { + ok : "OK", + cancel : "Cancel", + yes : "Yes", + no : "No" + } + }; +}(); + + +Ext.Msg = Ext.MessageBox; + +Ext.QuickTips = function(){ + var el, tipBody, tipBodyText, tipTitle, tm, cfg, close, tagEls = {}, esc, removeCls = null, bdLeft, bdRight; + var ce, bd, xy, dd; + var visible = false, disabled = true, inited = false; + var showProc = 1, hideProc = 1, dismissProc = 1, locks = []; + + var onOver = function(e){ + if(disabled){ + return; + } + var t = e.getTarget(); + if(!t || t.nodeType !== 1 || t == document || t == document.body){ + return; + } + if(ce && t == ce.el){ + clearTimeout(hideProc); + return; + } + if(t && tagEls[t.id]){ + tagEls[t.id].el = t; + showProc = show.defer(tm.showDelay, tm, [tagEls[t.id]]); + return; + } + var ttp, et = Ext.fly(t); + var ns = cfg.namespace; + if(tm.interceptTitles && t.title){ + ttp = t.title; + t.qtip = ttp; + t.removeAttribute("title"); + e.preventDefault(); + }else{ + ttp = t.qtip || et.getAttributeNS(ns, cfg.attribute); + } + if(ttp){ + showProc = show.defer(tm.showDelay, tm, [{ + el: t, + text: ttp, + width: et.getAttributeNS(ns, cfg.width), + autoHide: et.getAttributeNS(ns, cfg.hide) != "user", + title: et.getAttributeNS(ns, cfg.title), + cls: et.getAttributeNS(ns, cfg.cls) + }]); + } + }; + + var onOut = function(e){ + clearTimeout(showProc); + var t = e.getTarget(); + if(t && ce && ce.el == t && (tm.autoHide && ce.autoHide !== false)){ + hideProc = setTimeout(hide, tm.hideDelay); + } + }; + + var onMove = function(e){ + if(disabled){ + return; + } + xy = e.getXY(); + xy[1] += 18; + if(tm.trackMouse && ce){ + el.setXY(xy); + } + }; + + var onDown = function(e){ + clearTimeout(showProc); + clearTimeout(hideProc); + if(!e.within(el)){ + if(tm.hideOnClick){ + hide(); + tm.disable(); + tm.enable.defer(100, tm); + } + } + }; + + var getPad = function(){ + return bdLeft.getPadding('l')+bdRight.getPadding('r'); + }; + + var show = function(o){ + if(disabled){ + return; + } + clearTimeout(dismissProc); + ce = o; + if(removeCls){ + el.removeClass(removeCls); + removeCls = null; + } + if(ce.cls){ + el.addClass(ce.cls); + removeCls = ce.cls; + } + if(ce.title){ + tipTitle.update(ce.title); + tipTitle.show(); + }else{ + tipTitle.update(''); + tipTitle.hide(); + } + el.dom.style.width = tm.maxWidth+'px'; + + tipBodyText.update(o.text); + var p = getPad(), w = ce.width; + if(!w){ + var td = tipBodyText.dom; + var aw = Math.max(td.offsetWidth, td.clientWidth, td.scrollWidth); + if(aw > tm.maxWidth){ + w = tm.maxWidth; + }else if(aw < tm.minWidth){ + w = tm.minWidth; + }else{ + w = aw; + } + } + + el.setWidth(parseInt(w, 10) + p); + if(ce.autoHide === false){ + close.setDisplayed(true); + if(dd){ + dd.unlock(); + } + }else{ + close.setDisplayed(false); + if(dd){ + dd.lock(); + } + } + if(xy){ + el.avoidY = xy[1]-18; + el.setXY(xy); + } + if(tm.animate){ + el.setOpacity(.1); + el.setStyle("visibility", "visible"); + el.fadeIn({callback: afterShow}); + }else{ + afterShow(); + } + }; + + var afterShow = function(){ + if(ce){ + el.show(); + esc.enable(); + if(tm.autoDismiss && ce.autoHide !== false){ + dismissProc = setTimeout(hide, tm.autoDismissDelay); + } + } + }; + + var hide = function(noanim){ + clearTimeout(dismissProc); + clearTimeout(hideProc); + ce = null; + if(el.isVisible()){ + esc.disable(); + if(noanim !== true && tm.animate){ + el.fadeOut({callback: afterHide}); + }else{ + afterHide(); + } + } + }; + + var afterHide = function(){ + el.hide(); + if(removeCls){ + el.removeClass(removeCls); + removeCls = null; + } + }; + + return { + + minWidth : 40, + + maxWidth : 300, + + interceptTitles : false, + + trackMouse : false, + + hideOnClick : true, + + showDelay : 500, + + hideDelay : 200, + + autoHide : true, + + autoDismiss : true, + + autoDismissDelay : 5000, + + animate : false, + + + + + + + + init : function(){ + tm = Ext.QuickTips; + cfg = tm.tagConfig; + if(!inited){ + if(!Ext.isReady){ + Ext.onReady(Ext.QuickTips.init, Ext.QuickTips); + return; + } + el = new Ext.Layer({cls:"x-tip", shadow:"drop", shim: true, constrain:true, shadowOffset:4}); + el.fxDefaults = {stopFx: true}; + + el.update('

'); + tipTitle = el.child('h3'); + tipTitle.enableDisplayMode("block"); + tipBody = el.child('div.x-tip-bd'); + tipBodyText = el.child('div.x-tip-bd-inner'); + bdLeft = el.child('div.x-tip-bd-left'); + bdRight = el.child('div.x-tip-bd-right'); + close = el.child('div.x-tip-close'); + close.enableDisplayMode("block"); + close.on("click", hide); + var d = Ext.get(document); + d.on("mousedown", onDown); + d.on("mouseover", onOver); + d.on("mouseout", onOut); + d.on("mousemove", onMove); + esc = d.addKeyListener(27, hide); + esc.disable(); + if(Ext.dd.DD){ + dd = el.initDD("default", null, { + onDrag : function(){ + el.sync(); + } + }); + dd.setHandleElId(tipTitle.id); + dd.lock(); + } + inited = true; + } + this.enable(); + }, + + + register : function(config){ + var cs = config instanceof Array ? config : arguments; + for(var i = 0, len = cs.length; i < len; i++) { + var c = cs[i]; + var target = c.target; + if(target){ + if(target instanceof Array){ + for(var j = 0, jlen = target.length; j < jlen; j++){ + tagEls[target[j]] = c; + } + }else{ + tagEls[typeof target == 'string' ? target : Ext.id(target)] = c; + } + } + } + }, + + + unregister : function(el){ + delete tagEls[Ext.id(el)]; + }, + + + enable : function(){ + if(inited && disabled){ + locks.pop(); + if(locks.length < 1){ + disabled = false; + } + } + }, + + + disable : function(){ + disabled = true; + clearTimeout(showProc); + clearTimeout(hideProc); + clearTimeout(dismissProc); + if(ce){ + hide(true); + } + locks.push(1); + }, + + + isEnabled : function(){ + return !disabled; + }, + + + tagConfig : { + namespace : "ext", + attribute : "qtip", + width : "width", + target : "target", + title : "qtitle", + hide : "hide", + cls : "qclass" + } + }; +}(); + + +Ext.QuickTips.tips = Ext.QuickTips.register; + +Ext.tree.TreePanel = function(el, config){ + Ext.apply(this, config); + Ext.tree.TreePanel.superclass.constructor.call(this); + this.el = Ext.get(el); + this.el.addClass('x-tree'); + + this.id = this.el.id; + this.addEvents({ + + "beforeload" : true, + + "load" : true, + + "textchange" : true, + + "beforeexpand" : true, + + "beforecollapse" : true, + + "expand" : true, + + "disabledchange" : true, + + "collapse" : true, + + "beforeclick":true, + + "checkchange":true, + + "click":true, + + "dblclick":true, + + "contextmenu":true, + + "beforechildrenrendered":true, + + "startdrag" : true, + + "enddrag" : true, + + "dragdrop" : true, + + "beforenodedrop" : true, + + "nodedrop" : true, + + "nodedragover" : true + }); + if(this.singleExpand){ + this.on("beforeexpand", this.restrictExpand, this); + } +}; +Ext.extend(Ext.tree.TreePanel, Ext.data.Tree, { + rootVisible : true, + animate: Ext.enableFx, + lines : true, + enableDD : false, + hlDrop : Ext.enableFx, + + + restrictExpand : function(node){ + var p = node.parentNode; + if(p){ + if(p.expandedChild && p.expandedChild.parentNode == p){ + p.expandedChild.collapse(); + } + p.expandedChild = node; + } + }, + + + setRootNode : function(node){ + Ext.tree.TreePanel.superclass.setRootNode.call(this, node); + if(!this.rootVisible){ + node.ui = new Ext.tree.RootTreeNodeUI(node); + } + return node; + }, + + + getEl : function(){ + return this.el; + }, + + + getLoader : function(){ + return this.loader; + }, + + + expandAll : function(){ + this.root.expand(true); + }, + + + collapseAll : function(){ + this.root.collapse(true); + }, + + + getSelectionModel : function(){ + if(!this.selModel){ + this.selModel = new Ext.tree.DefaultSelectionModel(); + } + return this.selModel; + }, + + + getChecked : function(a, startNode){ + startNode = startNode || this.root; + var r = []; + var f = function(){ + if(this.attributes.checked){ + r.push(!a ? this : (a == 'id' ? this.id : this.attributes[a])); + } + } + startNode.cascade(f); + return r; + }, + + + expandPath : function(path, attr, callback){ + attr = attr || "id"; + var keys = path.split(this.pathSeparator); + var curNode = this.root; + if(curNode.attributes[attr] != keys[1]){ + if(callback){ + callback(false, null); + } + return; + } + var index = 1; + var f = function(){ + if(++index == keys.length){ + if(callback){ + callback(true, curNode); + } + return; + } + var c = curNode.findChild(attr, keys[index]); + if(!c){ + if(callback){ + callback(false, curNode); + } + return; + } + curNode = c; + c.expand(false, false, f); + }; + curNode.expand(false, false, f); + }, + + + selectPath : function(path, attr, callback){ + attr = attr || "id"; + var keys = path.split(this.pathSeparator); + var v = keys.pop(); + if(keys.length > 0){ + var f = function(success, node){ + if(success && node){ + var n = node.findChild(attr, v); + if(n){ + n.select(); + if(callback){ + callback(true, n); + } + }else if(callback){ + callback(false, n); + } + }else{ + if(callback){ + callback(false, n); + } + } + }; + this.expandPath(keys.join(this.pathSeparator), attr, f); + }else{ + this.root.select(); + if(callback){ + callback(true, this.root); + } + } + }, + + getTreeEl : function(){ + return this.el; + }, + + + render : function(){ + this.innerCt = this.el.createChild({tag:"ul", + cls:"x-tree-root-ct " + + (this.lines ? "x-tree-lines" : "x-tree-no-lines")}); + + if(this.containerScroll){ + Ext.dd.ScrollManager.register(this.el); + } + if((this.enableDD || this.enableDrop) && !this.dropZone){ + + this.dropZone = new Ext.tree.TreeDropZone(this, this.dropConfig || { + ddGroup: this.ddGroup || "TreeDD", appendOnly: this.ddAppendOnly === true + }); + } + if((this.enableDD || this.enableDrag) && !this.dragZone){ + + this.dragZone = new Ext.tree.TreeDragZone(this, this.dragConfig || { + ddGroup: this.ddGroup || "TreeDD", + scroll: this.ddScroll + }); + } + this.getSelectionModel().init(this); + this.root.render(); + if(!this.rootVisible){ + this.root.renderChildren(); + } + return this; + } +}); + +Ext.tree.DefaultSelectionModel = function(){ + this.selNode = null; + + this.addEvents({ + + "selectionchange" : true, + + + "beforeselect" : true + }); +}; + +Ext.extend(Ext.tree.DefaultSelectionModel, Ext.util.Observable, { + init : function(tree){ + this.tree = tree; + tree.getTreeEl().on("keydown", this.onKeyDown, this); + tree.on("click", this.onNodeClick, this); + }, + + onNodeClick : function(node, e){ + this.select(node); + }, + + + select : function(node){ + var last = this.selNode; + if(last != node && this.fireEvent('beforeselect', this, node, last) !== false){ + if(last){ + last.ui.onSelectedChange(false); + } + this.selNode = node; + node.ui.onSelectedChange(true); + this.fireEvent("selectionchange", this, node, last); + } + return node; + }, + + + unselect : function(node){ + if(this.selNode == node){ + this.clearSelections(); + } + }, + + + clearSelections : function(){ + var n = this.selNode; + if(n){ + n.ui.onSelectedChange(false); + this.selNode = null; + this.fireEvent("selectionchange", this, null); + } + return n; + }, + + + getSelectedNode : function(){ + return this.selNode; + }, + + + isSelected : function(node){ + return this.selNode == node; + }, + + + selectPrevious : function(){ + var s = this.selNode || this.lastSelNode; + if(!s){ + return null; + } + var ps = s.previousSibling; + if(ps){ + if(!ps.isExpanded() || ps.childNodes.length < 1){ + return this.select(ps); + } else{ + var lc = ps.lastChild; + while(lc && lc.isExpanded() && lc.childNodes.length > 0){ + lc = lc.lastChild; + } + return this.select(lc); + } + } else if(s.parentNode && (this.tree.rootVisible || !s.parentNode.isRoot)){ + return this.select(s.parentNode); + } + return null; + }, + + + selectNext : function(){ + var s = this.selNode || this.lastSelNode; + if(!s){ + return null; + } + if(s.firstChild && s.isExpanded()){ + return this.select(s.firstChild); + }else if(s.nextSibling){ + return this.select(s.nextSibling); + }else if(s.parentNode){ + var newS = null; + s.parentNode.bubble(function(){ + if(this.nextSibling){ + newS = this.getOwnerTree().selModel.select(this.nextSibling); + return false; + } + }); + return newS; + } + return null; + }, + + onKeyDown : function(e){ + var s = this.selNode || this.lastSelNode; + + var sm = this; + if(!s){ + return; + } + var k = e.getKey(); + switch(k){ + case e.DOWN: + e.stopEvent(); + this.selectNext(); + break; + case e.UP: + e.stopEvent(); + this.selectPrevious(); + break; + case e.RIGHT: + e.preventDefault(); + if(s.hasChildNodes()){ + if(!s.isExpanded()){ + s.expand(); + }else if(s.firstChild){ + this.select(s.firstChild, e); + } + } + break; + case e.LEFT: + e.preventDefault(); + if(s.hasChildNodes() && s.isExpanded()){ + s.collapse(); + }else if(s.parentNode && (this.tree.rootVisible || s.parentNode != this.tree.getRootNode())){ + this.select(s.parentNode, e); + } + break; + }; + } +}); + + +Ext.tree.MultiSelectionModel = function(){ + this.selNodes = []; + this.selMap = {}; + this.addEvents({ + + "selectionchange" : true + }); +}; + +Ext.extend(Ext.tree.MultiSelectionModel, Ext.util.Observable, { + init : function(tree){ + this.tree = tree; + tree.getTreeEl().on("keydown", this.onKeyDown, this); + tree.on("click", this.onNodeClick, this); + }, + + onNodeClick : function(node, e){ + this.select(node, e, e.ctrlKey); + }, + + + select : function(node, e, keepExisting){ + if(keepExisting !== true){ + this.clearSelections(true); + } + if(this.isSelected(node)){ + this.lastSelNode = node; + return node; + } + this.selNodes.push(node); + this.selMap[node.id] = node; + this.lastSelNode = node; + node.ui.onSelectedChange(true); + this.fireEvent("selectionchange", this, this.selNodes); + return node; + }, + + + unselect : function(node){ + if(this.selMap[node.id]){ + node.ui.onSelectedChange(false); + var sn = this.selNodes; + var index = -1; + if(sn.indexOf){ + index = sn.indexOf(node); + }else{ + for(var i = 0, len = sn.length; i < len; i++){ + if(sn[i] == node){ + index = i; + break; + } + } + } + if(index != -1){ + this.selNodes.splice(index, 1); + } + delete this.selMap[node.id]; + this.fireEvent("selectionchange", this, this.selNodes); + } + }, + + + clearSelections : function(suppressEvent){ + var sn = this.selNodes; + if(sn.length > 0){ + for(var i = 0, len = sn.length; i < len; i++){ + sn[i].ui.onSelectedChange(false); + } + this.selNodes = []; + this.selMap = {}; + if(suppressEvent !== true){ + this.fireEvent("selectionchange", this, this.selNodes); + } + } + }, + + + isSelected : function(node){ + return this.selMap[node.id] ? true : false; + }, + + + getSelectedNodes : function(){ + return this.selNodes; + }, + + onKeyDown : Ext.tree.DefaultSelectionModel.prototype.onKeyDown, + + selectNext : Ext.tree.DefaultSelectionModel.prototype.selectNext, + + selectPrevious : Ext.tree.DefaultSelectionModel.prototype.selectPrevious +}); + +Ext.tree.TreeNode = function(attributes){ + attributes = attributes || {}; + if(typeof attributes == "string"){ + attributes = {text: attributes}; + } + this.childrenRendered = false; + this.rendered = false; + Ext.tree.TreeNode.superclass.constructor.call(this, attributes); + this.expanded = attributes.expanded === true; + this.isTarget = attributes.isTarget !== false; + this.draggable = attributes.draggable !== false && attributes.allowDrag !== false; + this.allowChildren = attributes.allowChildren !== false && attributes.allowDrop !== false; + + + this.text = attributes.text; + + this.disabled = attributes.disabled === true; + + this.addEvents({ + + "textchange" : true, + + "beforeexpand" : true, + + "beforecollapse" : true, + + "expand" : true, + + "disabledchange" : true, + + "collapse" : true, + + "beforeclick":true, + + "checkchange":true, + + "click":true, + + "dblclick":true, + + "contextmenu":true, + + "beforechildrenrendered":true + }); + + var uiClass = this.attributes.uiProvider || Ext.tree.TreeNodeUI; + + + this.ui = new uiClass(this); +}; +Ext.extend(Ext.tree.TreeNode, Ext.data.Node, { + preventHScroll: true, + + isExpanded : function(){ + return this.expanded; + }, + + + getUI : function(){ + return this.ui; + }, + + + setFirstChild : function(node){ + var of = this.firstChild; + Ext.tree.TreeNode.superclass.setFirstChild.call(this, node); + if(this.childrenRendered && of && node != of){ + of.renderIndent(true, true); + } + if(this.rendered){ + this.renderIndent(true, true); + } + }, + + + setLastChild : function(node){ + var ol = this.lastChild; + Ext.tree.TreeNode.superclass.setLastChild.call(this, node); + if(this.childrenRendered && ol && node != ol){ + ol.renderIndent(true, true); + } + if(this.rendered){ + this.renderIndent(true, true); + } + }, + + + + appendChild : function(){ + var node = Ext.tree.TreeNode.superclass.appendChild.apply(this, arguments); + if(node && this.childrenRendered){ + node.render(); + } + this.ui.updateExpandIcon(); + return node; + }, + + + removeChild : function(node){ + this.ownerTree.getSelectionModel().unselect(node); + Ext.tree.TreeNode.superclass.removeChild.apply(this, arguments); + + if(this.childrenRendered){ + node.ui.remove(); + } + if(this.childNodes.length < 1){ + this.collapse(false, false); + }else{ + this.ui.updateExpandIcon(); + } + if(!this.firstChild) { + this.childrenRendered = false; + } + return node; + }, + + + insertBefore : function(node, refNode){ + var newNode = Ext.tree.TreeNode.superclass.insertBefore.apply(this, arguments); + if(newNode && refNode && this.childrenRendered){ + node.render(); + } + this.ui.updateExpandIcon(); + return newNode; + }, + + + setText : function(text){ + var oldText = this.text; + this.text = text; + this.attributes.text = text; + if(this.rendered){ + this.ui.onTextChange(this, text, oldText); + } + this.fireEvent("textchange", this, text, oldText); + }, + + + select : function(){ + this.getOwnerTree().getSelectionModel().select(this); + }, + + + unselect : function(){ + this.getOwnerTree().getSelectionModel().unselect(this); + }, + + + isSelected : function(){ + return this.getOwnerTree().getSelectionModel().isSelected(this); + }, + + + expand : function(deep, anim, callback){ + if(!this.expanded){ + if(this.fireEvent("beforeexpand", this, deep, anim) === false){ + return; + } + if(!this.childrenRendered){ + this.renderChildren(); + } + this.expanded = true; + if(!this.isHiddenRoot() && (this.getOwnerTree().animate && anim !== false) || anim){ + this.ui.animExpand(function(){ + this.fireEvent("expand", this); + if(typeof callback == "function"){ + callback(this); + } + if(deep === true){ + this.expandChildNodes(true); + } + }.createDelegate(this)); + return; + }else{ + this.ui.expand(); + this.fireEvent("expand", this); + if(typeof callback == "function"){ + callback(this); + } + } + }else{ + if(typeof callback == "function"){ + callback(this); + } + } + if(deep === true){ + this.expandChildNodes(true); + } + }, + + isHiddenRoot : function(){ + return this.isRoot && !this.getOwnerTree().rootVisible; + }, + + + collapse : function(deep, anim){ + if(this.expanded && !this.isHiddenRoot()){ + if(this.fireEvent("beforecollapse", this, deep, anim) === false){ + return; + } + this.expanded = false; + if((this.getOwnerTree().animate && anim !== false) || anim){ + this.ui.animCollapse(function(){ + this.fireEvent("collapse", this); + if(deep === true){ + this.collapseChildNodes(true); + } + }.createDelegate(this)); + return; + }else{ + this.ui.collapse(); + this.fireEvent("collapse", this); + } + } + if(deep === true){ + var cs = this.childNodes; + for(var i = 0, len = cs.length; i < len; i++) { + cs[i].collapse(true, false); + } + } + }, + + + delayedExpand : function(delay){ + if(!this.expandProcId){ + this.expandProcId = this.expand.defer(delay, this); + } + }, + + + cancelExpand : function(){ + if(this.expandProcId){ + clearTimeout(this.expandProcId); + } + this.expandProcId = false; + }, + + + toggle : function(){ + if(this.expanded){ + this.collapse(); + }else{ + this.expand(); + } + }, + + + ensureVisible : function(callback){ + var tree = this.getOwnerTree(); + tree.expandPath(this.parentNode.getPath(), false, function(){ + tree.getTreeEl().scrollChildIntoView(this.ui.anchor); + Ext.callback(callback); + }.createDelegate(this)); + }, + + + expandChildNodes : function(deep){ + var cs = this.childNodes; + for(var i = 0, len = cs.length; i < len; i++) { + cs[i].expand(deep); + } + }, + + + collapseChildNodes : function(deep){ + var cs = this.childNodes; + for(var i = 0, len = cs.length; i < len; i++) { + cs[i].collapse(deep); + } + }, + + + disable : function(){ + this.disabled = true; + this.unselect(); + if(this.rendered && this.ui.onDisableChange){ + this.ui.onDisableChange(this, true); + } + this.fireEvent("disabledchange", this, true); + }, + + + enable : function(){ + this.disabled = false; + if(this.rendered && this.ui.onDisableChange){ + this.ui.onDisableChange(this, false); + } + this.fireEvent("disabledchange", this, false); + }, + + + renderChildren : function(suppressEvent){ + if(suppressEvent !== false){ + this.fireEvent("beforechildrenrendered", this); + } + var cs = this.childNodes; + for(var i = 0, len = cs.length; i < len; i++){ + cs[i].render(true); + } + this.childrenRendered = true; + }, + + + sort : function(fn, scope){ + Ext.tree.TreeNode.superclass.sort.apply(this, arguments); + if(this.childrenRendered){ + var cs = this.childNodes; + for(var i = 0, len = cs.length; i < len; i++){ + cs[i].render(true); + } + } + }, + + + render : function(bulkRender){ + this.ui.render(bulkRender); + if(!this.rendered){ + this.rendered = true; + if(this.expanded){ + this.expanded = false; + this.expand(false, false); + } + } + }, + + + renderIndent : function(deep, refresh){ + if(refresh){ + this.ui.childIndent = null; + } + this.ui.renderIndent(); + if(deep === true && this.childrenRendered){ + var cs = this.childNodes; + for(var i = 0, len = cs.length; i < len; i++){ + cs[i].renderIndent(true, refresh); + } + } + } +}); + + Ext.tree.AsyncTreeNode = function(config){ + this.loaded = false; + this.loading = false; + Ext.tree.AsyncTreeNode.superclass.constructor.apply(this, arguments); + + this.addEvents({'beforeload':true, 'load': true}); + + +}; +Ext.extend(Ext.tree.AsyncTreeNode, Ext.tree.TreeNode, { + expand : function(deep, anim, callback){ + if(this.loading){ + var timer; + var f = function(){ + if(!this.loading){ + clearInterval(timer); + this.expand(deep, anim, callback); + } + }.createDelegate(this); + timer = setInterval(f, 200); + return; + } + if(!this.loaded){ + if(this.fireEvent("beforeload", this) === false){ + return; + } + this.loading = true; + this.ui.beforeLoad(this); + var loader = this.loader || this.attributes.loader || this.getOwnerTree().getLoader(); + if(loader){ + loader.load(this, this.loadComplete.createDelegate(this, [deep, anim, callback])); + return; + } + } + Ext.tree.AsyncTreeNode.superclass.expand.call(this, deep, anim, callback); + }, + + + isLoading : function(){ + return this.loading; + }, + + loadComplete : function(deep, anim, callback){ + this.loading = false; + this.loaded = true; + this.ui.afterLoad(this); + this.fireEvent("load", this); + this.expand(deep, anim, callback); + }, + + + isLoaded : function(){ + return this.loaded; + }, + + hasChildNodes : function(){ + if(!this.isLeaf() && !this.loaded){ + return true; + }else{ + return Ext.tree.AsyncTreeNode.superclass.hasChildNodes.call(this); + } + }, + + + reload : function(callback){ + this.collapse(false, false); + while(this.firstChild){ + this.removeChild(this.firstChild); + } + this.childrenRendered = false; + this.loaded = false; + if(this.isHiddenRoot()){ + this.expanded = false; + } + this.expand(false, false, callback); + } +}); + +Ext.tree.TreeNodeUI = function(node){ + this.node = node; + this.rendered = false; + this.animating = false; + this.emptyIcon = Ext.BLANK_IMAGE_URL; +}; + +Ext.tree.TreeNodeUI.prototype = { + removeChild : function(node){ + if(this.rendered){ + this.ctNode.removeChild(node.ui.getEl()); + } + }, + + beforeLoad : function(){ + this.addClass("x-tree-node-loading"); + }, + + afterLoad : function(){ + this.removeClass("x-tree-node-loading"); + }, + + onTextChange : function(node, text, oldText){ + if(this.rendered){ + this.textNode.innerHTML = text; + } + }, + + onDisableChange : function(node, state){ + this.disabled = state; + if(state){ + this.addClass("x-tree-node-disabled"); + }else{ + this.removeClass("x-tree-node-disabled"); + } + }, + + onSelectedChange : function(state){ + if(state){ + this.focus(); + this.addClass("x-tree-selected"); + }else{ + + this.removeClass("x-tree-selected"); + } + }, + + onMove : function(tree, node, oldParent, newParent, index, refNode){ + this.childIndent = null; + if(this.rendered){ + var targetNode = newParent.ui.getContainer(); + if(!targetNode){ + this.holder = document.createElement("div"); + this.holder.appendChild(this.wrap); + return; + } + var insertBefore = refNode ? refNode.ui.getEl() : null; + if(insertBefore){ + targetNode.insertBefore(this.wrap, insertBefore); + }else{ + targetNode.appendChild(this.wrap); + } + this.node.renderIndent(true); + } + }, + + addClass : function(cls){ + if(this.elNode){ + Ext.fly(this.elNode).addClass(cls); + } + }, + + removeClass : function(cls){ + if(this.elNode){ + Ext.fly(this.elNode).removeClass(cls); + } + }, + + remove : function(){ + if(this.rendered){ + this.holder = document.createElement("div"); + this.holder.appendChild(this.wrap); + } + }, + + fireEvent : function(){ + return this.node.fireEvent.apply(this.node, arguments); + }, + + initEvents : function(){ + this.node.on("move", this.onMove, this); + var E = Ext.EventManager; + var a = this.anchor; + + var el = Ext.fly(a, '_treeui'); + + if(Ext.isOpera){ + el.setStyle("text-decoration", "none"); + } + + el.on("click", this.onClick, this); + el.on("dblclick", this.onDblClick, this); + + if(this.checkbox){ + Ext.EventManager.on(this.checkbox, + Ext.isIE ? 'click' : 'change', this.onCheckChange, this); + } + + el.on("contextmenu", this.onContextMenu, this); + + var icon = Ext.fly(this.iconNode); + icon.on("click", this.onClick, this); + icon.on("dblclick", this.onDblClick, this); + icon.on("contextmenu", this.onContextMenu, this); + E.on(this.ecNode, "click", this.ecClick, this, true); + + if(this.node.disabled){ + this.addClass("x-tree-node-disabled"); + } + if(this.node.hidden){ + this.addClass("x-tree-node-disabled"); + } + var ot = this.node.getOwnerTree(); + var dd = ot.enableDD || ot.enableDrag || ot.enableDrop; + if(dd && (!this.node.isRoot || ot.rootVisible)){ + Ext.dd.Registry.register(this.elNode, { + node: this.node, + handles: this.getDDHandles(), + isHandle: false + }); + } + }, + + getDDHandles : function(){ + return [this.iconNode, this.textNode]; + }, + + hide : function(){ + if(this.rendered){ + this.wrap.style.display = "none"; + } + }, + + show : function(){ + if(this.rendered){ + this.wrap.style.display = ""; + } + }, + + onContextMenu : function(e){ + if (this.node.hasListener("contextmenu") || this.node.getOwnerTree().hasListener("contextmenu")) { + e.preventDefault(); + this.focus(); + this.fireEvent("contextmenu", this.node, e); + } + }, + + onClick : function(e){ + if(this.dropping){ + e.stopEvent(); + return; + } + if(this.fireEvent("beforeclick", this.node, e) !== false){ + if(!this.disabled && this.node.attributes.href){ + this.fireEvent("click", this.node, e); + return; + } + e.preventDefault(); + if(this.disabled){ + return; + } + + if(this.node.attributes.singleClickExpand && !this.animating && this.node.hasChildNodes()){ + this.node.toggle(); + } + + this.fireEvent("click", this.node, e); + }else{ + e.stopEvent(); + } + }, + + onDblClick : function(e){ + e.preventDefault(); + if(this.disabled){ + return; + } + if(this.checkbox){ + this.toggleCheck(); + } + if(!this.animating && this.node.hasChildNodes()){ + this.node.toggle(); + } + this.fireEvent("dblclick", this.node, e); + }, + + onCheckChange : function(){ + var checked = this.checkbox.checked; + this.node.attributes.checked = checked; + this.fireEvent('checkchange', this.node, checked); + }, + + ecClick : function(e){ + if(!this.animating && this.node.hasChildNodes()){ + this.node.toggle(); + } + }, + + startDrop : function(){ + this.dropping = true; + }, + + + endDrop : function(){ + setTimeout(function(){ + this.dropping = false; + }.createDelegate(this), 50); + }, + + expand : function(){ + this.updateExpandIcon(); + this.ctNode.style.display = ""; + }, + + focus : function(){ + if(!this.node.preventHScroll){ + try{this.anchor.focus(); + }catch(e){} + }else if(!Ext.isIE){ + try{ + var noscroll = this.node.getOwnerTree().getTreeEl().dom; + var l = noscroll.scrollLeft; + this.anchor.focus(); + noscroll.scrollLeft = l; + }catch(e){} + } + }, + + toggleCheck : function(value){ + var cb = this.checkbox; + if(cb){ + cb.checked = (value === undefined ? !cb.checked : value); + } + }, + + blur : function(){ + try{ + this.anchor.blur(); + }catch(e){} + }, + + animExpand : function(callback){ + var ct = Ext.get(this.ctNode); + ct.stopFx(); + if(!this.node.hasChildNodes()){ + this.updateExpandIcon(); + this.ctNode.style.display = ""; + Ext.callback(callback); + return; + } + this.animating = true; + this.updateExpandIcon(); + + ct.slideIn('t', { + callback : function(){ + this.animating = false; + Ext.callback(callback); + }, + scope: this, + duration: this.node.ownerTree.duration || .25 + }); + }, + + highlight : function(){ + var tree = this.node.getOwnerTree(); + Ext.fly(this.wrap).highlight( + tree.hlColor || "C3DAF9", + {endColor: tree.hlBaseColor} + ); + }, + + collapse : function(){ + this.updateExpandIcon(); + this.ctNode.style.display = "none"; + }, + + animCollapse : function(callback){ + var ct = Ext.get(this.ctNode); + ct.enableDisplayMode('block'); + ct.stopFx(); + + this.animating = true; + this.updateExpandIcon(); + + ct.slideOut('t', { + callback : function(){ + this.animating = false; + Ext.callback(callback); + }, + scope: this, + duration: this.node.ownerTree.duration || .25 + }); + }, + + getContainer : function(){ + return this.ctNode; + }, + + getEl : function(){ + return this.wrap; + }, + + appendDDGhost : function(ghostNode){ + ghostNode.appendChild(this.elNode.cloneNode(true)); + }, + + getDDRepairXY : function(){ + return Ext.lib.Dom.getXY(this.iconNode); + }, + + onRender : function(){ + this.render(); + }, + + render : function(bulkRender){ + var n = this.node, a = n.attributes; + var targetNode = n.parentNode ? + n.parentNode.ui.getContainer() : n.ownerTree.innerCt.dom; + + if(!this.rendered){ + this.rendered = true; + + this.renderElements(n, a, targetNode, bulkRender); + + if(a.qtip){ + if(this.textNode.setAttributeNS){ + this.textNode.setAttributeNS("ext", "qtip", a.qtip); + if(a.qtipTitle){ + this.textNode.setAttributeNS("ext", "qtitle", a.qtipTitle); + } + }else{ + this.textNode.setAttribute("ext:qtip", a.qtip); + if(a.qtipTitle){ + this.textNode.setAttribute("ext:qtitle", a.qtipTitle); + } + } + }else if(a.qtipCfg){ + a.qtipCfg.target = Ext.id(this.textNode); + Ext.QuickTips.register(a.qtipCfg); + } + this.initEvents(); + if(!this.node.expanded){ + this.updateExpandIcon(); + } + }else{ + if(bulkRender === true) { + targetNode.appendChild(this.wrap); + } + } + }, + + renderElements : function(n, a, targetNode, bulkRender){ + + this.indentMarkup = n.parentNode ? n.parentNode.ui.getChildIndent() : ''; + + var cb = typeof a.checked == 'boolean'; + var href = a.href ? a.href : Ext.isGecko ? "" : "#"; + var buf = ['
  • ', + '',this.indentMarkup,"", + '', + '', + cb ? ('' : ' />')) : '', + '',n.text,"
    ", + '', + "
  • "]; + + if(bulkRender !== true && n.nextSibling && n.nextSibling.ui.getEl()){ + this.wrap = Ext.DomHelper.insertHtml("beforeBegin", + n.nextSibling.ui.getEl(), buf.join("")); + }else{ + this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf.join("")); + } + + this.elNode = this.wrap.childNodes[0]; + this.ctNode = this.wrap.childNodes[1]; + var cs = this.elNode.childNodes; + this.indentNode = cs[0]; + this.ecNode = cs[1]; + this.iconNode = cs[2]; + var index = 3; + if(cb){ + this.checkbox = cs[3]; + index++; + } + this.anchor = cs[index]; + this.textNode = cs[index].firstChild; + }, + + getAnchor : function(){ + return this.anchor; + }, + + getTextEl : function(){ + return this.textNode; + }, + + getIconEl : function(){ + return this.iconNode; + }, + + isChecked : function(){ + return this.checkbox ? this.checkbox.checked : false; + }, + + updateExpandIcon : function(){ + if(this.rendered){ + var n = this.node, c1, c2; + var cls = n.isLast() ? "x-tree-elbow-end" : "x-tree-elbow"; + var hasChild = n.hasChildNodes(); + if(hasChild){ + if(n.expanded){ + cls += "-minus"; + c1 = "x-tree-node-collapsed"; + c2 = "x-tree-node-expanded"; + }else{ + cls += "-plus"; + c1 = "x-tree-node-expanded"; + c2 = "x-tree-node-collapsed"; + } + if(this.wasLeaf){ + this.removeClass("x-tree-node-leaf"); + this.wasLeaf = false; + } + if(this.c1 != c1 || this.c2 != c2){ + Ext.fly(this.elNode).replaceClass(c1, c2); + this.c1 = c1; this.c2 = c2; + } + }else{ + if(!this.wasLeaf){ + Ext.fly(this.elNode).replaceClass("x-tree-node-expanded", "x-tree-node-leaf"); + delete this.c1; + delete this.c2; + this.wasLeaf = true; + } + } + var ecc = "x-tree-ec-icon "+cls; + if(this.ecc != ecc){ + this.ecNode.className = ecc; + this.ecc = ecc; + } + } + }, + + getChildIndent : function(){ + if(!this.childIndent){ + var buf = []; + var p = this.node; + while(p){ + if(!p.isRoot || (p.isRoot && p.ownerTree.rootVisible)){ + if(!p.isLast()) { + buf.unshift(''); + } else { + buf.unshift(''); + } + } + p = p.parentNode; + } + this.childIndent = buf.join(""); + } + return this.childIndent; + }, + + renderIndent : function(){ + if(this.rendered){ + var indent = ""; + var p = this.node.parentNode; + if(p){ + indent = p.ui.getChildIndent(); + } + if(this.indentMarkup != indent){ + this.indentNode.innerHTML = indent; + this.indentMarkup = indent; + } + this.updateExpandIcon(); + } + } +}; + +Ext.tree.RootTreeNodeUI = function(){ + Ext.tree.RootTreeNodeUI.superclass.constructor.apply(this, arguments); +}; +Ext.extend(Ext.tree.RootTreeNodeUI, Ext.tree.TreeNodeUI, { + render : function(){ + if(!this.rendered){ + var targetNode = this.node.ownerTree.innerCt.dom; + this.node.expanded = true; + targetNode.innerHTML = '
    '; + this.wrap = this.ctNode = targetNode.firstChild; + } + }, + collapse : function(){ + }, + expand : function(){ + } +}); + +Ext.tree.TreeLoader = function(config){ + this.baseParams = {}; + this.requestMethod = "POST"; + Ext.apply(this, config); + + this.addEvents({ + + "beforeload" : true, + + "load" : true, + + "loadexception" : true + }); + + Ext.tree.TreeLoader.superclass.constructor.call(this); +}; + +Ext.extend(Ext.tree.TreeLoader, Ext.util.Observable, { + + + + + uiProviders : {}, + + + clearOnLoad : true, + + + load : function(node, callback){ + if(this.clearOnLoad){ + while(node.firstChild){ + node.removeChild(node.firstChild); + } + } + if(node.attributes.children){ + var cs = node.attributes.children; + for(var i = 0, len = cs.length; i < len; i++){ + node.appendChild(this.createNode(cs[i])); + } + if(typeof callback == "function"){ + callback(); + } + }else if(this.dataUrl){ + this.requestData(node, callback); + } + }, + + getParams: function(node){ + var buf = [], bp = this.baseParams; + for(var key in bp){ + if(typeof bp[key] != "function"){ + buf.push(encodeURIComponent(key), "=", encodeURIComponent(bp[key]), "&"); + } + } + buf.push("node=", encodeURIComponent(node.id)); + return buf.join(""); + }, + + requestData : function(node, callback){ + if(this.fireEvent("beforeload", this, node, callback) !== false){ + this.transId = Ext.Ajax.request({ + method:this.requestMethod, + url: this.dataUrl||this.url, + success: this.handleResponse, + failure: this.handleFailure, + scope: this, + argument: {callback: callback, node: node}, + params: this.getParams(node) + }); + }else{ + + + if(typeof callback == "function"){ + callback(); + } + } + }, + + isLoading : function(){ + return this.transId ? true : false; + }, + + abort : function(){ + if(this.isLoading()){ + Ext.Ajax.abort(this.transId); + } + }, + + + createNode : function(attr){ + + if(this.baseAttrs){ + Ext.applyIf(attr, this.baseAttrs); + } + if(this.applyLoader !== false){ + attr.loader = this; + } + if(typeof attr.uiProvider == 'string'){ + attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider); + } + return(attr.leaf ? + new Ext.tree.TreeNode(attr) : + new Ext.tree.AsyncTreeNode(attr)); + }, + + processResponse : function(response, node, callback){ + var json = response.responseText; + try { + var o = eval("("+json+")"); + for(var i = 0, len = o.length; i < len; i++){ + var n = this.createNode(o[i]); + if(n){ + node.appendChild(n); + } + } + if(typeof callback == "function"){ + callback(this, node); + } + }catch(e){ + this.handleFailure(response); + } + }, + + handleResponse : function(response){ + this.transId = false; + var a = response.argument; + this.processResponse(response, a.node, a.callback); + this.fireEvent("load", this, a.node, response); + }, + + handleFailure : function(response){ + this.transId = false; + var a = response.argument; + this.fireEvent("loadexception", this, a.node, response); + if(typeof a.callback == "function"){ + a.callback(this, a.node); + } + } +}); + +Ext.tree.TreeFilter = function(tree, config){ + this.tree = tree; + this.filtered = {}; + Ext.apply(this, config); +}; + +Ext.tree.TreeFilter.prototype = { + clearBlank:false, + reverse:false, + autoClear:false, + remove:false, + + + filter : function(value, attr, startNode){ + attr = attr || "text"; + var f; + if(typeof value == "string"){ + var vlen = value.length; + + if(vlen == 0 && this.clearBlank){ + this.clear(); + return; + } + value = value.toLowerCase(); + f = function(n){ + return n.attributes[attr].substr(0, vlen).toLowerCase() == value; + }; + }else if(value.exec){ + f = function(n){ + return value.test(n.attributes[attr]); + }; + }else{ + throw 'Illegal filter type, must be string or regex'; + } + this.filterBy(f, null, startNode); + }, + + + filterBy : function(fn, scope, startNode){ + startNode = startNode || this.tree.root; + if(this.autoClear){ + this.clear(); + } + var af = this.filtered, rv = this.reverse; + var f = function(n){ + if(n == startNode){ + return true; + } + if(af[n.id]){ + return false; + } + var m = fn.call(scope || n, n); + if(!m || rv){ + af[n.id] = n; + n.ui.hide(); + return false; + } + return true; + }; + startNode.cascade(f); + if(this.remove){ + for(var id in af){ + if(typeof id != "function"){ + var n = af[id]; + if(n && n.parentNode){ + n.parentNode.removeChild(n); + } + } + } + } + }, + + + clear : function(){ + var t = this.tree; + var af = this.filtered; + for(var id in af){ + if(typeof id != "function"){ + var n = af[id]; + if(n){ + n.ui.show(); + } + } + } + this.filtered = {}; + } +}; + + +Ext.tree.TreeSorter = function(tree, config){ + Ext.apply(this, config); + tree.on("beforechildrenrendered", this.doSort, this); + tree.on("append", this.updateSort, this); + tree.on("insert", this.updateSort, this); + + var dsc = this.dir && this.dir.toLowerCase() == "desc"; + var p = this.property || "text"; + var sortType = this.sortType; + var fs = this.folderSort; + var cs = this.caseSensitive === true; + var leafAttr = this.leafAttr || 'leaf'; + + this.sortFn = function(n1, n2){ + if(fs){ + if(n1.attributes[leafAttr] && !n2.attributes[leafAttr]){ + return 1; + } + if(!n1.attributes[leafAttr] && n2.attributes[leafAttr]){ + return -1; + } + } + var v1 = sortType ? sortType(n1) : (cs ? n1.attributes[p] : n1.attributes[p].toUpperCase()); + var v2 = sortType ? sortType(n2) : (cs ? n2.attributes[p] : n2.attributes[p].toUpperCase()); + if(v1 < v2){ + return dsc ? +1 : -1; + }else if(v1 > v2){ + return dsc ? -1 : +1; + }else{ + return 0; + } + }; +}; + +Ext.tree.TreeSorter.prototype = { + doSort : function(node){ + node.sort(this.sortFn); + }, + + compareNodes : function(n1, n2){ + return (n1.text.toUpperCase() > n2.text.toUpperCase() ? 1 : -1); + }, + + updateSort : function(tree, node){ + if(node.childrenRendered){ + this.doSort.defer(1, this, [node]); + } + } +}; +if(Ext.dd.DropZone){ + +Ext.tree.TreeDropZone = function(tree, config){ + this.allowParentInsert = false; + this.allowContainerDrop = false; + this.appendOnly = false; + Ext.tree.TreeDropZone.superclass.constructor.call(this, tree.innerCt, config); + this.tree = tree; + this.lastInsertClass = "x-tree-no-status"; + this.dragOverData = {}; +}; + +Ext.extend(Ext.tree.TreeDropZone, Ext.dd.DropZone, { + ddGroup : "TreeDD", + + expandDelay : 1000, + + expandNode : function(node){ + if(node.hasChildNodes() && !node.isExpanded()){ + node.expand(false, null, this.triggerCacheRefresh.createDelegate(this)); + } + }, + + queueExpand : function(node){ + this.expandProcId = this.expandNode.defer(this.expandDelay, this, [node]); + }, + + cancelExpand : function(){ + if(this.expandProcId){ + clearTimeout(this.expandProcId); + this.expandProcId = false; + } + }, + + isValidDropPoint : function(n, pt, dd, e, data){ + if(!n || !data){ return false; } + var targetNode = n.node; + var dropNode = data.node; + + if(!(targetNode && targetNode.isTarget && pt)){ + return false; + } + if(pt == "append" && targetNode.allowChildren === false){ + return false; + } + if((pt == "above" || pt == "below") && (targetNode.parentNode && targetNode.parentNode.allowChildren === false)){ + return false; + } + if(dropNode && (targetNode == dropNode || dropNode.contains(targetNode))){ + return false; + } + + var overEvent = this.dragOverData; + overEvent.tree = this.tree; + overEvent.target = targetNode; + overEvent.data = data; + overEvent.point = pt; + overEvent.source = dd; + overEvent.rawEvent = e; + overEvent.dropNode = dropNode; + overEvent.cancel = false; + var result = this.tree.fireEvent("nodedragover", overEvent); + return overEvent.cancel === false && result !== false; + }, + + getDropPoint : function(e, n, dd){ + var tn = n.node; + if(tn.isRoot){ + return tn.allowChildren !== false ? "append" : false; + } + var dragEl = n.ddel; + var t = Ext.lib.Dom.getY(dragEl), b = t + dragEl.offsetHeight; + var y = Ext.lib.Event.getPageY(e); + var noAppend = tn.allowChildren === false || tn.isLeaf(); + if(this.appendOnly || tn.parentNode.allowChildren === false){ + return noAppend ? false : "append"; + } + var noBelow = false; + if(!this.allowParentInsert){ + noBelow = tn.hasChildNodes() && tn.isExpanded(); + } + var q = (b - t) / (noAppend ? 2 : 3); + if(y >= t && y < (t + q)){ + return "above"; + }else if(!noBelow && (noAppend || y >= b-q && y <= b)){ + return "below"; + }else{ + return "append"; + } + }, + + onNodeEnter : function(n, dd, e, data){ + this.cancelExpand(); + }, + + onNodeOver : function(n, dd, e, data){ + var pt = this.getDropPoint(e, n, dd); + var node = n.node; + + + if(!this.expandProcId && pt == "append" && node.hasChildNodes() && !n.node.isExpanded()){ + this.queueExpand(node); + }else if(pt != "append"){ + this.cancelExpand(); + } + + + var returnCls = this.dropNotAllowed; + if(this.isValidDropPoint(n, pt, dd, e, data)){ + if(pt){ + var el = n.ddel; + var cls; + if(pt == "above"){ + returnCls = n.node.isFirst() ? "x-tree-drop-ok-above" : "x-tree-drop-ok-between"; + cls = "x-tree-drag-insert-above"; + }else if(pt == "below"){ + returnCls = n.node.isLast() ? "x-tree-drop-ok-below" : "x-tree-drop-ok-between"; + cls = "x-tree-drag-insert-below"; + }else{ + returnCls = "x-tree-drop-ok-append"; + cls = "x-tree-drag-append"; + } + if(this.lastInsertClass != cls){ + Ext.fly(el).replaceClass(this.lastInsertClass, cls); + this.lastInsertClass = cls; + } + } + } + return returnCls; + }, + + onNodeOut : function(n, dd, e, data){ + this.cancelExpand(); + this.removeDropIndicators(n); + }, + + onNodeDrop : function(n, dd, e, data){ + var point = this.getDropPoint(e, n, dd); + var targetNode = n.node; + targetNode.ui.startDrop(); + if(!this.isValidDropPoint(n, point, dd, e, data)){ + targetNode.ui.endDrop(); + return false; + } + + var dropNode = data.node || (dd.getTreeNode ? dd.getTreeNode(data, targetNode, point, e) : null); + var dropEvent = { + tree : this.tree, + target: targetNode, + data: data, + point: point, + source: dd, + rawEvent: e, + dropNode: dropNode, + cancel: !dropNode + }; + var retval = this.tree.fireEvent("beforenodedrop", dropEvent); + if(retval === false || dropEvent.cancel === true || !dropEvent.dropNode){ + targetNode.ui.endDrop(); + return false; + } + + targetNode = dropEvent.target; + if(point == "append" && !targetNode.isExpanded()){ + targetNode.expand(false, null, function(){ + this.completeDrop(dropEvent); + }.createDelegate(this)); + }else{ + this.completeDrop(dropEvent); + } + return true; + }, + + completeDrop : function(de){ + var ns = de.dropNode, p = de.point, t = de.target; + if(!(ns instanceof Array)){ + ns = [ns]; + } + var n; + for(var i = 0, len = ns.length; i < len; i++){ + n = ns[i]; + if(p == "above"){ + t.parentNode.insertBefore(n, t); + }else if(p == "below"){ + t.parentNode.insertBefore(n, t.nextSibling); + }else{ + t.appendChild(n); + } + } + n.ui.focus(); + if(this.tree.hlDrop){ + n.ui.highlight(); + } + t.ui.endDrop(); + this.tree.fireEvent("nodedrop", de); + }, + + afterNodeMoved : function(dd, data, e, targetNode, dropNode){ + if(this.tree.hlDrop){ + dropNode.ui.focus(); + dropNode.ui.highlight(); + } + this.tree.fireEvent("nodedrop", this.tree, targetNode, data, dd, e); + }, + + getTree : function(){ + return this.tree; + }, + + removeDropIndicators : function(n){ + if(n && n.ddel){ + var el = n.ddel; + Ext.fly(el).removeClass([ + "x-tree-drag-insert-above", + "x-tree-drag-insert-below", + "x-tree-drag-append"]); + this.lastInsertClass = "_noclass"; + } + }, + + beforeDragDrop : function(target, e, id){ + this.cancelExpand(); + return true; + }, + + afterRepair : function(data){ + if(data && Ext.enableFx){ + data.node.ui.highlight(); + } + this.hideProxy(); + } +}); + +} +if(Ext.dd.DragZone){ +Ext.tree.TreeDragZone = function(tree, config){ + Ext.tree.TreeDragZone.superclass.constructor.call(this, tree.getTreeEl(), config); + this.tree = tree; +}; + +Ext.extend(Ext.tree.TreeDragZone, Ext.dd.DragZone, { + ddGroup : "TreeDD", + + onBeforeDrag : function(data, e){ + var n = data.node; + return n && n.draggable && !n.disabled; + }, + + onInitDrag : function(e){ + var data = this.dragData; + this.tree.getSelectionModel().select(data.node); + this.proxy.update(""); + data.node.ui.appendDDGhost(this.proxy.ghost.dom); + this.tree.fireEvent("startdrag", this.tree, data.node, e); + }, + + getRepairXY : function(e, data){ + return data.node.ui.getDDRepairXY(); + }, + + onEndDrag : function(data, e){ + this.tree.fireEvent("enddrag", this.tree, data.node, e); + }, + + onValidDrop : function(dd, e, id){ + this.tree.fireEvent("dragdrop", this.tree, this.dragData.node, dd, e); + this.hideProxy(); + }, + + beforeInvalidDrop : function(e, id){ + + var sm = this.tree.getSelectionModel(); + sm.clearSelections(); + sm.select(this.dragData.node); + } +}); +} + +Ext.tree.TreeEditor = function(tree, config){ + config = config || {}; + var field = config.events ? config : new Ext.form.TextField(config); + Ext.tree.TreeEditor.superclass.constructor.call(this, field); + + this.tree = tree; + + tree.on('beforeclick', this.beforeNodeClick, this); + tree.getTreeEl().on('mousedown', this.hide, this); + this.on('complete', this.updateNode, this); + this.on('beforestartedit', this.fitToTree, this); + this.on('startedit', this.bindScroll, this, {delay:10}); + this.on('specialkey', this.onSpecialKey, this); +}; + +Ext.extend(Ext.tree.TreeEditor, Ext.Editor, { + + alignment: "l-l", + autoSize: false, + + hideEl : false, + + cls: "x-small-editor x-tree-editor", + + shim:false, + shadow:"frame", + + maxWidth: 250, + + editDelay : 350, + + fitToTree : function(ed, el){ + var td = this.tree.getTreeEl().dom, nd = el.dom; + if(td.scrollLeft > nd.offsetLeft){ td.scrollLeft = nd.offsetLeft; + } + var w = Math.min( + this.maxWidth, + (td.clientWidth > 20 ? td.clientWidth : td.offsetWidth) - Math.max(0, nd.offsetLeft-td.scrollLeft) - 5); + this.setSize(w, ''); + }, + + triggerEdit : function(node){ + this.completeEdit(); + this.editNode = node; + this.startEdit(node.ui.textNode, node.text); + }, + + bindScroll : function(){ + this.tree.getTreeEl().on('scroll', this.cancelEdit, this); + }, + + beforeNodeClick : function(node, e){ + var sinceLast = (this.lastClick ? this.lastClick.getElapsed() : 0); + this.lastClick = new Date(); + if(sinceLast > this.editDelay && this.tree.getSelectionModel().isSelected(node)){ + e.stopEvent(); + this.triggerEdit(node); + return false; + } + }, + + updateNode : function(ed, value){ + this.tree.getTreeEl().un('scroll', this.cancelEdit, this); + this.editNode.setText(value); + }, + + onHide : function(){ + Ext.tree.TreeEditor.superclass.onHide.call(this); + if(this.editNode){ + this.editNode.ui.focus(); + } + }, + + onSpecialKey : function(field, e){ + var k = e.getKey(); + if(k == e.ESC){ + e.stopEvent(); + this.cancelEdit(); + }else if(k == e.ENTER && !e.hasModifier()){ + e.stopEvent(); + this.completeEdit(); + } + } +}); + +Ext.menu.Menu = function(config){ + Ext.apply(this, config); + this.id = this.id || Ext.id(); + this.addEvents({ + + beforeshow : true, + + beforehide : true, + + show : true, + + hide : true, + + click : true, + + mouseover : true, + + mouseout : true, + + itemclick: true + }); + Ext.menu.MenuMgr.register(this); + var mis = this.items; + this.items = new Ext.util.MixedCollection(); + if(mis){ + this.add.apply(this, mis); + } +}; + +Ext.extend(Ext.menu.Menu, Ext.util.Observable, { + + minWidth : 120, + + shadow : "sides", + + subMenuAlign : "tl-tr?", + + defaultAlign : "tl-bl?", + + allowOtherMenus : false, + + hidden:true, + + render : function(){ + if(this.el){ + return; + } + var el = this.el = new Ext.Layer({ + cls: "x-menu", + shadow:this.shadow, + constrain: false, + parentEl: this.parentEl || document.body, + zindex:15000 + }); + + this.keyNav = new Ext.menu.MenuNav(this); + + if(this.plain){ + el.addClass("x-menu-plain"); + } + if(this.cls){ + el.addClass(this.cls); + } + this.focusEl = el.createChild({ + tag: "a", cls: "x-menu-focus", href: "#", onclick: "return false;", tabIndex:"-1" + }); + var ul = el.createChild({tag: "ul", cls: "x-menu-list"}); + ul.on("click", this.onClick, this); + ul.on("mouseover", this.onMouseOver, this); + ul.on("mouseout", this.onMouseOut, this); + this.items.each(function(item){ + var li = document.createElement("li"); + li.className = "x-menu-list-item"; + ul.dom.appendChild(li); + item.render(li, this); + }, this); + this.ul = ul; + this.autoWidth(); + }, + + autoWidth : function(){ + var el = this.el, ul = this.ul; + if(!el){ + return; + } + var w = this.width; + if(w){ + el.setWidth(w); + }else if(Ext.isIE){ + el.setWidth(this.minWidth); + var t = el.dom.offsetWidth; el.setWidth(ul.getWidth()+el.getFrameWidth("lr")); + } + }, + + delayAutoWidth : function(){ + if(this.rendered){ + if(!this.awTask){ + this.awTask = new Ext.util.DelayedTask(this.autoWidth, this); + } + this.awTask.delay(20); + } + }, + + findTargetItem : function(e){ + var t = e.getTarget(".x-menu-list-item", this.ul, true); + if(t && t.menuItemId){ + return this.items.get(t.menuItemId); + } + }, + + onClick : function(e){ + var t; + if(t = this.findTargetItem(e)){ + t.onClick(e); + this.fireEvent("click", this, t, e); + } + }, + + setActiveItem : function(item, autoExpand){ + if(item != this.activeItem){ + if(this.activeItem){ + this.activeItem.deactivate(); + } + this.activeItem = item; + item.activate(autoExpand); + }else if(autoExpand){ + item.expandMenu(); + } + }, + + tryActivate : function(start, step){ + var items = this.items; + for(var i = start, len = items.length; i >= 0 && i < len; i+= step){ + var item = items.get(i); + if(!item.disabled && item.canActivate){ + this.setActiveItem(item, false); + return item; + } + } + return false; + }, + + onMouseOver : function(e){ + var t; + if(t = this.findTargetItem(e)){ + if(t.canActivate && !t.disabled){ + this.setActiveItem(t, true); + } + } + this.fireEvent("mouseover", this, e, t); + }, + + onMouseOut : function(e){ + var t; + if(t = this.findTargetItem(e)){ + if(t == this.activeItem && t.shouldDeactivate(e)){ + this.activeItem.deactivate(); + delete this.activeItem; + } + } + this.fireEvent("mouseout", this, e, t); + }, + + + isVisible : function(){ + return this.el && !this.hidden; + }, + + + show : function(el, pos, parentMenu){ + this.parentMenu = parentMenu; + if(!this.el){ + this.render(); + } + this.fireEvent("beforeshow", this); + this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign), parentMenu, false); + }, + + + showAt : function(xy, parentMenu, _e){ + this.parentMenu = parentMenu; + if(!this.el){ + this.render(); + } + if(_e !== false){ + this.fireEvent("beforeshow", this); + xy = this.el.adjustForConstraints(xy); + } + this.el.setXY(xy); + this.el.show(); + this.hidden = false; + this.focus(); + this.fireEvent("show", this); + }, + + focus : function(){ + if(!this.hidden){ + this.doFocus.defer(50, this); + } + }, + + doFocus : function(){ + if(!this.hidden){ + this.focusEl.focus(); + } + }, + + + hide : function(deep){ + if(this.el && this.isVisible()){ + this.fireEvent("beforehide", this); + if(this.activeItem){ + this.activeItem.deactivate(); + this.activeItem = null; + } + this.el.hide(); + this.hidden = true; + this.fireEvent("hide", this); + } + if(deep === true && this.parentMenu){ + this.parentMenu.hide(true); + } + }, + + + add : function(){ + var a = arguments, l = a.length, item; + for(var i = 0; i < l; i++){ + var el = a[i]; + if(el.render){ item = this.addItem(el); + }else if(typeof el == "string"){ if(el == "separator" || el == "-"){ + item = this.addSeparator(); + }else{ + item = this.addText(el); + } + }else if(el.tagName || el.el){ item = this.addElement(el); + }else if(typeof el == "object"){ item = this.addMenuItem(el); + } + } + return item; + }, + + + getEl : function(){ + if(!this.el){ + this.render(); + } + return this.el; + }, + + + addSeparator : function(){ + return this.addItem(new Ext.menu.Separator()); + }, + + + addElement : function(el){ + return this.addItem(new Ext.menu.BaseItem(el)); + }, + + + addItem : function(item){ + this.items.add(item); + if(this.ul){ + var li = document.createElement("li"); + li.className = "x-menu-list-item"; + this.ul.dom.appendChild(li); + item.render(li, this); + this.delayAutoWidth(); + } + return item; + }, + + + addMenuItem : function(config){ + if(!(config instanceof Ext.menu.Item)){ + if(typeof config.checked == "boolean"){ config = new Ext.menu.CheckItem(config); + }else{ + config = new Ext.menu.Item(config); + } + } + return this.addItem(config); + }, + + + addText : function(text){ + return this.addItem(new Ext.menu.TextItem(text)); + }, + + + insert : function(index, item){ + this.items.insert(index, item); + if(this.ul){ + var li = document.createElement("li"); + li.className = "x-menu-list-item"; + this.ul.dom.insertBefore(li, this.ul.dom.childNodes[index]); + item.render(li, this); + this.delayAutoWidth(); + } + return item; + }, + + + remove : function(item){ + this.items.removeKey(item.id); + item.destroy(); + }, + + + removeAll : function(){ + var f; + while(f = this.items.first()){ + this.remove(f); + } + } +}); + +Ext.menu.MenuNav = function(menu){ + Ext.menu.MenuNav.superclass.constructor.call(this, menu.el); + this.scope = this.menu = menu; +}; + +Ext.extend(Ext.menu.MenuNav, Ext.KeyNav, { + doRelay : function(e, h){ + var k = e.getKey(); + if(!this.menu.activeItem && e.isNavKeyPress() && k != e.SPACE && k != e.RETURN){ + this.menu.tryActivate(0, 1); + return false; + } + return h.call(this.scope || this, e, this.menu); + }, + + up : function(e, m){ + if(!m.tryActivate(m.items.indexOf(m.activeItem)-1, -1)){ + m.tryActivate(m.items.length-1, -1); + } + }, + + down : function(e, m){ + if(!m.tryActivate(m.items.indexOf(m.activeItem)+1, 1)){ + m.tryActivate(0, 1); + } + }, + + right : function(e, m){ + if(m.activeItem){ + m.activeItem.expandMenu(true); + } + }, + + left : function(e, m){ + m.hide(); + if(m.parentMenu && m.parentMenu.activeItem){ + m.parentMenu.activeItem.activate(); + } + }, + + enter : function(e, m){ + if(m.activeItem){ + e.stopPropagation(); + m.activeItem.onClick(e); + m.fireEvent("click", this, m.activeItem); + return true; + } + } +}); + +Ext.menu.MenuMgr = function(){ + var menus, active, groups = {}, attached = false, lastShow = new Date(); + + function init(){ + menus = {}; + active = new Ext.util.MixedCollection(); + Ext.get(document).addKeyListener(27, function(){ + if(active.length > 0){ + hideAll(); + } + }); + } + + function hideAll(){ + if(active && active.length > 0){ + var c = active.clone(); + c.each(function(m){ + m.hide(); + }); + } + } + + function onHide(m){ + active.remove(m); + if(active.length < 1){ + Ext.get(document).un("mousedown", onMouseDown); + attached = false; + } + } + + function onShow(m){ + var last = active.last(); + lastShow = new Date(); + active.add(m); + if(!attached){ + Ext.get(document).on("mousedown", onMouseDown); + attached = true; + } + if(m.parentMenu){ + m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"), 10) + 3); + m.parentMenu.activeChild = m; + }else if(last && last.isVisible()){ + m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"), 10) + 3); + } + } + + function onBeforeHide(m){ + if(m.activeChild){ + m.activeChild.hide(); + } + if(m.autoHideTimer){ + clearTimeout(m.autoHideTimer); + delete m.autoHideTimer; + } + } + + function onBeforeShow(m){ + var pm = m.parentMenu; + if(!pm && !m.allowOtherMenus){ + hideAll(); + }else if(pm && pm.activeChild){ + pm.activeChild.hide(); + } + } + + function onMouseDown(e){ + if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".x-menu")){ + hideAll(); + } + } + + function onBeforeCheck(mi, state){ + if(state){ + var g = groups[mi.group]; + for(var i = 0, l = g.length; i < l; i++){ + if(g[i] != mi){ + g[i].setChecked(false); + } + } + } + } + + return { + + + hideAll : function(){ + hideAll(); + }, + + register : function(menu){ + if(!menus){ + init(); + } + menus[menu.id] = menu; + menu.on("beforehide", onBeforeHide); + menu.on("hide", onHide); + menu.on("beforeshow", onBeforeShow); + menu.on("show", onShow); + var g = menu.group; + if(g && menu.events["checkchange"]){ + if(!groups[g]){ + groups[g] = []; + } + groups[g].push(menu); + menu.on("checkchange", onCheck); + } + }, + + + get : function(menu){ + if(typeof menu == "string"){ return menus[menu]; + }else if(menu.events){ return menu; + }else if(typeof menu.length == 'number'){ return new Ext.menu.Menu({items:menu}); + }else{ return new Ext.menu.Menu(menu); + } + }, + + unregister : function(menu){ + delete menus[menu.id]; + menu.un("beforehide", onBeforeHide); + menu.un("hide", onHide); + menu.un("beforeshow", onBeforeShow); + menu.un("show", onShow); + var g = menu.group; + if(g && menu.events["checkchange"]){ + groups[g].remove(menu); + menu.un("checkchange", onCheck); + } + }, + + registerCheckable : function(menuItem){ + var g = menuItem.group; + if(g){ + if(!groups[g]){ + groups[g] = []; + } + groups[g].push(menuItem); + menuItem.on("beforecheckchange", onBeforeCheck); + } + }, + + unregisterCheckable : function(menuItem){ + var g = menuItem.group; + if(g){ + groups[g].remove(menuItem); + menuItem.un("beforecheckchange", onBeforeCheck); + } + } + }; +}(); + + +Ext.menu.BaseItem = function(config){ + Ext.menu.BaseItem.superclass.constructor.call(this, config); + + this.addEvents({ + + click: true, + + activate : true, + + deactivate : true + }); + + if(this.handler){ + this.on("click", this.handler, this.scope, true); + } +}; + +Ext.extend(Ext.menu.BaseItem, Ext.Component, { + + + canActivate : false, + + activeClass : "x-menu-item-active", + + hideOnClick : true, + + hideDelay : 100, + + ctype: "Ext.menu.BaseItem", + + actionMode : "container", + + render : function(container, parentMenu){ + this.parentMenu = parentMenu; + Ext.menu.BaseItem.superclass.render.call(this, container); + this.container.menuItemId = this.id; + }, + + onRender : function(container, position){ + this.el = Ext.get(this.el); + container.dom.appendChild(this.el.dom); + }, + + onClick : function(e){ + if(!this.disabled && this.fireEvent("click", this, e) !== false + && this.parentMenu.fireEvent("itemclick", this, e) !== false){ + this.handleClick(e); + }else{ + e.stopEvent(); + } + }, + + activate : function(){ + if(this.disabled){ + return false; + } + var li = this.container; + li.addClass(this.activeClass); + this.region = li.getRegion().adjust(2, 2, -2, -2); + this.fireEvent("activate", this); + return true; + }, + + deactivate : function(){ + this.container.removeClass(this.activeClass); + this.fireEvent("deactivate", this); + }, + + shouldDeactivate : function(e){ + return !this.region || !this.region.contains(e.getPoint()); + }, + + handleClick : function(e){ + if(this.hideOnClick){ + this.parentMenu.hide.defer(this.hideDelay, this.parentMenu, [true]); + } + }, + + expandMenu : function(autoActivate){ + }, + + hideMenu : function(){ + } +}); + +Ext.menu.TextItem = function(text){ + this.text = text; + Ext.menu.TextItem.superclass.constructor.call(this); +}; + +Ext.extend(Ext.menu.TextItem, Ext.menu.BaseItem, { + + hideOnClick : false, + + itemCls : "x-menu-text", + + onRender : function(){ + var s = document.createElement("span"); + s.className = this.itemCls; + s.innerHTML = this.text; + this.el = s; + Ext.menu.TextItem.superclass.onRender.apply(this, arguments); + } +}); + +Ext.menu.Separator = function(config){ + Ext.menu.Separator.superclass.constructor.call(this, config); +}; + +Ext.extend(Ext.menu.Separator, Ext.menu.BaseItem, { + + itemCls : "x-menu-sep", + + hideOnClick : false, + + onRender : function(li){ + var s = document.createElement("span"); + s.className = this.itemCls; + s.innerHTML = " "; + this.el = s; + li.addClass("x-menu-sep-li"); + Ext.menu.Separator.superclass.onRender.apply(this, arguments); + } +}); + +Ext.menu.Item = function(config){ + Ext.menu.Item.superclass.constructor.call(this, config); + if(this.menu){ + this.menu = Ext.menu.MenuMgr.get(this.menu); + } +}; +Ext.extend(Ext.menu.Item, Ext.menu.BaseItem, { + + + itemCls : "x-menu-item", + + canActivate : true, + + showDelay: 200, + hideDelay: 200, + + ctype: "Ext.menu.Item", + + onRender : function(container, position){ + var el = document.createElement("a"); + el.hideFocus = true; + el.unselectable = "on"; + el.href = this.href || "#"; + if(this.hrefTarget){ + el.target = this.hrefTarget; + } + el.className = this.itemCls + (this.menu ? " x-menu-item-arrow" : "") + (this.cls ? " " + this.cls : ""); + el.innerHTML = String.format( + '{1}', + this.icon || Ext.BLANK_IMAGE_URL, this.text, this.iconCls || ''); + this.el = el; + Ext.menu.Item.superclass.onRender.call(this, container, position); + }, + + + setText : function(text){ + this.text = text; + if(this.rendered){ + this.el.update(String.format( + '{1}', + this.icon || Ext.BLANK_IMAGE_URL, this.text, this.iconCls || '')); + this.parentMenu.autoWidth(); + } + }, + + handleClick : function(e){ + if(!this.href){ e.stopEvent(); + } + Ext.menu.Item.superclass.handleClick.apply(this, arguments); + }, + + activate : function(autoExpand){ + if(Ext.menu.Item.superclass.activate.apply(this, arguments)){ + this.focus(); + if(autoExpand){ + this.expandMenu(); + } + } + return true; + }, + + shouldDeactivate : function(e){ + if(Ext.menu.Item.superclass.shouldDeactivate.call(this, e)){ + if(this.menu && this.menu.isVisible()){ + return !this.menu.getEl().getRegion().contains(e.getPoint()); + } + return true; + } + return false; + }, + + deactivate : function(){ + Ext.menu.Item.superclass.deactivate.apply(this, arguments); + this.hideMenu(); + }, + + expandMenu : function(autoActivate){ + if(!this.disabled && this.menu){ + clearTimeout(this.hideTimer); + delete this.hideTimer; + if(!this.menu.isVisible() && !this.showTimer){ + this.showTimer = this.deferExpand.defer(this.showDelay, this, [autoActivate]); + }else if (this.menu.isVisible() && autoActivate){ + this.menu.tryActivate(0, 1); + } + } + }, + + deferExpand : function(autoActivate){ + delete this.showTimer; + this.menu.show(this.container, this.parentMenu.subMenuAlign || "tl-tr?", this.parentMenu); + if(autoActivate){ + this.menu.tryActivate(0, 1); + } + }, + + hideMenu : function(){ + clearTimeout(this.showTimer); + delete this.showTimer; + if(!this.hideTimer && this.menu && this.menu.isVisible()){ + this.hideTimer = this.deferHide.defer(this.hideDelay, this); + } + }, + + deferHide : function(){ + delete this.hideTimer; + this.menu.hide(); + } +}); + +Ext.menu.CheckItem = function(config){ + Ext.menu.CheckItem.superclass.constructor.call(this, config); + this.addEvents({ + + "beforecheckchange" : true, + + "checkchange" : true + }); + if(this.checkHandler){ + this.on('checkchange', this.checkHandler, this.scope); + } +}; +Ext.extend(Ext.menu.CheckItem, Ext.menu.Item, { + + + itemCls : "x-menu-item x-menu-check-item", + + groupClass : "x-menu-group-item", + + + checked: false, + + ctype: "Ext.menu.CheckItem", + + onRender : function(c){ + Ext.menu.CheckItem.superclass.onRender.apply(this, arguments); + if(this.group){ + this.el.addClass(this.groupClass); + } + Ext.menu.MenuMgr.registerCheckable(this); + if(this.checked){ + this.checked = false; + this.setChecked(true, true); + } + }, + + destroy : function(){ + if(this.rendered){ + Ext.menu.MenuMgr.unregisterCheckable(this); + } + Ext.menu.CheckItem.superclass.destroy.apply(this, arguments); + }, + + + setChecked : function(state, suppressEvent){ + if(this.checked != state && this.fireEvent("beforecheckchange", this, state) !== false){ + if(this.container){ + this.container[state ? "addClass" : "removeClass"]("x-menu-item-checked"); + } + this.checked = state; + if(suppressEvent !== true){ + this.fireEvent("checkchange", this, state); + } + } + }, + + handleClick : function(e){ + if(!this.disabled && !(this.checked && this.group)){ this.setChecked(!this.checked); + } + Ext.menu.CheckItem.superclass.handleClick.apply(this, arguments); + } +}); + +Ext.menu.Adapter = function(component, config){ + Ext.menu.Adapter.superclass.constructor.call(this, config); + this.component = component; +}; +Ext.extend(Ext.menu.Adapter, Ext.menu.BaseItem, { + canActivate : true, + + onRender : function(container, position){ + this.component.render(container); + this.el = this.component.getEl(); + }, + + activate : function(){ + if(this.disabled){ + return false; + } + this.component.focus(); + this.fireEvent("activate", this); + return true; + }, + + deactivate : function(){ + this.fireEvent("deactivate", this); + }, + + disable : function(){ + this.component.disable(); + Ext.menu.Adapter.superclass.disable.call(this); + }, + + enable : function(){ + this.component.enable(); + Ext.menu.Adapter.superclass.enable.call(this); + } +}); + +Ext.menu.DateItem = function(config){ + Ext.menu.DateItem.superclass.constructor.call(this, new Ext.DatePicker(config), config); + + this.picker = this.component; + this.addEvents({select: true}); + + this.picker.on("render", function(picker){ + picker.getEl().swallowEvent("click"); + picker.container.addClass("x-menu-date-item"); + }); + + this.picker.on("select", this.onSelect, this); +}; + +Ext.extend(Ext.menu.DateItem, Ext.menu.Adapter, { + onSelect : function(picker, date){ + this.fireEvent("select", this, date, picker); + Ext.menu.DateItem.superclass.handleClick.call(this); + } +}); + +Ext.menu.ColorItem = function(config){ + Ext.menu.ColorItem.superclass.constructor.call(this, new Ext.ColorPalette(config), config); + + this.palette = this.component; + this.relayEvents(this.palette, ["select"]); + if(this.selectHandler){ + this.on('select', this.selectHandler, this.scope); + } +}; +Ext.extend(Ext.menu.ColorItem, Ext.menu.Adapter); + +Ext.menu.DateMenu = function(config){ + Ext.menu.DateMenu.superclass.constructor.call(this, config); + this.plain = true; + var di = new Ext.menu.DateItem(config); + this.add(di); + + this.picker = di.picker; + + this.relayEvents(di, ["select"]); + + this.on('beforeshow', function(){ + if(this.picker){ + this.picker.hideMonthPicker(true); + } + }, this); +}; +Ext.extend(Ext.menu.DateMenu, Ext.menu.Menu, { + cls:'x-date-menu' +}); + +Ext.menu.ColorMenu = function(config){ + Ext.menu.ColorMenu.superclass.constructor.call(this, config); + this.plain = true; + var ci = new Ext.menu.ColorItem(config); + this.add(ci); + + this.palette = ci.palette; + + this.relayEvents(ci, ["select"]); +}; +Ext.extend(Ext.menu.ColorMenu, Ext.menu.Menu); + +Ext.form.Field = function(config){ + Ext.form.Field.superclass.constructor.call(this, config); +}; + +Ext.extend(Ext.form.Field, Ext.BoxComponent, { + + invalidClass : "x-form-invalid", + + invalidText : "The value in this field is invalid", + + focusClass : "x-form-focus", + + validationEvent : "keyup", + + validateOnBlur : true, + + validationDelay : 250, + + defaultAutoCreate : {tag: "input", type: "text", size: "20", autocomplete: "off"}, + + fieldClass : "x-form-field", + + msgTarget : 'qtip', + + msgFx : 'normal', + + + readOnly : false, + + + disabled : false, + + + inputType : undefined, + + + tabIndex : undefined, + + isFormField : true, + + hasFocus : false, + + + value : undefined, + + + + + initComponent : function(){ + Ext.form.Field.superclass.initComponent.call(this); + this.addEvents({ + + focus : true, + + blur : true, + + specialkey : true, + + change : true, + + invalid : true, + + valid : true + }); + }, + + + getName: function(){ + return this.rendered && this.el.dom.name ? this.el.dom.name : (this.hiddenName || ''); + }, + + onRender : function(ct, position){ + Ext.form.Field.superclass.onRender.call(this, ct, position); + if(!this.el){ + var cfg = this.getAutoCreate(); + if(!cfg.name){ + cfg.name = this.name || this.id; + } + if(this.inputType){ + cfg.type = this.inputType; + } + this.el = ct.createChild(cfg, position); + } + var type = this.el.dom.type; + if(type){ + if(type == 'password'){ + type = 'text'; + } + this.el.addClass('x-form-'+type); + } + if(this.readOnly){ + this.el.dom.readOnly = true; + } + if(this.tabIndex !== undefined){ + this.el.dom.setAttribute('tabIndex', this.tabIndex); + } + + this.el.addClass([this.fieldClass, this.cls]); + this.initValue(); + }, + + + applyTo : function(target){ + this.allowDomMove = false; + this.el = Ext.get(target); + this.render(this.el.dom.parentNode); + return this; + }, + + initValue : function(){ + if(this.value !== undefined){ + this.setValue(this.value); + }else if(this.el.dom.value.length > 0){ + this.setValue(this.el.dom.value); + } + }, + + + isDirty : function() { + if(this.disabled) { + return false; + } + return String(this.getValue()) !== String(this.originalValue); + }, + + afterRender : function(){ + Ext.form.Field.superclass.afterRender.call(this); + this.initEvents(); + }, + + fireKey : function(e){ + if(e.isNavKeyPress()){ + this.fireEvent("specialkey", this, e); + } + }, + + + reset : function(){ + this.setValue(this.originalValue); + this.clearInvalid(); + }, + + initEvents : function(){ + this.el.on(Ext.isIE ? "keydown" : "keypress", this.fireKey, this); + this.el.on("focus", this.onFocus, this); + this.el.on("blur", this.onBlur, this); + + this.originalValue = this.getValue(); + }, + + onFocus : function(){ + if(!Ext.isOpera && this.focusClass){ this.el.addClass(this.focusClass); + } + if(!this.hasFocus){ + this.hasFocus = true; + this.startValue = this.getValue(); + this.fireEvent("focus", this); + } + }, + + beforeBlur : Ext.emptyFn, + + onBlur : function(){ + this.beforeBlur(); + if(!Ext.isOpera && this.focusClass){ this.el.removeClass(this.focusClass); + } + this.hasFocus = false; + if(this.validationEvent !== false && this.validateOnBlur && this.validationEvent != "blur"){ + this.validate(); + } + var v = this.getValue(); + if(String(v) !== String(this.startValue)){ + this.fireEvent('change', this, v, this.startValue); + } + this.fireEvent("blur", this); + }, + + + isValid : function(preventMark){ + if(this.disabled){ + return true; + } + var restore = this.preventMark; + this.preventMark = preventMark === true; + var v = this.validateValue(this.processValue(this.getRawValue())); + this.preventMark = restore; + return v; + }, + + + validate : function(){ + if(this.disabled || this.validateValue(this.processValue(this.getRawValue()))){ + this.clearInvalid(); + return true; + } + return false; + }, + + processValue : function(value){ + return value; + }, + + validateValue : function(value){ + return true; + }, + + + markInvalid : function(msg){ + if(!this.rendered || this.preventMark){ return; + } + this.el.addClass(this.invalidClass); + msg = msg || this.invalidText; + switch(this.msgTarget){ + case 'qtip': + this.el.dom.qtip = msg; + this.el.dom.qclass = 'x-form-invalid-tip'; + if(Ext.QuickTips){ Ext.QuickTips.enable(); + } + break; + case 'title': + this.el.dom.title = msg; + break; + case 'under': + if(!this.errorEl){ + var elp = this.el.findParent('.x-form-element', 5, true); + this.errorEl = elp.createChild({cls:'x-form-invalid-msg'}); + this.errorEl.setWidth(elp.getWidth(true)-20); + } + this.errorEl.update(msg); + Ext.form.Field.msgFx[this.msgFx].show(this.errorEl, this); + break; + case 'side': + if(!this.errorIcon){ + var elp = this.el.findParent('.x-form-element', 5, true); + this.errorIcon = elp.createChild({cls:'x-form-invalid-icon'}); + } + this.alignErrorIcon(); + this.errorIcon.dom.qtip = msg; + this.errorIcon.dom.qclass = 'x-form-invalid-tip'; + this.errorIcon.show(); + this.on('resize', this.alignErrorIcon, this); + break; + default: + var t = Ext.getDom(this.msgTarget); + t.innerHTML = msg; + t.style.display = this.msgDisplay; + break; + } + this.fireEvent('invalid', this, msg); + }, + + alignErrorIcon : function(){ + this.errorIcon.alignTo(this.el, 'tl-tr', [2, 0]); + }, + + + clearInvalid : function(){ + if(!this.rendered || this.preventMark){ return; + } + this.el.removeClass(this.invalidClass); + switch(this.msgTarget){ + case 'qtip': + this.el.dom.qtip = ''; + break; + case 'title': + this.el.dom.title = ''; + break; + case 'under': + if(this.errorEl){ + Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl, this); + } + break; + case 'side': + if(this.errorIcon){ + this.errorIcon.dom.qtip = ''; + this.errorIcon.hide(); + this.un('resize', this.alignErrorIcon, this); + } + break; + default: + var t = Ext.getDom(this.msgTarget); + t.innerHTML = ''; + t.style.display = 'none'; + break; + } + this.fireEvent('valid', this); + }, + + + getRawValue : function(){ + var v = this.el.getValue(); + if(v === this.emptyText){ + v = ''; + } + return v; + }, + + + getValue : function(){ + var v = this.el.getValue(); + if(v === this.emptyText || v === undefined){ + v = ''; + } + return v; + }, + + + setRawValue : function(v){ + return this.el.dom.value = (v === null || v === undefined ? '' : v); + }, + + + setValue : function(v){ + this.value = v; + if(this.rendered){ + this.el.dom.value = (v === null || v === undefined ? '' : v); + this.validate(); + } + }, + + adjustSize : function(w, h){ + var s = Ext.form.Field.superclass.adjustSize.call(this, w, h); + s.width = this.adjustWidth(this.el.dom.tagName, s.width); + return s; + }, + + adjustWidth : function(tag, w){ + tag = tag.toLowerCase(); + if(typeof w == 'number' && Ext.isStrict && !Ext.isSafari){ + if(Ext.isIE && (tag == 'input' || tag == 'textarea')){ + if(tag == 'input'){ + return w + 2; + } + if(tag = 'textarea'){ + return w-2; + } + }else if(Ext.isOpera){ + if(tag == 'input'){ + return w + 2; + } + if(tag = 'textarea'){ + return w-2; + } + } + } + return w; + } +}); + + +Ext.form.Field.msgFx = { + normal : { + show: function(msgEl, f){ + msgEl.setDisplayed('block'); + }, + + hide : function(msgEl, f){ + msgEl.setDisplayed(false).update(''); + } + }, + + slide : { + show: function(msgEl, f){ + msgEl.slideIn('t', {stopFx:true}); + }, + + hide : function(msgEl, f){ + msgEl.slideOut('t', {stopFx:true,useDisplay:true}); + } + }, + + slideRight : { + show: function(msgEl, f){ + msgEl.fixDisplay(); + msgEl.alignTo(f.el, 'tl-tr'); + msgEl.slideIn('l', {stopFx:true}); + }, + + hide : function(msgEl, f){ + msgEl.slideOut('l', {stopFx:true,useDisplay:true}); + } + } +}; + +Ext.form.TextField = function(config){ + Ext.form.TextField.superclass.constructor.call(this, config); + this.addEvents({ + + autosize : true + }); +}; + +Ext.extend(Ext.form.TextField, Ext.form.Field, { + + grow : false, + + growMin : 30, + + growMax : 800, + + vtype : null, + + maskRe : null, + + disableKeyFilter : false, + + allowBlank : true, + + minLength : 0, + + maxLength : Number.MAX_VALUE, + + minLengthText : "The minimum length for this field is {0}", + + maxLengthText : "The maximum length for this field is {0}", + + selectOnFocus : false, + + blankText : "This field is required", + + validator : null, + + regex : null, + + regexText : "", + + emptyText : null, + + emptyClass : 'x-form-empty-field', + + initEvents : function(){ + Ext.form.TextField.superclass.initEvents.call(this); + if(this.validationEvent == 'keyup'){ + this.validationTask = new Ext.util.DelayedTask(this.validate, this); + this.el.on('keyup', this.filterValidation, this); + } + else if(this.validationEvent !== false){ + this.el.on(this.validationEvent, this.validate, this, {buffer: this.validationDelay}); + } + if(this.selectOnFocus || this.emptyText){ + this.on("focus", this.preFocus, this); + if(this.emptyText){ + this.on('blur', this.postBlur, this); + this.applyEmptyText(); + } + } + if(this.maskRe || (this.vtype && this.disableKeyFilter !== true && (this.maskRe = Ext.form.VTypes[this.vtype+'Mask']))){ + this.el.on("keypress", this.filterKeys, this); + } + if(this.grow){ + this.el.on("keyup", this.onKeyUp, this, {buffer:50}); + this.el.on("click", this.autoSize, this); + } + }, + + processValue : function(value){ + if(this.stripCharsRe){ + var newValue = value.replace(this.stripCharsRe, ''); + if(newValue !== value){ + this.setRawValue(newValue); + return newValue; + } + } + return value; + }, + + filterValidation : function(e){ + if(!e.isNavKeyPress()){ + this.validationTask.delay(this.validationDelay); + } + }, + + onKeyUp : function(e){ + if(!e.isNavKeyPress()){ + this.autoSize(); + } + }, + + + reset : function(){ + Ext.form.TextField.superclass.reset.call(this); + this.applyEmptyText(); + }, + + applyEmptyText : function(){ + if(this.rendered && this.emptyText && this.getRawValue().length < 1){ + this.setRawValue(this.emptyText); + this.el.addClass(this.emptyClass); + } + }, + + preFocus : function(){ + if(this.emptyText){ + if(this.el.dom.value == this.emptyText){ + this.setRawValue(''); + } + this.el.removeClass(this.emptyClass); + } + if(this.selectOnFocus){ + this.el.dom.select(); + } + }, + + postBlur : function(){ + this.applyEmptyText(); + }, + + filterKeys : function(e){ + var k = e.getKey(); + if(!Ext.isIE && (e.isNavKeyPress() || k == e.BACKSPACE || (k == e.DELETE && e.button == -1))){ + return; + } + var c = e.getCharCode(), cc = String.fromCharCode(c); + if(Ext.isIE && (e.isSpecialKey() || !cc)){ + return; + } + if(!this.maskRe.test(cc)){ + e.stopEvent(); + } + }, + + setValue : function(v){ + if(this.emptyText && this.el && v !== undefined && v !== null && v !== ''){ + this.el.removeClass(this.emptyClass); + } + Ext.form.TextField.superclass.setValue.apply(this, arguments); + this.applyEmptyText(); + this.autoSize(); + }, + + + validateValue : function(value){ + if(value.length < 1 || value === this.emptyText){ if(this.allowBlank){ + this.clearInvalid(); + return true; + }else{ + this.markInvalid(this.blankText); + return false; + } + } + if(value.length < this.minLength){ + this.markInvalid(String.format(this.minLengthText, this.minLength)); + return false; + } + if(value.length > this.maxLength){ + this.markInvalid(String.format(this.maxLengthText, this.maxLength)); + return false; + } + if(this.vtype){ + var vt = Ext.form.VTypes; + if(!vt[this.vtype](value, this)){ + this.markInvalid(this.vtypeText || vt[this.vtype +'Text']); + return false; + } + } + if(typeof this.validator == "function"){ + var msg = this.validator(value); + if(msg !== true){ + this.markInvalid(msg); + return false; + } + } + if(this.regex && !this.regex.test(value)){ + this.markInvalid(this.regexText); + return false; + } + return true; + }, + + + selectText : function(start, end){ + var v = this.getRawValue(); + if(v.length > 0){ + start = start === undefined ? 0 : start; + end = end === undefined ? v.length : end; + var d = this.el.dom; + if(d.setSelectionRange){ + d.setSelectionRange(start, end); + }else if(d.createTextRange){ + var range = d.createTextRange(); + range.moveStart("character", start); + range.moveEnd("character", v.length-end); + range.select(); + } + } + }, + + + autoSize : function(){ + if(!this.grow || !this.rendered){ + return; + } + if(!this.metrics){ + this.metrics = Ext.util.TextMetrics.createInstance(this.el); + } + var el = this.el; + var v = el.dom.value; + var d = document.createElement('div'); + d.appendChild(document.createTextNode(v)); + v = d.innerHTML; + d = null; + v += " "; + var w = Math.min(this.growMax, Math.max(this.metrics.getWidth(v) + 10, this.growMin)); + this.el.setWidth(w); + this.fireEvent("autosize", this, w); + } +}); + +Ext.form.TriggerField = function(config){ + this.mimicing = false; + Ext.form.TriggerField.superclass.constructor.call(this, config); +}; + +Ext.extend(Ext.form.TriggerField, Ext.form.TextField, { + + + defaultAutoCreate : {tag: "input", type: "text", size: "16", autocomplete: "off"}, + + hideTrigger:false, + + + + + + + autoSize: Ext.emptyFn, + monitorTab : true, + deferHeight : true, + + onResize : function(w, h){ + Ext.form.TriggerField.superclass.onResize.apply(this, arguments); + if(typeof w == 'number'){ + this.el.setWidth(this.adjustWidth('input', w - this.trigger.getWidth())); + } + }, + + adjustSize : Ext.BoxComponent.prototype.adjustSize, + + getResizeEl : function(){ + return this.wrap; + }, + + getPositionEl : function(){ + return this.wrap; + }, + + alignErrorIcon : function(){ + this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]); + }, + + onRender : function(ct, position){ + Ext.form.TriggerField.superclass.onRender.call(this, ct, position); + this.wrap = this.el.wrap({cls: "x-form-field-wrap"}); + this.trigger = this.wrap.createChild(this.triggerConfig || + {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.triggerClass}); + if(this.hideTrigger){ + this.trigger.setDisplayed(false); + } + this.initTrigger(); + if(!this.width){ + this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth()); + } + }, + + initTrigger : function(){ + this.trigger.on("click", this.onTriggerClick, this, {preventDefault:true}); + this.trigger.addClassOnOver('x-form-trigger-over'); + this.trigger.addClassOnClick('x-form-trigger-click'); + }, + + onDestroy : function(){ + if(this.trigger){ + this.trigger.removeAllListeners(); + this.trigger.remove(); + } + if(this.wrap){ + this.wrap.remove(); + } + Ext.form.TriggerField.superclass.onDestroy.call(this); + }, + + onFocus : function(){ + Ext.form.TriggerField.superclass.onFocus.call(this); + if(!this.mimicing){ + this.wrap.addClass('x-trigger-wrap-focus'); + this.mimicing = true; + Ext.get(Ext.isIE ? document.body : document).on("mousedown", this.mimicBlur, this); + if(this.monitorTab){ + this.el.on("keydown", this.checkTab, this); + } + } + }, + + checkTab : function(e){ + if(e.getKey() == e.TAB){ + this.triggerBlur(); + } + }, + + onBlur : function(){ + }, + + mimicBlur : function(e, t){ + if(!this.wrap.contains(t) && this.validateBlur()){ + this.triggerBlur(); + } + }, + + triggerBlur : function(){ + this.mimicing = false; + Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur); + if(this.monitorTab){ + this.el.un("keydown", this.checkTab, this); + } + this.wrap.removeClass('x-trigger-wrap-focus'); + Ext.form.TriggerField.superclass.onBlur.call(this); + }, + + validateBlur : function(e, t){ + return true; + }, + + onDisable : function(){ + Ext.form.TriggerField.superclass.onDisable.call(this); + if(this.wrap){ + this.wrap.addClass('x-item-disabled'); + } + }, + + onEnable : function(){ + Ext.form.TriggerField.superclass.onEnable.call(this); + if(this.wrap){ + this.wrap.removeClass('x-item-disabled'); + } + }, + + onShow : function(){ + if(this.wrap){ + this.wrap.dom.style.display = ''; + this.wrap.dom.style.visibility = 'visible'; + } + }, + + onHide : function(){ + this.wrap.dom.style.display = 'none'; + }, + + + onTriggerClick : Ext.emptyFn +}); + +Ext.form.TwinTriggerField = Ext.extend(Ext.form.TriggerField, { + initComponent : function(){ + Ext.form.TwinTriggerField.superclass.initComponent.call(this); + + this.triggerConfig = { + tag:'span', cls:'x-form-twin-triggers', cn:[ + {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger1Class}, + {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger2Class} + ]}; + }, + + getTrigger : function(index){ + return this.triggers[index]; + }, + + initTrigger : function(){ + var ts = this.trigger.select('.x-form-trigger', true); + this.wrap.setStyle('overflow', 'hidden'); + var triggerField = this; + ts.each(function(t, all, index){ + t.hide = function(){ + var w = triggerField.wrap.getWidth(); + this.dom.style.display = 'none'; + triggerField.el.setWidth(w-triggerField.trigger.getWidth()); + }; + t.show = function(){ + var w = triggerField.wrap.getWidth(); + this.dom.style.display = ''; + triggerField.el.setWidth(w-triggerField.trigger.getWidth()); + }; + var triggerIndex = 'Trigger'+(index+1); + + if(this['hide'+triggerIndex]){ + t.dom.style.display = 'none'; + } + t.on("click", this['on'+triggerIndex+'Click'], this, {preventDefault:true}); + t.addClassOnOver('x-form-trigger-over'); + t.addClassOnClick('x-form-trigger-click'); + }, this); + this.triggers = ts.elements; + }, + + onTrigger1Click : Ext.emptyFn, + onTrigger2Click : Ext.emptyFn +}); + +Ext.form.TextArea = function(config){ + Ext.form.TextArea.superclass.constructor.call(this, config); + if(this.minHeight !== undefined){ + this.growMin = this.minHeight; + } + if(this.maxHeight !== undefined){ + this.growMax = this.maxHeight; + } +}; + +Ext.extend(Ext.form.TextArea, Ext.form.TextField, { + + growMin : 60, + + growMax: 1000, + + preventScrollbars: false, + + + onRender : function(ct, position){ + if(!this.el){ + this.defaultAutoCreate = { + tag: "textarea", + style:"width:300px;height:60px;", + autocomplete: "off" + }; + } + Ext.form.TextArea.superclass.onRender.call(this, ct, position); + if(this.grow){ + this.textSizeEl = Ext.DomHelper.append(document.body, { + tag: "pre", cls: "x-form-grow-sizer" + }); + if(this.preventScrollbars){ + this.el.setStyle("overflow", "hidden"); + } + this.el.setHeight(this.growMin); + } + }, + + onDestroy : function(){ + if(this.textSizeEl){ + this.textSizeEl.parentNode.removeChild(this.textSizeEl); + } + Ext.form.TextArea.superclass.onDestroy.call(this); + }, + + onKeyUp : function(e){ + if(!e.isNavKeyPress() || e.getKey() == e.ENTER){ + this.autoSize(); + } + }, + + + autoSize : function(){ + if(!this.grow || !this.textSizeEl){ + return; + } + var el = this.el; + var v = el.dom.value; + var ts = this.textSizeEl; + + ts.innerHTML = ''; + ts.appendChild(document.createTextNode(v)); + v = ts.innerHTML; + + Ext.fly(ts).setWidth(this.el.getWidth()); + if(v.length < 1){ + v = "  "; + }else{ + if(Ext.isIE){ + v = v.replace(/\n/g, '

     

    '); + } + v += " \n "; + } + ts.innerHTML = v; + var h = Math.min(this.growMax, Math.max(ts.offsetHeight, this.growMin)); + if(h != this.lastHeight){ + this.lastHeight = h; + this.el.setHeight(h); + this.fireEvent("autosize", this, h); + } + } +}); + +Ext.form.NumberField = function(config){ + Ext.form.NumberField.superclass.constructor.call(this, config); +}; + +Ext.extend(Ext.form.NumberField, Ext.form.TextField, { + + fieldClass: "x-form-field x-form-num-field", + + allowDecimals : true, + + decimalSeparator : ".", + + decimalPrecision : 2, + + allowNegative : true, + + minValue : Number.NEGATIVE_INFINITY, + + maxValue : Number.MAX_VALUE, + + minText : "The minimum value for this field is {0}", + + maxText : "The maximum value for this field is {0}", + + nanText : "{0} is not a valid number", + + initEvents : function(){ + Ext.form.NumberField.superclass.initEvents.call(this); + var allowed = "0123456789"; + if(this.allowDecimals){ + allowed += this.decimalSeparator; + } + if(this.allowNegative){ + allowed += "-"; + } + this.stripCharsRe = new RegExp('[^'+allowed+']', 'gi'); + var keyPress = function(e){ + var k = e.getKey(); + if(!Ext.isIE && (e.isSpecialKey() || k == e.BACKSPACE || k == e.DELETE)){ + return; + } + var c = e.getCharCode(); + if(allowed.indexOf(String.fromCharCode(c)) === -1){ + e.stopEvent(); + } + }; + this.el.on("keypress", keyPress, this); + }, + + validateValue : function(value){ + if(!Ext.form.NumberField.superclass.validateValue.call(this, value)){ + return false; + } + if(value.length < 1){ return true; + } + var num = this.parseValue(value); + if(isNaN(num)){ + this.markInvalid(String.format(this.nanText, value)); + return false; + } + if(num < this.minValue){ + this.markInvalid(String.format(this.minText, this.minValue)); + return false; + } + if(num > this.maxValue){ + this.markInvalid(String.format(this.maxText, this.maxValue)); + return false; + } + return true; + }, + + getValue : function(){ + return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this))); + }, + + parseValue : function(value){ + value = parseFloat(String(value).replace(this.decimalSeparator, ".")); + return isNaN(value) ? '' : value; + }, + + fixPrecision : function(value){ + var nan = isNaN(value); + if(!this.allowDecimals || this.decimalPrecision == -1 || nan || !value){ + return nan ? '' : value; + } + return parseFloat(value).toFixed(this.decimalPrecision); + }, + + setValue : function(v){ + Ext.form.NumberField.superclass.setValue.call(this, String(v).replace(".", this.decimalSeparator)); + }, + + decimalPrecisionFcn : function(v){ + return Math.floor(v); + }, + + beforeBlur : function(){ + var v = this.parseValue(this.getRawValue()); + if(v){ + this.setValue(this.fixPrecision(v)); + } + } +}); + +Ext.form.DateField = function(config){ + Ext.form.DateField.superclass.constructor.call(this, config); + if(typeof this.minValue == "string") this.minValue = this.parseDate(this.minValue); + if(typeof this.maxValue == "string") this.maxValue = this.parseDate(this.maxValue); + this.ddMatch = null; + if(this.disabledDates){ + var dd = this.disabledDates; + var re = "(?:"; + for(var i = 0; i < dd.length; i++){ + re += dd[i]; + if(i != dd.length-1) re += "|"; + } + this.ddMatch = new RegExp(re + ")"); + } +}; + +Ext.extend(Ext.form.DateField, Ext.form.TriggerField, { + + format : "m/d/y", + + altFormats : "m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d", + + disabledDays : null, + + disabledDaysText : "Disabled", + + disabledDates : null, + + disabledDatesText : "Disabled", + + minValue : null, + + maxValue : null, + + minText : "The date in this field must be equal to or after {0}", + + maxText : "The date in this field must be equal to or before {0}", + + invalidText : "{0} is not a valid date - it must be in the format {1}", + + triggerClass : 'x-form-date-trigger', + + + defaultAutoCreate : {tag: "input", type: "text", size: "10", autocomplete: "off"}, + + validateValue : function(value){ + value = this.formatDate(value); + if(!Ext.form.DateField.superclass.validateValue.call(this, value)){ + return false; + } + if(value.length < 1){ return true; + } + var svalue = value; + value = this.parseDate(value); + if(!value){ + this.markInvalid(String.format(this.invalidText, svalue, this.format)); + return false; + } + var time = value.getTime(); + if(this.minValue && time < this.minValue.getTime()){ + this.markInvalid(String.format(this.minText, this.formatDate(this.minValue))); + return false; + } + if(this.maxValue && time > this.maxValue.getTime()){ + this.markInvalid(String.format(this.maxText, this.formatDate(this.maxValue))); + return false; + } + if(this.disabledDays){ + var day = value.getDay(); + for(var i = 0; i < this.disabledDays.length; i++) { + if(day === this.disabledDays[i]){ + this.markInvalid(this.disabledDaysText); + return false; + } + } + } + var fvalue = this.formatDate(value); + if(this.ddMatch && this.ddMatch.test(fvalue)){ + this.markInvalid(String.format(this.disabledDatesText, fvalue)); + return false; + } + return true; + }, + + validateBlur : function(){ + return !this.menu || !this.menu.isVisible(); + }, + + + getValue : function(){ + return this.parseDate(Ext.form.DateField.superclass.getValue.call(this)) || ""; + }, + + + setValue : function(date){ + Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(date))); + }, + + parseDate : function(value){ + if(!value || value instanceof Date){ + return value; + } + var v = Date.parseDate(value, this.format); + if(!v && this.altFormats){ + if(!this.altFormatsArray){ + this.altFormatsArray = this.altFormats.split("|"); + } + for(var i = 0, len = this.altFormatsArray.length; i < len && !v; i++){ + v = Date.parseDate(value, this.altFormatsArray[i]); + } + } + return v; + }, + + formatDate : function(date){ + return (!date || !(date instanceof Date)) ? + date : date.dateFormat(this.format); + }, + + menuListeners : { + select: function(m, d){ + this.setValue(d); + }, + show : function(){ this.onFocus(); + }, + hide : function(){ + this.focus.defer(10, this); + var ml = this.menuListeners; + this.menu.un("select", ml.select, this); + this.menu.un("show", ml.show, this); + this.menu.un("hide", ml.hide, this); + } + }, + + onTriggerClick : function(){ + if(this.disabled){ + return; + } + if(this.menu == null){ + this.menu = new Ext.menu.DateMenu(); + } + Ext.apply(this.menu.picker, { + minDate : this.minValue, + maxDate : this.maxValue, + disabledDatesRE : this.ddMatch, + disabledDatesText : this.disabledDatesText, + disabledDays : this.disabledDays, + disabledDaysText : this.disabledDaysText, + format : this.format, + minText : String.format(this.minText, this.formatDate(this.minValue)), + maxText : String.format(this.maxText, this.formatDate(this.maxValue)) + }); + this.menu.on(Ext.apply({}, this.menuListeners, { + scope:this + })); + this.menu.picker.setValue(this.getValue() || new Date()); + this.menu.show(this.el, "tl-bl?"); + }, + + beforeBlur : function(){ + var v = this.parseDate(this.getRawValue()); + if(v){ + this.setValue(v); + } + } + + + + + +}); + +Ext.form.ComboBox = function(config){ + Ext.form.ComboBox.superclass.constructor.call(this, config); + this.addEvents({ + + 'expand' : true, + + 'collapse' : true, + + 'beforeselect' : true, + + 'select' : true, + + 'beforequery': true + }); + if(this.transform){ + this.allowDomMove = false; + var s = Ext.getDom(this.transform); + if(!this.hiddenName){ + this.hiddenName = s.name; + } + if(!this.store){ + this.mode = 'local'; + var d = [], opts = s.options; + for(var i = 0, len = opts.length;i < len; i++){ + var o = opts[i]; + var value = (Ext.isIE ? o.getAttributeNode('value').specified : o.hasAttribute('value')) ? o.value : o.text; + if(o.selected) { + this.value = value; + } + d.push([value, o.text]); + } + this.store = new Ext.data.SimpleStore({ + 'id': 0, + fields: ['value', 'text'], + data : d + }); + this.valueField = 'value'; + this.displayField = 'text'; + } + s.name = Ext.id(); if(!this.lazyRender){ + this.target = true; + this.el = Ext.DomHelper.insertBefore(s, this.autoCreate || this.defaultAutoCreate); + s.parentNode.removeChild(s); this.render(this.el.parentNode); + }else{ + s.parentNode.removeChild(s); } + + } + this.selectedIndex = -1; + if(this.mode == 'local'){ + if(config.queryDelay === undefined){ + this.queryDelay = 10; + } + if(config.minChars === undefined){ + this.minChars = 0; + } + } +}; + +Ext.extend(Ext.form.ComboBox, Ext.form.TriggerField, { + + + + + + + defaultAutoCreate : {tag: "input", type: "text", size: "24", autocomplete: "off"}, + + listWidth: undefined, + + displayField: undefined, + + valueField: undefined, + + hiddenName: undefined, + + listClass: '', + + selectedClass: 'x-combo-selected', + + triggerClass : 'x-form-arrow-trigger', + + shadow:'sides', + + listAlign: 'tl-bl?', + + maxHeight: 300, + + triggerAction: 'query', + + minChars : 4, + + typeAhead: false, + + queryDelay: 500, + + pageSize: 0, + + selectOnFocus:false, + + queryParam: 'query', + + loadingText: 'Loading...', + + resizable: false, + + handleHeight : 8, + + editable: true, + + allQuery: '', + + mode: 'remote', + + minListWidth : 70, + + forceSelection:false, + + typeAheadDelay : 250, + + valueNotFoundText : undefined, + + onRender : function(ct, position){ + Ext.form.ComboBox.superclass.onRender.call(this, ct, position); + if(this.hiddenName){ + this.hiddenField = this.el.insertSibling({tag:'input', type:'hidden', name: this.hiddenName, id: (this.hiddenId||this.hiddenName)}, + 'before', true); + this.hiddenField.value = + this.hiddenValue !== undefined ? this.hiddenValue : + this.value !== undefined ? this.value : ''; + + this.el.dom.removeAttribute('name'); + } + if(Ext.isGecko){ + this.el.dom.setAttribute('autocomplete', 'off'); + } + + var cls = 'x-combo-list'; + + this.list = new Ext.Layer({ + shadow: this.shadow, cls: [cls, this.listClass].join(' '), constrain:false + }); + + var lw = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth); + this.list.setWidth(lw); + this.list.swallowEvent('mousewheel'); + this.assetHeight = 0; + + if(this.title){ + this.header = this.list.createChild({cls:cls+'-hd', html: this.title}); + this.assetHeight += this.header.getHeight(); + } + + this.innerList = this.list.createChild({cls:cls+'-inner'}); + this.innerList.on('mouseover', this.onViewOver, this); + this.innerList.on('mousemove', this.onViewMove, this); + this.innerList.setWidth(lw - this.list.getFrameWidth('lr')) + + if(this.pageSize){ + this.footer = this.list.createChild({cls:cls+'-ft'}); + this.pageTb = new Ext.PagingToolbar(this.footer, this.store, + {pageSize: this.pageSize}); + this.assetHeight += this.footer.getHeight(); + } + + if(!this.tpl){ + this.tpl = '
    {' + this.displayField + '}
    '; + } + + this.view = new Ext.View(this.innerList, this.tpl, { + singleSelect:true, store: this.store, selectedClass: this.selectedClass + }); + + this.view.on('click', this.onViewClick, this); + + this.store.on('beforeload', this.onBeforeLoad, this); + this.store.on('load', this.onLoad, this); + this.store.on('loadexception', this.collapse, this); + + if(this.resizable){ + this.resizer = new Ext.Resizable(this.list, { + pinned:true, handles:'se' + }); + this.resizer.on('resize', function(r, w, h){ + this.maxHeight = h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight; + this.listWidth = w; + this.innerList.setWidth(w - this.list.getFrameWidth('lr')); + this.restrictHeight(); + }, this); + this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom', this.handleHeight+'px'); + } + if(!this.editable){ + this.editable = true; + this.setEditable(false); + } + }, + + initEvents : function(){ + Ext.form.ComboBox.superclass.initEvents.call(this); + + this.keyNav = new Ext.KeyNav(this.el, { + "up" : function(e){ + this.inKeyMode = true; + this.selectPrev(); + }, + + "down" : function(e){ + if(!this.isExpanded()){ + this.onTriggerClick(); + }else{ + this.inKeyMode = true; + this.selectNext(); + } + }, + + "enter" : function(e){ + this.onViewClick(); + }, + + "esc" : function(e){ + this.collapse(); + }, + + "tab" : function(e){ + this.onViewClick(false); + return true; + }, + + scope : this, + + doRelay : function(foo, bar, hname){ + if(hname == 'down' || this.scope.isExpanded()){ + return Ext.KeyNav.prototype.doRelay.apply(this, arguments); + } + return true; + }, + + forceKeyDown: true + }); + this.queryDelay = Math.max(this.queryDelay || 10, + this.mode == 'local' ? 10 : 250); + this.dqTask = new Ext.util.DelayedTask(this.initQuery, this); + if(this.typeAhead){ + this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this); + } + if(this.editable !== false){ + this.el.on("keyup", this.onKeyUp, this); + } + if(this.forceSelection){ + this.on('blur', this.doForce, this); + } + }, + + onDestroy : function(){ + if(this.view){ + this.view.setStore(null); + this.view.el.removeAllListeners(); + this.view.el.remove(); + this.view.purgeListeners(); + } + if(this.list){ + this.list.destroy(); + } + if(this.store){ + this.store.un('beforeload', this.onBeforeLoad, this); + this.store.un('load', this.onLoad, this); + this.store.un('loadexception', this.collapse, this); + } + Ext.form.ComboBox.superclass.onDestroy.call(this); + }, + + fireKey : function(e){ + if(e.isNavKeyPress() && !this.list.isVisible()){ + this.fireEvent("specialkey", this, e); + } + }, + + onResize: function(w, h){ + Ext.form.ComboBox.superclass.onResize.apply(this, arguments); + if(this.list && this.listWidth === undefined){ + var lw = Math.max(w, this.minListWidth); + this.list.setWidth(lw); + this.innerList.setWidth(lw - this.list.getFrameWidth('lr')); + } + }, + + + setEditable : function(value){ + if(value == this.editable){ + return; + } + this.editable = value; + if(!value){ + this.el.dom.setAttribute('readOnly', true); + this.el.on('mousedown', this.onTriggerClick, this); + this.el.addClass('x-combo-noedit'); + }else{ + this.el.dom.setAttribute('readOnly', false); + this.el.un('mousedown', this.onTriggerClick, this); + this.el.removeClass('x-combo-noedit'); + } + }, + + onBeforeLoad : function(){ + if(!this.hasFocus){ + return; + } + this.innerList.update(this.loadingText ? + '
    '+this.loadingText+'
    ' : ''); + this.restrictHeight(); + this.selectedIndex = -1; + }, + + onLoad : function(){ + if(!this.hasFocus){ + return; + } + if(this.store.getCount() > 0){ + this.expand(); + this.restrictHeight(); + if(this.lastQuery == this.allQuery){ + if(this.editable){ + this.el.dom.select(); + } + if(!this.selectByValue(this.value, true)){ + this.select(0, true); + } + }else{ + this.selectNext(); + if(this.typeAhead && this.lastKey != Ext.EventObject.BACKSPACE && this.lastKey != Ext.EventObject.DELETE){ + this.taTask.delay(this.typeAheadDelay); + } + } + }else{ + this.onEmptyResults(); + } + }, + + onTypeAhead : function(){ + if(this.store.getCount() > 0){ + var r = this.store.getAt(0); + var newValue = r.data[this.displayField]; + var len = newValue.length; + var selStart = this.getRawValue().length; + if(selStart != len){ + this.setRawValue(newValue); + this.selectText(selStart, newValue.length); + } + } + }, + + onSelect : function(record, index){ + if(this.fireEvent('beforeselect', this, record, index) !== false){ + this.setValue(record.data[this.valueField || this.displayField]); + this.collapse(); + this.fireEvent('select', this, record, index); + } + }, + + + getValue : function(){ + if(this.valueField){ + return typeof this.value != 'undefined' ? this.value : ''; + }else{ + return Ext.form.ComboBox.superclass.getValue.call(this); + } + }, + + + clearValue : function(){ + if(this.hiddenField){ + this.hiddenField.value = ''; + } + this.setRawValue(''); + this.lastSelectionText = ''; + this.applyEmptyText(); + }, + + + setValue : function(v){ + var text = v; + if(this.valueField){ + var r = this.findRecord(this.valueField, v); + if(r){ + text = r.data[this.displayField]; + }else if(this.valueNotFoundText !== undefined){ + text = this.valueNotFoundText; + } + } + this.lastSelectionText = text; + if(this.hiddenField){ + this.hiddenField.value = v; + } + Ext.form.ComboBox.superclass.setValue.call(this, text); + this.value = v; + }, + + findRecord : function(prop, value){ + var record; + if(this.store.getCount() > 0){ + this.store.each(function(r){ + if(r.data[prop] == value){ + record = r; + return false; + } + }); + } + return record; + }, + + onViewMove : function(e, t){ + this.inKeyMode = false; + }, + + onViewOver : function(e, t){ + if(this.inKeyMode){ return; + } + var item = this.view.findItemFromChild(t); + if(item){ + var index = this.view.indexOf(item); + this.select(index, false); + } + }, + + onViewClick : function(doFocus){ + var index = this.view.getSelectedIndexes()[0]; + var r = this.store.getAt(index); + if(r){ + this.onSelect(r, index); + } + if(doFocus !== false){ + this.el.focus(); + } + }, + + restrictHeight : function(){ + this.innerList.dom.style.height = ''; + var inner = this.innerList.dom; + var h = Math.max(inner.clientHeight, inner.offsetHeight, inner.scrollHeight); + this.innerList.setHeight(h < this.maxHeight ? 'auto' : this.maxHeight); + this.list.beginUpdate(); + this.list.setHeight(this.innerList.getHeight()+this.list.getFrameWidth('tb')+(this.resizable?this.handleHeight:0)+this.assetHeight); + this.list.alignTo(this.el, this.listAlign); + this.list.endUpdate(); + }, + + onEmptyResults : function(){ + this.collapse(); + }, + + + isExpanded : function(){ + return this.list.isVisible(); + }, + + + selectByValue : function(v, scrollIntoView){ + if(v !== undefined && v !== null){ + var r = this.findRecord(this.valueField || this.displayField, v); + if(r){ + this.select(this.store.indexOf(r), scrollIntoView); + return true; + } + } + return false; + }, + + + select : function(index, scrollIntoView){ + this.selectedIndex = index; + this.view.select(index); + if(scrollIntoView !== false){ + var el = this.view.getNode(index); + if(el){ + this.innerList.scrollChildIntoView(el, false); + } + } + }, + + selectNext : function(){ + var ct = this.store.getCount(); + if(ct > 0){ + if(this.selectedIndex == -1){ + this.select(0); + }else if(this.selectedIndex < ct-1){ + this.select(this.selectedIndex+1); + } + } + }, + + selectPrev : function(){ + var ct = this.store.getCount(); + if(ct > 0){ + if(this.selectedIndex == -1){ + this.select(0); + }else if(this.selectedIndex != 0){ + this.select(this.selectedIndex-1); + } + } + }, + + onKeyUp : function(e){ + if(this.editable !== false && !e.isSpecialKey()){ + this.lastKey = e.getKey(); + this.dqTask.delay(this.queryDelay); + } + }, + + validateBlur : function(){ + return !this.list || !this.list.isVisible(); + }, + + initQuery : function(){ + this.doQuery(this.getRawValue()); + }, + + doForce : function(){ + if(this.el.dom.value.length > 0){ + this.el.dom.value = + this.lastSelectionText === undefined ? '' : this.lastSelectionText; + this.applyEmptyText(); + } + }, + + + doQuery : function(q, forceAll){ + if(q === undefined || q === null){ + q = ''; + } + var qe = { + query: q, + forceAll: forceAll, + combo: this, + cancel:false + }; + if(this.fireEvent('beforequery', qe)===false || qe.cancel){ + return false; + } + q = qe.query; + forceAll = qe.forceAll; + if(forceAll === true || (q.length >= this.minChars)){ + if(this.lastQuery != q){ + this.lastQuery = q; + if(this.mode == 'local'){ + this.selectedIndex = -1; + if(forceAll){ + this.store.clearFilter(); + }else{ + this.store.filter(this.displayField, q); + } + this.onLoad(); + }else{ + this.store.baseParams[this.queryParam] = q; + this.store.load({ + params: this.getParams(q) + }); + this.expand(); + } + }else{ + this.selectedIndex = -1; + this.onLoad(); + } + } + }, + + getParams : function(q){ + var p = {}; + if(this.pageSize){ + p.start = 0; + p.limit = this.pageSize; + } + return p; + }, + + + collapse : function(){ + if(!this.isExpanded()){ + return; + } + this.list.hide(); + Ext.get(document).un('mousedown', this.collapseIf, this); + Ext.get(document).un('mousewheel', this.collapseIf, this); + this.fireEvent('collapse', this); + }, + + collapseIf : function(e){ + if(!e.within(this.wrap) && !e.within(this.list)){ + this.collapse(); + } + }, + + + expand : function(){ + if(this.isExpanded() || !this.hasFocus){ + return; + } + this.list.alignTo(this.el, this.listAlign); + this.list.show(); + Ext.get(document).on('mousedown', this.collapseIf, this); + Ext.get(document).on('mousewheel', this.collapseIf, this); + this.fireEvent('expand', this); + }, + + onTriggerClick : function(){ + if(this.disabled){ + return; + } + if(this.isExpanded()){ + this.collapse(); + this.el.focus(); + }else { + this.hasFocus = true; + if(this.triggerAction == 'all') { + this.doQuery(this.allQuery, true); + } else { + this.doQuery(this.getRawValue()); + } + this.el.focus(); + } + } + + + + + +}); + +Ext.form.Checkbox = function(config){ + Ext.form.Checkbox.superclass.constructor.call(this, config); + this.addEvents({ + + check : true + }); +}; + +Ext.extend(Ext.form.Checkbox, Ext.form.Field, { + + focusClass : undefined, + + fieldClass: "x-form-field", + + checked: false, + + defaultAutoCreate : { tag: "input", type: 'checkbox', autocomplete: "off"}, + + boxLabel : undefined, + + onResize : function(){ + Ext.form.Checkbox.superclass.onResize.apply(this, arguments); + if(!this.boxLabel){ + this.el.alignTo(this.wrap, 'c-c'); + } + }, + + initEvents : function(){ + Ext.form.Checkbox.superclass.initEvents.call(this); + this.el.on("click", this.onClick, this); + this.el.on("change", this.onClick, this); + }, + + + getResizeEl : function(){ + return this.wrap; + }, + + getPositionEl : function(){ + return this.wrap; + }, + + onRender : function(ct, position){ + Ext.form.Checkbox.superclass.onRender.call(this, ct, position); + if(this.inputValue !== undefined){ + this.el.dom.value = this.inputValue; + } + this.wrap = this.el.wrap({cls: "x-form-check-wrap"}); + if(this.boxLabel){ + this.wrap.createChild({tag: 'label', htmlFor: this.el.id, cls: 'x-form-cb-label', html: this.boxLabel}); + } + if(this.checked){ + this.setValue(true); + }else{ + this.checked = this.el.dom.checked; + } + }, + + initValue : Ext.emptyFn, + + + getValue : function(){ + if(this.rendered){ + return this.el.dom.checked; + } + return false; + }, + + onClick : function(){ + if(this.el.dom.checked != this.checked){ + this.setValue(this.el.dom.checked); + } + }, + + + setValue : function(v){ + this.checked = (v === true || v === 'true' || v == '1' || String(v).toLowerCase() == 'on'); + if(this.el && this.el.dom){ + this.el.dom.checked = this.checked; + this.el.dom.defaultChecked = this.checked; + } + this.fireEvent("check", this, this.checked); + } +}); + +Ext.form.Radio = function(){ + Ext.form.Radio.superclass.constructor.apply(this, arguments); +}; +Ext.extend(Ext.form.Radio, Ext.form.Checkbox, { + inputType: 'radio', + + + getGroupValue : function(){ + return this.el.up('form').child('input[name='+this.el.dom.name+']:checked', true).value; + } +}); + +Ext.form.HtmlEditor = Ext.extend(Ext.form.Field, { + + enableFormat : true, + + enableFontSize : true, + + enableColors : true, + + enableAlignments : true, + + enableLists : true, + + enableSourceEdit : true, + + enableLinks : true, + + enableFont : true, + + createLinkText : 'Please enter the URL for the link:', + + defaultLinkValue : 'http:/'+'/', + + fontFamilies : [ + 'Arial', + 'Courier New', + 'Tahoma', + 'Times New Roman', + 'Verdana' + ], + defaultFont: 'tahoma', + + + validationEvent : false, + deferHeight: true, + initialized : false, + activated : false, + sourceEditMode : false, + onFocus : Ext.emptyFn, + iframePad:3, + hideMode:'offsets', + defaultAutoCreate : { + tag: "textarea", + style:"width:500px;height:300px;", + autocomplete: "off" + }, + + + initComponent : function(){ + this.addEvents({ + + initialize: true, + + activate: true, + + beforesync: true, + + beforepush: true, + + sync: true, + + push: true, + + editmodechange: true + }) + }, + + createFontOptions : function(){ + var buf = [], fs = this.fontFamilies, ff, lc; + for(var i = 0, len = fs.length; i< len; i++){ + ff = fs[i]; + lc = ff.toLowerCase(); + buf.push( + '' + ); + } + return buf.join(''); + }, + + createToolbar : function(editor){ + + function btn(id, toggle, handler){ + return { + id : id, + cls : 'x-btn-icon x-edit-'+id, + enableToggle:toggle !== false, + scope: editor, + handler:handler||editor.relayBtnCmd, + clickEvent:'mousedown', + tooltip: editor.buttonTips[id] || undefined, + tabIndex:-1 + }; + } + + + var tb = new Ext.Toolbar(this.wrap.dom.firstChild); + + + tb.el.on('click', function(e){ + e.preventDefault(); + }); + + if(this.enableFont && !Ext.isSafari){ + this.fontSelect = tb.el.createChild({ + tag:'select', + tabIndex: -1, + cls:'x-font-select', + html: this.createFontOptions() + }); + this.fontSelect.on('change', function(){ + var font = this.fontSelect.dom.value; + this.relayCmd('fontname', font); + this.deferFocus(); + }, this); + tb.add( + this.fontSelect.dom, + '-' + ); + }; + + if(this.enableFormat){ + tb.add( + btn('bold'), + btn('italic'), + btn('underline') + ); + }; + + if(this.enableFontSize){ + tb.add( + '-', + btn('increasefontsize', false, this.adjustFont), + btn('decreasefontsize', false, this.adjustFont) + ); + }; + + if(this.enableColors){ + tb.add( + '-', { + id:'forecolor', + cls:'x-btn-icon x-edit-forecolor', + clickEvent:'mousedown', + tooltip: editor.buttonTips['forecolor'] || undefined, + tabIndex:-1, + menu : new Ext.menu.ColorMenu({ + allowReselect: true, + focus: Ext.emptyFn, + value:'000000', + plain:true, + selectHandler: function(cp, color){ + this.execCmd('forecolor', Ext.isSafari || Ext.isIE ? '#'+color : color); + this.deferFocus(); + }, + scope: this, + clickEvent:'mousedown' + }) + }, { + id:'backcolor', + cls:'x-btn-icon x-edit-backcolor', + clickEvent:'mousedown', + tooltip: editor.buttonTips['backcolor'] || undefined, + tabIndex:-1, + menu : new Ext.menu.ColorMenu({ + focus: Ext.emptyFn, + value:'FFFFFF', + plain:true, + allowReselect: true, + selectHandler: function(cp, color){ + if(Ext.isGecko){ + this.execCmd('useCSS', false); + this.execCmd('hilitecolor', color); + this.execCmd('useCSS', true); + this.deferFocus(); + }else{ + this.execCmd(Ext.isOpera ? 'hilitecolor' : 'backcolor', Ext.isSafari || Ext.isIE ? '#'+color : color); + this.deferFocus(); + } + }, + scope:this, + clickEvent:'mousedown' + }) + } + ); + }; + + if(this.enableAlignments){ + tb.add( + '-', + btn('justifyleft'), + btn('justifycenter'), + btn('justifyright') + ); + }; + + if(!Ext.isSafari){ + if(this.enableLinks){ + tb.add( + '-', + btn('createlink', false, this.createLink) + ); + }; + + if(this.enableLists){ + tb.add( + '-', + btn('insertorderedlist'), + btn('insertunorderedlist') + ); + } + if(this.enableSourceEdit){ + tb.add( + '-', + btn('sourceedit', true, function(btn){ + this.toggleSourceEdit(btn.pressed); + }) + ); + } + } + + this.tb = tb; + }, + + + getDocMarkup : function(){ + return ''; + }, + + + onRender : function(ct, position){ + Ext.form.HtmlEditor.superclass.onRender.call(this, ct, position); + this.el.dom.style.border = '0 none'; + this.el.dom.setAttribute('tabIndex', -1); + this.el.addClass('x-hidden'); + if(Ext.isIE){ + this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;') + } + this.wrap = this.el.wrap({ + cls:'x-html-editor-wrap', cn:{cls:'x-html-editor-tb'} + }); + + + this.createToolbar(this); + + this.tb.items.each(function(item){ + if(item.id != 'sourceedit'){ + item.disable(); + } + }); + + var iframe = document.createElement('iframe'); + iframe.name = Ext.id(); + iframe.frameBorder = 'no'; + + iframe.src = (Ext.SSL_SECURE_URL || "javascript:false"); + + this.wrap.dom.appendChild(iframe); + + this.iframe = iframe; + + if(Ext.isIE){ + this.doc = iframe.contentWindow.document; + this.win = iframe.contentWindow; + } else { + this.doc = (iframe.contentDocument || window.frames[iframe.name].document); + this.win = window.frames[iframe.name]; + } + this.doc.designMode = 'on'; + this.doc.open(); + this.doc.write(this.getDocMarkup()) + this.doc.close(); + + var task = { + run : function(){ + if(this.doc.body || this.doc.readyState == 'complete'){ + this.doc.designMode="on"; + Ext.TaskMgr.stop(task); + this.initEditor.defer(10, this); + } + }, + interval : 10, + duration:10000, + scope: this + }; + Ext.TaskMgr.start(task); + + if(!this.width){ + this.setSize(this.el.getSize()); + } + }, + + + onResize : function(w, h){ + Ext.form.HtmlEditor.superclass.onResize.apply(this, arguments); + if(this.el && this.iframe){ + if(typeof w == 'number'){ + var aw = w - this.wrap.getFrameWidth('lr'); + this.el.setWidth(this.adjustWidth('textarea', aw)); + this.iframe.style.width = aw + 'px'; + } + if(typeof h == 'number'){ + var ah = h - this.wrap.getFrameWidth('tb') - this.tb.el.getHeight(); + this.el.setHeight(this.adjustWidth('textarea', ah)); + this.iframe.style.height = ah + 'px'; + if(this.doc){ + (this.doc.body || this.doc.documentElement).style.height = (ah - (this.iframePad*2)) + 'px'; + } + } + } + }, + + + toggleSourceEdit : function(sourceEditMode){ + if(sourceEditMode === undefined){ + sourceEditMode = !this.sourceEditMode; + } + this.sourceEditMode = sourceEditMode === true; + var btn = this.tb.items.get('sourceedit'); + if(btn.pressed !== this.sourceEditMode){ + btn.toggle(this.sourceEditMode); + return; + } + if(this.sourceEditMode){ + this.tb.items.each(function(item){ + if(item.id != 'sourceedit'){ + item.disable(); + } + }); + this.syncValue(); + this.iframe.className = 'x-hidden'; + this.el.removeClass('x-hidden'); + this.el.dom.removeAttribute('tabIndex'); + this.el.focus(); + }else{ + if(this.initialized){ + this.tb.items.each(function(item){ + item.enable(); + }); + } + this.pushValue(); + this.iframe.className = ''; + this.el.addClass('x-hidden'); + this.el.dom.setAttribute('tabIndex', -1); + this.deferFocus(); + } + this.setSize(this.wrap.getSize()); + this.fireEvent('editmodechange', this, this.sourceEditMode); + }, + + + createLink : function(){ + var url = prompt(this.createLinkText, this.defaultLinkValue); + if(url && url != 'http:/'+'/'){ + this.relayCmd('createlink', url); + } + }, + + + adjustSize : Ext.BoxComponent.prototype.adjustSize, + + + getResizeEl : function(){ + return this.wrap; + }, + + + getPositionEl : function(){ + return this.wrap; + }, + + + initEvents : function(){ + this.originalValue = this.getValue(); + }, + + + markInvalid : Ext.emptyFn, + + clearInvalid : Ext.emptyFn, + + setValue : function(v){ + Ext.form.HtmlEditor.superclass.setValue.call(this, v); + this.pushValue(); + }, + + + cleanHtml : function(html){ + html = String(html); + if(html.length > 5){ + if(Ext.isSafari){ + html = html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, ''); + } + } + if(html == ' '){ + html = ''; + } + return html; + }, + + + syncValue : function(){ + if(this.initialized){ + var bd = (this.doc.body || this.doc.documentElement); + var html = bd.innerHTML; + if(Ext.isSafari){ + var bs = bd.getAttribute('style'); + var m = bs.match(/text-align:(.*?);/i); + if(m && m[1]){ + html = '
    ' + html + '
    '; + } + } + html = this.cleanHtml(html); + if(this.fireEvent('beforesync', this, html) !== false){ + this.el.dom.value = html; + this.fireEvent('sync', this, html); + } + } + }, + + + pushValue : function(){ + if(this.initialized){ + var v = this.el.dom.value; + if(v.length < 1){ + v = ' '; + } + if(this.fireEvent('beforepush', this, v) !== false){ + (this.doc.body || this.doc.documentElement).innerHTML = v; + this.fireEvent('push', this, v); + } + } + }, + + + deferFocus : function(){ + this.focus.defer(10, this); + }, + + + focus : function(){ + if(this.win && !this.sourceEditMode){ + this.win.focus(); + }else{ + this.el.focus(); + } + }, + + + initEditor : function(){ + var dbody = (this.doc.body || this.doc.documentElement); + var ss = this.el.getStyles('font-size', 'font-family', 'background-image', 'background-repeat'); + ss['background-attachment'] = 'fixed'; + dbody.bgProperties = 'fixed'; + Ext.DomHelper.applyStyles(dbody, ss); + Ext.EventManager.on(this.doc, { + 'mousedown': this.onEditorEvent, + 'dblclick': this.onEditorEvent, + 'click': this.onEditorEvent, + 'keyup': this.onEditorEvent, + buffer:100, + scope: this + }); + if(Ext.isGecko){ + Ext.EventManager.on(this.doc, 'keypress', this.applyCommand, this); + } + if(Ext.isIE || Ext.isSafari || Ext.isOpera){ + Ext.EventManager.on(this.doc, 'keydown', this.fixKeys, this); + } + this.initialized = true; + + this.fireEvent('initialize', this); + this.pushValue(); + }, + + + onDestroy : function(){ + if(this.rendered){ + this.tb.items.each(function(item){ + if(item.menu){ + item.menu.removeAll(); + if(item.menu.el){ + item.menu.el.destroy(); + } + } + item.destroy(); + }); + this.wrap.dom.innerHTML = ''; + this.wrap.remove(); + } + }, + + + onFirstFocus : function(){ + this.activated = true; + this.tb.items.each(function(item){ + item.enable(); + }); + if(Ext.isGecko){ + this.win.focus(); + var s = this.win.getSelection(); + if(!s.focusNode || s.focusNode.nodeType != 3){ + var r = s.getRangeAt(0); + r.selectNodeContents((this.doc.body || this.doc.documentElement)); + r.collapse(true); + this.deferFocus(); + } + try{ + this.execCmd('useCSS', true); + this.execCmd('styleWithCSS', false); + }catch(e){} + } + this.fireEvent('activate', this); + }, + + + adjustFont: function(btn){ + var adjust = btn.id == 'increasefontsize' ? 1 : -1; + if(Ext.isSafari){ + adjust *= 2; + } + var v = parseInt(this.doc.queryCommandValue('FontSize')|| 3, 10); + v = Math.max(1, v+adjust); + this.execCmd('FontSize', v + (Ext.isSafari ? 'px' : 0)); + }, + + onEditorEvent : function(e){ + this.updateToolbar(); + }, + + + + updateToolbar: function(){ + + if(!this.activated){ + this.onFirstFocus(); + return; + } + + var btns = this.tb.items.map, doc = this.doc; + + if(this.enableFont && !Ext.isSafari){ + var name = (this.doc.queryCommandValue('FontName')||this.defaultFont).toLowerCase(); + if(name != this.fontSelect.dom.value){ + this.fontSelect.dom.value = name; + } + } + if(this.enableFormat){ + btns.bold.toggle(doc.queryCommandState('bold')); + btns.italic.toggle(doc.queryCommandState('italic')); + btns.underline.toggle(doc.queryCommandState('underline')); + } + if(this.enableAlignments){ + btns.justifyleft.toggle(doc.queryCommandState('justifyleft')); + btns.justifycenter.toggle(doc.queryCommandState('justifycenter')); + btns.justifyright.toggle(doc.queryCommandState('justifyright')); + } + if(!Ext.isSafari && this.enableLists){ + btns.insertorderedlist.toggle(doc.queryCommandState('insertorderedlist')); + btns.insertunorderedlist.toggle(doc.queryCommandState('insertunorderedlist')); + } + Ext.menu.MenuMgr.hideAll(); + + this.syncValue(); + }, + + + relayBtnCmd : function(btn){ + this.relayCmd(btn.id); + }, + + + relayCmd : function(cmd, value){ + this.win.focus(); + this.execCmd(cmd, value); + this.updateToolbar(); + this.deferFocus(); + }, + + + execCmd : function(cmd, value){ + this.doc.execCommand(cmd, false, value === undefined ? null : value); + this.syncValue(); + }, + + + applyCommand : function(e){ + if(e.ctrlKey){ + var c = e.getCharCode(), cmd; + if(c > 0){ + c = String.fromCharCode(c); + switch(c){ + case 'b': + cmd = 'bold'; + break; + case 'i': + cmd = 'italic'; + break; + case 'u': + cmd = 'underline'; + break; + } + if(cmd){ + this.win.focus(); + this.execCmd(cmd); + this.deferFocus(); + e.preventDefault(); + } + } + } + }, + + + insertAtCursor : function(text){ + if(!this.activated){ + return; + } + if(Ext.isIE){ + this.win.focus(); + var r = this.doc.selection.createRange(); + if(r){ + r.collapse(true); + r.pasteHTML(text); + this.syncValue(); + this.deferFocus(); + } + }else if(Ext.isGecko || Ext.isOpera){ + this.win.focus(); + this.execCmd('InsertHTML', text); + this.deferFocus(); + }else if(Ext.isSafari){ + this.execCmd('InsertText', text); + this.deferFocus(); + } + }, + + + fixKeys : function(){ + if(Ext.isIE){ + return function(e){ + var k = e.getKey(), r; + if(k == e.TAB){ + e.stopEvent(); + r = this.doc.selection.createRange(); + if(r){ + r.collapse(true); + r.pasteHTML('    '); + this.deferFocus(); + } + }else if(k == e.ENTER){ + r = this.doc.selection.createRange(); + if(r){ + var target = r.parentElement(); + if(!target || target.tagName.toLowerCase() != 'li'){ + e.stopEvent(); + r.pasteHTML('
    '); + r.collapse(false); + r.select(); + } + } + } + }; + }else if(Ext.isOpera){ + return function(e){ + var k = e.getKey(); + if(k == e.TAB){ + e.stopEvent(); + this.win.focus(); + this.execCmd('InsertHTML','    '); + this.deferFocus(); + } + }; + }else if(Ext.isSafari){ + return function(e){ + var k = e.getKey(); + if(k == e.TAB){ + e.stopEvent(); + this.execCmd('InsertText','\t'); + this.deferFocus(); + } + }; + } + }(), + + + getToolbar : function(){ + return this.tb; + }, + + + buttonTips : { + bold : { + title: 'Bold (Ctrl+B)', + text: 'Make the selected text bold.', + cls: 'x-html-editor-tip' + }, + italic : { + title: 'Italic (Ctrl+I)', + text: 'Make the selected text italic.', + cls: 'x-html-editor-tip' + }, + underline : { + title: 'Underline (Ctrl+U)', + text: 'Underline the selected text.', + cls: 'x-html-editor-tip' + }, + increasefontsize : { + title: 'Grow Text', + text: 'Increase the font size.', + cls: 'x-html-editor-tip' + }, + decreasefontsize : { + title: 'Shrink Text', + text: 'Decrease the font size.', + cls: 'x-html-editor-tip' + }, + backcolor : { + title: 'Text Highlight Color', + text: 'Change the background color of the selected text.', + cls: 'x-html-editor-tip' + }, + forecolor : { + title: 'Font Color', + text: 'Change the color of the selected text.', + cls: 'x-html-editor-tip' + }, + justifyleft : { + title: 'Align Text Left', + text: 'Align text to the left.', + cls: 'x-html-editor-tip' + }, + justifycenter : { + title: 'Center Text', + text: 'Center text in the editor.', + cls: 'x-html-editor-tip' + }, + justifyright : { + title: 'Align Text Right', + text: 'Align text to the right.', + cls: 'x-html-editor-tip' + }, + insertunorderedlist : { + title: 'Bullet List', + text: 'Start a bulleted list.', + cls: 'x-html-editor-tip' + }, + insertorderedlist : { + title: 'Numbered List', + text: 'Start a numbered list.', + cls: 'x-html-editor-tip' + }, + createlink : { + title: 'Hyperlink', + text: 'Make the selected text a hyperlink.', + cls: 'x-html-editor-tip' + }, + sourceedit : { + title: 'Source Edit', + text: 'Switch to source editing mode.', + cls: 'x-html-editor-tip' + } + } + + + + + + + + + + + + + + +}); + +Ext.form.BasicForm = function(el, config){ + Ext.apply(this, config); + + this.items = new Ext.util.MixedCollection(false, function(o){ + return o.id || (o.id = Ext.id()); + }); + this.addEvents({ + + beforeaction: true, + + actionfailed : true, + + actioncomplete : true + }); + if(el){ + this.initEl(el); + } + Ext.form.BasicForm.superclass.constructor.call(this); +}; + +Ext.extend(Ext.form.BasicForm, Ext.util.Observable, { + + + + + + + + timeout: 30, + + activeAction : null, + + + trackResetOnLoad : false, + + + waitMsgTarget : undefined, + + initEl : function(el){ + this.el = Ext.get(el); + this.id = this.el.id || Ext.id(); + this.el.on('submit', this.onSubmit, this); + this.el.addClass('x-form'); + }, + + onSubmit : function(e){ + e.stopEvent(); + }, + + + isValid : function(){ + var valid = true; + this.items.each(function(f){ + if(!f.validate()){ + valid = false; + } + }); + return valid; + }, + + + isDirty : function(){ + var dirty = false; + this.items.each(function(f){ + if(f.isDirty()){ + dirty = true; + return false; + } + }); + return dirty; + }, + + + doAction : function(action, options){ + if(typeof action == 'string'){ + action = new Ext.form.Action.ACTION_TYPES[action](this, options); + } + if(this.fireEvent('beforeaction', this, action) !== false){ + this.beforeAction(action); + action.run.defer(100, action); + } + return this; + }, + + + submit : function(options){ + this.doAction('submit', options); + return this; + }, + + + load : function(options){ + this.doAction('load', options); + return this; + }, + + + updateRecord : function(record){ + record.beginEdit(); + var fs = record.fields; + fs.each(function(f){ + var field = this.findField(f.name); + if(field){ + record.set(f.name, field.getValue()); + } + }, this); + record.endEdit(); + return this; + }, + + + loadRecord : function(record){ + this.setValues(record.data); + return this; + }, + + beforeAction : function(action){ + var o = action.options; + if(o.waitMsg){ + if(this.waitMsgTarget === true){ + this.el.mask(o.waitMsg, 'x-mask-loading'); + }else if(this.waitMsgTarget){ + this.waitMsgTarget = Ext.get(this.waitMsgTarget); + this.waitMsgTarget.mask(o.waitMsg, 'x-mask-loading'); + }else{ + Ext.MessageBox.wait(o.waitMsg, o.waitTitle || this.waitTitle || 'Please Wait...'); + } + } + }, + + afterAction : function(action, success){ + this.activeAction = null; + var o = action.options; + if(o.waitMsg){ + if(this.waitMsgTarget === true){ + this.el.unmask(); + }else if(this.waitMsgTarget){ + this.waitMsgTarget.unmask(); + }else{ + Ext.MessageBox.updateProgress(1); + Ext.MessageBox.hide(); + } + } + if(success){ + if(o.reset){ + this.reset(); + } + Ext.callback(o.success, o.scope, [this, action]); + this.fireEvent('actioncomplete', this, action); + }else{ + Ext.callback(o.failure, o.scope, [this, action]); + this.fireEvent('actionfailed', this, action); + } + }, + + + findField : function(id){ + var field = this.items.get(id); + if(!field){ + this.items.each(function(f){ + if(f.isFormField && (f.dataIndex == id || f.id == id || f.getName() == id)){ + field = f; + return false; + } + }); + } + return field || null; + }, + + + + markInvalid : function(errors){ + if(errors instanceof Array){ + for(var i = 0, len = errors.length; i < len; i++){ + var fieldError = errors[i]; + var f = this.findField(fieldError.id); + if(f){ + f.markInvalid(fieldError.msg); + } + } + }else{ + var field, id; + for(id in errors){ + if(typeof errors[id] != 'function' && (field = this.findField(id))){ + field.markInvalid(errors[id]); + } + } + } + return this; + }, + + + setValues : function(values){ + if(values instanceof Array){ for(var i = 0, len = values.length; i < len; i++){ + var v = values[i]; + var f = this.findField(v.id); + if(f){ + f.setValue(v.value); + if(this.trackResetOnLoad){ + f.originalValue = f.getValue(); + } + } + } + }else{ var field, id; + for(id in values){ + if(typeof values[id] != 'function' && (field = this.findField(id))){ + field.setValue(values[id]); + if(this.trackResetOnLoad){ + field.originalValue = field.getValue(); + } + } + } + } + return this; + }, + + + getValues : function(asString){ + var fs = Ext.lib.Ajax.serializeForm(this.el.dom); + if(asString === true){ + return fs; + } + return Ext.urlDecode(fs); + }, + + + clearInvalid : function(){ + this.items.each(function(f){ + f.clearInvalid(); + }); + return this; + }, + + + reset : function(){ + this.items.each(function(f){ + f.reset(); + }); + return this; + }, + + + add : function(){ + this.items.addAll(Array.prototype.slice.call(arguments, 0)); + return this; + }, + + + + remove : function(field){ + this.items.remove(field); + return this; + }, + + + render : function(){ + this.items.each(function(f){ + if(f.isFormField && !f.rendered && document.getElementById(f.id)){ f.applyTo(f.id); + } + }); + return this; + }, + + + applyToFields : function(o){ + this.items.each(function(f){ + Ext.apply(f, o); + }); + return this; + }, + + + applyIfToFields : function(o){ + this.items.each(function(f){ + Ext.applyIf(f, o); + }); + return this; + } +}); + +Ext.BasicForm = Ext.form.BasicForm; + +Ext.form.Form = function(config){ + Ext.form.Form.superclass.constructor.call(this, null, config); + this.url = this.url || this.action; + if(!this.root){ + this.root = new Ext.form.Layout(Ext.applyIf({ + id: Ext.id() + }, config)); + } + this.active = this.root; + + this.buttons = []; + this.addEvents({ + + clientvalidation: true + }); +}; + +Ext.extend(Ext.form.Form, Ext.form.BasicForm, { + + + + buttonAlign:'center', + + + minButtonWidth:75, + + + labelAlign:'left', + + + monitorValid : false, + + + monitorPoll : 200, + + + column : function(c){ + var col = new Ext.form.Column(c); + this.start(col); + if(arguments.length > 1){ this.add.apply(this, Array.prototype.slice.call(arguments, 1)); + this.end(); + } + return col; + }, + + + fieldset : function(c){ + var fs = new Ext.form.FieldSet(c); + this.start(fs); + if(arguments.length > 1){ this.add.apply(this, Array.prototype.slice.call(arguments, 1)); + this.end(); + } + return fs; + }, + + + container : function(c){ + var l = new Ext.form.Layout(c); + this.start(l); + if(arguments.length > 1){ this.add.apply(this, Array.prototype.slice.call(arguments, 1)); + this.end(); + } + return l; + }, + + + start : function(c){ + Ext.applyIf(c, {'labelAlign': this.active.labelAlign, 'labelWidth': this.active.labelWidth, 'itemCls': this.active.itemCls}); + this.active.stack.push(c); + c.ownerCt = this.active; + this.active = c; + return this; + }, + + + end : function(){ + if(this.active == this.root){ + return this; + } + this.active = this.active.ownerCt; + return this; + }, + + + add : function(){ + this.active.stack.push.apply(this.active.stack, arguments); + var r = []; + for(var i = 0, a = arguments, len = a.length; i < len; i++) { + if(a[i].isFormField){ + r.push(a[i]); + } + } + if(r.length > 0){ + Ext.form.Form.superclass.add.apply(this, r); + } + return this; + }, + + + render : function(ct){ + ct = Ext.get(ct); + var o = this.autoCreate || { + tag: 'form', + method : this.method || 'POST', + id : this.id || Ext.id() + }; + this.initEl(ct.createChild(o)); + + this.root.render(this.el); + + this.items.each(function(f){ + f.render('x-form-el-'+f.id); + }); + + if(this.buttons.length > 0){ + var tb = this.el.createChild({cls:'x-form-btns-ct', cn: { + cls:"x-form-btns x-form-btns-"+this.buttonAlign, + html:'
    ' + }}, null, true); + var tr = tb.getElementsByTagName('tr')[0]; + for(var i = 0, len = this.buttons.length; i < len; i++) { + var b = this.buttons[i]; + var td = document.createElement('td'); + td.className = 'x-form-btn-td'; + b.render(tr.appendChild(td)); + } + } + if(this.monitorValid){ this.startMonitoring(); + } + return this; + }, + + + addButton : function(config, handler, scope){ + var bc = { + handler: handler, + scope: scope, + minWidth: this.minButtonWidth, + hideParent:true + }; + if(typeof config == "string"){ + bc.text = config; + }else{ + Ext.apply(bc, config); + } + var btn = new Ext.Button(null, bc); + this.buttons.push(btn); + return btn; + }, + + + startMonitoring : function(){ + if(!this.bound){ + this.bound = true; + Ext.TaskMgr.start({ + run : this.bindHandler, + interval : this.monitorPoll || 200, + scope: this + }); + } + }, + + + stopMonitoring : function(){ + this.bound = false; + }, + + bindHandler : function(){ + if(!this.bound){ + return false; } + var valid = true; + this.items.each(function(f){ + if(!f.isValid(true)){ + valid = false; + return false; + } + }); + for(var i = 0, len = this.buttons.length; i < len; i++){ + var btn = this.buttons[i]; + if(btn.formBind === true && btn.disabled === valid){ + btn.setDisabled(!valid); + } + } + this.fireEvent('clientvalidation', this, valid); + } +}); + + +Ext.Form = Ext.form.Form; + + +Ext.form.Action = function(form, options){ + this.form = form; + this.options = options || {}; +}; + +Ext.form.Action.CLIENT_INVALID = 'client'; +Ext.form.Action.SERVER_INVALID = 'server'; +Ext.form.Action.CONNECT_FAILURE = 'connect'; +Ext.form.Action.LOAD_FAILURE = 'load'; + +Ext.form.Action.prototype = { + type : 'default', + failureType : undefined, + response : undefined, + result : undefined, + + run : function(options){ + + }, + + success : function(response){ + + }, + + handleResponse : function(response){ + + }, + + failure : function(response){ + this.response = response; + this.failureType = Ext.form.Action.CONNECT_FAILURE; + this.form.afterAction(this, false); + }, + + processResponse : function(response){ + this.response = response; + if(!response.responseText){ + return true; + } + this.result = this.handleResponse(response); + return this.result; + }, + + getUrl : function(appendParams){ + var url = this.options.url || this.form.url || this.form.el.dom.action; + if(appendParams){ + var p = this.getParams(); + if(p){ + url += (url.indexOf('?') != -1 ? '&' : '?') + p; + } + } + return url; + }, + + getMethod : function(){ + return (this.options.method || this.form.method || this.form.el.dom.method || 'POST').toUpperCase(); + }, + + getParams : function(){ + var bp = this.form.baseParams; + var p = this.options.params; + if(p){ + if(typeof p == "object"){ + p = Ext.urlEncode(Ext.applyIf(p, bp)); + }else if(typeof p == 'string' && bp){ + p += '&' + Ext.urlEncode(bp); + } + }else if(bp){ + p = Ext.urlEncode(bp); + } + return p; + }, + + createCallback : function(){ + return { + success: this.success, + failure: this.failure, + scope: this, + timeout: (this.form.timeout*1000), + upload: this.form.fileUpload ? this.success : undefined + }; + } +}; + +Ext.form.Action.Submit = function(form, options){ + Ext.form.Action.Submit.superclass.constructor.call(this, form, options); +}; + +Ext.extend(Ext.form.Action.Submit, Ext.form.Action, { + type : 'submit', + + run : function(){ + var o = this.options; + var method = this.getMethod(); + var isPost = method == 'POST'; + if(o.clientValidation === false || this.form.isValid()){ + Ext.Ajax.request(Ext.apply(this.createCallback(), { + form:this.form.el.dom, + url:this.getUrl(!isPost), + method: method, + params:isPost ? this.getParams() : null, + isUpload: this.form.fileUpload + })); + + }else if (o.clientValidation !== false){ this.failureType = Ext.form.Action.CLIENT_INVALID; + this.form.afterAction(this, false); + } + }, + + success : function(response){ + var result = this.processResponse(response); + if(result === true || result.success){ + this.form.afterAction(this, true); + return; + } + if(result.errors){ + this.form.markInvalid(result.errors); + this.failureType = Ext.form.Action.SERVER_INVALID; + } + this.form.afterAction(this, false); + }, + + handleResponse : function(response){ + if(this.form.errorReader){ + var rs = this.form.errorReader.read(response); + var errors = []; + if(rs.records){ + for(var i = 0, len = rs.records.length; i < len; i++) { + var r = rs.records[i]; + errors[i] = r.data; + } + } + if(errors.length < 1){ + errors = null; + } + return { + success : rs.success, + errors : errors + }; + } + return Ext.decode(response.responseText); + } +}); + + +Ext.form.Action.Load = function(form, options){ + Ext.form.Action.Load.superclass.constructor.call(this, form, options); + this.reader = this.form.reader; +}; + +Ext.extend(Ext.form.Action.Load, Ext.form.Action, { + type : 'load', + + run : function(){ + Ext.Ajax.request(Ext.apply( + this.createCallback(), { + method:this.getMethod(), + url:this.getUrl(false), + params:this.getParams() + })); + }, + + success : function(response){ + var result = this.processResponse(response); + if(result === true || !result.success || !result.data){ + this.failureType = Ext.form.Action.LOAD_FAILURE; + this.form.afterAction(this, false); + return; + } + this.form.clearInvalid(); + this.form.setValues(result.data); + this.form.afterAction(this, true); + }, + + handleResponse : function(response){ + if(this.form.reader){ + var rs = this.form.reader.read(response); + var data = rs.records && rs.records[0] ? rs.records[0].data : null; + return { + success : rs.success, + data : data + }; + } + return Ext.decode(response.responseText); + } +}); + +Ext.form.Action.ACTION_TYPES = { + 'load' : Ext.form.Action.Load, + 'submit' : Ext.form.Action.Submit +}; + + +Ext.form.Layout = function(config){ + Ext.form.Layout.superclass.constructor.call(this, config); + this.stack = []; +}; + +Ext.extend(Ext.form.Layout, Ext.Component, { + + + + + + clear : true, + + labelSeparator : ':', + + hideLabels : false, + + defaultAutoCreate : {tag: 'div', cls: 'x-form-ct'}, + + onRender : function(ct, position){ + if(this.el){ this.el = Ext.get(this.el); + }else { var cfg = this.getAutoCreate(); + this.el = ct.createChild(cfg, position); + } + if(this.style){ + this.el.applyStyles(this.style); + } + if(this.labelAlign){ + this.el.addClass('x-form-label-'+this.labelAlign); + } + if(this.hideLabels){ + this.labelStyle = "display:none"; + this.elementStyle = "padding-left:0;"; + }else{ + if(typeof this.labelWidth == 'number'){ + this.labelStyle = "width:"+this.labelWidth+"px;"; + this.elementStyle = "padding-left:"+((this.labelWidth+(typeof this.labelPad == 'number' ? this.labelPad : 5))+'px')+";"; + } + if(this.labelAlign == 'top'){ + this.labelStyle = "width:auto;"; + this.elementStyle = "padding-left:0;"; + } + } + var stack = this.stack; + var slen = stack.length; + if(slen > 0){ + if(!this.fieldTpl){ + var t = new Ext.Template( + '
    ', + '', + '
    ', + '
    ', + '
    ' + ); + t.disableFormats = true; + t.compile(); + Ext.form.Layout.prototype.fieldTpl = t; + } + for(var i = 0; i < slen; i++) { + if(stack[i].isFormField){ + this.renderField(stack[i]); + }else{ + this.renderComponent(stack[i]); + } + } + } + if(this.clear){ + this.el.createChild({cls:'x-form-clear'}); + } + }, + + renderField : function(f){ + this.fieldTpl.append(this.el, [ + f.id, f.fieldLabel, + f.labelStyle||this.labelStyle||'', + this.elementStyle||'', + typeof f.labelSeparator == 'undefined' ? this.labelSeparator : f.labelSeparator, + f.itemCls||this.itemCls||'' + ]); + }, + + renderComponent : function(c){ + c.render(this.el); + } +}); + + +Ext.form.Column = function(config){ + Ext.form.Column.superclass.constructor.call(this, config); +}; + +Ext.extend(Ext.form.Column, Ext.form.Layout, { + + + + defaultAutoCreate : {tag: 'div', cls: 'x-form-ct x-form-column'}, + + onRender : function(ct, position){ + Ext.form.Column.superclass.onRender.call(this, ct, position); + if(this.width){ + this.el.setWidth(this.width); + } + } +}); + + +Ext.form.FieldSet = function(config){ + Ext.form.FieldSet.superclass.constructor.call(this, config); +}; + +Ext.extend(Ext.form.FieldSet, Ext.form.Layout, { + + + + defaultAutoCreate : {tag: 'fieldset', cn: {tag:'legend'}}, + + onRender : function(ct, position){ + Ext.form.FieldSet.superclass.onRender.call(this, ct, position); + if(this.legend){ + this.setLegend(this.legend); + } + }, + + setLegend : function(text){ + if(this.rendered){ + this.el.child('legend').update(text); + } + } +}); + +Ext.form.VTypes = function(){ + var alpha = /^[a-zA-Z_]+$/; + var alphanum = /^[a-zA-Z0-9_]+$/; + var email = /^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/; + var url = /(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i; + + return { + + 'email' : function(v){ + return email.test(v); + }, + + 'emailText' : 'This field should be an e-mail address in the format "user@domain.com"', + + 'emailMask' : /[a-z0-9_\.\-@]/i, + + + 'url' : function(v){ + return url.test(v); + }, + + 'urlText' : 'This field should be a URL in the format "http:/'+'/www.domain.com"', + + + 'alpha' : function(v){ + return alpha.test(v); + }, + + 'alphaText' : 'This field should only contain letters and _', + + 'alphaMask' : /[a-z_]/i, + + + 'alphanum' : function(v){ + return alphanum.test(v); + }, + + 'alphanumText' : 'This field should only contain letters, numbers and _', + + 'alphanumMask' : /[a-z0-9_]/i + }; +}(); + +Ext.LayoutManager = function(container, config){ + Ext.LayoutManager.superclass.constructor.call(this); + this.el = Ext.get(container); + + if(this.el.dom == document.body && Ext.isIE && !config.allowScroll){ + document.body.scroll = "no"; + }else if(this.el.dom != document.body && this.el.getStyle('position') == 'static'){ + this.el.position('relative'); + } + this.id = this.el.id; + this.el.addClass("x-layout-container"); + + this.monitorWindowResize = true; + this.regions = {}; + this.addEvents({ + + "layout" : true, + + "regionresized" : true, + + "regioncollapsed" : true, + + "regionexpanded" : true + }); + this.updating = false; + Ext.EventManager.onWindowResize(this.onWindowResize, this, true); +}; + +Ext.extend(Ext.LayoutManager, Ext.util.Observable, { + + isUpdating : function(){ + return this.updating; + }, + + + beginUpdate : function(){ + this.updating = true; + }, + + + endUpdate : function(noLayout){ + this.updating = false; + if(!noLayout){ + this.layout(); + } + }, + + layout: function(){ + + }, + + onRegionResized : function(region, newSize){ + this.fireEvent("regionresized", region, newSize); + this.layout(); + }, + + onRegionCollapsed : function(region){ + this.fireEvent("regioncollapsed", region); + }, + + onRegionExpanded : function(region){ + this.fireEvent("regionexpanded", region); + }, + + + getViewSize : function(){ + var size; + if(this.el.dom != document.body){ + size = this.el.getSize(); + }else{ + size = {width: Ext.lib.Dom.getViewWidth(), height: Ext.lib.Dom.getViewHeight()}; + } + size.width -= this.el.getBorderWidth("lr")-this.el.getPadding("lr"); + size.height -= this.el.getBorderWidth("tb")-this.el.getPadding("tb"); + return size; + }, + + + getEl : function(){ + return this.el; + }, + + + getRegion : function(target){ + return this.regions[target.toLowerCase()]; + }, + + onWindowResize : function(){ + if(this.monitorWindowResize){ + this.layout(); + } + } +}); + +Ext.BorderLayout = function(container, config){ + config = config || {}; + Ext.BorderLayout.superclass.constructor.call(this, container, config); + this.factory = config.factory || Ext.BorderLayout.RegionFactory; + for(var i = 0, len = this.factory.validRegions.length; i < len; i++) { + var target = this.factory.validRegions[i]; + if(config[target]){ + this.addRegion(target, config[target]); + } + } +}; + +Ext.extend(Ext.BorderLayout, Ext.LayoutManager, { + + addRegion : function(target, config){ + if(!this.regions[target]){ + var r = this.factory.create(target, this, config); + this.bindRegion(target, r); + } + return this.regions[target]; + }, + + + bindRegion : function(name, r){ + this.regions[name] = r; + r.on("visibilitychange", this.layout, this); + r.on("paneladded", this.layout, this); + r.on("panelremoved", this.layout, this); + r.on("invalidated", this.layout, this); + r.on("resized", this.onRegionResized, this); + r.on("collapsed", this.onRegionCollapsed, this); + r.on("expanded", this.onRegionExpanded, this); + }, + + + layout : function(){ + if(this.updating) return; + var size = this.getViewSize(); + var w = size.width, h = size.height; + var centerW = w, centerH = h, centerY = 0, centerX = 0; + + + var rs = this.regions; + var n = rs["north"], s = rs["south"], west = rs["west"], e = rs["east"], c = rs["center"]; + + + + if(n && n.isVisible()){ + var b = n.getBox(); + var m = n.getMargins(); + b.width = w - (m.left+m.right); + b.x = m.left; + b.y = m.top; + centerY = b.height + b.y + m.bottom; + centerH -= centerY; + n.updateBox(this.safeBox(b)); + } + if(s && s.isVisible()){ + var b = s.getBox(); + var m = s.getMargins(); + b.width = w - (m.left+m.right); + b.x = m.left; + var totalHeight = (b.height + m.top + m.bottom); + b.y = h - totalHeight + m.top; + centerH -= totalHeight; + s.updateBox(this.safeBox(b)); + } + if(west && west.isVisible()){ + var b = west.getBox(); + var m = west.getMargins(); + b.height = centerH - (m.top+m.bottom); + b.x = m.left; + b.y = centerY + m.top; + var totalWidth = (b.width + m.left + m.right); + centerX += totalWidth; + centerW -= totalWidth; + west.updateBox(this.safeBox(b)); + } + if(e && e.isVisible()){ + var b = e.getBox(); + var m = e.getMargins(); + b.height = centerH - (m.top+m.bottom); + var totalWidth = (b.width + m.left + m.right); + b.x = w - totalWidth + m.left; + b.y = centerY + m.top; + centerW -= totalWidth; + e.updateBox(this.safeBox(b)); + } + if(c){ + var m = c.getMargins(); + var centerBox = { + x: centerX + m.left, + y: centerY + m.top, + width: centerW - (m.left+m.right), + height: centerH - (m.top+m.bottom) + }; + + + + c.updateBox(this.safeBox(centerBox)); + } + this.el.repaint(); + this.fireEvent("layout", this); + }, + + + safeBox : function(box){ + box.width = Math.max(0, box.width); + box.height = Math.max(0, box.height); + return box; + }, + + + add : function(target, panel){ + target = target.toLowerCase(); + return this.regions[target].add(panel); + }, + + + remove : function(target, panel){ + target = target.toLowerCase(); + return this.regions[target].remove(panel); + }, + + + findPanel : function(panelId){ + var rs = this.regions; + for(var target in rs){ + if(typeof rs[target] != "function"){ + var p = rs[target].getPanel(panelId); + if(p){ + return p; + } + } + } + return null; + }, + + + showPanel : function(panelId) { + var rs = this.regions; + for(var target in rs){ + var r = rs[target]; + if(typeof r != "function"){ + if(r.hasPanel(panelId)){ + return r.showPanel(panelId); + } + } + } + return null; + }, + + + restoreState : function(provider){ + if(!provider){ + provider = Ext.state.Manager; + } + var sm = new Ext.LayoutStateManager(); + sm.init(this, provider); + }, + + + batchAdd : function(regions){ + this.beginUpdate(); + for(var rname in regions){ + var lr = this.regions[rname]; + if(lr){ + this.addTypedPanels(lr, regions[rname]); + } + } + this.endUpdate(); + }, + + + addTypedPanels : function(lr, ps){ + if(typeof ps == 'string'){ + lr.add(new Ext.ContentPanel(ps)); + } + else if(ps instanceof Array){ + for(var i =0, len = ps.length; i < len; i++){ + this.addTypedPanels(lr, ps[i]); + } + } + else if(!ps.events){ + var el = ps.el; + delete ps.el; + lr.add(new Ext.ContentPanel(el || Ext.id(), ps)); + } + else { + lr.add(ps); + } + } +}); + + +Ext.BorderLayout.create = function(config, targetEl){ + var layout = new Ext.BorderLayout(targetEl || document.body, config); + layout.beginUpdate(); + var regions = Ext.BorderLayout.RegionFactory.validRegions; + for(var j = 0, jlen = regions.length; j < jlen; j++){ + var lr = regions[j]; + if(layout.regions[lr] && config[lr].panels){ + var r = layout.regions[lr]; + var ps = config[lr].panels; + layout.addTypedPanels(r, ps); + } + } + layout.endUpdate(); + return layout; +}; + + +Ext.BorderLayout.RegionFactory = { + + validRegions : ["north","south","east","west","center"], + + + create : function(target, mgr, config){ + target = target.toLowerCase(); + if(config.lightweight || config.basic){ + return new Ext.BasicLayoutRegion(mgr, config, target); + } + switch(target){ + case "north": + return new Ext.NorthLayoutRegion(mgr, config); + case "south": + return new Ext.SouthLayoutRegion(mgr, config); + case "east": + return new Ext.EastLayoutRegion(mgr, config); + case "west": + return new Ext.WestLayoutRegion(mgr, config); + case "center": + return new Ext.CenterLayoutRegion(mgr, config); + } + throw 'Layout region "'+target+'" not supported.'; + } +}; + +Ext.BasicLayoutRegion = function(mgr, config, pos, skipConfig){ + this.mgr = mgr; + this.position = pos; + this.events = { + + "beforeremove" : true, + + "invalidated" : true, + + "visibilitychange" : true, + + "paneladded" : true, + + "panelremoved" : true, + + "collapsed" : true, + + "expanded" : true, + + "slideshow" : true, + + "slidehide" : true, + + "panelactivated" : true, + + "resized" : true + }; + + this.panels = new Ext.util.MixedCollection(); + this.panels.getKey = this.getPanelId.createDelegate(this); + this.box = null; + this.activePanel = null; + if(skipConfig !== true){ + this.applyConfig(config); + } +}; + +Ext.extend(Ext.BasicLayoutRegion, Ext.util.Observable, { + getPanelId : function(p){ + return p.getId(); + }, + + applyConfig : function(config){ + this.margins = config.margins || this.margins || {top: 0, left: 0, right:0, bottom: 0}; + this.config = config; + }, + + + resizeTo : function(newSize){ + var el = this.el ? this.el : + (this.activePanel ? this.activePanel.getEl() : null); + if(el){ + switch(this.position){ + case "east": + case "west": + el.setWidth(newSize); + this.fireEvent("resized", this, newSize); + break; + case "north": + case "south": + el.setHeight(newSize); + this.fireEvent("resized", this, newSize); + break; + } + } + }, + + getBox : function(){ + return this.activePanel ? this.activePanel.getEl().getBox(false, true) : null; + }, + + getMargins : function(){ + return this.margins; + }, + + updateBox : function(box){ + this.box = box; + var el = this.activePanel.getEl(); + el.dom.style.left = box.x + "px"; + el.dom.style.top = box.y + "px"; + this.activePanel.setSize(box.width, box.height); + }, + + + getEl : function(){ + return this.activePanel; + }, + + + isVisible : function(){ + return this.activePanel ? true : false; + }, + + setActivePanel : function(panel){ + panel = this.getPanel(panel); + if(this.activePanel && this.activePanel != panel){ + this.activePanel.setActiveState(false); + this.activePanel.getEl().setLeftTop(-10000,-10000); + } + this.activePanel = panel; + panel.setActiveState(true); + if(this.box){ + panel.setSize(this.box.width, this.box.height); + } + this.fireEvent("panelactivated", this, panel); + this.fireEvent("invalidated"); + }, + + + showPanel : function(panel){ + if(panel = this.getPanel(panel)){ + this.setActivePanel(panel); + } + return panel; + }, + + + getActivePanel : function(){ + return this.activePanel; + }, + + + add : function(panel){ + if(arguments.length > 1){ + for(var i = 0, len = arguments.length; i < len; i++) { + this.add(arguments[i]); + } + return null; + } + if(this.hasPanel(panel)){ + this.showPanel(panel); + return panel; + } + var el = panel.getEl(); + if(el.dom.parentNode != this.mgr.el.dom){ + this.mgr.el.dom.appendChild(el.dom); + } + if(panel.setRegion){ + panel.setRegion(this); + } + this.panels.add(panel); + el.setStyle("position", "absolute"); + if(!panel.background){ + this.setActivePanel(panel); + if(this.config.initialSize && this.panels.getCount()==1){ + this.resizeTo(this.config.initialSize); + } + } + this.fireEvent("paneladded", this, panel); + return panel; + }, + + + hasPanel : function(panel){ + if(typeof panel == "object"){ + panel = panel.getId(); + } + return this.getPanel(panel) ? true : false; + }, + + + remove : function(panel, preservePanel){ + panel = this.getPanel(panel); + if(!panel){ + return null; + } + var e = {}; + this.fireEvent("beforeremove", this, panel, e); + if(e.cancel === true){ + return null; + } + var panelId = panel.getId(); + this.panels.removeKey(panelId); + return panel; + }, + + + getPanel : function(id){ + if(typeof id == "object"){ + return id; + } + return this.panels.get(id); + }, + + + getPosition: function(){ + return this.position; + } +}); + +Ext.LayoutRegion = function(mgr, config, pos){ + Ext.LayoutRegion.superclass.constructor.call(this, mgr, config, pos, true); + var dh = Ext.DomHelper; + + this.el = dh.append(mgr.el.dom, {tag: "div", cls: "x-layout-panel x-layout-panel-" + this.position}, true); + + + this.titleEl = dh.append(this.el.dom, {tag: "div", unselectable: "on", cls: "x-unselectable x-layout-panel-hd x-layout-title-"+this.position, children:[ + {tag: "span", cls: "x-unselectable x-layout-panel-hd-text", unselectable: "on", html: " "}, + {tag: "div", cls: "x-unselectable x-layout-panel-hd-tools", unselectable: "on"} + ]}, true); + this.titleEl.enableDisplayMode(); + + this.titleTextEl = this.titleEl.dom.firstChild; + this.tools = Ext.get(this.titleEl.dom.childNodes[1], true); + this.closeBtn = this.createTool(this.tools.dom, "x-layout-close"); + this.closeBtn.enableDisplayMode(); + this.closeBtn.on("click", this.closeClicked, this); + this.closeBtn.hide(); + + this.createBody(config); + this.visible = true; + this.collapsed = false; + + if(config.hideWhenEmpty){ + this.hide(); + this.on("paneladded", this.validateVisibility, this); + this.on("panelremoved", this.validateVisibility, this); + } + this.applyConfig(config); +}; + +Ext.extend(Ext.LayoutRegion, Ext.BasicLayoutRegion, { + + createBody : function(){ + + this.bodyEl = this.el.createChild({tag: "div", cls: "x-layout-panel-body"}); + }, + + applyConfig : function(c){ + if(c.collapsible && this.position != "center" && !this.collapsedEl){ + var dh = Ext.DomHelper; + if(c.titlebar !== false){ + this.collapseBtn = this.createTool(this.tools.dom, "x-layout-collapse-"+this.position); + this.collapseBtn.on("click", this.collapse, this); + this.collapseBtn.enableDisplayMode(); + + if(c.showPin === true || this.showPin){ + this.stickBtn = this.createTool(this.tools.dom, "x-layout-stick"); + this.stickBtn.enableDisplayMode(); + this.stickBtn.on("click", this.expand, this); + this.stickBtn.hide(); + } + } + + this.collapsedEl = dh.append(this.mgr.el.dom, {cls: "x-layout-collapsed x-layout-collapsed-"+this.position, children:[ + {cls: "x-layout-collapsed-tools", children:[{cls: "x-layout-ctools-inner"}]} + ]}, true); + if(c.floatable !== false){ + this.collapsedEl.addClassOnOver("x-layout-collapsed-over"); + this.collapsedEl.on("click", this.collapseClick, this); + } + + if(c.collapsedTitle && (this.position == "north" || this.position== "south")) { + this.collapsedTitleTextEl = dh.append(this.collapsedEl.dom, {tag: "div", cls: "x-unselectable x-layout-panel-hd-text", + id: "message", unselectable: "on", style:{"float":"left"}}); + this.collapsedTitleTextEl.innerHTML = c.collapsedTitle; + } + this.expandBtn = this.createTool(this.collapsedEl.dom.firstChild.firstChild, "x-layout-expand-"+this.position); + this.expandBtn.on("click", this.expand, this); + } + if(this.collapseBtn){ + this.collapseBtn.setVisible(c.collapsible == true); + } + this.cmargins = c.cmargins || this.cmargins || + (this.position == "west" || this.position == "east" ? + {top: 0, left: 2, right:2, bottom: 0} : + {top: 2, left: 0, right:0, bottom: 2}); + this.margins = c.margins || this.margins || {top: 0, left: 0, right:0, bottom: 0}; + this.bottomTabs = c.tabPosition != "top"; + this.autoScroll = c.autoScroll || false; + if(this.autoScroll){ + this.bodyEl.setStyle("overflow", "auto"); + }else{ + this.bodyEl.setStyle("overflow", "hidden"); + } + + if((!c.titlebar && !c.title) || c.titlebar === false){ + this.titleEl.hide(); + }else{ + this.titleEl.show(); + if(c.title){ + this.titleTextEl.innerHTML = c.title; + } + } + + this.duration = c.duration || .30; + this.slideDuration = c.slideDuration || .45; + this.config = c; + if(c.collapsed){ + this.collapse(true); + } + if(c.hidden){ + this.hide(); + } + }, + + isVisible : function(){ + return this.visible; + }, + + + setCollapsedTitle : function(title){ + title = title || " "; + if(this.collapsedTitleTextEl){ + this.collapsedTitleTextEl.innerHTML = title; + } + }, + + getBox : function(){ + var b; + if(!this.collapsed){ + b = this.el.getBox(false, true); + }else{ + b = this.collapsedEl.getBox(false, true); + } + return b; + }, + + getMargins : function(){ + return this.collapsed ? this.cmargins : this.margins; + }, + + highlight : function(){ + this.el.addClass("x-layout-panel-dragover"); + }, + + unhighlight : function(){ + this.el.removeClass("x-layout-panel-dragover"); + }, + + updateBox : function(box){ + this.box = box; + if(!this.collapsed){ + this.el.dom.style.left = box.x + "px"; + this.el.dom.style.top = box.y + "px"; + this.updateBody(box.width, box.height); + }else{ + this.collapsedEl.dom.style.left = box.x + "px"; + this.collapsedEl.dom.style.top = box.y + "px"; + this.collapsedEl.setSize(box.width, box.height); + } + if(this.tabs){ + this.tabs.autoSizeTabs(); + } + }, + + updateBody : function(w, h){ + if(w !== null){ + this.el.setWidth(w); + w -= this.el.getBorderWidth("rl"); + if(this.config.adjustments){ + w += this.config.adjustments[0]; + } + } + if(h !== null){ + this.el.setHeight(h); + h = this.titleEl && this.titleEl.isDisplayed() ? h - (this.titleEl.getHeight()||0) : h; + h -= this.el.getBorderWidth("tb"); + if(this.config.adjustments){ + h += this.config.adjustments[1]; + } + this.bodyEl.setHeight(h); + if(this.tabs){ + h = this.tabs.syncHeight(h); + } + } + if(this.panelSize){ + w = w !== null ? w : this.panelSize.width; + h = h !== null ? h : this.panelSize.height; + } + if(this.activePanel){ + var el = this.activePanel.getEl(); + w = w !== null ? w : el.getWidth(); + h = h !== null ? h : el.getHeight(); + this.panelSize = {width: w, height: h}; + this.activePanel.setSize(w, h); + } + if(Ext.isIE && this.tabs){ + this.tabs.el.repaint(); + } + }, + + + getEl : function(){ + return this.el; + }, + + + hide : function(){ + if(!this.collapsed){ + this.el.dom.style.left = "-2000px"; + this.el.hide(); + }else{ + this.collapsedEl.dom.style.left = "-2000px"; + this.collapsedEl.hide(); + } + this.visible = false; + this.fireEvent("visibilitychange", this, false); + }, + + + show : function(){ + if(!this.collapsed){ + this.el.show(); + }else{ + this.collapsedEl.show(); + } + this.visible = true; + this.fireEvent("visibilitychange", this, true); + }, + + closeClicked : function(){ + if(this.activePanel){ + this.remove(this.activePanel); + } + }, + + collapseClick : function(e){ + if(this.isSlid){ + e.stopPropagation(); + this.slideIn(); + }else{ + e.stopPropagation(); + this.slideOut(); + } + }, + + + collapse : function(skipAnim){ + if(this.collapsed) return; + this.collapsed = true; + if(this.split){ + this.split.el.hide(); + } + if(this.config.animate && skipAnim !== true){ + this.fireEvent("invalidated", this); + this.animateCollapse(); + }else{ + this.el.setLocation(-20000,-20000); + this.el.hide(); + this.collapsedEl.show(); + this.fireEvent("collapsed", this); + this.fireEvent("invalidated", this); + } + }, + + animateCollapse : function(){ + + }, + + + expand : function(e, skipAnim){ + if(e) e.stopPropagation(); + if(!this.collapsed || this.el.hasActiveFx()) return; + if(this.isSlid){ + this.afterSlideIn(); + skipAnim = true; + } + this.collapsed = false; + if(this.config.animate && skipAnim !== true){ + this.animateExpand(); + }else{ + this.el.show(); + if(this.split){ + this.split.el.show(); + } + this.collapsedEl.setLocation(-2000,-2000); + this.collapsedEl.hide(); + this.fireEvent("invalidated", this); + this.fireEvent("expanded", this); + } + }, + + animateExpand : function(){ + + }, + + initTabs : function(){ + this.bodyEl.setStyle("overflow", "hidden"); + var ts = new Ext.TabPanel(this.bodyEl.dom, { + tabPosition: this.bottomTabs ? 'bottom' : 'top', + disableTooltips: this.config.disableTabTips + }); + if(this.config.hideTabs){ + ts.stripWrap.setDisplayed(false); + } + this.tabs = ts; + ts.resizeTabs = this.config.resizeTabs === true; + ts.minTabWidth = this.config.minTabWidth || 40; + ts.maxTabWidth = this.config.maxTabWidth || 250; + ts.preferredTabWidth = this.config.preferredTabWidth || 150; + ts.monitorResize = false; + ts.bodyEl.setStyle("overflow", this.config.autoScroll ? "auto" : "hidden"); + ts.bodyEl.addClass('x-layout-tabs-body'); + this.panels.each(this.initPanelAsTab, this); + }, + + initPanelAsTab : function(panel){ + var ti = this.tabs.addTab(panel.getEl().id, panel.getTitle(), null, + this.config.closeOnTab && panel.isClosable()); + if(panel.tabTip !== undefined){ + ti.setTooltip(panel.tabTip); + } + ti.on("activate", function(){ + this.setActivePanel(panel); + }, this); + if(this.config.closeOnTab){ + ti.on("beforeclose", function(t, e){ + e.cancel = true; + this.remove(panel); + }, this); + } + return ti; + }, + + updatePanelTitle : function(panel, title){ + if(this.activePanel == panel){ + this.updateTitle(title); + } + if(this.tabs){ + var ti = this.tabs.getTab(panel.getEl().id); + ti.setText(title); + if(panel.tabTip !== undefined){ + ti.setTooltip(panel.tabTip); + } + } + }, + + updateTitle : function(title){ + if(this.titleTextEl && !this.config.title){ + this.titleTextEl.innerHTML = (typeof title != "undefined" && title.length > 0 ? title : " "); + } + }, + + setActivePanel : function(panel){ + panel = this.getPanel(panel); + if(this.activePanel && this.activePanel != panel){ + this.activePanel.setActiveState(false); + } + this.activePanel = panel; + panel.setActiveState(true); + if(this.panelSize){ + panel.setSize(this.panelSize.width, this.panelSize.height); + } + if(this.closeBtn){ + this.closeBtn.setVisible(!this.config.closeOnTab && !this.isSlid && panel.isClosable()); + } + this.updateTitle(panel.getTitle()); + if(this.tabs){ + this.fireEvent("invalidated", this); + } + this.fireEvent("panelactivated", this, panel); + }, + + + showPanel : function(panel){ + if(panel = this.getPanel(panel)){ + if(this.tabs){ + var tab = this.tabs.getTab(panel.getEl().id); + if(tab.isHidden()){ + this.tabs.unhideTab(tab.id); + } + tab.activate(); + }else{ + this.setActivePanel(panel); + } + } + return panel; + }, + + + getActivePanel : function(){ + return this.activePanel; + }, + + validateVisibility : function(){ + if(this.panels.getCount() < 1){ + this.updateTitle(" "); + this.closeBtn.hide(); + this.hide(); + }else{ + if(!this.isVisible()){ + this.show(); + } + } + }, + + + add : function(panel){ + if(arguments.length > 1){ + for(var i = 0, len = arguments.length; i < len; i++) { + this.add(arguments[i]); + } + return null; + } + if(this.hasPanel(panel)){ + this.showPanel(panel); + return panel; + } + panel.setRegion(this); + this.panels.add(panel); + if(this.panels.getCount() == 1 && !this.config.alwaysShowTabs){ + this.bodyEl.dom.appendChild(panel.getEl().dom); + if(panel.background !== true){ + this.setActivePanel(panel); + } + this.fireEvent("paneladded", this, panel); + return panel; + } + if(!this.tabs){ + this.initTabs(); + }else{ + this.initPanelAsTab(panel); + } + if(panel.background !== true){ + this.tabs.activate(panel.getEl().id); + } + this.fireEvent("paneladded", this, panel); + return panel; + }, + + + hidePanel : function(panel){ + if(this.tabs && (panel = this.getPanel(panel))){ + this.tabs.hideTab(panel.getEl().id); + } + }, + + + unhidePanel : function(panel){ + if(this.tabs && (panel = this.getPanel(panel))){ + this.tabs.unhideTab(panel.getEl().id); + } + }, + + clearPanels : function(){ + while(this.panels.getCount() > 0){ + this.remove(this.panels.first()); + } + }, + + + remove : function(panel, preservePanel){ + panel = this.getPanel(panel); + if(!panel){ + return null; + } + var e = {}; + this.fireEvent("beforeremove", this, panel, e); + if(e.cancel === true){ + return null; + } + preservePanel = (typeof preservePanel != "undefined" ? preservePanel : (this.config.preservePanels === true || panel.preserve === true)); + var panelId = panel.getId(); + this.panels.removeKey(panelId); + if(preservePanel){ + document.body.appendChild(panel.getEl().dom); + } + if(this.tabs){ + this.tabs.removeTab(panel.getEl().id); + }else if (!preservePanel){ + this.bodyEl.dom.removeChild(panel.getEl().dom); + } + if(this.panels.getCount() == 1 && this.tabs && !this.config.alwaysShowTabs){ + var p = this.panels.first(); + var tempEl = document.createElement("div"); + tempEl.appendChild(p.getEl().dom); + this.bodyEl.update(""); + this.bodyEl.dom.appendChild(p.getEl().dom); + tempEl = null; + this.updateTitle(p.getTitle()); + this.tabs = null; + this.bodyEl.setStyle("overflow", this.config.autoScroll ? "auto" : "hidden"); + this.setActivePanel(p); + } + panel.setRegion(null); + if(this.activePanel == panel){ + this.activePanel = null; + } + if(this.config.autoDestroy !== false && preservePanel !== true){ + try{panel.destroy();}catch(e){} + } + this.fireEvent("panelremoved", this, panel); + return panel; + }, + + + getTabs : function(){ + return this.tabs; + }, + + createTool : function(parentEl, className){ + var btn = Ext.DomHelper.append(parentEl, {tag: "div", cls: "x-layout-tools-button", + children: [{tag: "div", cls: "x-layout-tools-button-inner " + className, html: " "}]}, true); + btn.addClassOnOver("x-layout-tools-button-over"); + return btn; + } +}); + +Ext.SplitLayoutRegion = function(mgr, config, pos, cursor){ + this.cursor = cursor; + Ext.SplitLayoutRegion.superclass.constructor.call(this, mgr, config, pos); +}; + +Ext.extend(Ext.SplitLayoutRegion, Ext.LayoutRegion, { + splitTip : "Drag to resize.", + collapsibleSplitTip : "Drag to resize. Double click to hide.", + useSplitTips : false, + + applyConfig : function(config){ + Ext.SplitLayoutRegion.superclass.applyConfig.call(this, config); + if(config.split){ + if(!this.split){ + var splitEl = Ext.DomHelper.append(this.mgr.el.dom, + {tag: "div", id: this.el.id + "-split", cls: "x-layout-split x-layout-split-"+this.position, html: " "}); + + this.split = new Ext.SplitBar(splitEl, this.el, this.orientation); + this.split.on("moved", this.onSplitMove, this); + this.split.useShim = config.useShim === true; + this.split.getMaximumSize = this[this.position == 'north' || this.position == 'south' ? 'getVMaxSize' : 'getHMaxSize'].createDelegate(this); + if(this.useSplitTips){ + this.split.el.dom.title = config.collapsible ? this.collapsibleSplitTip : this.splitTip; + } + if(config.collapsible){ + this.split.el.on("dblclick", this.collapse, this); + } + } + if(typeof config.minSize != "undefined"){ + this.split.minSize = config.minSize; + } + if(typeof config.maxSize != "undefined"){ + this.split.maxSize = config.maxSize; + } + if(config.hideWhenEmpty || config.hidden || config.collapsed){ + this.hideSplitter(); + } + } + }, + + getHMaxSize : function(){ + var cmax = this.config.maxSize || 10000; + var center = this.mgr.getRegion("center"); + return Math.min(cmax, (this.el.getWidth()+center.getEl().getWidth())-center.getMinWidth()); + }, + + getVMaxSize : function(){ + var cmax = this.config.maxSize || 10000; + var center = this.mgr.getRegion("center"); + return Math.min(cmax, (this.el.getHeight()+center.getEl().getHeight())-center.getMinHeight()); + }, + + onSplitMove : function(split, newSize){ + this.fireEvent("resized", this, newSize); + }, + + + getSplitBar : function(){ + return this.split; + }, + + hide : function(){ + this.hideSplitter(); + Ext.SplitLayoutRegion.superclass.hide.call(this); + }, + + hideSplitter : function(){ + if(this.split){ + this.split.el.setLocation(-2000,-2000); + this.split.el.hide(); + } + }, + + show : function(){ + if(this.split){ + this.split.el.show(); + } + Ext.SplitLayoutRegion.superclass.show.call(this); + }, + + beforeSlide: function(){ + if(Ext.isGecko){ + this.bodyEl.clip(); + if(this.tabs) this.tabs.bodyEl.clip(); + if(this.activePanel){ + this.activePanel.getEl().clip(); + + if(this.activePanel.beforeSlide){ + this.activePanel.beforeSlide(); + } + } + } + }, + + afterSlide : function(){ + if(Ext.isGecko){ + this.bodyEl.unclip(); + if(this.tabs) this.tabs.bodyEl.unclip(); + if(this.activePanel){ + this.activePanel.getEl().unclip(); + if(this.activePanel.afterSlide){ + this.activePanel.afterSlide(); + } + } + } + }, + + initAutoHide : function(){ + if(this.autoHide !== false){ + if(!this.autoHideHd){ + var st = new Ext.util.DelayedTask(this.slideIn, this); + this.autoHideHd = { + "mouseout": function(e){ + if(!e.within(this.el, true)){ + st.delay(500); + } + }, + "mouseover" : function(e){ + st.cancel(); + }, + scope : this + }; + } + this.el.on(this.autoHideHd); + } + }, + + clearAutoHide : function(){ + if(this.autoHide !== false){ + this.el.un("mouseout", this.autoHideHd.mouseout); + this.el.un("mouseover", this.autoHideHd.mouseover); + } + }, + + clearMonitor : function(){ + Ext.get(document).un("click", this.slideInIf, this); + }, + + + slideOut : function(){ + if(this.isSlid || this.el.hasActiveFx()){ + return; + } + this.isSlid = true; + if(this.collapseBtn){ + this.collapseBtn.hide(); + } + this.closeBtnState = this.closeBtn.getStyle('display'); + this.closeBtn.hide(); + if(this.stickBtn){ + this.stickBtn.show(); + } + this.el.show(); + this.el.alignTo(this.collapsedEl, this.getCollapseAnchor()); + this.beforeSlide(); + this.el.setStyle("z-index", 10001); + this.el.slideIn(this.getSlideAnchor(), { + callback: function(){ + this.afterSlide(); + this.initAutoHide(); + Ext.get(document).on("click", this.slideInIf, this); + this.fireEvent("slideshow", this); + }, + scope: this, + block: true + }); + }, + + afterSlideIn : function(){ + this.clearAutoHide(); + this.isSlid = false; + this.clearMonitor(); + this.el.setStyle("z-index", ""); + if(this.collapseBtn){ + this.collapseBtn.show(); + } + this.closeBtn.setStyle('display', this.closeBtnState); + if(this.stickBtn){ + this.stickBtn.hide(); + } + this.fireEvent("slidehide", this); + }, + + slideIn : function(cb){ + if(!this.isSlid || this.el.hasActiveFx()){ + Ext.callback(cb); + return; + } + this.isSlid = false; + this.beforeSlide(); + this.el.slideOut(this.getSlideAnchor(), { + callback: function(){ + this.el.setLeftTop(-10000, -10000); + this.afterSlide(); + this.afterSlideIn(); + Ext.callback(cb); + }, + scope: this, + block: true + }); + }, + + slideInIf : function(e){ + if(!e.within(this.el)){ + this.slideIn(); + } + }, + + animateCollapse : function(){ + this.beforeSlide(); + this.el.setStyle("z-index", 20000); + var anchor = this.getSlideAnchor(); + this.el.slideOut(anchor, { + callback : function(){ + this.el.setStyle("z-index", ""); + this.collapsedEl.slideIn(anchor, {duration:.3}); + this.afterSlide(); + this.el.setLocation(-10000,-10000); + this.el.hide(); + this.fireEvent("collapsed", this); + }, + scope: this, + block: true + }); + }, + + animateExpand : function(){ + this.beforeSlide(); + this.el.alignTo(this.collapsedEl, this.getCollapseAnchor(), this.getExpandAdj()); + this.el.setStyle("z-index", 20000); + this.collapsedEl.hide({ + duration:.1 + }); + this.el.slideIn(this.getSlideAnchor(), { + callback : function(){ + this.el.setStyle("z-index", ""); + this.afterSlide(); + if(this.split){ + this.split.el.show(); + } + this.fireEvent("invalidated", this); + this.fireEvent("expanded", this); + }, + scope: this, + block: true + }); + }, + + anchors : { + "west" : "left", + "east" : "right", + "north" : "top", + "south" : "bottom" + }, + + sanchors : { + "west" : "l", + "east" : "r", + "north" : "t", + "south" : "b" + }, + + canchors : { + "west" : "tl-tr", + "east" : "tr-tl", + "north" : "tl-bl", + "south" : "bl-tl" + }, + + getAnchor : function(){ + return this.anchors[this.position]; + }, + + getCollapseAnchor : function(){ + return this.canchors[this.position]; + }, + + getSlideAnchor : function(){ + return this.sanchors[this.position]; + }, + + getAlignAdj : function(){ + var cm = this.cmargins; + switch(this.position){ + case "west": + return [0, 0]; + break; + case "east": + return [0, 0]; + break; + case "north": + return [0, 0]; + break; + case "south": + return [0, 0]; + break; + } + }, + + getExpandAdj : function(){ + var c = this.collapsedEl, cm = this.cmargins; + switch(this.position){ + case "west": + return [-(cm.right+c.getWidth()+cm.left), 0]; + break; + case "east": + return [cm.right+c.getWidth()+cm.left, 0]; + break; + case "north": + return [0, -(cm.top+cm.bottom+c.getHeight())]; + break; + case "south": + return [0, cm.top+cm.bottom+c.getHeight()]; + break; + } + } +}); + +Ext.CenterLayoutRegion = function(mgr, config){ + Ext.CenterLayoutRegion.superclass.constructor.call(this, mgr, config, "center"); + this.visible = true; + this.minWidth = config.minWidth || 20; + this.minHeight = config.minHeight || 20; +}; + +Ext.extend(Ext.CenterLayoutRegion, Ext.LayoutRegion, { + hide : function(){ + + }, + + show : function(){ + + }, + + getMinWidth: function(){ + return this.minWidth; + }, + + getMinHeight: function(){ + return this.minHeight; + } +}); + + +Ext.NorthLayoutRegion = function(mgr, config){ + Ext.NorthLayoutRegion.superclass.constructor.call(this, mgr, config, "north", "n-resize"); + if(this.split){ + this.split.placement = Ext.SplitBar.TOP; + this.split.orientation = Ext.SplitBar.VERTICAL; + this.split.el.addClass("x-layout-split-v"); + } + var size = config.initialSize || config.height; + if(typeof size != "undefined"){ + this.el.setHeight(size); + } +}; +Ext.extend(Ext.NorthLayoutRegion, Ext.SplitLayoutRegion, { + orientation: Ext.SplitBar.VERTICAL, + getBox : function(){ + if(this.collapsed){ + return this.collapsedEl.getBox(); + } + var box = this.el.getBox(); + if(this.split){ + box.height += this.split.el.getHeight(); + } + return box; + }, + + updateBox : function(box){ + if(this.split && !this.collapsed){ + box.height -= this.split.el.getHeight(); + this.split.el.setLeft(box.x); + this.split.el.setTop(box.y+box.height); + this.split.el.setWidth(box.width); + } + if(this.collapsed){ + this.updateBody(box.width, null); + } + Ext.NorthLayoutRegion.superclass.updateBox.call(this, box); + } +}); + +Ext.SouthLayoutRegion = function(mgr, config){ + Ext.SouthLayoutRegion.superclass.constructor.call(this, mgr, config, "south", "s-resize"); + if(this.split){ + this.split.placement = Ext.SplitBar.BOTTOM; + this.split.orientation = Ext.SplitBar.VERTICAL; + this.split.el.addClass("x-layout-split-v"); + } + var size = config.initialSize || config.height; + if(typeof size != "undefined"){ + this.el.setHeight(size); + } +}; +Ext.extend(Ext.SouthLayoutRegion, Ext.SplitLayoutRegion, { + orientation: Ext.SplitBar.VERTICAL, + getBox : function(){ + if(this.collapsed){ + return this.collapsedEl.getBox(); + } + var box = this.el.getBox(); + if(this.split){ + var sh = this.split.el.getHeight(); + box.height += sh; + box.y -= sh; + } + return box; + }, + + updateBox : function(box){ + if(this.split && !this.collapsed){ + var sh = this.split.el.getHeight(); + box.height -= sh; + box.y += sh; + this.split.el.setLeft(box.x); + this.split.el.setTop(box.y-sh); + this.split.el.setWidth(box.width); + } + if(this.collapsed){ + this.updateBody(box.width, null); + } + Ext.SouthLayoutRegion.superclass.updateBox.call(this, box); + } +}); + +Ext.EastLayoutRegion = function(mgr, config){ + Ext.EastLayoutRegion.superclass.constructor.call(this, mgr, config, "east", "e-resize"); + if(this.split){ + this.split.placement = Ext.SplitBar.RIGHT; + this.split.orientation = Ext.SplitBar.HORIZONTAL; + this.split.el.addClass("x-layout-split-h"); + } + var size = config.initialSize || config.width; + if(typeof size != "undefined"){ + this.el.setWidth(size); + } +}; +Ext.extend(Ext.EastLayoutRegion, Ext.SplitLayoutRegion, { + orientation: Ext.SplitBar.HORIZONTAL, + getBox : function(){ + if(this.collapsed){ + return this.collapsedEl.getBox(); + } + var box = this.el.getBox(); + if(this.split){ + var sw = this.split.el.getWidth(); + box.width += sw; + box.x -= sw; + } + return box; + }, + + updateBox : function(box){ + if(this.split && !this.collapsed){ + var sw = this.split.el.getWidth(); + box.width -= sw; + this.split.el.setLeft(box.x); + this.split.el.setTop(box.y); + this.split.el.setHeight(box.height); + box.x += sw; + } + if(this.collapsed){ + this.updateBody(null, box.height); + } + Ext.EastLayoutRegion.superclass.updateBox.call(this, box); + } +}); + +Ext.WestLayoutRegion = function(mgr, config){ + Ext.WestLayoutRegion.superclass.constructor.call(this, mgr, config, "west", "w-resize"); + if(this.split){ + this.split.placement = Ext.SplitBar.LEFT; + this.split.orientation = Ext.SplitBar.HORIZONTAL; + this.split.el.addClass("x-layout-split-h"); + } + var size = config.initialSize || config.width; + if(typeof size != "undefined"){ + this.el.setWidth(size); + } +}; +Ext.extend(Ext.WestLayoutRegion, Ext.SplitLayoutRegion, { + orientation: Ext.SplitBar.HORIZONTAL, + getBox : function(){ + if(this.collapsed){ + return this.collapsedEl.getBox(); + } + var box = this.el.getBox(); + if(this.split){ + box.width += this.split.el.getWidth(); + } + return box; + }, + + updateBox : function(box){ + if(this.split && !this.collapsed){ + var sw = this.split.el.getWidth(); + box.width -= sw; + this.split.el.setLeft(box.x+box.width); + this.split.el.setTop(box.y); + this.split.el.setHeight(box.height); + } + if(this.collapsed){ + this.updateBody(null, box.height); + } + Ext.WestLayoutRegion.superclass.updateBox.call(this, box); + } +}); + + +Ext.LayoutStateManager = function(layout){ + + this.state = { + north: {}, + south: {}, + east: {}, + west: {} + }; +}; + +Ext.LayoutStateManager.prototype = { + init : function(layout, provider){ + this.provider = provider; + var state = provider.get(layout.id+"-layout-state"); + if(state){ + var wasUpdating = layout.isUpdating(); + if(!wasUpdating){ + layout.beginUpdate(); + } + for(var key in state){ + if(typeof state[key] != "function"){ + var rstate = state[key]; + var r = layout.getRegion(key); + if(r && rstate){ + if(rstate.size){ + r.resizeTo(rstate.size); + } + if(rstate.collapsed == true){ + r.collapse(true); + }else{ + r.expand(null, true); + } + } + } + } + if(!wasUpdating){ + layout.endUpdate(); + } + this.state = state; + } + this.layout = layout; + layout.on("regionresized", this.onRegionResized, this); + layout.on("regioncollapsed", this.onRegionCollapsed, this); + layout.on("regionexpanded", this.onRegionExpanded, this); + }, + + storeState : function(){ + this.provider.set(this.layout.id+"-layout-state", this.state); + }, + + onRegionResized : function(region, newSize){ + this.state[region.getPosition()].size = newSize; + this.storeState(); + }, + + onRegionCollapsed : function(region){ + this.state[region.getPosition()].collapsed = true; + this.storeState(); + }, + + onRegionExpanded : function(region){ + this.state[region.getPosition()].collapsed = false; + this.storeState(); + } +}; + +Ext.ContentPanel = function(el, config, content){ + if(el.autoCreate){ + config = el; + el = Ext.id(); + } + this.el = Ext.get(el); + if(!this.el && config && config.autoCreate){ + if(typeof config.autoCreate == "object"){ + if(!config.autoCreate.id){ + config.autoCreate.id = config.id||el; + } + this.el = Ext.DomHelper.append(document.body, + config.autoCreate, true); + }else{ + this.el = Ext.DomHelper.append(document.body, + {tag: "div", cls: "x-layout-inactive-content", id: config.id||el}, true); + } + } + this.closable = false; + this.loaded = false; + this.active = false; + if(typeof config == "string"){ + this.title = config; + }else{ + Ext.apply(this, config); + } + if(this.resizeEl){ + this.resizeEl = Ext.get(this.resizeEl, true); + }else{ + this.resizeEl = this.el; + } + this.addEvents({ + + "activate" : true, + + "deactivate" : true, + + + "resize" : true + }); + if(this.autoScroll){ + this.resizeEl.setStyle("overflow", "auto"); + } + content = content || this.content; + if(content){ + this.setContent(content); + } + if(config && config.url){ + this.setUrl(this.url, this.params, this.loadOnce); + } + Ext.ContentPanel.superclass.constructor.call(this); +}; + +Ext.extend(Ext.ContentPanel, Ext.util.Observable, { + tabTip:'', + setRegion : function(region){ + this.region = region; + if(region){ + this.el.replaceClass("x-layout-inactive-content", "x-layout-active-content"); + }else{ + this.el.replaceClass("x-layout-active-content", "x-layout-inactive-content"); + } + }, + + + getToolbar : function(){ + return this.toolbar; + }, + + setActiveState : function(active){ + this.active = active; + if(!active){ + this.fireEvent("deactivate", this); + }else{ + this.fireEvent("activate", this); + } + }, + + setContent : function(content, loadScripts){ + this.el.update(content, loadScripts); + }, + + ignoreResize : function(w, h){ + if(this.lastSize && this.lastSize.width == w && this.lastSize.height == h){ + return true; + }else{ + this.lastSize = {width: w, height: h}; + return false; + } + }, + + getUpdateManager : function(){ + return this.el.getUpdateManager(); + }, + + load : function(){ + var um = this.el.getUpdateManager(); + um.update.apply(um, arguments); + return this; + }, + + + + setUrl : function(url, params, loadOnce){ + if(this.refreshDelegate){ + this.removeListener("activate", this.refreshDelegate); + } + this.refreshDelegate = this._handleRefresh.createDelegate(this, [url, params, loadOnce]); + this.on("activate", this.refreshDelegate); + return this.el.getUpdateManager(); + }, + + _handleRefresh : function(url, params, loadOnce){ + if(!loadOnce || !this.loaded){ + var updater = this.el.getUpdateManager(); + updater.update(url, params, this._setLoaded.createDelegate(this)); + } + }, + + _setLoaded : function(){ + this.loaded = true; + }, + + + getId : function(){ + return this.el.id; + }, + + + getEl : function(){ + return this.el; + }, + + adjustForComponents : function(width, height){ + if(this.resizeEl != this.el){ + width -= this.el.getFrameWidth('lr'); + height -= this.el.getFrameWidth('tb'); + } + if(this.toolbar){ + var te = this.toolbar.getEl(); + height -= te.getHeight(); + te.setWidth(width); + } + if(this.adjustments){ + width += this.adjustments[0]; + height += this.adjustments[1]; + } + return {"width": width, "height": height}; + }, + + setSize : function(width, height){ + if(this.fitToFrame && !this.ignoreResize(width, height)){ + if(this.fitContainer && this.resizeEl != this.el){ + this.el.setSize(width, height); + } + var size = this.adjustForComponents(width, height); + this.resizeEl.setSize(this.autoWidth ? "auto" : size.width, this.autoHeight ? "auto" : size.height); + this.fireEvent('resize', this, size.width, size.height); + } + }, + + + getTitle : function(){ + return this.title; + }, + + + setTitle : function(title){ + this.title = title; + if(this.region){ + this.region.updatePanelTitle(this, title); + } + }, + + + isClosable : function(){ + return this.closable; + }, + + beforeSlide : function(){ + this.el.clip(); + this.resizeEl.clip(); + }, + + afterSlide : function(){ + this.el.unclip(); + this.resizeEl.unclip(); + }, + + + refresh : function(){ + if(this.refreshDelegate){ + this.loaded = false; + this.refreshDelegate(); + } + }, + + + destroy : function(){ + this.el.removeAllListeners(); + var tempEl = document.createElement("span"); + tempEl.appendChild(this.el.dom); + tempEl.innerHTML = ""; + this.el.remove(); + this.el = null; + } +}); + + +Ext.GridPanel = function(grid, config){ + this.wrapper = Ext.DomHelper.append(document.body, + {tag: "div", cls: "x-layout-grid-wrapper x-layout-inactive-content"}, true); + this.wrapper.dom.appendChild(grid.getGridEl().dom); + Ext.GridPanel.superclass.constructor.call(this, this.wrapper, config); + if(this.toolbar){ + this.toolbar.el.insertBefore(this.wrapper.dom.firstChild); + } + grid.monitorWindowResize = false; + grid.autoHeight = false; + grid.autoWidth = false; + this.grid = grid; + this.grid.getGridEl().replaceClass("x-layout-inactive-content", "x-layout-component-panel"); +}; + +Ext.extend(Ext.GridPanel, Ext.ContentPanel, { + getId : function(){ + return this.grid.id; + }, + + + getGrid : function(){ + return this.grid; + }, + + setSize : function(width, height){ + if(!this.ignoreResize(width, height)){ + var grid = this.grid; + var size = this.adjustForComponents(width, height); + grid.getGridEl().setSize(size.width, size.height); + grid.autoSize(); + } + }, + + beforeSlide : function(){ + this.grid.getView().scroller.clip(); + }, + + afterSlide : function(){ + this.grid.getView().scroller.unclip(); + }, + + destroy : function(){ + this.grid.destroy(); + delete this.grid; + Ext.GridPanel.superclass.destroy.call(this); + } +}); + + + +Ext.NestedLayoutPanel = function(layout, config){ + Ext.NestedLayoutPanel.superclass.constructor.call(this, layout.getEl(), config); + layout.monitorWindowResize = false; + this.layout = layout; + this.layout.getEl().addClass("x-layout-nested-layout"); +}; + +Ext.extend(Ext.NestedLayoutPanel, Ext.ContentPanel, { + + setSize : function(width, height){ + if(!this.ignoreResize(width, height)){ + var size = this.adjustForComponents(width, height); + var el = this.layout.getEl(); + el.setSize(size.width, size.height); + var touch = el.dom.offsetWidth; + this.layout.layout(); + + if(Ext.isIE && !this.initialized){ + this.initialized = true; + this.layout.layout(); + } + } + }, + + + getLayout : function(){ + return this.layout; + } +}); + +Ext.ScrollPanel = function(el, config, content){ + config = config || {}; + config.fitToFrame = true; + Ext.ScrollPanel.superclass.constructor.call(this, el, config, content); + + this.el.dom.style.overflow = "hidden"; + var wrap = this.el.wrap({cls: "x-scroller x-layout-inactive-content"}); + this.el.removeClass("x-layout-inactive-content"); + this.el.on("mousewheel", this.onWheel, this); + + var up = wrap.createChild({cls: "x-scroller-up", html: " "}, this.el.dom); + var down = wrap.createChild({cls: "x-scroller-down", html: " "}); + up.unselectable(); down.unselectable(); + up.on("click", this.scrollUp, this); + down.on("click", this.scrollDown, this); + up.addClassOnOver("x-scroller-btn-over"); + down.addClassOnOver("x-scroller-btn-over"); + up.addClassOnClick("x-scroller-btn-click"); + down.addClassOnClick("x-scroller-btn-click"); + this.adjustments = [0, -(up.getHeight() + down.getHeight())]; + + this.resizeEl = this.el; + this.el = wrap; this.up = up; this.down = down; +}; + +Ext.extend(Ext.ScrollPanel, Ext.ContentPanel, { + increment : 100, + wheelIncrement : 5, + scrollUp : function(){ + this.resizeEl.scroll("up", this.increment, {callback: this.afterScroll, scope: this}); + }, + + scrollDown : function(){ + this.resizeEl.scroll("down", this.increment, {callback: this.afterScroll, scope: this}); + }, + + afterScroll : function(){ + var el = this.resizeEl; + var t = el.dom.scrollTop, h = el.dom.scrollHeight, ch = el.dom.clientHeight; + this.up[t == 0 ? "addClass" : "removeClass"]("x-scroller-btn-disabled"); + this.down[h - t <= ch ? "addClass" : "removeClass"]("x-scroller-btn-disabled"); + }, + + setSize : function(){ + Ext.ScrollPanel.superclass.setSize.apply(this, arguments); + this.afterScroll(); + }, + + onWheel : function(e){ + var d = e.getWheelDelta(); + this.resizeEl.dom.scrollTop -= (d*this.wheelIncrement); + this.afterScroll(); + e.stopEvent(); + }, + + setContent : function(content, loadScripts){ + this.resizeEl.update(content, loadScripts); + } + +}); + +Ext.ReaderLayout = function(config, renderTo){ + var c = config || {size:{}}; + Ext.ReaderLayout.superclass.constructor.call(this, renderTo || document.body, { + north: c.north !== false ? Ext.apply({ + split:false, + initialSize: 32, + titlebar: false + }, c.north) : false, + west: c.west !== false ? Ext.apply({ + split:true, + initialSize: 200, + minSize: 175, + maxSize: 400, + titlebar: true, + collapsible: true, + animate: true, + margins:{left:5,right:0,bottom:5,top:5}, + cmargins:{left:5,right:5,bottom:5,top:5} + }, c.west) : false, + east: c.east !== false ? Ext.apply({ + split:true, + initialSize: 200, + minSize: 175, + maxSize: 400, + titlebar: true, + collapsible: true, + animate: true, + margins:{left:0,right:5,bottom:5,top:5}, + cmargins:{left:5,right:5,bottom:5,top:5} + }, c.east) : false, + center: Ext.apply({ + tabPosition: 'top', + autoScroll:false, + closeOnTab: true, + titlebar:false, + margins:{left:c.west!==false ? 0 : 5,right:c.east!==false ? 0 : 5,bottom:5,top:2} + }, c.center) + }); + + this.el.addClass('x-reader'); + + this.beginUpdate(); + + var inner = new Ext.BorderLayout(Ext.get(document.body).createChild(), { + south: c.preview !== false ? Ext.apply({ + split:true, + initialSize: 200, + minSize: 100, + autoScroll:true, + collapsible:true, + titlebar: true, + cmargins:{top:5,left:0, right:0, bottom:0} + }, c.preview) : false, + center: Ext.apply({ + autoScroll:false, + titlebar:false, + minHeight:200 + }, c.listView) + }); + this.add('center', new Ext.NestedLayoutPanel(inner, + Ext.apply({title: c.mainTitle || '',tabTip:''},c.innerPanelCfg))); + + this.endUpdate(); + + this.regions.preview = inner.getRegion('south'); + this.regions.listView = inner.getRegion('center'); +}; + +Ext.extend(Ext.ReaderLayout, Ext.BorderLayout); + +Ext.grid.Grid = function(container, config){ + + this.container = Ext.get(container); + this.container.update(""); + this.container.setStyle("overflow", "hidden"); + this.container.addClass('x-grid-container'); + + this.id = this.container.id; + + Ext.apply(this, config); + + if(this.ds){ + this.dataSource = this.ds; + delete this.ds; + } + if(this.cm){ + this.colModel = this.cm; + delete this.cm; + } + if(this.sm){ + this.selModel = this.sm; + delete this.sm; + } + + if(this.width){ + this.container.setWidth(this.width); + } + + if(this.height){ + this.container.setHeight(this.height); + } + + this.addEvents({ + + + "click" : true, + + "dblclick" : true, + + "contextmenu" : true, + + "mousedown" : true, + + "mouseup" : true, + + "mouseover" : true, + + "mouseout" : true, + + "keypress" : true, + + "keydown" : true, + + + + + "cellclick" : true, + + "celldblclick" : true, + + "rowclick" : true, + + "rowdblclick" : true, + + "headerclick" : true, + + "headerdblclick" : true, + + "rowcontextmenu" : true, + + "cellcontextmenu" : true, + + "headercontextmenu" : true, + + "bodyscroll" : true, + + "columnresize" : true, + + "columnmove" : true, + + "startdrag" : true, + + "enddrag" : true, + + "dragdrop" : true, + + "dragover" : true, + + "dragenter" : true, + + "dragout" : true, + + render : true + }); + + Ext.grid.Grid.superclass.constructor.call(this); +}; +Ext.extend(Ext.grid.Grid, Ext.util.Observable, { + + minColumnWidth : 25, + + + autoSizeColumns : false, + + + autoSizeHeaders : true, + + + monitorWindowResize : true, + + + maxRowsToMeasure : 0, + + + trackMouseOver : true, + + + enableDragDrop : false, + + + enableColumnMove : true, + + + enableColumnHide : true, + + + enableRowHeightSync : false, + + + stripeRows : true, + + + autoHeight : false, + + + autoExpandColumn : false, + + + autoExpandMin : 50, + + + autoExpandMax : 1000, + + + view : null, + + + loadMask : false, + + + rendered : false, + + + + + render : function(){ + var c = this.container; + + if((!c.dom.offsetHeight || c.dom.offsetHeight < 20) || c.getStyle("height") == "auto"){ + this.autoHeight = true; + } + var view = this.getView(); + view.init(this); + + c.on("click", this.onClick, this); + c.on("dblclick", this.onDblClick, this); + c.on("contextmenu", this.onContextMenu, this); + c.on("keydown", this.onKeyDown, this); + + this.relayEvents(c, ["mousedown","mouseup","mouseover","mouseout","keypress"]); + + this.getSelectionModel().init(this); + + view.render(); + + if(this.loadMask){ + this.loadMask = new Ext.LoadMask(this.container, + Ext.apply({store:this.dataSource}, this.loadMask)); + } + this.rendered = true; + this.fireEvent('render', this); + return this; + }, + + + reconfigure : function(dataSource, colModel){ + if(this.loadMask){ + this.loadMask.destroy(); + this.loadMask = new Ext.LoadMask(this.container, + Ext.apply({store:dataSource}, this.loadMask)); + } + this.view.bind(dataSource, colModel); + this.dataSource = dataSource; + this.colModel = colModel; + this.view.refresh(true); + }, + + + onKeyDown : function(e){ + this.fireEvent("keydown", e); + }, + + + destroy : function(removeEl, keepListeners){ + if(this.loadMask){ + this.loadMask.destroy(); + } + var c = this.container; + c.removeAllListeners(); + this.view.destroy(); + this.colModel.purgeListeners(); + if(!keepListeners){ + this.purgeListeners(); + } + c.update(""); + if(removeEl === true){ + c.remove(); + } + }, + + + processEvent : function(name, e){ + this.fireEvent(name, e); + var t = e.getTarget(); + var v = this.view; + var header = v.findHeaderIndex(t); + if(header !== false){ + this.fireEvent("header" + name, this, header, e); + }else{ + var row = v.findRowIndex(t); + var cell = v.findCellIndex(t); + if(row !== false){ + this.fireEvent("row" + name, this, row, e); + if(cell !== false){ + this.fireEvent("cell" + name, this, row, cell, e); + } + } + } + }, + + + onClick : function(e){ + this.processEvent("click", e); + }, + + + onContextMenu : function(e, t){ + this.processEvent("contextmenu", e); + }, + + + onDblClick : function(e){ + this.processEvent("dblclick", e); + }, + + + walkCells : function(row, col, step, fn, scope){ + var cm = this.colModel, clen = cm.getColumnCount(); + var ds = this.dataSource, rlen = ds.getCount(), first = true; + if(step < 0){ + if(col < 0){ + row--; + first = false; + } + while(row >= 0){ + if(!first){ + col = clen-1; + } + first = false; + while(col >= 0){ + if(fn.call(scope || this, row, col, cm) === true){ + return [row, col]; + } + col--; + } + row--; + } + } else { + if(col >= clen){ + row++; + first = false; + } + while(row < rlen){ + if(!first){ + col = 0; + } + first = false; + while(col < clen){ + if(fn.call(scope || this, row, col, cm) === true){ + return [row, col]; + } + col++; + } + row++; + } + } + return null; + }, + + + getSelections : function(){ + return this.selModel.getSelections(); + }, + + + autoSize : function(){ + if(this.rendered){ + this.view.layout(); + if(this.view.adjustForScroll){ + this.view.adjustForScroll(); + } + } + }, + + + getGridEl : function(){ + return this.container; + }, + + + stopEditing : function(){}, + + + getSelectionModel : function(){ + if(!this.selModel){ + this.selModel = new Ext.grid.RowSelectionModel(); + } + return this.selModel; + }, + + + getDataSource : function(){ + return this.dataSource; + }, + + + getColumnModel : function(){ + return this.colModel; + }, + + + getView : function(){ + if(!this.view){ + this.view = new Ext.grid.GridView(this.viewConfig); + } + return this.view; + }, + + getDragDropText : function(){ + var count = this.selModel.getCount(); + return String.format(this.ddText, count, count == 1 ? '' : 's'); + } +}); + +Ext.grid.Grid.prototype.ddText = "{0} selected row{1}"; +Ext.grid.AbstractGridView = function(){ + this.grid = null; + + this.events = { + "beforerowremoved" : true, + "beforerowsinserted" : true, + "beforerefresh" : true, + "rowremoved" : true, + "rowsinserted" : true, + "rowupdated" : true, + "refresh" : true + }; + Ext.grid.AbstractGridView.superclass.constructor.call(this); +}; + +Ext.extend(Ext.grid.AbstractGridView, Ext.util.Observable, { + rowClass : "x-grid-row", + cellClass : "x-grid-cell", + tdClass : "x-grid-td", + hdClass : "x-grid-hd", + splitClass : "x-grid-hd-split", + + init: function(grid){ + this.grid = grid; + var cid = this.grid.getGridEl().id; + this.colSelector = "#" + cid + " ." + this.cellClass + "-"; + this.tdSelector = "#" + cid + " ." + this.tdClass + "-"; + this.hdSelector = "#" + cid + " ." + this.hdClass + "-"; + this.splitSelector = "#" + cid + " ." + this.splitClass + "-"; + }, + + getColumnRenderers : function(){ + var renderers = []; + var cm = this.grid.colModel; + var colCount = cm.getColumnCount(); + for(var i = 0; i < colCount; i++){ + renderers[i] = cm.getRenderer(i); + } + return renderers; + }, + + getColumnIds : function(){ + var ids = []; + var cm = this.grid.colModel; + var colCount = cm.getColumnCount(); + for(var i = 0; i < colCount; i++){ + ids[i] = cm.getColumnId(i); + } + return ids; + }, + + getDataIndexes : function(){ + if(!this.indexMap){ + this.indexMap = this.buildIndexMap(); + } + return this.indexMap.colToData; + }, + + getColumnIndexByDataIndex : function(dataIndex){ + if(!this.indexMap){ + this.indexMap = this.buildIndexMap(); + } + return this.indexMap.dataToCol[dataIndex]; + }, + + + setCSSStyle : function(colIndex, name, value){ + var selector = "#" + this.grid.id + " .x-grid-col-" + colIndex; + Ext.util.CSS.updateRule(selector, name, value); + }, + + generateRules : function(cm){ + var ruleBuf = [], rulesId = this.grid.id + '-cssrules'; + Ext.util.CSS.removeStyleSheet(rulesId); + for(var i = 0, len = cm.getColumnCount(); i < len; i++){ + var cid = cm.getColumnId(i); + ruleBuf.push(this.colSelector, cid, " {\n", cm.config[i].css, "}\n", + this.tdSelector, cid, " {\n}\n", + this.hdSelector, cid, " {\n}\n", + this.splitSelector, cid, " {\n}\n"); + } + return Ext.util.CSS.createStyleSheet(ruleBuf.join(""), rulesId); + } +}); + +Ext.grid.GridView = function(config){ + Ext.grid.GridView.superclass.constructor.call(this); + this.el = null; + + Ext.apply(this, config); +}; + +Ext.extend(Ext.grid.GridView, Ext.grid.AbstractGridView, { + + + rowClass : "x-grid-row", + + cellClass : "x-grid-col", + + tdClass : "x-grid-td", + + hdClass : "x-grid-hd", + + splitClass : "x-grid-split", + + sortClasses : ["sort-asc", "sort-desc"], + + enableMoveAnim : false, + + hlColor: "C3DAF9", + + dh : Ext.DomHelper, + + fly : Ext.Element.fly, + + css : Ext.util.CSS, + + borderWidth: 1, + + splitOffset: 3, + + scrollIncrement : 22, + + cellRE: /(?:.*?)x-grid-(?:hd|cell|csplit)-(?:[\d]+)-([\d]+)(?:.*?)/, + + findRE: /\s?(?:x-grid-hd|x-grid-col|x-grid-csplit)\s/, + + bind : function(ds, cm){ + if(this.ds){ + this.ds.un("load", this.onLoad, this); + this.ds.un("datachanged", this.onDataChange, this); + this.ds.un("add", this.onAdd, this); + this.ds.un("remove", this.onRemove, this); + this.ds.un("update", this.onUpdate, this); + this.ds.un("clear", this.onClear, this); + } + if(ds){ + ds.on("load", this.onLoad, this); + ds.on("datachanged", this.onDataChange, this); + ds.on("add", this.onAdd, this); + ds.on("remove", this.onRemove, this); + ds.on("update", this.onUpdate, this); + ds.on("clear", this.onClear, this); + } + this.ds = ds; + + if(this.cm){ + this.cm.un("widthchange", this.onColWidthChange, this); + this.cm.un("headerchange", this.onHeaderChange, this); + this.cm.un("hiddenchange", this.onHiddenChange, this); + this.cm.un("columnmoved", this.onColumnMove, this); + this.cm.un("columnlockchange", this.onColumnLock, this); + } + if(cm){ + this.generateRules(cm); + cm.on("widthchange", this.onColWidthChange, this); + cm.on("headerchange", this.onHeaderChange, this); + cm.on("hiddenchange", this.onHiddenChange, this); + cm.on("columnmoved", this.onColumnMove, this); + cm.on("columnlockchange", this.onColumnLock, this); + } + this.cm = cm; + }, + + init: function(grid){ + Ext.grid.GridView.superclass.init.call(this, grid); + + this.bind(grid.dataSource, grid.colModel); + + grid.on("headerclick", this.handleHeaderClick, this); + + if(grid.trackMouseOver){ + grid.on("mouseover", this.onRowOver, this); + grid.on("mouseout", this.onRowOut, this); + } + grid.cancelTextSelection = function(){}; + this.gridId = grid.id; + + var tpls = this.templates || {}; + + if(!tpls.master){ + tpls.master = new Ext.Template( + '
    ', + '
    ', + '
    ', + '
    ', + '
    {lockedHeader}
    ', + '
    {lockedBody}
    ', + "
    ", + '
    ', + '
    {header}
    ', + '
    {body}
    ', + "
    ", + '
    ', + '', + '
     
    ', + "
    " + ); + tpls.master.disableformats = true; + } + + if(!tpls.header){ + tpls.header = new Ext.Template( + '', + '{cells}', + "
    {splits}" + ); + tpls.header.disableformats = true; + } + tpls.header.compile(); + + if(!tpls.hcell){ + tpls.hcell = new Ext.Template( + '
    ', + '
    {value}
    ', + "
    " + ); + tpls.hcell.disableFormats = true; + } + tpls.hcell.compile(); + + if(!tpls.hsplit){ + tpls.hsplit = new Ext.Template('
     
    '); + tpls.hsplit.disableFormats = true; + } + tpls.hsplit.compile(); + + if(!tpls.body){ + tpls.body = new Ext.Template( + '', + "{rows}", + "
    " + ); + tpls.body.disableFormats = true; + } + tpls.body.compile(); + + if(!tpls.row){ + tpls.row = new Ext.Template('{cells}'); + tpls.row.disableFormats = true; + } + tpls.row.compile(); + + if(!tpls.cell){ + tpls.cell = new Ext.Template( + '', + '
    {value}
    ', + "" + ); + tpls.cell.disableFormats = true; + } + tpls.cell.compile(); + + this.templates = tpls; + }, + + + onColWidthChange : function(){ + this.updateColumns.apply(this, arguments); + }, + onHeaderChange : function(){ + this.updateHeaders.apply(this, arguments); + }, + onHiddenChange : function(){ + this.handleHiddenChange.apply(this, arguments); + }, + onColumnMove : function(){ + this.handleColumnMove.apply(this, arguments); + }, + onColumnLock : function(){ + this.handleLockChange.apply(this, arguments); + }, + + onDataChange : function(){ + this.refresh(); + this.updateHeaderSortState(); + }, + + onClear : function(){ + this.refresh(); + }, + + onUpdate : function(ds, record){ + this.refreshRow(record); + }, + + refreshRow : function(record){ + var ds = this.ds, index; + if(typeof record == 'number'){ + index = record; + record = ds.getAt(index); + }else{ + index = ds.indexOf(record); + } + this.insertRows(ds, index, index, true); + this.onRemove(ds, record, index+1, true); + this.syncRowHeights(index, index); + this.layout(); + this.fireEvent("rowupdated", this, index, record); + }, + + onAdd : function(ds, records, index){ + this.insertRows(ds, index, index + (records.length-1)); + }, + + onRemove : function(ds, record, index, isUpdate){ + if(isUpdate !== true){ + this.fireEvent("beforerowremoved", this, index, record); + } + var bt = this.getBodyTable(), lt = this.getLockedTable(); + if(bt.rows[index]){ + bt.firstChild.removeChild(bt.rows[index]); + } + if(lt.rows[index]){ + lt.firstChild.removeChild(lt.rows[index]); + } + if(isUpdate !== true){ + this.stripeRows(index); + this.syncRowHeights(index, index); + this.layout(); + this.fireEvent("rowremoved", this, index, record); + } + }, + + onLoad : function(){ + this.scrollToTop(); + }, + + + scrollToTop : function(){ + if(this.scroller){ + this.scroller.dom.scrollTop = 0; + this.syncScroll(); + } + }, + + + getHeaderPanel : function(doShow){ + if(doShow){ + this.headerPanel.show(); + } + return this.headerPanel; + }, + + + getFooterPanel : function(doShow){ + if(doShow){ + this.footerPanel.show(); + } + return this.footerPanel; + }, + + initElements : function(){ + var E = Ext.Element; + var el = this.grid.getGridEl().dom.firstChild; + var cs = el.childNodes; + + this.el = new E(el); + this.headerPanel = new E(el.firstChild); + this.headerPanel.enableDisplayMode("block"); + + this.scroller = new E(cs[1]); + this.scrollSizer = new E(this.scroller.dom.firstChild); + + this.lockedWrap = new E(cs[2]); + this.lockedHd = new E(this.lockedWrap.dom.firstChild); + this.lockedBody = new E(this.lockedWrap.dom.childNodes[1]); + + this.mainWrap = new E(cs[3]); + this.mainHd = new E(this.mainWrap.dom.firstChild); + this.mainBody = new E(this.mainWrap.dom.childNodes[1]); + + this.footerPanel = new E(cs[4]); + this.footerPanel.enableDisplayMode("block"); + + this.focusEl = new E(cs[5]); + this.focusEl.swallowEvent("click", true); + this.resizeProxy = new E(cs[6]); + + this.headerSelector = String.format( + '#{0} td.x-grid-hd, #{1} td.x-grid-hd', + this.lockedHd.id, this.mainHd.id + ); + + this.splitterSelector = String.format( + '#{0} div.x-grid-split, #{1} div.x-grid-split', + this.lockedHd.id, this.mainHd.id + ); + }, + + getHeaderCell : function(index){ + return Ext.DomQuery.select(this.headerSelector)[index]; + }, + + getHeaderCellMeasure : function(index){ + return this.getHeaderCell(index).firstChild; + }, + + getHeaderCellText : function(index){ + return this.getHeaderCell(index).firstChild.firstChild; + }, + + getLockedTable : function(){ + return this.lockedBody.dom.firstChild; + }, + + getBodyTable : function(){ + return this.mainBody.dom.firstChild; + }, + + getLockedRow : function(index){ + return this.getLockedTable().rows[index]; + }, + + getRow : function(index){ + return this.getBodyTable().rows[index]; + }, + + getRowComposite : function(index){ + if(!this.rowEl){ + this.rowEl = new Ext.CompositeElementLite(); + } + var els = [], lrow, mrow; + if(lrow = this.getLockedRow(index)){ + els.push(lrow); + } + if(mrow = this.getRow(index)){ + els.push(mrow); + } + this.rowEl.elements = els; + return this.rowEl; + }, + + getCell : function(rowIndex, colIndex){ + var locked = this.cm.getLockedCount(); + var source; + if(colIndex < locked){ + source = this.lockedBody.dom.firstChild; + }else{ + source = this.mainBody.dom.firstChild; + colIndex -= locked; + } + return source.rows[rowIndex].childNodes[colIndex]; + }, + + getCellText : function(rowIndex, colIndex){ + return this.getCell(rowIndex, colIndex).firstChild.firstChild; + }, + + getCellBox : function(cell){ + var b = this.fly(cell).getBox(); + if(Ext.isOpera){ + b.y = cell.offsetTop + this.mainBody.getY(); + } + return b; + }, + + getCellIndex : function(cell){ + var id = String(cell.className).match(this.cellRE); + if(id){ + return parseInt(id[1], 10); + } + return 0; + }, + + findHeaderIndex : function(n){ + var r = Ext.fly(n).findParent("td." + this.hdClass, 6); + return r ? this.getCellIndex(r) : false; + }, + + findHeaderCell : function(n){ + var r = Ext.fly(n).findParent("td." + this.hdClass, 6); + return r ? r : false; + }, + + findRowIndex : function(n){ + if(!n){ + return false; + } + var r = Ext.fly(n).findParent("tr." + this.rowClass, 6); + return r ? r.rowIndex : false; + }, + + findCellIndex : function(node){ + var stop = this.el.dom; + while(node && node != stop){ + if(this.findRE.test(node.className)){ + return this.getCellIndex(node); + } + node = node.parentNode; + } + return false; + }, + + getColumnId : function(index){ + return this.cm.getColumnId(index); + }, + + getSplitters : function(){ + if(this.splitterSelector){ + return Ext.DomQuery.select(this.splitterSelector); + }else{ + return null; + } + }, + + getSplitter : function(index){ + return this.getSplitters()[index]; + }, + + onRowOver : function(e, t){ + var row; + if((row = this.findRowIndex(t)) !== false){ + this.getRowComposite(row).addClass("x-grid-row-over"); + } + }, + + onRowOut : function(e, t){ + var row; + if((row = this.findRowIndex(t)) !== false && row !== this.findRowIndex(e.getRelatedTarget())){ + this.getRowComposite(row).removeClass("x-grid-row-over"); + } + }, + + renderHeaders : function(){ + var cm = this.cm; + var ct = this.templates.hcell, ht = this.templates.header, st = this.templates.hsplit; + var cb = [], lb = [], sb = [], lsb = [], p = {}; + for(var i = 0, len = cm.getColumnCount(); i < len; i++){ + p.cellId = "x-grid-hd-0-" + i; + p.splitId = "x-grid-csplit-0-" + i; + p.id = cm.getColumnId(i); + p.title = cm.getColumnTooltip(i) || ""; + p.value = cm.getColumnHeader(i) || ""; + p.style = (this.grid.enableColumnResize === false || !cm.isResizable(i) || cm.isFixed(i)) ? 'cursor:default' : ''; + if(!cm.isLocked(i)){ + cb[cb.length] = ct.apply(p); + sb[sb.length] = st.apply(p); + }else{ + lb[lb.length] = ct.apply(p); + lsb[lsb.length] = st.apply(p); + } + } + return [ht.apply({cells: lb.join(""), splits:lsb.join("")}), + ht.apply({cells: cb.join(""), splits:sb.join("")})]; + }, + + updateHeaders : function(){ + var html = this.renderHeaders(); + this.lockedHd.update(html[0]); + this.mainHd.update(html[1]); + }, + + + focusRow : function(row){ + var x = this.scroller.dom.scrollLeft; + this.focusCell(row, 0, false); + this.scroller.dom.scrollLeft = x; + }, + + + focusCell : function(row, col, hscroll){ + var el = this.ensureVisible(row, col, hscroll); + this.focusEl.alignTo(el, "tl-tl"); + if(Ext.isGecko){ + this.focusEl.focus(); + }else{ + this.focusEl.focus.defer(1, this.focusEl); + } + }, + + + ensureVisible : function(row, col, hscroll){ + if(typeof row != "number"){ + row = row.rowIndex; + } + if(row < 0 && row >= this.ds.getCount()){ + return; + } + col = (col !== undefined ? col : 0); + var cm = this.grid.colModel; + while(cm.isHidden(col)){ + col++; + } + + var el = this.getCell(row, col); + if(!el){ + return; + } + var c = this.scroller.dom; + + var ctop = parseInt(el.offsetTop, 10); + var cleft = parseInt(el.offsetLeft, 10); + var cbot = ctop + el.offsetHeight; + var cright = cleft + el.offsetWidth; + + var ch = c.clientHeight - this.mainHd.dom.offsetHeight; + var stop = parseInt(c.scrollTop, 10); + var sleft = parseInt(c.scrollLeft, 10); + var sbot = stop + ch; + var sright = sleft + c.clientWidth; + + if(ctop < stop){ + c.scrollTop = ctop; + }else if(cbot > sbot){ + c.scrollTop = cbot-ch; + } + + if(hscroll !== false){ + if(cleft < sleft){ + c.scrollLeft = cleft; + }else if(cright > sright){ + c.scrollLeft = cright-c.clientWidth; + } + } + return el; + }, + + updateColumns : function(){ + this.grid.stopEditing(); + var cm = this.grid.colModel, colIds = this.getColumnIds(); + + var pos = 0; + for(var i = 0, len = cm.getColumnCount(); i < len; i++){ + + var w = cm.getColumnWidth(i); + this.css.updateRule(this.colSelector+colIds[i], "width", (w - this.borderWidth) + "px"); + this.css.updateRule(this.hdSelector+colIds[i], "width", (w - this.borderWidth) + "px"); + } + this.updateSplitters(); + }, + + generateRules : function(cm){ + var ruleBuf = [], rulesId = this.grid.id + '-cssrules'; + Ext.util.CSS.removeStyleSheet(rulesId); + for(var i = 0, len = cm.getColumnCount(); i < len; i++){ + var cid = cm.getColumnId(i); + var align = ''; + if(cm.config[i].align){ + align = 'text-align:'+cm.config[i].align+';'; + } + var hidden = ''; + if(cm.isHidden(i)){ + hidden = 'display:none;'; + } + var width = "width:" + (cm.getColumnWidth(i) - this.borderWidth) + "px;"; + ruleBuf.push( + this.colSelector, cid, " {\n", cm.config[i].css, align, width, "\n}\n", + this.hdSelector, cid, " {\n", align, width, "}\n", + this.tdSelector, cid, " {\n",hidden,"\n}\n", + this.splitSelector, cid, " {\n", hidden , "\n}\n"); + } + return Ext.util.CSS.createStyleSheet(ruleBuf.join(""), rulesId); + }, + + updateSplitters : function(){ + var cm = this.cm, s = this.getSplitters(); + if(s){ + var pos = 0, locked = true; + for(var i = 0, len = cm.getColumnCount(); i < len; i++){ + if(cm.isHidden(i)) continue; + var w = cm.getColumnWidth(i); + if(!cm.isLocked(i) && locked){ + pos = 0; + locked = false; + } + pos += w; + s[i].style.left = (pos-this.splitOffset) + "px"; + } + } + }, + + handleHiddenChange : function(colModel, colIndex, hidden){ + if(hidden){ + this.hideColumn(colIndex); + }else{ + this.unhideColumn(colIndex); + } + }, + + hideColumn : function(colIndex){ + var cid = this.getColumnId(colIndex); + this.css.updateRule(this.tdSelector+cid, "display", "none"); + this.css.updateRule(this.splitSelector+cid, "display", "none"); + if(Ext.isSafari){ + this.updateHeaders(); + } + this.updateSplitters(); + this.layout(); + }, + + unhideColumn : function(colIndex){ + var cid = this.getColumnId(colIndex); + this.css.updateRule(this.tdSelector+cid, "display", ""); + this.css.updateRule(this.splitSelector+cid, "display", ""); + + if(Ext.isSafari){ + this.updateHeaders(); + } + this.updateSplitters(); + this.layout(); + }, + + insertRows : function(dm, firstRow, lastRow, isUpdate){ + if(firstRow == 0 && lastRow == dm.getCount()-1){ + this.refresh(); + }else{ + if(!isUpdate){ + this.fireEvent("beforerowsinserted", this, firstRow, lastRow); + } + var s = this.getScrollState(); + var markup = this.renderRows(firstRow, lastRow); + this.bufferRows(markup[0], this.getLockedTable(), firstRow); + this.bufferRows(markup[1], this.getBodyTable(), firstRow); + this.restoreScroll(s); + if(!isUpdate){ + this.fireEvent("rowsinserted", this, firstRow, lastRow); + this.syncRowHeights(firstRow, lastRow); + this.stripeRows(firstRow); + this.layout(); + } + } + }, + + bufferRows : function(markup, target, index){ + var before = null, trows = target.rows, tbody = target.tBodies[0]; + if(index < trows.length){ + before = trows[index]; + } + var b = document.createElement("div"); + b.innerHTML = ""+markup+"
    "; + var rows = b.firstChild.rows; + for(var i = 0, len = rows.length; i < len; i++){ + if(before){ + tbody.insertBefore(rows[0], before); + }else{ + tbody.appendChild(rows[0]); + } + } + b.innerHTML = ""; + b = null; + }, + + deleteRows : function(dm, firstRow, lastRow){ + if(dm.getRowCount()<1){ + this.fireEvent("beforerefresh", this); + this.mainBody.update(""); + this.lockedBody.update(""); + this.fireEvent("refresh", this); + }else{ + this.fireEvent("beforerowsdeleted", this, firstRow, lastRow); + var bt = this.getBodyTable(); + var tbody = bt.firstChild; + var rows = bt.rows; + for(var rowIndex = firstRow; rowIndex <= lastRow; rowIndex++){ + tbody.removeChild(rows[firstRow]); + } + this.stripeRows(firstRow); + this.fireEvent("rowsdeleted", this, firstRow, lastRow); + } + }, + + updateRows : function(dataSource, firstRow, lastRow){ + var s = this.getScrollState(); + this.refresh(); + this.restoreScroll(s); + }, + + handleSort : function(dataSource, sortColumnIndex, sortDir, noRefresh){ + if(!noRefresh){ + this.refresh(); + } + this.updateHeaderSortState(); + }, + + getScrollState : function(){ + var sb = this.scroller.dom; + return {left: sb.scrollLeft, top: sb.scrollTop}; + }, + + stripeRows : function(startRow){ + if(!this.grid.stripeRows || this.ds.getCount() < 1){ + return; + } + startRow = startRow || 0; + var rows = this.getBodyTable().rows; + var lrows = this.getLockedTable().rows; + var cls = ' x-grid-row-alt '; + for(var i = startRow, len = rows.length; i < len; i++){ + var row = rows[i], lrow = lrows[i]; + var isAlt = ((i+1) % 2 == 0); + var hasAlt = (' '+row.className + ' ').indexOf(cls) != -1; + if(isAlt == hasAlt){ + continue; + } + if(isAlt){ + row.className += " x-grid-row-alt"; + }else{ + row.className = row.className.replace("x-grid-row-alt", ""); + } + if(lrow){ + lrow.className = row.className; + } + } + }, + + restoreScroll : function(state){ + var sb = this.scroller.dom; + sb.scrollLeft = state.left; + sb.scrollTop = state.top; + this.syncScroll(); + }, + + syncScroll : function(){ + var sb = this.scroller.dom; + var sh = this.mainHd.dom; + var bs = this.mainBody.dom; + var lv = this.lockedBody.dom; + sh.scrollLeft = bs.scrollLeft = sb.scrollLeft; + lv.scrollTop = bs.scrollTop = sb.scrollTop; + }, + + handleScroll : function(e){ + this.syncScroll(); + var sb = this.scroller.dom; + this.grid.fireEvent("bodyscroll", sb.scrollLeft, sb.scrollTop); + e.stopEvent(); + }, + + handleWheel : function(e){ + var d = e.getWheelDelta(); + this.scroller.dom.scrollTop -= d*22; + + this.lockedBody.dom.scrollTop = this.mainBody.dom.scrollTop = this.scroller.dom.scrollTop; + e.stopEvent(); + }, + + renderRows : function(startRow, endRow){ + + var g = this.grid, cm = g.colModel, ds = g.dataSource, stripe = g.stripeRows; + var colCount = cm.getColumnCount(); + + if(ds.getCount() < 1){ + return ["", ""]; + } + + + var cs = []; + for(var i = 0; i < colCount; i++){ + var name = cm.getDataIndex(i); + cs[i] = { + name : typeof name == 'undefined' ? ds.fields.get(i).name : name, + renderer : cm.getRenderer(i), + id : cm.getColumnId(i), + locked : cm.isLocked(i) + }; + } + + startRow = startRow || 0; + endRow = typeof endRow == "undefined"? ds.getCount()-1 : endRow; + + + var rs = ds.getRange(startRow, endRow); + + return this.doRender(cs, rs, ds, startRow, colCount, stripe); + }, + + + + + doRender : Ext.isGecko ? + function(cs, rs, ds, startRow, colCount, stripe){ + var ts = this.templates, ct = ts.cell, rt = ts.row; + + var buf = "", lbuf = "", cb, lcb, c, p = {}, rp = {}, r, rowIndex; + for(var j = 0, len = rs.length; j < len; j++){ + r = rs[j]; cb = ""; lcb = ""; rowIndex = (j+startRow); + for(var i = 0; i < colCount; i++){ + c = cs[i]; + p.cellId = "x-grid-cell-" + rowIndex + "-" + i; + p.id = c.id; + p.css = p.attr = ""; + p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds); + if(p.value == undefined || p.value === "") p.value = " "; + if(r.dirty && typeof r.modified[c.name] !== 'undefined'){ + p.css += p.css ? ' x-grid-dirty-cell' : 'x-grid-dirty-cell'; + } + var markup = ct.apply(p); + if(!c.locked){ + cb+= markup; + }else{ + lcb+= markup; + } + } + var alt = []; + if(stripe && ((rowIndex+1) % 2 == 0)){ + alt[0] = "x-grid-row-alt"; + } + if(r.dirty){ + alt[1] = " x-grid-dirty-row"; + } + rp.cells = lcb; + if(this.getRowClass){ + alt[2] = this.getRowClass(r, rowIndex); + } + rp.alt = alt.join(" "); + lbuf+= rt.apply(rp); + rp.cells = cb; + buf+= rt.apply(rp); + } + return [lbuf, buf]; + } : + function(cs, rs, ds, startRow, colCount, stripe){ + var ts = this.templates, ct = ts.cell, rt = ts.row; + + var buf = [], lbuf = [], cb, lcb, c, p = {}, rp = {}, r, rowIndex; + for(var j = 0, len = rs.length; j < len; j++){ + r = rs[j]; cb = []; lcb = []; rowIndex = (j+startRow); + for(var i = 0; i < colCount; i++){ + c = cs[i]; + p.cellId = "x-grid-cell-" + rowIndex + "-" + i; + p.id = c.id; + p.css = p.attr = ""; + p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds); + if(p.value == undefined || p.value === "") p.value = " "; + if(r.dirty && typeof r.modified[c.name] !== 'undefined'){ + p.css += p.css ? ' x-grid-dirty-cell' : 'x-grid-dirty-cell'; + } + var markup = ct.apply(p); + if(!c.locked){ + cb[cb.length] = markup; + }else{ + lcb[lcb.length] = markup; + } + } + var alt = []; + if(stripe && ((rowIndex+1) % 2 == 0)){ + alt[0] = "x-grid-row-alt"; + } + if(r.dirty){ + alt[1] = " x-grid-dirty-row"; + } + rp.cells = lcb; + if(this.getRowClass){ + alt[2] = this.getRowClass(r, rowIndex); + } + rp.alt = alt.join(" "); + rp.cells = lcb.join(""); + lbuf[lbuf.length] = rt.apply(rp); + rp.cells = cb.join(""); + buf[buf.length] = rt.apply(rp); + } + return [lbuf.join(""), buf.join("")]; + }, + + renderBody : function(){ + var markup = this.renderRows(); + var bt = this.templates.body; + return [bt.apply({rows: markup[0]}), bt.apply({rows: markup[1]})]; + }, + + + refresh : function(headersToo){ + this.fireEvent("beforerefresh", this); + this.grid.stopEditing(); + var result = this.renderBody(); + this.lockedBody.update(result[0]); + this.mainBody.update(result[1]); + if(headersToo === true){ + this.updateHeaders(); + this.updateColumns(); + this.updateSplitters(); + this.updateHeaderSortState(); + } + this.syncRowHeights(); + this.layout(); + this.fireEvent("refresh", this); + }, + + handleColumnMove : function(cm, oldIndex, newIndex){ + this.indexMap = null; + var s = this.getScrollState(); + this.refresh(true); + this.restoreScroll(s); + this.afterMove(newIndex); + }, + + afterMove : function(colIndex){ + if(this.enableMoveAnim && Ext.enableFx){ + this.fly(this.getHeaderCell(colIndex).firstChild).highlight(this.hlColor); + } + }, + + updateCell : function(dm, rowIndex, dataIndex){ + var colIndex = this.getColumnIndexByDataIndex(dataIndex); + if(typeof colIndex == "undefined"){ + return; + } + var cm = this.grid.colModel; + var cell = this.getCell(rowIndex, colIndex); + var cellText = this.getCellText(rowIndex, colIndex); + + var p = { + cellId : "x-grid-cell-" + rowIndex + "-" + colIndex, + id : cm.getColumnId(colIndex), + css: colIndex == cm.getColumnCount()-1 ? "x-grid-col-last" : "" + }; + var renderer = cm.getRenderer(colIndex); + var val = renderer(dm.getValueAt(rowIndex, dataIndex), p, rowIndex, colIndex, dm); + if(typeof val == "undefined" || val === "") val = " "; + cellText.innerHTML = val; + cell.className = this.cellClass + " " + p.cellId + " " + p.css; + this.syncRowHeights(rowIndex, rowIndex); + }, + + calcColumnWidth : function(colIndex, maxRowsToMeasure){ + var maxWidth = 0; + if(this.grid.autoSizeHeaders){ + var h = this.getHeaderCellMeasure(colIndex); + maxWidth = Math.max(maxWidth, h.scrollWidth); + } + var tb, index; + if(this.cm.isLocked(colIndex)){ + tb = this.getLockedTable(); + index = colIndex; + }else{ + tb = this.getBodyTable(); + index = colIndex - this.cm.getLockedCount(); + } + if(tb && tb.rows){ + var rows = tb.rows; + var stopIndex = Math.min(maxRowsToMeasure || rows.length, rows.length); + for(var i = 0; i < stopIndex; i++){ + var cell = rows[i].childNodes[index].firstChild; + maxWidth = Math.max(maxWidth, cell.scrollWidth); + } + } + return maxWidth + 5; + }, + + autoSizeColumn : function(colIndex, forceMinSize, suppressEvent){ + if(this.cm.isHidden(colIndex)){ + return; + } + if(forceMinSize){ + var cid = this.cm.getColumnId(colIndex); + this.css.updateRule(this.colSelector + cid, "width", this.grid.minColumnWidth + "px"); + if(this.grid.autoSizeHeaders){ + this.css.updateRule(this.hdSelector + cid, "width", this.grid.minColumnWidth + "px"); + } + } + var newWidth = this.calcColumnWidth(colIndex); + this.cm.setColumnWidth(colIndex, + Math.max(this.grid.minColumnWidth, newWidth), suppressEvent); + if(!suppressEvent){ + this.grid.fireEvent("columnresize", colIndex, newWidth); + } + }, + + + autoSizeColumns : function(){ + var cm = this.grid.colModel; + var colCount = cm.getColumnCount(); + for(var i = 0; i < colCount; i++){ + this.autoSizeColumn(i, true, true); + } + if(cm.getTotalWidth() < this.scroller.dom.clientWidth){ + this.fitColumns(); + }else{ + this.updateColumns(); + this.layout(); + } + }, + + + fitColumns : function(reserveScrollSpace){ + var cm = this.grid.colModel; + var colCount = cm.getColumnCount(); + var cols = []; + var width = 0; + var i, w; + for (i = 0; i < colCount; i++){ + if(!cm.isHidden(i) && !cm.isFixed(i)){ + w = cm.getColumnWidth(i); + cols.push(i); + cols.push(w); + width += w; + } + } + var avail = Math.min(this.scroller.dom.clientWidth, this.el.getWidth()); + if(reserveScrollSpace){ + avail -= 17; + } + var frac = (avail - cm.getTotalWidth())/width; + while (cols.length){ + w = cols.pop(); + i = cols.pop(); + cm.setColumnWidth(i, Math.floor(w + w*frac), true); + } + this.updateColumns(); + this.layout(); + }, + + onRowSelect : function(rowIndex){ + var row = this.getRowComposite(rowIndex); + row.addClass("x-grid-row-selected"); + }, + + onRowDeselect : function(rowIndex){ + var row = this.getRowComposite(rowIndex); + row.removeClass("x-grid-row-selected"); + }, + + onCellSelect : function(row, col){ + var cell = this.getCell(row, col); + if(cell){ + Ext.fly(cell).addClass("x-grid-cell-selected"); + } + }, + + onCellDeselect : function(row, col){ + var cell = this.getCell(row, col); + if(cell){ + Ext.fly(cell).removeClass("x-grid-cell-selected"); + } + }, + + updateHeaderSortState : function(){ + var state = this.ds.getSortState(); + if(!state){ + return; + } + this.sortState = state; + var sortColumn = this.cm.findColumnIndex(state.field); + if(sortColumn != -1){ + var sortDir = state.direction; + var sc = this.sortClasses; + var hds = this.el.select(this.headerSelector).removeClass(sc); + hds.item(sortColumn).addClass(sc[sortDir == "DESC" ? 1 : 0]); + } + }, + + handleHeaderClick : function(g, index){ + if(this.headersDisabled){ + return; + } + var dm = g.dataSource, cm = g.colModel; + if(!cm.isSortable(index)){ + return; + } + g.stopEditing(); + dm.sort(cm.getDataIndex(index)); + }, + + + destroy : function(){ + if(this.colMenu){ + this.colMenu.removeAll(); + Ext.menu.MenuMgr.unregister(this.colMenu); + this.colMenu.getEl().remove(); + delete this.colMenu; + } + if(this.hmenu){ + this.hmenu.removeAll(); + Ext.menu.MenuMgr.unregister(this.hmenu); + this.hmenu.getEl().remove(); + delete this.hmenu; + } + if(this.grid.enableColumnMove){ + var dds = Ext.dd.DDM.ids['gridHeader' + this.grid.getGridEl().id]; + if(dds){ + for(var dd in dds){ + if(!dds[dd].config.isTarget && dds[dd].dragElId){ + var elid = dds[dd].dragElId; + dds[dd].unreg(); + Ext.get(elid).remove(); + } else if(dds[dd].config.isTarget){ + dds[dd].proxyTop.remove(); + dds[dd].proxyBottom.remove(); + dds[dd].unreg(); + } + if(Ext.dd.DDM.locationCache[dd]){ + delete Ext.dd.DDM.locationCache[dd]; + } + } + delete Ext.dd.DDM.ids['gridHeader' + this.grid.getGridEl().id]; + } + } + Ext.util.CSS.removeStyleSheet(this.grid.id + '-cssrules'); + this.bind(null, null); + Ext.EventManager.removeResizeListener(this.onWindowResize, this); + }, + + handleLockChange : function(){ + this.refresh(true); + }, + + onDenyColumnLock : function(){ + + }, + + onDenyColumnHide : function(){ + + }, + + handleHdMenuClick : function(item){ + var index = this.hdCtxIndex; + var cm = this.cm, ds = this.ds; + switch(item.id){ + case "asc": + ds.sort(cm.getDataIndex(index), "ASC"); + break; + case "desc": + ds.sort(cm.getDataIndex(index), "DESC"); + break; + case "lock": + var lc = cm.getLockedCount(); + if(cm.getColumnCount(true) <= lc+1){ + this.onDenyColumnLock(); + return; + } + if(lc != index){ + cm.setLocked(index, true, true); + cm.moveColumn(index, lc); + this.grid.fireEvent("columnmove", index, lc); + }else{ + cm.setLocked(index, true); + } + break; + case "unlock": + var lc = cm.getLockedCount(); + if((lc-1) != index){ + cm.setLocked(index, false, true); + cm.moveColumn(index, lc-1); + this.grid.fireEvent("columnmove", index, lc-1); + }else{ + cm.setLocked(index, false); + } + break; + default: + index = cm.getIndexById(item.id.substr(4)); + if(index != -1){ + if(item.checked && cm.getColumnCount(true) <= 1){ + this.onDenyColumnHide(); + return false; + } + cm.setHidden(index, item.checked); + } + } + return true; + }, + + beforeColMenuShow : function(){ + var cm = this.cm, colCount = cm.getColumnCount(); + this.colMenu.removeAll(); + for(var i = 0; i < colCount; i++){ + this.colMenu.add(new Ext.menu.CheckItem({ + id: "col-"+cm.getColumnId(i), + text: cm.getColumnHeader(i), + checked: !cm.isHidden(i), + hideOnClick:false + })); + } + }, + + handleHdCtx : function(g, index, e){ + e.stopEvent(); + var hd = this.getHeaderCell(index); + this.hdCtxIndex = index; + var ms = this.hmenu.items, cm = this.cm; + ms.get("asc").setDisabled(!cm.isSortable(index)); + ms.get("desc").setDisabled(!cm.isSortable(index)); + if(this.grid.enableColLock !== false){ + ms.get("lock").setDisabled(cm.isLocked(index)); + ms.get("unlock").setDisabled(!cm.isLocked(index)); + } + this.hmenu.show(hd, "tl-bl"); + }, + + handleHdOver : function(e){ + var hd = this.findHeaderCell(e.getTarget()); + if(hd && !this.headersDisabled){ + if(this.grid.colModel.isSortable(this.getCellIndex(hd))){ + this.fly(hd).addClass("x-grid-hd-over"); + } + } + }, + + handleHdOut : function(e){ + var hd = this.findHeaderCell(e.getTarget()); + if(hd){ + this.fly(hd).removeClass("x-grid-hd-over"); + } + }, + + handleSplitDblClick : function(e, t){ + var i = this.getCellIndex(t); + if(this.grid.enableColumnResize !== false && this.cm.isResizable(i) && !this.cm.isFixed(i)){ + this.autoSizeColumn(i, true); + this.layout(); + } + }, + + render : function(){ + + var cm = this.cm; + var colCount = cm.getColumnCount(); + + if(this.grid.monitorWindowResize === true){ + Ext.EventManager.onWindowResize(this.onWindowResize, this, true); + } + var header = this.renderHeaders(); + var body = this.templates.body.apply({rows:""}); + var html = this.templates.master.apply({ + lockedBody: body, + body: body, + lockedHeader: header[0], + header: header[1] + }); + + + + this.grid.getGridEl().dom.innerHTML = html; + + this.initElements(); + + this.scroller.on("scroll", this.handleScroll, this); + this.lockedBody.on("mousewheel", this.handleWheel, this); + this.mainBody.on("mousewheel", this.handleWheel, this); + + this.mainHd.on("mouseover", this.handleHdOver, this); + this.mainHd.on("mouseout", this.handleHdOut, this); + this.mainHd.on("dblclick", this.handleSplitDblClick, this, + {delegate: "."+this.splitClass}); + + this.lockedHd.on("mouseover", this.handleHdOver, this); + this.lockedHd.on("mouseout", this.handleHdOut, this); + this.lockedHd.on("dblclick", this.handleSplitDblClick, this, + {delegate: "."+this.splitClass}); + + if(this.grid.enableColumnResize !== false && Ext.grid.SplitDragZone){ + new Ext.grid.SplitDragZone(this.grid, this.lockedHd.dom, this.mainHd.dom); + } + + this.updateSplitters(); + + if(this.grid.enableColumnMove && Ext.grid.HeaderDragZone){ + new Ext.grid.HeaderDragZone(this.grid, this.lockedHd.dom, this.mainHd.dom); + new Ext.grid.HeaderDropZone(this.grid, this.lockedHd.dom, this.mainHd.dom); + } + + if(this.grid.enableCtxMenu !== false && Ext.menu.Menu){ + this.hmenu = new Ext.menu.Menu({id: this.grid.id + "-hctx"}); + this.hmenu.add( + {id:"asc", text: this.sortAscText, cls: "xg-hmenu-sort-asc"}, + {id:"desc", text: this.sortDescText, cls: "xg-hmenu-sort-desc"} + ); + if(this.grid.enableColLock !== false){ + this.hmenu.add('-', + {id:"lock", text: this.lockText, cls: "xg-hmenu-lock"}, + {id:"unlock", text: this.unlockText, cls: "xg-hmenu-unlock"} + ); + } + if(this.grid.enableColumnHide !== false){ + + this.colMenu = new Ext.menu.Menu({id:this.grid.id + "-hcols-menu"}); + this.colMenu.on("beforeshow", this.beforeColMenuShow, this); + this.colMenu.on("itemclick", this.handleHdMenuClick, this); + + this.hmenu.add('-', + {id:"columns", text: this.columnsText, menu: this.colMenu} + ); + } + this.hmenu.on("itemclick", this.handleHdMenuClick, this); + + this.grid.on("headercontextmenu", this.handleHdCtx, this); + } + + if((this.grid.enableDragDrop || this.grid.enableDrag) && Ext.grid.GridDragZone){ + this.dd = new Ext.grid.GridDragZone(this.grid, { + ddGroup : this.grid.ddGroup || 'GridDD' + }); + } + + + + this.updateHeaderSortState(); + + this.beforeInitialResize(); + this.layout(true); + + + this.renderPhase2.defer(1, this); + }, + + renderPhase2 : function(){ + + this.refresh(); + if(this.grid.autoSizeColumns){ + this.autoSizeColumns(); + } + }, + + beforeInitialResize : function(){ + + }, + + onColumnSplitterMoved : function(i, w){ + this.userResized = true; + var cm = this.grid.colModel; + cm.setColumnWidth(i, w, true); + var cid = cm.getColumnId(i); + this.css.updateRule(this.colSelector + cid, "width", (w-this.borderWidth) + "px"); + this.css.updateRule(this.hdSelector + cid, "width", (w-this.borderWidth) + "px"); + this.updateSplitters(); + this.layout(); + this.grid.fireEvent("columnresize", i, w); + }, + + syncRowHeights : function(startIndex, endIndex){ + if(this.grid.enableRowHeightSync === true && this.cm.getLockedCount() > 0){ + startIndex = startIndex || 0; + var mrows = this.getBodyTable().rows; + var lrows = this.getLockedTable().rows; + var len = mrows.length-1; + endIndex = Math.min(endIndex || len, len); + for(var i = startIndex; i <= endIndex; i++){ + var m = mrows[i], l = lrows[i]; + var h = Math.max(m.offsetHeight, l.offsetHeight); + m.style.height = l.style.height = h + "px"; + } + } + }, + + layout : function(initialRender, is2ndPass){ + var g = this.grid; + var auto = g.autoHeight; + var scrollOffset = 16; + var c = g.getGridEl(), cm = this.cm, + expandCol = g.autoExpandColumn, + gv = this; + + + if(!c.dom.offsetWidth){ + if(initialRender){ + this.lockedWrap.show(); + this.mainWrap.show(); + } + return; + } + + var hasLock = this.cm.isLocked(0); + + var tbh = this.headerPanel.getHeight(); + var bbh = this.footerPanel.getHeight(); + + if(auto){ + var ch = this.getBodyTable().offsetHeight + tbh + bbh + this.mainHd.getHeight(); + var newHeight = ch + c.getBorderWidth("tb"); + if(g.maxHeight){ + newHeight = Math.min(g.maxHeight, newHeight); + } + c.setHeight(newHeight); + } + + if(g.autoWidth){ + c.setWidth(cm.getTotalWidth()+c.getBorderWidth('lr')); + } + + var s = this.scroller; + + var csize = c.getSize(true); + + this.el.setSize(csize.width, csize.height); + + this.headerPanel.setWidth(csize.width); + this.footerPanel.setWidth(csize.width); + + var hdHeight = this.mainHd.getHeight(); + var vw = csize.width; + var vh = csize.height - (tbh + bbh); + + s.setSize(vw, vh); + + var bt = this.getBodyTable(); + var ltWidth = hasLock ? + Math.max(this.getLockedTable().offsetWidth, this.lockedHd.dom.firstChild.offsetWidth) : 0; + + var scrollHeight = bt.offsetHeight; + var scrollWidth = ltWidth + bt.offsetWidth; + var vscroll = false, hscroll = false; + + this.scrollSizer.setSize(scrollWidth, scrollHeight+hdHeight); + + var lw = this.lockedWrap, mw = this.mainWrap; + var lb = this.lockedBody, mb = this.mainBody; + + setTimeout(function(){ + var t = s.dom.offsetTop; + var w = s.dom.clientWidth, + h = s.dom.clientHeight; + + lw.setTop(t); + lw.setSize(ltWidth, h); + + mw.setLeftTop(ltWidth, t); + mw.setSize(w-ltWidth, h); + + lb.setHeight(h-hdHeight); + mb.setHeight(h-hdHeight); + + if(is2ndPass !== true && !gv.userResized && expandCol){ + + var ci = cm.getIndexById(expandCol); + var tw = cm.getTotalWidth(false); + var currentWidth = cm.getColumnWidth(ci); + var cw = Math.min(Math.max(((w-tw)+currentWidth-2)-(w <= s.dom.offsetWidth ? 0 : 18), g.autoExpandMin), g.autoExpandMax); + if(currentWidth != cw){ + cm.setColumnWidth(ci, cw, true); + gv.css.updateRule(gv.colSelector+expandCol, "width", (cw - gv.borderWidth) + "px"); + gv.css.updateRule(gv.hdSelector+expandCol, "width", (cw - gv.borderWidth) + "px"); + gv.updateSplitters(); + gv.layout(false, true); + } + } + + if(initialRender){ + lw.show(); + mw.show(); + } + + }, 10); + }, + + onWindowResize : function(){ + if(!this.grid.monitorWindowResize || this.grid.autoHeight){ + return; + } + this.layout(); + }, + + appendFooter : function(parentEl){ + return null; + }, + + sortAscText : "Sort Ascending", + sortDescText : "Sort Descending", + lockText : "Lock Column", + unlockText : "Unlock Column", + columnsText : "Columns" +}); + + +Ext.grid.HeaderDragZone = function(grid, hd, hd2){ + this.grid = grid; + this.view = grid.getView(); + this.ddGroup = "gridHeader" + this.grid.getGridEl().id; + Ext.grid.HeaderDragZone.superclass.constructor.call(this, hd); + if(hd2){ + this.setHandleElId(Ext.id(hd)); + this.setOuterHandleElId(Ext.id(hd2)); + } + this.scroll = false; +}; +Ext.extend(Ext.grid.HeaderDragZone, Ext.dd.DragZone, { + maxDragWidth: 120, + getDragData : function(e){ + var t = Ext.lib.Event.getTarget(e); + var h = this.view.findHeaderCell(t); + if(h){ + return {ddel: h.firstChild, header:h}; + } + return false; + }, + + onInitDrag : function(e){ + this.view.headersDisabled = true; + var clone = this.dragData.ddel.cloneNode(true); + clone.id = Ext.id(); + clone.style.width = Math.min(this.dragData.header.offsetWidth,this.maxDragWidth) + "px"; + this.proxy.update(clone); + return true; + }, + + afterValidDrop : function(){ + var v = this.view; + setTimeout(function(){ + v.headersDisabled = false; + }, 50); + }, + + afterInvalidDrop : function(){ + var v = this.view; + setTimeout(function(){ + v.headersDisabled = false; + }, 50); + } +}); + + + +Ext.grid.HeaderDropZone = function(grid, hd, hd2){ + this.grid = grid; + this.view = grid.getView(); + + this.proxyTop = Ext.DomHelper.append(document.body, { + cls:"col-move-top", html:" " + }, true); + this.proxyBottom = Ext.DomHelper.append(document.body, { + cls:"col-move-bottom", html:" " + }, true); + this.proxyTop.hide = this.proxyBottom.hide = function(){ + this.setLeftTop(-100,-100); + this.setStyle("visibility", "hidden"); + }; + this.ddGroup = "gridHeader" + this.grid.getGridEl().id; + + + Ext.grid.HeaderDropZone.superclass.constructor.call(this, grid.getGridEl().dom); +}; +Ext.extend(Ext.grid.HeaderDropZone, Ext.dd.DropZone, { + proxyOffsets : [-4, -9], + fly: Ext.Element.fly, + + getTargetFromEvent : function(e){ + var t = Ext.lib.Event.getTarget(e); + var cindex = this.view.findCellIndex(t); + if(cindex !== false){ + return this.view.getHeaderCell(cindex); + } + }, + + nextVisible : function(h){ + var v = this.view, cm = this.grid.colModel; + h = h.nextSibling; + while(h){ + if(!cm.isHidden(v.getCellIndex(h))){ + return h; + } + h = h.nextSibling; + } + return null; + }, + + prevVisible : function(h){ + var v = this.view, cm = this.grid.colModel; + h = h.prevSibling; + while(h){ + if(!cm.isHidden(v.getCellIndex(h))){ + return h; + } + h = h.prevSibling; + } + return null; + }, + + positionIndicator : function(h, n, e){ + var x = Ext.lib.Event.getPageX(e); + var r = Ext.lib.Dom.getRegion(n.firstChild); + var px, pt, py = r.top + this.proxyOffsets[1]; + if((r.right - x) <= (r.right-r.left)/2){ + px = r.right+this.view.borderWidth; + pt = "after"; + }else{ + px = r.left; + pt = "before"; + } + var oldIndex = this.view.getCellIndex(h); + var newIndex = this.view.getCellIndex(n); + + if(this.grid.colModel.isFixed(newIndex)){ + return false; + } + + var locked = this.grid.colModel.isLocked(newIndex); + + if(pt == "after"){ + newIndex++; + } + if(oldIndex < newIndex){ + newIndex--; + } + if(oldIndex == newIndex && (locked == this.grid.colModel.isLocked(oldIndex))){ + return false; + } + px += this.proxyOffsets[0]; + this.proxyTop.setLeftTop(px, py); + this.proxyTop.show(); + if(!this.bottomOffset){ + this.bottomOffset = this.view.mainHd.getHeight(); + } + this.proxyBottom.setLeftTop(px, py+this.proxyTop.dom.offsetHeight+this.bottomOffset); + this.proxyBottom.show(); + return pt; + }, + + onNodeEnter : function(n, dd, e, data){ + if(data.header != n){ + this.positionIndicator(data.header, n, e); + } + }, + + onNodeOver : function(n, dd, e, data){ + var result = false; + if(data.header != n){ + result = this.positionIndicator(data.header, n, e); + } + if(!result){ + this.proxyTop.hide(); + this.proxyBottom.hide(); + } + return result ? this.dropAllowed : this.dropNotAllowed; + }, + + onNodeOut : function(n, dd, e, data){ + this.proxyTop.hide(); + this.proxyBottom.hide(); + }, + + onNodeDrop : function(n, dd, e, data){ + var h = data.header; + if(h != n){ + var cm = this.grid.colModel; + var x = Ext.lib.Event.getPageX(e); + var r = Ext.lib.Dom.getRegion(n.firstChild); + var pt = (r.right - x) <= ((r.right-r.left)/2) ? "after" : "before"; + var oldIndex = this.view.getCellIndex(h); + var newIndex = this.view.getCellIndex(n); + var locked = cm.isLocked(newIndex); + if(pt == "after"){ + newIndex++; + } + if(oldIndex < newIndex){ + newIndex--; + } + if(oldIndex == newIndex && (locked == cm.isLocked(oldIndex))){ + return false; + } + cm.setLocked(oldIndex, locked, true); + cm.moveColumn(oldIndex, newIndex); + this.grid.fireEvent("columnmove", oldIndex, newIndex); + return true; + } + return false; + } +}); + + +Ext.grid.GridView.ColumnDragZone = function(grid, hd){ + Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this, grid, hd, null); + this.proxy.el.addClass('x-grid3-col-dd'); +}; + +Ext.extend(Ext.grid.GridView.ColumnDragZone, Ext.grid.HeaderDragZone, { + handleMouseDown : function(e){ + + }, + + callHandleMouseDown : function(e){ + Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this, e); + } +}); +Ext.grid.SplitDragZone = function(grid, hd, hd2){ + this.grid = grid; + this.view = grid.getView(); + this.proxy = this.view.resizeProxy; + Ext.grid.SplitDragZone.superclass.constructor.call(this, hd, + "gridSplitters" + this.grid.getGridEl().id, { + dragElId : Ext.id(this.proxy.dom), resizeFrame:false + }); + this.setHandleElId(Ext.id(hd)); + this.setOuterHandleElId(Ext.id(hd2)); + this.scroll = false; +}; +Ext.extend(Ext.grid.SplitDragZone, Ext.dd.DDProxy, { + fly: Ext.Element.fly, + + b4StartDrag : function(x, y){ + this.view.headersDisabled = true; + this.proxy.setHeight(this.view.mainWrap.getHeight()); + var w = this.cm.getColumnWidth(this.cellIndex); + var minw = Math.max(w-this.grid.minColumnWidth, 0); + this.resetConstraints(); + this.setXConstraint(minw, 1000); + this.setYConstraint(0, 0); + this.minX = x - minw; + this.maxX = x + 1000; + this.startPos = x; + Ext.dd.DDProxy.prototype.b4StartDrag.call(this, x, y); + }, + + + handleMouseDown : function(e){ + ev = Ext.EventObject.setEvent(e); + var t = this.fly(ev.getTarget()); + if(t.hasClass("x-grid-split")){ + this.cellIndex = this.view.getCellIndex(t.dom); + this.split = t.dom; + this.cm = this.grid.colModel; + if(this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex)){ + Ext.grid.SplitDragZone.superclass.handleMouseDown.apply(this, arguments); + } + } + }, + + endDrag : function(e){ + this.view.headersDisabled = false; + var endX = Math.max(this.minX, Ext.lib.Event.getPageX(e)); + var diff = endX - this.startPos; + this.view.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex)+diff); + }, + + autoOffset : function(){ + this.setDelta(0,0); + } +}); +Ext.grid.GridDragZone = function(grid, config){ + this.view = grid.getView(); + Ext.grid.GridDragZone.superclass.constructor.call(this, this.view.mainBody.dom, config); + if(this.view.lockedBody){ + this.setHandleElId(Ext.id(this.view.mainBody.dom)); + this.setOuterHandleElId(Ext.id(this.view.lockedBody.dom)); + } + this.scroll = false; + this.grid = grid; + this.ddel = document.createElement('div'); + this.ddel.className = 'x-grid-dd-wrap'; +}; + +Ext.extend(Ext.grid.GridDragZone, Ext.dd.DragZone, { + ddGroup : "GridDD", + + getDragData : function(e){ + var t = Ext.lib.Event.getTarget(e); + var rowIndex = this.view.findRowIndex(t); + if(rowIndex !== false){ + var sm = this.grid.selModel; + if(!sm.isSelected(rowIndex) || e.hasModifier()){ + sm.handleMouseDown(e, t); + } + return {grid: this.grid, ddel: this.ddel, rowIndex: rowIndex, selections:sm.getSelections()}; + } + return false; + }, + + onInitDrag : function(e){ + var data = this.dragData; + this.ddel.innerHTML = this.grid.getDragDropText(); + this.proxy.update(this.ddel); + }, + + afterRepair : function(){ + this.dragging = false; + }, + + getRepairXY : function(e, data){ + return false; + }, + + onEndDrag : function(data, e){ + }, + + onValidDrop : function(dd, e, id){ + this.hideProxy(); + }, + + beforeInvalidDrop : function(e, id){ + + } +}); + +Ext.grid.ColumnModel = function(config){ + + this.config = config; + this.lookup = {}; + + + + + for(var i = 0, len = config.length; i < len; i++){ + var c = config[i]; + if(typeof c.dataIndex == "undefined"){ + c.dataIndex = i; + } + if(typeof c.renderer == "string"){ + c.renderer = Ext.util.Format[c.renderer]; + } + if(typeof c.id == "undefined"){ + c.id = i; + } + if(c.editor && c.editor.isFormField){ + c.editor = new Ext.grid.GridEditor(c.editor); + } + this.lookup[c.id] = c; + } + + + this.defaultWidth = 100; + + + this.defaultSortable = false; + + this.addEvents({ + + "widthchange": true, + + "headerchange": true, + + "hiddenchange": true, + + "columnmoved" : true, + + "columnlockchange" : true + }); + Ext.grid.ColumnModel.superclass.constructor.call(this); +}; +Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, { + + + + + + + + + + + + + getColumnId : function(index){ + return this.config[index].id; + }, + + + getColumnById : function(id){ + return this.lookup[id]; + }, + + + getIndexById : function(id){ + for(var i = 0, len = this.config.length; i < len; i++){ + if(this.config[i].id == id){ + return i; + } + } + return -1; + }, + + moveColumn : function(oldIndex, newIndex){ + var c = this.config[oldIndex]; + this.config.splice(oldIndex, 1); + this.config.splice(newIndex, 0, c); + this.dataMap = null; + this.fireEvent("columnmoved", this, oldIndex, newIndex); + }, + + isLocked : function(colIndex){ + return this.config[colIndex].locked === true; + }, + + setLocked : function(colIndex, value, suppressEvent){ + if(this.isLocked(colIndex) == value){ + return; + } + this.config[colIndex].locked = value; + if(!suppressEvent){ + this.fireEvent("columnlockchange", this, colIndex, value); + } + }, + + getTotalLockedWidth : function(){ + var totalWidth = 0; + for(var i = 0; i < this.config.length; i++){ + if(this.isLocked(i) && !this.isHidden(i)){ + this.totalWidth += this.getColumnWidth(i); + } + } + return totalWidth; + }, + + getLockedCount : function(){ + for(var i = 0, len = this.config.length; i < len; i++){ + if(!this.isLocked(i)){ + return i; + } + } + }, + + + getColumnCount : function(visibleOnly){ + if(visibleOnly === true){ + var c = 0; + for(var i = 0, len = this.config.length; i < len; i++){ + if(!this.isHidden(i)){ + c++; + } + } + return c; + } + return this.config.length; + }, + + + getColumnsBy : function(fn, scope){ + var r = []; + for(var i = 0, len = this.config.length; i < len; i++){ + var c = this.config[i]; + if(fn.call(scope||this, c, i) === true){ + r[r.length] = c; + } + } + return r; + }, + + + isSortable : function(col){ + if(typeof this.config[col].sortable == "undefined"){ + return this.defaultSortable; + } + return this.config[col].sortable; + }, + + + getRenderer : function(col){ + if(!this.config[col].renderer){ + return Ext.grid.ColumnModel.defaultRenderer; + } + return this.config[col].renderer; + }, + + + setRenderer : function(col, fn){ + this.config[col].renderer = fn; + }, + + + getColumnWidth : function(col){ + return this.config[col].width || this.defaultWidth; + }, + + + setColumnWidth : function(col, width, suppressEvent){ + this.config[col].width = width; + this.totalWidth = null; + if(!suppressEvent){ + this.fireEvent("widthchange", this, col, width); + } + }, + + + getTotalWidth : function(includeHidden){ + if(!this.totalWidth){ + this.totalWidth = 0; + for(var i = 0, len = this.config.length; i < len; i++){ + if(includeHidden || !this.isHidden(i)){ + this.totalWidth += this.getColumnWidth(i); + } + } + } + return this.totalWidth; + }, + + + getColumnHeader : function(col){ + return this.config[col].header; + }, + + + setColumnHeader : function(col, header){ + this.config[col].header = header; + this.fireEvent("headerchange", this, col, header); + }, + + + getColumnTooltip : function(col){ + return this.config[col].tooltip; + }, + + setColumnTooltip : function(col, tooltip){ + this.config[col].tooltip = tooltip; + }, + + + getDataIndex : function(col){ + return this.config[col].dataIndex; + }, + + + setDataIndex : function(col, dataIndex){ + this.config[col].dataIndex = dataIndex; + }, + + findColumnIndex : function(dataIndex){ + var c = this.config; + for(var i = 0, len = c.length; i < len; i++){ + if(c[i].dataIndex == dataIndex){ + return i; + } + } + return -1; + }, + + + isCellEditable : function(colIndex, rowIndex){ + return (this.config[colIndex].editable || (typeof this.config[colIndex].editable == "undefined" && this.config[colIndex].editor)) ? true : false; + }, + + + getCellEditor : function(colIndex, rowIndex){ + return this.config[colIndex].editor; + }, + + + setEditable : function(col, editable){ + this.config[col].editable = editable; + }, + + + + isHidden : function(colIndex){ + return this.config[colIndex].hidden; + }, + + + + isFixed : function(colIndex){ + return this.config[colIndex].fixed; + }, + + + isResizable : function(colIndex){ + return colIndex >= 0 && this.config[colIndex].resizable !== false && this.config[colIndex].fixed !== true; + }, + + setHidden : function(colIndex, hidden){ + this.config[colIndex].hidden = hidden; + this.totalWidth = null; + this.fireEvent("hiddenchange", this, colIndex, hidden); + }, + + + setEditor : function(col, editor){ + this.config[col].editor = editor; + } +}); + +Ext.grid.ColumnModel.defaultRenderer = function(value){ + if(typeof value == "string" && value.length < 1){ + return " "; + } + return value; +}; + + +Ext.grid.DefaultColumnModel = Ext.grid.ColumnModel; + + +Ext.grid.AbstractSelectionModel = function(){ + this.locked = false; + Ext.grid.AbstractSelectionModel.superclass.constructor.call(this); +}; + +Ext.extend(Ext.grid.AbstractSelectionModel, Ext.util.Observable, { + + init : function(grid){ + this.grid = grid; + this.initEvents(); + }, + + + lock : function(){ + this.locked = true; + }, + + + unlock : function(){ + this.locked = false; + }, + + + isLocked : function(){ + return this.locked; + } +}); + +Ext.grid.RowSelectionModel = function(config){ + Ext.apply(this, config); + this.selections = new Ext.util.MixedCollection(false, function(o){ + return o.id; + }); + + this.last = false; + this.lastActive = false; + + this.addEvents({ + + "selectionchange" : true, + + "beforerowselect" : true, + + "rowselect" : true, + + "rowdeselect" : true + }); + + this.locked = false; +}; + +Ext.extend(Ext.grid.RowSelectionModel, Ext.grid.AbstractSelectionModel, { + + singleSelect : false, + + + initEvents : function(){ + + if(!this.grid.enableDragDrop && !this.grid.enableDrag){ + this.grid.on("mousedown", this.handleMouseDown, this); + }else{ + this.grid.on("rowclick", function(grid, rowIndex, e) { + if(e.button === 0 && !e.shiftKey && !e.ctrlKey) { + this.selectRow(rowIndex, false); + grid.view.focusRow(rowIndex); + } + }, this); + } + + this.rowNav = new Ext.KeyNav(this.grid.getGridEl(), { + "up" : function(e){ + if(!e.shiftKey){ + this.selectPrevious(e.shiftKey); + }else if(this.last !== false && this.lastActive !== false){ + var last = this.last; + this.selectRange(this.last, this.lastActive-1); + this.grid.getView().focusRow(this.lastActive); + if(last !== false){ + this.last = last; + } + }else{ + this.selectFirstRow(); + } + }, + "down" : function(e){ + if(!e.shiftKey){ + this.selectNext(e.shiftKey); + }else if(this.last !== false && this.lastActive !== false){ + var last = this.last; + this.selectRange(this.last, this.lastActive+1); + this.grid.getView().focusRow(this.lastActive); + if(last !== false){ + this.last = last; + } + }else{ + this.selectFirstRow(); + } + }, + scope: this + }); + + var view = this.grid.view; + view.on("refresh", this.onRefresh, this); + view.on("rowupdated", this.onRowUpdated, this); + view.on("rowremoved", this.onRemove, this); + }, + + + onRefresh : function(){ + var ds = this.grid.dataSource, i, v = this.grid.view; + var s = this.selections; + s.each(function(r){ + if((i = ds.indexOfId(r.id)) != -1){ + v.onRowSelect(i); + }else{ + s.remove(r); + } + }); + }, + + + onRemove : function(v, index, r){ + this.selections.remove(r); + }, + + + onRowUpdated : function(v, index, r){ + if(this.isSelected(r)){ + v.onRowSelect(index); + } + }, + + + selectRecords : function(records, keepExisting){ + if(!keepExisting){ + this.clearSelections(); + } + var ds = this.grid.dataSource; + for(var i = 0, len = records.length; i < len; i++){ + this.selectRow(ds.indexOf(records[i]), true); + } + }, + + + getCount : function(){ + return this.selections.length; + }, + + + selectFirstRow : function(){ + this.selectRow(0); + }, + + + selectLastRow : function(keepExisting){ + this.selectRow(this.grid.dataSource.getCount() - 1, keepExisting); + }, + + + selectNext : function(keepExisting){ + if(this.last !== false && (this.last+1) < this.grid.dataSource.getCount()){ + this.selectRow(this.last+1, keepExisting); + this.grid.getView().focusRow(this.last); + } + }, + + + selectPrevious : function(keepExisting){ + if(this.last){ + this.selectRow(this.last-1, keepExisting); + this.grid.getView().focusRow(this.last); + } + }, + + + getSelections : function(){ + return [].concat(this.selections.items); + }, + + + getSelected : function(){ + return this.selections.itemAt(0); + }, + + + + clearSelections : function(fast){ + if(this.locked) return; + if(fast !== true){ + var ds = this.grid.dataSource; + var s = this.selections; + s.each(function(r){ + this.deselectRow(ds.indexOfId(r.id)); + }, this); + s.clear(); + }else{ + this.selections.clear(); + } + this.last = false; + }, + + + + selectAll : function(){ + if(this.locked) return; + this.selections.clear(); + for(var i = 0, len = this.grid.dataSource.getCount(); i < len; i++){ + this.selectRow(i, true); + } + }, + + + hasSelection : function(){ + return this.selections.length > 0; + }, + + + isSelected : function(index){ + var r = typeof index == "number" ? this.grid.dataSource.getAt(index) : index; + return (r && this.selections.key(r.id) ? true : false); + }, + + + isIdSelected : function(id){ + return (this.selections.key(id) ? true : false); + }, + + + handleMouseDown : function(e, t){ + var view = this.grid.getView(), rowIndex; + if(this.isLocked() || (rowIndex = view.findRowIndex(t)) === false){ + return; + }; + if(e.shiftKey && this.last !== false){ + var last = this.last; + this.selectRange(last, rowIndex, e.ctrlKey); + this.last = last; + view.focusRow(rowIndex); + }else{ + var isSelected = this.isSelected(rowIndex); + if(e.button !== 0 && isSelected){ + view.focusRow(rowIndex); + }else if(e.ctrlKey && isSelected){ + this.deselectRow(rowIndex); + }else if(!isSelected){ + this.selectRow(rowIndex, e.button === 0 && (e.ctrlKey || e.shiftKey)); + view.focusRow(rowIndex); + } + } + }, + + + selectRows : function(rows, keepExisting){ + if(!keepExisting){ + this.clearSelections(); + } + for(var i = 0, len = rows.length; i < len; i++){ + this.selectRow(rows[i], true); + } + }, + + + selectRange : function(startRow, endRow, keepExisting){ + if(this.locked) return; + if(!keepExisting){ + this.clearSelections(); + } + if(startRow <= endRow){ + for(var i = startRow; i <= endRow; i++){ + this.selectRow(i, true); + } + }else{ + for(var i = startRow; i >= endRow; i--){ + this.selectRow(i, true); + } + } + }, + + + deselectRange : function(startRow, endRow, preventViewNotify){ + if(this.locked) return; + for(var i = startRow; i <= endRow; i++){ + this.deselectRow(i, preventViewNotify); + } + }, + + + selectRow : function(index, keepExisting, preventViewNotify){ + if(this.locked || (index < 0 || index >= this.grid.dataSource.getCount())) return; + if(this.fireEvent("beforerowselect", this, index, keepExisting) !== false){ + if(!keepExisting || this.singleSelect){ + this.clearSelections(); + } + var r = this.grid.dataSource.getAt(index); + this.selections.add(r); + this.last = this.lastActive = index; + if(!preventViewNotify){ + this.grid.getView().onRowSelect(index); + } + this.fireEvent("rowselect", this, index, r); + this.fireEvent("selectionchange", this); + } + }, + + + deselectRow : function(index, preventViewNotify){ + if(this.locked) return; + if(this.last == index){ + this.last = false; + } + if(this.lastActive == index){ + this.lastActive = false; + } + var r = this.grid.dataSource.getAt(index); + this.selections.remove(r); + if(!preventViewNotify){ + this.grid.getView().onRowDeselect(index); + } + this.fireEvent("rowdeselect", this, index); + this.fireEvent("selectionchange", this); + }, + + + restoreLast : function(){ + if(this._last){ + this.last = this._last; + } + }, + + + acceptsNav : function(row, col, cm){ + return !cm.isHidden(col) && cm.isCellEditable(col, row); + }, + + + onEditorKey : function(field, e){ + var k = e.getKey(), newCell, g = this.grid, ed = g.activeEditor; + if(k == e.TAB){ + e.stopEvent(); + ed.completeEdit(); + if(e.shiftKey){ + newCell = g.walkCells(ed.row, ed.col-1, -1, this.acceptsNav, this); + }else{ + newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this); + } + }else if(k == e.ENTER && !e.ctrlKey){ + e.stopEvent(); + ed.completeEdit(); + if(e.shiftKey){ + newCell = g.walkCells(ed.row-1, ed.col, -1, this.acceptsNav, this); + }else{ + newCell = g.walkCells(ed.row+1, ed.col, 1, this.acceptsNav, this); + } + }else if(k == e.ESC){ + ed.cancelEdit(); + } + if(newCell){ + g.startEditing(newCell[0], newCell[1]); + } + } +}); + +Ext.grid.CellSelectionModel = function(config){ + Ext.apply(this, config); + + this.selection = null; + + this.addEvents({ + + "beforecellselect" : true, + + "cellselect" : true, + + "selectionchange" : true + }); +}; + +Ext.extend(Ext.grid.CellSelectionModel, Ext.grid.AbstractSelectionModel, { + + + initEvents : function(){ + this.grid.on("mousedown", this.handleMouseDown, this); + this.grid.getGridEl().on(Ext.isIE ? "keydown" : "keypress", this.handleKeyDown, this); + var view = this.grid.view; + view.on("refresh", this.onViewChange, this); + view.on("rowupdated", this.onRowUpdated, this); + view.on("beforerowremoved", this.clearSelections, this); + view.on("beforerowsinserted", this.clearSelections, this); + if(this.grid.isEditor){ + this.grid.on("beforeedit", this.beforeEdit, this); + } + }, + + beforeEdit : function(e){ + this.select(e.row, e.column, false, true, e.record); + }, + + onRowUpdated : function(v, index, r){ + if(this.selection && this.selection.record == r){ + v.onCellSelect(index, this.selection.cell[1]); + } + }, + + onViewChange : function(){ + this.clearSelections(true); + }, + + + getSelectedCell : function(){ + return this.selection ? this.selection.cell : null; + }, + + + clearSelections : function(preventNotify){ + var s = this.selection; + if(s){ + if(preventNotify !== true){ + this.grid.view.onCellDeselect(s.cell[0], s.cell[1]); + } + this.selection = null; + this.fireEvent("selectionchange", this, null); + } + }, + + + hasSelection : function(){ + return this.selection ? true : false; + }, + + + handleMouseDown : function(e, t){ + var v = this.grid.getView(); + if(this.isLocked()){ + return; + }; + var row = v.findRowIndex(t); + var cell = v.findCellIndex(t); + if(row !== false && cell !== false){ + this.select(row, cell); + } + }, + + + select : function(rowIndex, colIndex, preventViewNotify, preventFocus, r){ + if(this.fireEvent("beforecellselect", this, rowIndex, colIndex) !== false){ + this.clearSelections(); + r = r || this.grid.dataSource.getAt(rowIndex); + this.selection = { + record : r, + cell : [rowIndex, colIndex] + }; + if(!preventViewNotify){ + var v = this.grid.getView(); + v.onCellSelect(rowIndex, colIndex); + if(preventFocus !== true){ + v.focusCell(rowIndex, colIndex); + } + } + this.fireEvent("cellselect", this, rowIndex, colIndex); + this.fireEvent("selectionchange", this, this.selection); + } + }, + + isSelectable : function(rowIndex, colIndex, cm){ + return !cm.isHidden(colIndex); + }, + + + handleKeyDown : function(e){ + if(!e.isNavKeyPress()){ + return; + } + var g = this.grid, s = this.selection; + if(!s){ + e.stopEvent(); + var cell = g.walkCells(0, 0, 1, this.isSelectable, this); + if(cell){ + this.select(cell[0], cell[1]); + } + return; + } + var sm = this; + var walk = function(row, col, step){ + return g.walkCells(row, col, step, sm.isSelectable, sm); + }; + var k = e.getKey(), r = s.cell[0], c = s.cell[1]; + var newCell; + + switch(k){ + case e.TAB: + if(e.shiftKey){ + newCell = walk(r, c-1, -1); + }else{ + newCell = walk(r, c+1, 1); + } + break; + case e.DOWN: + newCell = walk(r+1, c, 1); + break; + case e.UP: + newCell = walk(r-1, c, -1); + break; + case e.RIGHT: + newCell = walk(r, c+1, 1); + break; + case e.LEFT: + newCell = walk(r, c-1, -1); + break; + case e.ENTER: + if(g.isEditor && !g.editing){ + g.startEditing(r, c); + e.stopEvent(); + return; + } + break; + }; + if(newCell){ + this.select(newCell[0], newCell[1]); + e.stopEvent(); + } + }, + + acceptsNav : function(row, col, cm){ + return !cm.isHidden(col) && cm.isCellEditable(col, row); + }, + + onEditorKey : function(field, e){ + var k = e.getKey(), newCell, g = this.grid, ed = g.activeEditor; + if(k == e.TAB){ + if(e.shiftKey){ + newCell = g.walkCells(ed.row, ed.col-1, -1, this.acceptsNav, this); + }else{ + newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this); + } + e.stopEvent(); + }else if(k == e.ENTER && !e.ctrlKey){ + ed.completeEdit(); + e.stopEvent(); + }else if(k == e.ESC){ + ed.cancelEdit(); + } + if(newCell){ + g.startEditing(newCell[0], newCell[1]); + } + } +}); + +Ext.grid.EditorGrid = function(container, config){ + Ext.grid.EditorGrid.superclass.constructor.call(this, container, config); + this.getGridEl().addClass("xedit-grid"); + + if(!this.selModel){ + this.selModel = new Ext.grid.CellSelectionModel(); + } + + this.activeEditor = null; + + this.addEvents({ + + "beforeedit" : true, + + "afteredit" : true, + + "validateedit" : true + }); + this.on("bodyscroll", this.stopEditing, this); + this.on(this.clicksToEdit == 1 ? "cellclick" : "celldblclick", this.onCellDblClick, this); +}; + +Ext.extend(Ext.grid.EditorGrid, Ext.grid.Grid, { + + clicksToEdit: 2, + + + isEditor : true, + + trackMouseOver: false, + + onCellDblClick : function(g, row, col){ + this.startEditing(row, col); + }, + + onEditComplete : function(ed, value, startValue){ + this.editing = false; + this.activeEditor = null; + ed.un("specialkey", this.selModel.onEditorKey, this.selModel); + if(String(value) !== String(startValue)){ + var r = ed.record; + var field = this.colModel.getDataIndex(ed.col); + var e = { + grid: this, + record: r, + field: field, + originalValue: startValue, + value: value, + row: ed.row, + column: ed.col, + cancel:false + }; + if(this.fireEvent("validateedit", e) !== false && !e.cancel){ + r.set(field, e.value); + delete e.cancel; + this.fireEvent("afteredit", e); + } + } + this.view.focusCell(ed.row, ed.col); + }, + + + startEditing : function(row, col){ + this.stopEditing(); + if(this.colModel.isCellEditable(col, row)){ + this.view.ensureVisible(row, col, true); + var r = this.dataSource.getAt(row); + var field = this.colModel.getDataIndex(col); + var e = { + grid: this, + record: r, + field: field, + value: r.data[field], + row: row, + column: col, + cancel:false + }; + if(this.fireEvent("beforeedit", e) !== false && !e.cancel){ + this.editing = true; + var ed = this.colModel.getCellEditor(col, row); + if(!ed.rendered){ + ed.render(ed.parentEl || document.body); + } + (function(){ + ed.row = row; + ed.col = col; + ed.record = r; + ed.on("complete", this.onEditComplete, this, {single: true}); + ed.on("specialkey", this.selModel.onEditorKey, this.selModel); + this.activeEditor = ed; + var v = r.data[field]; + ed.startEdit(this.view.getCell(row, col), v); + }).defer(50, this); + } + } + }, + + + stopEditing : function(){ + if(this.activeEditor){ + this.activeEditor.completeEdit(); + } + this.activeEditor = null; + } +}); +Ext.grid.GridEditor = function(field, config){ + Ext.grid.GridEditor.superclass.constructor.call(this, field, config); + field.monitorTab = false; +}; + +Ext.extend(Ext.grid.GridEditor, Ext.Editor, { + alignment: "tl-tl", + autoSize: "width", + hideEl : false, + cls: "x-small-editor x-grid-editor", + shim:false, + shadow:"frame" +}); +Ext.grid.PropertyRecord = Ext.data.Record.create([ + {name:'name',type:'string'}, 'value' +]); + +Ext.grid.PropertyStore = function(grid, source){ + this.grid = grid; + this.store = new Ext.data.Store({ + recordType : Ext.grid.PropertyRecord + }); + this.store.on('update', this.onUpdate, this); + if(source){ + this.setSource(source); + } + Ext.grid.PropertyStore.superclass.constructor.call(this); +}; +Ext.extend(Ext.grid.PropertyStore, Ext.util.Observable, { + setSource : function(o){ + this.source = o; + this.store.removeAll(); + var data = []; + for(var k in o){ + if(this.isEditableValue(o[k])){ + data.push(new Ext.grid.PropertyRecord({name: k, value: o[k]}, k)); + } + } + this.store.loadRecords({records: data}, {}, true); + }, + + onUpdate : function(ds, record, type){ + if(type == Ext.data.Record.EDIT){ + var v = record.data['value']; + var oldValue = record.modified['value']; + if(this.grid.fireEvent('beforepropertychange', this.source, record.id, v, oldValue) !== false){ + this.source[record.id] = v; + record.commit(); + this.grid.fireEvent('propertychange', this.source, record.id, v, oldValue); + }else{ + record.reject(); + } + } + }, + + getProperty : function(row){ + return this.store.getAt(row); + }, + + isEditableValue: function(val){ + if(val && val instanceof Date){ + return true; + }else if(typeof val == 'object' || typeof val == 'function'){ + return false; + } + return true; + }, + + setValue : function(prop, value){ + this.source[prop] = value; + this.store.getById(prop).set('value', value); + }, + + getSource : function(){ + return this.source; + } +}); + +Ext.grid.PropertyColumnModel = function(grid, store){ + this.grid = grid; + var g = Ext.grid; + g.PropertyColumnModel.superclass.constructor.call(this, [ + {header: this.nameText, sortable: true, dataIndex:'name', id: 'name'}, + {header: this.valueText, resizable:false, dataIndex: 'value', id: 'value'} + ]); + this.store = store; + this.bselect = Ext.DomHelper.append(document.body, { + tag: 'select', style:'display:none', cls: 'x-grid-editor', children: [ + {tag: 'option', value: 'true', html: 'true'}, + {tag: 'option', value: 'false', html: 'false'} + ] + }); + Ext.id(this.bselect); + var f = Ext.form; + this.editors = { + 'date' : new g.GridEditor(new f.DateField({selectOnFocus:true})), + 'string' : new g.GridEditor(new f.TextField({selectOnFocus:true})), + 'number' : new g.GridEditor(new f.NumberField({selectOnFocus:true, style:'text-align:left;'})), + 'boolean' : new g.GridEditor(new f.Field({el:this.bselect,selectOnFocus:true})) + }; + this.renderCellDelegate = this.renderCell.createDelegate(this); + this.renderPropDelegate = this.renderProp.createDelegate(this); +}; + +Ext.extend(Ext.grid.PropertyColumnModel, Ext.grid.ColumnModel, { + nameText : 'Name', + valueText : 'Value', + dateFormat : 'm/j/Y', + renderDate : function(dateVal){ + return dateVal.dateFormat(this.dateFormat); + }, + + renderBool : function(bVal){ + return bVal ? 'true' : 'false'; + }, + + isCellEditable : function(colIndex, rowIndex){ + return colIndex == 1; + }, + + getRenderer : function(col){ + return col == 1 ? + this.renderCellDelegate : this.renderPropDelegate; + }, + + renderProp : function(v){ + return this.getPropertyName(v); + }, + + renderCell : function(val){ + var rv = val; + if(val instanceof Date){ + rv = this.renderDate(val); + }else if(typeof val == 'boolean'){ + rv = this.renderBool(val); + } + return Ext.util.Format.htmlEncode(rv); + }, + + getPropertyName : function(name){ + var pn = this.grid.propertyNames; + return pn && pn[name] ? pn[name] : name; + }, + + getCellEditor : function(colIndex, rowIndex){ + var p = this.store.getProperty(rowIndex); + var n = p.data['name'], val = p.data['value']; + if(this.grid.customEditors[n]){ + return this.grid.customEditors[n]; + } + if(val instanceof Date){ + return this.editors['date']; + }else if(typeof val == 'number'){ + return this.editors['number']; + }else if(typeof val == 'boolean'){ + return this.editors['boolean']; + }else{ + return this.editors['string']; + } + } +}); + +Ext.grid.PropertyGrid = function(container, config){ + config = config || {}; + var store = new Ext.grid.PropertyStore(this); + this.store = store; + var cm = new Ext.grid.PropertyColumnModel(this, store); + store.store.sort('name', 'ASC'); + Ext.grid.PropertyGrid.superclass.constructor.call(this, container, Ext.apply({ + ds: store.store, + cm: cm, + enableColLock:false, + enableColumnMove:false, + stripeRows:false, + trackMouseOver: false, + clicksToEdit:1 + }, config)); + this.getGridEl().addClass('x-props-grid'); + this.lastEditRow = null; + this.on('columnresize', this.onColumnResize, this); + this.addEvents({ + beforepropertychange: true, + propertychange: true + }); + this.customEditors = this.customEditors || {}; +}; +Ext.extend(Ext.grid.PropertyGrid, Ext.grid.EditorGrid, { + render : function(){ + Ext.grid.PropertyGrid.superclass.render.call(this); + this.autoSize.defer(100, this); + }, + + autoSize : function(){ + Ext.grid.PropertyGrid.superclass.autoSize.call(this); + if(this.view){ + this.view.fitColumns(); + } + }, + + onColumnResize : function(){ + this.colModel.setColumnWidth(1, this.container.getWidth(true)-this.colModel.getColumnWidth(0)); + this.autoSize(); + }, + + setSource : function(source){ + this.store.setSource(source); + }, + + getSource : function(){ + return this.store.getSource(); + } +}); + +Ext.LoadMask = function(el, config){ + this.el = Ext.get(el); + Ext.apply(this, config); + if(this.store){ + this.store.on('beforeload', this.onBeforeLoad, this); + this.store.on('load', this.onLoad, this); + this.store.on('loadexception', this.onLoad, this); + this.removeMask = false; + }else{ + var um = this.el.getUpdateManager(); + um.showLoadIndicator = false; um.on('beforeupdate', this.onBeforeLoad, this); + um.on('update', this.onLoad, this); + um.on('failure', this.onLoad, this); + this.removeMask = true; + } +}; + +Ext.LoadMask.prototype = { + + + msg : 'Loading...', + + msgCls : 'x-mask-loading', + + + disabled: false, + + + disable : function(){ + this.disabled = true; + }, + + + enable : function(){ + this.disabled = false; + }, + + onLoad : function(){ + this.el.unmask(this.removeMask); + }, + + onBeforeLoad : function(){ + if(!this.disabled){ + this.el.mask(this.msg, this.msgCls); + } + }, + + destroy : function(){ + if(this.store){ + this.store.un('beforeload', this.onBeforeLoad, this); + this.store.un('load', this.onLoad, this); + this.store.un('loadexception', this.onLoad, this); + }else{ + var um = this.el.getUpdateManager(); + um.un('beforeupdate', this.onBeforeLoad, this); + um.un('update', this.onLoad, this); + um.un('failure', this.onLoad, this); + } + } +}; +Ext.debug = { + init : function(){ + var CP = Ext.ContentPanel; + var bd = Ext.get(document.body); + + var dlg = new Ext.LayoutDialog('x-debug-browser', { + autoCreate:true, + width:800, + height:450, + title: 'Ext Debug Console & Inspector', + proxyDrag:true, + shadow:true, + center:{alwaysShowTabs:true}, + constraintoviewport:false + }); + + dlg.el.swallowEvent('click'); + + var mainLayout = dlg.getLayout(); + mainLayout.beginUpdate(); + + var clayout = mainLayout.add('center', + new Ext.debug.InnerLayout('x-debug-console', 400, { + title: 'Debug Console' + } + )); + + var ilayout = mainLayout.add('center', + new Ext.debug.InnerLayout('x-debug-inspector', 250, { + title: 'DOM Inspector' + } + )); + + var scriptPanel = clayout.add('east', new CP({ + autoCreate:{ + tag: 'div', children: [ + {tag: 'div'}, + {tag:'textarea'} + ] + }, + fitContainer:true, + fitToFrame:true, + title:'Script Console', + autoScroll: Ext.isGecko, setSize : function(w, h){ + Ext.ContentPanel.prototype.setSize.call(this, w, h); + if(Ext.isGecko && Ext.isStrict){ + var s = this.adjustForComponents(w, h); + this.resizeEl.setSize(s.width-2, s.height-2); + } + } + })); + var sel = scriptPanel.el; + var script = sel.child('textarea'); + scriptPanel.resizeEl = script; + var sctb = scriptPanel.toolbar = new Ext.Toolbar(sel.child('div')); + sctb.add({ + text: 'Run', + handler: function(){ + var s = script.dom.value; + if(trap.checked){ + try{ + var rt = eval(s); + Ext.debug.dump(rt === undefined? '(no return)' : rt); + }catch(e){ + Ext.debug.log(e.message || e.descript); + } + }else{ + var rt = eval(s); + Ext.debug.dump(rt === undefined? '(no return)' : rt); + } + } + }, { + text: 'Clear', + handler: function(){ + script.dom.value = ''; + script.dom.focus(); + } + }); + + var trap = Ext.DomHelper.append(sctb.el, {tag:'input', type:'checkbox', checked: 'checked'}); + trap.checked = true; + sctb.add('-', trap, 'Trap Errors'); + + + var stylesGrid = new Ext.grid.PropertyGrid(bd.createChild(), { + nameText: 'Style', + enableHdMenu: false, + enableColumnResize: false + }); + + var stylePanel = ilayout.add('east', new Ext.GridPanel(stylesGrid, + {title: '(No element selected)'})); + + stylesGrid.render(); + + stylesGrid.getView().mainHd.setDisplayed(false); + + clayout.tbar.add({ + text: 'Clear', + handler: function(){ + Ext.debug.console.jsonData = []; + Ext.debug.console.refresh(); + } + }); + + var treeEl = ilayout.main.getEl(); + var tb = ilayout.tbar; + + var inspectIgnore, inspecting; + + function inspectListener(e, t){ + if(!inspectIgnore.contains(e.getPoint())){ + findNode(t); + } + } + + function stopInspecting(e, t){ + if(!inspectIgnore.contains(e.getPoint())){ + inspect.toggle(false); + if(findNode(t) !== false){ + e.stopEvent(); + } + } + } + + function stopInspectingEsc(e, t){ + if(e.getKey() == e.ESC){ + inspect.toggle(false); + } + } + + var inspect = tb.addButton({ + text: 'Inspect', + enableToggle: true, + pressed:false, + toggleHandler: function(n, pressed){ + var d = Ext.get(document); + if(pressed){ + d.on('mouseover', inspectListener, window, {buffer:50}); + d.on('mousedown', stopInspecting); + d.on('keydown', stopInspectingEsc); + inspectIgnore = dlg.el.getRegion(); + inspecting = true; + }else{ + d.un('mouseover', inspectListener); + d.un('mousedown', stopInspecting); + d.on('keydown', stopInspectingEsc); + inspecting = false; + var n = tree.getSelectionModel().getSelectedNode(); + if(n && n.htmlNode){ + onNodeSelect(tree, n, false); + } + } + } + }); + + tb.addSeparator(); + + var frameEl = tb.addButton({ + text: 'Highlight Selection', + enableToggle: true, + pressed:false, + toggleHandler: function(n, pressed){ + var n = tree.getSelectionModel().getSelectedNode(); + if(n && n.htmlNode){ + n[pressed ? 'frame' : 'unframe'](); + } + } + }); + + tb.addSeparator(); + + var reload = tb.addButton({ + text: 'Refresh Children', + disabled:true, + handler: function(){ + var n = tree.getSelectionModel().getSelectedNode(); + if(n && n.reload){ + n.reload(); + } + } + }); + + tb.add( '-', { + text: 'Collapse All', + handler: function(){ + tree.root.collapse(true); + } + }); + + mainLayout.endUpdate(); + + mainLayout.getRegion('center').showPanel(0); + + stylesGrid.on('propertychange', function(s, name, value){ + var node = stylesGrid.treeNode; + if(styles){ + node.htmlNode.style[name] = value; + }else{ + node.htmlNode[name] = value; + } + node.refresh(true); + }); + + var stb = new Ext.Toolbar(stylesGrid.view.getHeaderPanel(true)); + + var swap = stb.addButton({ + text: 'DOM Attributes', + menu: { + items: [ + new Ext.menu.CheckItem({id:'dom', text:'DOM Attributes', checked: true, group:'xdb-styles'}), + new Ext.menu.CheckItem({id:'styles', text:'CSS Properties', group:'xdb-styles'}) + ] + } + }); + + swap.menu.on('click', function(){ + styles = swap.menu.items.get('styles').checked; + showAll[styles? 'show' : 'hide'](); + swap.setText(styles ? 'CSS Properties' : 'DOM Attributes'); + var n = tree.getSelectionModel().getSelectedNode(); + if(n){ + onNodeSelect(tree, n); + } + }); + + var addStyle = stb.addButton({ + text: 'Add', + disabled: true, + handler: function(){ + Ext.MessageBox.prompt('Add Property', 'Property Name:', function(btn, v){ + var store = stylesGrid.store.store; + if(btn == 'ok' && v && !store.getById(v)){ + var r = new Ext.grid.PropertyRecord({name:v, value: ''}, v); + store.add(r); + stylesGrid.startEditing(store.getCount()-1, 1); + } + }); + } + }); + + var showAll = stb.addButton({ + text: 'Computed Styles', + hidden: true, + pressed: false, + enableToggle: true, + toggleHandler: function(){ + var n = tree.getSelectionModel().getSelectedNode(); + if(n){ + onNodeSelect(tree, n); + } + } + }); + + var styles = false, hnode; + var nonSpace = /^\s*$/; + var html = Ext.util.Format.htmlEncode; + var ellipsis = Ext.util.Format.ellipsis; + var styleRe = /\s?([a-z\-]*)\:([^;]*)(?:[;\s\n\r]*)/gi; + + function findNode(n){ + if(!n || n.nodeType != 1 || n == document.body || n == document){ + return false; + } + var pn = [n], p = n; + while((p = p.parentNode) && p.nodeType == 1 && p.tagName.toUpperCase() != 'HTML'){ + pn.unshift(p); + } + var cn = hnode; + for(var i = 0, len = pn.length; i < len; i++){ + cn.expand(); + cn = cn.findChild('htmlNode', pn[i]); + if(!cn){ return false; + } + } + cn.select(); + var a = cn.ui.anchor; + treeEl.dom.scrollTop = Math.max(0 ,a.offsetTop-10); + cn.highlight(); + return true; + } + + function nodeTitle(n){ + var s = n.tagName; + if(n.id){ + s += '#'+n.id; + }else if(n.className){ + s += '.'+n.className; + } + return s; + } + + function onNodeSelect(t, n, last){ + if(last && last.unframe){ + last.unframe(); + } + var props = {}; + if(n && n.htmlNode){ + if(frameEl.pressed){ + n.frame(); + } + if(inspecting){ + return; + } + addStyle.enable(); + reload.setDisabled(n.leaf); + var dom = n.htmlNode; + stylePanel.setTitle(nodeTitle(dom)); + if(styles && !showAll.pressed){ + var s = dom.style ? dom.style.cssText : ''; + if(s){ + var m; + while ((m = styleRe.exec(s)) != null){ + props[m[1].toLowerCase()] = m[2]; + } + } + }else if(styles){ + var cl = Ext.debug.cssList; + var s = dom.style, fly = Ext.fly(dom); + if(s){ + for(var i = 0, len = cl.length; i' + ellipsis(html(String(c.nodeValue)), 35) + '', + cls: 'x-tree-noicon' + })); + } + } + cb(); + }; + + var tree = new Ext.tree.TreePanel(treeEl, { + enableDD:false , + loader: loader, + lines:false, + rootVisible:false, + animate:false, + hlColor:'ffff9c' + }); + tree.getSelectionModel().on('selectionchange', onNodeSelect, null, {buffer:250}); + + var root = tree.setRootNode(new Ext.tree.TreeNode('Ext')); + + hnode = root.appendChild(new Ext.debug.HtmlNode( + document.getElementsByTagName('html')[0] + )); + + tree.render(); + + Ext.debug.console = new Ext.JsonView(clayout.main.getEl(), + '
    > {msg}
    '); + Ext.debug.console.jsonData = []; + + Ext.debug.dialog = dlg; + }, + + show : function(){ + var d = Ext.debug; + if(!d.dialog){ + d.init(); + } + if(!d.dialog.isVisible()){ + d.dialog.show(); + } + }, + + hide : function(){ + if(Ext.debug.dialog){ + Ext.debug.dialog.hide(); + } + }, + + + log : function(arg1, arg2, etc){ + Ext.debug.show(); + var m = ""; + for(var i = 0, len = arguments.length; i < len; i++){ + m += (i == 0 ? "" : ", ") + arguments[i]; + } + var cn = Ext.debug.console; + cn.jsonData.unshift({msg: m}); + cn.refresh(); + }, + + + logf : function(format, arg1, arg2, etc){ + Ext.debug.log(String.format.apply(String, arguments)); + }, + + + dump : function(o){ + if(typeof o == 'string' || typeof o == 'number' || typeof o == 'undefined' || o instanceof Date){ + Ext.debug.log(o); + }else if(!o){ + Ext.debug.log("null"); + }else if(typeof o != "object"){ + Ext.debug.log('Unknown return type'); + }else if(o instanceof Array){ + Ext.debug.log('['+o.join(',')+']'); + }else{ + var b = ["{\n"]; + for(var key in o){ + var to = typeof o[key]; + if(to != "function" && to != "object"){ + b.push(String.format(" {0}: {1},\n", key, o[key])); + } + } + var s = b.join(""); + if(s.length > 3){ + s = s.substr(0, s.length-2); + } + Ext.debug.log(s + "\n}"); + } + }, + + _timers : {}, + + time : function(name){ + name = name || "def"; + Ext.debug._timers[name] = new Date().getTime(); + }, + + + timeEnd : function(name, printResults){ + var t = new Date().getTime(); + name = name || "def"; + var v = String.format("{0} ms", t-Ext.debug._timers[name]); + Ext.debug._timers[name] = new Date().getTime(); + if(printResults !== false){ + Ext.debug.log('Timer ' + (name == "def" ? v : name + ": " + v)); + } + return v; + } +}; + +Ext.debug.HtmlNode = function(){ + var html = Ext.util.Format.htmlEncode; + var ellipsis = Ext.util.Format.ellipsis; + var nonSpace = /^\s*$/; + + var attrs = [ + {n: 'id', v: 'id'}, + {n: 'className', v: 'class'}, + {n: 'name', v: 'name'}, + {n: 'type', v: 'type'}, + {n: 'src', v: 'src'}, + {n: 'href', v: 'href'} + ]; + + function hasChild(n){ + for(var i = 0, c; c = n.childNodes[i]; i++){ + if(c.nodeType == 1){ + return true; + } + } + return false; + } + + function renderNode(n, leaf){ + var tag = n.tagName.toLowerCase(); + var s = '<' + tag; + for(var i = 0, len = attrs.length; i < len; i++){ + var a = attrs[i]; + var v = n[a.n]; + if(v && !nonSpace.test(v)){ + s += ' ' + a.v + '="' + html(v) +'"'; + } + } + var style = n.style ? n.style.cssText : ''; + if(style){ + s += ' style="' + html(style.toLowerCase()) +'"'; + } + if(leaf && n.childNodes.length > 0){ + s+='>' + ellipsis(html(String(n.innerHTML)), 35) + '</'+tag+'>'; + }else if(leaf){ + s += ' />'; + }else{ + s += '>'; + } + return s; + } + + var HtmlNode = function(n){ + var leaf = !hasChild(n); + this.htmlNode = n; + this.tagName = n.tagName.toLowerCase(); + var attr = { + text : renderNode(n, leaf), + leaf : leaf, + cls: 'x-tree-noicon' + }; + HtmlNode.superclass.constructor.call(this, attr); + this.attributes.htmlNode = n; if(!leaf){ + this.on('expand', this.onExpand, this); + this.on('collapse', this.onCollapse, this); + } + }; + + + Ext.extend(HtmlNode, Ext.tree.AsyncTreeNode, { + cls: 'x-tree-noicon', + preventHScroll: true, + refresh : function(highlight){ + var leaf = !hasChild(this.htmlNode); + this.setText(renderNode(this.htmlNode, leaf)); + if(highlight){ + Ext.fly(this.ui.textNode).highlight(); + } + }, + + onExpand : function(){ + if(!this.closeNode && this.parentNode){ + this.closeNode = this.parentNode.insertBefore(new Ext.tree.TreeNode({ + text:'</' + this.tagName + '>', + cls: 'x-tree-noicon' + }), this.nextSibling); + }else if(this.closeNode){ + this.closeNode.ui.show(); + } + }, + + onCollapse : function(){ + if(this.closeNode){ + this.closeNode.ui.hide(); + } + }, + + render : function(bulkRender){ + HtmlNode.superclass.render.call(this, bulkRender); + }, + + highlightNode : function(){ + }, + + highlight : function(){ + }, + + frame : function(){ + this.htmlNode.style.border = '1px solid #0000ff'; + }, + + unframe : function(){ + this.htmlNode.style.border = ''; + } + }); + + return HtmlNode; +}(); + +Ext.debug.InnerLayout = function(id, w, cfg){ + var el = Ext.DomHelper.append(document.body, {id:id}); + var layout = new Ext.BorderLayout(el, { + north: { + initialSize:28 + }, + center: { + titlebar: false + }, + east: { + split:true, + initialSize:w, + titlebar:true + } + }); + Ext.debug.InnerLayout.superclass.constructor.call(this, layout, cfg); + + layout.beginUpdate(); + + var tbPanel = layout.add('north', new Ext.ContentPanel({ + autoCreate:true, fitToFrame:true})); + + this.main = layout.add('center', new Ext.ContentPanel({ + autoCreate:true, fitToFrame:true, autoScroll:true})); + + this.tbar = new Ext.Toolbar(tbPanel.el); + + var mtbEl = tbPanel.resizeEl = tbPanel.el.child('div.x-toolbar'); + mtbEl.setStyle('border-bottom', '0 none'); + layout.endUpdate(true); +}; + +Ext.extend(Ext.debug.InnerLayout, Ext.NestedLayoutPanel, { + add : function(){ + return this.layout.add.apply(this.layout, arguments); + } +}); + +Ext.debug.cssList = ['background-color','border','border-color','border-spacing', +'border-style','border-top','border-right','border-bottom','border-left','border-top-color', +'border-right-color','border-bottom-color','border-left-color','border-top-width','border-right-width', +'border-bottom-width','border-left-width','border-width','bottom','color','font-size','font-size-adjust', +'font-stretch','font-style','height','left','letter-spacing','line-height','margin','margin-top', +'margin-right','margin-bottom','margin-left','marker-offset','max-height','max-width','min-height', +'min-width','orphans','outline','outline-color','outline-style','outline-width','overflow','padding', +'padding-top','padding-right','padding-bottom','padding-left','quotes','right','size','text-indent', +'top','width','word-spacing','z-index','opacity','outline-offset']; + +if(typeof console == 'undefined'){ + console = Ext.debug; +} + + +Ext.EventManager.on(window, 'load', function(){ + Ext.get(document).on('keydown', function(e){ + if(e.ctrlKey && e.shiftKey && e.getKey() == e.HOME){ + Ext.debug.show(); + } + }); +}); + +Ext.print = Ext.log = Ext.debug.log; +Ext.printf = Ext.logf = Ext.debug.logf; +Ext.dump = Ext.debug.dump; +Ext.timer = Ext.debug.time; +Ext.timerEnd = Ext.debug.timeEnd; + diff --git a/examples/ext/ext-all.js b/examples/ext/ext-all.js new file mode 100644 index 0000000..8723f59 --- /dev/null +++ b/examples/ext/ext-all.js @@ -0,0 +1,135 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + +Ext.DomHelper=function(){var L=null;var F=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var B=/^table|tbody|tr|td$/i;var A=function(T){if(typeof T=="string"){return T}var P="";if(!T.tag){T.tag="div"}P+="<"+T.tag;for(var O in T){if(O=="tag"||O=="children"||O=="cn"||O=="html"||typeof T[O]=="function"){continue}if(O=="style"){var S=T["style"];if(typeof S=="function"){S=S.call()}if(typeof S=="string"){P+=" style=\""+S+"\""}else{if(typeof S=="object"){P+=" style=\"";for(var R in S){if(typeof S[R]!="function"){P+=R+":"+S[R]+";"}}P+="\""}}}else{if(O=="cls"){P+=" class=\""+T["cls"]+"\""}else{if(O=="htmlFor"){P+=" for=\""+T["htmlFor"]+"\""}else{P+=" "+O+"=\""+T[O]+"\""}}}}if(F.test(T.tag)){P+="/>"}else{P+=">";var U=T.children||T.cn;if(U){if(U instanceof Array){for(var Q=0,N=U.length;Q"}return P};var M=function(T,P){var S=document.createElement(T.tag||"div");var Q=S.setAttribute?true:false;for(var O in T){if(O=="tag"||O=="children"||O=="cn"||O=="html"||O=="style"||typeof T[O]=="function"){continue}if(O=="cls"){S.className=T["cls"]}else{if(Q){S.setAttribute(O,T[O])}else{S[O]=T[O]}}}Ext.DomHelper.applyStyles(S,T.style);var U=T.children||T.cn;if(U){if(U instanceof Array){for(var R=0,N=U.length;R",K=""+E,H=C+"",D=""+K;var G=function(N,O,Q,P){if(!L){L=document.createElement("div")}var R;var S=null;if(N=="td"){if(O=="afterbegin"||O=="beforeend"){return }if(O=="beforebegin"){S=Q;Q=Q.parentNode}else{S=Q.nextSibling;Q=Q.parentNode}R=I(4,H,P,D)}else{if(N=="tr"){if(O=="beforebegin"){S=Q;Q=Q.parentNode;R=I(3,C,P,K)}else{if(O=="afterend"){S=Q.nextSibling;Q=Q.parentNode;R=I(3,C,P,K)}else{if(O=="afterbegin"){S=Q.firstChild}R=I(4,H,P,D)}}}else{if(N=="tbody"){if(O=="beforebegin"){S=Q;Q=Q.parentNode;R=I(2,J,P,E)}else{if(O=="afterend"){S=Q.nextSibling;Q=Q.parentNode;R=I(2,J,P,E)}else{if(O=="afterbegin"){S=Q.firstChild}R=I(3,C,P,K)}}}else{if(O=="beforebegin"||O=="afterend"){return }if(O=="afterbegin"){S=Q.firstChild}R=I(2,J,P,E)}}}Q.insertBefore(R,S);return R};return{useDom:false,markup:function(N){return A(N)},applyStyles:function(P,Q){if(Q){P=Ext.fly(P);if(typeof Q=="string"){var O=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;var R;while((R=O.exec(Q))!=null){P.setStyle(R[1],R[2])}}else{if(typeof Q=="object"){for(var N in Q){P.setStyle(N,Q[N])}}else{if(typeof Q=="function"){Ext.DomHelper.applyStyles(P,Q.call())}}}}},insertHtml:function(P,R,Q){P=P.toLowerCase();if(R.insertAdjacentHTML){if(B.test(R.tagName)){var O;if(O=G(R.tagName.toLowerCase(),P,R,Q)){return O}}switch(P){case"beforebegin":R.insertAdjacentHTML("BeforeBegin",Q);return R.previousSibling;case"afterbegin":R.insertAdjacentHTML("AfterBegin",Q);return R.firstChild;case"beforeend":R.insertAdjacentHTML("BeforeEnd",Q);return R.lastChild;case"afterend":R.insertAdjacentHTML("AfterEnd",Q);return R.nextSibling}throw"Illegal insertion point -> \""+P+"\""}var N=R.ownerDocument.createRange();var S;switch(P){case"beforebegin":N.setStartBefore(R);S=N.createContextualFragment(Q);R.parentNode.insertBefore(S,R);return R.previousSibling;case"afterbegin":if(R.firstChild){N.setStartBefore(R.firstChild);S=N.createContextualFragment(Q);R.insertBefore(S,R.firstChild);return R.firstChild}else{R.innerHTML=Q;return R.firstChild}case"beforeend":if(R.lastChild){N.setStartAfter(R.lastChild);S=N.createContextualFragment(Q);R.appendChild(S);return R.lastChild}else{R.innerHTML=Q;return R.lastChild}case"afterend":N.setStartAfter(R);S=N.createContextualFragment(Q);R.parentNode.insertBefore(S,R.nextSibling);return R.nextSibling}throw"Illegal insertion point -> \""+P+"\""},insertBefore:function(N,P,O){return this.doInsert(N,P,O,"beforeBegin")},insertAfter:function(N,P,O){return this.doInsert(N,P,O,"afterEnd","nextSibling")},insertFirst:function(N,P,O){return this.doInsert(N,P,O,"afterBegin")},doInsert:function(Q,S,R,T,P){Q=Ext.getDom(Q);var O;if(this.useDom){O=M(S,null);Q.parentNode.insertBefore(O,P?Q[P]:Q)}else{var N=A(S);O=this.insertHtml(T,Q,N)}return R?Ext.get(O,true):O},append:function(P,R,Q){P=Ext.getDom(P);var O;if(this.useDom){O=M(R,null);P.appendChild(O)}else{var N=A(R);O=this.insertHtml("beforeEnd",P,N)}return Q?Ext.get(O,true):O},overwrite:function(N,P,O){N=Ext.getDom(N);N.innerHTML=A(P);return O?Ext.get(N.firstChild,true):N.firstChild},createTemplate:function(O){var N=A(O);return new Ext.Template(N)}}}(); +Ext.Template=function(A){if(A instanceof Array){A=A.join("")}else{if(arguments.length>1){A=Array.prototype.join.call(arguments,"")}}this.html=A};Ext.Template.prototype={applyTemplate:function(B){if(this.compiled){return this.compiled(B)}var A=this.disableFormats!==true;var E=Ext.util.Format,C=this;var D=function(G,I,L,H){if(L&&A){if(L.substr(0,5)=="this."){return C.call(L.substr(5),B[I],B)}else{if(H){var K=/^\s*['"](.*)["']\s*$/;H=H.split(",");for(var J=0,F=H.length;J+~]\s?|\s|$)/;var tagTokenRe=/^(#)?([\w-\*]+)/;var nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/;function child(p,index){var i=0;var n=p.firstChild;while(n){if(n.nodeType==1){if(++i==index){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 children(d){var n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){d.removeChild(n)}else{n.nodeIndex=++ni}n=nx}return this}function byClassName(c,a,v){if(!v){return c}var r=[],ri=-1,cn;for(var i=0,ci;ci=c[i];i++){if((" "+ci.className+" ").indexOf(v)!=-1){r[++ri]=ci}}return r}function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs;if(!ns){return result}tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[++ri]=ci}}}else{if(mode=="/"||mode==">"){var utag=tagName.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=ni.children||ni.childNodes;for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&(n.nodeType!=1||(tagName=="*"||n.tagName.toLowerCase()!=tagName))){}if(n){result[++ri]=n}}}}}}return result}function concat(a,b){if(b.slice){return a.concat(b)}for(var i=0,l=b.length;i1){return nodup(results)}return results},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select")}var n=valueCache[path](root);n=n[0]?n[0]:n;var v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el)}var isArray=(el instanceof Array);var result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},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},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1;var m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a);var f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},"empty":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},"contains":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||"").indexOf(v)!=-1){r[++ri]=ci}}return r},"nodeValue":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},"checked":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=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=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},"next":function(c,ss){var is=Ext.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},"prev":function(c,ss){var is=Ext.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r}}}}();Ext.query=Ext.DomQuery.select; +Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners}};Ext.util.Observable.prototype={fireEvent:function(){var A=this.events[arguments[0].toLowerCase()];if(typeof A=="object"){return A.fire.apply(A,Array.prototype.slice.call(arguments,1))}else{return true}},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(A,C,B,F){if(typeof A=="object"){F=A;for(var E in F){if(this.filterOptRe.test(E)){continue}if(typeof F[E]=="function"){this.addListener(E,F[E],F.scope,F)}else{this.addListener(E,F[E].fn,F[E].scope,F[E])}}return }F=(!F||typeof F=="boolean")?{}:F;A=A.toLowerCase();var D=this.events[A]||true;if(typeof D=="boolean"){D=new Ext.util.Event(this,A);this.events[A]=D}D.addListener(C,B,F)},removeListener:function(A,C,B){var D=this.events[A.toLowerCase()];if(typeof D=="object"){D.removeListener(C,B)}},purgeListeners:function(){for(var A in this.events){if(typeof this.events[A]=="object"){this.events[A].clearListeners()}}},relayEvents:function(F,D){var E=function(G){return function(){return this.fireEvent.apply(this,Ext.combine(G,Array.prototype.slice.call(arguments,0)))}};for(var C=0,A=D.length;C0}};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(C,B,A){C.fireEvent=C.fireEvent.createInterceptor(B,A)};Ext.util.Observable.releaseCapture=function(A){A.fireEvent=Ext.util.Observable.prototype.fireEvent};(function(){var B=function(F,G,E){var D=new Ext.util.DelayedTask();return function(){D.delay(G.buffer,F,E,Array.prototype.slice.call(arguments,0))}};var C=function(F,G,E,D){return function(){G.removeListener(E,D);return F.apply(D,arguments)}};var A=function(E,F,D){return function(){var G=Array.prototype.slice.call(arguments,0);setTimeout(function(){E.apply(D,G)},F.delay||10)}};Ext.util.Event=function(E,D){this.name=D;this.obj=E;this.listeners=[]};Ext.util.Event.prototype={addListener:function(H,G,E){var I=E||{};G=G||this.obj;if(!this.isListening(H,G)){var D={fn:H,scope:G,options:I};var F=H;if(I.delay){F=A(F,I,G)}if(I.single){F=C(F,this,H,G)}if(I.buffer){F=B(F,I,G)}D.fireFn=F;if(!this.firing){this.listeners.push(D)}else{this.listeners=this.listeners.slice(0);this.listeners.push(D)}}},findListener:function(I,H){H=H||this.obj;var F=this.listeners;for(var G=0,D=F.length;G0){this.firing=true;var G=Array.prototype.slice.call(arguments,0);for(var H=0;H");var D=document.getElementById("ie-deferred-loader");D.onreadystatechange=function(){if(this.readyState=="complete"){B()}}}else{if(Ext.isSafari){M=setInterval(function(){var E=document.readyState;if(E=="complete"){B()}},10)}}}L.on(window,"load",B)};var R=function(E,U){var D=new Ext.util.DelayedTask(E);return function(V){V=new Ext.EventObjectImpl(V);D.delay(U.buffer,E,null,[V])}};var P=function(V,U,D,E){return function(W){Ext.EventManager.removeListener(U,D,E);V(W)}};var F=function(D,E){return function(U){U=new Ext.EventObjectImpl(U);setTimeout(function(){D(U)},E.delay||10)}};var J=function(U,E,D,Y,X){var Z=(!D||typeof D=="boolean")?{}:D;Y=Y||Z.fn;X=X||Z.scope;var W=Ext.getDom(U);if(!W){throw"Error listening for \""+E+"\". Element \""+U+"\" doesn't exist."}var V=function(b){b=Ext.EventObject.setEvent(b);var a;if(Z.delegate){a=b.getTarget(Z.delegate,W);if(!a){return }}else{a=b.target}if(Z.stopEvent===true){b.stopEvent()}if(Z.preventDefault===true){b.preventDefault()}if(Z.stopPropagation===true){b.stopPropagation()}if(Z.normalized===false){b=b.browserEvent}Y.call(X||W,b,a,Z)};if(Z.delay){V=F(V,Z)}if(Z.single){V=P(V,W,E,Y)}if(Z.buffer){V=R(V,Z)}Y._handlers=Y._handlers||[];Y._handlers.push([Ext.id(W),E,V]);L.on(W,E,V);if(E=="mousewheel"&&W.addEventListener){W.addEventListener("DOMMouseScroll",V,false);L.on(window,"unload",function(){W.removeEventListener("DOMMouseScroll",V,false)})}if(E=="mousedown"&&W==document){Ext.EventManager.stoppedMouseDownEvent.addListener(V)}return V};var G=function(E,U,Z){var D=Ext.id(E),a=Z._handlers,X=Z;if(a){for(var V=0,Y=a.length;V=33&&D<=40)||D==this.RETURN||D==this.TAB||D==this.ESC},isSpecialKey:function(){var D=this.keyCode;return(this.type=="keypress"&&this.ctrlKey)||D==9||D==13||D==40||D==27||(D==16)||(D==17)||(D>=18&&D<=20)||(D>=33&&D<=35)||(D>=36&&D<=39)||(D>=44&&D<=45)},stopPropagation:function(){if(this.browserEvent){if(this.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(this)}B.stopPropagation(this.browserEvent)}},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){var D=this.keyCode||this.charCode;return Ext.isSafari?(A[D]||D):D},getPageX:function(){return this.xy[0]},getPageY:function(){return this.xy[1]},getTime:function(){if(this.browserEvent){return B.getTime(this.browserEvent)}return null},getXY:function(){return this.xy},getTarget:function(E,F,D){return E?Ext.fly(this.target).findParent(E,F,D):this.target},getRelatedTarget:function(){if(this.browserEvent){return B.getRelatedTarget(this.browserEvent)}return null},getWheelDelta:function(){var D=this.browserEvent;var E=0;if(D.wheelDelta){E=D.wheelDelta/120}else{if(D.detail){E=-D.detail/3}}return E},hasModifier:function(){return !!((this.ctrlKey||this.altKey)||this.shiftKey)},within:function(E,F){var D=this[F?"getRelatedTarget":"getTarget"]();return D&&Ext.fly(E).contains(D)},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 propCache={};var camelRe=/(-[a-z])/gi;var camelFn=function(m,a){return a.charAt(1).toUpperCase()};var view=document.defaultView;Ext.Element=function(element,forceNew){var dom=typeof element=="string"?document.getElementById(element):element;if(!dom){return null}var id=dom.id;if(forceNew!==true&&id&&Ext.Element.cache[id]){return Ext.Element.cache[id]}this.dom=dom;this.id=id||Ext.id(dom)};var El=Ext.Element;El.prototype={originalDisplay:"",visibilityMode:1,defaultUnit:"px",setVisibilityMode:function(visMode){this.visibilityMode=visMode;return this},enableDisplayMode:function(display){this.setVisibilityMode(El.DISPLAY);if(typeof display!="undefined"){this.originalDisplay=display}return this},findParent:function(simpleSelector,maxDepth,returnEl){var p=this.dom,b=document.body,depth=0,dq=Ext.DomQuery,stopEl;maxDepth=maxDepth||50;if(typeof maxDepth!="number"){stopEl=Ext.getDom(maxDepth);maxDepth=10}while(p&&p.nodeType==1&&depthcb){c.scrollTop=b-ch}}if(hscroll!==false){if(lcr){c.scrollLeft=r-c.clientWidth}}}return this},scrollChildIntoView:function(child,hscroll){Ext.fly(child,"_scrollChildIntoView").scrollIntoView(this,hscroll)},autoHeight:function(animate,duration,onComplete,easing){var oldHeight=this.getHeight();this.clip();this.setHeight(1);setTimeout(function(){var height=parseInt(this.dom.scrollHeight,10);if(!animate){this.setHeight(height);this.unclip();if(typeof onComplete=="function"){onComplete()}}else{this.setHeight(oldHeight);this.setHeight(height,animate,duration,function(){this.unclip();if(typeof onComplete=="function"){onComplete()}}.createDelegate(this),easing)}}.createDelegate(this),0);return this},contains:function(el){if(!el){return false}return D.isAncestor(this.dom,el.dom?el.dom:el)},isVisible:function(deep){var vis=!(this.getStyle("visibility")=="hidden"||this.getStyle("display")=="none");if(deep!==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(selector,unique){return El.select(selector,unique,this.dom)},query:function(selector,unique){return Ext.DomQuery.select(selector,this.dom)},child:function(selector,returnDom){var n=Ext.DomQuery.selectNode(selector,this.dom);return returnDom?n:Ext.get(n)},down:function(selector,returnDom){var n=Ext.DomQuery.selectNode(" > "+selector,this.dom);return returnDom?n:Ext.get(n)},initDD:function(group,config,overrides){var dd=new Ext.dd.DD(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides)},initDDProxy:function(group,config,overrides){var dd=new Ext.dd.DDProxy(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides)},initDDTarget:function(group,config,overrides){var dd=new Ext.dd.DDTarget(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides)},setVisible:function(visible,animate){if(!animate||!A){if(this.visibilityMode==El.DISPLAY){this.setDisplayed(visible)}else{this.fixDisplay();this.dom.style.visibility=visible?"visible":"hidden"}}else{var dom=this.dom;var visMode=this.visibilityMode;if(visible){this.setOpacity(0.01);this.setVisible(true)}this.anim({opacity:{to:(visible?1:0)}},this.preanim(arguments,1),null,0.35,"easeIn",function(){if(!visible){if(visMode==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(animate){this.setVisible(!this.isVisible(),this.preanim(arguments,0));return this},setDisplayed:function(value){if(typeof value=="boolean"){value=value?this.originalDisplay:"none"}this.setStyle("display",value);return this},focus:function(){try{this.dom.focus()}catch(e){}return this},blur:function(){try{this.dom.blur()}catch(e){}return this},addClass:function(className){if(className instanceof Array){for(var i=0,len=className.length;idw+scrollX){x=swapX?r.left-w:dw+scrollX-w}if(xdh+scrollY){y=swapY?r.top-h:dh+scrollY-h}if(yvr){x=vr-w;moved=true}if((y+h)>vb){y=vb-h;moved=true}if(x";E.onAvailable(id,function(){var hd=document.getElementsByTagName("head")[0];var re=/(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;var srcRe=/\ssrc=([\'\"])(.*?)\1/i;var typeRe=/\stype=([\'\"])(.*?)\1/i;var match;while(match=re.exec(html)){var attrs=match[1];var srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){var s=document.createElement("script");s.src=srcMatch[2];var typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2]}hd.appendChild(s)}else{if(match[2]&&match[2].length>0){if(window.execScript){window.execScript(match[2])}else{window.eval(match[2])}}}}var el=document.getElementById(id);if(el){el.parentNode.removeChild(el)}if(typeof callback=="function"){callback()}});dom.innerHTML=html.replace(/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,"");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(centerIn){this.alignTo(centerIn||document,"c-c");return this},isBorderBox:function(){return noBoxAdjust[this.dom.tagName.toLowerCase()]||Ext.isBorderBox},getBox:function(contentBox,local){var xy;if(!local){xy=this.getXY()}else{var left=parseInt(this.getStyle("left"),10)||0;var top=parseInt(this.getStyle("top"),10)||0;xy=[left,top]}var el=this.dom,w=el.offsetWidth,h=el.offsetHeight,bx;if(!contentBox){bx={x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h}}else{var l=this.getBorderWidth("l")+this.getPadding("l");var r=this.getBorderWidth("r")+this.getPadding("r");var t=this.getBorderWidth("t")+this.getPadding("t");var b=this.getBorderWidth("b")+this.getPadding("b");bx={x:xy[0]+l,y:xy[1]+t,0:xy[0]+l,1:xy[1]+t,width:w-(l+r),height:h-(t+b)}}bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&Ext.isBorderBox?0:(this.getPadding(sides)+this.getBorderWidth(sides))},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"))}this.setBounds(box.x,box.y,w,h,this.preanim(arguments,2));return this},repaint:function(){var dom=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.get(dom).removeClass("x-repaint")},1);return this},getMargins:function(side){if(!side){return{top:parseInt(this.getStyle("margin-top"),10)||0,left:parseInt(this.getStyle("margin-left"),10)||0,bottom:parseInt(this.getStyle("margin-bottom"),10)||0,right:parseInt(this.getStyle("margin-right"),10)||0}}else{return this.addStyles(side,El.margins)}},addStyles:function(sides,styles){var val=0,v,w;for(var i=0,len=sides.length;idom.clientHeight||dom.scrollWidth>dom.clientWidth},scrollTo:function(side,value,animate){var prop=side.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!animate||!A){this.dom[prop]=value}else{var to=prop=="scrollLeft"?[value,this.dom.scrollTop]:[this.dom.scrollLeft,value];this.anim({scroll:{"to":to}},this.preanim(arguments,2),"scroll")}return this},scroll:function(direction,distance,animate){if(!this.isScrollable()){return }var el=this.dom;var l=el.scrollLeft,t=el.scrollTop;var w=el.scrollWidth,h=el.scrollHeight;var cw=el.clientWidth,ch=el.clientHeight;direction=direction.toLowerCase();var scrolled=false;var a=this.preanim(arguments,2);switch(direction){case"l":case"left":if(w-l>cw){var v=Math.min(l+distance,w-cw);this.scrollTo("left",v,a);scrolled=true}break;case"r":case"right":if(l>0){var v=Math.max(l-distance,0);this.scrollTo("left",v,a);scrolled=true}break;case"t":case"top":case"up":if(t>0){var v=Math.max(t-distance,0);this.scrollTo("top",v,a);scrolled=true}break;case"b":case"bottom":case"down":if(h-t>ch){var v=Math.min(t+distance,h-ch);this.scrollTo("top",v,a);scrolled=true}break}return scrolled},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,defaultValue,prefix){var v=this.getStyle(attr);if(!v||v=="transparent"||v=="inherit"){return defaultValue}var color=typeof prefix=="undefined"?"#":prefix;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}color+=h}}else{if(v.substr(0,1)=="#"){if(v.length==4){for(var i=1;i<4;i++){var c=v.charAt(i);color+=c+c}}else{if(v.length==7){color+=v.substr(1)}}}}return(color.length>5?color.toLowerCase():defaultValue)},boxWrap:function(cls){cls=cls||"x-box";var el=Ext.get(this.insertHtml("beforeBegin",String.format("
    "+El.boxMarkup+"
    ",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;El.unitPattern=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;El.addUnits=function(v,defaultUnit){if(v===""||v=="auto"){return v}if(v===undefined){return""}if(typeof v=="number"||!El.unitPattern.test(v)){return v+(defaultUnit||"px")}return v};El.boxMarkup="
    ";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 docEl;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!=docEl){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(!docEl){var f=function(){};f.prototype=El.prototype;docEl=new f();docEl.dom=document}return docEl}}}}}}return null};El.uncache=function(el){for(var i=0,a=arguments,len=a.length;i0){F.defer((duration/2)*1000,this)}else{B.afterFx(D)}};F.call(this)});return this},pause:function(C){var A=this.getFxEl();var B={};A.queueFx(B,function(){setTimeout(function(){A.afterFx(B)},C*1000)});return this},fadeIn:function(B){var A=this.getFxEl();B=B||{};A.queueFx(B,function(){this.setOpacity(0);this.fixDisplay();this.dom.style.visibility="visible";var C=B.endOpacity||1;arguments.callee.anim=this.fxanim({opacity:{to:C}},B,null,0.5,"easeOut",function(){if(C==1){this.clearOpacity()}A.afterFx(B)})});return this},fadeOut:function(B){var A=this.getFxEl();B=B||{};A.queueFx(B,function(){arguments.callee.anim=this.fxanim({opacity:{to:B.endOpacity||0}},B,null,0.5,"easeOut",function(){if(this.visibilityMode==Ext.Element.DISPLAY||B.useDisplay){this.dom.style.display="none"}else{this.dom.style.visibility="hidden"}this.clearOpacity();A.afterFx(B)})});return this},scale:function(A,B,C){this.shift(Ext.apply({},C,{width:A,height:B}));return this},shift:function(B){var A=this.getFxEl();B=B||{};A.queueFx(B,function(){var E={},D=B.width,F=B.height,C=B.x,H=B.y,G=B.opacity;if(D!==undefined){E.width={to:this.adjustWidth(D)}}if(F!==undefined){E.height={to:this.adjustHeight(F)}}if(C!==undefined||H!==undefined){E.points={to:[C!==undefined?C:this.getX(),H!==undefined?H:this.getY()]}}if(G!==undefined){E.opacity={to:G}}if(B.xy!==undefined){E.points={to:B.xy}}arguments.callee.anim=this.fxanim(E,B,"motion",0.35,"easeOut",function(){A.afterFx(B)})});return this},ghost:function(A,C){var B=this.getFxEl();C=C||{};B.queueFx(C,function(){A=A||"b";var H=this.getFxRestore();var E=this.getWidth(),G=this.getHeight();var F=this.dom.style;var J=function(){if(C.useDisplay){B.setDisplayed(false)}else{B.hide()}B.clearOpacity();B.setPositioning(H.pos);F.width=H.width;F.height=H.height;B.afterFx(C)};var D={opacity:{to:0},points:{}},I=D.points;switch(A.toLowerCase()){case"t":I.by=[0,-G];break;case"l":I.by=[-E,0];break;case"r":I.by=[E,0];break;case"b":I.by=[0,G];break;case"tl":I.by=[-E,-G];break;case"bl":I.by=[-E,G];break;case"br":I.by=[E,G];break;case"tr":I.by=[E,-G];break}arguments.callee.anim=this.fxanim(D,C,"motion",0.5,"easeOut",J)});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 A=this.fxQueue[0];if(A){A.call(this)}},hasActiveFx:function(){return this.fxQueue&&this.fxQueue[0]},stopFx:function(){if(this.hasActiveFx()){var A=this.fxQueue[0];if(A&&A.anim&&A.anim.isAnimated()){this.fxQueue=[A];A.anim.stop(true)}}return this},beforeFx:function(A){if(this.hasActiveFx()&&!A.concurrent){if(A.stopFx){this.stopFx();return true}return false}return true},hasFxBlock:function(){var A=this.fxQueue;return A&&A[0]&&A[0].block},queueFx:function(C,A){if(!this.fxQueue){this.fxQueue=[]}if(!this.hasFxBlock()){Ext.applyIf(C,this.fxDefaults);if(!C.concurrent){var B=this.beforeFx(C);A.block=C.block;this.fxQueue.push(A);if(B){this.nextFx()}}else{A.call(this)}}return this},fxWrap:function(F,D,C){var B;if(!D.wrap||!(B=Ext.get(D.wrap))){var A;if(D.fixPosition){A=this.getXY()}var E=document.createElement("div");E.style.visibility=C;B=Ext.get(this.dom.parentNode.insertBefore(E,this.dom));B.setPositioning(F);if(B.getStyle("position")=="static"){B.position("relative")}this.clearPositioning("auto");B.clip();B.dom.appendChild(this.dom);if(A){B.setXY(A)}}return B},fxUnwrap:function(A,C,B){this.clearPositioning();this.setPositioning(C);if(!B.wrap){A.dom.parentNode.insertBefore(this.dom,A.dom);A.remove()}},getFxRestore:function(){var A=this.dom.style;return{pos:this.getPositioning(),width:A.width,height:A.height}},afterFx:function(A){if(A.afterStyle){this.applyStyles(A.afterStyle)}if(A.afterCls){this.addClass(A.afterCls)}if(A.remove===true){this.remove()}Ext.callback(A.callback,A.scope,[this]);if(!A.concurrent){this.fxQueue.shift();this.nextFx()}},getFxEl:function(){return Ext.get(this.dom)},fxanim:function(D,E,B,F,C,A){B=B||"run";E=E||{};var G=Ext.lib.Anim[B](this.dom,D,(E.duration||F)||0.35,(E.easing||C)||"easeOut",function(){Ext.callback(A,this)},this);E.anim=G;return G}};Ext.Fx.resize=Ext.Fx.scale;Ext.apply(Ext.Element.prototype,Ext.Fx); +Ext.CompositeElement=function(A){this.elements=[];this.addElements(A)};Ext.CompositeElement.prototype={isComposite:true,addElements:function(E){if(!E){return this}if(typeof E=="string"){E=Ext.Element.selectorFunction(E)}var D=this.elements;var B=D.length-1;for(var C=0,A=E.length;C"+A.text+""}if(typeof A.scripts!="undefined"){this.loadScripts=A.scripts}if(typeof A.timeout!="undefined"){this.timeout=A.timeout}}this.showLoading();if(!C){this.defaultUrl=B}if(typeof B=="function"){B=B.call(this)}F=F||(E?"POST":"GET");if(F=="GET"){B=this.prepareUrl(B)}var D=Ext.apply(A||{},{url:B,params:E,success:this.successDelegate,failure:this.failureDelegate,callback:undefined,timeout:(this.timeout*1000),argument:{"url":B,"form":null,"callback":G,"params":E}});this.transaction=Ext.Ajax.request(D)}},formUpdate:function(C,A,B,D){if(this.fireEvent("beforeupdate",this.el,C,A)!==false){if(typeof A=="function"){A=A.call(this)}C=Ext.getDom(C);this.transaction=Ext.Ajax.request({form:C,url:A,success:this.successDelegate,failure:this.failureDelegate,timeout:(this.timeout*1000),argument:{"url":A,"form":C,"callback":D,"reset":B}});this.showLoading.defer(1,this)}},refresh:function(A){if(this.defaultUrl==null){return }this.update(this.defaultUrl,null,A,true)},startAutoRefresh:function(B,C,D,E,A){if(A){this.update(C||this.defaultUrl,D,E,true)}if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId)}this.autoRefreshProcId=setInterval(this.update.createDelegate(this,[C||this.defaultUrl,D,E,true]),B*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(B){if(this.disableCaching){var A="_dc="+(new Date().getTime());if(B.indexOf("?")!==-1){B+="&"+A}else{B+="?"+A}}return B},processSuccess:function(A){this.transaction=null;if(A.argument.form&&A.argument.reset){try{A.argument.form.reset()}catch(B){}}if(this.loadScripts){this.renderer.render(this.el,A,this,this.updateComplete.createDelegate(this,[A]))}else{this.renderer.render(this.el,A,this);this.updateComplete(A)}},updateComplete:function(A){this.fireEvent("update",this.el,A);if(typeof A.argument.callback=="function"){A.argument.callback(this.el,true,A)}},processFailure:function(A){this.transaction=null;this.fireEvent("failure",this.el,A);if(typeof A.argument.callback=="function"){A.argument.callback(this.el,false,A)}},setRenderer:function(A){this.renderer=A},getRenderer:function(){return this.renderer},setDefaultUrl:function(A){this.defaultUrl=A},abort:function(){if(this.transaction){Ext.Ajax.abort(this.transaction)}},isUpdating:function(){if(this.transaction){return Ext.Ajax.isLoading(this.transaction)}return false}});Ext.UpdateManager.defaults={timeout:30,loadScripts:false,sslBlankUrl:(Ext.SSL_SECURE_URL||"javascript:false"),disableCaching:false,showLoadIndicator:true,indicatorText:"
    Loading...
    "};Ext.UpdateManager.updateElement=function(D,C,E,B){var A=Ext.get(D,true).getUpdateManager();Ext.apply(A,B);A.update(C,E,B?B.callback:null)};Ext.UpdateManager.update=Ext.UpdateManager.updateElement;Ext.UpdateManager.BasicRenderer=function(){};Ext.UpdateManager.BasicRenderer.prototype={render:function(C,A,B,D){C.update(A.responseText,B.loadScripts,D)}}; +Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(B){if(Date.formatFunctions[B]==null){Date.createNewFormat(B)}var A=Date.formatFunctions[B];return this[A]()};Date.prototype.format=Date.prototype.dateFormat;Date.createNewFormat=function(format){var funcName="format"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var code="Date.prototype."+funcName+" = function(){return ";var special=false;var ch="";for(var i=0;i 0) {";var regex="";var special=false;var ch="";for(var i=0;i= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"+"{v = new Date(y, m, d, h, i, s);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"+"{v = new Date(y, m, d, h, i);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"+"{v = new Date(y, m, d, h);}\n"+"else if (y >= 0 && m >= 0 && d > 0)\n"+"{v = new Date(y, m, d);}\n"+"else if (y >= 0 && m >= 0)\n"+"{v = new Date(y, m);}\n"+"else if (y >= 0)\n"+"{v = new Date(y);}\n"+"}return (v && (z || o))?\n"+" ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n"+" v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n"+";}";Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$");eval(code)};Date.formatCodeToRegex=function(B,A){switch(B){case"D":return{g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case"j":return{g:1,c:"d = parseInt(results["+A+"], 10);\n",s:"(\\d{1,2})"};case"d":return{g:1,c:"d = parseInt(results["+A+"], 10);\n",s:"(\\d{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["+A+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"};case"M":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+A+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case"n":return{g:1,c:"m = parseInt(results["+A+"], 10) - 1;\n",s:"(\\d{1,2})"};case"m":return{g:1,c:"m = parseInt(results["+A+"], 10) - 1;\n",s:"(\\d{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["+A+"], 10);\n",s:"(\\d{4})"};case"y":return{g:1,c:"var ty = parseInt(results["+A+"], 10);\n"+"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"};case"a":return{g:1,c:"if (results["+A+"] == '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["+A+"] == 'AM') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"};case"g":case"G":return{g:1,c:"h = parseInt(results["+A+"], 10);\n",s:"(\\d{1,2})"};case"h":case"H":return{g:1,c:"h = parseInt(results["+A+"], 10);\n",s:"(\\d{2})"};case"i":return{g:1,c:"i = parseInt(results["+A+"], 10);\n",s:"(\\d{2})"};case"s":return{g:1,c:"s = parseInt(results["+A+"], 10);\n",s:"(\\d{2})"};case"O":return{g:1,c:["o = results[",A,"];\n","var sn = o.substring(0,1);\n","var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);\n","var mn = o.substring(3,5) % 60;\n","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n"," (sn + String.leftPad(hr, 2, 0) + String.leftPad(mn, 2, 0)) : null;\n"].join(""),s:"([+-]\\d{4})"};case"T":return{g:0,c:null,s:"[A-Z]{1,4}"};case"Z":return{g:1,c:"z = results["+A+"];\n"+"z = (-43200 <= z*1 && z*1 <= 50400)? z : null;\n",s:"([+-]?\\d{1,5})"};default:return{g:0,c:null,s:String.escape(B)}}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{1,4})[\-+][0-9]{4} .*$/,"$1")};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?"-":"+")+String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset()/60)),2,"0")+String.leftPad(this.getTimezoneOffset()%60,2,"0")};Date.prototype.getDayOfYear=function(){var A=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var B=0;B28){A=Math.min(A,this.getFirstDateOfMonth().add("mo",C).getLastDateOfMonth().getDate())}D.setDate(A);D.setMonth(this.getMonth()+C);break;case Date.YEAR:D.setFullYear(this.getFullYear()+C);break}return D}; +Ext.util.DelayedTask=function(E,D,A){var G=null,F,B;var C=function(){var H=new Date().getTime();if(H-B>=F){clearInterval(G);G=null;E.apply(D,A||[])}};this.delay=function(I,K,J,H){if(G&&I!=F){this.cancel()}F=I;B=new Date().getTime();E=K||E;D=J||D;A=H||A;if(!G){G=setInterval(C,F)}};this.cancel=function(){if(G){clearInterval(G);G=null}}}; +Ext.util.TaskRunner=function(E){E=E||10;var F=[],A=[];var B=0;var G=false;var D=function(){G=false;clearInterval(B);B=0};var H=function(){if(!G){G=true;B=setInterval(I,E)}};var C=function(J){A.push(J);if(J.onStop){J.onStop()}};var I=function(){if(A.length>0){for(var O=0,K=A.length;O1||E instanceof Array){var B=arguments.length>1?arguments:E;for(var D=0,A=B.length;D=this.length){return this.add(B,C)}this.length++;this.items.splice(A,0,C);if(typeof B!="undefined"&&B!=null){this.map[B]=C}this.keys.splice(A,0,B);this.fireEvent("add",A,C,B);return C},remove:function(A){return this.removeAt(this.indexOf(A))},removeAt:function(A){if(A=0){this.length--;var C=this.items[A];this.items.splice(A,1);var B=this.keys[A];if(typeof B!="undefined"){delete this.map[B]}this.keys.splice(A,1);this.fireEvent("remove",C,B)}},removeKey:function(A){return this.removeAt(this.indexOfKey(A))},getCount:function(){return this.length},indexOf:function(C){if(!this.items.indexOf){for(var B=0,A=this.items.length;B=A;C--){D[D.length]=B[C]}}return D},filter:function(B,A){if(!A.exec){A=String(A);if(A.length==0){return this.clone()}A=new RegExp("^"+Ext.escapeRe(A),"i")}return this.filterBy(function(C){return C&&A.test(C[B])})},filterBy:function(F,E){var G=new Ext.util.MixedCollection();G.getKey=this.getKey;var B=this.keys,D=this.items;for(var C=0,A=D.length;Clen){return value.substr(0,len-3)+"..."}return value},undef:function(value){return typeof value!="undefined"?value:""},htmlEncode:function(value){return !value?value:String(value).replace(/&/g,"&").replace(/>/g,">").replace(/").replace(/</g,"<").replace(/"/g,"\"")},trim:function(value){return String(value).replace(trimRe,"")},substr:function(value,start,length){return String(value).substr(start,length)},lowercase:function(value){return String(value).toLowerCase()},uppercase:function(value){return String(value).toUpperCase()},capitalize:function(value){return !value?value:value.charAt(0).toUpperCase()+value.substr(1).toLowerCase()},call:function(value,fn){if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);args.unshift(value);return eval(fn).apply(window,args)}else{return eval(fn).call(window,value)}},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);v=String(v);var ps=v.split(".");var whole=ps[0];var sub=ps[1]?"."+ps[1]:".00";var r=/(\d+)(\d{3})/;while(r.test(whole)){whole=whole.replace(r,"$1"+","+"$2")}return"$"+whole+sub},date:function(v,format){if(!v){return""}if(!(v instanceof Date)){v=new Date(Date.parse(v))}return v.dateFormat(format||"m/d/Y")},dateRenderer:function(format){return function(v){return Ext.util.Format.date(v,format)}},stripTagsRE:/<\/?[^>]+>/gi,stripTags:function(v){return !v?v:String(v).replace(this.stripTagsRE,"")}}}(); +Ext.MasterTemplate=function(){Ext.MasterTemplate.superclass.constructor.apply(this,arguments);this.originalHtml=this.html;var D={};var A,E=this.subTemplateRe;E.lastIndex=0;var C=0;while(A=E.exec(this.html)){var B=A[1],F=A[2];D[C]={name:B,index:C,buffer:[],tpl:new Ext.Template(F)};if(B){D[B]=D[C]}D[C].tpl.compile();D[C].tpl.call=this.call.createDelegate(this);C++}this.subCount=C;this.subs=D};Ext.extend(Ext.MasterTemplate,Ext.Template,{subTemplateRe:/((?:.|\n)*?)<\/tpl>/gi,add:function(B,A){if(arguments.length==1){A=arguments[0];B=0}var C=this.subs[B];C.buffer[C.buffer.length]=C.tpl.apply(A);return this},fill:function(D,C,F){var B=arguments;if(B.length==1||(B.length==2&&typeof B[1]=="boolean")){C=B[0];D=0;F=B[1]}if(F){this.reset()}for(var E=0,A=C.length;E",P,""].join("");var O=/]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;var N=/^]*?for="(.*?)"/;var L=/^]*?if="(.*?)"/;var J=/^]*?exec="(.*?)"/;var C,B=0;var G=[];while(C=P.match(O)){var M=C[0].match(N);var K=C[0].match(L);var I=C[0].match(J);var E=null,H=null,D=null;var A=M&&M[1]?M[1]:"";if(K){E=K&&K[1]?K[1]:null;if(E){H=new Function("values","parent","with(values){ return "+(Ext.util.Format.htmlDecode(E))+"; }")}}if(I){E=I&&I[1]?I[1]:null;if(E){D=new Function("values","parent","with(values){ "+(Ext.util.Format.htmlDecode(E))+"; }")}}if(A){switch(A){case".":A=new Function("values","parent","with(values){ return values; }");break;case"..":A=new Function("values","parent","with(values){ return parent; }");break;default:A=new Function("values","parent","with(values){ return "+A+"; }")}}G.push({id:B,target:A,exec:D,test:H,body:C[1]||""});P=P.replace(C[0],"{xtpl"+B+"}");++B}for(var F=G.length-1;F>=0;--F){this.compileTpl(G[F])}this.master=G[G.length-1];this.tpls=G};Ext.extend(Ext.XTemplate,Ext.Template,{re:/\{([\w-\.]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,applySubTemplate:function(H,B,F){var E=this.tpls[H];if(E.test&&!E.test.call(this,B,F)){return""}if(E.exec&&E.exec.call(this,B,F)){return""}var G=E.target?E.target.call(this,B,F):B;F=E.target?B:F;if(E.target&&G instanceof Array){var C=[];for(var D=0,A=G.length;D=0;--E){D[H[E].selectorText]=H[E]}}catch(G){}},getRules:function(F){if(D==null||F){D={};var H=C.styleSheets;for(var G=0,E=H.length;G=37&&A<=40){C.stopEvent()}},relay:function(C){var A=C.getKey();var B=this.keyToHandler[A];if(B&&this[B]){if(this.doRelay(C,this[B],B)!==true){C[this.defaultEventAction]()}}},doRelay:function(C,B,A){return B.call(this.scope||this,C)},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(this.forceKeyDown||Ext.isIE||Ext.isAir){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(this.forceKeyDown||Ext.isIE||Ext.isAir){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(C,B,A){this.el=Ext.get(C);this.eventName=A||"keydown";this.bindings=[];if(B){this.addBinding(B)}this.enable()};Ext.KeyMap.prototype={stopEvent:false,addBinding:function(D){if(D instanceof Array){for(var F=0,H=D.length;F=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true}}this.xTicks.sort(this.DDM.numericSort)},setYTicks:function(F,C){this.yTicks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true}}this.yTicks.sort(this.DDM.numericSort)},setXConstraint:function(E,D,C){this.leftConstraint=E;this.rightConstraint=D;this.minX=this.initPageX-E;this.maxX=this.initPageX+D;if(C){this.setXTicks(this.initPageX,C)}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(C,E,D){this.topConstraint=C;this.bottomConstraint=E;this.minY=this.initPageY-C;this.maxY=this.initPageY+E;if(D){this.setYTicks(this.initPageY,D)}this.constrainY=true},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C)}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(I,F){if(!F){return I}else{if(F[0]>=I){return F[0]}else{for(var D=0,C=F.length;D=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E]}}return F[F.length-1]}}},toString:function(){return("DragDrop "+this.id)}}})();if(!Ext.dd.DragDropMgr){Ext.dd.DragDropMgr=function(){var A=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(D,C){for(var E in this.ids){for(var B in this.ids[E]){var F=this.ids[E][B];if(!this.isTypeOfDD(F)){continue}F[D].apply(F,C)}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true)},_onResize:function(B){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(C,B){if(!this.initialized){this.init()}if(!this.ids[B]){this.ids[B]={}}this.ids[B][C.id]=C},removeDDFromGroup:function(D,B){if(!this.ids[B]){this.ids[B]={}}var C=this.ids[B];if(C&&C[D.id]){delete C[D.id]}},_remove:function(C){for(var B in C.groups){if(B&&this.ids[B][C.id]){delete this.ids[B][C.id]}}delete this.handleIds[C.id]},regHandle:function(C,B){if(!this.handleIds[C]){this.handleIds[C]={}}this.handleIds[C][B]=B},isDragDrop:function(B){return(this.getDDById(B))?true:false},getRelated:function(F,C){var E=[];for(var D in F.groups){for(j in this.ids[D]){var B=this.ids[D][j];if(!this.isTypeOfDD(B)){continue}if(!C||B.isTarget){E[E.length]=B}}}return E},isLegalTarget:function(F,E){var C=this.getRelated(F,true);for(var D=0,B=C.length;Dthis.clickPixelThresh||B>this.clickPixelThresh){this.startDrag(this.startX,this.startY)}}if(this.dragThreshMet){this.dragCurrent.b4Drag(D);this.dragCurrent.onDrag(D);if(!this.dragCurrent.moveOnly){this.fireEvents(D,false)}}this.stopEvent(D);return true},fireEvents:function(K,L){var N=this.dragCurrent;if(!N||N.isLocked()){return }var O=K.getPoint();var B=[];var E=[];var I=[];var G=[];var D=[];for(var F in this.dragOvers){var C=this.dragOvers[F];if(!this.isTypeOfDD(C)){continue}if(!this.isOverTarget(O,C,this.mode)){E.push(C)}B[F]=true;delete this.dragOvers[F]}for(var M in N.groups){if("string"!=typeof M){continue}for(F in this.ids[M]){var H=this.ids[M][F];if(!this.isTypeOfDD(H)){continue}if(H.isTarget&&!H.isLocked()&&H!=N){if(this.isOverTarget(O,H,this.mode)){if(L){G.push(H)}else{if(!B[H.id]){D.push(H)}else{I.push(H)}this.dragOvers[H.id]=H}}}}}if(this.mode){if(E.length){N.b4DragOut(K,E);N.onDragOut(K,E)}if(D.length){N.onDragEnter(K,D)}if(I.length){N.b4DragOver(K,I);N.onDragOver(K,I)}if(G.length){N.b4DragDrop(K,G);N.onDragDrop(K,G)}}else{var J=0;for(F=0,J=E.length;F2000){}else{setTimeout(B._addListeners,10);if(document&&document.body){B._timeoutCount+=1}}}},handleWasClicked:function(B,D){if(this.isHandle(D,B.id)){return true}else{var C=B.parentNode;while(C){if(this.isHandle(D,C.id)){return true}else{C=C.parentNode}}}return false}}}();Ext.dd.DDM=Ext.dd.DragDropMgr;Ext.dd.DDM._addListeners()}Ext.dd.DD=function(C,A,B){if(C){this.init(C,A,B)}};Ext.extend(Ext.dd.DD,Ext.dd.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setDelta(A,D)},setDelta:function(B,A){this.deltaX=B;this.deltaY=A},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B)},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);var B=C.dom?C:Ext.fly(C);if(!this.deltaSetXY){var H=[E.x,E.y];B.setXY(H);var D=B.getLeft(true);var A=B.getTop(true);this.deltaSetXY=[D-E.x,A-E.y]}else{B.setLeftTop(E.x+this.deltaSetXY[0],E.y+this.deltaSetXY[1])}this.cachePosition(E.x,E.y);this.autoScroll(E.x,E.y,C.offsetHeight,C.offsetWidth);return E},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A}else{var C=Ext.lib.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1]}},autoScroll:function(J,I,E,K){if(this.scroll){var L=Ext.lib.Dom.getViewWidth();var B=Ext.lib.Dom.getViewHeight();var N=this.DDM.getScrollTop();var D=this.DDM.getScrollLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(B+D-J-this.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G0&&I-NB&&F0&&J-Dthis.maxX){A=this.maxX}}if(this.constrainY){if(Dthis.maxY){D=this.maxY}}A=this.getTick(A,this.xTicks);D=this.getTick(D,this.yTicks);return{x:A,y:D}},applyConfig:function(){Ext.dd.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false)},b4MouseDown:function(A){this.autoOffset(A.getPageX(),A.getPageY())},b4Drag:function(A){this.setDragElPos(A.getPageX(),A.getPageY())},toString:function(){return("DD "+this.id)}});Ext.dd.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame()}};Ext.dd.DDProxy.dragElId="ygddfdiv";Ext.extend(Ext.dd.DDProxy,Ext.dd.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this;var A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame()},50);return }var D=this.getDragEl();if(!D){D=document.createElement("div");D.id=this.dragElId;var C=D.style;C.position="absolute";C.visibility="hidden";C.cursor="move";C.border="2px solid #aaa";C.zIndex=999;A.insertBefore(D,A.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(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2))}this.setDragElPos(E,D);Ext.fly(A).show()},_resizeProxy:function(){if(this.resizeFrame){var A=this.getEl();Ext.fly(this.getDragEl()).setSize(A.offsetWidth,A.offsetHeight)}},b4MouseDown:function(B){var A=B.getPageX();var C=B.getPageY();this.autoOffset(A,C);this.setDragElPos(A,C)},b4StartDrag:function(A,B){this.showFrame(A,B)},b4EndDrag:function(A){Ext.fly(this.getDragEl()).hide()},endDrag:function(C){var B=this.getEl();var A=this.getDragEl();A.style.visibility="";this.beforeMove();B.style.visibility="hidden";Ext.dd.DDM.moveToEl(B,A);A.style.visibility="hidden";B.style.visibility="";this.afterDrag()},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id)}});Ext.dd.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B)}};Ext.extend(Ext.dd.DDTarget,Ext.dd.DragDrop,{toString:function(){return("DDTarget "+this.id)}}); +Ext.dd.ScrollManager=function(){var C=Ext.dd.DragDropMgr;var E={};var B=null;var H={};var G=function(K){B=null;A()};var I=function(){if(C.dragCurrent){C.refreshCache(C.dragCurrent.groups)}};var D=function(){if(C.dragCurrent){var K=Ext.dd.ScrollManager;if(!K.animate){if(H.el.scroll(H.dir,K.increment)){I()}}else{H.el.scroll(H.dir,K.increment,true,K.animDuration,I)}}};var A=function(){if(H.id){clearInterval(H.id)}H.id=0;H.el=null;H.dir=""};var F=function(L,K){A();H.el=L;H.dir=K;H.id=setInterval(D,Ext.dd.ScrollManager.frequency)};var J=function(Q,L){if(L||!C.dragCurrent){return }var K=Ext.dd.ScrollManager;if(!B||B!=C.dragCurrent){B=C.dragCurrent;K.refreshCache()}var P=Ext.lib.Event.getXY(Q);var O=new Ext.lib.Point(P[0],P[1]);for(var R in E){var M=E[R],N=M._region;if(N&&N.contains(O)&&M.isScrollable()){if(N.bottom-O.y<=K.thresh){if(H.el!=M){F(M,"down")}return }else{if(N.right-O.x<=K.thresh){if(H.el!=M){F(M,"left")}return }else{if(O.y-N.top<=K.thresh){if(H.el!=M){F(M,"up")}return }else{if(O.x-N.left<=K.thresh){if(H.el!=M){F(M,"right")}return }}}}}}A()};C.fireEvents=C.fireEvents.createSequence(J,C);C.stopDrag=C.stopDrag.createSequence(G,C);return{register:function(M){if(M instanceof Array){for(var L=0,K=M.length;L]+>/gi,asText:function(A){return String(A).replace(this.stripTagsRE,"")},asUCText:function(A){return String(A).toUpperCase().replace(this.stripTagsRE,"")},asUCString:function(A){return String(A).toUpperCase()},asDate:function(A){if(!A){return 0}if(A instanceof Date){return A.getTime()}return Date.parse(String(A))},asFloat:function(A){var B=parseFloat(String(A).replace(/,/g,""));if(isNaN(B)){B=0}return B},asInt:function(A){var B=parseInt(String(A).replace(/,/g,""));if(isNaN(B)){B=0}return B}}; +Ext.data.Record=function(A,B){this.id=(B||B===0)?B:++Ext.data.Record.AUTO_ID;this.data=A};Ext.data.Record.create=function(E){var C=function(){C.superclass.constructor.apply(this,arguments)};Ext.extend(C,Ext.data.Record);var D=C.prototype;D.fields=new Ext.util.MixedCollection(false,function(F){return F.name});for(var B=0,A=E.length;BG?1:(H0},appendChild:function(E){var F=false;if(E instanceof Array){F=E}else{if(arguments.length>1){F=arguments}}if(F){for(var D=0,A=F.length;D0){var F=D?function(){E.apply(D,arguments)}:E;C.sort(F);for(var B=0;BG+L.left){H=G-I-this.shadowOffset;E=true}if((F+D)>C+L.top){F=C-D-this.shadowOffset;E=true}if(H=J){F=J-D-5}}K=[H,F];this.storeXY(K);A.setXY.call(this,K);this.sync()}}},isVisible:function(){return this.visible},showAction:function(){this.visible=true;if(this.useDisplay===true){this.setDisplayed("")}else{if(this.lastXY){A.setXY.call(this,this.lastXY)}else{if(this.lastLT){A.setLeftTop.call(this,this.lastLT[0],this.lastLT[1])}}}},hideAction:function(){this.visible=false;if(this.useDisplay===true){this.setDisplayed(false)}else{this.setLeftTop(-10000,-10000)}},setVisible:function(E,D,G,H,F){if(E){this.showAction()}if(D&&E){var C=function(){this.sync(true);if(H){H()}}.createDelegate(this);A.setVisible.call(this,true,true,G,C,F)}else{if(!E){this.hideUnders(true)}var C=H;if(D){C=function(){this.hideAction();if(H){H()}}.createDelegate(this)}A.setVisible.call(this,E,D,G,C,F);if(E){this.sync(true)}else{if(!D){this.hideAction()}}}},storeXY:function(C){delete this.lastLT;this.lastXY=C},storeLeftTop:function(D,C){delete this.lastXY;this.lastLT=[D,C]},beforeFx:function(){this.beforeAction();return Ext.Layer.superclass.beforeFx.apply(this,arguments)},afterFx:function(){Ext.Layer.superclass.afterFx.apply(this,arguments);this.sync(this.isVisible())},beforeAction:function(){if(!this.updating&&this.shadow){this.shadow.hide()}},setLeft:function(C){this.storeLeftTop(C,this.getTop(true));A.setLeft.apply(this,arguments);this.sync()},setTop:function(C){this.storeLeftTop(this.getLeft(true),C);A.setTop.apply(this,arguments);this.sync()},setLeftTop:function(D,C){this.storeLeftTop(D,C);A.setLeftTop.apply(this,arguments);this.sync()},setXY:function(F,D,G,H,E){this.fixDisplay();this.beforeAction();this.storeXY(F);var C=this.createCB(H);A.setXY.call(this,F,D,G,C,E);if(!D){C()}},createCB:function(D){var C=this;return function(){C.constrainXY();C.sync(true);if(D){D()}}},setX:function(C,D,F,G,E){this.setXY([C,this.getY()],D,F,G,E)},setY:function(G,C,E,F,D){this.setXY([this.getX(),G],C,E,F,D)},setSize:function(E,F,D,H,I,G){this.beforeAction();var C=this.createCB(I);A.setSize.call(this,E,F,D,H,C,G);if(!D){C()}},setWidth:function(E,D,G,H,F){this.beforeAction();var C=this.createCB(H);A.setWidth.call(this,E,D,G,C,F);if(!D){C()}},setHeight:function(E,D,G,H,F){this.beforeAction();var C=this.createCB(H);A.setHeight.call(this,E,D,G,C,F);if(!D){C()}},setBounds:function(J,H,K,D,I,F,G,E){this.beforeAction();var C=this.createCB(G);if(!I){this.storeXY([J,H]);A.setXY.call(this,[J,H]);A.setSize.call(this,K,D,I,F,C,E);C()}else{A.setBounds.call(this,J,H,K,D,I,F,C,E)}return this},setZIndex:function(C){this.zindex=C;this.setStyle("z-index",C+2);if(this.shadow){this.shadow.setZIndex(C+1)}if(this.shim){this.shim.setStyle("z-index",C)}}})})(); +Ext.Shadow=function(C){Ext.apply(this,C);if(typeof this.mode!="string"){this.mode=this.defaultMode}var D=this.offset,B={h:0};var A=Math.floor(this.offset/2);switch(this.mode.toLowerCase()){case"drop":B.w=0;B.l=B.t=D;B.t-=1;if(Ext.isIE){B.l-=this.offset+A;B.t-=this.offset+A;B.w-=A;B.h-=A;B.t+=1}break;case"sides":B.w=(D*2);B.l=-D;B.t=D-1;if(Ext.isIE){B.l-=(this.offset-A);B.t-=this.offset+A;B.l+=1;B.w-=(this.offset-A)*2;B.w-=A+1;B.h-=1}break;case"frame":B.w=B.h=(D*2);B.l=B.t=-D;B.t+=1;B.h-=2;if(Ext.isIE){B.l-=(this.offset-A);B.t-=(this.offset-A);B.l+=1;B.w-=(this.offset+A+1);B.h-=(this.offset+A);B.h+=1}break}this.adjusts=B};Ext.Shadow.prototype={offset:4,defaultMode:"drop",show:function(A){A=Ext.get(A);if(!this.el){this.el=Ext.Shadow.Pool.pull();if(this.el.dom.nextSibling!=A.dom){this.el.insertBefore(A)}}this.el.setStyle("z-index",this.zIndex||parseInt(A.getStyle("z-index"),10)-1);if(Ext.isIE){this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")"}this.realign(A.getLeft(true),A.getTop(true),A.getWidth(),A.getHeight());this.el.dom.style.display="block"},isVisible:function(){return this.el?true:false},realign:function(A,M,L,D){if(!this.el){return }var I=this.adjusts,G=this.el.dom,N=G.style;var E=0;N.left=(A+I.l)+"px";N.top=(M+I.t)+"px";var K=(L+I.w),C=(D+I.h),F=K+"px",J=C+"px";if(N.width!=F||N.height!=J){N.width=F;N.height=J;if(!Ext.isIE){var H=G.childNodes;var B=Math.max(0,(K-12))+"px";H[0].childNodes[1].style.width=B;H[1].childNodes[1].style.width=B;H[2].childNodes[1].style.width=B;H[1].style.height=Math.max(0,(C-12))+"px"}}},hide:function(){if(this.el){this.el.dom.style.display="none";Ext.Shadow.Pool.push(this.el);delete this.el}},setZIndex:function(A){this.zIndex=A;if(this.el){this.el.setStyle("z-index",A)}}};Ext.Shadow.Pool=function(){var B=[];var A=Ext.isIE?"
    ":"
    ";return{pull:function(){var C=B.shift();if(!C){C=Ext.get(Ext.DomHelper.insertHtml("beforeBegin",document.body.firstChild,A));C.autoBoxAdjust=false}return C},push:function(C){B.push(C)}}}(); +Ext.BoxComponent=function(A){Ext.BoxComponent.superclass.constructor.call(this,A);this.addEvents({resize:true,move:true})};Ext.extend(Ext.BoxComponent,Ext.Component,{boxReady:false,deferHeight:false,setSize:function(B,D){if(typeof B=="object"){D=B.height;B=B.width}if(!this.boxReady){this.width=B;this.height=D;return this}if(this.lastSize&&this.lastSize.width==B&&this.lastSize.height==D){return this}this.lastSize={width:B,height:D};var C=this.adjustSize(B,D);var F=C.width,A=C.height;if(F!==undefined||A!==undefined){var E=this.getResizeEl();if(!this.deferHeight&&F!==undefined&&A!==undefined){E.setSize(F,A)}else{if(!this.deferHeight&&A!==undefined){E.setHeight(A)}else{if(F!==undefined){E.setWidth(F)}}}this.onResize(F,A,B,D);this.fireEvent("resize",this,F,A,B,D)}return this},getSize:function(){return this.el.getSize()},getPosition:function(A){if(A===true){return[this.el.getLeft(true),this.el.getTop(true)]}return this.xy||this.el.getXY()},getBox:function(A){var B=this.el.getSize();if(A){B.x=this.el.getLeft(true);B.y=this.el.getTop(true)}else{var C=this.xy||this.el.getXY();B.x=C[0];B.y=C[1]}return B},updateBox:function(A){this.setSize(A.width,A.height);this.setPagePosition(A.x,A.y);return this},getResizeEl:function(){return this.resizeEl||this.el},getPositionEl:function(){return this.positionEl||this.el},setPosition:function(A,F){this.x=A;this.y=F;if(!this.boxReady){return this}var B=this.adjustPosition(A,F);var E=B.x,D=B.y;var C=this.getPositionEl();if(E!==undefined||D!==undefined){if(E!==undefined&&D!==undefined){C.setLeftTop(E,D)}else{if(E!==undefined){C.setLeft(E)}else{if(D!==undefined){C.setTop(D)}}}this.onPosition(E,D);this.fireEvent("move",this,E,D)}return this},setPagePosition:function(A,C){this.pageX=A;this.pageY=C;if(!this.boxReady){return }if(A===undefined||C===undefined){return }var B=this.el.translatePoints(A,C);this.setPosition(B.left,B.top);return this},onRender:function(B,A){Ext.BoxComponent.superclass.onRender.call(this,B,A);if(this.resizeEl){this.resizeEl=Ext.get(this.resizeEl)}if(this.positionEl){this.positionEl=Ext.get(this.positionEl)}},afterRender:function(){Ext.BoxComponent.superclass.afterRender.call(this);this.boxReady=true;this.setSize(this.width,this.height);if(this.x||this.y){this.setPosition(this.x,this.y)}if(this.pageX||this.pageY){this.setPagePosition(this.pageX,this.pageY)}},syncSize:function(){delete this.lastSize;this.setSize(this.el.getWidth(),this.el.getHeight());return this},onResize:function(D,B,A,C){},onPosition:function(A,B){},adjustSize:function(A,B){if(this.autoWidth){A="auto"}if(this.autoHeight){B="auto"}return{width:A,height:B}},adjustPosition:function(A,B){return{x:A,y:B}}}); +Ext.SplitBar=function(C,E,B,D,A){this.el=Ext.get(C,true);this.el.dom.unselectable="on";this.resizingEl=Ext.get(E,true);this.orientation=B||Ext.SplitBar.HORIZONTAL;this.minSize=0;this.maxSize=2000;this.animate=false;this.useShim=false;this.shim=null;if(!A){this.proxy=Ext.SplitBar.createProxy(this.orientation)}else{this.proxy=Ext.get(A).dom}this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{dragElId:this.proxy.id});this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);this.dragSpecs={};this.adapter=new Ext.SplitBar.BasicLayoutAdapter();this.adapter.init(this);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.placement=D||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);this.el.addClass("x-splitbar-h")}else{this.placement=D||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);this.el.addClass("x-splitbar-v")}this.addEvents({"resize":true,"moved":true,"beforeresize":true,"beforeapply":true});Ext.SplitBar.superclass.constructor.call(this)};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(A,F){this.fireEvent("beforeresize",this);if(!this.overlay){var E=Ext.DomHelper.insertFirst(document.body,{cls:"x-drag-overlay",html:" "},true);E.unselectable();E.enableDisplayMode("block");Ext.SplitBar.prototype.overlay=E}this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var C=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();this.activeMaxSize=this.getMaximumSize();var D=C-this.activeMinSize;var B=Math.max(this.activeMaxSize-C,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?D:B,this.placement==Ext.SplitBar.LEFT?B:D);this.dd.setYConstraint(0,0)}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?D:B,this.placement==Ext.SplitBar.TOP?B:D)}this.dragSpecs.startSize=C;this.dragSpecs.startPoint=[A,F];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,A,F)},onEndProxyDrag:function(C){Ext.get(this.proxy).setDisplayed(false);var B=Ext.lib.Event.getXY(C);if(this.overlay){this.overlay.hide()}var A;if(this.orientation==Ext.SplitBar.HORIZONTAL){A=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.LEFT?B[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-B[0])}else{A=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.TOP?B[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-B[1])}A=Math.min(Math.max(A,this.activeMinSize),this.activeMaxSize);if(A!=this.dragSpecs.startSize){if(this.fireEvent("beforeapply",this,A)!==false){this.adapter.setElementSize(this,A);this.fireEvent("moved",this,A);this.fireEvent("resize",this,A)}}},getAdapter:function(){return this.adapter},setAdapter:function(A){this.adapter=A;this.adapter.init(this)},getMinimumSize:function(){return this.minSize},setMinimumSize:function(A){this.minSize=A},getMaximumSize:function(){return this.maxSize},setMaximumSize:function(A){this.maxSize=A},setCurrentSize:function(B){var A=this.animate;this.animate=false;this.adapter.setElementSize(this,B);this.animate=A},destroy:function(A){if(this.shim){this.shim.remove()}this.dd.unreg();this.proxy.parentNode.removeChild(this.proxy);if(A){this.el.remove()}}});Ext.SplitBar.createProxy=function(B){var C=new Ext.Element(document.createElement("div"));C.unselectable();var A="x-splitbar-proxy";C.addClass(A+" "+(B==Ext.SplitBar.HORIZONTAL?A+"-h":A+"-v"));document.body.appendChild(C.dom);return C.dom};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(A){},getElementSize:function(A){if(A.orientation==Ext.SplitBar.HORIZONTAL){return A.resizingEl.getWidth()}else{return A.resizingEl.getHeight()}},setElementSize:function(B,A,C){if(B.orientation==Ext.SplitBar.HORIZONTAL){if(!B.animate){B.resizingEl.setWidth(A);if(C){C(B,A)}}else{B.resizingEl.setWidth(A,true,0.1,C,"easeOut")}}else{if(!B.animate){B.resizingEl.setHeight(A);if(C){C(B,A)}}else{B.resizingEl.setHeight(A,true,0.1,C,"easeOut")}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(A){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(A)};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(A){this.basic.init(A)},getElementSize:function(A){return this.basic.getElementSize(A)},setElementSize:function(B,A,C){this.basic.setElementSize(B,A,this.moveSplitter.createDelegate(this,[B]))},moveSplitter:function(A){var B=Ext.SplitBar;switch(A.placement){case B.LEFT:A.el.setX(A.resizingEl.getRight());break;case B.RIGHT:A.el.setStyle("right",(this.container.getWidth()-A.resizingEl.getLeft())+"px");break;case B.TOP:A.el.setY(A.resizingEl.getBottom());break;case B.BOTTOM:A.el.setY(A.resizingEl.getTop()-A.el.getHeight());break}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4; +Ext.View=function(A,C,B){this.el=Ext.get(A);if(typeof C=="string"){C=new Ext.Template(C)}C.compile();this.tpl=C;Ext.apply(this,B);this.addEvents({"beforeclick":true,"click":true,"dblclick":true,"contextmenu":true,"selectionchange":true,"beforeselect":true});this.el.on({"click":this.onClick,"dblclick":this.onDblClick,"contextmenu":this.onContextMenu,scope:this});this.selections=[];this.nodes=[];this.cmp=new Ext.CompositeElementLite([]);if(this.store){this.setStore(this.store,true)}Ext.View.superclass.constructor.call(this)};Ext.extend(Ext.View,Ext.util.Observable,{selectedClass:"x-view-selected",emptyText:"",getEl:function(){return this.el},refresh:function(){var E=this.tpl;this.clearSelections();this.el.update("");var D=[];var B=this.store.getRange();if(B.length<1){this.el.update(this.emptyText);return }for(var C=0,A=B.length;C0){this.cmp.elements=this.selections;this.cmp.removeClass(this.selectedClass);this.selections=[];if(!A){this.fireEvent("selectionchange",this,this.selections)}}},isSelected:function(B){var A=this.selections;if(A.length<1){return false}B=this.getNode(B);return A.indexOf(B)!==-1},select:function(D,F,B){if(D instanceof Array){if(!F){this.clearSelections(true)}for(var C=0,A=D.length;C=A;C--){B.push(D[C])}}return B},indexOf:function(D){D=this.getNode(D);if(typeof D.nodeIndex=="number"){return D.nodeIndex}var C=this.nodes;for(var B=0,A=C.length;B0){for(var B=0,A=E.length;BI){return B?-1:+1}else{return 0}}};this.jsonData.sort(C);this.refresh();if(this.jsonData!=this.snapshot){this.snapshot.sort(C)}}}}); +Ext.ColorPalette=function(A){Ext.ColorPalette.superclass.constructor.call(this,A);this.addEvents({select:true});if(this.handler){this.on("select",this.handler,this.scope,true)}};Ext.extend(Ext.ColorPalette,Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:"click",ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],onRender:function(C,B){var E=new Ext.MasterTemplate(" ");var G=this.colors;for(var D=0,A=G.length;D","  ",""];var F=this.dayNames;for(var E=0;E<7;E++){var H=this.startDay+E;if(H>6){H=H-7}C.push("")}C[C.length]="";for(var E=0;E<42;E++){if(E%7==0&&E!=0){C[C.length]=""}C[C.length]=""}C[C.length]="
    ",F[H].substr(0,1),"
    ";var B=document.createElement("div");B.className="x-date-picker";B.innerHTML=C.join("");A.dom.insertBefore(B,G);this.el=Ext.get(B);this.eventEl=Ext.get(B.firstChild);new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"),{handler:this.showPrevMonth,scope:this,preventDefault:true,stopDefault:true});new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"),{handler:this.showNextMonth,scope:this,preventDefault:true,stopDefault:true});this.eventEl.on("mousewheel",this.handleMouseWheel,this);this.monthPicker=this.el.down("div.x-date-mp");this.monthPicker.enableDisplayMode("block");var J=new Ext.KeyNav(this.eventEl,{"left":function(K){K.ctrlKey?this.showPrevMonth():this.update(this.activeDate.add("d",-1))},"right":function(K){K.ctrlKey?this.showNextMonth():this.update(this.activeDate.add("d",1))},"up":function(K){K.ctrlKey?this.showNextYear():this.update(this.activeDate.add("d",-7))},"down":function(K){K.ctrlKey?this.showPrevYear():this.update(this.activeDate.add("d",7))},"pageUp":function(K){this.showNextMonth()},"pageDown":function(K){this.showPrevMonth()},"enter":function(K){K.stopPropagation();return true},scope:this});this.eventEl.on("click",this.handleDateClick,this,{delegate:"a.x-date-date"});this.eventEl.addKeyListener(Ext.EventObject.SPACE,this.selectToday,this);this.el.unselectable();this.cells=this.el.select("table.x-date-inner tbody td");this.textNodes=this.el.query("table.x-date-inner tbody span");this.mbtn=new Ext.Button(this.el.child("td.x-date-middle",true),{text:" ",tooltip:this.monthYearText});this.mbtn.on("click",this.showMonthPicker,this);this.mbtn.el.child(this.mbtn.menuClassTarget).addClass("x-btn-with-menu");var I=(new Date()).dateFormat(this.format);var D=new Ext.Button(this.el.child("td.x-date-bottom",true),{text:String.format(this.todayText,I),tooltip:String.format(this.todayTip,I),handler:this.selectToday,scope:this});if(Ext.isIE){this.el.repaint()}this.update(this.value)},createMonthPicker:function(){if(!this.monthPicker.dom.firstChild){var A=[""];for(var B=0;B<6;B++){A.push("","",B==0?"":"")}A.push("","
    ",this.monthNames[B].substr(0,3),"",this.monthNames[B+6].substr(0,3),"
    ");this.monthPicker.update(A.join(""));this.monthPicker.on("click",this.onMonthClick,this);this.monthPicker.on("dblclick",this.onMonthDblClick,this);this.mpMonths=this.monthPicker.select("td.x-date-mp-month");this.mpYears=this.monthPicker.select("td.x-date-mp-year");this.mpMonths.each(function(C,D,E){E+=1;if((E%2)==0){C.dom.xmonth=5+Math.round(E*0.5)}else{C.dom.xmonth=Math.round((E-1)*0.5)}})}},showMonthPicker:function(){this.createMonthPicker();var A=this.el.getSize();this.monthPicker.setSize(A);this.monthPicker.child("table").setSize(A);this.mpSelMonth=(this.activeDate||this.value).getMonth();this.updateMPMonth(this.mpSelMonth);this.mpSelYear=(this.activeDate||this.value).getFullYear();this.updateMPYear(this.mpSelYear);this.monthPicker.slideIn("t",{duration:0.2})},updateMPYear:function(E){this.mpyear=E;var C=this.mpYears.elements;for(var B=1;B<=10;B++){var D=C[B-1],A;if((B%2)==0){A=E+Math.round(B*0.5);D.firstChild.innerHTML=A;D.xyear=A}else{A=E-(5-Math.round(B*0.5));D.firstChild.innerHTML=A;D.xyear=A}this.mpYears.item(B-1)[A==this.mpSelYear?"addClass":"removeClass"]("x-date-mp-sel")}},updateMPMonth:function(A){this.mpMonths.each(function(B,C,D){B[B.dom.xmonth==A?"addClass":"removeClass"]("x-date-mp-sel")})},selectMPMonth:function(A){},onMonthClick:function(D,B){D.stopEvent();var C=new Ext.Element(B),A;if(C.is("button.x-date-mp-cancel")){this.hideMonthPicker()}else{if(C.is("button.x-date-mp-ok")){this.update(new Date(this.mpSelYear,this.mpSelMonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker()}else{if(A=C.up("td.x-date-mp-month",2)){this.mpMonths.removeClass("x-date-mp-sel");A.addClass("x-date-mp-sel");this.mpSelMonth=A.dom.xmonth}else{if(A=C.up("td.x-date-mp-year",2)){this.mpYears.removeClass("x-date-mp-sel");A.addClass("x-date-mp-sel");this.mpSelYear=A.dom.xyear}else{if(C.is("a.x-date-mp-prev")){this.updateMPYear(this.mpyear-10)}else{if(C.is("a.x-date-mp-next")){this.updateMPYear(this.mpyear+10)}}}}}}},onMonthDblClick:function(D,B){D.stopEvent();var C=new Ext.Element(B),A;if(A=C.up("td.x-date-mp-month",2)){this.update(new Date(this.mpSelYear,A.dom.xmonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker()}else{if(A=C.up("td.x-date-mp-year",2)){this.update(new Date(A.dom.xyear,this.mpSelMonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker()}}},hideMonthPicker:function(A){if(this.monthPicker){if(A===true){this.monthPicker.hide()}else{this.monthPicker.slideOut("t",{duration:0.2})}}},showPrevMonth:function(A){this.update(this.activeDate.add("mo",-1))},showNextMonth:function(A){this.update(this.activeDate.add("mo",1))},showPrevYear:function(){this.update(this.activeDate.add("y",-1))},showNextYear:function(){this.update(this.activeDate.add("y",1))},handleMouseWheel:function(A){var B=A.getWheelDelta();if(B>0){this.showPrevMonth();A.stopEvent()}else{if(B<0){this.showNextMonth();A.stopEvent()}}},handleDateClick:function(B,A){B.stopEvent();if(A.dateValue&&!Ext.fly(A.parentNode).hasClass("x-date-disabled")){this.setValue(new Date(A.dateValue));this.fireEvent("select",this,this.value)}},selectToday:function(){this.setValue(new Date().clearTime());this.fireEvent("select",this,this.value)},update:function(W){var A=this.activeDate;this.activeDate=W;if(A&&this.el){var I=W.getTime();if(A.getMonth()==W.getMonth()&&A.getFullYear()==W.getFullYear()){this.cells.removeClass("x-date-selected");this.cells.each(function(a){if(a.dom.firstChild.dateValue==I){a.addClass("x-date-selected");setTimeout(function(){try{a.dom.firstChild.focus()}catch(b){}},50);return false}});return }}var F=W.getDaysInMonth();var J=W.getFirstDateOfMonth();var C=J.getDay()-this.startDay;if(C<=this.startDay){C+=7}var S=W.add("mo",-1);var D=S.getDaysInMonth()-C;var B=this.cells.elements;var K=this.textNodes;F+=C;var P=86400000;var U=(new Date(S.getFullYear(),S.getMonth(),D)).clearTime();var T=new Date().clearTime().getTime();var N=W.clearTime().getTime();var M=this.minDate?this.minDate.clearTime():Number.NEGATIVE_INFINITY;var Q=this.maxDate?this.maxDate.clearTime():Number.POSITIVE_INFINITY;var X=this.disabledDatesRE;var L=this.disabledDatesText;var Z=this.disabledDays?this.disabledDays.join(""):false;var V=this.disabledDaysText;var R=this.format;var G=function(d,a){a.title="";var b=U.getTime();a.firstChild.dateValue=b;if(b==T){a.className+=" x-date-today";a.title=d.todayText}if(b==N){a.className+=" x-date-selected";setTimeout(function(){try{a.firstChild.focus()}catch(f){}},50)}if(bQ){a.className=" x-date-disabled";a.title=d.maxText;return }if(Z){if(Z.indexOf(U.getDay())!=-1){a.title=V;a.className=" x-date-disabled"}}if(X&&R){var c=U.dateFormat(R);if(X.test(c)){a.title=L.replace("%0",c);a.className=" x-date-disabled"}}};var O=0;for(;O1){var D=this.getNextAvailable(B);if(D){D.activate()}}this.stripEl.dom.removeChild(C.pnode.dom);if(C.bodyEl.dom.parentNode==this.bodyEl.dom){this.bodyEl.dom.removeChild(C.bodyEl.dom)}A.splice(B,1);delete this.items[C.id];C.fireEvent("close",C);C.purgeListeners();this.autoSizeTabs()},getNextAvailable:function(D){var A=this.items;var B=D;while(B=0){var C=A[--B];if(C&&!C.isHidden()){return C}}return null},disableTab:function(B){var A=this.items[B];if(A&&this.active!=A){A.disable()}},enableTab:function(B){var A=this.items[B];A.enable()},activate:function(C){var A=this.items[C];if(!A){return null}if(A==this.active||A.disabled){return A}var B={};this.fireEvent("beforetabchange",this,B,A);if(B.cancel!==true&&!A.disabled){if(this.active){this.active.hide()}this.active=this.items[C];this.active.show();this.fireEvent("tabchange",this,this.active)}return A},getActiveTab:function(){return this.active},syncHeight:function(B){var A=(B||this.el.getHeight())-this.el.getBorderWidth("tb")-this.el.getPadding("tb");var D=this.bodyEl.getMargins();var C=A-(this.stripWrap.getHeight()||0)-(D.top+D.bottom);this.bodyEl.setHeight(C);return C},onResize:function(){if(this.monitorResize){this.autoSizeTabs()}},beginUpdate:function(){this.updating=true},endUpdate:function(){this.updating=false;this.autoSizeTabs()},autoSizeTabs:function(){var E=this.items.length;var B=E-this.hiddenCount;if(!this.resizeTabs||E<1||B<1||this.updating){return }var C=Math.max(this.el.getWidth()-this.cpad,10);var F=Math.floor(C/B);var A=this.stripBody;if(A.getWidth()>C){var D=this.items;this.setTabWidth(Math.max(F,this.minTabWidth)-2);if(F
    ";return A.firstChild.firstChild.firstChild.firstChild};Ext.TabPanel.prototype.createBody=function(B){var A=document.createElement("div");Ext.id(A,"tab-body");Ext.fly(A).addClass("x-tabs-body");B.appendChild(A);return A};Ext.TabPanel.prototype.createItemBody=function(B,C){var A=Ext.getDom(C);if(!A){A=document.createElement("div");A.id=C}Ext.fly(A).addClass("x-tabs-item-body");B.insertBefore(A,B.firstChild);return A};Ext.TabPanel.prototype.createStripElements=function(D,F,C){var G=document.createElement("td");D.appendChild(G);if(C){G.className="x-tabs-closable";if(!this.closeTpl){this.closeTpl=new Ext.Template(""+"{text}"+"
     
    ")}var B=this.closeTpl.overwrite(G,{"text":F});var E=B.getElementsByTagName("div")[0];var A=B.getElementsByTagName("em")[0];return{"el":B,"close":E,"inner":A}}else{if(!this.tabTpl){this.tabTpl=new Ext.Template(""+"{text}")}var B=this.tabTpl.overwrite(G,{"text":F});var A=B.getElementsByTagName("em")[0];return{"el":B,"inner":A}}}; +Ext.Button=function(B,A){Ext.apply(this,A);this.addEvents({"click":true,"toggle":true,"mouseover":true,"mouseout":true});if(this.menu){this.menu=Ext.menu.MenuMgr.get(this.menu)}if(B){this.render(B)}Ext.Button.superclass.constructor.call(this)};Ext.extend(Ext.Button,Ext.util.Observable,{hidden:false,disabled:false,pressed:false,tabIndex:undefined,enableToggle:false,menu:undefined,menuAlign:"tl-bl?",iconCls:undefined,type:"button",menuClassTarget:"tr",clickEvent:"click",handleMouseEvents:true,tooltipType:"qtip",render:function(D){var B;if(this.hideParent){this.parentEl=Ext.get(D)}if(!this.dhconfig){if(!this.template){if(!Ext.Button.buttonTemplate){Ext.Button.buttonTemplate=new Ext.Template("","","
      
    ")}this.template=Ext.Button.buttonTemplate}B=this.template.append(D,[this.text||" ",this.type],true);var C=B.child("button:first");C.on("focus",this.onFocus,this);C.on("blur",this.onBlur,this);if(this.cls){B.addClass(this.cls)}if(this.icon){C.setStyle("background-image","url("+this.icon+")")}if(this.iconCls){C.addClass(this.iconCls);if(!this.cls){B.addClass(this.text?"x-btn-text-icon":"x-btn-icon")}}if(this.tabIndex!==undefined){C.dom.tabIndex=this.tabIndex}if(this.tooltip){if(typeof this.tooltip=="object"){Ext.QuickTips.tips(Ext.apply({target:C.id},this.tooltip))}else{C.dom[this.tooltipType]=this.tooltip}}}else{B=Ext.DomHelper.append(Ext.get(D).dom,this.dhconfig,true)}this.el=B;if(this.id){this.el.dom.id=this.el.id=this.id}if(this.menu){this.el.child(this.menuClassTarget).addClass("x-btn-with-menu");this.menu.on("show",this.onMenuShow,this);this.menu.on("hide",this.onMenuHide,this)}B.addClass("x-btn");if(Ext.isIE&&!Ext.isIE7){this.autoWidth.defer(1,this)}else{this.autoWidth()}if(this.handleMouseEvents){B.on("mouseover",this.onMouseOver,this);B.on("mouseout",this.onMouseOut,this);B.on("mousedown",this.onMouseDown,this)}B.on(this.clickEvent,this.onClick,this);if(this.hidden){this.hide()}if(this.disabled){this.disable()}Ext.ButtonToggleMgr.register(this);if(this.pressed){this.el.addClass("x-btn-pressed")}if(this.repeat){var A=new Ext.util.ClickRepeater(B,typeof this.repeat=="object"?this.repeat:{});A.on("click",this.onClick,this)}},getEl:function(){return this.el},destroy:function(){Ext.ButtonToggleMgr.unregister(this);this.el.removeAllListeners();this.purgeListeners();this.el.remove()},autoWidth:function(){if(this.el){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var A=this.el.child("button");if(A&&A.getWidth()>20){A.clip();A.setWidth(Ext.util.TextMetrics.measure(A,this.text).width+A.getFrameWidth("lr"))}}if(this.minWidth){if(this.hidden){this.el.beginMeasure()}if(this.el.getWidth()","","","
     
    ","","","
     
    ");var B=A.append(D,[this.text,this.type],true);var C=B.child("button");if(this.cls){B.addClass(this.cls)}if(this.icon){C.setStyle("background-image","url("+this.icon+")")}if(this.iconCls){C.addClass(this.iconCls);if(!this.cls){B.addClass(this.text?"x-btn-text-icon":"x-btn-icon")}}this.el=B;if(this.handleMouseEvents){B.on("mouseover",this.onMouseOver,this);B.on("mouseout",this.onMouseOut,this);B.on("mousedown",this.onMouseDown,this);B.on("mouseup",this.onMouseUp,this)}B.on(this.clickEvent,this.onClick,this);if(this.tooltip){if(typeof this.tooltip=="object"){Ext.QuickTips.tips(Ext.apply({target:C.id},this.tooltip))}else{C.dom[this.tooltipType]=this.tooltip}}if(this.arrowTooltip){B.child("button:nth(2)").dom[this.tooltipType]=this.arrowTooltip}if(this.hidden){this.hide()}if(this.disabled){this.disable()}if(this.pressed){this.el.addClass("x-btn-pressed")}if(Ext.isIE&&!Ext.isIE7){this.autoWidth.defer(1,this)}else{this.autoWidth()}if(this.menu){this.menu.on("show",this.onMenuShow,this);this.menu.on("hide",this.onMenuHide,this)}},autoWidth:function(){if(this.el){var C=this.el.child("table:first");var B=this.el.child("table:last");this.el.setWidth("auto");C.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var A=this.el.child("button:first");if(A&&A.getWidth()>20){A.clip();A.setWidth(Ext.util.TextMetrics.measure(A,this.text).width+A.getFrameWidth("lr"))}}if(this.minWidth){if(this.hidden){this.el.beginMeasure()}if((C.getWidth()+B.getWidth())
    ");this.tr=this.el.child("tr",true);var A=0;this.items=new Ext.util.MixedCollection(false,function(C){return C.id||("item"+(++A))});if(this.buttons){this.add.apply(this,this.buttons);delete this.buttons}},add:function(){var B=arguments,A=B.length;for(var C=0;C"){this.addFill()}else{this.addText(D)}}}}else{if(D.tagName){this.addElement(D)}else{if(typeof D=="object"){this.addButton(D)}}}}}}},getEl:function(){return this.el},addSeparator:function(){return this.addItem(new Ext.Toolbar.Separator())},addSpacer:function(){return this.addItem(new Ext.Toolbar.Spacer())},addFill:function(){return this.addItem(new Ext.Toolbar.Fill())},addElement:function(A){return this.addItem(new Ext.Toolbar.Item(A))},addItem:function(A){var B=this.nextBlock();A.render(B);this.items.add(A);return A},addButton:function(C){if(C instanceof Array){var E=[];for(var D=0,B=C.length;D=1&parseInt(B,10)+A<=F.pages){this.field.dom.value=parseInt(B,10)+A;D=Math.min(Math.max(1,D+A),F.pages)-1;this.ds.load({params:{start:D*this.pageSize,limit:this.pageSize}})}}E.stopEvent()}}}},beforeLoad:function(){if(this.loading){this.loading.disable()}},onClick:function(E){var D=this.ds;switch(E){case"first":D.load({params:{start:0,limit:this.pageSize}});break;case"prev":D.load({params:{start:Math.max(0,this.cursor-this.pageSize),limit:this.pageSize}});break;case"next":D.load({params:{start:this.cursor+this.pageSize,limit:this.pageSize}});break;case"last":var C=D.getTotalCount();var A=C%this.pageSize;var B=A?(C-A):C-this.pageSize;D.load({params:{start:B,limit:this.pageSize}});break;case"refresh":D.load({params:{start:this.cursor,limit:this.pageSize}});break}},unbind:function(A){A.un("beforeload",this.beforeLoad,this);A.un("load",this.onLoad,this);A.un("loadexception",this.onLoadError,this);this.ds=undefined},bind:function(A){A.on("beforeload",this.beforeLoad,this);A.on("load",this.onLoad,this);A.on("loadexception",this.onLoadError,this);this.ds=A}}); +Ext.Resizable=function(D,E){this.el=Ext.get(D);if(E&&E.wrap){E.resizeChild=this.el;this.el=this.el.wrap(typeof E.wrap=="object"?E.wrap:{cls:"xresizable-wrap"});this.el.id=this.el.dom.id=E.resizeChild.id+"-rzwrap";this.el.setStyle("overflow","hidden");this.el.setPositioning(E.resizeChild.getPositioning());E.resizeChild.clearPositioning();if(!E.width||!E.height){var F=E.resizeChild.getSize();this.el.setSize(F.width,F.height)}if(E.pinned&&!E.adjustments){E.adjustments="auto"}}this.proxy=this.el.createProxy({tag:"div",cls:"x-resizable-proxy",id:this.el.id+"-rzproxy"});this.proxy.unselectable();this.proxy.enableDisplayMode("block");Ext.apply(this,E);if(this.pinned){this.disableTrackOver=true;this.el.addClass("x-resizable-pinned")}var I=this.el.getStyle("position");if(I!="absolute"&&I!="fixed"){this.el.setStyle("position","relative")}if(!this.handles){this.handles="s,e,se";if(this.multiDirectional){this.handles+=",n,w"}}if(this.handles=="all"){this.handles="n s e w ne nw se sw"}var M=this.handles.split(/\s*?[,;]\s*?| /);var C=Ext.Resizable.positions;for(var H=0,J=M.length;H0){if(A>(E/2)){D=C+(E-A)}else{D=C-A}}return Math.max(B,D)},resizeElement:function(){var A=this.proxy.getBox();if(this.updateBox){this.el.setBox(A,false,this.animate,this.duration,null,this.easing)}else{this.el.setSize(A.width,A.height,this.animate,this.duration,null,this.easing)}this.updateChildSize();if(!this.dynamic){this.proxy.hide()}return A},constrain:function(B,C,A,D){if(B-CD){C=D-B}}return C},onMouseMove:function(S){if(this.enabled){try{if(this.resizeRegion&&!this.resizeRegion.contains(S.getPoint())){return }var Q=this.curSize||this.startBox;var I=this.startBox.x,H=this.startBox.y;var C=I,B=H;var J=Q.width,R=Q.height;var D=J,L=R;var K=this.minWidth,T=this.minHeight;var P=this.maxWidth,W=this.maxHeight;var F=this.widthIncrement;var A=this.heightIncrement;var U=S.getXY();var O=-(this.startPoint[0]-Math.max(this.minX,U[0]));var M=-(this.startPoint[1]-Math.max(this.minY,U[1]));var G=this.activeHandle.position;switch(G){case"east":J+=O;J=Math.min(Math.max(K,J),P);break;case"south":R+=M;R=Math.min(Math.max(T,R),W);break;case"southeast":J+=O;R+=M;J=Math.min(Math.max(K,J),P);R=Math.min(Math.max(T,R),W);break;case"north":M=this.constrain(R,M,T,W);H+=M;R-=M;break;case"west":O=this.constrain(J,O,K,P);I+=O;J-=O;break;case"northeast":J+=O;J=Math.min(Math.max(K,J),P);M=this.constrain(R,M,T,W);H+=M;R-=M;break;case"northwest":O=this.constrain(J,O,K,P);M=this.constrain(R,M,T,W);H+=M;R-=M;I+=O;J-=O;break;case"southwest":O=this.constrain(J,O,K,P);R+=M;R=Math.min(Math.max(T,R),W);I+=O;J-=O;break}var N=this.snap(J,F,K);var V=this.snap(R,A,T);if(N!=J||V!=R){switch(G){case"northeast":H-=V-R;break;case"north":H-=V-R;break;case"southwest":I-=N-J;break;case"west":I-=N-J;break;case"northwest":I-=N-J;H-=V-R;break}J=N;R=V}if(this.preserveRatio){switch(G){case"southeast":case"east":R=L*(J/D);R=Math.min(Math.max(T,R),W);J=D*(R/L);break;case"south":J=D*(R/L);J=Math.min(Math.max(K,J),P);R=L*(J/D);break;case"northeast":J=D*(R/L);J=Math.min(Math.max(K,J),P);R=L*(J/D);break;case"north":var X=J;J=D*(R/L);J=Math.min(Math.max(K,J),P);R=L*(J/D);I+=(X-J)/2;break;case"southwest":R=L*(J/D);R=Math.min(Math.max(T,R),W);var X=J;J=D*(R/L);I+=X-J;break;case"west":var E=R;R=L*(J/D);R=Math.min(Math.max(T,R),W);H+=(E-R)/2;var X=J;J=D*(R/L);I+=X-J;break;case"northwest":var X=J;var E=R;R=L*(J/D);R=Math.min(Math.max(T,R),W);J=D*(R/L);H+=E-R;I+=X-J;break}}this.proxy.setBounds(I,H,J,R);if(this.dynamic){this.resizeElement()}}catch(S){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over")}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over")}},getEl:function(){return this.el},getResizeChild:function(){return this.resizeChild},destroy:function(C){this.proxy.remove();if(this.overlay){this.overlay.removeAllListeners();this.overlay.remove()}var D=Ext.Resizable.positions;for(var A in D){if(typeof D[A]!="function"&&this[D[A]]){var B=this[D[A]];B.el.removeAllListeners();B.el.remove()}}if(C){this.el.update("");this.el.remove()}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=function(C,E,B,D){if(!this.tpl){var A=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});A.compile();Ext.Resizable.Handle.prototype.tpl=A}this.position=E;this.rz=C;this.el=this.tpl.append(C.el.dom,[this.position],true);this.el.unselectable();if(D){this.el.setOpacity(0)}this.el.on("mousedown",this.onMouseDown,this);if(!B){this.el.on("mouseover",this.onMouseOver,this);this.el.on("mouseout",this.onMouseOut,this)}};Ext.Resizable.Handle.prototype={afterResize:function(A){},onMouseDown:function(A){this.rz.onMouseDown(this,A)},onMouseOver:function(A){this.rz.handleOver(this,A)},onMouseOut:function(A){this.rz.handleOut(this,A)}}; +Ext.Editor=function(B,A){Ext.Editor.superclass.constructor.call(this,A);this.field=B;this.addEvents({"beforestartedit":true,"startedit":true,"beforecomplete":true,"complete":true,"specialkey":true})};Ext.extend(Ext.Editor,Ext.Component,{value:"",alignment:"c-c?",shadow:"frame",constrain:false,completeOnEnter:false,cancelOnEsc:false,updateEl:false,onRender:function(B,A){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:B,shim:this.shim,shadowOffset:4,id:this.id,constrain:this.constrain});this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!="title"){this.field.msgTarget="qtip"}this.field.render(this.el);if(Ext.isGecko){this.field.el.dom.setAttribute("autocomplete","off")}this.field.on("specialkey",this.onSpecialKey,this);if(this.swallowKeys){this.field.el.swallowEvent(["keydown","keypress"])}this.field.show();this.field.on("blur",this.onBlur,this);if(this.field.grow){this.field.on("autosize",this.el.sync,this.el,{delay:1})}},onSpecialKey:function(B,A){if(this.completeOnEnter&&A.getKey()==A.ENTER){A.stopEvent();this.completeEdit()}else{if(this.cancelOnEsc&&A.getKey()==A.ESC){this.cancelEdit()}else{this.fireEvent("specialkey",B,A)}}},startEdit:function(B,C){if(this.editing){this.completeEdit()}this.boundEl=Ext.get(B);var A=C!==undefined?C:this.boundEl.dom.innerHTML;if(!this.rendered){this.render(this.parentEl||document.body)}if(this.fireEvent("beforestartedit",this,this.boundEl,A)===false){return }this.startValue=A;this.field.setValue(A);if(this.autoSize){var D=this.boundEl.getSize();switch(this.autoSize){case"width":this.setSize(D.width,"");break;case"height":this.setSize("",D.height);break;default:this.setSize(D.width,D.height)}}this.el.alignTo(this.boundEl,this.alignment);this.editing=true;if(Ext.QuickTips){Ext.QuickTips.disable()}this.show()},setSize:function(A,B){this.field.setSize(A,B);if(this.el){this.el.sync()}},realign:function(){this.el.alignTo(this.boundEl,this.alignment)},completeEdit:function(A){if(!this.editing){return }var B=this.getValue();if(this.revertInvalid!==false&&!this.field.isValid()){B=this.startValue;this.cancelEdit(true)}if(String(B)===String(this.startValue)&&this.ignoreNoChange){this.editing=false;this.hide();return }if(this.fireEvent("beforecomplete",this,B,this.startValue)!==false){this.editing=false;if(this.updateEl&&this.boundEl){this.boundEl.update(B)}if(A!==true){this.hide()}this.fireEvent("complete",this,B,this.startValue)}},onShow:function(){this.el.show();if(this.hideEl!==false){this.boundEl.hide()}this.field.show();if(Ext.isIE&&!this.fixIEFocus){this.fixIEFocus=true;this.deferredFocus.defer(50,this)}else{this.field.focus()}this.fireEvent("startedit",this.boundEl,this.startValue)},deferredFocus:function(){if(this.editing){this.field.focus()}},cancelEdit:function(A){if(this.editing){this.setValue(this.startValue);if(A!==true){this.hide()}}},onBlur:function(){if(this.allowBlur!==true&&this.editing){this.completeEdit()}},onHide:function(){if(this.editing){this.completeEdit();return }this.field.blur();if(this.field.collapse){this.field.collapse()}this.el.hide();if(this.hideEl!==false){this.boundEl.show()}if(Ext.QuickTips){Ext.QuickTips.enable()}},setValue:function(A){this.field.setValue(A)},getValue:function(){return this.field.getValue()}}); +Ext.BasicDialog=function(C,B){this.el=Ext.get(C);var D=Ext.DomHelper;if(!this.el&&B&&B.autoCreate){if(typeof B.autoCreate=="object"){if(!B.autoCreate.id){B.autoCreate.id=C}this.el=D.append(document.body,B.autoCreate,true)}else{this.el=D.append(document.body,{tag:"div",id:C,style:"visibility:hidden;"},true)}}C=this.el;C.setDisplayed(true);C.hide=this.hideAction;this.id=C.id;C.addClass("x-dlg");Ext.apply(this,B);this.proxy=C.createProxy("x-dlg-proxy");this.proxy.hide=this.hideAction;this.proxy.setOpacity(0.5);this.proxy.hide();if(B.width){C.setWidth(B.width)}if(B.height){C.setHeight(B.height)}this.size=C.getSize();if(typeof B.x!="undefined"&&typeof B.y!="undefined"){this.xy=[B.x,B.y]}else{this.xy=C.getCenterXY(true)}this.header=C.child("> .x-dlg-hd");this.body=C.child("> .x-dlg-bd");this.footer=C.child("> .x-dlg-ft");if(!this.header){this.header=C.createChild({tag:"div",cls:"x-dlg-hd",html:" "},this.body?this.body.dom:null)}if(!this.body){this.body=C.createChild({tag:"div",cls:"x-dlg-bd"})}this.header.unselectable();if(this.title){this.header.update(this.title)}this.focusEl=C.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1"});this.focusEl.swallowEvent("click",true);this.header.wrap({cls:"x-dlg-hd-right"}).wrap({cls:"x-dlg-hd-left"},true);this.bwrap=this.body.wrap({tag:"div",cls:"x-dlg-dlg-body"});if(this.footer){this.bwrap.dom.appendChild(this.footer.dom)}this.bg=this.el.createChild({tag:"div",cls:"x-dlg-bg",html:"
     
    "});this.centerBg=this.bg.child("div.x-dlg-bg-center");if(this.autoScroll!==false&&!this.autoTabs){this.body.setStyle("overflow","auto")}this.toolbox=this.el.createChild({cls:"x-dlg-toolbox"});if(this.closable!==false){this.el.addClass("x-dlg-closable");this.close=this.toolbox.createChild({cls:"x-dlg-close"});this.close.on("click",this.closeClick,this);this.close.addClassOnOver("x-dlg-close-over")}if(this.collapsible!==false){this.collapseBtn=this.toolbox.createChild({cls:"x-dlg-collapse"});this.collapseBtn.on("click",this.collapseClick,this);this.collapseBtn.addClassOnOver("x-dlg-collapse-over");this.header.on("dblclick",this.collapseClick,this)}if(this.resizable!==false){this.el.addClass("x-dlg-resizable");this.resizer=new Ext.Resizable(C,{minWidth:this.minWidth||80,minHeight:this.minHeight||80,handles:this.resizeHandles||"all",pinned:true});this.resizer.on("beforeresize",this.beforeResize,this);this.resizer.on("resize",this.onResize,this)}if(this.draggable!==false){C.addClass("x-dlg-draggable");if(!this.proxyDrag){var A=new Ext.dd.DD(C.dom.id,"WindowDrag")}else{var A=new Ext.dd.DDProxy(C.dom.id,"WindowDrag",{dragElId:this.proxy.id})}A.setHandleElId(this.header.id);A.endDrag=this.endMove.createDelegate(this);A.startDrag=this.startMove.createDelegate(this);A.onDrag=this.onDrag.createDelegate(this);A.scroll=false;this.dd=A}if(this.modal){this.mask=D.append(document.body,{tag:"div",cls:"x-dlg-mask"},true);this.mask.enableDisplayMode("block");this.mask.hide();this.el.addClass("x-dlg-modal")}if(this.shadow){this.shadow=new Ext.Shadow({mode:typeof this.shadow=="string"?this.shadow:"sides",offset:this.shadowOffset})}else{this.shadowOffset=0}if(Ext.useShims&&this.shim!==false){this.shim=this.el.createShim();this.shim.hide=this.hideAction;this.shim.hide()}else{this.shim=false}if(this.autoTabs){this.initTabs()}this.addEvents({"keydown":true,"move":true,"resize":true,"beforehide":true,"hide":true,"beforeshow":true,"show":true});C.on("keydown",this.onKeyDown,this);C.on("mousedown",this.toFront,this);Ext.EventManager.onWindowResize(this.adjustViewport,this,true);this.el.hide();Ext.DialogManager.register(this);Ext.BasicDialog.superclass.constructor.call(this)};Ext.extend(Ext.BasicDialog,Ext.util.Observable,{shadowOffset:Ext.isIE?6:5,minHeight:80,minWidth:200,minButtonWidth:75,defaultButton:null,buttonAlign:"right",tabTag:"div",firstShow:true,setTitle:function(A){this.header.update(A);return this},closeClick:function(){this.hide()},collapseClick:function(){this[this.collapsed?"expand":"collapse"]()},collapse:function(){if(!this.collapsed){this.collapsed=true;this.el.addClass("x-dlg-collapsed");this.restoreHeight=this.el.getHeight();this.resizeTo(this.el.getWidth(),this.header.getHeight())}},expand:function(){if(this.collapsed){this.collapsed=false;this.el.removeClass("x-dlg-collapsed");this.resizeTo(this.el.getWidth(),this.restoreHeight)}},initTabs:function(){var A=this.getTabs();while(A.getTab(0)){A.removeTab(0)}this.el.select(this.tabTag+".x-dlg-tab").each(function(B){var C=B.dom;A.addTab(Ext.id(C),C.title);C.title=""});A.activate(0);return A},beforeResize:function(){this.resizer.minHeight=Math.max(this.minHeight,this.getHeaderFooterHeight(true)+40)},onResize:function(){this.refreshSize();this.syncBodyHeight();this.adjustAssets();this.focus();this.fireEvent("resize",this,this.size.width,this.size.height)},onKeyDown:function(A){if(this.isVisible()){this.fireEvent("keydown",this,A)}},resizeTo:function(B,A){this.el.setSize(B,A);this.size={width:B,height:A};this.syncBodyHeight();if(this.fixedcenter){this.center()}if(this.isVisible()){this.constrainXY();this.adjustAssets()}this.fireEvent("resize",this,B,A);return this},setContentSize:function(A,B){B+=this.getHeaderFooterHeight()+this.body.getMargins("tb");A+=this.body.getMargins("lr")+this.bwrap.getMargins("lr")+this.centerBg.getPadding("lr");B+=this.body.getPadding("tb")+this.bwrap.getBorderWidth("tb")+this.body.getBorderWidth("tb")+this.el.getBorderWidth("tb");A+=this.body.getPadding("lr")+this.bwrap.getBorderWidth("lr")+this.body.getBorderWidth("lr")+this.bwrap.getPadding("lr")+this.el.getBorderWidth("lr");if(this.tabs){B+=this.tabs.stripWrap.getHeight()+this.tabs.bodyEl.getMargins("tb")+this.tabs.bodyEl.getPadding("tb");A+=this.tabs.bodyEl.getMargins("lr")+this.tabs.bodyEl.getPadding("lr")}this.resizeTo(A,B);return this},addKeyListener:function(B,E,D){var H,A,F,G;if(typeof B=="object"&&!(B instanceof Array)){H=B["key"];A=B["shift"];F=B["ctrl"];G=B["alt"]}else{H=B}var C=function(M,L){if((!A||L.shiftKey)&&(!F||L.ctrlKey)&&(!G||L.altKey)){var J=L.getKey();if(H instanceof Array){for(var K=0,I=H.length;K
    "},null,true);this.btnContainer=A.firstChild.firstChild.firstChild}var D={handler:F,scope:E,minWidth:this.minButtonWidth,hideParent:true};if(typeof B=="string"){D.text=B}else{if(B.tag){D.dhconfig=B}else{Ext.apply(D,B)}}var C=new Ext.Button(this.btnContainer.appendChild(document.createElement("td")),D);this.syncBodyHeight();if(!this.buttons){this.buttons=[]}this.buttons.push(C);return C},setDefaultButton:function(A){this.defaultButton=A;return this},getHeaderFooterHeight:function(C){var A=0;if(this.header){A+=this.header.getHeight()}if(this.footer){var B=this.footer.getMargins();A+=(this.footer.getHeight()+B.top+B.bottom)}A+=this.bwrap.getPadding("tb")+this.bwrap.getBorderWidth("tb");A+=this.centerBg.getPadding("tb");return A},syncBodyHeight:function(){var E=this.body,B=this.centerBg,F=this.bwrap;var A=this.size.height-this.getHeaderFooterHeight(false);E.setHeight(A-E.getMargins("tb"));var C=this.header.getHeight();var D=this.size.height-C;B.setHeight(D);F.setLeftTop(B.getPadding("l"),C+B.getPadding("t"));F.setHeight(D-B.getPadding("tb"));F.setWidth(this.el.getWidth(true)-B.getPadding("lr"));E.setWidth(F.getWidth(true));if(this.tabs){this.tabs.syncHeight();if(Ext.isIE){this.tabs.el.repaint()}}},restoreState:function(){var A=Ext.state.Manager.get(this.stateId||(this.el.id+"-state"));if(A&&A.width){this.xy=[A.x,A.y];this.resizeTo(A.width,A.height)}return this},beforeShow:function(){this.expand();if(this.fixedcenter){this.xy=this.el.getCenterXY(true)}if(this.modal){Ext.get(document.body).addClass("x-body-masked");this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.mask.show()}this.constrainXY()},animShow:function(){var A=Ext.get(this.animateTarget,true).getBox();this.proxy.setSize(A.width,A.height);this.proxy.setLocation(A.x,A.y);this.proxy.show();this.proxy.setBounds(this.xy[0],this.xy[1],this.size.width,this.size.height,true,0.35,this.showEl.createDelegate(this))},show:function(A){if(this.fireEvent("beforeshow",this)===false){return }if(this.syncHeightBeforeShow){this.syncBodyHeight()}else{if(this.firstShow){this.firstShow=false;this.syncBodyHeight()}}this.animateTarget=A||this.animateTarget;if(!this.el.isVisible()){this.beforeShow();if(this.animateTarget){this.animShow()}else{this.showEl()}}return this},showEl:function(){this.proxy.hide();this.el.setXY(this.xy);this.el.show();this.adjustAssets(true);this.toFront();this.focus();if(Ext.isIE){this.el.repaint()}this.fireEvent("show",this)},focus:function(){if(this.defaultButton){this.defaultButton.focus()}else{this.focusEl.focus()}},constrainXY:function(){if(this.constraintoviewport!==false){if(!this.viewSize){if(this.container){var E=this.container.getSize();this.viewSize=[E.width,E.height]}else{this.viewSize=[Ext.lib.Dom.getViewWidth(),Ext.lib.Dom.getViewHeight()]}}var E=Ext.get(this.container||document).getScroll();var A=this.xy[0],H=this.xy[1];var B=this.size.width,D=this.size.height;var F=this.viewSize[0],G=this.viewSize[1];var C=false;if(A+B>F+E.left){A=F-B;C=true}if(H+D>G+E.top){H=G-D;C=true}if(A
     
    "});E=O.dom.firstChild;H=Ext.get(O.dom.childNodes[2]);H.enableDisplayMode();H.addKeyListener([10,13],function(){if(J.isVisible()&&A&&A.buttons){if(A.buttons.ok){C("ok")}else{if(A.buttons.yes){C("yes")}}}});K=Ext.get(O.dom.childNodes[3]);K.enableDisplayMode();N=Ext.get(O.dom.childNodes[4]);N.enableDisplayMode();var R=N.dom.firstChild;B=Ext.get(R.firstChild);B.setHeight(R.offsetHeight)}return J},updateText:function(S){if(!J.isVisible()&&!A.width){J.resizeTo(this.maxWidth,100)}E.innerHTML=S||" ";var R=Math.max(Math.min(A.width||E.offsetWidth,this.maxWidth),Math.max(A.minWidth||this.minWidth,D));if(A.prompt){L.setWidth(R)}if(J.isVisible()){J.fixedcenter=false}J.setContentSize(R,O.getHeight());if(J.isVisible()){J.fixedcenter=true}return this},updateProgress:function(R,S){if(S){this.updateText(S)}B.setWidth(Math.floor(R*N.dom.firstChild.offsetWidth));return this},isVisible:function(){return J&&J.isVisible()},hide:function(){if(this.isVisible()){J.hide()}},show:function(T){if(this.isVisible()){this.hide()}var U=this.getDialog();A=T;U.setTitle(A.title||" ");U.close.setDisplayed(A.closable!==false);L=H;A.prompt=A.prompt||(A.multiline?true:false);if(A.prompt){if(A.multiline){H.hide();K.show();K.setHeight(typeof A.multiline=="number"?A.multiline:this.defaultTextHeight);L=K}else{H.show();K.hide()}}else{H.hide();K.hide()}N.setDisplayed(A.progress===true);this.updateProgress(0);L.dom.value=A.value||"";if(A.prompt){J.setDefaultButton(L)}else{var S=A.buttons;var R=null;if(S&&S.ok){R=I["ok"]}else{if(S&&S.yes){R=I["yes"]}}J.setDefaultButton(R)}D=M(A.buttons);this.updateText(A.msg);if(A.cls){U.el.addClass(A.cls)}U.proxyDrag=A.proxyDrag===true;U.modal=A.modal!==false;U.mask=A.modal!==false?Q:false;if(!U.isVisible()){document.body.appendChild(J.el.dom);U.animateTarget=null;U.show(T.animEl)}return this},progress:function(S,R){this.show({title:S,msg:R,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth});return this},alert:function(U,T,S,R){this.show({title:U,msg:T,buttons:this.OK,fn:S,scope:R});return this},wait:function(S,R){this.show({title:R,msg:S,buttons:false,closable:false,progress:true,modal:true,width:300,wait:true});G=Ext.TaskMgr.start({run:function(T){Ext.MessageBox.updateProgress(((((T+20)%20)+1)*5)*0.01)},interval:1000});return this},confirm:function(U,T,S,R){this.show({title:U,msg:T,buttons:this.YESNO,fn:S,scope:R});return this},prompt:function(V,U,T,S,R){this.show({title:V,msg:U,buttons:this.OKCANCEL,fn:T,minWidth:250,scope:S,prompt:true,multiline:R});return this},OK:{ok:true},YESNO:{yes:true,no:true},OKCANCEL:{ok:true,cancel:true},YESNOCANCEL:{yes:true,no:true,cancel:true},defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}}}();Ext.Msg=Ext.MessageBox; +Ext.QuickTips=function(){var C,H,T,E,G,M,V,f={},a,B=null,D,A;var U,K,L,Z;var F=false,J=true,W=false;var e=1,O=1,d=1,Y=[];var S=function(k){if(J){return }var g=k.getTarget();if(!g||g.nodeType!==1||g==document||g==document.body){return }if(U&&g==U.el){clearTimeout(O);return }if(g&&f[g.id]){f[g.id].el=g;e=X.defer(G.showDelay,G,[f[g.id]]);return }var i,j=Ext.fly(g);var h=M.namespace;if(G.interceptTitles&&g.title){i=g.title;g.qtip=i;g.removeAttribute("title");k.preventDefault()}else{i=g.qtip||j.getAttributeNS(h,M.attribute)}if(i){e=X.defer(G.showDelay,G,[{el:g,text:i,width:j.getAttributeNS(h,M.width),autoHide:j.getAttributeNS(h,M.hide)!="user",title:j.getAttributeNS(h,M.title),cls:j.getAttributeNS(h,M.cls)}])}};var c=function(h){clearTimeout(e);var g=h.getTarget();if(g&&U&&U.el==g&&(G.autoHide&&U.autoHide!==false)){O=setTimeout(Q,G.hideDelay)}};var P=function(g){if(J){return }L=g.getXY();L[1]+=18;if(G.trackMouse&&U){C.setXY(L)}};var I=function(g){clearTimeout(e);clearTimeout(O);if(!g.within(C)){if(G.hideOnClick){Q();G.disable();G.enable.defer(100,G)}}};var N=function(){return D.getPadding("l")+A.getPadding("r")};var X=function(j){if(J){return }clearTimeout(d);U=j;if(B){C.removeClass(B);B=null}if(U.cls){C.addClass(U.cls);B=U.cls}if(U.title){E.update(U.title);E.show()}else{E.update("");E.hide()}C.dom.style.width=G.maxWidth+"px";T.update(j.text);var i=N(),g=U.width;if(!g){var k=T.dom;var h=Math.max(k.offsetWidth,k.clientWidth,k.scrollWidth);if(h>G.maxWidth){g=G.maxWidth}else{if(h

    ");E=C.child("h3");E.enableDisplayMode("block");H=C.child("div.x-tip-bd");T=C.child("div.x-tip-bd-inner");D=C.child("div.x-tip-bd-left");A=C.child("div.x-tip-bd-right");V=C.child("div.x-tip-close");V.enableDisplayMode("block");V.on("click",Q);var g=Ext.get(document);g.on("mousedown",I);g.on("mouseover",S);g.on("mouseout",c);g.on("mousemove",P);a=g.addKeyListener(27,Q);a.disable();if(Ext.dd.DD){Z=C.initDD("default",null,{onDrag:function(){C.sync()}});Z.setHandleElId(E.id);Z.lock()}W=true}this.enable()},register:function(l){var n=l instanceof Array?l:arguments;for(var m=0,g=n.length;m0){var D=function(H,G){if(H&&G){var I=G.findChild(A,B);if(I){I.select();if(F){F(true,I)}}else{if(F){F(false,I)}}}else{if(F){F(false,I)}}};this.expandPath(C.join(this.pathSeparator),A,D)}else{this.root.select();if(F){F(true,this.root)}}},getTreeEl:function(){return this.el},render:function(){this.innerCt=this.el.createChild({tag:"ul",cls:"x-tree-root-ct "+(this.lines?"x-tree-lines":"x-tree-no-lines")});if(this.containerScroll){Ext.dd.ScrollManager.register(this.el)}if((this.enableDD||this.enableDrop)&&!this.dropZone){this.dropZone=new Ext.tree.TreeDropZone(this,this.dropConfig||{ddGroup:this.ddGroup||"TreeDD",appendOnly:this.ddAppendOnly===true})}if((this.enableDD||this.enableDrag)&&!this.dragZone){this.dragZone=new Ext.tree.TreeDragZone(this,this.dragConfig||{ddGroup:this.ddGroup||"TreeDD",scroll:this.ddScroll})}this.getSelectionModel().init(this);this.root.render();if(!this.rootVisible){this.root.renderChildren()}return this}}); +Ext.tree.DefaultSelectionModel=function(){this.selNode=null;this.addEvents({"selectionchange":true,"beforeselect":true})};Ext.extend(Ext.tree.DefaultSelectionModel,Ext.util.Observable,{init:function(A){this.tree=A;A.getTreeEl().on("keydown",this.onKeyDown,this);A.on("click",this.onNodeClick,this)},onNodeClick:function(A,B){this.select(A)},select:function(B){var A=this.selNode;if(A!=B&&this.fireEvent("beforeselect",this,B,A)!==false){if(A){A.ui.onSelectedChange(false)}this.selNode=B;B.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,B,A)}return B},unselect:function(A){if(this.selNode==A){this.clearSelections()}},clearSelections:function(){var A=this.selNode;if(A){A.ui.onSelectedChange(false);this.selNode=null;this.fireEvent("selectionchange",this,null)}return A},getSelectedNode:function(){return this.selNode},isSelected:function(A){return this.selNode==A},selectPrevious:function(){var A=this.selNode||this.lastSelNode;if(!A){return null}var C=A.previousSibling;if(C){if(!C.isExpanded()||C.childNodes.length<1){return this.select(C)}else{var B=C.lastChild;while(B&&B.isExpanded()&&B.childNodes.length>0){B=B.lastChild}return this.select(B)}}else{if(A.parentNode&&(this.tree.rootVisible||!A.parentNode.isRoot)){return this.select(A.parentNode)}}return null},selectNext:function(){var B=this.selNode||this.lastSelNode;if(!B){return null}if(B.firstChild&&B.isExpanded()){return this.select(B.firstChild)}else{if(B.nextSibling){return this.select(B.nextSibling)}else{if(B.parentNode){var A=null;B.parentNode.bubble(function(){if(this.nextSibling){A=this.getOwnerTree().selModel.select(this.nextSibling);return false}});return A}}}return null},onKeyDown:function(C){var B=this.selNode||this.lastSelNode;var D=this;if(!B){return }var A=C.getKey();switch(A){case C.DOWN:C.stopEvent();this.selectNext();break;case C.UP:C.stopEvent();this.selectPrevious();break;case C.RIGHT:C.preventDefault();if(B.hasChildNodes()){if(!B.isExpanded()){B.expand()}else{if(B.firstChild){this.select(B.firstChild,C)}}}break;case C.LEFT:C.preventDefault();if(B.hasChildNodes()&&B.isExpanded()){B.collapse()}else{if(B.parentNode&&(this.tree.rootVisible||B.parentNode!=this.tree.getRootNode())){this.select(B.parentNode,C)}}break}}});Ext.tree.MultiSelectionModel=function(){this.selNodes=[];this.selMap={};this.addEvents({"selectionchange":true})};Ext.extend(Ext.tree.MultiSelectionModel,Ext.util.Observable,{init:function(A){this.tree=A;A.getTreeEl().on("keydown",this.onKeyDown,this);A.on("click",this.onNodeClick,this)},onNodeClick:function(A,B){this.select(A,B,B.ctrlKey)},select:function(A,C,B){if(B!==true){this.clearSelections(true)}if(this.isSelected(A)){this.lastSelNode=A;return A}this.selNodes.push(A);this.selMap[A.id]=A;this.lastSelNode=A;A.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,this.selNodes);return A},unselect:function(D){if(this.selMap[D.id]){D.ui.onSelectedChange(false);var E=this.selNodes;var B=-1;if(E.indexOf){B=E.indexOf(D)}else{for(var C=0,A=E.length;C0){for(var C=0,A=D.length;C
    ","",this.indentMarkup,"","","",D?("":" />")):"","",C.text,"
    ","
      ",""];if(I!==true&&C.nextSibling&&C.nextSibling.ui.getEl()){this.wrap=Ext.DomHelper.insertHtml("beforeBegin",C.nextSibling.ui.getEl(),B.join(""))}else{this.wrap=Ext.DomHelper.insertHtml("beforeEnd",G,B.join(""))}this.elNode=this.wrap.childNodes[0];this.ctNode=this.wrap.childNodes[1];var F=this.elNode.childNodes;this.indentNode=F[0];this.ecNode=F[1];this.iconNode=F[2];var E=3;if(D){this.checkbox=F[3];E++}this.anchor=F[E];this.textNode=F[E].firstChild},getAnchor:function(){return this.anchor},getTextEl:function(){return this.textNode},getIconEl:function(){return this.iconNode},isChecked:function(){return this.checkbox?this.checkbox.checked:false},updateExpandIcon:function(){if(this.rendered){var F=this.node,D,C;var A=F.isLast()?"x-tree-elbow-end":"x-tree-elbow";var E=F.hasChildNodes();if(E){if(F.expanded){A+="-minus";D="x-tree-node-collapsed";C="x-tree-node-expanded"}else{A+="-plus";D="x-tree-node-expanded";C="x-tree-node-collapsed"}if(this.wasLeaf){this.removeClass("x-tree-node-leaf");this.wasLeaf=false}if(this.c1!=D||this.c2!=C){Ext.fly(this.elNode).replaceClass(D,C);this.c1=D;this.c2=C}}else{if(!this.wasLeaf){Ext.fly(this.elNode).replaceClass("x-tree-node-expanded","x-tree-node-leaf");delete this.c1;delete this.c2;this.wasLeaf=true}}var B="x-tree-ec-icon "+A;if(this.ecc!=B){this.ecNode.className=B;this.ecc=B}}},getChildIndent:function(){if(!this.childIndent){var A=[];var B=this.node;while(B){if(!B.isRoot||(B.isRoot&&B.ownerTree.rootVisible)){if(!B.isLast()){A.unshift("")}else{A.unshift("")}}B=B.parentNode}this.childIndent=A.join("")}return this.childIndent},renderIndent:function(){if(this.rendered){var A="";var B=this.node.parentNode;if(B){A=B.ui.getChildIndent()}if(this.indentMarkup!=A){this.indentNode.innerHTML=A;this.indentMarkup=A}this.updateExpandIcon()}}};Ext.tree.RootTreeNodeUI=function(){Ext.tree.RootTreeNodeUI.superclass.constructor.apply(this,arguments)};Ext.extend(Ext.tree.RootTreeNodeUI,Ext.tree.TreeNodeUI,{render:function(){if(!this.rendered){var A=this.node.ownerTree.innerCt.dom;this.node.expanded=true;A.innerHTML="
      ";this.wrap=this.ctNode=A.firstChild}},collapse:function(){},expand:function(){}}); +Ext.tree.TreeLoader=function(A){this.baseParams={};this.requestMethod="POST";Ext.apply(this,A);this.addEvents({"beforeload":true,"load":true,"loadexception":true});Ext.tree.TreeLoader.superclass.constructor.call(this)};Ext.extend(Ext.tree.TreeLoader,Ext.util.Observable,{uiProviders:{},clearOnLoad:true,load:function(D,E){if(this.clearOnLoad){while(D.firstChild){D.removeChild(D.firstChild)}}if(D.attributes.children){var C=D.attributes.children;for(var B=0,A=C.length;BK){return E?-1:+1}else{return 0}}}};Ext.tree.TreeSorter.prototype={doSort:function(A){A.sort(this.sortFn)},compareNodes:function(B,A){return(B.text.toUpperCase()>A.text.toUpperCase()?1:-1)},updateSort:function(A,B){if(B.childrenRendered){this.doSort.defer(1,this,[B])}}}; +if(Ext.dd.DropZone){Ext.tree.TreeDropZone=function(A,B){this.allowParentInsert=false;this.allowContainerDrop=false;this.appendOnly=false;Ext.tree.TreeDropZone.superclass.constructor.call(this,A.innerCt,B);this.tree=A;this.lastInsertClass="x-tree-no-status";this.dragOverData={}};Ext.extend(Ext.tree.TreeDropZone,Ext.dd.DropZone,{ddGroup:"TreeDD",expandDelay:1000,expandNode:function(A){if(A.hasChildNodes()&&!A.isExpanded()){A.expand(false,null,this.triggerCacheRefresh.createDelegate(this))}},queueExpand:function(A){this.expandProcId=this.expandNode.defer(this.expandDelay,this,[A])},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);this.expandProcId=false}},isValidDropPoint:function(A,I,G,D,C){if(!A||!C){return false}var E=A.node;var F=C.node;if(!(E&&E.isTarget&&I)){return false}if(I=="append"&&E.allowChildren===false){return false}if((I=="above"||I=="below")&&(E.parentNode&&E.parentNode.allowChildren===false)){return false}if(F&&(E==F||F.contains(E))){return false}var B=this.dragOverData;B.tree=this.tree;B.target=E;B.data=C;B.point=I;B.source=G;B.rawEvent=D;B.dropNode=F;B.cancel=false;var H=this.tree.fireEvent("nodedragover",B);return B.cancel===false&&H!==false},getDropPoint:function(E,D,I){var J=D.node;if(J.isRoot){return J.allowChildren!==false?"append":false}var B=D.ddel;var K=Ext.lib.Dom.getY(B),G=K+B.offsetHeight;var F=Ext.lib.Event.getPageY(E);var H=J.allowChildren===false||J.isLeaf();if(this.appendOnly||J.parentNode.allowChildren===false){return H?false:"append"}var C=false;if(!this.allowParentInsert){C=J.hasChildNodes()&&J.isExpanded()}var A=(G-K)/(H?2:3);if(F>=K&&F<(K+A)){return"above"}else{if(!C&&(H||F>=G-A&&F<=G)){return"below"}else{return"append"}}},onNodeEnter:function(D,A,C,B){this.cancelExpand()},onNodeOver:function(B,G,F,E){var I=this.getDropPoint(F,B,G);var C=B.node;if(!this.expandProcId&&I=="append"&&C.hasChildNodes()&&!B.node.isExpanded()){this.queueExpand(C)}else{if(I!="append"){this.cancelExpand()}}var D=this.dropNotAllowed;if(this.isValidDropPoint(B,I,G,F,E)){if(I){var A=B.ddel;var H;if(I=="above"){D=B.node.isFirst()?"x-tree-drop-ok-above":"x-tree-drop-ok-between";H="x-tree-drag-insert-above"}else{if(I=="below"){D=B.node.isLast()?"x-tree-drop-ok-below":"x-tree-drop-ok-between";H="x-tree-drag-insert-below"}else{D="x-tree-drop-ok-append";H="x-tree-drag-append"}}if(this.lastInsertClass!=H){Ext.fly(A).replaceClass(this.lastInsertClass,H);this.lastInsertClass=H}}}return D},onNodeOut:function(D,A,C,B){this.cancelExpand();this.removeDropIndicators(D)},onNodeDrop:function(C,I,E,D){var H=this.getDropPoint(E,C,I);var F=C.node;F.ui.startDrop();if(!this.isValidDropPoint(C,H,I,E,D)){F.ui.endDrop();return false}var G=D.node||(I.getTreeNode?I.getTreeNode(D,F,H,E):null);var B={tree:this.tree,target:F,data:D,point:H,source:I,rawEvent:E,dropNode:G,cancel:!G};var A=this.tree.fireEvent("beforenodedrop",B);if(A===false||B.cancel===true||!B.dropNode){F.ui.endDrop();return false}F=B.target;if(H=="append"&&!F.isExpanded()){F.expand(false,null,function(){this.completeDrop(B)}.createDelegate(this))}else{this.completeDrop(B)}return true},completeDrop:function(G){var D=G.dropNode,E=G.point,C=G.target;if(!(D instanceof Array)){D=[D]}var F;for(var B=0,A=D.length;BD.offsetLeft){E.scrollLeft=D.offsetLeft}var A=Math.min(this.maxWidth,(E.clientWidth>20?E.clientWidth:E.offsetWidth)-Math.max(0,D.offsetLeft-E.scrollLeft)-5);this.setSize(A,"")},triggerEdit:function(A){this.completeEdit();this.editNode=A;this.startEdit(A.ui.textNode,A.text)},bindScroll:function(){this.tree.getTreeEl().on("scroll",this.cancelEdit,this)},beforeNodeClick:function(B,C){var A=(this.lastClick?this.lastClick.getElapsed():0);this.lastClick=new Date();if(A>this.editDelay&&this.tree.getSelectionModel().isSelected(B)){C.stopEvent();this.triggerEdit(B);return false}},updateNode:function(A,B){this.tree.getTreeEl().un("scroll",this.cancelEdit,this);this.editNode.setText(B)},onHide:function(){Ext.tree.TreeEditor.superclass.onHide.call(this);if(this.editNode){this.editNode.ui.focus()}},onSpecialKey:function(C,B){var A=B.getKey();if(A==B.ESC){B.stopEvent();this.cancelEdit()}else{if(A==B.ENTER&&!B.hasModifier()){B.stopEvent();this.completeEdit()}}}}); +Ext.menu.Menu=function(A){Ext.apply(this,A);this.id=this.id||Ext.id();this.addEvents({beforeshow:true,beforehide:true,show:true,hide:true,click:true,mouseover:true,mouseout:true,itemclick:true});Ext.menu.MenuMgr.register(this);var B=this.items;this.items=new Ext.util.MixedCollection();if(B){this.add.apply(this,B)}};Ext.extend(Ext.menu.Menu,Ext.util.Observable,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,hidden:true,render:function(){if(this.el){return }var B=this.el=new Ext.Layer({cls:"x-menu",shadow:this.shadow,constrain:false,parentEl:this.parentEl||document.body,zindex:15000});this.keyNav=new Ext.menu.MenuNav(this);if(this.plain){B.addClass("x-menu-plain")}if(this.cls){B.addClass(this.cls)}this.focusEl=B.createChild({tag:"a",cls:"x-menu-focus",href:"#",onclick:"return false;",tabIndex:"-1"});var A=B.createChild({tag:"ul",cls:"x-menu-list"});A.on("click",this.onClick,this);A.on("mouseover",this.onMouseOver,this);A.on("mouseout",this.onMouseOut,this);this.items.each(function(D){var C=document.createElement("li");C.className="x-menu-list-item";A.dom.appendChild(C);D.render(C,this)},this);this.ul=A;this.autoWidth()},autoWidth:function(){var D=this.el,C=this.ul;if(!D){return }var A=this.width;if(A){D.setWidth(A)}else{if(Ext.isIE){D.setWidth(this.minWidth);var B=D.dom.offsetWidth;D.setWidth(C.getWidth()+D.getFrameWidth("lr"))}}},delayAutoWidth:function(){if(this.rendered){if(!this.awTask){this.awTask=new Ext.util.DelayedTask(this.autoWidth,this)}this.awTask.delay(20)}},findTargetItem:function(B){var A=B.getTarget(".x-menu-list-item",this.ul,true);if(A&&A.menuItemId){return this.items.get(A.menuItemId)}},onClick:function(B){var A;if(A=this.findTargetItem(B)){A.onClick(B);this.fireEvent("click",this,A,B)}},setActiveItem:function(A,B){if(A!=this.activeItem){if(this.activeItem){this.activeItem.deactivate()}this.activeItem=A;A.activate(B)}else{if(B){A.expandMenu()}}},tryActivate:function(F,E){var B=this.items;for(var C=F,A=B.length;C>=0&&C0){H()}})}function H(){if(D&&D.length>0){var N=D.clone();N.each(function(O){O.hide()})}}function E(N){D.remove(N);if(D.length<1){Ext.get(document).un("mousedown",L);A=false}}function J(N){var O=D.last();K=new Date();D.add(N);if(!A){Ext.get(document).on("mousedown",L);A=true}if(N.parentMenu){N.getEl().setZIndex(parseInt(N.parentMenu.getEl().getStyle("z-index"),10)+3);N.parentMenu.activeChild=N}else{if(O&&O.isVisible()){N.getEl().setZIndex(parseInt(O.getEl().getStyle("z-index"),10)+3)}}}function B(N){if(N.activeChild){N.activeChild.hide()}if(N.autoHideTimer){clearTimeout(N.autoHideTimer);delete N.autoHideTimer}}function G(N){var O=N.parentMenu;if(!O&&!N.allowOtherMenus){H()}else{if(O&&O.activeChild){O.activeChild.hide()}}}function L(N){if(K.getElapsed()>50&&D.length>0&&!N.getTarget(".x-menu")){H()}}function I(O,R){if(R){var Q=C[O.group];for(var P=0,N=Q.length;P{1}",this.icon||Ext.BLANK_IMAGE_URL,this.text,this.iconCls||"");this.el=C;Ext.menu.Item.superclass.onRender.call(this,B,A)},setText:function(A){this.text=A;if(this.rendered){this.el.update(String.format("{1}",this.icon||Ext.BLANK_IMAGE_URL,this.text,this.iconCls||""));this.parentMenu.autoWidth()}},handleClick:function(A){if(!this.href){A.stopEvent()}Ext.menu.Item.superclass.handleClick.apply(this,arguments)},activate:function(A){if(Ext.menu.Item.superclass.activate.apply(this,arguments)){this.focus();if(A){this.expandMenu()}}return true},shouldDeactivate:function(A){if(Ext.menu.Item.superclass.shouldDeactivate.call(this,A)){if(this.menu&&this.menu.isVisible()){return !this.menu.getEl().getRegion().contains(A.getPoint())}return true}return false},deactivate:function(){Ext.menu.Item.superclass.deactivate.apply(this,arguments);this.hideMenu()},expandMenu:function(A){if(!this.disabled&&this.menu){clearTimeout(this.hideTimer);delete this.hideTimer;if(!this.menu.isVisible()&&!this.showTimer){this.showTimer=this.deferExpand.defer(this.showDelay,this,[A])}else{if(this.menu.isVisible()&&A){this.menu.tryActivate(0,1)}}}},deferExpand:function(A){delete this.showTimer;this.menu.show(this.container,this.parentMenu.subMenuAlign||"tl-tr?",this.parentMenu);if(A){this.menu.tryActivate(0,1)}},hideMenu:function(){clearTimeout(this.showTimer);delete this.showTimer;if(!this.hideTimer&&this.menu&&this.menu.isVisible()){this.hideTimer=this.deferHide.defer(this.hideDelay,this)}},deferHide:function(){delete this.hideTimer;this.menu.hide()}}); +Ext.menu.CheckItem=function(A){Ext.menu.CheckItem.superclass.constructor.call(this,A);this.addEvents({"beforecheckchange":true,"checkchange":true});if(this.checkHandler){this.on("checkchange",this.checkHandler,this.scope)}};Ext.extend(Ext.menu.CheckItem,Ext.menu.Item,{itemCls:"x-menu-item x-menu-check-item",groupClass:"x-menu-group-item",checked:false,ctype:"Ext.menu.CheckItem",onRender:function(A){Ext.menu.CheckItem.superclass.onRender.apply(this,arguments);if(this.group){this.el.addClass(this.groupClass)}Ext.menu.MenuMgr.registerCheckable(this);if(this.checked){this.checked=false;this.setChecked(true,true)}},destroy:function(){if(this.rendered){Ext.menu.MenuMgr.unregisterCheckable(this)}Ext.menu.CheckItem.superclass.destroy.apply(this,arguments)},setChecked:function(B,A){if(this.checked!=B&&this.fireEvent("beforecheckchange",this,B)!==false){if(this.container){this.container[B?"addClass":"removeClass"]("x-menu-item-checked")}this.checked=B;if(A!==true){this.fireEvent("checkchange",this,B)}}},handleClick:function(A){if(!this.disabled&&!(this.checked&&this.group)){this.setChecked(!this.checked)}Ext.menu.CheckItem.superclass.handleClick.apply(this,arguments)}}); +Ext.menu.Adapter=function(B,A){Ext.menu.Adapter.superclass.constructor.call(this,A);this.component=B};Ext.extend(Ext.menu.Adapter,Ext.menu.BaseItem,{canActivate:true,onRender:function(B,A){this.component.render(B);this.el=this.component.getEl()},activate:function(){if(this.disabled){return false}this.component.focus();this.fireEvent("activate",this);return true},deactivate:function(){this.fireEvent("deactivate",this)},disable:function(){this.component.disable();Ext.menu.Adapter.superclass.disable.call(this)},enable:function(){this.component.enable();Ext.menu.Adapter.superclass.enable.call(this)}}); +Ext.menu.DateItem=function(A){Ext.menu.DateItem.superclass.constructor.call(this,new Ext.DatePicker(A),A);this.picker=this.component;this.addEvents({select:true});this.picker.on("render",function(B){B.getEl().swallowEvent("click");B.container.addClass("x-menu-date-item")});this.picker.on("select",this.onSelect,this)};Ext.extend(Ext.menu.DateItem,Ext.menu.Adapter,{onSelect:function(B,A){this.fireEvent("select",this,A,B);Ext.menu.DateItem.superclass.handleClick.call(this)}}); +Ext.menu.ColorItem=function(A){Ext.menu.ColorItem.superclass.constructor.call(this,new Ext.ColorPalette(A),A);this.palette=this.component;this.relayEvents(this.palette,["select"]);if(this.selectHandler){this.on("select",this.selectHandler,this.scope)}};Ext.extend(Ext.menu.ColorItem,Ext.menu.Adapter); +Ext.menu.DateMenu=function(A){Ext.menu.DateMenu.superclass.constructor.call(this,A);this.plain=true;var B=new Ext.menu.DateItem(A);this.add(B);this.picker=B.picker;this.relayEvents(B,["select"]);this.on("beforeshow",function(){if(this.picker){this.picker.hideMonthPicker(true)}},this)};Ext.extend(Ext.menu.DateMenu,Ext.menu.Menu,{cls:"x-date-menu"}); +Ext.menu.ColorMenu=function(A){Ext.menu.ColorMenu.superclass.constructor.call(this,A);this.plain=true;var B=new Ext.menu.ColorItem(A);this.add(B);this.palette=B.palette;this.relayEvents(B,["select"])};Ext.extend(Ext.menu.ColorMenu,Ext.menu.Menu); +Ext.form.Field=function(A){Ext.form.Field.superclass.constructor.call(this,A)};Ext.extend(Ext.form.Field,Ext.BoxComponent,{invalidClass:"x-form-invalid",invalidText:"The value in this field is invalid",focusClass:"x-form-focus",validationEvent:"keyup",validateOnBlur:true,validationDelay:250,defaultAutoCreate:{tag:"input",type:"text",size:"20",autocomplete:"off"},fieldClass:"x-form-field",msgTarget:"qtip",msgFx:"normal",readOnly:false,disabled:false,inputType:undefined,tabIndex:undefined,isFormField:true,hasFocus:false,value:undefined,initComponent:function(){Ext.form.Field.superclass.initComponent.call(this);this.addEvents({focus:true,blur:true,specialkey:true,change:true,invalid:true,valid:true})},getName:function(){return this.rendered&&this.el.dom.name?this.el.dom.name:(this.hiddenName||"")},onRender:function(C,A){Ext.form.Field.superclass.onRender.call(this,C,A);if(!this.el){var B=this.getAutoCreate();if(!B.name){B.name=this.name||this.id}if(this.inputType){B.type=this.inputType}this.el=C.createChild(B,A)}var D=this.el.dom.type;if(D){if(D=="password"){D="text"}this.el.addClass("x-form-"+D)}if(this.readOnly){this.el.dom.readOnly=true}if(this.tabIndex!==undefined){this.el.dom.setAttribute("tabIndex",this.tabIndex)}this.el.addClass([this.fieldClass,this.cls]);this.initValue()},applyTo:function(A){this.allowDomMove=false;this.el=Ext.get(A);this.render(this.el.dom.parentNode);return this},initValue:function(){if(this.value!==undefined){this.setValue(this.value)}else{if(this.el.dom.value.length>0){this.setValue(this.el.dom.value)}}},isDirty:function(){if(this.disabled){return false}return String(this.getValue())!==String(this.originalValue)},afterRender:function(){Ext.form.Field.superclass.afterRender.call(this);this.initEvents()},fireKey:function(A){if(A.isNavKeyPress()){this.fireEvent("specialkey",this,A)}},reset:function(){this.setValue(this.originalValue);this.clearInvalid()},initEvents:function(){this.el.on(Ext.isIE?"keydown":"keypress",this.fireKey,this);this.el.on("focus",this.onFocus,this);this.el.on("blur",this.onBlur,this);this.originalValue=this.getValue()},onFocus:function(){if(!Ext.isOpera&&this.focusClass){this.el.addClass(this.focusClass)}if(!this.hasFocus){this.hasFocus=true;this.startValue=this.getValue();this.fireEvent("focus",this)}},beforeBlur:Ext.emptyFn,onBlur:function(){this.beforeBlur();if(!Ext.isOpera&&this.focusClass){this.el.removeClass(this.focusClass)}this.hasFocus=false;if(this.validationEvent!==false&&this.validateOnBlur&&this.validationEvent!="blur"){this.validate()}var A=this.getValue();if(String(A)!==String(this.startValue)){this.fireEvent("change",this,A,this.startValue)}this.fireEvent("blur",this)},isValid:function(A){if(this.disabled){return true}var C=this.preventMark;this.preventMark=A===true;var B=this.validateValue(this.processValue(this.getRawValue()));this.preventMark=C;return B},validate:function(){if(this.disabled||this.validateValue(this.processValue(this.getRawValue()))){this.clearInvalid();return true}return false},processValue:function(A){return A},validateValue:function(A){return true},markInvalid:function(C){if(!this.rendered||this.preventMark){return }this.el.addClass(this.invalidClass);C=C||this.invalidText;switch(this.msgTarget){case"qtip":this.el.dom.qtip=C;this.el.dom.qclass="x-form-invalid-tip";if(Ext.QuickTips){Ext.QuickTips.enable()}break;case"title":this.el.dom.title=C;break;case"under":if(!this.errorEl){var B=this.el.findParent(".x-form-element",5,true);this.errorEl=B.createChild({cls:"x-form-invalid-msg"});this.errorEl.setWidth(B.getWidth(true)-20)}this.errorEl.update(C);Ext.form.Field.msgFx[this.msgFx].show(this.errorEl,this);break;case"side":if(!this.errorIcon){var B=this.el.findParent(".x-form-element",5,true);this.errorIcon=B.createChild({cls:"x-form-invalid-icon"})}this.alignErrorIcon();this.errorIcon.dom.qtip=C;this.errorIcon.dom.qclass="x-form-invalid-tip";this.errorIcon.show();this.on("resize",this.alignErrorIcon,this);break;default:var A=Ext.getDom(this.msgTarget);A.innerHTML=C;A.style.display=this.msgDisplay;break}this.fireEvent("invalid",this,C)},alignErrorIcon:function(){this.errorIcon.alignTo(this.el,"tl-tr",[2,0])},clearInvalid:function(){if(!this.rendered||this.preventMark){return }this.el.removeClass(this.invalidClass);switch(this.msgTarget){case"qtip":this.el.dom.qtip="";break;case"title":this.el.dom.title="";break;case"under":if(this.errorEl){Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl,this)}break;case"side":if(this.errorIcon){this.errorIcon.dom.qtip="";this.errorIcon.hide();this.un("resize",this.alignErrorIcon,this)}break;default:var A=Ext.getDom(this.msgTarget);A.innerHTML="";A.style.display="none";break}this.fireEvent("valid",this)},getRawValue:function(){var A=this.el.getValue();if(A===this.emptyText){A=""}return A},getValue:function(){var A=this.el.getValue();if(A===this.emptyText||A===undefined){A=""}return A},setRawValue:function(A){return this.el.dom.value=(A===null||A===undefined?"":A)},setValue:function(A){this.value=A;if(this.rendered){this.el.dom.value=(A===null||A===undefined?"":A);this.validate()}},adjustSize:function(A,C){var B=Ext.form.Field.superclass.adjustSize.call(this,A,C);B.width=this.adjustWidth(this.el.dom.tagName,B.width);return B},adjustWidth:function(A,B){A=A.toLowerCase();if(typeof B=="number"&&Ext.isStrict&&!Ext.isSafari){if(Ext.isIE&&(A=="input"||A=="textarea")){if(A=="input"){return B+2}if(A="textarea"){return B-2}}else{if(Ext.isOpera){if(A=="input"){return B+2}if(A="textarea"){return B-2}}}}return B}});Ext.form.Field.msgFx={normal:{show:function(A,B){A.setDisplayed("block")},hide:function(A,B){A.setDisplayed(false).update("")}},slide:{show:function(A,B){A.slideIn("t",{stopFx:true})},hide:function(A,B){A.slideOut("t",{stopFx:true,useDisplay:true})}},slideRight:{show:function(A,B){A.fixDisplay();A.alignTo(B.el,"tl-tr");A.slideIn("l",{stopFx:true})},hide:function(A,B){A.slideOut("l",{stopFx:true,useDisplay:true})}}}; +Ext.form.TextField=function(A){Ext.form.TextField.superclass.constructor.call(this,A);this.addEvents({autosize:true})};Ext.extend(Ext.form.TextField,Ext.form.Field,{grow:false,growMin:30,growMax:800,vtype:null,maskRe:null,disableKeyFilter:false,allowBlank:true,minLength:0,maxLength:Number.MAX_VALUE,minLengthText:"The minimum length for this field is {0}",maxLengthText:"The maximum length for this field is {0}",selectOnFocus:false,blankText:"This field is required",validator:null,regex:null,regexText:"",emptyText:null,emptyClass:"x-form-empty-field",initEvents:function(){Ext.form.TextField.superclass.initEvents.call(this);if(this.validationEvent=="keyup"){this.validationTask=new Ext.util.DelayedTask(this.validate,this);this.el.on("keyup",this.filterValidation,this)}else{if(this.validationEvent!==false){this.el.on(this.validationEvent,this.validate,this,{buffer:this.validationDelay})}}if(this.selectOnFocus||this.emptyText){this.on("focus",this.preFocus,this);if(this.emptyText){this.on("blur",this.postBlur,this);this.applyEmptyText()}}if(this.maskRe||(this.vtype&&this.disableKeyFilter!==true&&(this.maskRe=Ext.form.VTypes[this.vtype+"Mask"]))){this.el.on("keypress",this.filterKeys,this)}if(this.grow){this.el.on("keyup",this.onKeyUp,this,{buffer:50});this.el.on("click",this.autoSize,this)}},processValue:function(A){if(this.stripCharsRe){var B=A.replace(this.stripCharsRe,"");if(B!==A){this.setRawValue(B);return B}}return A},filterValidation:function(A){if(!A.isNavKeyPress()){this.validationTask.delay(this.validationDelay)}},onKeyUp:function(A){if(!A.isNavKeyPress()){this.autoSize()}},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText()},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass)}},preFocus:function(){if(this.emptyText){if(this.el.dom.value==this.emptyText){this.setRawValue("")}this.el.removeClass(this.emptyClass)}if(this.selectOnFocus){this.el.dom.select()}},postBlur:function(){this.applyEmptyText()},filterKeys:function(B){var A=B.getKey();if(!Ext.isIE&&(B.isNavKeyPress()||A==B.BACKSPACE||(A==B.DELETE&&B.button==-1))){return }var D=B.getCharCode(),C=String.fromCharCode(D);if(Ext.isIE&&(B.isSpecialKey()||!C)){return }if(!this.maskRe.test(C)){B.stopEvent()}},setValue:function(A){if(this.emptyText&&this.el&&A!==undefined&&A!==null&&A!==""){this.el.removeClass(this.emptyClass)}Ext.form.TextField.superclass.setValue.apply(this,arguments);this.applyEmptyText();this.autoSize()},validateValue:function(A){if(A.length<1||A===this.emptyText){if(this.allowBlank){this.clearInvalid();return true}else{this.markInvalid(this.blankText);return false}}if(A.lengththis.maxLength){this.markInvalid(String.format(this.maxLengthText,this.maxLength));return false}if(this.vtype){var C=Ext.form.VTypes;if(!C[this.vtype](A,this)){this.markInvalid(this.vtypeText||C[this.vtype+"Text"]);return false}}if(typeof this.validator=="function"){var B=this.validator(A);if(B!==true){this.markInvalid(B);return false}}if(this.regex&&!this.regex.test(A)){this.markInvalid(this.regexText);return false}return true},selectText:function(E,A){var C=this.getRawValue();if(C.length>0){E=E===undefined?0:E;A=A===undefined?C.length:A;var D=this.el.dom;if(D.setSelectionRange){D.setSelectionRange(E,A)}else{if(D.createTextRange){var B=D.createTextRange();B.moveStart("character",E);B.moveEnd("character",C.length-A);B.select()}}}},autoSize:function(){if(!this.grow||!this.rendered){return }if(!this.metrics){this.metrics=Ext.util.TextMetrics.createInstance(this.el)}var C=this.el;var B=C.dom.value;var D=document.createElement("div");D.appendChild(document.createTextNode(B));B=D.innerHTML;D=null;B+=" ";var A=Math.min(this.growMax,Math.max(this.metrics.getWidth(B)+10,this.growMin));this.el.setWidth(A);this.fireEvent("autosize",this,A)}}); +Ext.form.TriggerField=function(A){this.mimicing=false;Ext.form.TriggerField.superclass.constructor.call(this,A)};Ext.extend(Ext.form.TriggerField,Ext.form.TextField,{defaultAutoCreate:{tag:"input",type:"text",size:"16",autocomplete:"off"},hideTrigger:false,autoSize:Ext.emptyFn,monitorTab:true,deferHeight:true,onResize:function(A,B){Ext.form.TriggerField.superclass.onResize.apply(this,arguments);if(typeof A=="number"){this.el.setWidth(this.adjustWidth("input",A-this.trigger.getWidth()))}},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap},getPositionEl:function(){return this.wrap},alignErrorIcon:function(){this.errorIcon.alignTo(this.wrap,"tl-tr",[2,0])},onRender:function(B,A){Ext.form.TriggerField.superclass.onRender.call(this,B,A);this.wrap=this.el.wrap({cls:"x-form-field-wrap"});this.trigger=this.wrap.createChild(this.triggerConfig||{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.triggerClass});if(this.hideTrigger){this.trigger.setDisplayed(false)}this.initTrigger();if(!this.width){this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth())}},initTrigger:function(){this.trigger.on("click",this.onTriggerClick,this,{preventDefault:true});this.trigger.addClassOnOver("x-form-trigger-over");this.trigger.addClassOnClick("x-form-trigger-click")},onDestroy:function(){if(this.trigger){this.trigger.removeAllListeners();this.trigger.remove()}if(this.wrap){this.wrap.remove()}Ext.form.TriggerField.superclass.onDestroy.call(this)},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass("x-trigger-wrap-focus");this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this);if(this.monitorTab){this.el.on("keydown",this.checkTab,this)}}},checkTab:function(A){if(A.getKey()==A.TAB){this.triggerBlur()}},onBlur:function(){},mimicBlur:function(B,A){if(!this.wrap.contains(A)&&this.validateBlur()){this.triggerBlur()}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur);if(this.monitorTab){this.el.un("keydown",this.checkTab,this)}this.wrap.removeClass("x-trigger-wrap-focus");Ext.form.TriggerField.superclass.onBlur.call(this)},validateBlur:function(B,A){return true},onDisable:function(){Ext.form.TriggerField.superclass.onDisable.call(this);if(this.wrap){this.wrap.addClass("x-item-disabled")}},onEnable:function(){Ext.form.TriggerField.superclass.onEnable.call(this);if(this.wrap){this.wrap.removeClass("x-item-disabled")}},onShow:function(){if(this.wrap){this.wrap.dom.style.display="";this.wrap.dom.style.visibility="visible"}},onHide:function(){this.wrap.dom.style.display="none"},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:"span",cls:"x-form-twin-triggers",cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger2Class}]}},getTrigger:function(A){return this.triggers[A]},initTrigger:function(){var A=this.trigger.select(".x-form-trigger",true);this.wrap.setStyle("overflow","hidden");var B=this;A.each(function(D,F,C){D.hide=function(){var G=B.wrap.getWidth();this.dom.style.display="none";B.el.setWidth(G-B.trigger.getWidth())};D.show=function(){var G=B.wrap.getWidth();this.dom.style.display="";B.el.setWidth(G-B.trigger.getWidth())};var E="Trigger"+(C+1);if(this["hide"+E]){D.dom.style.display="none"}D.on("click",this["on"+E+"Click"],this,{preventDefault:true});D.addClassOnOver("x-form-trigger-over");D.addClassOnClick("x-form-trigger-click")},this);this.triggers=A.elements},onTrigger1Click:Ext.emptyFn,onTrigger2Click:Ext.emptyFn}); +Ext.form.TextArea=function(A){Ext.form.TextArea.superclass.constructor.call(this,A);if(this.minHeight!==undefined){this.growMin=this.minHeight}if(this.maxHeight!==undefined){this.growMax=this.maxHeight}};Ext.extend(Ext.form.TextArea,Ext.form.TextField,{growMin:60,growMax:1000,preventScrollbars:false,onRender:function(B,A){if(!this.el){this.defaultAutoCreate={tag:"textarea",style:"width:300px;height:60px;",autocomplete:"off"}}Ext.form.TextArea.superclass.onRender.call(this,B,A);if(this.grow){this.textSizeEl=Ext.DomHelper.append(document.body,{tag:"pre",cls:"x-form-grow-sizer"});if(this.preventScrollbars){this.el.setStyle("overflow","hidden")}this.el.setHeight(this.growMin)}},onDestroy:function(){if(this.textSizeEl){this.textSizeEl.parentNode.removeChild(this.textSizeEl)}Ext.form.TextArea.superclass.onDestroy.call(this)},onKeyUp:function(A){if(!A.isNavKeyPress()||A.getKey()==A.ENTER){this.autoSize()}},autoSize:function(){if(!this.grow||!this.textSizeEl){return }var C=this.el;var A=C.dom.value;var D=this.textSizeEl;D.innerHTML="";D.appendChild(document.createTextNode(A));A=D.innerHTML;Ext.fly(D).setWidth(this.el.getWidth());if(A.length<1){A="  "}else{if(Ext.isIE){A=A.replace(/\n/g,"

       

      ")}A+=" \n "}D.innerHTML=A;var B=Math.min(this.growMax,Math.max(D.offsetHeight,this.growMin));if(B!=this.lastHeight){this.lastHeight=B;this.el.setHeight(B);this.fireEvent("autosize",this,B)}}}); +Ext.form.NumberField=function(A){Ext.form.NumberField.superclass.constructor.call(this,A)};Ext.extend(Ext.form.NumberField,Ext.form.TextField,{fieldClass:"x-form-field x-form-num-field",allowDecimals:true,decimalSeparator:".",decimalPrecision:2,allowNegative:true,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,minText:"The minimum value for this field is {0}",maxText:"The maximum value for this field is {0}",nanText:"{0} is not a valid number",initEvents:function(){Ext.form.NumberField.superclass.initEvents.call(this);var B="0123456789";if(this.allowDecimals){B+=this.decimalSeparator}if(this.allowNegative){B+="-"}this.stripCharsRe=new RegExp("[^"+B+"]","gi");var A=function(D){var C=D.getKey();if(!Ext.isIE&&(D.isSpecialKey()||C==D.BACKSPACE||C==D.DELETE)){return }var E=D.getCharCode();if(B.indexOf(String.fromCharCode(E))===-1){D.stopEvent()}};this.el.on("keypress",A,this)},validateValue:function(B){if(!Ext.form.NumberField.superclass.validateValue.call(this,B)){return false}if(B.length<1){return true}var A=this.parseValue(B);if(isNaN(A)){this.markInvalid(String.format(this.nanText,B));return false}if(Athis.maxValue){this.markInvalid(String.format(this.maxText,this.maxValue));return false}return true},getValue:function(){return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this)))},parseValue:function(A){A=parseFloat(String(A).replace(this.decimalSeparator,"."));return isNaN(A)?"":A},fixPrecision:function(B){var A=isNaN(B);if(!this.allowDecimals||this.decimalPrecision==-1||A||!B){return A?"":B}return parseFloat(B).toFixed(this.decimalPrecision)},setValue:function(A){Ext.form.NumberField.superclass.setValue.call(this,String(A).replace(".",this.decimalSeparator))},decimalPrecisionFcn:function(A){return Math.floor(A)},beforeBlur:function(){var A=this.parseValue(this.getRawValue());if(A){this.setValue(this.fixPrecision(A))}}}); +Ext.form.DateField=function(B){Ext.form.DateField.superclass.constructor.call(this,B);if(typeof this.minValue=="string"){this.minValue=this.parseDate(this.minValue)}if(typeof this.maxValue=="string"){this.maxValue=this.parseDate(this.maxValue)}this.ddMatch=null;if(this.disabledDates){var A=this.disabledDates;var D="(?:";for(var C=0;Cthis.maxValue.getTime()){this.markInvalid(String.format(this.maxText,this.formatDate(this.maxValue)));return false}if(this.disabledDays){var A=E.getDay();for(var B=0;B{"+this.displayField+"}"}this.view=new Ext.View(this.innerList,this.tpl,{singleSelect:true,store:this.store,selectedClass:this.selectedClass});this.view.on("click",this.onViewClick,this);this.store.on("beforeload",this.onBeforeLoad,this);this.store.on("load",this.onLoad,this);this.store.on("loadexception",this.collapse,this);if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:"se"});this.resizer.on("resize",function(G,E,F){this.maxHeight=F-this.handleHeight-this.list.getFrameWidth("tb")-this.assetHeight;this.listWidth=E;this.innerList.setWidth(E-this.list.getFrameWidth("lr"));this.restrictHeight()},this);this[this.pageSize?"footer":"innerList"].setStyle("margin-bottom",this.handleHeight+"px")}if(!this.editable){this.editable=true;this.setEditable(false)}},initEvents:function(){Ext.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{"up":function(A){this.inKeyMode=true;this.selectPrev()},"down":function(A){if(!this.isExpanded()){this.onTriggerClick()}else{this.inKeyMode=true;this.selectNext()}},"enter":function(A){this.onViewClick()},"esc":function(A){this.collapse()},"tab":function(A){this.onViewClick(false);return true},scope:this,doRelay:function(C,B,A){if(A=="down"||this.scope.isExpanded()){return Ext.KeyNav.prototype.doRelay.apply(this,arguments)}return true},forceKeyDown:true});this.queryDelay=Math.max(this.queryDelay||10,this.mode=="local"?10:250);this.dqTask=new Ext.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Ext.util.DelayedTask(this.onTypeAhead,this)}if(this.editable!==false){this.el.on("keyup",this.onKeyUp,this)}if(this.forceSelection){this.on("blur",this.doForce,this)}},onDestroy:function(){if(this.view){this.view.setStore(null);this.view.el.removeAllListeners();this.view.el.remove();this.view.purgeListeners()}if(this.list){this.list.destroy()}if(this.store){this.store.un("beforeload",this.onBeforeLoad,this);this.store.un("load",this.onLoad,this);this.store.un("loadexception",this.collapse,this)}Ext.form.ComboBox.superclass.onDestroy.call(this)},fireKey:function(A){if(A.isNavKeyPress()&&!this.list.isVisible()){this.fireEvent("specialkey",this,A)}},onResize:function(A,B){Ext.form.ComboBox.superclass.onResize.apply(this,arguments);if(this.list&&this.listWidth===undefined){var C=Math.max(A,this.minListWidth);this.list.setWidth(C);this.innerList.setWidth(C-this.list.getFrameWidth("lr"))}},setEditable:function(A){if(A==this.editable){return }this.editable=A;if(!A){this.el.dom.setAttribute("readOnly",true);this.el.on("mousedown",this.onTriggerClick,this);this.el.addClass("x-combo-noedit")}else{this.el.dom.setAttribute("readOnly",false);this.el.un("mousedown",this.onTriggerClick,this);this.el.removeClass("x-combo-noedit")}},onBeforeLoad:function(){if(!this.hasFocus){return }this.innerList.update(this.loadingText?"
      "+this.loadingText+"
      ":"");this.restrictHeight();this.selectedIndex=-1},onLoad:function(){if(!this.hasFocus){return }if(this.store.getCount()>0){this.expand();this.restrictHeight();if(this.lastQuery==this.allQuery){if(this.editable){this.el.dom.select()}if(!this.selectByValue(this.value,true)){this.select(0,true)}}else{this.selectNext();if(this.typeAhead&&this.lastKey!=Ext.EventObject.BACKSPACE&&this.lastKey!=Ext.EventObject.DELETE){this.taTask.delay(this.typeAheadDelay)}}}else{this.onEmptyResults()}},onTypeAhead:function(){if(this.store.getCount()>0){var B=this.store.getAt(0);var C=B.data[this.displayField];var A=C.length;var D=this.getRawValue().length;if(D!=A){this.setRawValue(C);this.selectText(D,C.length)}}},onSelect:function(A,B){if(this.fireEvent("beforeselect",this,A,B)!==false){this.setValue(A.data[this.valueField||this.displayField]);this.collapse();this.fireEvent("select",this,A,B)}},getValue:function(){if(this.valueField){return typeof this.value!="undefined"?this.value:""}else{return Ext.form.ComboBox.superclass.getValue.call(this)}},clearValue:function(){if(this.hiddenField){this.hiddenField.value=""}this.setRawValue("");this.lastSelectionText="";this.applyEmptyText()},setValue:function(A){var C=A;if(this.valueField){var B=this.findRecord(this.valueField,A);if(B){C=B.data[this.displayField]}else{if(this.valueNotFoundText!==undefined){C=this.valueNotFoundText}}}this.lastSelectionText=C;if(this.hiddenField){this.hiddenField.value=A}Ext.form.ComboBox.superclass.setValue.call(this,C);this.value=A},findRecord:function(C,B){var A;if(this.store.getCount()>0){this.store.each(function(D){if(D.data[C]==B){A=D;return false}})}return A},onViewMove:function(B,A){this.inKeyMode=false},onViewOver:function(D,B){if(this.inKeyMode){return }var C=this.view.findItemFromChild(B);if(C){var A=this.view.indexOf(C);this.select(A,false)}},onViewClick:function(B){var A=this.view.getSelectedIndexes()[0];var C=this.store.getAt(A);if(C){this.onSelect(C,A)}if(B!==false){this.el.focus()}},restrictHeight:function(){this.innerList.dom.style.height="";var A=this.innerList.dom;var B=Math.max(A.clientHeight,A.offsetHeight,A.scrollHeight);this.innerList.setHeight(B0){if(this.selectedIndex==-1){this.select(0)}else{if(this.selectedIndex0){if(this.selectedIndex==-1){this.select(0)}else{if(this.selectedIndex!=0){this.select(this.selectedIndex-1)}}}},onKeyUp:function(A){if(this.editable!==false&&!A.isSpecialKey()){this.lastKey=A.getKey();this.dqTask.delay(this.queryDelay)}},validateBlur:function(){return !this.list||!this.list.isVisible()},initQuery:function(){this.doQuery(this.getRawValue())},doForce:function(){if(this.el.dom.value.length>0){this.el.dom.value=this.lastSelectionText===undefined?"":this.lastSelectionText;this.applyEmptyText()}},doQuery:function(C,B){if(C===undefined||C===null){C=""}var A={query:C,forceAll:B,combo:this,cancel:false};if(this.fireEvent("beforequery",A)===false||A.cancel){return false}C=A.query;B=A.forceAll;if(B===true||(C.length>=this.minChars)){if(this.lastQuery!=C){this.lastQuery=C;if(this.mode=="local"){this.selectedIndex=-1;if(B){this.store.clearFilter()}else{this.store.filter(this.displayField,C)}this.onLoad()}else{this.store.baseParams[this.queryParam]=C;this.store.load({params:this.getParams(C)});this.expand()}}else{this.selectedIndex=-1;this.onLoad()}}},getParams:function(A){var B={};if(this.pageSize){B.start=0;B.limit=this.pageSize}return B},collapse:function(){if(!this.isExpanded()){return }this.list.hide();Ext.get(document).un("mousedown",this.collapseIf,this);Ext.get(document).un("mousewheel",this.collapseIf,this);this.fireEvent("collapse",this)},collapseIf:function(A){if(!A.within(this.wrap)&&!A.within(this.list)){this.collapse()}},expand:function(){if(this.isExpanded()||!this.hasFocus){return }this.list.alignTo(this.el,this.listAlign);this.list.show();Ext.get(document).on("mousedown",this.collapseIf,this);Ext.get(document).on("mousewheel",this.collapseIf,this);this.fireEvent("expand",this)},onTriggerClick:function(){if(this.disabled){return }if(this.isExpanded()){this.collapse();this.el.focus()}else{this.hasFocus=true;if(this.triggerAction=="all"){this.doQuery(this.allQuery,true)}else{this.doQuery(this.getRawValue())}this.el.focus()}}}); +Ext.form.Checkbox=function(A){Ext.form.Checkbox.superclass.constructor.call(this,A);this.addEvents({check:true})};Ext.extend(Ext.form.Checkbox,Ext.form.Field,{focusClass:undefined,fieldClass:"x-form-field",checked:false,defaultAutoCreate:{tag:"input",type:"checkbox",autocomplete:"off"},boxLabel:undefined,onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel){this.el.alignTo(this.wrap,"c-c")}},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.el.on("click",this.onClick,this);this.el.on("change",this.onClick,this)},getResizeEl:function(){return this.wrap},getPositionEl:function(){return this.wrap},onRender:function(B,A){Ext.form.Checkbox.superclass.onRender.call(this,B,A);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue}this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:"label",htmlFor:this.el.id,cls:"x-form-cb-label",html:this.boxLabel})}if(this.checked){this.setValue(true)}else{this.checked=this.el.dom.checked}},initValue:Ext.emptyFn,getValue:function(){if(this.rendered){return this.el.dom.checked}return false},onClick:function(){if(this.el.dom.checked!=this.checked){this.setValue(this.el.dom.checked)}},setValue:function(A){this.checked=(A===true||A==="true"||A=="1"||String(A).toLowerCase()=="on");if(this.el&&this.el.dom){this.el.dom.checked=this.checked;this.el.dom.defaultChecked=this.checked}this.fireEvent("check",this,this.checked)}}); +Ext.form.Radio=function(){Ext.form.Radio.superclass.constructor.apply(this,arguments)};Ext.extend(Ext.form.Radio,Ext.form.Checkbox,{inputType:"radio",getGroupValue:function(){return this.el.up("form").child("input[name="+this.el.dom.name+"]:checked",true).value}}); +Ext.form.HtmlEditor=Ext.extend(Ext.form.Field,{enableFormat:true,enableFontSize:true,enableColors:true,enableAlignments:true,enableLists:true,enableSourceEdit:true,enableLinks:true,enableFont:true,createLinkText:"Please enter the URL for the link:",defaultLinkValue:"http:/"+"/",fontFamilies:["Arial","Courier New","Tahoma","Times New Roman","Verdana"],defaultFont:"tahoma",validationEvent:false,deferHeight:true,initialized:false,activated:false,sourceEditMode:false,onFocus:Ext.emptyFn,iframePad:3,hideMode:"offsets",defaultAutoCreate:{tag:"textarea",style:"width:500px;height:300px;",autocomplete:"off"},initComponent:function(){this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editmodechange:true})},createFontOptions:function(){var D=[],B=this.fontFamilies,C,F;for(var E=0,A=B.length;E":">"),C,"")}return D.join("")},createToolbar:function(C){function B(F,D,E){return{id:F,cls:"x-btn-icon x-edit-"+F,enableToggle:D!==false,scope:C,handler:E||C.relayBtnCmd,clickEvent:"mousedown",tooltip:C.buttonTips[F]||undefined,tabIndex:-1}}var A=new Ext.Toolbar(this.wrap.dom.firstChild);A.el.on("click",function(D){D.preventDefault()});if(this.enableFont&&!Ext.isSafari){this.fontSelect=A.el.createChild({tag:"select",tabIndex:-1,cls:"x-font-select",html:this.createFontOptions()});this.fontSelect.on("change",function(){var D=this.fontSelect.dom.value;this.relayCmd("fontname",D);this.deferFocus()},this);A.add(this.fontSelect.dom,"-")}if(this.enableFormat){A.add(B("bold"),B("italic"),B("underline"))}if(this.enableFontSize){A.add("-",B("increasefontsize",false,this.adjustFont),B("decreasefontsize",false,this.adjustFont))}if(this.enableColors){A.add("-",{id:"forecolor",cls:"x-btn-icon x-edit-forecolor",clickEvent:"mousedown",tooltip:C.buttonTips["forecolor"]||undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({allowReselect:true,focus:Ext.emptyFn,value:"000000",plain:true,selectHandler:function(E,D){this.execCmd("forecolor",Ext.isSafari||Ext.isIE?"#"+D:D);this.deferFocus()},scope:this,clickEvent:"mousedown"})},{id:"backcolor",cls:"x-btn-icon x-edit-backcolor",clickEvent:"mousedown",tooltip:C.buttonTips["backcolor"]||undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({focus:Ext.emptyFn,value:"FFFFFF",plain:true,allowReselect:true,selectHandler:function(E,D){if(Ext.isGecko){this.execCmd("useCSS",false);this.execCmd("hilitecolor",D);this.execCmd("useCSS",true);this.deferFocus()}else{this.execCmd(Ext.isOpera?"hilitecolor":"backcolor",Ext.isSafari||Ext.isIE?"#"+D:D);this.deferFocus()}},scope:this,clickEvent:"mousedown"})})}if(this.enableAlignments){A.add("-",B("justifyleft"),B("justifycenter"),B("justifyright"))}if(!Ext.isSafari){if(this.enableLinks){A.add("-",B("createlink",false,this.createLink))}if(this.enableLists){A.add("-",B("insertorderedlist"),B("insertunorderedlist"))}if(this.enableSourceEdit){A.add("-",B("sourceedit",true,function(D){this.toggleSourceEdit(D.pressed)}))}}this.tb=A},getDocMarkup:function(){return""},onRender:function(C,A){Ext.form.HtmlEditor.superclass.onRender.call(this,C,A);this.el.dom.style.border="0 none";this.el.dom.setAttribute("tabIndex",-1);this.el.addClass("x-hidden");if(Ext.isIE){this.el.applyStyles("margin-top:-1px;margin-bottom:-1px;")}this.wrap=this.el.wrap({cls:"x-html-editor-wrap",cn:{cls:"x-html-editor-tb"}});this.createToolbar(this);this.tb.items.each(function(E){if(E.id!="sourceedit"){E.disable()}});var D=document.createElement("iframe");D.name=Ext.id();D.frameBorder="no";D.src=(Ext.SSL_SECURE_URL||"javascript:false");this.wrap.dom.appendChild(D);this.iframe=D;if(Ext.isIE){this.doc=D.contentWindow.document;this.win=D.contentWindow}else{this.doc=(D.contentDocument||window.frames[D.name].document);this.win=window.frames[D.name]}this.doc.designMode="on";this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var B={run:function(){if(this.doc.body||this.doc.readyState=="complete"){this.doc.designMode="on";Ext.TaskMgr.stop(B);this.initEditor.defer(10,this)}},interval:10,duration:10000,scope:this};Ext.TaskMgr.start(B);if(!this.width){this.setSize(this.el.getSize())}},onResize:function(B,C){Ext.form.HtmlEditor.superclass.onResize.apply(this,arguments);if(this.el&&this.iframe){if(typeof B=="number"){var D=B-this.wrap.getFrameWidth("lr");this.el.setWidth(this.adjustWidth("textarea",D));this.iframe.style.width=D+"px"}if(typeof C=="number"){var A=C-this.wrap.getFrameWidth("tb")-this.tb.el.getHeight();this.el.setHeight(this.adjustWidth("textarea",A));this.iframe.style.height=A+"px";if(this.doc){(this.doc.body||this.doc.documentElement).style.height=(A-(this.iframePad*2))+"px"}}}},toggleSourceEdit:function(A){if(A===undefined){A=!this.sourceEditMode}this.sourceEditMode=A===true;var B=this.tb.items.get("sourceedit");if(B.pressed!==this.sourceEditMode){B.toggle(this.sourceEditMode);return }if(this.sourceEditMode){this.tb.items.each(function(C){if(C.id!="sourceedit"){C.disable()}});this.syncValue();this.iframe.className="x-hidden";this.el.removeClass("x-hidden");this.el.dom.removeAttribute("tabIndex");this.el.focus()}else{if(this.initialized){this.tb.items.each(function(C){C.enable()})}this.pushValue();this.iframe.className="";this.el.addClass("x-hidden");this.el.dom.setAttribute("tabIndex",-1);this.deferFocus()}this.setSize(this.wrap.getSize());this.fireEvent("editmodechange",this,this.sourceEditMode)},createLink:function(){var A=prompt(this.createLinkText,this.defaultLinkValue);if(A&&A!="http:/"+"/"){this.relayCmd("createlink",A)}},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap},getPositionEl:function(){return this.wrap},initEvents:function(){this.originalValue=this.getValue()},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,setValue:function(A){Ext.form.HtmlEditor.superclass.setValue.call(this,A);this.pushValue()},cleanHtml:function(A){A=String(A);if(A.length>5){if(Ext.isSafari){A=A.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,"")}}if(A==" "){A=""}return A},syncValue:function(){if(this.initialized){var D=(this.doc.body||this.doc.documentElement);var C=D.innerHTML;if(Ext.isSafari){var B=D.getAttribute("style");var A=B.match(/text-align:(.*?);/i);if(A&&A[1]){C="
      "+C+"
      "}}C=this.cleanHtml(C);if(this.fireEvent("beforesync",this,C)!==false){this.el.dom.value=C;this.fireEvent("sync",this,C)}}},pushValue:function(){if(this.initialized){var A=this.el.dom.value;if(A.length<1){A=" "}if(this.fireEvent("beforepush",this,A)!==false){(this.doc.body||this.doc.documentElement).innerHTML=A;this.fireEvent("push",this,A)}}},deferFocus:function(){this.focus.defer(10,this)},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus()}else{this.el.focus()}},initEditor:function(){var B=(this.doc.body||this.doc.documentElement);var A=this.el.getStyles("font-size","font-family","background-image","background-repeat");A["background-attachment"]="fixed";B.bgProperties="fixed";Ext.DomHelper.applyStyles(B,A);Ext.EventManager.on(this.doc,{"mousedown":this.onEditorEvent,"dblclick":this.onEditorEvent,"click":this.onEditorEvent,"keyup":this.onEditorEvent,buffer:100,scope:this});if(Ext.isGecko){Ext.EventManager.on(this.doc,"keypress",this.applyCommand,this)}if(Ext.isIE||Ext.isSafari||Ext.isOpera){Ext.EventManager.on(this.doc,"keydown",this.fixKeys,this)}this.initialized=true;this.fireEvent("initialize",this);this.pushValue()},onDestroy:function(){if(this.rendered){this.tb.items.each(function(A){if(A.menu){A.menu.removeAll();if(A.menu.el){A.menu.el.destroy()}}A.destroy()});this.wrap.dom.innerHTML="";this.wrap.remove()}},onFirstFocus:function(){this.activated=true;this.tb.items.each(function(D){D.enable()});if(Ext.isGecko){this.win.focus();var A=this.win.getSelection();if(!A.focusNode||A.focusNode.nodeType!=3){var B=A.getRangeAt(0);B.selectNodeContents((this.doc.body||this.doc.documentElement));B.collapse(true);this.deferFocus()}try{this.execCmd("useCSS",true);this.execCmd("styleWithCSS",false)}catch(C){}}this.fireEvent("activate",this)},adjustFont:function(B){var C=B.id=="increasefontsize"?1:-1;if(Ext.isSafari){C*=2}var A=parseInt(this.doc.queryCommandValue("FontSize")||3,10);A=Math.max(1,A+C);this.execCmd("FontSize",A+(Ext.isSafari?"px":0))},onEditorEvent:function(A){this.updateToolbar()},updateToolbar:function(){if(!this.activated){this.onFirstFocus();return }var B=this.tb.items.map,C=this.doc;if(this.enableFont&&!Ext.isSafari){var A=(this.doc.queryCommandValue("FontName")||this.defaultFont).toLowerCase();if(A!=this.fontSelect.dom.value){this.fontSelect.dom.value=A}}if(this.enableFormat){B.bold.toggle(C.queryCommandState("bold"));B.italic.toggle(C.queryCommandState("italic"));B.underline.toggle(C.queryCommandState("underline"))}if(this.enableAlignments){B.justifyleft.toggle(C.queryCommandState("justifyleft"));B.justifycenter.toggle(C.queryCommandState("justifycenter"));B.justifyright.toggle(C.queryCommandState("justifyright"))}if(!Ext.isSafari&&this.enableLists){B.insertorderedlist.toggle(C.queryCommandState("insertorderedlist"));B.insertunorderedlist.toggle(C.queryCommandState("insertunorderedlist"))}Ext.menu.MenuMgr.hideAll();this.syncValue()},relayBtnCmd:function(A){this.relayCmd(A.id)},relayCmd:function(B,A){this.win.focus();this.execCmd(B,A);this.updateToolbar();this.deferFocus()},execCmd:function(B,A){this.doc.execCommand(B,false,A===undefined?null:A);this.syncValue()},applyCommand:function(B){if(B.ctrlKey){var C=B.getCharCode(),A;if(C>0){C=String.fromCharCode(C);switch(C){case"b":A="bold";break;case"i":A="italic";break;case"u":A="underline";break}if(A){this.win.focus();this.execCmd(A);this.deferFocus();B.preventDefault()}}}},insertAtCursor:function(B){if(!this.activated){return }if(Ext.isIE){this.win.focus();var A=this.doc.selection.createRange();if(A){A.collapse(true);A.pasteHTML(B);this.syncValue();this.deferFocus()}}else{if(Ext.isGecko||Ext.isOpera){this.win.focus();this.execCmd("InsertHTML",B);this.deferFocus()}else{if(Ext.isSafari){this.execCmd("InsertText",B);this.deferFocus()}}}},fixKeys:function(){if(Ext.isIE){return function(D){var A=D.getKey(),B;if(A==D.TAB){D.stopEvent();B=this.doc.selection.createRange();if(B){B.collapse(true);B.pasteHTML("    ");this.deferFocus()}}else{if(A==D.ENTER){B=this.doc.selection.createRange();if(B){var C=B.parentElement();if(!C||C.tagName.toLowerCase()!="li"){D.stopEvent();B.pasteHTML("
      ");B.collapse(false);B.select()}}}}}}else{if(Ext.isOpera){return function(B){var A=B.getKey();if(A==B.TAB){B.stopEvent();this.win.focus();this.execCmd("InsertHTML","    ");this.deferFocus()}}}else{if(Ext.isSafari){return function(B){var A=B.getKey();if(A==B.TAB){B.stopEvent();this.execCmd("InsertText","\t");this.deferFocus()}}}}}}(),getToolbar:function(){return this.tb},buttonTips:{bold:{title:"Bold (Ctrl+B)",text:"Make the selected text bold.",cls:"x-html-editor-tip"},italic:{title:"Italic (Ctrl+I)",text:"Make the selected text italic.",cls:"x-html-editor-tip"},underline:{title:"Underline (Ctrl+U)",text:"Underline the selected text.",cls:"x-html-editor-tip"},increasefontsize:{title:"Grow Text",text:"Increase the font size.",cls:"x-html-editor-tip"},decreasefontsize:{title:"Shrink Text",text:"Decrease the font size.",cls:"x-html-editor-tip"},backcolor:{title:"Text Highlight Color",text:"Change the background color of the selected text.",cls:"x-html-editor-tip"},forecolor:{title:"Font Color",text:"Change the color of the selected text.",cls:"x-html-editor-tip"},justifyleft:{title:"Align Text Left",text:"Align text to the left.",cls:"x-html-editor-tip"},justifycenter:{title:"Center Text",text:"Center text in the editor.",cls:"x-html-editor-tip"},justifyright:{title:"Align Text Right",text:"Align text to the right.",cls:"x-html-editor-tip"},insertunorderedlist:{title:"Bullet List",text:"Start a bulleted list.",cls:"x-html-editor-tip"},insertorderedlist:{title:"Numbered List",text:"Start a numbered list.",cls:"x-html-editor-tip"},createlink:{title:"Hyperlink",text:"Make the selected text a hyperlink.",cls:"x-html-editor-tip"},sourceedit:{title:"Source Edit",text:"Switch to source editing mode.",cls:"x-html-editor-tip"}}}); +Ext.form.BasicForm=function(B,A){Ext.apply(this,A);this.items=new Ext.util.MixedCollection(false,function(C){return C.id||(C.id=Ext.id())});this.addEvents({beforeaction:true,actionfailed:true,actioncomplete:true});if(B){this.initEl(B)}Ext.form.BasicForm.superclass.constructor.call(this)};Ext.extend(Ext.form.BasicForm,Ext.util.Observable,{timeout:30,activeAction:null,trackResetOnLoad:false,waitMsgTarget:undefined,initEl:function(A){this.el=Ext.get(A);this.id=this.el.id||Ext.id();this.el.on("submit",this.onSubmit,this);this.el.addClass("x-form")},onSubmit:function(A){A.stopEvent()},isValid:function(){var A=true;this.items.each(function(B){if(!B.validate()){A=false}});return A},isDirty:function(){var A=false;this.items.each(function(B){if(B.isDirty()){A=true;return false}});return A},doAction:function(B,A){if(typeof B=="string"){B=new Ext.form.Action.ACTION_TYPES[B](this,A)}if(this.fireEvent("beforeaction",this,B)!==false){this.beforeAction(B);B.run.defer(100,B)}return this},submit:function(A){this.doAction("submit",A);return this},load:function(A){this.doAction("load",A);return this},updateRecord:function(B){B.beginEdit();var A=B.fields;A.each(function(C){var D=this.findField(C.name);if(D){B.set(C.name,D.getValue())}},this);B.endEdit();return this},loadRecord:function(A){this.setValues(A.data);return this},beforeAction:function(A){var B=A.options;if(B.waitMsg){if(this.waitMsgTarget===true){this.el.mask(B.waitMsg,"x-mask-loading")}else{if(this.waitMsgTarget){this.waitMsgTarget=Ext.get(this.waitMsgTarget);this.waitMsgTarget.mask(B.waitMsg,"x-mask-loading")}else{Ext.MessageBox.wait(B.waitMsg,B.waitTitle||this.waitTitle||"Please Wait...")}}}},afterAction:function(A,C){this.activeAction=null;var B=A.options;if(B.waitMsg){if(this.waitMsgTarget===true){this.el.unmask()}else{if(this.waitMsgTarget){this.waitMsgTarget.unmask()}else{Ext.MessageBox.updateProgress(1);Ext.MessageBox.hide()}}}if(C){if(B.reset){this.reset()}Ext.callback(B.success,B.scope,[this,A]);this.fireEvent("actioncomplete",this,A)}else{Ext.callback(B.failure,B.scope,[this,A]);this.fireEvent("actionfailed",this,A)}},findField:function(B){var A=this.items.get(B);if(!A){this.items.each(function(C){if(C.isFormField&&(C.dataIndex==B||C.id==B||C.getName()==B)){A=C;return false}})}return A||null},markInvalid:function(G){if(G instanceof Array){for(var C=0,A=G.length;C1){this.add.apply(this,Array.prototype.slice.call(arguments,1));this.end()}return A},fieldset:function(B){var A=new Ext.form.FieldSet(B);this.start(A);if(arguments.length>1){this.add.apply(this,Array.prototype.slice.call(arguments,1));this.end()}return A},container:function(B){var A=new Ext.form.Layout(B);this.start(A);if(arguments.length>1){this.add.apply(this,Array.prototype.slice.call(arguments,1));this.end()}return A},start:function(A){Ext.applyIf(A,{"labelAlign":this.active.labelAlign,"labelWidth":this.active.labelWidth,"itemCls":this.active.itemCls});this.active.stack.push(A);A.ownerCt=this.active;this.active=A;return this},end:function(){if(this.active==this.root){return this}this.active=this.active.ownerCt;return this},add:function(){this.active.stack.push.apply(this.active.stack,arguments);var D=[];for(var C=0,B=arguments,A=B.length;C0){Ext.form.Form.superclass.add.apply(this,D)}return this},render:function(E){E=Ext.get(E);var G=this.autoCreate||{tag:"form",method:this.method||"POST",id:this.id||Ext.id()};this.initEl(E.createChild(G));this.root.render(this.el);this.items.each(function(I){I.render("x-form-el-"+I.id)});if(this.buttons.length>0){var C=this.el.createChild({cls:"x-form-btns-ct",cn:{cls:"x-form-btns x-form-btns-"+this.buttonAlign,html:"
      "}},null,true);var F=C.getElementsByTagName("tr")[0];for(var D=0,B=this.buttons.length;D0){if(!this.fieldTpl){var E=new Ext.Template("
      ","","
      ","
      ","
      ");E.disableFormats=true;E.compile();Ext.form.Layout.prototype.fieldTpl=E}for(var D=0;D1){for(var C=0,A=arguments.length;C0?A:" ")}},setActivePanel:function(A){A=this.getPanel(A);if(this.activePanel&&this.activePanel!=A){this.activePanel.setActiveState(false)}this.activePanel=A;A.setActiveState(true);if(this.panelSize){A.setSize(this.panelSize.width,this.panelSize.height)}if(this.closeBtn){this.closeBtn.setVisible(!this.config.closeOnTab&&!this.isSlid&&A.isClosable())}this.updateTitle(A.getTitle());if(this.tabs){this.fireEvent("invalidated",this)}this.fireEvent("panelactivated",this,A)},showPanel:function(A){if(A=this.getPanel(A)){if(this.tabs){var B=this.tabs.getTab(A.getEl().id);if(B.isHidden()){this.tabs.unhideTab(B.id)}B.activate()}else{this.setActivePanel(A)}}return A},getActivePanel:function(){return this.activePanel},validateVisibility:function(){if(this.panels.getCount()<1){this.updateTitle(" ");this.closeBtn.hide();this.hide()}else{if(!this.isVisible()){this.show()}}},add:function(B){if(arguments.length>1){for(var C=0,A=arguments.length;C0){this.remove(this.panels.first())}},remove:function(B,A){B=this.getPanel(B);if(!B){return null}var E={};this.fireEvent("beforeremove",this,B,E);if(E.cancel===true){return null}A=(typeof A!="undefined"?A:(this.config.preservePanels===true||B.preserve===true));var C=B.getId();this.panels.removeKey(C);if(A){document.body.appendChild(B.getEl().dom)}if(this.tabs){this.tabs.removeTab(B.getEl().id)}else{if(!A){this.bodyEl.dom.removeChild(B.getEl().dom)}}if(this.panels.getCount()==1&&this.tabs&&!this.config.alwaysShowTabs){var D=this.panels.first();var F=document.createElement("div");F.appendChild(D.getEl().dom);this.bodyEl.update("");this.bodyEl.dom.appendChild(D.getEl().dom);F=null;this.updateTitle(D.getTitle());this.tabs=null;this.bodyEl.setStyle("overflow",this.config.autoScroll?"auto":"hidden");this.setActivePanel(D)}B.setRegion(null);if(this.activePanel==B){this.activePanel=null}if(this.config.autoDestroy!==false&&A!==true){try{B.destroy()}catch(E){}}this.fireEvent("panelremoved",this,B);return B},getTabs:function(){return this.tabs},createTool:function(C,B){var A=Ext.DomHelper.append(C,{tag:"div",cls:"x-layout-tools-button",children:[{tag:"div",cls:"x-layout-tools-button-inner "+B,html:" "}]},true);A.addClassOnOver("x-layout-tools-button-over");return A}}); +Ext.SplitLayoutRegion=function(B,A,D,C){this.cursor=C;Ext.SplitLayoutRegion.superclass.constructor.call(this,B,A,D)};Ext.extend(Ext.SplitLayoutRegion,Ext.LayoutRegion,{splitTip:"Drag to resize.",collapsibleSplitTip:"Drag to resize. Double click to hide.",useSplitTips:false,applyConfig:function(A){Ext.SplitLayoutRegion.superclass.applyConfig.call(this,A);if(A.split){if(!this.split){var B=Ext.DomHelper.append(this.mgr.el.dom,{tag:"div",id:this.el.id+"-split",cls:"x-layout-split x-layout-split-"+this.position,html:" "});this.split=new Ext.SplitBar(B,this.el,this.orientation);this.split.on("moved",this.onSplitMove,this);this.split.useShim=A.useShim===true;this.split.getMaximumSize=this[this.position=="north"||this.position=="south"?"getVMaxSize":"getHMaxSize"].createDelegate(this);if(this.useSplitTips){this.split.el.dom.title=A.collapsible?this.collapsibleSplitTip:this.splitTip}if(A.collapsible){this.split.el.on("dblclick",this.collapse,this)}}if(typeof A.minSize!="undefined"){this.split.minSize=A.minSize}if(typeof A.maxSize!="undefined"){this.split.maxSize=A.maxSize}if(A.hideWhenEmpty||A.hidden||A.collapsed){this.hideSplitter()}}},getHMaxSize:function(){var B=this.config.maxSize||10000;var A=this.mgr.getRegion("center");return Math.min(B,(this.el.getWidth()+A.getEl().getWidth())-A.getMinWidth())},getVMaxSize:function(){var B=this.config.maxSize||10000;var A=this.mgr.getRegion("center");return Math.min(B,(this.el.getHeight()+A.getEl().getHeight())-A.getMinHeight())},onSplitMove:function(B,A){this.fireEvent("resized",this,A)},getSplitBar:function(){return this.split},hide:function(){this.hideSplitter();Ext.SplitLayoutRegion.superclass.hide.call(this)},hideSplitter:function(){if(this.split){this.split.el.setLocation(-2000,-2000);this.split.el.hide()}},show:function(){if(this.split){this.split.el.show()}Ext.SplitLayoutRegion.superclass.show.call(this)},beforeSlide:function(){if(Ext.isGecko){this.bodyEl.clip();if(this.tabs){this.tabs.bodyEl.clip()}if(this.activePanel){this.activePanel.getEl().clip();if(this.activePanel.beforeSlide){this.activePanel.beforeSlide()}}}},afterSlide:function(){if(Ext.isGecko){this.bodyEl.unclip();if(this.tabs){this.tabs.bodyEl.unclip()}if(this.activePanel){this.activePanel.getEl().unclip();if(this.activePanel.afterSlide){this.activePanel.afterSlide()}}}},initAutoHide:function(){if(this.autoHide!==false){if(!this.autoHideHd){var A=new Ext.util.DelayedTask(this.slideIn,this);this.autoHideHd={"mouseout":function(B){if(!B.within(this.el,true)){A.delay(500)}},"mouseover":function(B){A.cancel()},scope:this}}this.el.on(this.autoHideHd)}},clearAutoHide:function(){if(this.autoHide!==false){this.el.un("mouseout",this.autoHideHd.mouseout);this.el.un("mouseover",this.autoHideHd.mouseover)}},clearMonitor:function(){Ext.get(document).un("click",this.slideInIf,this)},slideOut:function(){if(this.isSlid||this.el.hasActiveFx()){return }this.isSlid=true;if(this.collapseBtn){this.collapseBtn.hide()}this.closeBtnState=this.closeBtn.getStyle("display");this.closeBtn.hide();if(this.stickBtn){this.stickBtn.show()}this.el.show();this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.beforeSlide();this.el.setStyle("z-index",10001);this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.get(document).on("click",this.slideInIf,this);this.fireEvent("slideshow",this)},scope:this,block:true})},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");if(this.collapseBtn){this.collapseBtn.show()}this.closeBtn.setStyle("display",this.closeBtnState);if(this.stickBtn){this.stickBtn.hide()}this.fireEvent("slidehide",this)},slideIn:function(A){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(A);return }this.isSlid=false;this.beforeSlide();this.el.slideOut(this.getSlideAnchor(),{callback:function(){this.el.setLeftTop(-10000,-10000);this.afterSlide();this.afterSlideIn();Ext.callback(A)},scope:this,block:true})},slideInIf:function(A){if(!A.within(this.el)){this.slideIn()}},animateCollapse:function(){this.beforeSlide();this.el.setStyle("z-index",20000);var A=this.getSlideAnchor();this.el.slideOut(A,{callback:function(){this.el.setStyle("z-index","");this.collapsedEl.slideIn(A,{duration:0.3});this.afterSlide();this.el.setLocation(-10000,-10000);this.el.hide();this.fireEvent("collapsed",this)},scope:this,block:true})},animateExpand:function(){this.beforeSlide();this.el.alignTo(this.collapsedEl,this.getCollapseAnchor(),this.getExpandAdj());this.el.setStyle("z-index",20000);this.collapsedEl.hide({duration:0.1});this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.el.setStyle("z-index","");this.afterSlide();if(this.split){this.split.el.show()}this.fireEvent("invalidated",this);this.fireEvent("expanded",this)},scope:this,block:true})},anchors:{"west":"left","east":"right","north":"top","south":"bottom"},sanchors:{"west":"l","east":"r","north":"t","south":"b"},canchors:{"west":"tl-tr","east":"tr-tl","north":"tl-bl","south":"bl-tl"},getAnchor:function(){return this.anchors[this.position]},getCollapseAnchor:function(){return this.canchors[this.position]},getSlideAnchor:function(){return this.sanchors[this.position]},getAlignAdj:function(){var A=this.cmargins;switch(this.position){case"west":return[0,0];break;case"east":return[0,0];break;case"north":return[0,0];break;case"south":return[0,0];break}},getExpandAdj:function(){var B=this.collapsedEl,A=this.cmargins;switch(this.position){case"west":return[-(A.right+B.getWidth()+A.left),0];break;case"east":return[A.right+B.getWidth()+A.left,0];break;case"north":return[0,-(A.top+A.bottom+B.getHeight())];break;case"south":return[0,A.top+A.bottom+B.getHeight()];break}}}); +Ext.CenterLayoutRegion=function(B,A){Ext.CenterLayoutRegion.superclass.constructor.call(this,B,A,"center");this.visible=true;this.minWidth=A.minWidth||20;this.minHeight=A.minHeight||20};Ext.extend(Ext.CenterLayoutRegion,Ext.LayoutRegion,{hide:function(){},show:function(){},getMinWidth:function(){return this.minWidth},getMinHeight:function(){return this.minHeight}});Ext.NorthLayoutRegion=function(C,A){Ext.NorthLayoutRegion.superclass.constructor.call(this,C,A,"north","n-resize");if(this.split){this.split.placement=Ext.SplitBar.TOP;this.split.orientation=Ext.SplitBar.VERTICAL;this.split.el.addClass("x-layout-split-v")}var B=A.initialSize||A.height;if(typeof B!="undefined"){this.el.setHeight(B)}};Ext.extend(Ext.NorthLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.VERTICAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox()}var A=this.el.getBox();if(this.split){A.height+=this.split.el.getHeight()}return A},updateBox:function(A){if(this.split&&!this.collapsed){A.height-=this.split.el.getHeight();this.split.el.setLeft(A.x);this.split.el.setTop(A.y+A.height);this.split.el.setWidth(A.width)}if(this.collapsed){this.updateBody(A.width,null)}Ext.NorthLayoutRegion.superclass.updateBox.call(this,A)}});Ext.SouthLayoutRegion=function(C,A){Ext.SouthLayoutRegion.superclass.constructor.call(this,C,A,"south","s-resize");if(this.split){this.split.placement=Ext.SplitBar.BOTTOM;this.split.orientation=Ext.SplitBar.VERTICAL;this.split.el.addClass("x-layout-split-v")}var B=A.initialSize||A.height;if(typeof B!="undefined"){this.el.setHeight(B)}};Ext.extend(Ext.SouthLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.VERTICAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox()}var B=this.el.getBox();if(this.split){var A=this.split.el.getHeight();B.height+=A;B.y-=A}return B},updateBox:function(B){if(this.split&&!this.collapsed){var A=this.split.el.getHeight();B.height-=A;B.y+=A;this.split.el.setLeft(B.x);this.split.el.setTop(B.y-A);this.split.el.setWidth(B.width)}if(this.collapsed){this.updateBody(B.width,null)}Ext.SouthLayoutRegion.superclass.updateBox.call(this,B)}});Ext.EastLayoutRegion=function(C,A){Ext.EastLayoutRegion.superclass.constructor.call(this,C,A,"east","e-resize");if(this.split){this.split.placement=Ext.SplitBar.RIGHT;this.split.orientation=Ext.SplitBar.HORIZONTAL;this.split.el.addClass("x-layout-split-h")}var B=A.initialSize||A.width;if(typeof B!="undefined"){this.el.setWidth(B)}};Ext.extend(Ext.EastLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.HORIZONTAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox()}var B=this.el.getBox();if(this.split){var A=this.split.el.getWidth();B.width+=A;B.x-=A}return B},updateBox:function(B){if(this.split&&!this.collapsed){var A=this.split.el.getWidth();B.width-=A;this.split.el.setLeft(B.x);this.split.el.setTop(B.y);this.split.el.setHeight(B.height);B.x+=A}if(this.collapsed){this.updateBody(null,B.height)}Ext.EastLayoutRegion.superclass.updateBox.call(this,B)}});Ext.WestLayoutRegion=function(C,A){Ext.WestLayoutRegion.superclass.constructor.call(this,C,A,"west","w-resize");if(this.split){this.split.placement=Ext.SplitBar.LEFT;this.split.orientation=Ext.SplitBar.HORIZONTAL;this.split.el.addClass("x-layout-split-h")}var B=A.initialSize||A.width;if(typeof B!="undefined"){this.el.setWidth(B)}};Ext.extend(Ext.WestLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.HORIZONTAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox()}var A=this.el.getBox();if(this.split){A.width+=this.split.el.getWidth()}return A},updateBox:function(B){if(this.split&&!this.collapsed){var A=this.split.el.getWidth();B.width-=A;this.split.el.setLeft(B.x+B.width);this.split.el.setTop(B.y);this.split.el.setHeight(B.height)}if(this.collapsed){this.updateBody(null,B.height)}Ext.WestLayoutRegion.superclass.updateBox.call(this,B)}}); +Ext.LayoutStateManager=function(A){this.state={north:{},south:{},east:{},west:{}}};Ext.LayoutStateManager.prototype={init:function(D,G){this.provider=G;var F=G.get(D.id+"-layout-state");if(F){var E=D.isUpdating();if(!E){D.beginUpdate()}for(var A in F){if(typeof F[A]!="function"){var B=F[A];var C=D.getRegion(A);if(C&&B){if(B.size){C.resizeTo(B.size)}if(B.collapsed==true){C.collapse(true)}else{C.expand(null,true)}}}}if(!E){D.endUpdate()}this.state=F}this.layout=D;D.on("regionresized",this.onRegionResized,this);D.on("regioncollapsed",this.onRegionCollapsed,this);D.on("regionexpanded",this.onRegionExpanded,this)},storeState:function(){this.provider.set(this.layout.id+"-layout-state",this.state)},onRegionResized:function(B,A){this.state[B.getPosition()].size=A;this.storeState()},onRegionCollapsed:function(A){this.state[A.getPosition()].collapsed=true;this.storeState()},onRegionExpanded:function(A){this.state[A.getPosition()].collapsed=false;this.storeState()}}; +Ext.ContentPanel=function(B,A,C){if(B.autoCreate){A=B;B=Ext.id()}this.el=Ext.get(B);if(!this.el&&A&&A.autoCreate){if(typeof A.autoCreate=="object"){if(!A.autoCreate.id){A.autoCreate.id=A.id||B}this.el=Ext.DomHelper.append(document.body,A.autoCreate,true)}else{this.el=Ext.DomHelper.append(document.body,{tag:"div",cls:"x-layout-inactive-content",id:A.id||B},true)}}this.closable=false;this.loaded=false;this.active=false;if(typeof A=="string"){this.title=A}else{Ext.apply(this,A)}if(this.resizeEl){this.resizeEl=Ext.get(this.resizeEl,true)}else{this.resizeEl=this.el}this.addEvents({"activate":true,"deactivate":true,"resize":true});if(this.autoScroll){this.resizeEl.setStyle("overflow","auto")}C=C||this.content;if(C){this.setContent(C)}if(A&&A.url){this.setUrl(this.url,this.params,this.loadOnce)}Ext.ContentPanel.superclass.constructor.call(this)};Ext.extend(Ext.ContentPanel,Ext.util.Observable,{tabTip:"",setRegion:function(A){this.region=A;if(A){this.el.replaceClass("x-layout-inactive-content","x-layout-active-content")}else{this.el.replaceClass("x-layout-active-content","x-layout-inactive-content")}},getToolbar:function(){return this.toolbar},setActiveState:function(A){this.active=A;if(!A){this.fireEvent("deactivate",this)}else{this.fireEvent("activate",this)}},setContent:function(B,A){this.el.update(B,A)},ignoreResize:function(A,B){if(this.lastSize&&this.lastSize.width==A&&this.lastSize.height==B){return true}else{this.lastSize={width:A,height:B};return false}},getUpdateManager:function(){return this.el.getUpdateManager()},load:function(){var A=this.el.getUpdateManager();A.update.apply(A,arguments);return this},setUrl:function(A,C,B){if(this.refreshDelegate){this.removeListener("activate",this.refreshDelegate)}this.refreshDelegate=this._handleRefresh.createDelegate(this,[A,C,B]);this.on("activate",this.refreshDelegate);return this.el.getUpdateManager()},_handleRefresh:function(A,D,C){if(!C||!this.loaded){var B=this.el.getUpdateManager();B.update(A,D,this._setLoaded.createDelegate(this))}},_setLoaded:function(){this.loaded=true},getId:function(){return this.el.id},getEl:function(){return this.el},adjustForComponents:function(B,A){if(this.resizeEl!=this.el){B-=this.el.getFrameWidth("lr");A-=this.el.getFrameWidth("tb")}if(this.toolbar){var C=this.toolbar.getEl();A-=C.getHeight();C.setWidth(B)}if(this.adjustments){B+=this.adjustments[0];A+=this.adjustments[1]}return{"width":B,"height":A}},setSize:function(C,A){if(this.fitToFrame&&!this.ignoreResize(C,A)){if(this.fitContainer&&this.resizeEl!=this.el){this.el.setSize(C,A)}var B=this.adjustForComponents(C,A);this.resizeEl.setSize(this.autoWidth?"auto":B.width,this.autoHeight?"auto":B.height);this.fireEvent("resize",this,B.width,B.height)}},getTitle:function(){return this.title},setTitle:function(A){this.title=A;if(this.region){this.region.updatePanelTitle(this,A)}},isClosable:function(){return this.closable},beforeSlide:function(){this.el.clip();this.resizeEl.clip()},afterSlide:function(){this.el.unclip();this.resizeEl.unclip()},refresh:function(){if(this.refreshDelegate){this.loaded=false;this.refreshDelegate()}},destroy:function(){this.el.removeAllListeners();var A=document.createElement("span");A.appendChild(this.el.dom);A.innerHTML="";this.el.remove();this.el=null}});Ext.GridPanel=function(B,A){this.wrapper=Ext.DomHelper.append(document.body,{tag:"div",cls:"x-layout-grid-wrapper x-layout-inactive-content"},true);this.wrapper.dom.appendChild(B.getGridEl().dom);Ext.GridPanel.superclass.constructor.call(this,this.wrapper,A);if(this.toolbar){this.toolbar.el.insertBefore(this.wrapper.dom.firstChild)}B.monitorWindowResize=false;B.autoHeight=false;B.autoWidth=false;this.grid=B;this.grid.getGridEl().replaceClass("x-layout-inactive-content","x-layout-component-panel")};Ext.extend(Ext.GridPanel,Ext.ContentPanel,{getId:function(){return this.grid.id},getGrid:function(){return this.grid},setSize:function(D,A){if(!this.ignoreResize(D,A)){var C=this.grid;var B=this.adjustForComponents(D,A);C.getGridEl().setSize(B.width,B.height);C.autoSize()}},beforeSlide:function(){this.grid.getView().scroller.clip()},afterSlide:function(){this.grid.getView().scroller.unclip()},destroy:function(){this.grid.destroy();delete this.grid;Ext.GridPanel.superclass.destroy.call(this)}});Ext.NestedLayoutPanel=function(B,A){Ext.NestedLayoutPanel.superclass.constructor.call(this,B.getEl(),A);B.monitorWindowResize=false;this.layout=B;this.layout.getEl().addClass("x-layout-nested-layout")};Ext.extend(Ext.NestedLayoutPanel,Ext.ContentPanel,{setSize:function(D,A){if(!this.ignoreResize(D,A)){var B=this.adjustForComponents(D,A);var C=this.layout.getEl();C.setSize(B.width,B.height);var E=C.dom.offsetWidth;this.layout.layout();if(Ext.isIE&&!this.initialized){this.initialized=true;this.layout.layout()}}},getLayout:function(){return this.layout}});Ext.ScrollPanel=function(D,B,E){B=B||{};B.fitToFrame=true;Ext.ScrollPanel.superclass.constructor.call(this,D,B,E);this.el.dom.style.overflow="hidden";var C=this.el.wrap({cls:"x-scroller x-layout-inactive-content"});this.el.removeClass("x-layout-inactive-content");this.el.on("mousewheel",this.onWheel,this);var A=C.createChild({cls:"x-scroller-up",html:" "},this.el.dom);var F=C.createChild({cls:"x-scroller-down",html:" "});A.unselectable();F.unselectable();A.on("click",this.scrollUp,this);F.on("click",this.scrollDown,this);A.addClassOnOver("x-scroller-btn-over");F.addClassOnOver("x-scroller-btn-over");A.addClassOnClick("x-scroller-btn-click");F.addClassOnClick("x-scroller-btn-click");this.adjustments=[0,-(A.getHeight()+F.getHeight())];this.resizeEl=this.el;this.el=C;this.up=A;this.down=F};Ext.extend(Ext.ScrollPanel,Ext.ContentPanel,{increment:100,wheelIncrement:5,scrollUp:function(){this.resizeEl.scroll("up",this.increment,{callback:this.afterScroll,scope:this})},scrollDown:function(){this.resizeEl.scroll("down",this.increment,{callback:this.afterScroll,scope:this})},afterScroll:function(){var D=this.resizeEl;var A=D.dom.scrollTop,C=D.dom.scrollHeight,B=D.dom.clientHeight;this.up[A==0?"addClass":"removeClass"]("x-scroller-btn-disabled");this.down[C-A<=B?"addClass":"removeClass"]("x-scroller-btn-disabled")},setSize:function(){Ext.ScrollPanel.superclass.setSize.apply(this,arguments);this.afterScroll()},onWheel:function(A){var B=A.getWheelDelta();this.resizeEl.dom.scrollTop-=(B*this.wheelIncrement);this.afterScroll();A.stopEvent()},setContent:function(B,A){this.resizeEl.update(B,A)}}); +Ext.ReaderLayout=function(B,C){var D=B||{size:{}};Ext.ReaderLayout.superclass.constructor.call(this,C||document.body,{north:D.north!==false?Ext.apply({split:false,initialSize:32,titlebar:false},D.north):false,west:D.west!==false?Ext.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:5,right:0,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}},D.west):false,east:D.east!==false?Ext.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:0,right:5,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}},D.east):false,center:Ext.apply({tabPosition:"top",autoScroll:false,closeOnTab:true,titlebar:false,margins:{left:D.west!==false?0:5,right:D.east!==false?0:5,bottom:5,top:2}},D.center)});this.el.addClass("x-reader");this.beginUpdate();var A=new Ext.BorderLayout(Ext.get(document.body).createChild(),{south:D.preview!==false?Ext.apply({split:true,initialSize:200,minSize:100,autoScroll:true,collapsible:true,titlebar:true,cmargins:{top:5,left:0,right:0,bottom:0}},D.preview):false,center:Ext.apply({autoScroll:false,titlebar:false,minHeight:200},D.listView)});this.add("center",new Ext.NestedLayoutPanel(A,Ext.apply({title:D.mainTitle||"",tabTip:""},D.innerPanelCfg)));this.endUpdate();this.regions.preview=A.getRegion("south");this.regions.listView=A.getRegion("center")};Ext.extend(Ext.ReaderLayout,Ext.BorderLayout); +Ext.grid.Grid=function(A,B){this.container=Ext.get(A);this.container.update("");this.container.setStyle("overflow","hidden");this.container.addClass("x-grid-container");this.id=this.container.id;Ext.apply(this,B);if(this.ds){this.dataSource=this.ds;delete this.ds}if(this.cm){this.colModel=this.cm;delete this.cm}if(this.sm){this.selModel=this.sm;delete this.sm}if(this.width){this.container.setWidth(this.width)}if(this.height){this.container.setHeight(this.height)}this.addEvents({"click":true,"dblclick":true,"contextmenu":true,"mousedown":true,"mouseup":true,"mouseover":true,"mouseout":true,"keypress":true,"keydown":true,"cellclick":true,"celldblclick":true,"rowclick":true,"rowdblclick":true,"headerclick":true,"headerdblclick":true,"rowcontextmenu":true,"cellcontextmenu":true,"headercontextmenu":true,"bodyscroll":true,"columnresize":true,"columnmove":true,"startdrag":true,"enddrag":true,"dragdrop":true,"dragover":true,"dragenter":true,"dragout":true,render:true});Ext.grid.Grid.superclass.constructor.call(this)};Ext.extend(Ext.grid.Grid,Ext.util.Observable,{minColumnWidth:25,autoSizeColumns:false,autoSizeHeaders:true,monitorWindowResize:true,maxRowsToMeasure:0,trackMouseOver:true,enableDragDrop:false,enableColumnMove:true,enableColumnHide:true,enableRowHeightSync:false,stripeRows:true,autoHeight:false,autoExpandColumn:false,autoExpandMin:50,autoExpandMax:1000,view:null,loadMask:false,rendered:false,render:function(){var B=this.container;if((!B.dom.offsetHeight||B.dom.offsetHeight<20)||B.getStyle("height")=="auto"){this.autoHeight=true}var A=this.getView();A.init(this);B.on("click",this.onClick,this);B.on("dblclick",this.onDblClick,this);B.on("contextmenu",this.onContextMenu,this);B.on("keydown",this.onKeyDown,this);this.relayEvents(B,["mousedown","mouseup","mouseover","mouseout","keypress"]);this.getSelectionModel().init(this);A.render();if(this.loadMask){this.loadMask=new Ext.LoadMask(this.container,Ext.apply({store:this.dataSource},this.loadMask))}this.rendered=true;this.fireEvent("render",this);return this},reconfigure:function(B,A){if(this.loadMask){this.loadMask.destroy();this.loadMask=new Ext.LoadMask(this.container,Ext.apply({store:B},this.loadMask))}this.view.bind(B,A);this.dataSource=B;this.colModel=A;this.view.refresh(true)},onKeyDown:function(A){this.fireEvent("keydown",A)},destroy:function(A,B){if(this.loadMask){this.loadMask.destroy()}var C=this.container;C.removeAllListeners();this.view.destroy();this.colModel.purgeListeners();if(!B){this.purgeListeners()}C.update("");if(A===true){C.remove()}},processEvent:function(C,E){this.fireEvent(C,E);var D=E.getTarget();var B=this.view;var G=B.findHeaderIndex(D);if(G!==false){this.fireEvent("header"+C,this,G,E)}else{var F=B.findRowIndex(D);var A=B.findCellIndex(D);if(F!==false){this.fireEvent("row"+C,this,F,E);if(A!==false){this.fireEvent("cell"+C,this,F,A,E)}}}},onClick:function(A){this.processEvent("click",A)},onContextMenu:function(B,A){this.processEvent("contextmenu",B)},onDblClick:function(A){this.processEvent("dblclick",A)},walkCells:function(J,C,B,E,I){var H=this.colModel,F=H.getColumnCount();var A=this.dataSource,G=A.getCount(),D=true;if(B<0){if(C<0){J--;D=false}while(J>=0){if(!D){C=F-1}D=false;while(C>=0){if(E.call(I||this,J,C,H)===true){return[J,C]}C--}J--}}else{if(C>=F){J++;D=false}while(J","
      ","
      ","
      ","
      {lockedHeader}
      ","
      {lockedBody}
      ","
      ","
      ","
      {header}
      ","
      {body}
      ","
      ","
      ","","
       
      ","");B.master.disableformats=true}if(!B.header){B.header=new Ext.Template("","{cells}","
      {splits}");B.header.disableformats=true}B.header.compile();if(!B.hcell){B.hcell=new Ext.Template("
      ","
      {value}
      ","
      ");B.hcell.disableFormats=true}B.hcell.compile();if(!B.hsplit){B.hsplit=new Ext.Template("
       
      ");B.hsplit.disableFormats=true}B.hsplit.compile();if(!B.body){B.body=new Ext.Template("","{rows}","
      ");B.body.disableFormats=true}B.body.compile();if(!B.row){B.row=new Ext.Template("{cells}");B.row.disableFormats=true}B.row.compile();if(!B.cell){B.cell=new Ext.Template("","
      {value}
      ","");B.cell.disableFormats=true}B.cell.compile();this.templates=B},onColWidthChange:function(){this.updateColumns.apply(this,arguments)},onHeaderChange:function(){this.updateHeaders.apply(this,arguments)},onHiddenChange:function(){this.handleHiddenChange.apply(this,arguments)},onColumnMove:function(){this.handleColumnMove.apply(this,arguments)},onColumnLock:function(){this.handleLockChange.apply(this,arguments)},onDataChange:function(){this.refresh();this.updateHeaderSortState()},onClear:function(){this.refresh()},onUpdate:function(B,A){this.refreshRow(A)},refreshRow:function(A){var C=this.ds,B;if(typeof A=="number"){B=A;A=C.getAt(B)}else{B=C.indexOf(A)}this.insertRows(C,B,B,true);this.onRemove(C,A,B+1,true);this.syncRowHeights(B,B);this.layout();this.fireEvent("rowupdated",this,B,A)},onAdd:function(C,A,B){this.insertRows(C,B,B+(A.length-1))},onRemove:function(F,B,D,E){if(E!==true){this.fireEvent("beforerowremoved",this,D,B)}var C=this.getBodyTable(),A=this.getLockedTable();if(C.rows[D]){C.firstChild.removeChild(C.rows[D])}if(A.rows[D]){A.firstChild.removeChild(A.rows[D])}if(E!==true){this.stripeRows(D);this.syncRowHeights(D,D);this.layout();this.fireEvent("rowremoved",this,D,B)}},onLoad:function(){this.scrollToTop()},scrollToTop:function(){if(this.scroller){this.scroller.dom.scrollTop=0;this.syncScroll()}},getHeaderPanel:function(A){if(A){this.headerPanel.show()}return this.headerPanel},getFooterPanel:function(A){if(A){this.footerPanel.show()}return this.footerPanel},initElements:function(){var C=Ext.Element;var B=this.grid.getGridEl().dom.firstChild;var A=B.childNodes;this.el=new C(B);this.headerPanel=new C(B.firstChild);this.headerPanel.enableDisplayMode("block");this.scroller=new C(A[1]);this.scrollSizer=new C(this.scroller.dom.firstChild);this.lockedWrap=new C(A[2]);this.lockedHd=new C(this.lockedWrap.dom.firstChild);this.lockedBody=new C(this.lockedWrap.dom.childNodes[1]);this.mainWrap=new C(A[3]);this.mainHd=new C(this.mainWrap.dom.firstChild);this.mainBody=new C(this.mainWrap.dom.childNodes[1]);this.footerPanel=new C(A[4]);this.footerPanel.enableDisplayMode("block");this.focusEl=new C(A[5]);this.focusEl.swallowEvent("click",true);this.resizeProxy=new C(A[6]);this.headerSelector=String.format("#{0} td.x-grid-hd, #{1} td.x-grid-hd",this.lockedHd.id,this.mainHd.id);this.splitterSelector=String.format("#{0} div.x-grid-split, #{1} div.x-grid-split",this.lockedHd.id,this.mainHd.id)},getHeaderCell:function(A){return Ext.DomQuery.select(this.headerSelector)[A]},getHeaderCellMeasure:function(A){return this.getHeaderCell(A).firstChild},getHeaderCellText:function(A){return this.getHeaderCell(A).firstChild.firstChild},getLockedTable:function(){return this.lockedBody.dom.firstChild},getBodyTable:function(){return this.mainBody.dom.firstChild},getLockedRow:function(A){return this.getLockedTable().rows[A]},getRow:function(A){return this.getBodyTable().rows[A]},getRowComposite:function(B){if(!this.rowEl){this.rowEl=new Ext.CompositeElementLite()}var D=[],C,A;if(C=this.getLockedRow(B)){D.push(C)}if(A=this.getRow(B)){D.push(A)}this.rowEl.elements=D;return this.rowEl},getCell:function(D,B){var A=this.cm.getLockedCount();var C;if(B=this.ds.getCount()){return }E=(E!==undefined?E:0);var M=this.grid.colModel;while(M.isHidden(E)){E++}var C=this.getCell(O,E);if(!C){return }var J=this.scroller.dom;var N=parseInt(C.offsetTop,10);var I=parseInt(C.offsetLeft,10);var L=N+C.offsetHeight;var G=I+C.offsetWidth;var A=J.clientHeight-this.mainHd.dom.offsetHeight;var K=parseInt(J.scrollTop,10);var F=parseInt(J.scrollLeft,10);var H=K+A;var B=F+J.clientWidth;if(NH){J.scrollTop=L-A}}if(D!==false){if(IB){J.scrollLeft=G-J.clientWidth}}}return C},updateColumns:function(){this.grid.stopEditing();var B=this.grid.colModel,E=this.getColumnIds();var F=0;for(var D=0,A=B.getColumnCount();D"+I+"";var J=F.firstChild.rows;for(var A=0,C=J.length;A0){I=I||0;var F=this.getBodyTable().rows;var H=this.getLockedTable().rows;var G=F.length-1;E=Math.min(E||G,G);for(var C=I;C<=E;C++){var A=F[C],B=H[C];var D=Math.max(A.offsetHeight,B.offsetHeight);A.style.height=B.style.height=D+"px"}}},layout:function(B,C){var W=this.grid;var E=W.autoHeight;var L=16;var a=W.getGridEl(),H=this.cm,I=W.autoExpandColumn,O=this;if(!a.dom.offsetWidth){if(B){this.lockedWrap.show();this.mainWrap.show()}return }var V=this.cm.isLocked(0);var F=this.headerPanel.getHeight();var G=this.footerPanel.getHeight();if(E){var K=this.getBodyTable().offsetHeight+F+G+this.mainHd.getHeight();var U=K+a.getBorderWidth("tb");if(W.maxHeight){U=Math.min(W.maxHeight,U)}a.setHeight(U)}if(W.autoWidth){a.setWidth(H.getTotalWidth()+a.getBorderWidth("lr"))}var N=this.scroller;var T=a.getSize(true);this.el.setSize(T.width,T.height);this.headerPanel.setWidth(T.width);this.footerPanel.setWidth(T.width);var M=this.mainHd.getHeight();var Q=T.width;var d=T.height-(F+G);N.setSize(Q,d);var Z=this.getBodyTable();var S=V?Math.max(this.getLockedTable().offsetWidth,this.lockedHd.dom.firstChild.offsetWidth):0;var X=Z.offsetHeight;var J=S+Z.offsetWidth;var b=false,Y=false;this.scrollSizer.setSize(J,X+M);var D=this.lockedWrap,P=this.mainWrap;var R=this.lockedBody,A=this.mainBody;setTimeout(function(){var j=N.dom.offsetTop;var e=N.dom.clientWidth,k=N.dom.clientHeight;D.setTop(j);D.setSize(S,k);P.setLeftTop(S,j);P.setSize(e-S,k);R.setHeight(k-M);A.setHeight(k-M);if(C!==true&&!O.userResized&&I){var i=H.getIndexById(I);var f=H.getTotalWidth(false);var g=H.getColumnWidth(i);var c=Math.min(Math.max(((e-f)+g-2)-(e<=N.dom.offsetWidth?0:18),W.autoExpandMin),W.autoExpandMax);if(g!=c){H.setColumnWidth(i,c,true);O.css.updateRule(O.colSelector+I,"width",(c-O.borderWidth)+"px");O.css.updateRule(O.hdSelector+I,"width",(c-O.borderWidth)+"px");O.updateSplitters();O.layout(false,true)}}if(B){D.show();P.show()}},10)},onWindowResize:function(){if(!this.grid.monitorWindowResize||this.grid.autoHeight){return }this.layout()},appendFooter:function(A){return null},sortAscText:"Sort Ascending",sortDescText:"Sort Descending",lockText:"Lock Column",unlockText:"Unlock Column",columnsText:"Columns"}); +Ext.grid.HeaderDragZone=function(A,C,B){this.grid=A;this.view=A.getView();this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDragZone.superclass.constructor.call(this,C);if(B){this.setHandleElId(Ext.id(C));this.setOuterHandleElId(Ext.id(B))}this.scroll=false};Ext.extend(Ext.grid.HeaderDragZone,Ext.dd.DragZone,{maxDragWidth:120,getDragData:function(C){var A=Ext.lib.Event.getTarget(C);var B=this.view.findHeaderCell(A);if(B){return{ddel:B.firstChild,header:B}}return false},onInitDrag:function(A){this.view.headersDisabled=true;var B=this.dragData.ddel.cloneNode(true);B.id=Ext.id();B.style.width=Math.min(this.dragData.header.offsetWidth,this.maxDragWidth)+"px";this.proxy.update(B);return true},afterValidDrop:function(){var A=this.view;setTimeout(function(){A.headersDisabled=false},50)},afterInvalidDrop:function(){var A=this.view;setTimeout(function(){A.headersDisabled=false},50)}});Ext.grid.HeaderDropZone=function(A,C,B){this.grid=A;this.view=A.getView();this.proxyTop=Ext.DomHelper.append(document.body,{cls:"col-move-top",html:" "},true);this.proxyBottom=Ext.DomHelper.append(document.body,{cls:"col-move-bottom",html:" "},true);this.proxyTop.hide=this.proxyBottom.hide=function(){this.setLeftTop(-100,-100);this.setStyle("visibility","hidden")};this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDropZone.superclass.constructor.call(this,A.getGridEl().dom)};Ext.extend(Ext.grid.HeaderDropZone,Ext.dd.DropZone,{proxyOffsets:[-4,-9],fly:Ext.Element.fly,getTargetFromEvent:function(C){var A=Ext.lib.Event.getTarget(C);var B=this.view.findCellIndex(A);if(B!==false){return this.view.getHeaderCell(B)}},nextVisible:function(C){var B=this.view,A=this.grid.colModel;C=C.nextSibling;while(C){if(!A.isHidden(B.getCellIndex(C))){return C}C=C.nextSibling}return null},prevVisible:function(C){var B=this.view,A=this.grid.colModel;C=C.prevSibling;while(C){if(!A.isHidden(B.getCellIndex(C))){return C}C=C.prevSibling}return null},positionIndicator:function(D,B,E){var H=Ext.lib.Event.getPageX(E);var A=Ext.lib.Dom.getRegion(B.firstChild);var I,K,G=A.top+this.proxyOffsets[1];if((A.right-H)<=(A.right-A.left)/2){I=A.right+this.view.borderWidth;K="after"}else{I=A.left;K="before"}var F=this.view.getCellIndex(D);var J=this.view.getCellIndex(B);if(this.grid.colModel.isFixed(J)){return false}var C=this.grid.colModel.isLocked(J);if(K=="after"){J++}if(F=0&&this.config[A].resizable!==false&&this.config[A].fixed!==true},setHidden:function(A,B){this.config[A].hidden=B;this.totalWidth=null;this.fireEvent("hiddenchange",this,A,B)},setEditor:function(A,B){this.config[A].editor=B}});Ext.grid.ColumnModel.defaultRenderer=function(A){if(typeof A=="string"&&A.length<1){return" "}return A};Ext.grid.DefaultColumnModel=Ext.grid.ColumnModel; +Ext.grid.AbstractSelectionModel=function(){this.locked=false;Ext.grid.AbstractSelectionModel.superclass.constructor.call(this)};Ext.extend(Ext.grid.AbstractSelectionModel,Ext.util.Observable,{init:function(A){this.grid=A;this.initEvents()},lock:function(){this.locked=true},unlock:function(){this.locked=false},isLocked:function(){return this.locked}}); +Ext.grid.RowSelectionModel=function(A){Ext.apply(this,A);this.selections=new Ext.util.MixedCollection(false,function(B){return B.id});this.last=false;this.lastActive=false;this.addEvents({"selectionchange":true,"beforerowselect":true,"rowselect":true,"rowdeselect":true});this.locked=false};Ext.extend(Ext.grid.RowSelectionModel,Ext.grid.AbstractSelectionModel,{singleSelect:false,initEvents:function(){if(!this.grid.enableDragDrop&&!this.grid.enableDrag){this.grid.on("mousedown",this.handleMouseDown,this)}else{this.grid.on("rowclick",function(B,D,C){if(C.button===0&&!C.shiftKey&&!C.ctrlKey){this.selectRow(D,false);B.view.focusRow(D)}},this)}this.rowNav=new Ext.KeyNav(this.grid.getGridEl(),{"up":function(C){if(!C.shiftKey){this.selectPrevious(C.shiftKey)}else{if(this.last!==false&&this.lastActive!==false){var B=this.last;this.selectRange(this.last,this.lastActive-1);this.grid.getView().focusRow(this.lastActive);if(B!==false){this.last=B}}else{this.selectFirstRow()}}},"down":function(C){if(!C.shiftKey){this.selectNext(C.shiftKey)}else{if(this.last!==false&&this.lastActive!==false){var B=this.last;this.selectRange(this.last,this.lastActive+1);this.grid.getView().focusRow(this.lastActive);if(B!==false){this.last=B}}else{this.selectFirstRow()}}},scope:this});var A=this.grid.view;A.on("refresh",this.onRefresh,this);A.on("rowupdated",this.onRowUpdated,this);A.on("rowremoved",this.onRemove,this)},onRefresh:function(){var D=this.grid.dataSource,B,A=this.grid.view;var C=this.selections;C.each(function(E){if((B=D.indexOfId(E.id))!=-1){A.onRowSelect(B)}else{C.remove(E)}})},onRemove:function(A,B,C){this.selections.remove(C)},onRowUpdated:function(A,B,C){if(this.isSelected(C)){A.onRowSelect(B)}},selectRecords:function(B,E){if(!E){this.clearSelections()}var D=this.grid.dataSource;for(var C=0,A=B.length;C0},isSelected:function(A){var B=typeof A=="number"?this.grid.dataSource.getAt(A):A;return(B&&this.selections.key(B.id)?true:false)},isIdSelected:function(A){return(this.selections.key(A)?true:false)},handleMouseDown:function(E,C){var A=this.grid.getView(),F;if(this.isLocked()||(F=A.findRowIndex(C))===false){return }if(E.shiftKey&&this.last!==false){var D=this.last;this.selectRange(D,F,E.ctrlKey);this.last=D;A.focusRow(F)}else{var B=this.isSelected(F);if(E.button!==0&&B){A.focusRow(F)}else{if(E.ctrlKey&&B){this.deselectRow(F)}else{if(!B){this.selectRow(F,E.button===0&&(E.ctrlKey||E.shiftKey));A.focusRow(F)}}}}},selectRows:function(C,D){if(!D){this.clearSelections()}for(var B=0,A=C.length;B=A;C--){this.selectRow(C,true)}}},deselectRange:function(C,B,A){if(this.locked){return }for(var D=C;D<=B;D++){this.deselectRow(D,A)}},selectRow:function(B,D,A){if(this.locked||(B<0||B>=this.grid.dataSource.getCount())){return }if(this.fireEvent("beforerowselect",this,B,D)!==false){if(!D||this.singleSelect){this.clearSelections()}var C=this.grid.dataSource.getAt(B);this.selections.add(C);this.last=this.lastActive=B;if(!A){this.grid.getView().onRowSelect(B)}this.fireEvent("rowselect",this,B,C);this.fireEvent("selectionchange",this)}},deselectRow:function(B,A){if(this.locked){return }if(this.last==B){this.last=false}if(this.lastActive==B){this.lastActive=false}var C=this.grid.dataSource.getAt(B);this.selections.remove(C);if(!A){this.grid.getView().onRowDeselect(B)}this.fireEvent("rowdeselect",this,B);this.fireEvent("selectionchange",this)},restoreLast:function(){if(this._last){this.last=this._last}},acceptsNav:function(C,B,A){return !A.isHidden(B)&&A.isCellEditable(B,C)},onEditorKey:function(E,D){var B=D.getKey(),F,C=this.grid,A=C.activeEditor;if(B==D.TAB){D.stopEvent();A.completeEdit();if(D.shiftKey){F=C.walkCells(A.row,A.col-1,-1,this.acceptsNav,this)}else{F=C.walkCells(A.row,A.col+1,1,this.acceptsNav,this)}}else{if(B==D.ENTER&&!D.ctrlKey){D.stopEvent();A.completeEdit();if(D.shiftKey){F=C.walkCells(A.row-1,A.col,-1,this.acceptsNav,this)}else{F=C.walkCells(A.row+1,A.col,1,this.acceptsNav,this)}}else{if(B==D.ESC){A.cancelEdit()}}}if(F){C.startEditing(F[0],F[1])}}}); +Ext.grid.CellSelectionModel=function(A){Ext.apply(this,A);this.selection=null;this.addEvents({"beforecellselect":true,"cellselect":true,"selectionchange":true})};Ext.extend(Ext.grid.CellSelectionModel,Ext.grid.AbstractSelectionModel,{initEvents:function(){this.grid.on("mousedown",this.handleMouseDown,this);this.grid.getGridEl().on(Ext.isIE?"keydown":"keypress",this.handleKeyDown,this);var A=this.grid.view;A.on("refresh",this.onViewChange,this);A.on("rowupdated",this.onRowUpdated,this);A.on("beforerowremoved",this.clearSelections,this);A.on("beforerowsinserted",this.clearSelections,this);if(this.grid.isEditor){this.grid.on("beforeedit",this.beforeEdit,this)}},beforeEdit:function(A){this.select(A.row,A.column,false,true,A.record)},onRowUpdated:function(A,B,C){if(this.selection&&this.selection.record==C){A.onCellSelect(B,this.selection.cell[1])}},onViewChange:function(){this.clearSelections(true)},getSelectedCell:function(){return this.selection?this.selection.cell:null},clearSelections:function(B){var A=this.selection;if(A){if(B!==true){this.grid.view.onCellDeselect(A.cell[0],A.cell[1])}this.selection=null;this.fireEvent("selectionchange",this,null)}},hasSelection:function(){return this.selection?true:false},handleMouseDown:function(D,C){var B=this.grid.getView();if(this.isLocked()){return }var E=B.findRowIndex(C);var A=B.findCellIndex(C);if(E!==false&&A!==false){this.select(E,A)}},select:function(F,C,B,E,D){if(this.fireEvent("beforecellselect",this,F,C)!==false){this.clearSelections();D=D||this.grid.dataSource.getAt(F);this.selection={record:D,cell:[F,C]};if(!B){var A=this.grid.getView();A.onCellSelect(F,C);if(E!==true){A.focusCell(F,C)}}this.fireEvent("cellselect",this,F,C);this.fireEvent("selectionchange",this,this.selection)}},isSelectable:function(C,B,A){return !A.isHidden(B)},handleKeyDown:function(F){if(!F.isNavKeyPress()){return }var E=this.grid,J=this.selection;if(!J){F.stopEvent();var I=E.walkCells(0,0,1,this.isSelectable,this);if(I){this.select(I[0],I[1])}return }var B=this;var H=function(M,K,L){return E.walkCells(M,K,L,B.isSelectable,B)};var C=F.getKey(),A=J.cell[0],G=J.cell[1];var D;switch(C){case F.TAB:if(F.shiftKey){D=H(A,G-1,-1)}else{D=H(A,G+1,1)}break;case F.DOWN:D=H(A+1,G,1);break;case F.UP:D=H(A-1,G,-1);break;case F.RIGHT:D=H(A,G+1,1);break;case F.LEFT:D=H(A,G-1,-1);break;case F.ENTER:if(E.isEditor&&!E.editing){E.startEditing(A,G);F.stopEvent();return }break}if(D){this.select(D[0],D[1]);F.stopEvent()}},acceptsNav:function(C,B,A){return !A.isHidden(B)&&A.isCellEditable(B,C)},onEditorKey:function(E,D){var B=D.getKey(),F,C=this.grid,A=C.activeEditor;if(B==D.TAB){if(D.shiftKey){F=C.walkCells(A.row,A.col-1,-1,this.acceptsNav,this)}else{F=C.walkCells(A.row,A.col+1,1,this.acceptsNav,this)}D.stopEvent()}else{if(B==D.ENTER&&!D.ctrlKey){A.completeEdit();D.stopEvent()}else{if(B==D.ESC){A.cancelEdit()}}}if(F){C.startEditing(F[0],F[1])}}}); +Ext.grid.EditorGrid=function(A,B){Ext.grid.EditorGrid.superclass.constructor.call(this,A,B);this.getGridEl().addClass("xedit-grid");if(!this.selModel){this.selModel=new Ext.grid.CellSelectionModel()}this.activeEditor=null;this.addEvents({"beforeedit":true,"afteredit":true,"validateedit":true});this.on("bodyscroll",this.stopEditing,this);this.on(this.clicksToEdit==1?"cellclick":"celldblclick",this.onCellDblClick,this)};Ext.extend(Ext.grid.EditorGrid,Ext.grid.Grid,{clicksToEdit:2,isEditor:true,trackMouseOver:false,onCellDblClick:function(B,C,A){this.startEditing(C,A)},onEditComplete:function(B,D,A){this.editing=false;this.activeEditor=null;B.un("specialkey",this.selModel.onEditorKey,this.selModel);if(String(D)!==String(A)){var C=B.record;var F=this.colModel.getDataIndex(B.col);var E={grid:this,record:C,field:F,originalValue:A,value:D,row:B.row,column:B.col,cancel:false};if(this.fireEvent("validateedit",E)!==false&&!E.cancel){C.set(F,E.value);delete E.cancel;this.fireEvent("afteredit",E)}}this.view.focusCell(B.row,B.col)},startEditing:function(F,B){this.stopEditing();if(this.colModel.isCellEditable(B,F)){this.view.ensureVisible(F,B,true);var C=this.dataSource.getAt(F);var E=this.colModel.getDataIndex(B);var D={grid:this,record:C,field:E,value:C.data[E],row:F,column:B,cancel:false};if(this.fireEvent("beforeedit",D)!==false&&!D.cancel){this.editing=true;var A=this.colModel.getCellEditor(B,F);if(!A.rendered){A.render(A.parentEl||document.body)}(function(){A.row=F;A.col=B;A.record=C;A.on("complete",this.onEditComplete,this,{single:true});A.on("specialkey",this.selModel.onEditorKey,this.selModel);this.activeEditor=A;var G=C.data[E];A.startEdit(this.view.getCell(F,B),G)}).defer(50,this)}}},stopEditing:function(){if(this.activeEditor){this.activeEditor.completeEdit()}this.activeEditor=null}}); +Ext.grid.GridEditor=function(B,A){Ext.grid.GridEditor.superclass.constructor.call(this,B,A);B.monitorTab=false};Ext.extend(Ext.grid.GridEditor,Ext.Editor,{alignment:"tl-tl",autoSize:"width",hideEl:false,cls:"x-small-editor x-grid-editor",shim:false,shadow:"frame"}); +Ext.grid.PropertyRecord=Ext.data.Record.create([{name:"name",type:"string"},"value"]);Ext.grid.PropertyStore=function(A,B){this.grid=A;this.store=new Ext.data.Store({recordType:Ext.grid.PropertyRecord});this.store.on("update",this.onUpdate,this);if(B){this.setSource(B)}Ext.grid.PropertyStore.superclass.constructor.call(this)};Ext.extend(Ext.grid.PropertyStore,Ext.util.Observable,{setSource:function(C){this.source=C;this.store.removeAll();var B=[];for(var A in C){if(this.isEditableValue(C[A])){B.push(new Ext.grid.PropertyRecord({name:A,value:C[A]},A))}}this.store.loadRecords({records:B},{},true)},onUpdate:function(E,A,D){if(D==Ext.data.Record.EDIT){var B=A.data["value"];var C=A.modified["value"];if(this.grid.fireEvent("beforepropertychange",this.source,A.id,B,C)!==false){this.source[A.id]=B;A.commit();this.grid.fireEvent("propertychange",this.source,A.id,B,C)}else{A.reject()}}},getProperty:function(A){return this.store.getAt(A)},isEditableValue:function(A){if(A&&A instanceof Date){return true}else{if(typeof A=="object"||typeof A=="function"){return false}}return true},setValue:function(B,A){this.source[B]=A;this.store.getById(B).set("value",A)},getSource:function(){return this.source}});Ext.grid.PropertyColumnModel=function(B,A){this.grid=B;var C=Ext.grid;C.PropertyColumnModel.superclass.constructor.call(this,[{header:this.nameText,sortable:true,dataIndex:"name",id:"name"},{header:this.valueText,resizable:false,dataIndex:"value",id:"value"}]);this.store=A;this.bselect=Ext.DomHelper.append(document.body,{tag:"select",style:"display:none",cls:"x-grid-editor",children:[{tag:"option",value:"true",html:"true"},{tag:"option",value:"false",html:"false"}]});Ext.id(this.bselect);var D=Ext.form;this.editors={"date":new C.GridEditor(new D.DateField({selectOnFocus:true})),"string":new C.GridEditor(new D.TextField({selectOnFocus:true})),"number":new C.GridEditor(new D.NumberField({selectOnFocus:true,style:"text-align:left;"})),"boolean":new C.GridEditor(new D.Field({el:this.bselect,selectOnFocus:true}))};this.renderCellDelegate=this.renderCell.createDelegate(this);this.renderPropDelegate=this.renderProp.createDelegate(this)};Ext.extend(Ext.grid.PropertyColumnModel,Ext.grid.ColumnModel,{nameText:"Name",valueText:"Value",dateFormat:"m/j/Y",renderDate:function(A){return A.dateFormat(this.dateFormat)},renderBool:function(A){return A?"true":"false"},isCellEditable:function(A,B){return A==1},getRenderer:function(A){return A==1?this.renderCellDelegate:this.renderPropDelegate},renderProp:function(A){return this.getPropertyName(A)},renderCell:function(A){var B=A;if(A instanceof Date){B=this.renderDate(A)}else{if(typeof A=="boolean"){B=this.renderBool(A)}}return Ext.util.Format.htmlEncode(B)},getPropertyName:function(B){var A=this.grid.propertyNames;return A&&A[B]?A[B]:B},getCellEditor:function(A,E){var B=this.store.getProperty(E);var D=B.data["name"],C=B.data["value"];if(this.grid.customEditors[D]){return this.grid.customEditors[D]}if(C instanceof Date){return this.editors["date"]}else{if(typeof C=="number"){return this.editors["number"]}else{if(typeof C=="boolean"){return this.editors["boolean"]}else{return this.editors["string"]}}}}});Ext.grid.PropertyGrid=function(B,D){D=D||{};var C=new Ext.grid.PropertyStore(this);this.store=C;var A=new Ext.grid.PropertyColumnModel(this,C);C.store.sort("name","ASC");Ext.grid.PropertyGrid.superclass.constructor.call(this,B,Ext.apply({ds:C.store,cm:A,enableColLock:false,enableColumnMove:false,stripeRows:false,trackMouseOver:false,clicksToEdit:1},D));this.getGridEl().addClass("x-props-grid");this.lastEditRow=null;this.on("columnresize",this.onColumnResize,this);this.addEvents({beforepropertychange:true,propertychange:true});this.customEditors=this.customEditors||{}};Ext.extend(Ext.grid.PropertyGrid,Ext.grid.EditorGrid,{render:function(){Ext.grid.PropertyGrid.superclass.render.call(this);this.autoSize.defer(100,this)},autoSize:function(){Ext.grid.PropertyGrid.superclass.autoSize.call(this);if(this.view){this.view.fitColumns()}},onColumnResize:function(){this.colModel.setColumnWidth(1,this.container.getWidth(true)-this.colModel.getColumnWidth(0));this.autoSize()},setSource:function(A){this.store.setSource(A)},getSource:function(){return this.store.getSource()}}); +Ext.LoadMask=function(C,B){this.el=Ext.get(C);Ext.apply(this,B);if(this.store){this.store.on("beforeload",this.onBeforeLoad,this);this.store.on("load",this.onLoad,this);this.store.on("loadexception",this.onLoad,this);this.removeMask=false}else{var A=this.el.getUpdateManager();A.showLoadIndicator=false;A.on("beforeupdate",this.onBeforeLoad,this);A.on("update",this.onLoad,this);A.on("failure",this.onLoad,this);this.removeMask=true}};Ext.LoadMask.prototype={msg:"Loading...",msgCls:"x-mask-loading",disabled:false,disable:function(){this.disabled=true},enable:function(){this.disabled=false},onLoad:function(){this.el.unmask(this.removeMask)},onBeforeLoad:function(){if(!this.disabled){this.el.mask(this.msg,this.msgCls)}},destroy:function(){if(this.store){this.store.un("beforeload",this.onBeforeLoad,this);this.store.un("load",this.onLoad,this);this.store.un("loadexception",this.onLoad,this)}else{var A=this.el.getUpdateManager();A.un("beforeupdate",this.onBeforeLoad,this);A.un("update",this.onLoad,this);A.un("failure",this.onLoad,this)}}}; \ No newline at end of file diff --git a/examples/ext/ext-core-debug.js b/examples/ext/ext-core-debug.js new file mode 100644 index 0000000..308cc09 --- /dev/null +++ b/examples/ext/ext-core-debug.js @@ -0,0 +1,5485 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + + +Ext.DomHelper = function(){ + var tempTableEl = null; + var emptyTags = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i; + var tableRe = /^table|tbody|tr|td$/i; + + + + var createHtml = function(o){ + if(typeof o == 'string'){ + return o; + } + var b = ""; + if(!o.tag){ + o.tag = "div"; + } + b += "<" + o.tag; + for(var attr in o){ + if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || typeof o[attr] == "function") continue; + if(attr == "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 key in s){ + if(typeof s[key] != "function"){ + b += key + ":" + s[key] + ";"; + } + } + b += '"'; + } + }else{ + if(attr == "cls"){ + b += ' class="' + o["cls"] + '"'; + }else if(attr == "htmlFor"){ + b += ' for="' + o["htmlFor"] + '"'; + }else{ + b += " " + attr + '="' + o[attr] + '"'; + } + } + } + if(emptyTags.test(o.tag)){ + b += "/>"; + }else{ + b += ">"; + var cn = o.children || o.cn; + if(cn){ + if(cn instanceof Array){ + for(var i = 0, len = cn.length; i < len; i++) { + b += createHtml(cn[i], b); + } + }else{ + b += createHtml(cn, b); + } + } + if(o.html){ + b += o.html; + } + b += ""; + } + return b; + }; + + + + var createDom = function(o, parentNode){ + var el = document.createElement(o.tag||'div'); + var useSet = el.setAttribute ? true : false; + for(var attr in o){ + if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || attr == "style" || typeof o[attr] == "function") continue; + if(attr=="cls"){ + el.className = o["cls"]; + }else{ + if(useSet) el.setAttribute(attr, o[attr]); + else el[attr] = o[attr]; + } + } + 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++) { + createDom(cn[i], el); + } + }else{ + createDom(cn, el); + } + } + if(o.html){ + el.innerHTML = o.html; + } + if(parentNode){ + parentNode.appendChild(el); + } + return el; + }; + + var ieTable = function(depth, s, h, e){ + tempTableEl.innerHTML = [s, h, e].join(''); + var i = -1, el = tempTableEl; + while(++i < depth){ + el = el.firstChild; + } + return el; + }; + + + var ts = '', + te = '
      ', + tbs = ts+'', + tbe = ''+te, + trs = tbs + '', + tre = ''+tbe; + + + var insertIntoTable = function(tag, where, el, html){ + if(!tempTableEl){ + tempTableEl = document.createElement('div'); + } + var node; + var before = null; + if(tag == 'td'){ + if(where == 'afterbegin' || where == 'beforeend'){ + return; + } + if(where == 'beforebegin'){ + before = el; + el = el.parentNode; + } else{ + before = el.nextSibling; + el = el.parentNode; + } + node = ieTable(4, trs, html, tre); + } + else if(tag == 'tr'){ + if(where == 'beforebegin'){ + before = el; + el = el.parentNode; + node = ieTable(3, tbs, html, tbe); + } else if(where == 'afterend'){ + before = el.nextSibling; + el = el.parentNode; + node = ieTable(3, tbs, html, tbe); + } else{ + if(where == 'afterbegin'){ + before = el.firstChild; + } + node = ieTable(4, trs, html, tre); + } + } else if(tag == 'tbody'){ + if(where == 'beforebegin'){ + before = el; + el = el.parentNode; + node = ieTable(2, ts, html, te); + } else if(where == 'afterend'){ + before = el.nextSibling; + el = el.parentNode; + node = ieTable(2, ts, html, te); + } else{ + if(where == 'afterbegin'){ + before = el.firstChild; + } + node = ieTable(3, tbs, html, tbe); + } + } else{ + if(where == 'beforebegin' || where == 'afterend'){ + return; + } + if(where == 'afterbegin'){ + before = el.firstChild; + } + node = ieTable(2, ts, html, te); + } + el.insertBefore(node, before); + return node; + }; + + return { + + useDom : false, + + + markup : function(o){ + return createHtml(o); + }, + + + applyStyles : function(el, styles){ + if(styles){ + el = Ext.fly(el); + if(typeof styles == "string"){ + var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi; + var matches; + while ((matches = re.exec(styles)) != null){ + el.setStyle(matches[1], matches[2]); + } + }else if (typeof styles == "object"){ + for (var style in styles){ + el.setStyle(style, styles[style]); + } + }else if (typeof styles == "function"){ + Ext.DomHelper.applyStyles(el, styles.call()); + } + } + }, + + + insertHtml : function(where, el, html){ + where = where.toLowerCase(); + if(el.insertAdjacentHTML){ + if(tableRe.test(el.tagName)){ + var rs; + if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){ + return rs; + } + } + switch(where){ + case "beforebegin": + el.insertAdjacentHTML('BeforeBegin', html); + return el.previousSibling; + case "afterbegin": + el.insertAdjacentHTML('AfterBegin', html); + return el.firstChild; + case "beforeend": + el.insertAdjacentHTML('BeforeEnd', html); + return el.lastChild; + case "afterend": + el.insertAdjacentHTML('AfterEnd', html); + return el.nextSibling; + } + throw 'Illegal insertion point -> "' + where + '"'; + } + var range = el.ownerDocument.createRange(); + var frag; + switch(where){ + case "beforebegin": + range.setStartBefore(el); + frag = range.createContextualFragment(html); + el.parentNode.insertBefore(frag, el); + return el.previousSibling; + case "afterbegin": + if(el.firstChild){ + range.setStartBefore(el.firstChild); + frag = range.createContextualFragment(html); + el.insertBefore(frag, el.firstChild); + return el.firstChild; + }else{ + el.innerHTML = html; + return el.firstChild; + } + case "beforeend": + if(el.lastChild){ + range.setStartAfter(el.lastChild); + frag = range.createContextualFragment(html); + el.appendChild(frag); + return el.lastChild; + }else{ + el.innerHTML = html; + return el.lastChild; + } + case "afterend": + range.setStartAfter(el); + frag = range.createContextualFragment(html); + el.parentNode.insertBefore(frag, el.nextSibling); + return el.nextSibling; + } + throw 'Illegal insertion point -> "' + where + '"'; + }, + + + insertBefore : function(el, o, returnElement){ + return this.doInsert(el, o, returnElement, "beforeBegin"); + }, + + + insertAfter : function(el, o, returnElement){ + return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling"); + }, + + + insertFirst : function(el, o, returnElement){ + return this.doInsert(el, o, returnElement, "afterBegin"); + }, + + + doInsert : function(el, o, returnElement, pos, sibling){ + el = Ext.getDom(el); + var newNode; + if(this.useDom){ + newNode = createDom(o, null); + el.parentNode.insertBefore(newNode, sibling ? el[sibling] : el); + }else{ + var html = createHtml(o); + newNode = this.insertHtml(pos, el, html); + } + return returnElement ? Ext.get(newNode, true) : newNode; + }, + + + append : function(el, o, returnElement){ + el = Ext.getDom(el); + var newNode; + if(this.useDom){ + newNode = createDom(o, null); + el.appendChild(newNode); + }else{ + var html = createHtml(o); + newNode = this.insertHtml("beforeEnd", el, html); + } + return returnElement ? Ext.get(newNode, true) : newNode; + }, + + + overwrite : function(el, o, returnElement){ + el = Ext.getDom(el); + el.innerHTML = createHtml(o); + return returnElement ? Ext.get(el.firstChild, true) : el.firstChild; + }, + + + createTemplate : function(o){ + var html = createHtml(o); + return new Ext.Template(html); + } + }; +}(); + + +Ext.Template = function(html){ + if(html instanceof Array){ + html = html.join(""); + }else if(arguments.length > 1){ + html = Array.prototype.join.call(arguments, ""); + } + + this.html = html; + +}; +Ext.Template.prototype = { + + applyTemplate : function(values){ + if(this.compiled){ + return this.compiled(values); + } + var useF = this.disableFormats !== true; + var fm = Ext.util.Format, tpl = this; + var fn = function(m, name, format, args){ + if(format && useF){ + if(format.substr(0, 5) == "this."){ + return tpl.call(format.substr(5), values[name], values); + }else{ + if(args){ + + + + var re = /^\s*['"](.*)["']\s*$/; + args = args.split(','); + for(var i = 0, len = args.length; i < len; i++){ + args[i] = args[i].replace(re, "$1"); + } + args = [values[name]].concat(args); + }else{ + args = [values[name]]; + } + return fm[format].apply(fm, args); + } + }else{ + return values[name] !== undefined ? values[name] : ""; + } + }; + return this.html.replace(this.re, fn); + }, + + + set : function(html, compile){ + this.html = html; + this.compiled = null; + if(compile){ + this.compile(); + } + return this; + }, + + + disableFormats : false, + + + re : /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, + + + compile : function(){ + var fm = Ext.util.Format; + var useF = this.disableFormats !== true; + var sep = Ext.isGecko ? "+" : ","; + var fn = function(m, name, format, args){ + if(format && useF){ + args = args ? ',' + args : ""; + if(format.substr(0, 5) != "this."){ + format = "fm." + format + '('; + }else{ + format = 'this.call("'+ format.substr(5) + '", '; + args = ", values"; + } + }else{ + args= ''; format = "(values['" + name + "'] == undefined ? '' : "; + } + return "'"+ sep + format + "values['" + name + "']" + args + ")"+sep+"'"; + }; + var body; + + if(Ext.isGecko){ + body = "this.compiled = function(values){ return '" + + this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn) + + "';};"; + }else{ + body = ["this.compiled = function(values){ return ['"]; + body.push(this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn)); + body.push("'].join('');};"); + body = body.join(''); + } + eval(body); + return this; + }, + + + call : function(fnName, value, allValues){ + return this[fnName](value, allValues); + }, + + + insertFirst: function(el, values, returnElement){ + return this.doInsert('afterBegin', el, values, returnElement); + }, + + + insertBefore: function(el, values, returnElement){ + return this.doInsert('beforeBegin', el, values, returnElement); + }, + + + insertAfter : function(el, values, returnElement){ + return this.doInsert('afterEnd', el, values, returnElement); + }, + + + append : function(el, values, returnElement){ + return this.doInsert('beforeEnd', el, values, returnElement); + }, + + doInsert : function(where, el, values, returnEl){ + el = Ext.getDom(el); + var newNode = Ext.DomHelper.insertHtml(where, el, this.applyTemplate(values)); + return returnEl ? Ext.get(newNode, true) : newNode; + }, + + + overwrite : function(el, values, returnElement){ + el = Ext.getDom(el); + el.innerHTML = this.applyTemplate(values); + return returnElement ? 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.DomQuery = function(){ + var cache = {}, simpleCache = {}, valueCache = {}; + var nonSpace = /\S/; + var trimRe = /^\s+|\s+$/g; + var tplRe = /\{(\d+)\}/g; + var modeRe = /^(\s?[\/>+~]\s?|\s|$)/; + var tagTokenRe = /^(#)?([\w-\*]+)/; + var nthRe = /(\d*)n\+?(\d*)/, nthRe2 = /\D/; + + function child(p, index){ + var i = 0; + var n = p.firstChild; + while(n){ + if(n.nodeType == 1){ + if(++i == index){ + 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 children(d){ + var n = d.firstChild, ni = -1; + while(n){ + var nx = n.nextSibling; + if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){ + d.removeChild(n); + }else{ + n.nodeIndex = ++ni; + } + n = nx; + } + return this; + }; + + function byClassName(c, a, v){ + if(!v){ + return c; + } + var r = [], ri = -1, cn; + for(var i = 0, ci; ci = c[i]; i++){ + if((' '+ci.className+' ').indexOf(v) != -1){ + r[++ri] = ci; + } + } + return r; + }; + + function attrValue(n, attr){ + if(!n.tagName && typeof n.length != "undefined"){ + n = n[0]; + } + if(!n){ + return null; + } + if(attr == "for"){ + return n.htmlFor; + } + if(attr == "class" || attr == "className"){ + return n.className; + } + return n.getAttribute(attr) || n[attr]; + + }; + + function getNodes(ns, mode, tagName){ + var result = [], ri = -1, cs; + if(!ns){ + return result; + } + tagName = tagName || "*"; + if(typeof ns.getElementsByTagName != "undefined"){ + ns = [ns]; + } + if(!mode){ + for(var i = 0, ni; ni = ns[i]; i++){ + cs = ni.getElementsByTagName(tagName); + for(var j = 0, ci; ci = cs[j]; j++){ + result[++ri] = ci; + } + } + }else if(mode == "/" || mode == ">"){ + var utag = tagName.toUpperCase(); + for(var i = 0, ni, cn; ni = ns[i]; i++){ + cn = ni.children || ni.childNodes; + for(var j = 0, cj; cj = cn[j]; j++){ + if(cj.nodeName == utag || cj.nodeName == tagName || tagName == '*'){ + result[++ri] = cj; + } + } + } + }else if(mode == "+"){ + var utag = tagName.toUpperCase(); + for(var i = 0, n; n = ns[i]; i++){ + while((n = n.nextSibling) && n.nodeType != 1); + if(n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')){ + result[++ri] = n; + } + } + }else if(mode == "~"){ + for(var i = 0, n; n = ns[i]; i++){ + while((n = n.nextSibling) && (n.nodeType != 1 || (tagName == '*' || n.tagName.toLowerCase()!=tagName))); + if(n){ + result[++ri] = n; + } + } + } + return result; + }; + + 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, tagName){ + if(cs.tagName || cs == document){ + cs = [cs]; + } + if(!tagName){ + return cs; + } + var r = [], ri = -1; + tagName = tagName.toLowerCase(); + for(var i = 0, ci; ci = cs[i]; i++){ + if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){ + r[++ri] = ci; + } + } + return r; + }; + + function byId(cs, attr, id){ + if(cs.tagName || cs == document){ + cs = [cs]; + } + if(!id){ + return cs; + } + var r = [], ri = -1; + for(var i = 0,ci; ci = cs[i]; i++){ + if(ci && ci.id == id){ + r[++ri] = ci; + return r; + } + } + return r; + }; + + function byAttribute(cs, attr, value, op, custom){ + var r = [], ri = -1, st = custom=="{"; + var f = Ext.DomQuery.operators[op]; + for(var i = 0, ci; ci = cs[i]; i++){ + var a; + if(st){ + a = Ext.DomQuery.getStyle(ci, attr); + } + else if(attr == "class" || attr == "className"){ + a = ci.className; + }else if(attr == "for"){ + a = ci.htmlFor; + }else if(attr == "href"){ + a = ci.getAttribute("href", 2); + }else{ + a = ci.getAttribute(attr); + } + if((f && f(a, value)) || (!f && a)){ + r[++ri] = ci; + } + } + return r; + }; + + function byPseudo(cs, name, value){ + return Ext.DomQuery.pseudos[name](cs, value); + }; + + + + + var isIE = window.ActiveXObject ? true : false; + + + + eval("var batch = 30803;"); + + 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, ri = -1; + if(!len || typeof cs.nodeType != "undefined" || len == 1){ + return cs; + } + if(isIE && 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[++ri] = cs[j]; + } + for(j = i+1; cj = cs[j]; j++){ + if(cj._nodup != d){ + cj._nodup = d; + r[++ri] = 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 len1 = c1.length; + if(!len1){ + return c2; + } + if(isIE && c1[0].selectSingleNode){ + return quickDiffIEXml(c1, c2); + } + var d = ++key; + for(var i = 0; i < len1; 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, mode, root, id){ + if(ns == root){ + var d = root.ownerDocument || root; + return d.getElementById(id); + } + ns = getNodes(ns, mode, "*"); + return byId(ns, null, id); + } + + return { + getStyle : function(el, name){ + return Ext.fly(el).getStyle(name); + }, + + compile : function(path, type){ + type = type || "select"; + + var fn = ["var f = function(root){\n var mode; ++batch; var n = root || document;\n"]; + var q = path, mode, lq; + var tk = Ext.DomQuery.matchers; + var tklen = tk.length; + var mm; + + + var lmode = q.match(modeRe); + if(lmode && lmode[1]){ + fn[fn.length] = 'mode="'+lmode[1].replace(trimRe, "")+'";'; + q = q.replace(lmode[1], ""); + } + + while(path.substr(0, 1)=="/"){ + path = path.substr(1); + } + + while(q && lq != q){ + lq = q; + var tm = q.match(tagTokenRe); + if(type == "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(modeRe))){ + var matched = false; + for(var j = 0; j < tklen; j++){ + var t = tk[j]; + var m = q.match(t.re); + if(m){ + fn[fn.length] = t.select.replace(tplRe, function(x, i){ + return m[i]; + }); + q = q.replace(m[0], ""); + matched = true; + break; + } + } + + if(!matched){ + throw 'Error parsing selector, parsing failed at "' + q + '"'; + } + } + if(mm[1]){ + fn[fn.length] = 'mode="'+mm[1].replace(trimRe, "")+'";'; + q = q.replace(mm[1], ""); + } + } + fn[fn.length] = "return nodup(n);\n}"; + eval(fn.join("")); + return f; + }, + + + select : function(path, root, type){ + if(!root || root == document){ + root = document; + } + if(typeof root == "string"){ + root = document.getElementById(root); + } + var paths = path.split(","); + var results = []; + for(var i = 0, len = paths.length; i < len; i++){ + var p = paths[i].replace(trimRe, ""); + if(!cache[p]){ + cache[p] = Ext.DomQuery.compile(p); + if(!cache[p]){ + throw p + " is not a valid selector"; + } + } + var result = cache[p](root); + if(result && result != document){ + results = results.concat(result); + } + } + if(paths.length > 1){ + return nodup(results); + } + return results; + }, + + + selectNode : function(path, root){ + return Ext.DomQuery.select(path, root)[0]; + }, + + + selectValue : function(path, root, defaultValue){ + path = path.replace(trimRe, ""); + if(!valueCache[path]){ + valueCache[path] = Ext.DomQuery.compile(path, "select"); + } + var n = valueCache[path](root); + n = n[0] ? n[0] : n; + var v = (n && n.firstChild ? n.firstChild.nodeValue : null); + return ((v === null||v === undefined||v==='') ? defaultValue : v); + }, + + + selectNumber : function(path, root, defaultValue){ + var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0); + return parseFloat(v); + }, + + + is : function(el, ss){ + if(typeof el == "string"){ + el = document.getElementById(el); + } + var isArray = (el instanceof Array); + var result = Ext.DomQuery.filter(isArray ? el : [el], ss); + return isArray ? (result.length == el.length) : (result.length > 0); + }, + + + filter : function(els, ss, nonMatches){ + ss = ss.replace(trimRe, ""); + if(!simpleCache[ss]){ + simpleCache[ss] = Ext.DomQuery.compile(ss, "simple"); + } + var result = simpleCache[ss](els); + return nonMatches ? quickDiff(result, els) : result; + }, + + + 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; + }, + "|=" : function(a, v){ + return a && (a == v || a.substr(0, v.length+1) == v+'-'); + }, + "~=" : function(a, v){ + return a && (' '+a+' ').indexOf(' '+v+' ') != -1; + } + }, + + + pseudos : { + "first-child" : function(c){ + var r = [], ri = -1, n; + for(var i = 0, ci; ci = n = c[i]; i++){ + while((n = n.previousSibling) && n.nodeType != 1); + if(!n){ + r[++ri] = ci; + } + } + return r; + }, + + "last-child" : function(c){ + var r = [], ri = -1, n; + for(var i = 0, ci; ci = n = c[i]; i++){ + while((n = n.nextSibling) && n.nodeType != 1); + if(!n){ + r[++ri] = ci; + } + } + return r; + }, + + "nth-child" : function(c, a) { + var r = [], ri = -1; + var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a); + var f = (m[1] || 1) - 0, l = m[2] - 0; + for(var i = 0, n; n = c[i]; i++){ + var pn = n.parentNode; + if (batch != pn._batch) { + var j = 0; + for(var cn = pn.firstChild; cn; cn = cn.nextSibling){ + if(cn.nodeType == 1){ + cn.nodeIndex = ++j; + } + } + pn._batch = batch; + } + if (f == 1) { + if (l == 0 || n.nodeIndex == l){ + r[++ri] = n; + } + } else if ((n.nodeIndex + l) % f == 0){ + r[++ri] = n; + } + } + + return r; + }, + + "only-child" : function(c){ + var r = [], ri = -1;; + for(var i = 0, ci; ci = c[i]; i++){ + if(!prev(ci) && !next(ci)){ + r[++ri] = ci; + } + } + return r; + }, + + "empty" : function(c){ + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + var cns = ci.childNodes, j = 0, cn, empty = true; + while(cn = cns[j]){ + ++j; + if(cn.nodeType == 1 || cn.nodeType == 3){ + empty = false; + break; + } + } + if(empty){ + r[++ri] = ci; + } + } + return r; + }, + + "contains" : function(c, v){ + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + if((ci.textContent||ci.innerText||'').indexOf(v) != -1){ + r[++ri] = ci; + } + } + return r; + }, + + "nodeValue" : function(c, v){ + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + if(ci.firstChild && ci.firstChild.nodeValue == v){ + r[++ri] = ci; + } + } + return r; + }, + + "checked" : function(c){ + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + if(ci.checked == true){ + r[++ri] = 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 = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + if(s(ss, ci).length > 0){ + r[++ri] = ci; + } + } + return r; + }, + + "next" : function(c, ss){ + var is = Ext.DomQuery.is; + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + var n = next(ci); + if(n && is(n, ss)){ + r[++ri] = ci; + } + } + return r; + }, + + "prev" : function(c, ss){ + var is = Ext.DomQuery.is; + var r = [], ri = -1; + for(var i = 0, ci; ci = c[i]; i++){ + var n = prev(ci); + if(n && is(n, ss)){ + r[++ri] = ci; + } + } + return r; + } + } + }; +}(); + + +Ext.query = Ext.DomQuery.select; + + +Ext.util.Observable = function(){ + if(this.listeners){ + this.on(this.listeners); + delete this.listeners; + } +}; +Ext.util.Observable.prototype = { + + fireEvent : function(){ + 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(eventName, fn, scope, o){ + if(typeof eventName == "object"){ + o = eventName; + for(var e in o){ + if(this.filterOptRe.test(e)){ + continue; + } + if(typeof o[e] == "function"){ + this.addListener(e, o[e], o.scope, o); + }else{ + this.addListener(e, o[e].fn, o[e].scope, o[e]); + } + } + return; + } + o = (!o || typeof o == "boolean") ? {} : o; + eventName = eventName.toLowerCase(); + var ce = this.events[eventName] || true; + if(typeof ce == "boolean"){ + ce = new Ext.util.Event(this, eventName); + this.events[eventName] = ce; + } + ce.addListener(fn, scope, o); + }, + + + removeListener : function(eventName, fn, scope){ + var ce = this.events[eventName.toLowerCase()]; + if(typeof ce == "object"){ + ce.removeListener(fn, scope); + } + }, + + + purgeListeners : function(){ + for(var evt in this.events){ + if(typeof this.events[evt] == "object"){ + this.events[evt].clearListeners(); + } + } + }, + + relayEvents : function(o, events){ + var createHandler = function(ename){ + return function(){ + return this.fireEvent.apply(this, Ext.combine(ename, Array.prototype.slice.call(arguments, 0))); + }; + }; + for(var i = 0, len = events.length; i < len; i++){ + var ename = events[i]; + if(!this.events[ename]){ this.events[ename] = true; }; + o.on(ename, createHandler(ename), this); + } + }, + + + addEvents : function(o){ + if(!this.events){ + this.events = {}; + } + Ext.applyIf(this.events, o); + }, + + + hasListener : function(eventName){ + var e = this.events[eventName]; + 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, scope){ + o.fireEvent = o.fireEvent.createInterceptor(fn, scope); +}; + + +Ext.util.Observable.releaseCapture = function(o){ + o.fireEvent = Ext.util.Observable.prototype.fireEvent; +}; + +(function(){ + + var createBuffered = function(h, o, scope){ + var task = new Ext.util.DelayedTask(); + return function(){ + task.delay(o.buffer, h, scope, Array.prototype.slice.call(arguments, 0)); + }; + }; + + var createSingle = function(h, e, fn, scope){ + return function(){ + e.removeListener(fn, scope); + return h.apply(scope, arguments); + }; + }; + + var createDelayed = function(h, o, scope){ + return function(){ + var args = Array.prototype.slice.call(arguments, 0); + setTimeout(function(){ + h.apply(scope, args); + }, o.delay || 10); + }; + }; + + Ext.util.Event = function(obj, name){ + this.name = name; + this.obj = obj; + this.listeners = []; + }; + + Ext.util.Event.prototype = { + addListener : function(fn, scope, options){ + var o = options || {}; + scope = scope || this.obj; + if(!this.isListening(fn, scope)){ + var l = {fn: fn, scope: scope, options: o}; + var h = fn; + if(o.delay){ + h = createDelayed(h, o, scope); + } + if(o.single){ + h = createSingle(h, this, fn, scope); + } + if(o.buffer){ + h = createBuffered(h, o, scope); + } + l.fireFn = h; + if(!this.firing){ this.listeners.push(l); + }else{ + this.listeners = this.listeners.slice(0); + this.listeners.push(l); + } + } + }, + + findListener : function(fn, scope){ + scope = scope || this.obj; + var ls = this.listeners; + for(var i = 0, len = ls.length; i < len; i++){ + var l = ls[i]; + if(l.fn == fn && l.scope == scope){ + return i; + } + } + return -1; + }, + + isListening : function(fn, scope){ + return this.findListener(fn, scope) != -1; + }, + + removeListener : function(fn, scope){ + var index; + if((index = this.findListener(fn, scope)) != -1){ + if(!this.firing){ + this.listeners.splice(index, 1); + }else{ + this.listeners = this.listeners.slice(0); + this.listeners.splice(index, 1); + } + return true; + } + return false; + }, + + clearListeners : function(){ + this.listeners = []; + }, + + fire : function(){ + var ls = this.listeners, scope, len = ls.length; + if(len > 0){ + this.firing = true; + var args = Array.prototype.slice.call(arguments, 0); + for(var i = 0; i < len; i++){ + var l = ls[i]; + if(l.fireFn.apply(l.scope||this.obj||window, arguments) === false){ + this.firing = false; + return false; + } + } + this.firing = false; + } + return true; + } + }; +})(); + +Ext.EventManager = function(){ + var docReadyEvent, docReadyProcId, docReadyState = false; + var resizeEvent, resizeTask, textEvent, textSize; + var E = Ext.lib.Event; + var D = Ext.lib.Dom; + + + var fireDocReady = function(){ + if(!docReadyState){ + docReadyState = true; + Ext.isReady = true; + if(docReadyProcId){ + clearInterval(docReadyProcId); + } + if(Ext.isGecko || Ext.isOpera) { + document.removeEventListener("DOMContentLoaded", fireDocReady, false); + } + if(Ext.isIE){ + var defer = document.getElementById("ie-deferred-loader"); + if(defer){ + defer.onreadystatechange = null; + defer.parentNode.removeChild(defer); + } + } + if(docReadyEvent){ + docReadyEvent.fire(); + docReadyEvent.clearListeners(); + } + } + }; + + var initDocReady = function(){ + docReadyEvent = new Ext.util.Event(); + if(Ext.isGecko || Ext.isOpera) { + document.addEventListener("DOMContentLoaded", fireDocReady, false); + }else if(Ext.isIE){ + document.write(""); + var defer = document.getElementById("ie-deferred-loader"); + defer.onreadystatechange = function(){ + if(this.readyState == "complete"){ + fireDocReady(); + } + }; + }else if(Ext.isSafari){ + docReadyProcId = setInterval(function(){ + var rs = document.readyState; + if(rs == "complete") { + fireDocReady(); + } + }, 10); + } + + E.on(window, "load", fireDocReady); + }; + + var createBuffered = function(h, o){ + var task = new Ext.util.DelayedTask(h); + return function(e){ + + e = new Ext.EventObjectImpl(e); + task.delay(o.buffer, h, null, [e]); + }; + }; + + var createSingle = function(h, el, ename, fn){ + return function(e){ + Ext.EventManager.removeListener(el, ename, fn); + h(e); + }; + }; + + var createDelayed = function(h, o){ + return function(e){ + + e = new Ext.EventObjectImpl(e); + setTimeout(function(){ + h(e); + }, o.delay || 10); + }; + }; + + var listen = function(element, ename, opt, fn, scope){ + var o = (!opt || typeof opt == "boolean") ? {} : opt; + fn = fn || o.fn; scope = scope || o.scope; + var el = Ext.getDom(element); + if(!el){ + throw "Error listening for \"" + ename + '\". Element "' + element + '" doesn\'t exist.'; + } + 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(scope || el, e, t, o); + }; + if(o.delay){ + h = createDelayed(h, o); + } + if(o.single){ + h = createSingle(h, el, ename, fn); + } + if(o.buffer){ + h = createBuffered(h, o); + } + fn._handlers = fn._handlers || []; + fn._handlers.push([Ext.id(el), ename, h]); + + E.on(el, ename, h); + if(ename == "mousewheel" && el.addEventListener){ + el.addEventListener("DOMMouseScroll", h, false); + E.on(window, 'unload', function(){ + el.removeEventListener("DOMMouseScroll", h, false); + }); + } + if(ename == "mousedown" && el == document){ + Ext.EventManager.stoppedMouseDownEvent.addListener(h); + } + return h; + }; + + var stopListening = function(el, ename, fn){ + var id = Ext.id(el), hds = fn._handlers, hd = fn; + if(hds){ + for(var i = 0, len = hds.length; i < len; i++){ + var h = hds[i]; + if(h[0] == id && h[1] == ename){ + hd = h[2]; + hds.splice(i, 1); + break; + } + } + } + E.un(el, ename, hd); + el = Ext.getDom(el); + if(ename == "mousewheel" && el.addEventListener){ + el.removeEventListener("DOMMouseScroll", hd, false); + } + if(ename == "mousedown" && el == document){ + Ext.EventManager.stoppedMouseDownEvent.removeListener(hd); + } + }; + + var propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/; + var pub = { + + + wrap : function(fn, scope, override){ + return function(e){ + Ext.EventObject.setEvent(e); + fn.call(override ? scope || window : window, Ext.EventObject, scope); + }; + }, + + + addListener : function(element, eventName, fn, scope, options){ + if(typeof eventName == "object"){ + var o = eventName; + for(var e in o){ + if(propRe.test(e)){ + continue; + } + if(typeof o[e] == "function"){ + + listen(element, e, o, o[e], o.scope); + }else{ + + listen(element, e, o[e]); + } + } + return; + } + return listen(element, eventName, options, fn, scope); + }, + + + removeListener : function(element, eventName, fn){ + return stopListening(element, eventName, fn); + }, + + + onDocumentReady : function(fn, scope, options){ + if(docReadyState){ + docReadyEvent.addListener(fn, scope, options); + docReadyEvent.fire(); + docReadyEvent.clearListeners(); + return; + } + if(!docReadyEvent){ + initDocReady(); + } + docReadyEvent.addListener(fn, scope, options); + }, + + + onWindowResize : function(fn, scope, options){ + if(!resizeEvent){ + resizeEvent = new Ext.util.Event(); + resizeTask = new Ext.util.DelayedTask(function(){ + resizeEvent.fire(D.getViewWidth(), D.getViewHeight()); + }); + E.on(window, "resize", function(){ + if(Ext.isIE){ + resizeTask.delay(50); + }else{ + resizeEvent.fire(D.getViewWidth(), D.getViewHeight()); + } + }); + } + resizeEvent.addListener(fn, scope, options); + }, + + + onTextResize : function(fn, scope, options){ + if(!textEvent){ + textEvent = new Ext.util.Event(); + var textEl = new Ext.Element(document.createElement('div')); + textEl.dom.className = 'x-text-resize'; + textEl.dom.innerHTML = 'X'; + textEl.appendTo(document.body); + textSize = textEl.dom.offsetHeight; + setInterval(function(){ + if(textEl.dom.offsetHeight != textSize){ + textEvent.fire(textSize, textSize = textEl.dom.offsetHeight); + } + }, this.textResizeInterval); + } + textEvent.addListener(fn, scope, options); + }, + + + removeResizeListener : function(fn, scope){ + if(resizeEvent){ + resizeEvent.removeListener(fn, scope); + } + }, + + + fireResize : function(){ + if(resizeEvent){ + resizeEvent.fire(D.getViewWidth(), D.getViewHeight()); + } + }, + + ieDeferSrc : false, + + textResizeInterval : 50 + }; + + pub.on = pub.addListener; + pub.un = pub.removeListener; + + pub.stoppedMouseDownEvent = new Ext.util.Event(); + return pub; +}(); + +Ext.onReady = Ext.EventManager.onDocumentReady; + +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.isMac){ + cls.push("ext-mac"); + } + if(Ext.isLinux){ + cls.push("ext-linux"); + } + if(Ext.isBorderBox){ + cls.push('ext-border-box'); + } + if(Ext.isStrict){ + var p = bd.dom.parentNode; + if(p){ + p.className += ' ext-strict'; + } + } + bd.addClass(cls.join(' ')); +}); + + +Ext.EventObject = function(){ + + var E = Ext.lib.Event; + + + var safariKeys = { + 63234 : 37, + 63235 : 39, + 63232 : 38, + 63233 : 40, + 63276 : 33, + 63277 : 34, + 63272 : 46, + 63273 : 36, + 63275 : 35 + }; + + + var btnMap = 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 ? btnMap[e.button] : (e.which ? e.which-1 : -1); + if(e.type == 'click' && this.button == -1){ + this.button = 0; + } + this.type = e.type; + 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 ? (safariKeys[k] || k) : k; + return (k >= 33 && k <= 40) || k == this.RETURN || k == this.TAB || k == this.ESC; + }, + + isSpecialKey : function(){ + var k = this.keyCode; + return (this.type == 'keypress' && this.ctrlKey) || 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.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 ? (safariKeys[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(selector, maxDepth, returnEl){ + return selector ? Ext.fly(this.target).findParent(selector, maxDepth, returnEl) : this.target; + }, + + getRelatedTarget : function(){ + if(this.browserEvent){ + return E.getRelatedTarget(this.browserEvent); + } + return null; + }, + + + getWheelDelta : function(){ + var e = this.browserEvent; + var delta = 0; + if(e.wheelDelta){ + delta = e.wheelDelta/120; + }else if(e.detail){ + delta = -e.detail/3; + } + return delta; + }, + + + hasModifier : function(){ + return !!((this.ctrlKey || this.altKey) || this.shiftKey); + }, + + + within : function(el, related){ + var t = this[related ? "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 propCache = {}; +var camelRe = /(-[a-z])/gi; +var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); }; +var view = document.defaultView; + +Ext.Element = function(element, forceNew){ + var dom = typeof element == "string" ? + document.getElementById(element) : element; + if(!dom){ + return null; + } + var id = dom.id; + if(forceNew !== true && id && Ext.Element.cache[id]){ + return Ext.Element.cache[id]; + } + + + this.dom = dom; + + + this.id = id || Ext.id(dom); +}; + +var El = Ext.Element; + +El.prototype = { + + originalDisplay : "", + + visibilityMode : 1, + + defaultUnit : "px", + + setVisibilityMode : function(visMode){ + this.visibilityMode = visMode; + return this; + }, + + enableDisplayMode : function(display){ + this.setVisibilityMode(El.DISPLAY); + if(typeof display != "undefined") this.originalDisplay = display; + return this; + }, + + + findParent : function(simpleSelector, maxDepth, returnEl){ + var p = this.dom, b = document.body, depth = 0, dq = Ext.DomQuery, stopEl; + maxDepth = maxDepth || 50; + if(typeof maxDepth != "number"){ + stopEl = Ext.getDom(maxDepth); + maxDepth = 10; + } + while(p && p.nodeType == 1 && depth < maxDepth && p != b && p != stopEl){ + if(dq.is(p, simpleSelector)){ + return returnEl ? Ext.get(p) : p; + } + depth++; + p = p.parentNode; + } + return null; + }, + + + + findParentNode : function(simpleSelector, maxDepth, returnEl){ + var p = Ext.fly(this.dom.parentNode, '_internal'); + return p ? p.findParent(simpleSelector, maxDepth, returnEl) : null; + }, + + + up : function(simpleSelector, maxDepth){ + return this.findParentNode(simpleSelector, maxDepth, true); + }, + + + + + is : function(simpleSelector){ + return Ext.DomQuery.is(this.dom, simpleSelector); + }, + + + animate : function(args, duration, onComplete, easing, animType){ + this.anim(args, {duration: duration, callback: onComplete, easing: easing}, animType); + return this; + }, + + + anim : function(args, opt, animType, defaultDur, defaultEase, cb){ + animType = animType || 'run'; + opt = opt || {}; + var anim = Ext.lib.Anim[animType]( + this.dom, args, + (opt.duration || defaultDur) || .35, + (opt.easing || defaultEase) || 'easeOut', + function(){ + Ext.callback(cb, this); + Ext.callback(opt.callback, opt.scope || this, [this, opt]); + }, + this + ); + opt.anim = anim; + return anim; + }, + + + 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(forceReclean){ + if(this.isCleaned && forceReclean !== 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); + var d = el.dom; + var restorePos = false; + if(el.getStyle('position') == 'static'){ + el.position('relative'); + restorePos = 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(restorePos){ + el.position('static'); + } + return [x, y]; + }, + + + scrollIntoView : function(container, hscroll){ + var c = Ext.getDom(container) || 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(hscroll !== false){ + if(l < cl){ + c.scrollLeft = l; + }else if(r > cr){ + c.scrollLeft = r-c.clientWidth; + } + } + return this; + }, + + + scrollChildIntoView : function(child, hscroll){ + Ext.fly(child, '_scrollChildIntoView').scrollIntoView(this, hscroll); + }, + + + autoHeight : function(animate, duration, onComplete, easing){ + var oldHeight = this.getHeight(); + this.clip(); + this.setHeight(1); + setTimeout(function(){ + var height = parseInt(this.dom.scrollHeight, 10); + if(!animate){ + this.setHeight(height); + this.unclip(); + if(typeof onComplete == "function"){ + onComplete(); + } + }else{ + this.setHeight(oldHeight); + this.setHeight(height, animate, duration, function(){ + this.unclip(); + if(typeof onComplete == "function") onComplete(); + }.createDelegate(this), easing); + } + }.createDelegate(this), 0); + return this; + }, + + + contains : function(el){ + if(!el){return false;} + return D.isAncestor(this.dom, el.dom ? el.dom : el); + }, + + + isVisible : function(deep) { + var vis = !(this.getStyle("visibility") == "hidden" || this.getStyle("display") == "none"); + if(deep !== 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(selector, unique){ + return El.select(selector, unique, this.dom); + }, + + + query : function(selector, unique){ + return Ext.DomQuery.select(selector, this.dom); + }, + + + child : function(selector, returnDom){ + var n = Ext.DomQuery.selectNode(selector, this.dom); + return returnDom ? n : Ext.get(n); + }, + + + down : function(selector, returnDom){ + var n = Ext.DomQuery.selectNode(" > " + selector, this.dom); + return returnDom ? n : Ext.get(n); + }, + + + initDD : function(group, config, overrides){ + var dd = new Ext.dd.DD(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + }, + + + initDDProxy : function(group, config, overrides){ + var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + }, + + + initDDTarget : function(group, config, overrides){ + var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config); + return Ext.apply(dd, overrides); + }, + + + setVisible : function(visible, animate){ + if(!animate || !A){ + if(this.visibilityMode == El.DISPLAY){ + this.setDisplayed(visible); + }else{ + this.fixDisplay(); + this.dom.style.visibility = visible ? "visible" : "hidden"; + } + }else{ + + var dom = this.dom; + var visMode = this.visibilityMode; + if(visible){ + this.setOpacity(.01); + this.setVisible(true); + } + this.anim({opacity: { to: (visible?1:0) }}, + this.preanim(arguments, 1), + null, .35, 'easeIn', function(){ + if(!visible){ + if(visMode == 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(animate){ + this.setVisible(!this.isVisible(), this.preanim(arguments, 0)); + return this; + }, + + + setDisplayed : function(value) { + if(typeof value == "boolean"){ + value = value ? this.originalDisplay : "none"; + } + this.setStyle("display", value); + return this; + }, + + + focus : function() { + try{ + this.dom.focus(); + }catch(e){} + return this; + }, + + + blur : function() { + try{ + this.dom.blur(); + }catch(e){} + return this; + }, + + + addClass : function(className){ + if(className instanceof Array){ + for(var i = 0, len = className.length; i < len; i++) { + this.addClass(className[i]); + } + }else{ + if(className && !this.hasClass(className)){ + this.dom.className = this.dom.className + " " + className; + } + } + return this; + }, + + + radioClass : function(className){ + var siblings = this.dom.parentNode.childNodes; + for(var i = 0; i < siblings.length; i++) { + var s = siblings[i]; + if(s.nodeType == 1){ + Ext.get(s).removeClass(className); + } + } + this.addClass(className); + return this; + }, + + + removeClass : function(className){ + if(!className || !this.dom.className){ + return this; + } + if(className instanceof Array){ + for(var i = 0, len = className.length; i < len; i++) { + this.removeClass(className[i]); + } + }else{ + if(this.hasClass(className)){ + var re = this.classReCache[className]; + if (!re) { + re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)', "g"); + this.classReCache[className] = re; + } + this.dom.className = + this.dom.className.replace(re, " "); + } + } + return this; + }, + + + classReCache: {}, + + + toggleClass : function(className){ + if(this.hasClass(className)){ + this.removeClass(className); + }else{ + this.addClass(className); + } + return this; + }, + + + hasClass : function(className){ + return className && (' '+this.dom.className+' ').indexOf(' '+className+' ') != -1; + }, + + + replaceClass : function(oldClassName, newClassName){ + this.removeClass(oldClassName); + this.addClass(newClassName); + 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 view && view.getComputedStyle ? + function(prop){ + var el = this.dom, v, cs, camel; + if(prop == 'float'){ + prop = "cssFloat"; + } + if(v = el.style[prop]){ + return v; + } + if(cs = view.getComputedStyle(el, "")){ + if(!(camel = propCache[prop])){ + camel = propCache[prop] = prop.replace(camelRe, camelFn); + } + return cs[camel]; + } + return null; + } : + function(prop){ + var el = this.dom, v, cs, camel; + if(prop == 'opacity'){ + if(typeof el.style.filter == 'string'){ + var m = el.style.filter.match(/alpha\(opacity=(.*)\)/i); + if(m){ + var fv = parseFloat(m[1]); + if(!isNaN(fv)){ + return fv ? fv / 100 : 0; + } + } + } + return 1; + }else if(prop == 'float'){ + prop = "styleFloat"; + } + if(!(camel = propCache[prop])){ + camel = propCache[prop] = prop.replace(camelRe, camelFn); + } + if(v = el.style[camel]){ + return v; + } + if(cs = el.currentStyle){ + return cs[camel]; + } + return null; + }; + }(), + + + setStyle : function(prop, value){ + if(typeof prop == "string"){ + var camel; + if(!(camel = propCache[prop])){ + camel = propCache[prop] = prop.replace(camelRe, camelFn); + } + if(camel == 'opacity') { + this.setOpacity(value); + }else{ + this.dom.style[camel] = value; + } + }else{ + for(var style in prop){ + if(typeof prop[style] != "function"){ + this.setStyle(style, prop[style]); + } + } + } + return this; + }, + + + applyStyles : function(style){ + Ext.DomHelper.applyStyles(this.dom, style); + 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, animate){ + if(!animate || !A){ + D.setX(this.dom, x); + }else{ + this.setXY([x, this.getY()], this.preanim(arguments, 1)); + } + return this; + }, + + + setY : function(y, animate){ + if(!animate || !A){ + D.setY(this.dom, y); + }else{ + this.setXY([this.getX(), y], this.preanim(arguments, 1)); + } + return this; + }, + + + setLeft : function(left){ + this.setStyle("left", this.addUnits(left)); + return this; + }, + + + setTop : function(top){ + this.setStyle("top", this.addUnits(top)); + return this; + }, + + + setRight : function(right){ + this.setStyle("right", this.addUnits(right)); + return this; + }, + + + setBottom : function(bottom){ + this.setStyle("bottom", this.addUnits(bottom)); + return this; + }, + + + setXY : function(pos, animate){ + if(!animate || !A){ + D.setXY(this.dom, pos); + }else{ + this.anim({points: {to: pos}}, this.preanim(arguments, 1), 'motion'); + } + return this; + }, + + + setLocation : function(x, y, animate){ + this.setXY([x, y], this.preanim(arguments, 2)); + return this; + }, + + + moveTo : function(x, y, animate){ + this.setXY([x, y], this.preanim(arguments, 2)); + return this; + }, + + + getRegion : function(){ + return D.getRegion(this.dom); + }, + + + getHeight : function(contentHeight){ + var h = this.dom.offsetHeight || 0; + return contentHeight !== true ? h : h-this.getBorderWidth("tb")-this.getPadding("tb"); + }, + + + getWidth : function(contentWidth){ + var w = this.dom.offsetWidth || 0; + return contentWidth !== 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(contentSize){ + return {width: this.getWidth(contentSize), height: this.getHeight(contentSize)}; + }, + + + getViewSize : function(){ + var d = this.dom, doc = document, aw = 0, ah = 0; + if(d == doc || d == doc.body){ + return {width : D.getViewWidth(), height: D.getViewHeight()}; + }else{ + return { + width : d.clientWidth, + height: d.clientHeight + }; + } + }, + + + getValue : function(asNumber){ + return asNumber ? parseInt(this.dom.value, 10) : this.dom.value; + }, + + + adjustWidth : function(width){ + if(typeof width == "number"){ + if(this.autoBoxAdjust && !this.isBorderBox()){ + width -= (this.getBorderWidth("lr") + this.getPadding("lr")); + } + if(width < 0){ + width = 0; + } + } + return width; + }, + + + adjustHeight : function(height){ + if(typeof height == "number"){ + if(this.autoBoxAdjust && !this.isBorderBox()){ + height -= (this.getBorderWidth("tb") + this.getPadding("tb")); + } + if(height < 0){ + height = 0; + } + } + return height; + }, + + + setWidth : function(width, animate){ + width = this.adjustWidth(width); + if(!animate || !A){ + this.dom.style.width = this.addUnits(width); + }else{ + this.anim({width: {to: width}}, this.preanim(arguments, 1)); + } + return this; + }, + + + setHeight : function(height, animate){ + height = this.adjustHeight(height); + if(!animate || !A){ + this.dom.style.height = this.addUnits(height); + }else{ + this.anim({height: {to: height}}, this.preanim(arguments, 1)); + } + return this; + }, + + + setSize : function(width, height, animate){ + if(typeof width == "object"){ + height = width.height; width = width.width; + } + width = this.adjustWidth(width); height = this.adjustHeight(height); + if(!animate || !A){ + this.dom.style.width = this.addUnits(width); + this.dom.style.height = this.addUnits(height); + }else{ + this.anim({width: {to: width}, height: {to: height}}, this.preanim(arguments, 2)); + } + return this; + }, + + + setBounds : function(x, y, width, height, animate){ + if(!animate || !A){ + this.setSize(width, height); + this.setLocation(x, y); + }else{ + width = this.adjustWidth(width); height = this.adjustHeight(height); + this.anim({points: {to: [x, y]}, width: {to: width}, height: {to: height}}, + this.preanim(arguments, 4), 'motion'); + } + return this; + }, + + + setRegion : function(region, animate){ + this.setBounds(region.left, region.top, region.right-region.left, region.bottom-region.top, this.preanim(arguments, 1)); + return this; + }, + + + addListener : function(eventName, fn, scope, options){ + Ext.EventManager.on(this.dom, eventName, fn, scope || this, options); + }, + + + removeListener : function(eventName, fn){ + Ext.EventManager.removeListener(this.dom, eventName, fn); + return this; + }, + + + removeAllListeners : function(){ + E.purgeElement(this.dom); + return this; + }, + + relayEvent : function(eventName, observable){ + this.on(eventName, function(e){ + observable.fireEvent(eventName, e); + }); + }, + + + setOpacity : function(opacity, animate){ + if(!animate || !A){ + var s = this.dom.style; + if(Ext.isIE){ + s.zoom = 1; + s.filter = (s.filter || '').replace(/alpha\([^\)]*\)/gi,"") + + (opacity == 1 ? "" : "alpha(opacity=" + opacity * 100 + ")"); + }else{ + s.opacity = opacity; + } + }else{ + this.anim({opacity: {to: opacity}}, this.preanim(arguments, 1), null, .35, 'easeIn'); + } + return this; + }, + + + getLeft : function(local){ + if(!local){ + return this.getX(); + }else{ + return parseInt(this.getStyle("left"), 10) || 0; + } + }, + + + getRight : function(local){ + if(!local){ + return this.getX() + this.getWidth(); + }else{ + return (this.getLeft(true) + this.getWidth()) || 0; + } + }, + + + getTop : function(local) { + if(!local){ + return this.getY(); + }else{ + return parseInt(this.getStyle("top"), 10) || 0; + } + }, + + + getBottom : function(local){ + if(!local){ + return this.getY() + this.getHeight(); + }else{ + return (this.getTop(true) + this.getHeight()) || 0; + } + }, + + + position : function(pos, zIndex, x, y){ + if(!pos){ + if(this.getStyle('position') == 'static'){ + this.setStyle('position', 'relative'); + } + }else{ + this.setStyle("position", pos); + } + if(zIndex){ + this.setStyle("z-index", zIndex); + } + 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(value){ + value = value ||''; + this.setStyle({ + "left": value, + "right": value, + "top": value, + "bottom": value, + "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(side){ + return this.addStyles(side, El.borders); + }, + + + getPadding : function(side){ + return this.addStyles(side, 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(left, top){ + this.dom.style.left = this.addUnits(left); + this.dom.style.top = this.addUnits(top); + return this; + }, + + + move : function(direction, distance, animate){ + var xy = this.getXY(); + direction = direction.toLowerCase(); + switch(direction){ + case "l": + case "left": + this.moveTo(xy[0]-distance, xy[1], this.preanim(arguments, 2)); + break; + case "r": + case "right": + this.moveTo(xy[0]+distance, xy[1], this.preanim(arguments, 2)); + break; + case "t": + case "top": + case "up": + this.moveTo(xy[0], xy[1]-distance, this.preanim(arguments, 2)); + break; + case "b": + case "bottom": + case "down": + this.moveTo(xy[0], xy[1]+distance, 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(anchor, local, 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((anchor || "tl").toLowerCase()){ + case "c": + x = r(w*.5); + y = r(h*.5); + break; + case "t": + x = r(w*.5); + y = 0; + break; + case "l": + x = 0; + y = r(h*.5); + break; + case "r": + x = w; + y = r(h*.5); + break; + case "b": + x = r(w*.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(local === 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); + var 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]; + + + + 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 swapY = ((p1y=="t" && p2y=="b") || (p1y=="b" && p2y=="t")); + var swapX = ((p1x=="r" && p2x=="l") || (p1x=="l" && p2x=="r")); + + var doc = document; + var scrollX = (doc.documentElement.scrollLeft || doc.body.scrollLeft || 0)+5; + var scrollY = (doc.documentElement.scrollTop || doc.body.scrollTop || 0)+5; + + if((x+w) > dw + scrollX){ + x = swapX ? r.left-w : dw+scrollX-w; + } + if(x < scrollX){ + x = swapX ? r.right : scrollX; + } + if((y+h) > dh + scrollY){ + y = swapY ? r.top-h : dh+scrollY-h; + } + if (y < scrollY){ + y = swapY ? r.bottom : scrollY; + } + } + return [x,y]; + }, + + + getConstrainToXY : function(){ + var os = {top:0, left:0, bottom:0, right: 0}; + + return function(el, local, offsets, proposedXY){ + el = Ext.get(el); + offsets = offsets ? Ext.applyIf(offsets, os) : os; + + var vw, vh, vx = 0, vy = 0; + if(el.dom == document.body || el.dom == document){ + vw = Ext.lib.Dom.getViewWidth(); + vh = Ext.lib.Dom.getViewHeight(); + }else{ + vw = el.dom.clientWidth; + vh = el.dom.clientHeight; + if(!local){ + var vxy = el.getXY(); + vx = vxy[0]; + vy = vxy[1]; + } + } + + var s = el.getScroll(); + + vx += offsets.left + s.left; + vy += offsets.top + s.top; + + vw -= offsets.right; + vh -= offsets.bottom; + + var vr = vx+vw; + var vb = vy+vh; + + var xy = proposedXY || (!local ? this.getXY() : [this.getLeft(true), this.getTop(true)]); + var x = xy[0], y = xy[1]; + var w = this.dom.offsetWidth, h = this.dom.offsetHeight; + + + var moved = false; + + + if((x + w) > vr){ + x = vr - w; + moved = true; + } + if((y + h) > vb){ + y = vb - h; + moved = true; + } + + if(x < vx){ + x = vx; + moved = true; + } + if(y < vy){ + y = vy; + moved = true; + } + return moved ? [x, y] : false; + }; + }(), + + + adjustForConstraints : function(xy, parent, offsets){ + return this.getConstrainToXY(parent || document, false, offsets, xy) || xy; + }, + + + alignTo : function(element, position, offsets, animate){ + var xy = this.getAlignToXY(element, position, offsets); + this.setXY(xy, this.preanim(arguments, 3)); + return this; + }, + + + anchorTo : function(el, alignment, offsets, animate, monitorScroll, callback){ + var action = function(){ + this.alignTo(el, alignment, offsets, animate); + Ext.callback(callback, this); + }; + Ext.EventManager.onWindowResize(action, this); + var tm = typeof monitorScroll; + if(tm != 'undefined'){ + Ext.EventManager.on(window, 'scroll', action, this, + {buffer: tm == 'number' ? monitorScroll : 50}); + } + action.call(this); + return this; + }, + + clearOpacity : function(){ + if (window.ActiveXObject) { + if(typeof this.dom.style.filter == 'string' && (/alpha/i).test(this.dom.style.filter)){ + this.dom.style.filter = ""; + } + } else { + this.dom.style.opacity = ""; + this.dom.style["-moz-opacity"] = ""; + this.dom.style["-khtml-opacity"] = ""; + } + return this; + }, + + + hide : function(animate){ + this.setVisible(false, this.preanim(arguments, 0)); + return this; + }, + + + show : function(animate){ + 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 changed = []; + 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'){ + changed.push({el: p, visibility: pe.getStyle("visibility")}); + p.style.visibility = "hidden"; + p.style.display = "block"; + } + p = p.parentNode; + } + this._measureChanged = changed; + return this; + + }, + + + endMeasure : function(){ + var changed = this._measureChanged; + if(changed){ + for(var i = 0, len = changed.length; i < len; i++) { + var r = changed[i]; + r.el.style.visibility = r.visibility; + r.el.style.display = "none"; + } + this._measureChanged = null; + } + return this; + }, + + + update : function(html, loadScripts, callback){ + if(typeof html == "undefined"){ + html = ""; + } + if(loadScripts !== true){ + this.dom.innerHTML = html; + if(typeof callback == "function"){ + callback(); + } + return this; + } + var id = Ext.id(); + var dom = this.dom; + + html += ''; + + E.onAvailable(id, function(){ + var hd = document.getElementsByTagName("head")[0]; + var re = /(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig; + var srcRe = /\ssrc=([\'\"])(.*?)\1/i; + var typeRe = /\stype=([\'\"])(.*?)\1/i; + + var match; + while(match = re.exec(html)){ + var attrs = match[1]; + var srcMatch = attrs ? attrs.match(srcRe) : false; + if(srcMatch && srcMatch[2]){ + var s = document.createElement("script"); + s.src = srcMatch[2]; + var typeMatch = attrs.match(typeRe); + if(typeMatch && typeMatch[2]){ + s.type = typeMatch[2]; + } + hd.appendChild(s); + }else if(match[2] && match[2].length > 0){ + if(window.execScript) { + window.execScript(match[2]); + } else { + window.eval(match[2]); + } + } + } + var el = document.getElementById(id); + if(el){el.parentNode.removeChild(el);} + if(typeof callback == "function"){ + callback(); + } + }); + dom.innerHTML = html.replace(/(?:)((\n|\r|.)*?)(?:<\/script>)/ig, ""); + 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(centerIn){ + this.alignTo(centerIn || document, 'c-c'); + return this; + }, + + + isBorderBox : function(){ + return noBoxAdjust[this.dom.tagName.toLowerCase()] || Ext.isBorderBox; + }, + + + getBox : function(contentBox, local){ + var xy; + if(!local){ + xy = this.getXY(); + }else{ + var left = parseInt(this.getStyle("left"), 10) || 0; + var top = parseInt(this.getStyle("top"), 10) || 0; + xy = [left, top]; + } + var el = this.dom, w = el.offsetWidth, h = el.offsetHeight, bx; + if(!contentBox){ + bx = {x: xy[0], y: xy[1], 0: xy[0], 1: xy[1], width: w, height: h}; + }else{ + var l = this.getBorderWidth("l")+this.getPadding("l"); + var r = this.getBorderWidth("r")+this.getPadding("r"); + var t = this.getBorderWidth("t")+this.getPadding("t"); + var b = this.getBorderWidth("b")+this.getPadding("b"); + bx = {x: xy[0]+l, y: xy[1]+t, 0: xy[0]+l, 1: xy[1]+t, width: w-(l+r), height: h-(t+b)}; + } + bx.right = bx.x + bx.width; + bx.bottom = bx.y + bx.height; + return bx; + }, + + + getFrameWidth : function(sides, onlyContentBox){ + return onlyContentBox && Ext.isBorderBox ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides)); + }, + + + setBox : function(box, adjust, animate){ + var w = box.width, h = box.height; + if((adjust && !this.autoBoxAdjust) && !this.isBorderBox()){ + w -= (this.getBorderWidth("lr") + this.getPadding("lr")); + h -= (this.getBorderWidth("tb") + this.getPadding("tb")); + } + this.setBounds(box.x, box.y, w, h, this.preanim(arguments, 2)); + return this; + }, + + + repaint : function(){ + var dom = this.dom; + this.addClass("x-repaint"); + setTimeout(function(){ + Ext.get(dom).removeClass("x-repaint"); + }, 1); + return this; + }, + + + getMargins : function(side){ + if(!side){ + return { + top: parseInt(this.getStyle("margin-top"), 10) || 0, + left: parseInt(this.getStyle("margin-left"), 10) || 0, + bottom: parseInt(this.getStyle("margin-bottom"), 10) || 0, + right: parseInt(this.getStyle("margin-right"), 10) || 0 + }; + }else{ + return this.addStyles(side, El.margins); + } + }, + + + addStyles : function(sides, styles){ + var val = 0, v, w; + for(var i = 0, len = sides.length; i < len; i++){ + v = this.getStyle(styles[sides.charAt(i)]); + if(v){ + w = parseInt(v, 10); + if(w){ val += w; } + } + } + return val; + }, + + + createProxy : function(config, renderTo, matchBox){ + if(renderTo){ + renderTo = Ext.getDom(renderTo); + }else{ + renderTo = document.body; + } + config = typeof config == "object" ? + config : {tag : "div", cls: config}; + var proxy = Ext.DomHelper.append(renderTo, config, true); + if(matchBox){ + proxy.setBox(this.getBox()); + } + return proxy; + }, + + + mask : function(msg, msgCls){ + if(this.getStyle("position") == "static"){ + this.setStyle("position", "relative"); + } + if(!this._mask){ + this._mask = Ext.DomHelper.append(this.dom, {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, {cls:"ext-el-mask-msg", cn:{tag:'div'}}, true); + } + var mm = this._maskMsg; + mm.dom.className = msgCls ? "ext-el-mask-msg " + msgCls : "ext-el-mask-msg"; + mm.dom.firstChild.innerHTML = msg; + mm.setDisplayed(true); + mm.center(this); + } + if(Ext.isIE && !(Ext.isIE7 && Ext.isStrict) && this.getStyle('height') == 'auto'){ + this._mask.setHeight(this.getHeight()); + } + return this._mask; + }, + + + unmask : function(removeEl){ + if(this._mask){ + if(removeEl === 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 el = document.createElement('iframe'); + el.frameBorder = 'no'; + el.className = 'ext-shim'; + if(Ext.isIE && Ext.isSecure){ + el.src = Ext.SSL_SECURE_URL; + } + var shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom)); + shim.autoBoxAdjust = false; + return shim; + }, + + + remove : function(){ + if(this.dom.parentNode){ + this.dom.parentNode.removeChild(this.dom); + } + delete El.cache[this.dom.id]; + }, + + + addClassOnOver : function(className, preventFlicker){ + this.on("mouseover", function(){ + Ext.fly(this, '_internal').addClass(className); + }, this.dom); + var removeFn = function(e){ + if(preventFlicker !== true || !e.within(this, true)){ + Ext.fly(this, '_internal').removeClass(className); + } + }; + this.on("mouseout", removeFn, this.dom); + return this; + }, + + + addClassOnFocus : function(className){ + this.on("focus", function(){ + Ext.fly(this, '_internal').addClass(className); + }, this.dom); + this.on("blur", function(){ + Ext.fly(this, '_internal').removeClass(className); + }, this.dom); + return this; + }, + + addClassOnClick : function(className){ + var dom = this.dom; + this.on("mousedown", function(){ + Ext.fly(dom, '_internal').addClass(className); + var d = Ext.get(document); + var fn = function(){ + Ext.fly(dom, '_internal').removeClass(className); + d.removeListener("mouseup", fn); + }; + d.on("mouseup", fn); + }); + return this; + }, + + + swallowEvent : function(eventName, preventDefault){ + var fn = function(e){ + e.stopPropagation(); + if(preventDefault){ + e.preventDefault(); + } + }; + if(eventName instanceof Array){ + for(var i = 0, len = eventName.length; i < len; i++){ + this.on(eventName[i], fn); + } + return this; + } + this.on(eventName, fn); + return this; + }, + + + fitToParentDelegate : Ext.emptyFn, + + + fitToParent : function(monitorResize, targetParent) { + Ext.EventManager.removeResizeListener(this.fitToParentDelegate); + this.fitToParentDelegate = Ext.emptyFn; + if (monitorResize === true && !this.dom.parentNode) { + return; + } + var p = Ext.get(targetParent || this.dom.parentNode); + this.setSize(p.getComputedWidth() - p.getFrameWidth('lr'), p.getComputedHeight() - p.getFrameWidth('tb')); + if (monitorResize === true) { + this.fitToParentDelegate = this.fitToParent.createDelegate(this, [true, targetParent]); + Ext.EventManager.onWindowResize(this.fitToParentDelegate); + } + 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(config, insertBefore, returnDom){ + config = config || {tag:'div'}; + if(insertBefore){ + return Ext.DomHelper.insertBefore(insertBefore, config, returnDom !== true); + } + return Ext.DomHelper[!this.dom.firstChild ? 'overwrite' : 'append'](this.dom, config, returnDom !== 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, returnDom){ + el = el || {}; + if(typeof el == 'object' && !el.nodeType){ + return this.createChild(el, this.dom.firstChild, returnDom); + }else{ + el = Ext.getDom(el); + this.dom.insertBefore(el, this.dom.firstChild); + return !returnDom ? Ext.get(el) : el; + } + }, + + + insertSibling: function(el, where, returnDom){ + where = where ? where.toLowerCase() : 'before'; + el = el || {}; + var rt, refNode = where == 'before' ? this.dom : this.dom.nextSibling; + + if(typeof el == 'object' && !el.nodeType){ + if(where == 'after' && !this.dom.nextSibling){ + rt = Ext.DomHelper.append(this.dom.parentNode, el, !returnDom); + }else{ + rt = Ext.DomHelper[where == 'after' ? 'insertAfter' : 'insertBefore'](this.dom, el, !returnDom); + } + + }else{ + rt = this.dom.parentNode.insertBefore(Ext.getDom(el), + where == 'before' ? this.dom : this.dom.nextSibling); + if(!returnDom){ + rt = Ext.get(rt); + } + } + return rt; + }, + + + wrap: function(config, returnDom){ + if(!config){ + config = {tag: "div"}; + } + var newEl = Ext.DomHelper.insertBefore(this.dom, config, !returnDom); + newEl.dom ? newEl.dom.appendChild(this.dom) : newEl.appendChild(this.dom); + return newEl; + }, + + + replace: function(el){ + el = Ext.get(el); + this.insertBefore(el); + el.remove(); + return this; + }, + + + insertHtml : function(where, html, returnEl){ + var el = Ext.DomHelper.insertHtml(where, this.dom, html); + return returnEl ? Ext.get(el) : el; + }, + + + set : function(o, useSet){ + var el = this.dom; + useSet = typeof useSet == 'undefined' ? (el.setAttribute ? true : false) : useSet; + for(var attr in o){ + if(attr == "style" || typeof o[attr] == "function") continue; + if(attr=="cls"){ + el.className = o["cls"]; + }else{ + if(useSet) el.setAttribute(attr, o[attr]); + else el[attr] = o[attr]; + } + } + if(o.style){ + Ext.DomHelper.applyStyles(el, o.style); + } + return this; + }, + + + addKeyListener : function(key, fn, scope){ + var config; + if(typeof key != "object" || key instanceof Array){ + config = { + key: key, + fn: fn, + scope: scope + }; + }else{ + config = { + key : key.key, + shift : key.shift, + ctrl : key.ctrl, + alt : key.alt, + fn: fn, + scope: scope + }; + } + return new Ext.KeyMap(this, config); + }, + + + addKeyMap : function(config){ + return new Ext.KeyMap(this, config); + }, + + + isScrollable : function(){ + var dom = this.dom; + return dom.scrollHeight > dom.clientHeight || dom.scrollWidth > dom.clientWidth; + }, + + + + scrollTo : function(side, value, animate){ + var prop = side.toLowerCase() == "left" ? "scrollLeft" : "scrollTop"; + if(!animate || !A){ + this.dom[prop] = value; + }else{ + var to = prop == "scrollLeft" ? [value, this.dom.scrollTop] : [this.dom.scrollLeft, value]; + this.anim({scroll: {"to": to}}, this.preanim(arguments, 2), 'scroll'); + } + return this; + }, + + + scroll : function(direction, distance, animate){ + if(!this.isScrollable()){ + return; + } + var el = this.dom; + var l = el.scrollLeft, t = el.scrollTop; + var w = el.scrollWidth, h = el.scrollHeight; + var cw = el.clientWidth, ch = el.clientHeight; + direction = direction.toLowerCase(); + var scrolled = false; + var a = this.preanim(arguments, 2); + switch(direction){ + case "l": + case "left": + if(w - l > cw){ + var v = Math.min(l + distance, w-cw); + this.scrollTo("left", v, a); + scrolled = true; + } + break; + case "r": + case "right": + if(l > 0){ + var v = Math.max(l - distance, 0); + this.scrollTo("left", v, a); + scrolled = true; + } + break; + case "t": + case "top": + case "up": + if(t > 0){ + var v = Math.max(t - distance, 0); + this.scrollTo("top", v, a); + scrolled = true; + } + break; + case "b": + case "bottom": + case "down": + if(h - t > ch){ + var v = Math.min(t + distance, h-ch); + this.scrollTo("top", v, a); + scrolled = true; + } + break; + } + return scrolled; + }, + + + 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, defaultValue, prefix){ + var v = this.getStyle(attr); + if(!v || v == "transparent" || v == "inherit") { + return defaultValue; + } + var color = typeof prefix == "undefined" ? "#" : prefix; + 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; + } + color += h; + } + } else { + if(v.substr(0, 1) == "#"){ + if(v.length == 4) { + for(var i = 1; i < 4; i++){ + var c = v.charAt(i); + color += c + c; + } + }else if(v.length == 7){ + color += v.substr(1); + } + } + } + return(color.length > 5 ? color.toLowerCase() : defaultValue); + }, + + + boxWrap : function(cls){ + cls = cls || 'x-box'; + var el = Ext.get(this.insertHtml('beforeBegin', String.format('
      '+El.boxMarkup+'
      ', 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; + + +El.unitPattern = /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i; + + +El.addUnits = function(v, defaultUnit){ + if(v === "" || v == "auto"){ + return v; + } + if(v === undefined){ + return ''; + } + if(typeof v == "number" || !El.unitPattern.test(v)){ + return v + (defaultUnit || 'px'); + } + return v; +}; + + +El.boxMarkup = '
      '; + +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 docEl; + + +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 != docEl){ + 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(!docEl){ + var f = function(){}; + f.prototype = El.prototype; + docEl = new f(); + docEl.dom = document; + } + return docEl; + } + return null; +}; + + +El.uncache = function(el){ + for(var i = 0, a = arguments, len = a.length; i < len; i++) { + if(a[i]){ + delete El.cache[a[i].id || a[i]]; + } + } +}; + + + + +El.garbageCollect = function(){ + if(!Ext.enableGarbageCollector){ + clearInterval(El.collectorThread); + return; + } + for(var eid in El.cache){ + var el = El.cache[eid], d = el.dom; + + + + + + + + + + + + + + + + + + if(!d || !d.parentNode || (!d.offsetParent && !document.getElementById(eid))){ + delete El.cache[eid]; + if(d && Ext.enableListenerCollection){ + E.purgeElement(d); + } + } + } +} +El.collectorThreadId = setInterval(El.garbageCollect, 30000); + + + +El.Flyweight = function(dom){ + this.dom = dom; +}; +El.Flyweight.prototype = El.prototype; + +El._flyweights = {}; + +El.fly = function(el, named){ + named = named || '_global'; + el = Ext.getDom(el); + if(!el){ + return null; + } + if(!El._flyweights[named]){ + El._flyweights[named] = new El.Flyweight(); + } + El._flyweights[named].dom = el; + return El._flyweights[named]; +}; + + +Ext.get = El.get; + +Ext.fly = El.fly; + + +var noBoxAdjust = Ext.isStrict ? { + select:1 +} : { + input:1, select:1, textarea:1 +}; +if(Ext.isIE || Ext.isGecko){ + noBoxAdjust['button'] = 1; +} + + +Ext.EventManager.on(window, 'unload', function(){ + delete El.cache; + delete El._flyweights; +}); +})(); + +Ext.enableFx = true; + + +Ext.Fx = { + + slideIn : function(anchor, o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + + anchor = anchor || "t"; + + this.fixDisplay(); + + var r = this.getFxRestore(); + var b = this.getBox(); + this.setSize(b); + + var wrap = this.fxWrap(r.pos, o, "hidden"); + + var st = this.dom.style; + st.visibility = "visible"; + st.position = "absolute"; + + var after = function(){ + el.fxUnwrap(wrap, 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(anchor.toLowerCase()){ + case "t": + wrap.setSize(b.width, 0); + st.left = st.bottom = "0"; + a = {height: bh}; + break; + case "l": + wrap.setSize(0, b.height); + st.right = st.top = "0"; + a = {width: bw}; + break; + case "r": + wrap.setSize(0, b.height); + wrap.setX(b.right); + st.left = st.top = "0"; + a = {width: bw, points: pt}; + break; + case "b": + wrap.setSize(b.width, 0); + wrap.setY(b.bottom); + st.left = st.top = "0"; + a = {height: bh, points: pt}; + break; + case "tl": + wrap.setSize(0, 0); + st.right = st.bottom = "0"; + a = {width: bw, height: bh}; + break; + case "bl": + wrap.setSize(0, 0); + wrap.setY(b.y+b.height); + st.right = st.top = "0"; + a = {width: bw, height: bh, points: pt}; + break; + case "br": + wrap.setSize(0, 0); + wrap.setXY([b.right, b.bottom]); + st.left = st.top = "0"; + a = {width: bw, height: bh, points: pt}; + break; + case "tr": + wrap.setSize(0, 0); + wrap.setX(b.x+b.width); + st.left = st.bottom = "0"; + a = {width: bw, height: bh, points: pt}; + break; + } + this.dom.style.visibility = "visible"; + wrap.show(); + + arguments.callee.anim = wrap.fxanim(a, + o, + 'motion', + .5, + 'easeOut', after); + }); + return this; + }, + + + slideOut : function(anchor, o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + + anchor = anchor || "t"; + + var r = this.getFxRestore(); + + var b = this.getBox(); + this.setSize(b); + + var wrap = this.fxWrap(r.pos, o, "visible"); + + var st = this.dom.style; + st.visibility = "visible"; + st.position = "absolute"; + + wrap.setSize(b); + + var after = function(){ + if(o.useDisplay){ + el.setDisplayed(false); + }else{ + el.hide(); + } + + el.fxUnwrap(wrap, r.pos, o); + + st.width = r.width; + st.height = r.height; + + el.afterFx(o); + }; + + var a, zero = {to: 0}; + switch(anchor.toLowerCase()){ + case "t": + st.left = st.bottom = "0"; + a = {height: zero}; + break; + case "l": + st.right = st.top = "0"; + a = {width: zero}; + break; + case "r": + st.left = st.top = "0"; + a = {width: zero, points: {to:[b.right, b.y]}}; + break; + case "b": + st.left = st.top = "0"; + a = {height: zero, points: {to:[b.x, b.bottom]}}; + break; + case "tl": + st.right = st.bottom = "0"; + a = {width: zero, height: zero}; + break; + case "bl": + st.right = st.top = "0"; + a = {width: zero, height: zero, points: {to:[b.x, b.bottom]}}; + break; + case "br": + st.left = st.top = "0"; + a = {width: zero, height: zero, points: {to:[b.x+b.width, b.bottom]}}; + break; + case "tr": + st.left = st.bottom = "0"; + a = {width: zero, height: zero, points: {to:[b.right, b.y]}}; + break; + } + + arguments.callee.anim = wrap.fxanim(a, + o, + 'motion', + .5, + "easeOut", after); + }); + 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 after = function(){ + if(o.useDisplay){ + el.setDisplayed(false); + }else{ + el.hide(); + } + + el.clearOpacity(); + + el.setPositioning(r.pos); + st.width = r.width; + st.height = r.height; + st.fontSize = ''; + el.afterFx(o); + }; + + var width = this.getWidth(); + var height = this.getHeight(); + + arguments.callee.anim = this.fxanim({ + width : {to: this.adjustWidth(width * 2)}, + height : {to: this.adjustHeight(height * 2)}, + points : {by: [-(width * .5), -(height * .5)]}, + opacity : {to: 0}, + fontSize: {to:200, unit: "%"} + }, + o, + 'motion', + .5, + "easeOut", after); + }); + return this; + }, + + + switchOff : function(o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + this.clearOpacity(); + this.clip(); + + var r = this.getFxRestore(); + var st = this.dom.style; + + var after = function(){ + if(o.useDisplay){ + el.setDisplayed(false); + }else{ + el.hide(); + } + + el.clearOpacity(); + el.setPositioning(r.pos); + st.width = r.width; + st.height = r.height; + + el.afterFx(o); + }; + + this.fxanim({opacity:{to:0.3}}, null, null, .1, null, function(){ + this.clearOpacity(); + (function(){ + this.fxanim({ + height:{to:1}, + points:{by:[0, this.getHeight() * .5]} + }, o, 'motion', 0.3, 'easeIn', after); + }).defer(100, this); + }); + }); + return this; + }, + + + highlight : function(color, o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + color = color || "ffff9c"; + attr = o.attr || "backgroundColor"; + + this.clearOpacity(); + this.show(); + + var origColor = this.getColor(attr); + var restoreColor = this.dom.style[attr]; + endColor = (o.endColor || origColor) || "ffffff"; + + var after = function(){ + el.dom.style[attr] = restoreColor; + el.afterFx(o); + }; + + var a = {}; + a[attr] = {from: color, to: endColor}; + arguments.callee.anim = this.fxanim(a, + o, + 'color', + 1, + 'easeIn', after); + }); + return this; + }, + + + frame : function(color, count, o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + color = color || "#C3DAF9"; + if(color.length == 6){ + color = "#" + color; + } + count = count || 1; + duration = o.duration || 1; + this.show(); + + var b = this.getBox(); + var animFn = function(){ + var proxy = this.createProxy({ + + style:{ + visbility:"hidden", + position:"absolute", + "z-index":"35000", border:"0px solid " + color + } + }); + var scale = Ext.isBorderBox ? 2 : 1; + proxy.animate({ + top:{from:b.y, to:b.y - 20}, + left:{from:b.x, to:b.x - 20}, + borderWidth:{from:0, to:10}, + opacity:{from:1, to:0}, + height:{from:b.height, to:(b.height + (20*scale))}, + width:{from:b.width, to:(b.width + (20*scale))} + }, duration, function(){ + proxy.remove(); + }); + if(--count > 0){ + animFn.defer((duration/2)*1000, this); + }else{ + el.afterFx(o); + } + }; + animFn.call(this); + }); + return this; + }, + + + pause : function(seconds){ + var el = this.getFxEl(); + var o = {}; + + el.queueFx(o, function(){ + setTimeout(function(){ + el.afterFx(o); + }, seconds * 1000); + }); + return this; + }, + + + fadeIn : function(o){ + var el = this.getFxEl(); + o = o || {}; + el.queueFx(o, function(){ + this.setOpacity(0); + this.fixDisplay(); + this.dom.style.visibility = 'visible'; + var to = o.endOpacity || 1; + arguments.callee.anim = this.fxanim({opacity:{to:to}}, + o, null, .5, "easeOut", function(){ + if(to == 1){ + this.clearOpacity(); + } + el.afterFx(o); + }); + }); + return this; + }, + + + fadeOut : function(o){ + var el = this.getFxEl(); + o = o || {}; + el.queueFx(o, function(){ + arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}}, + o, null, .5, "easeOut", function(){ + if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){ + this.dom.style.display = "none"; + }else{ + this.dom.style.visibility = "hidden"; + } + this.clearOpacity(); + el.afterFx(o); + }); + }); + return this; + }, + + + scale : function(w, h, o){ + this.shift(Ext.apply({}, o, { + width: w, + height: h + })); + return this; + }, + + + shift : function(o){ + var el = this.getFxEl(); + o = o || {}; + el.queueFx(o, function(){ + var a = {}, w = o.width, h = o.height, x = o.x, y = o.y, op = o.opacity; + if(w !== undefined){ + a.width = {to: this.adjustWidth(w)}; + } + 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', .35, "easeOut", function(){ + el.afterFx(o); + }); + }); + return this; + }, + + + ghost : function(anchor, o){ + var el = this.getFxEl(); + o = o || {}; + + el.queueFx(o, function(){ + anchor = anchor || "b"; + + var r = this.getFxRestore(); + var w = this.getWidth(), + h = this.getHeight(); + + var st = this.dom.style; + + var after = function(){ + if(o.useDisplay){ + el.setDisplayed(false); + }else{ + el.hide(); + } + + el.clearOpacity(); + el.setPositioning(r.pos); + st.width = r.width; + st.height = r.height; + + el.afterFx(o); + }; + + var a = {opacity: {to: 0}, points: {}}, pt = a.points; + switch(anchor.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', + .5, + "easeOut", after); + }); + 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 wrap; + if(!o.wrap || !(wrap = Ext.get(o.wrap))){ + var wrapXY; + if(o.fixPosition){ + wrapXY = this.getXY(); + } + var div = document.createElement("div"); + div.style.visibility = vis; + wrap = Ext.get(this.dom.parentNode.insertBefore(div, this.dom)); + wrap.setPositioning(pos); + if(wrap.getStyle("position") == "static"){ + wrap.position("relative"); + } + this.clearPositioning('auto'); + wrap.clip(); + wrap.dom.appendChild(this.dom); + if(wrapXY){ + wrap.setXY(wrapXY); + } + } + return wrap; + }, + + + fxUnwrap : function(wrap, pos, o){ + this.clearPositioning(); + this.setPositioning(pos); + if(!o.wrap){ + wrap.dom.parentNode.insertBefore(this.dom, wrap.dom); + wrap.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.afterCls){ + this.addClass(o.afterCls); + } + 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(args, opt, animType, defaultDur, defaultEase, cb){ + animType = animType || 'run'; + opt = opt || {}; + var anim = Ext.lib.Anim[animType]( + this.dom, args, + (opt.duration || defaultDur) || .35, + (opt.easing || defaultEase) || 'easeOut', + function(){ + Ext.callback(cb, this); + }, + this + ); + opt.anim = anim; + return anim; + } +}; + +Ext.Fx.resize = Ext.Fx.scale; + +Ext.apply(Ext.Element.prototype, Ext.Fx); + + +Ext.CompositeElement = function(els){ + this.elements = []; + this.addElements(els); +}; +Ext.CompositeElement.prototype = { + isComposite: true, + addElements : function(els){ + if(!els) return this; + if(typeof els == "string"){ + els = Ext.Element.selectorFunction(els); + } + var yels = this.elements; + var index = yels.length-1; + for(var i = 0, len = els.length; i < len; i++) { + yels[++index] = Ext.get(els[i]); + } + return this; + }, + + + fill : function(els){ + this.elements = []; + this.add(els); + return this; + }, + + + filter : function(selector){ + var els = []; + this.each(function(el){ + if(el.is(selector)){ + els[els.length] = el.dom; + } + }); + this.fill(els); + return this; + }, + + invoke : function(fn, args){ + var els = this.elements; + for(var i = 0, len = els.length; i < len; i++) { + Ext.Element.prototype[fn].apply(els[i], args); + } + return this; + }, + + add : function(els){ + if(typeof els == "string"){ + this.addElements(Ext.Element.selectorFunction(els)); + }else if(els.length !== undefined){ + this.addElements(els); + }else{ + this.addElements([els]); + } + return this; + }, + + each : function(fn, scope){ + var els = this.elements; + for(var i = 0, len = els.length; i < len; i++){ + if(fn.call(scope || els[i], els[i], this, i) === false) { + break; + } + } + return this; + }, + + + item : function(index){ + return this.elements[index] || null; + }, + + + first : function(){ + return this.item(0); + }, + + + last : function(){ + return this.item(this.elements.length-1); + }, + + + getCount : function(){ + return this.elements.length; + }, + + + contains : function(el){ + return this.indexOf(el) !== -1; + }, + + + indexOf : function(el){ + return this.elements.indexOf(Ext.get(el)); + }, + + + + removeElement : function(el, removeDom){ + if(el instanceof Array){ + for(var i = 0, len = el.length; i < len; i++){ + this.removeElement(el[i]); + } + return this; + } + var index = typeof el == 'number' ? el : this.indexOf(el); + if(index !== -1){ + if(removeDom){ + var d = this.elements[index]; + if(d.dom){ + d.remove(); + }else{ + d.parentNode.removeChild(d); + } + } + this.elements.splice(index, 1); + } + return this; + }, + + + replaceElement : function(el, replacement, domReplace){ + var index = typeof el == 'number' ? el : this.indexOf(el); + if(index !== -1){ + if(domReplace){ + this.elements[index].replaceWith(replacement); + }else{ + this.elements.splice(index, 1, Ext.get(replacement)) + } + } + return this; + }, + + + clear : function(){ + this.elements = []; + } +}; +(function(){ +Ext.CompositeElement.createCall = function(proto, fnName){ + if(!proto[fnName]){ + proto[fnName] = function(){ + return this.invoke(fnName, arguments); + }; + } +}; +for(var fnName in Ext.Element.prototype){ + if(typeof Ext.Element.prototype[fnName] == "function"){ + Ext.CompositeElement.createCall(Ext.CompositeElement.prototype, fnName); + } +}; +})(); + + +Ext.CompositeElementLite = function(els){ + Ext.CompositeElementLite.superclass.constructor.call(this, els); + 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 yels = this.elements; + var index = yels.length-1; + for(var i = 0, len = els.length; i < len; i++) { + yels[++index] = els[i]; + } + } + } + return this; + }, + invoke : function(fn, args){ + 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, args); + } + return this; + }, + + item : function(index){ + if(!this.elements[index]){ + return null; + } + this.el.dom = this.elements[index]; + return this.el; + }, + + + addListener : function(eventName, handler, scope, opt){ + var els = this.elements; + for(var i = 0, len = els.length; i < len; i++) { + Ext.EventManager.on(els[i], eventName, handler, scope || els[i], opt); + } + return this; + }, + + + each : function(fn, scope){ + 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(scope || el, el, this, i) === false){ + break; + } + } + return this; + }, + + indexOf : function(el){ + return this.elements.indexOf(Ext.getDom(el)); + }, + + replaceElement : function(el, replacement, domReplace){ + var index = typeof el == 'number' ? el : this.indexOf(el); + if(index !== -1){ + replacement = Ext.getDom(replacement); + if(domReplace){ + var d = this.elements[index]; + d.parentNode.insertBefore(replacement, d); + d.parentNode.removeChild(d); + } + this.elements.splice(index, 1, replacement); + } + return this; + } +}); +Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener; +if(Ext.DomQuery){ + Ext.Element.selectorFunction = Ext.DomQuery.select; +} + +Ext.Element.select = function(selector, unique, root){ + var els; + if(typeof selector == "string"){ + els = Ext.Element.selectorFunction(selector, root); + }else if(selector.length !== undefined){ + els = selector; + }else{ + throw "Invalid selector"; + } + if(unique === true){ + return new Ext.CompositeElement(els); + }else{ + return new Ext.CompositeElementLite(els); + } +}; + +Ext.select = Ext.Element.select; + +Ext.data.Connection = function(config){ + Ext.apply(this, config); + this.addEvents({ + + "beforerequest" : true, + + "requestcomplete" : true, + + "requestexception" : true + }); + Ext.data.Connection.superclass.constructor.call(this); +}; + +Ext.extend(Ext.data.Connection, Ext.util.Observable, { + + + + + + timeout : 30000, + + autoAbort:false, + + + disableCaching: true, + + + request : function(o){ + if(this.fireEvent("beforerequest", this, o) !== false){ + var p = o.params; + + if(typeof p == "function"){ + p = p.call(o.scope||window, o); + } + if(typeof p == "object"){ + p = Ext.urlEncode(o.params); + } + if(this.extraParams){ + var extras = Ext.urlEncode(this.extraParams); + p = p ? (p + '&' + extras) : extras; + } + + var url = o.url || this.url; + if(typeof url == 'function'){ + url = url.call(o.scope||window, o); + } + + if(o.form){ + var form = Ext.getDom(o.form); + url = url || form.action; + + var enctype = form.getAttribute("enctype"); + if(o.isUpload || (enctype && enctype.toLowerCase() == 'multipart/form-data')){ + return this.doFormUpload(o, p, url); + } + var f = Ext.lib.Ajax.serializeForm(form); + p = p ? (p + '&' + f) : f; + } + + var hs = o.headers; + if(this.defaultHeaders){ + hs = Ext.apply(hs || {}, this.defaultHeaders); + if(!o.headers){ + o.headers = hs; + } + } + + var cb = { + success: this.handleResponse, + failure: this.handleFailure, + scope: this, + argument: {options: o}, + timeout : this.timeout + }; + + var method = o.method||this.method||(p ? "POST" : "GET"); + + if(method == 'GET' && (this.disableCaching && o.disableCaching !== false) || o.disableCaching === true){ + url += (url.indexOf('?') != -1 ? '&' : '?') + '_dc=' + (new Date().getTime()); + } + + if(typeof o.autoAbort == 'boolean'){ + if(o.autoAbort){ + this.abort(); + } + }else if(this.autoAbort !== false){ + this.abort(); + } + + if((method == 'GET' && p) || o.xmlData){ + url += (url.indexOf('?') != -1 ? '&' : '?') + p; + p = ''; + } + this.transId = Ext.lib.Ajax.request(method, url, cb, p, o); + return this.transId; + }else{ + Ext.callback(o.callback, o.scope, [o, null, null]); + return null; + } + }, + + + isLoading : function(transId){ + if(transId){ + return Ext.lib.Ajax.isCallInProgress(transId); + }else{ + return this.transId ? true : false; + } + }, + + + abort : function(transId){ + if(transId || this.isLoading()){ + Ext.lib.Ajax.abort(transId || this.transId); + } + }, + + + handleResponse : function(response){ + this.transId = false; + var options = response.argument.options; + response.argument = options ? options.argument : null; + this.fireEvent("requestcomplete", this, response, options); + Ext.callback(options.success, options.scope, [response, options]); + Ext.callback(options.callback, options.scope, [options, true, response]); + }, + + + handleFailure : function(response, e){ + this.transId = false; + var options = response.argument.options; + response.argument = options ? options.argument : null; + this.fireEvent("requestexception", this, response, options, e); + Ext.callback(options.failure, options.scope, [response, options]); + Ext.callback(options.callback, options.scope, [options, false, response]); + }, + + + doFormUpload : function(o, ps, url){ + var id = Ext.id(); + var frame = document.createElement('iframe'); + frame.id = id; + frame.name = id; + frame.className = 'x-hidden'; + if(Ext.isIE){ + frame.src = Ext.SSL_SECURE_URL; + } + document.body.appendChild(frame); + + if(Ext.isIE){ + document.frames[id].name = id; + } + + var form = Ext.getDom(o.form); + form.target = id; + form.method = 'POST'; + form.enctype = form.encoding = 'multipart/form-data'; + if(url){ + form.action = url; + } + + var hiddens, hd; + if(ps){ + hiddens = []; + ps = Ext.urlDecode(ps, false); + for(var k in ps){ + if(ps.hasOwnProperty(k)){ + hd = document.createElement('input'); + hd.type = 'hidden'; + hd.name = k; + hd.value = ps[k]; + form.appendChild(hd); + hiddens.push(hd); + } + } + } + + function cb(){ + var r = { + responseText : '', + responseXML : null + }; + + r.argument = o ? o.argument : null; + + try { + var doc; + if(Ext.isIE){ + doc = frame.contentWindow.document; + }else { + doc = (frame.contentDocument || window.frames[id].document); + } + if(doc && doc.body){ + r.responseText = doc.body.innerHTML; + } + if(doc && doc.XMLDocument){ + r.responseXML = doc.XMLDocument; + }else { + r.responseXML = doc; + } + } + catch(e) { + + } + + Ext.EventManager.removeListener(frame, 'load', cb, this); + + this.fireEvent("requestcomplete", this, r, o); + Ext.callback(o.success, o.scope, [r, o]); + Ext.callback(o.callback, o.scope, [o, true, r]); + + setTimeout(function(){document.body.removeChild(frame);}, 100); + } + + Ext.EventManager.on(frame, 'load', cb, this); + form.submit(); + + if(hiddens){ + for(var i = 0, len = hiddens.length; i < len; i++){ + form.removeChild(hiddens[i]); + } + } + } +}); + + +Ext.Ajax = new Ext.data.Connection({ + + + + + + + + + + + + + + + + + + + autoAbort : false, + + + serializeForm : function(form){ + return Ext.lib.Ajax.serializeForm(form); + } +}); + +Ext.UpdateManager = function(el, forceNew){ + el = Ext.get(el); + if(!forceNew && el.updateManager){ + return el.updateManager; + } + + this.el = el; + + this.defaultUrl = null; + + this.addEvents({ + + "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); + + if(!this.renderer){ + + 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(url, params, callback, discardUrl){ + if(this.fireEvent("beforeupdate", this.el, url, params) !== false){ + var method = this.method, cfg; + if(typeof url == "object"){ + cfg = url; + url = cfg.url; + params = params || cfg.params; + callback = callback || cfg.callback; + discardUrl = discardUrl || cfg.discardUrl; + if(callback && cfg.scope){ + callback = callback.createDelegate(cfg.scope); + } + if(typeof cfg.method != "undefined"){method = cfg.method;}; + if(typeof cfg.nocache != "undefined"){this.disableCaching = cfg.nocache;}; + if(typeof cfg.text != "undefined"){this.indicatorText = '
      '+cfg.text+"
      ";}; + if(typeof cfg.scripts != "undefined"){this.loadScripts = cfg.scripts;}; + if(typeof cfg.timeout != "undefined"){this.timeout = cfg.timeout;}; + } + this.showLoading(); + if(!discardUrl){ + this.defaultUrl = url; + } + if(typeof url == "function"){ + url = url.call(this); + } + + method = method || (params ? "POST" : "GET"); + if(method == "GET"){ + url = this.prepareUrl(url); + } + + var o = Ext.apply(cfg ||{}, { + url : url, + params: params, + success: this.successDelegate, + failure: this.failureDelegate, + callback: undefined, + timeout: (this.timeout*1000), + argument: {"url": url, "form": null, "callback": callback, "params": params} + }); + + this.transaction = Ext.Ajax.request(o); + } + }, + + + formUpdate : function(form, url, reset, callback){ + if(this.fireEvent("beforeupdate", this.el, form, url) !== false){ + if(typeof url == "function"){ + url = url.call(this); + } + form = Ext.getDom(form) + this.transaction = Ext.Ajax.request({ + form: form, + url:url, + success: this.successDelegate, + failure: this.failureDelegate, + timeout: (this.timeout*1000), + argument: {"url": url, "form": form, "callback": callback, "reset": reset} + }); + this.showLoading.defer(1, this); + } + }, + + + refresh : function(callback){ + if(this.defaultUrl == null){ + return; + } + this.update(this.defaultUrl, null, callback, true); + }, + + + startAutoRefresh : function(interval, url, params, callback, refreshNow){ + if(refreshNow){ + this.update(url || this.defaultUrl, params, callback, true); + } + if(this.autoRefreshProcId){ + clearInterval(this.autoRefreshProcId); + } + this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [url || this.defaultUrl, params, callback, true]), interval*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 append = "_dc=" + (new Date().getTime()); + if(url.indexOf("?") !== -1){ + url += "&" + append; + }else{ + url += "?" + append; + } + } + return url; + }, + + + processSuccess : function(response){ + this.transaction = null; + if(response.argument.form && response.argument.reset){ + try{ + response.argument.form.reset(); + }catch(e){} + } + if(this.loadScripts){ + this.renderer.render(this.el, response, this, + this.updateComplete.createDelegate(this, [response])); + }else{ + this.renderer.render(this.el, response, this); + this.updateComplete(response); + } + }, + + updateComplete : function(response){ + this.fireEvent("update", this.el, response); + if(typeof response.argument.callback == "function"){ + response.argument.callback(this.el, true, response); + } + }, + + + processFailure : function(response){ + this.transaction = null; + this.fireEvent("failure", this.el, response); + if(typeof response.argument.callback == "function"){ + response.argument.callback(this.el, false, response); + } + }, + + + setRenderer : function(renderer){ + this.renderer = renderer; + }, + + getRenderer : function(){ + return this.renderer; + }, + + + setDefaultUrl : function(defaultUrl){ + this.defaultUrl = defaultUrl; + }, + + + abort : function(){ + if(this.transaction){ + Ext.Ajax.abort(this.transaction); + } + }, + + + isUpdating : function(){ + if(this.transaction){ + return Ext.Ajax.isLoading(this.transaction); + } + return false; + } +}); + + + Ext.UpdateManager.defaults = { + + timeout : 30, + + + loadScripts : false, + + + sslBlankUrl : (Ext.SSL_SECURE_URL || "javascript:false"), + + disableCaching : false, + + showLoadIndicator : true, + + indicatorText : '
      Loading...
      ' + }; + + +Ext.UpdateManager.updateElement = function(el, url, params, options){ + var um = Ext.get(el, true).getUpdateManager(); + Ext.apply(um, options); + um.update(url, params, options ? options.callback : null); +}; + +Ext.UpdateManager.update = Ext.UpdateManager.updateElement; + +Ext.UpdateManager.BasicRenderer = function(){}; + +Ext.UpdateManager.BasicRenderer.prototype = { + + render : function(el, response, updateManager, callback){ + el.update(response.responseText, updateManager.loadScripts, callback); + } +}; + + +Ext.util.DelayedTask = function(fn, scope, args){ + var id = null, d, t; + + var call = function(){ + var now = new Date().getTime(); + if(now - t >= d){ + clearInterval(id); + id = null; + fn.apply(scope, args || []); + } + }; + + this.delay = function(delay, newFn, newScope, newArgs){ + if(id && delay != d){ + this.cancel(); + } + d = delay; + t = new Date().getTime(); + fn = newFn || fn; + scope = newScope || scope; + args = newArgs || args; + if(!id){ + id = setInterval(call, d); + } + }; + + + this.cancel = function(){ + if(id){ + clearInterval(id); + id = null; + } + }; +}; diff --git a/examples/ext/ext-core.js b/examples/ext/ext-core.js new file mode 100644 index 0000000..4fd1c48 --- /dev/null +++ b/examples/ext/ext-core.js @@ -0,0 +1,19 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + +Ext.DomHelper=function(){var L=null;var F=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var B=/^table|tbody|tr|td$/i;var A=function(T){if(typeof T=="string"){return T}var P="";if(!T.tag){T.tag="div"}P+="<"+T.tag;for(var O in T){if(O=="tag"||O=="children"||O=="cn"||O=="html"||typeof T[O]=="function"){continue}if(O=="style"){var S=T["style"];if(typeof S=="function"){S=S.call()}if(typeof S=="string"){P+=" style=\""+S+"\""}else{if(typeof S=="object"){P+=" style=\"";for(var R in S){if(typeof S[R]!="function"){P+=R+":"+S[R]+";"}}P+="\""}}}else{if(O=="cls"){P+=" class=\""+T["cls"]+"\""}else{if(O=="htmlFor"){P+=" for=\""+T["htmlFor"]+"\""}else{P+=" "+O+"=\""+T[O]+"\""}}}}if(F.test(T.tag)){P+="/>"}else{P+=">";var U=T.children||T.cn;if(U){if(U instanceof Array){for(var Q=0,N=U.length;Q"}return P};var M=function(T,P){var S=document.createElement(T.tag||"div");var Q=S.setAttribute?true:false;for(var O in T){if(O=="tag"||O=="children"||O=="cn"||O=="html"||O=="style"||typeof T[O]=="function"){continue}if(O=="cls"){S.className=T["cls"]}else{if(Q){S.setAttribute(O,T[O])}else{S[O]=T[O]}}}Ext.DomHelper.applyStyles(S,T.style);var U=T.children||T.cn;if(U){if(U instanceof Array){for(var R=0,N=U.length;R",K=""+E,H=C+"",D=""+K;var G=function(N,O,Q,P){if(!L){L=document.createElement("div")}var R;var S=null;if(N=="td"){if(O=="afterbegin"||O=="beforeend"){return }if(O=="beforebegin"){S=Q;Q=Q.parentNode}else{S=Q.nextSibling;Q=Q.parentNode}R=I(4,H,P,D)}else{if(N=="tr"){if(O=="beforebegin"){S=Q;Q=Q.parentNode;R=I(3,C,P,K)}else{if(O=="afterend"){S=Q.nextSibling;Q=Q.parentNode;R=I(3,C,P,K)}else{if(O=="afterbegin"){S=Q.firstChild}R=I(4,H,P,D)}}}else{if(N=="tbody"){if(O=="beforebegin"){S=Q;Q=Q.parentNode;R=I(2,J,P,E)}else{if(O=="afterend"){S=Q.nextSibling;Q=Q.parentNode;R=I(2,J,P,E)}else{if(O=="afterbegin"){S=Q.firstChild}R=I(3,C,P,K)}}}else{if(O=="beforebegin"||O=="afterend"){return }if(O=="afterbegin"){S=Q.firstChild}R=I(2,J,P,E)}}}Q.insertBefore(R,S);return R};return{useDom:false,markup:function(N){return A(N)},applyStyles:function(P,Q){if(Q){P=Ext.fly(P);if(typeof Q=="string"){var O=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;var R;while((R=O.exec(Q))!=null){P.setStyle(R[1],R[2])}}else{if(typeof Q=="object"){for(var N in Q){P.setStyle(N,Q[N])}}else{if(typeof Q=="function"){Ext.DomHelper.applyStyles(P,Q.call())}}}}},insertHtml:function(P,R,Q){P=P.toLowerCase();if(R.insertAdjacentHTML){if(B.test(R.tagName)){var O;if(O=G(R.tagName.toLowerCase(),P,R,Q)){return O}}switch(P){case"beforebegin":R.insertAdjacentHTML("BeforeBegin",Q);return R.previousSibling;case"afterbegin":R.insertAdjacentHTML("AfterBegin",Q);return R.firstChild;case"beforeend":R.insertAdjacentHTML("BeforeEnd",Q);return R.lastChild;case"afterend":R.insertAdjacentHTML("AfterEnd",Q);return R.nextSibling}throw"Illegal insertion point -> \""+P+"\""}var N=R.ownerDocument.createRange();var S;switch(P){case"beforebegin":N.setStartBefore(R);S=N.createContextualFragment(Q);R.parentNode.insertBefore(S,R);return R.previousSibling;case"afterbegin":if(R.firstChild){N.setStartBefore(R.firstChild);S=N.createContextualFragment(Q);R.insertBefore(S,R.firstChild);return R.firstChild}else{R.innerHTML=Q;return R.firstChild}case"beforeend":if(R.lastChild){N.setStartAfter(R.lastChild);S=N.createContextualFragment(Q);R.appendChild(S);return R.lastChild}else{R.innerHTML=Q;return R.lastChild}case"afterend":N.setStartAfter(R);S=N.createContextualFragment(Q);R.parentNode.insertBefore(S,R.nextSibling);return R.nextSibling}throw"Illegal insertion point -> \""+P+"\""},insertBefore:function(N,P,O){return this.doInsert(N,P,O,"beforeBegin")},insertAfter:function(N,P,O){return this.doInsert(N,P,O,"afterEnd","nextSibling")},insertFirst:function(N,P,O){return this.doInsert(N,P,O,"afterBegin")},doInsert:function(Q,S,R,T,P){Q=Ext.getDom(Q);var O;if(this.useDom){O=M(S,null);Q.parentNode.insertBefore(O,P?Q[P]:Q)}else{var N=A(S);O=this.insertHtml(T,Q,N)}return R?Ext.get(O,true):O},append:function(P,R,Q){P=Ext.getDom(P);var O;if(this.useDom){O=M(R,null);P.appendChild(O)}else{var N=A(R);O=this.insertHtml("beforeEnd",P,N)}return Q?Ext.get(O,true):O},overwrite:function(N,P,O){N=Ext.getDom(N);N.innerHTML=A(P);return O?Ext.get(N.firstChild,true):N.firstChild},createTemplate:function(O){var N=A(O);return new Ext.Template(N)}}}(); +Ext.Template=function(A){if(A instanceof Array){A=A.join("")}else{if(arguments.length>1){A=Array.prototype.join.call(arguments,"")}}this.html=A};Ext.Template.prototype={applyTemplate:function(B){if(this.compiled){return this.compiled(B)}var A=this.disableFormats!==true;var E=Ext.util.Format,C=this;var D=function(G,I,L,H){if(L&&A){if(L.substr(0,5)=="this."){return C.call(L.substr(5),B[I],B)}else{if(H){var K=/^\s*['"](.*)["']\s*$/;H=H.split(",");for(var J=0,F=H.length;J+~]\s?|\s|$)/;var tagTokenRe=/^(#)?([\w-\*]+)/;var nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/;function child(p,index){var i=0;var n=p.firstChild;while(n){if(n.nodeType==1){if(++i==index){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 children(d){var n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){d.removeChild(n)}else{n.nodeIndex=++ni}n=nx}return this}function byClassName(c,a,v){if(!v){return c}var r=[],ri=-1,cn;for(var i=0,ci;ci=c[i];i++){if((" "+ci.className+" ").indexOf(v)!=-1){r[++ri]=ci}}return r}function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs;if(!ns){return result}tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[++ri]=ci}}}else{if(mode=="/"||mode==">"){var utag=tagName.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=ni.children||ni.childNodes;for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&(n.nodeType!=1||(tagName=="*"||n.tagName.toLowerCase()!=tagName))){}if(n){result[++ri]=n}}}}}}return result}function concat(a,b){if(b.slice){return a.concat(b)}for(var i=0,l=b.length;i1){return nodup(results)}return results},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select")}var n=valueCache[path](root);n=n[0]?n[0]:n;var v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el)}var isArray=(el instanceof Array);var result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},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},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1;var m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a);var f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},"empty":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},"contains":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||"").indexOf(v)!=-1){r[++ri]=ci}}return r},"nodeValue":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},"checked":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=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=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},"next":function(c,ss){var is=Ext.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},"prev":function(c,ss){var is=Ext.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r}}}}();Ext.query=Ext.DomQuery.select; +Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners}};Ext.util.Observable.prototype={fireEvent:function(){var A=this.events[arguments[0].toLowerCase()];if(typeof A=="object"){return A.fire.apply(A,Array.prototype.slice.call(arguments,1))}else{return true}},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(A,C,B,F){if(typeof A=="object"){F=A;for(var E in F){if(this.filterOptRe.test(E)){continue}if(typeof F[E]=="function"){this.addListener(E,F[E],F.scope,F)}else{this.addListener(E,F[E].fn,F[E].scope,F[E])}}return }F=(!F||typeof F=="boolean")?{}:F;A=A.toLowerCase();var D=this.events[A]||true;if(typeof D=="boolean"){D=new Ext.util.Event(this,A);this.events[A]=D}D.addListener(C,B,F)},removeListener:function(A,C,B){var D=this.events[A.toLowerCase()];if(typeof D=="object"){D.removeListener(C,B)}},purgeListeners:function(){for(var A in this.events){if(typeof this.events[A]=="object"){this.events[A].clearListeners()}}},relayEvents:function(F,D){var E=function(G){return function(){return this.fireEvent.apply(this,Ext.combine(G,Array.prototype.slice.call(arguments,0)))}};for(var C=0,A=D.length;C0}};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(C,B,A){C.fireEvent=C.fireEvent.createInterceptor(B,A)};Ext.util.Observable.releaseCapture=function(A){A.fireEvent=Ext.util.Observable.prototype.fireEvent};(function(){var B=function(F,G,E){var D=new Ext.util.DelayedTask();return function(){D.delay(G.buffer,F,E,Array.prototype.slice.call(arguments,0))}};var C=function(F,G,E,D){return function(){G.removeListener(E,D);return F.apply(D,arguments)}};var A=function(E,F,D){return function(){var G=Array.prototype.slice.call(arguments,0);setTimeout(function(){E.apply(D,G)},F.delay||10)}};Ext.util.Event=function(E,D){this.name=D;this.obj=E;this.listeners=[]};Ext.util.Event.prototype={addListener:function(H,G,E){var I=E||{};G=G||this.obj;if(!this.isListening(H,G)){var D={fn:H,scope:G,options:I};var F=H;if(I.delay){F=A(F,I,G)}if(I.single){F=C(F,this,H,G)}if(I.buffer){F=B(F,I,G)}D.fireFn=F;if(!this.firing){this.listeners.push(D)}else{this.listeners=this.listeners.slice(0);this.listeners.push(D)}}},findListener:function(I,H){H=H||this.obj;var F=this.listeners;for(var G=0,D=F.length;G0){this.firing=true;var G=Array.prototype.slice.call(arguments,0);for(var H=0;H");var D=document.getElementById("ie-deferred-loader");D.onreadystatechange=function(){if(this.readyState=="complete"){B()}}}else{if(Ext.isSafari){M=setInterval(function(){var E=document.readyState;if(E=="complete"){B()}},10)}}}L.on(window,"load",B)};var R=function(E,U){var D=new Ext.util.DelayedTask(E);return function(V){V=new Ext.EventObjectImpl(V);D.delay(U.buffer,E,null,[V])}};var P=function(V,U,D,E){return function(W){Ext.EventManager.removeListener(U,D,E);V(W)}};var F=function(D,E){return function(U){U=new Ext.EventObjectImpl(U);setTimeout(function(){D(U)},E.delay||10)}};var J=function(U,E,D,Y,X){var Z=(!D||typeof D=="boolean")?{}:D;Y=Y||Z.fn;X=X||Z.scope;var W=Ext.getDom(U);if(!W){throw"Error listening for \""+E+"\". Element \""+U+"\" doesn't exist."}var V=function(b){b=Ext.EventObject.setEvent(b);var a;if(Z.delegate){a=b.getTarget(Z.delegate,W);if(!a){return }}else{a=b.target}if(Z.stopEvent===true){b.stopEvent()}if(Z.preventDefault===true){b.preventDefault()}if(Z.stopPropagation===true){b.stopPropagation()}if(Z.normalized===false){b=b.browserEvent}Y.call(X||W,b,a,Z)};if(Z.delay){V=F(V,Z)}if(Z.single){V=P(V,W,E,Y)}if(Z.buffer){V=R(V,Z)}Y._handlers=Y._handlers||[];Y._handlers.push([Ext.id(W),E,V]);L.on(W,E,V);if(E=="mousewheel"&&W.addEventListener){W.addEventListener("DOMMouseScroll",V,false);L.on(window,"unload",function(){W.removeEventListener("DOMMouseScroll",V,false)})}if(E=="mousedown"&&W==document){Ext.EventManager.stoppedMouseDownEvent.addListener(V)}return V};var G=function(E,U,Z){var D=Ext.id(E),a=Z._handlers,X=Z;if(a){for(var V=0,Y=a.length;V=33&&D<=40)||D==this.RETURN||D==this.TAB||D==this.ESC},isSpecialKey:function(){var D=this.keyCode;return(this.type=="keypress"&&this.ctrlKey)||D==9||D==13||D==40||D==27||(D==16)||(D==17)||(D>=18&&D<=20)||(D>=33&&D<=35)||(D>=36&&D<=39)||(D>=44&&D<=45)},stopPropagation:function(){if(this.browserEvent){if(this.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(this)}B.stopPropagation(this.browserEvent)}},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){var D=this.keyCode||this.charCode;return Ext.isSafari?(A[D]||D):D},getPageX:function(){return this.xy[0]},getPageY:function(){return this.xy[1]},getTime:function(){if(this.browserEvent){return B.getTime(this.browserEvent)}return null},getXY:function(){return this.xy},getTarget:function(E,F,D){return E?Ext.fly(this.target).findParent(E,F,D):this.target},getRelatedTarget:function(){if(this.browserEvent){return B.getRelatedTarget(this.browserEvent)}return null},getWheelDelta:function(){var D=this.browserEvent;var E=0;if(D.wheelDelta){E=D.wheelDelta/120}else{if(D.detail){E=-D.detail/3}}return E},hasModifier:function(){return !!((this.ctrlKey||this.altKey)||this.shiftKey)},within:function(E,F){var D=this[F?"getRelatedTarget":"getTarget"]();return D&&Ext.fly(E).contains(D)},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 propCache={};var camelRe=/(-[a-z])/gi;var camelFn=function(m,a){return a.charAt(1).toUpperCase()};var view=document.defaultView;Ext.Element=function(element,forceNew){var dom=typeof element=="string"?document.getElementById(element):element;if(!dom){return null}var id=dom.id;if(forceNew!==true&&id&&Ext.Element.cache[id]){return Ext.Element.cache[id]}this.dom=dom;this.id=id||Ext.id(dom)};var El=Ext.Element;El.prototype={originalDisplay:"",visibilityMode:1,defaultUnit:"px",setVisibilityMode:function(visMode){this.visibilityMode=visMode;return this},enableDisplayMode:function(display){this.setVisibilityMode(El.DISPLAY);if(typeof display!="undefined"){this.originalDisplay=display}return this},findParent:function(simpleSelector,maxDepth,returnEl){var p=this.dom,b=document.body,depth=0,dq=Ext.DomQuery,stopEl;maxDepth=maxDepth||50;if(typeof maxDepth!="number"){stopEl=Ext.getDom(maxDepth);maxDepth=10}while(p&&p.nodeType==1&&depthcb){c.scrollTop=b-ch}}if(hscroll!==false){if(lcr){c.scrollLeft=r-c.clientWidth}}}return this},scrollChildIntoView:function(child,hscroll){Ext.fly(child,"_scrollChildIntoView").scrollIntoView(this,hscroll)},autoHeight:function(animate,duration,onComplete,easing){var oldHeight=this.getHeight();this.clip();this.setHeight(1);setTimeout(function(){var height=parseInt(this.dom.scrollHeight,10);if(!animate){this.setHeight(height);this.unclip();if(typeof onComplete=="function"){onComplete()}}else{this.setHeight(oldHeight);this.setHeight(height,animate,duration,function(){this.unclip();if(typeof onComplete=="function"){onComplete()}}.createDelegate(this),easing)}}.createDelegate(this),0);return this},contains:function(el){if(!el){return false}return D.isAncestor(this.dom,el.dom?el.dom:el)},isVisible:function(deep){var vis=!(this.getStyle("visibility")=="hidden"||this.getStyle("display")=="none");if(deep!==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(selector,unique){return El.select(selector,unique,this.dom)},query:function(selector,unique){return Ext.DomQuery.select(selector,this.dom)},child:function(selector,returnDom){var n=Ext.DomQuery.selectNode(selector,this.dom);return returnDom?n:Ext.get(n)},down:function(selector,returnDom){var n=Ext.DomQuery.selectNode(" > "+selector,this.dom);return returnDom?n:Ext.get(n)},initDD:function(group,config,overrides){var dd=new Ext.dd.DD(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides)},initDDProxy:function(group,config,overrides){var dd=new Ext.dd.DDProxy(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides)},initDDTarget:function(group,config,overrides){var dd=new Ext.dd.DDTarget(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides)},setVisible:function(visible,animate){if(!animate||!A){if(this.visibilityMode==El.DISPLAY){this.setDisplayed(visible)}else{this.fixDisplay();this.dom.style.visibility=visible?"visible":"hidden"}}else{var dom=this.dom;var visMode=this.visibilityMode;if(visible){this.setOpacity(0.01);this.setVisible(true)}this.anim({opacity:{to:(visible?1:0)}},this.preanim(arguments,1),null,0.35,"easeIn",function(){if(!visible){if(visMode==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(animate){this.setVisible(!this.isVisible(),this.preanim(arguments,0));return this},setDisplayed:function(value){if(typeof value=="boolean"){value=value?this.originalDisplay:"none"}this.setStyle("display",value);return this},focus:function(){try{this.dom.focus()}catch(e){}return this},blur:function(){try{this.dom.blur()}catch(e){}return this},addClass:function(className){if(className instanceof Array){for(var i=0,len=className.length;idw+scrollX){x=swapX?r.left-w:dw+scrollX-w}if(xdh+scrollY){y=swapY?r.top-h:dh+scrollY-h}if(yvr){x=vr-w;moved=true}if((y+h)>vb){y=vb-h;moved=true}if(x";E.onAvailable(id,function(){var hd=document.getElementsByTagName("head")[0];var re=/(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;var srcRe=/\ssrc=([\'\"])(.*?)\1/i;var typeRe=/\stype=([\'\"])(.*?)\1/i;var match;while(match=re.exec(html)){var attrs=match[1];var srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){var s=document.createElement("script");s.src=srcMatch[2];var typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2]}hd.appendChild(s)}else{if(match[2]&&match[2].length>0){if(window.execScript){window.execScript(match[2])}else{window.eval(match[2])}}}}var el=document.getElementById(id);if(el){el.parentNode.removeChild(el)}if(typeof callback=="function"){callback()}});dom.innerHTML=html.replace(/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,"");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(centerIn){this.alignTo(centerIn||document,"c-c");return this},isBorderBox:function(){return noBoxAdjust[this.dom.tagName.toLowerCase()]||Ext.isBorderBox},getBox:function(contentBox,local){var xy;if(!local){xy=this.getXY()}else{var left=parseInt(this.getStyle("left"),10)||0;var top=parseInt(this.getStyle("top"),10)||0;xy=[left,top]}var el=this.dom,w=el.offsetWidth,h=el.offsetHeight,bx;if(!contentBox){bx={x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h}}else{var l=this.getBorderWidth("l")+this.getPadding("l");var r=this.getBorderWidth("r")+this.getPadding("r");var t=this.getBorderWidth("t")+this.getPadding("t");var b=this.getBorderWidth("b")+this.getPadding("b");bx={x:xy[0]+l,y:xy[1]+t,0:xy[0]+l,1:xy[1]+t,width:w-(l+r),height:h-(t+b)}}bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&Ext.isBorderBox?0:(this.getPadding(sides)+this.getBorderWidth(sides))},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"))}this.setBounds(box.x,box.y,w,h,this.preanim(arguments,2));return this},repaint:function(){var dom=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.get(dom).removeClass("x-repaint")},1);return this},getMargins:function(side){if(!side){return{top:parseInt(this.getStyle("margin-top"),10)||0,left:parseInt(this.getStyle("margin-left"),10)||0,bottom:parseInt(this.getStyle("margin-bottom"),10)||0,right:parseInt(this.getStyle("margin-right"),10)||0}}else{return this.addStyles(side,El.margins)}},addStyles:function(sides,styles){var val=0,v,w;for(var i=0,len=sides.length;idom.clientHeight||dom.scrollWidth>dom.clientWidth},scrollTo:function(side,value,animate){var prop=side.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!animate||!A){this.dom[prop]=value}else{var to=prop=="scrollLeft"?[value,this.dom.scrollTop]:[this.dom.scrollLeft,value];this.anim({scroll:{"to":to}},this.preanim(arguments,2),"scroll")}return this},scroll:function(direction,distance,animate){if(!this.isScrollable()){return }var el=this.dom;var l=el.scrollLeft,t=el.scrollTop;var w=el.scrollWidth,h=el.scrollHeight;var cw=el.clientWidth,ch=el.clientHeight;direction=direction.toLowerCase();var scrolled=false;var a=this.preanim(arguments,2);switch(direction){case"l":case"left":if(w-l>cw){var v=Math.min(l+distance,w-cw);this.scrollTo("left",v,a);scrolled=true}break;case"r":case"right":if(l>0){var v=Math.max(l-distance,0);this.scrollTo("left",v,a);scrolled=true}break;case"t":case"top":case"up":if(t>0){var v=Math.max(t-distance,0);this.scrollTo("top",v,a);scrolled=true}break;case"b":case"bottom":case"down":if(h-t>ch){var v=Math.min(t+distance,h-ch);this.scrollTo("top",v,a);scrolled=true}break}return scrolled},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,defaultValue,prefix){var v=this.getStyle(attr);if(!v||v=="transparent"||v=="inherit"){return defaultValue}var color=typeof prefix=="undefined"?"#":prefix;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}color+=h}}else{if(v.substr(0,1)=="#"){if(v.length==4){for(var i=1;i<4;i++){var c=v.charAt(i);color+=c+c}}else{if(v.length==7){color+=v.substr(1)}}}}return(color.length>5?color.toLowerCase():defaultValue)},boxWrap:function(cls){cls=cls||"x-box";var el=Ext.get(this.insertHtml("beforeBegin",String.format("
      "+El.boxMarkup+"
      ",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;El.unitPattern=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;El.addUnits=function(v,defaultUnit){if(v===""||v=="auto"){return v}if(v===undefined){return""}if(typeof v=="number"||!El.unitPattern.test(v)){return v+(defaultUnit||"px")}return v};El.boxMarkup="
      ";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 docEl;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!=docEl){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(!docEl){var f=function(){};f.prototype=El.prototype;docEl=new f();docEl.dom=document}return docEl}}}}}}return null};El.uncache=function(el){for(var i=0,a=arguments,len=a.length;i0){F.defer((duration/2)*1000,this)}else{B.afterFx(D)}};F.call(this)});return this},pause:function(C){var A=this.getFxEl();var B={};A.queueFx(B,function(){setTimeout(function(){A.afterFx(B)},C*1000)});return this},fadeIn:function(B){var A=this.getFxEl();B=B||{};A.queueFx(B,function(){this.setOpacity(0);this.fixDisplay();this.dom.style.visibility="visible";var C=B.endOpacity||1;arguments.callee.anim=this.fxanim({opacity:{to:C}},B,null,0.5,"easeOut",function(){if(C==1){this.clearOpacity()}A.afterFx(B)})});return this},fadeOut:function(B){var A=this.getFxEl();B=B||{};A.queueFx(B,function(){arguments.callee.anim=this.fxanim({opacity:{to:B.endOpacity||0}},B,null,0.5,"easeOut",function(){if(this.visibilityMode==Ext.Element.DISPLAY||B.useDisplay){this.dom.style.display="none"}else{this.dom.style.visibility="hidden"}this.clearOpacity();A.afterFx(B)})});return this},scale:function(A,B,C){this.shift(Ext.apply({},C,{width:A,height:B}));return this},shift:function(B){var A=this.getFxEl();B=B||{};A.queueFx(B,function(){var E={},D=B.width,F=B.height,C=B.x,H=B.y,G=B.opacity;if(D!==undefined){E.width={to:this.adjustWidth(D)}}if(F!==undefined){E.height={to:this.adjustHeight(F)}}if(C!==undefined||H!==undefined){E.points={to:[C!==undefined?C:this.getX(),H!==undefined?H:this.getY()]}}if(G!==undefined){E.opacity={to:G}}if(B.xy!==undefined){E.points={to:B.xy}}arguments.callee.anim=this.fxanim(E,B,"motion",0.35,"easeOut",function(){A.afterFx(B)})});return this},ghost:function(A,C){var B=this.getFxEl();C=C||{};B.queueFx(C,function(){A=A||"b";var H=this.getFxRestore();var E=this.getWidth(),G=this.getHeight();var F=this.dom.style;var J=function(){if(C.useDisplay){B.setDisplayed(false)}else{B.hide()}B.clearOpacity();B.setPositioning(H.pos);F.width=H.width;F.height=H.height;B.afterFx(C)};var D={opacity:{to:0},points:{}},I=D.points;switch(A.toLowerCase()){case"t":I.by=[0,-G];break;case"l":I.by=[-E,0];break;case"r":I.by=[E,0];break;case"b":I.by=[0,G];break;case"tl":I.by=[-E,-G];break;case"bl":I.by=[-E,G];break;case"br":I.by=[E,G];break;case"tr":I.by=[E,-G];break}arguments.callee.anim=this.fxanim(D,C,"motion",0.5,"easeOut",J)});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 A=this.fxQueue[0];if(A){A.call(this)}},hasActiveFx:function(){return this.fxQueue&&this.fxQueue[0]},stopFx:function(){if(this.hasActiveFx()){var A=this.fxQueue[0];if(A&&A.anim&&A.anim.isAnimated()){this.fxQueue=[A];A.anim.stop(true)}}return this},beforeFx:function(A){if(this.hasActiveFx()&&!A.concurrent){if(A.stopFx){this.stopFx();return true}return false}return true},hasFxBlock:function(){var A=this.fxQueue;return A&&A[0]&&A[0].block},queueFx:function(C,A){if(!this.fxQueue){this.fxQueue=[]}if(!this.hasFxBlock()){Ext.applyIf(C,this.fxDefaults);if(!C.concurrent){var B=this.beforeFx(C);A.block=C.block;this.fxQueue.push(A);if(B){this.nextFx()}}else{A.call(this)}}return this},fxWrap:function(F,D,C){var B;if(!D.wrap||!(B=Ext.get(D.wrap))){var A;if(D.fixPosition){A=this.getXY()}var E=document.createElement("div");E.style.visibility=C;B=Ext.get(this.dom.parentNode.insertBefore(E,this.dom));B.setPositioning(F);if(B.getStyle("position")=="static"){B.position("relative")}this.clearPositioning("auto");B.clip();B.dom.appendChild(this.dom);if(A){B.setXY(A)}}return B},fxUnwrap:function(A,C,B){this.clearPositioning();this.setPositioning(C);if(!B.wrap){A.dom.parentNode.insertBefore(this.dom,A.dom);A.remove()}},getFxRestore:function(){var A=this.dom.style;return{pos:this.getPositioning(),width:A.width,height:A.height}},afterFx:function(A){if(A.afterStyle){this.applyStyles(A.afterStyle)}if(A.afterCls){this.addClass(A.afterCls)}if(A.remove===true){this.remove()}Ext.callback(A.callback,A.scope,[this]);if(!A.concurrent){this.fxQueue.shift();this.nextFx()}},getFxEl:function(){return Ext.get(this.dom)},fxanim:function(D,E,B,F,C,A){B=B||"run";E=E||{};var G=Ext.lib.Anim[B](this.dom,D,(E.duration||F)||0.35,(E.easing||C)||"easeOut",function(){Ext.callback(A,this)},this);E.anim=G;return G}};Ext.Fx.resize=Ext.Fx.scale;Ext.apply(Ext.Element.prototype,Ext.Fx); +Ext.CompositeElement=function(A){this.elements=[];this.addElements(A)};Ext.CompositeElement.prototype={isComposite:true,addElements:function(E){if(!E){return this}if(typeof E=="string"){E=Ext.Element.selectorFunction(E)}var D=this.elements;var B=D.length-1;for(var C=0,A=E.length;C"+A.text+""}if(typeof A.scripts!="undefined"){this.loadScripts=A.scripts}if(typeof A.timeout!="undefined"){this.timeout=A.timeout}}this.showLoading();if(!C){this.defaultUrl=B}if(typeof B=="function"){B=B.call(this)}F=F||(E?"POST":"GET");if(F=="GET"){B=this.prepareUrl(B)}var D=Ext.apply(A||{},{url:B,params:E,success:this.successDelegate,failure:this.failureDelegate,callback:undefined,timeout:(this.timeout*1000),argument:{"url":B,"form":null,"callback":G,"params":E}});this.transaction=Ext.Ajax.request(D)}},formUpdate:function(C,A,B,D){if(this.fireEvent("beforeupdate",this.el,C,A)!==false){if(typeof A=="function"){A=A.call(this)}C=Ext.getDom(C);this.transaction=Ext.Ajax.request({form:C,url:A,success:this.successDelegate,failure:this.failureDelegate,timeout:(this.timeout*1000),argument:{"url":A,"form":C,"callback":D,"reset":B}});this.showLoading.defer(1,this)}},refresh:function(A){if(this.defaultUrl==null){return }this.update(this.defaultUrl,null,A,true)},startAutoRefresh:function(B,C,D,E,A){if(A){this.update(C||this.defaultUrl,D,E,true)}if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId)}this.autoRefreshProcId=setInterval(this.update.createDelegate(this,[C||this.defaultUrl,D,E,true]),B*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(B){if(this.disableCaching){var A="_dc="+(new Date().getTime());if(B.indexOf("?")!==-1){B+="&"+A}else{B+="?"+A}}return B},processSuccess:function(A){this.transaction=null;if(A.argument.form&&A.argument.reset){try{A.argument.form.reset()}catch(B){}}if(this.loadScripts){this.renderer.render(this.el,A,this,this.updateComplete.createDelegate(this,[A]))}else{this.renderer.render(this.el,A,this);this.updateComplete(A)}},updateComplete:function(A){this.fireEvent("update",this.el,A);if(typeof A.argument.callback=="function"){A.argument.callback(this.el,true,A)}},processFailure:function(A){this.transaction=null;this.fireEvent("failure",this.el,A);if(typeof A.argument.callback=="function"){A.argument.callback(this.el,false,A)}},setRenderer:function(A){this.renderer=A},getRenderer:function(){return this.renderer},setDefaultUrl:function(A){this.defaultUrl=A},abort:function(){if(this.transaction){Ext.Ajax.abort(this.transaction)}},isUpdating:function(){if(this.transaction){return Ext.Ajax.isLoading(this.transaction)}return false}});Ext.UpdateManager.defaults={timeout:30,loadScripts:false,sslBlankUrl:(Ext.SSL_SECURE_URL||"javascript:false"),disableCaching:false,showLoadIndicator:true,indicatorText:"
      Loading...
      "};Ext.UpdateManager.updateElement=function(D,C,E,B){var A=Ext.get(D,true).getUpdateManager();Ext.apply(A,B);A.update(C,E,B?B.callback:null)};Ext.UpdateManager.update=Ext.UpdateManager.updateElement;Ext.UpdateManager.BasicRenderer=function(){};Ext.UpdateManager.BasicRenderer.prototype={render:function(C,A,B,D){C.update(A.responseText,B.loadScripts,D)}}; +Ext.util.DelayedTask=function(E,D,A){var G=null,F,B;var C=function(){var H=new Date().getTime();if(H-B>=F){clearInterval(G);G=null;E.apply(D,A||[])}};this.delay=function(I,K,J,H){if(G&&I!=F){this.cancel()}F=I;B=new Date().getTime();E=K||E;D=J||D;A=H||A;if(!G){G=setInterval(C,F)}};this.cancel=function(){if(G){clearInterval(G);G=null}}}; diff --git a/examples/ext/resources/css/README.txt b/examples/ext/resources/css/README.txt new file mode 100644 index 0000000..e476a5a --- /dev/null +++ b/examples/ext/resources/css/README.txt @@ -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). + diff --git a/examples/ext/resources/css/basic-dialog.css b/examples/ext/resources/css/basic-dialog.css new file mode 100644 index 0000000..450e919 --- /dev/null +++ b/examples/ext/resources/css/basic-dialog.css @@ -0,0 +1,286 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + +.x-dlg-proxy { + background-image: url(../images/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(../images/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(../images/default/basic-dialog/hd-sprite.gif) no-repeat 0 -41px; + padding-left:3px; + margin:0; +} +.x-dlg .x-dlg-hd-right { + background: url(../images/default/basic-dialog/hd-sprite.gif) no-repeat right 0; + padding-right:3px; +} +.x-dlg .x-dlg-dlg-body{ + background:url(../images/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 .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-left{ + background-position:0 -147px; +} +.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-right{ + background-position:0 -168px; +} +.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-center{ + background-position:0 -189px; +} + +.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-center{ + background-position:0 -126px; +} +.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-right{ + background-position:0 -84px; +} +.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-left{ + background-position:0 -63px; +} + +.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(../images/default/basic-dialog/close.gif); +} +.x-dlg .x-dlg-collapse { + background-image:url(../images/default/basic-dialog/collapse.gif); +} +.x-dlg-collapsed .x-dlg-collapse { + background-image:url(../images/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(../images/default/basic-dialog/e-handle.gif); + border:0; + background-position:right; + margin-right:0; +} +.x-dlg div.x-resizable-handle-south{ + background-image:url(../images/default/sizer/s-handle-dark.gif); + border:0; + height:6px; +} +.x-dlg div.x-resizable-handle-west{ + background-image:url(../images/default/basic-dialog/e-handle.gif); + border:0; + background-position:1px; +} +.x-dlg div.x-resizable-handle-north{ + background-image:url(../images/default/s.gif); + border:0; +} +.x-dlg div.x-resizable-handle-northeast, .xtheme-gray .x-dlg div.x-resizable-handle-northeast{ + background-image:url(../images/default/s.gif); + border:0; +} +.x-dlg div.x-resizable-handle-northwest, .xtheme-gray .x-dlg div.x-resizable-handle-northwest{ + background-image:url(../images/default/s.gif); + border:0; +} +.x-dlg div.x-resizable-handle-southeast{ + background-image:url(../images/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(../images/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(../images/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(../images/default/grid/loading.gif) no-repeat left; + display:block; + width:300px; + padding-left:18px; + line-height:18px; +} \ No newline at end of file diff --git a/examples/ext/resources/css/box.css b/examples/ext/resources/css/box.css new file mode 100644 index 0000000..aa293bd --- /dev/null +++ b/examples/ext/resources/css/box.css @@ -0,0 +1,111 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + +/* + Creates rounded, raised boxes like on the Ext website - the markup isn't pretty: +
      +
      +
      +

      YOUR TITLE HERE (optional)

      +
      YOUR CONTENT HERE
      +
      +
      +
      + */ + +.x-box-tl { + background: transparent url(../images/default/box/corners.gif) no-repeat 0 0; + zoom:1; +} + +.x-box-tc { + height: 8px; + background: transparent url(../images/default/box/tb.gif) repeat-x 0 0; + overflow: hidden; +} + +.x-box-tr { + background: transparent url(../images/default/box/corners.gif) no-repeat right -8px; +} + +.x-box-ml { + background: transparent url(../images/default/box/l.gif) repeat-y 0; + padding-left: 4px; + overflow: hidden; + zoom:1; +} + +.x-box-mc { + background: #eee url(../images/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(../images/default/box/r.gif) repeat-y right; + padding-right: 4px; + overflow: hidden; +} + +.x-box-bl { + background: transparent url(../images/default/box/corners.gif) no-repeat 0 -16px; + zoom:1; +} + +.x-box-bc { + background: transparent url(../images/default/box/tb.gif) repeat-x 0 -8px; + height: 8px; + overflow: hidden; +} + +.x-box-br { + background: transparent url(../images/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(../images/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(../images/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(../images/default/box/l-blue.gif); +} + +.x-box-blue .x-box-mr { + background-image: url(../images/default/box/r-blue.gif); +} \ No newline at end of file diff --git a/examples/ext/resources/css/button.css b/examples/ext/resources/css/button.css new file mode 100644 index 0000000..2242301 --- /dev/null +++ b/examples/ext/resources/css/button.css @@ -0,0 +1,148 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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; +} +.ext-ie .x-btn button { + padding-top:2px; +} +/* + 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:2px; + padding-right:0; +} + +.x-btn-left, .x-btn-right{ + font-size:1px; + line-height:1px; +} +.x-btn-left{ + width:3px; + height:21px; + background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 0; +} +.x-btn-right{ + width:3px; + height:21px; + background:url(../images/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(../images/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-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(../images/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(../images/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(../images/default/toolbar/btn-arrow.gif) no-repeat right 3px; + padding-right:10px; +} \ No newline at end of file diff --git a/examples/ext/resources/css/combo.css b/examples/ext/resources/css/combo.css new file mode 100644 index 0000000..a4df25f --- /dev/null +++ b/examples/ext/resources/css/combo.css @@ -0,0 +1,50 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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 */ + zoom:1; + overflow-x:hidden; +} +.x-combo-list-hd { + font:bold 11px tahoma, arial, helvetica, sans-serif; + color:#15428b; + background-image: url(../images/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; + 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; +} +.x-combo-list-small .x-combo-list-item { + font:normal 11px tahoma, arial, helvetica, sans-serif; +} \ No newline at end of file diff --git a/examples/ext/resources/css/core.css b/examples/ext/resources/css/core.css new file mode 100644 index 0000000..c4af4cd --- /dev/null +++ b/examples/ext/resources/css/core.css @@ -0,0 +1,291 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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(../images/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; +} + +.ext-shim { + position:absolute; + visibility:hidden; + left:0; + top:0; + overflow:hidden; +} +.ext-ie .ext-shim { + filter: alpha(opacity=0); +} + +.x-mask-loading div { + padding:5px 10px 5px 25px; + background: #eee url( '../images/default/grid/loading.gif' ) no-repeat 5px 5px; + line-height: 16px; +} + +/* class for hiding elements without using display:none */ +.x-hidden { + position:absolute; + left:-10000px; + top:-10000px; +} + +.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; + cursor: pointer; +} + +.x-color-palette a { + border: 1px solid #fff; + float: left; + padding: 2px; + text-decoration: none; + -moz-outline: 0 none; + outline: 0 none; + cursor: pointer; +} + +.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-ie-shadow { + display: none; + position: absolute; + overflow: hidden; + left:0; + top:0; + background:#777; + zoom:1; +} + +.x-shadow { + display: none; + position: absolute; + overflow: hidden; + left:0; + top:0; +} + +.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: transparent url( ../images/default/shadow-c.png ); +} + +.x-shadow .xst, .x-shadow .xsb { + height: 6px; + overflow: hidden; + width: 100%; +} + +.x-shadow .xsml { + background: transparent url( ../images/default/shadow-lr.png ) repeat-y 0 0; +} + +.x-shadow .xsmr { + background: transparent url( ../images/default/shadow-lr.png ) repeat-y -6px 0; +} + +.x-shadow .xstl { + background: transparent url( ../images/default/shadow.png ) no-repeat 0 0; +} + +.x-shadow .xstc { + background: transparent url( ../images/default/shadow.png ) repeat-x 0 -30px; +} + +.x-shadow .xstr { + background: transparent url( ../images/default/shadow.png ) repeat-x 0 -18px; +} + +.x-shadow .xsbl { + background: transparent url( ../images/default/shadow.png ) no-repeat 0 -12px; +} + +.x-shadow .xsbc { + background: transparent url( ../images/default/shadow.png ) repeat-x 0 -36px; +} + +.x-shadow .xsbr { + background: transparent url( ../images/default/shadow.png ) repeat-x 0 -6px; +} + +.loading-indicator { + font-size: 11px; + background-image: url( '../images/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; +} diff --git a/examples/ext/resources/css/date-picker.css b/examples/ext/resources/css/date-picker.css new file mode 100644 index 0000000..fd72b35 --- /dev/null +++ b/examples/ext/resources/css/date-picker.css @@ -0,0 +1,246 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + +.x-date-picker { + border: 1px solid #1b376c; + border-top:0 none; + background:#fff; + position:relative; +} +.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(../images/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(../images/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(../images/default/shared/right-btn.gif); + margin-right:2px; + text-decoration:none !important; +} +.x-date-left a{ + background-image: url(../images/default/shared/left-btn.gif); + margin-left:2px; + text-decoration:none !important; +} +table.x-date-inner { + width:100%; + table-layout:fixed; +} +.x-date-inner th { + width:25px; +} +.x-date-inner th { + background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top; + 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: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top; + border:1px solid #8db2e3; + 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; + text-decoration:none !important; +} +.x-date-bottom { + padding:4px; + border-top: 1px solid #a3bad9; + background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top; +} + +.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{ + text-decoration:none !important; + 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-date-mp { + position:absolute; + left:0; + top:0; + background:white; + display:none; +} +.x-date-mp td { + padding:2px; + font:normal 11px arial, helvetica,tahoma,sans-serif; +} +td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn { + border: 0 none; + text-align:center; + vertical-align: middle; + width:25%; +} +.x-date-mp-ok { + margin-right:3px; +} +.x-date-mp-btns button { + text-decoration:none; + text-align:center; + text-decoration:none !important; + background:#083772; + color:white; + border:1px solid; + border-color: #3366cc #000055 #000055 #3366cc; + padding:1px 3px 1px; + font:normal 11px arial, helvetica,tahoma,sans-serif; + cursor:pointer; +} +.x-date-mp-btns { + background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top; +} +.x-date-mp-btns td { + border-top: 1px solid #c5d2df; + text-align:center; +} +td.x-date-mp-month a,td.x-date-mp-year a { + display:block; + padding:2px 4px; + text-decoration:none; + text-align:center; + color:#15428b; +} + +td.x-date-mp-month a:hover,td.x-date-mp-year a:hover { + color:#15428b; + text-decoration:none; + cursor:pointer; + background: #ddecfe; +} + +td.x-date-mp-sel a { + padding:1px 3px; + background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top; + border:1px solid #8db2e3; +} +.x-date-mp-ybtn a { + overflow:hidden; + width:15px; + height:15px; + cursor:pointer; + background:transparent url(../images/default/panel/tool-sprites.gif) no-repeat; + display:block; + margin:0 auto; +} +.x-date-mp-ybtn a.x-date-mp-next { + background-position:0 -120px; +} +.x-date-mp-ybtn a.x-date-mp-next:hover { + background-position:-15px -120px; +} +.x-date-mp-ybtn a.x-date-mp-prev { + background-position:0 -105px; +} +.x-date-mp-ybtn a.x-date-mp-prev:hover { + background-position:-15px -105px; +} +.x-date-mp-ybtn { + text-align:center; +} +td.x-date-mp-sep { + border-right:1px solid #c5d2df; +} \ No newline at end of file diff --git a/examples/ext/resources/css/dd.css b/examples/ext/resources/css/dd.css new file mode 100644 index 0000000..663c3f8 --- /dev/null +++ b/examples/ext/resources/css/dd.css @@ -0,0 +1,61 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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(../images/default/dd/drop-no.gif); +} +.x-dd-drop-ok .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-yes.gif); +} +.x-dd-drop-ok-add .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-add.gif); +} \ No newline at end of file diff --git a/examples/ext/resources/css/debug.css b/examples/ext/resources/css/debug.css new file mode 100644 index 0000000..d69be95 --- /dev/null +++ b/examples/ext/resources/css/debug.css @@ -0,0 +1,55 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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 diff --git a/examples/ext/resources/css/editor.css b/examples/ext/resources/css/editor.css new file mode 100644 index 0000000..e13242e --- /dev/null +++ b/examples/ext/resources/css/editor.css @@ -0,0 +1,66 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + +.x-html-editor-wrap { + border:1px solid #a9bfd3; + background:white; +} +.x-html-editor-tb .x-btn-text { + background:transparent url(../images/default/editor/tb-sprite.gif) no-repeat; +} +.x-html-editor-tb .x-edit-bold .x-btn-text { + background-position:0 0; +} +.x-html-editor-tb .x-edit-italic .x-btn-text { + background-position:-16px 0; +} +.x-html-editor-tb .x-edit-underline .x-btn-text { + background-position:-32px 0; +} +.x-html-editor-tb .x-edit-forecolor .x-btn-text { + background-position:-160px 0; +} +.x-html-editor-tb .x-edit-backcolor .x-btn-text { + background-position:-176px 0; +} +.x-html-editor-tb .x-edit-justifyleft .x-btn-text { + background-position:-112px 0; +} +.x-html-editor-tb .x-edit-justifycenter .x-btn-text { + background-position:-128px 0; +} +.x-html-editor-tb .x-edit-justifyright .x-btn-text { + background-position:-144px 0; +} +.x-html-editor-tb .x-edit-insertorderedlist .x-btn-text { + background-position:-80px 0; +} +.x-html-editor-tb .x-edit-insertunorderedlist .x-btn-text { + background-position:-96px 0; +} +.x-html-editor-tb .x-edit-increasefontsize .x-btn-text { + background-position:-48px 0; +} +.x-html-editor-tb .x-edit-decreasefontsize .x-btn-text { + background-position:-64px 0; +} +.x-html-editor-tb .x-edit-sourceedit .x-btn-text { + background-position:-192px 0; +} +.x-html-editor-tb .x-edit-createlink .x-btn-text { + background-position:-208px 0; +} + +.x-html-editor-tip .x-tip-bd .x-tip-bd-inner { + padding:5px; + padding-bottom:1px; +} + +.x-html-editor-tb .x-toolbar { + position:static !important; +} \ No newline at end of file diff --git a/examples/ext/resources/css/ext-all.css b/examples/ext/resources/css/ext-all.css new file mode 100644 index 0000000..3cd9d7d --- /dev/null +++ b/examples/ext/resources/css/ext-all.css @@ -0,0 +1,637 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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(../images/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;} +.ext-shim{position:absolute;visibility:hidden;left:0;top:0;overflow:hidden;} +.ext-ie .ext-shim{filter:alpha(opacity=0);} +.x-mask-loading div{padding:5px 10px 5px 25px;background:#eee url( '../images/default/grid/loading.gif' ) no-repeat 5px 5px;line-height:16px;} +.x-hidden{position:absolute;left:-10000px;top:-10000px;} +.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;cursor:pointer;} +.x-color-palette a{border:1px solid #fff;float:left;padding:2px;text-decoration:none;-moz-outline:0 none;outline:0 none;cursor:pointer;} +.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-ie-shadow{display:none;position:absolute;overflow:hidden;left:0;top:0;background:#777;zoom:1;} +.x-shadow{display:none;position:absolute;overflow:hidden;left:0;top:0;} +.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:transparent url( ../images/default/shadow-c.png );} +.x-shadow .xst,.x-shadow .xsb{height:6px;overflow:hidden;width:100%;} +.x-shadow .xsml{background:transparent url( ../images/default/shadow-lr.png ) repeat-y 0 0;} +.x-shadow .xsmr{background:transparent url( ../images/default/shadow-lr.png ) repeat-y -6px 0;} +.x-shadow .xstl{background:transparent url( ../images/default/shadow.png ) no-repeat 0 0;} +.x-shadow .xstc{background:transparent url( ../images/default/shadow.png ) repeat-x 0 -30px;} +.x-shadow .xstr{background:transparent url( ../images/default/shadow.png ) repeat-x 0 -18px;} +.x-shadow .xsbl{background:transparent url( ../images/default/shadow.png ) no-repeat 0 -12px;} +.x-shadow .xsbc{background:transparent url( ../images/default/shadow.png ) repeat-x 0 -36px;} +.x-shadow .xsbr{background:transparent url( ../images/default/shadow.png ) repeat-x 0 -6px;} +.loading-indicator{font-size:11px;background-image:url( '../images/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:#aaa;} +.x-tabs-strip .x-tabs-inner{padding:4px 10px;} +.x-tabs-strip .on .x-tabs-right{background:url(../images/default/tabs/tab-sprite.gif) no-repeat right 0;} +.x-tabs-strip .on .x-tabs-left{background:url(../images/default/tabs/tab-sprite.gif) no-repeat 0 -100px;} +.x-tabs-strip .x-tabs-right{background:url(../images/default/tabs/tab-sprite.gif) no-repeat right -50px;} +.x-tabs-strip .x-tabs-left{background:url(../images/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(../images/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(../images/default/layout/tab-close-on.gif);} +.x-tabs-strip .x-tabs-closable .close-over{background-image:url(../images/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(../images/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;} +.x-tabs-bottom .x-tabs-strip .x-tabs-left{background:url(../images/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;} +.x-tabs-bottom .x-tabs-strip .on .x-tabs-right{background:url(../images/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;} +.x-tabs-bottom .x-tabs-strip .on .x-tabs-left{background:url(../images/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;font:normal 12px tahoma,arial,helvetica,sans-serif;} +.x-form-text,textarea.x-form-field{padding:1px 3px;background:#fff url(../images/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(../images/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-date-trigger{background-image:url(../images/default/form/date-trigger.gif);cursor:pointer;} +.x-form-field-wrap .x-form-clear-trigger{background-image:url(../images/default/form/clear-trigger.gif);cursor:pointer;} +.x-form-field-wrap .x-form-search-trigger{background-image:url(../images/default/form/search-trigger.gif);cursor:pointer;} +.ext-safari .x-form-field-wrap .x-form-trigger{right:0;} +.x-form-field-wrap .x-form-twin-triggers .x-form-trigger{position:static;top:auto;vertical-align:top;} +.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-trigger-wrap-focus .x-form-trigger{background-position:-51px 0;} +.x-trigger-wrap-focus .x-form-trigger-over{background-position:-68px 0;} +.x-trigger-wrap-focus .x-form-trigger-click{background-position:-85px 0;} +.x-trigger-wrap-focus .x-form-trigger{border-bottom:1px solid #7eadd9;} +.x-item-disabled .x-form-trigger-over{background-position:0 0!important;border-bottom:1px solid #B5B8C8;} +.x-item-disabled .x-form-trigger-click{background-position:0 0!important;border-bottom:1px solid #B5B8C8;} +.x-form-focus,textarea.x-form-focus{border:1px solid #7eadd9;} +.x-form-invalid,textarea.x-form-invalid{background:#fff url(../images/default/grid/invalid_line.gif) repeat-x bottom;border:1px solid #dd7870;} +.ext-safari .x-form-invalid{background-color:#fee;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-grow-sizer p{margin:0!important;border:0 none!important;padding:0!important;} +.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;z-index:2;position:relative;} +.x-form-element{padding-left:105px;position:relative;} +.x-form-invalid-msg{color:#e00;padding:2px;padding-left:18px;font:normal 11px tahoma,arial,helvetica,sans-serif;background:transparent url(../images/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;position:static;} +.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;} +.ext-ie .x-form fieldset{padding-top:0;} +.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 .x-form-btns-ct .x-btn-focus .x-btn-left{background-position:0 -147px;} +.x-form .x-form-btns-ct .x-btn-focus .x-btn-right{background-position:0 -168px;} +.x-form .x-form-btns-ct .x-btn-focus .x-btn-center{background-position:0 -189px;} +.x-form .x-form-btns-ct .x-btn-click .x-btn-center{background-position:0 -126px;} +.x-form .x-form-btns-ct .x-btn-click .x-btn-right{background-position:0 -84px;} +.x-form .x-form-btns-ct .x-btn-click .x-btn-left{background-position:0 -63px;} +.x-form-invalid-icon{width:16px;height:18px;visibility:hidden;position:absolute;left:0;top:0;display:block;background:transparent url(../images/default/form/exclamation.gif) no-repeat 0 2px;} +.ext-ie td .x-form-text{position:relative;top:-1px;} + +.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;} +.ext-ie .x-btn button{padding-top:2px;} +.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:2px;padding-right:0;} +.x-btn-left,.x-btn-right{font-size:1px;line-height:1px;} +.x-btn-left{width:3px;height:21px;background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 0;} +.x-btn-right{width:3px;height:21px;background:url(../images/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(../images/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-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(../images/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(../images/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(../images/default/toolbar/btn-arrow.gif) no-repeat right 3px;padding-right:10px;} + +.x-toolbar{border-top:1px solid #eaf0f7;border-bottom:1px solid #a9bfd3;display:block;padding:2px;background:#d0def0 url(../images/default/layout/panel-title-light-bg.gif) repeat-x;position:relative;zoom:1;} +.x-toolbar .x-item-disabled .x-btn-icon{opacity:.35;-moz-opacity:.35;filter:alpha(opacity=35);} +.x-toolbar td{vertical-align:middle;} +.mso .x-toolbar,.x-grid-mso .x-toolbar{border:0 none;background:url(../images/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;} +.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(../images/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(../images/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(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 0;} +.x-toolbar .x-btn-over .x-btn-right{background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;} +.x-toolbar .x-btn-over .x-btn-center{background:url(../images/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(../images/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(../images/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(../images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;} +.x-toolbar .x-btn-with-menu .x-btn-center em{padding-right:8px;} +.x-toolbar .ytb-text{padding:2px;} +.x-toolbar .ytb-sep{background-image:url(../images/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(../images/default/grid/grid-blue-split.gif);} +.x-grid-page-number{width:24px;height:14px;} +.x-grid-page-first .x-btn-text{background-image:url(../images/default/grid/page-first.gif);} +.x-grid-loading .x-btn-text{background-image:url(../images/default/grid/done.gif);} +.x-grid-page-last .x-btn-text{background-image:url(../images/default/grid/page-last.gif);} +.x-grid-page-next .x-btn-text{background-image:url(../images/default/grid/page-next.gif);} +.x-grid-page-prev .x-btn-text{background-image:url(../images/default/grid/page-prev.gif);} +.x-item-disabled .x-grid-loading .x-btn-text{background-image:url(../images/default/grid/loading.gif);} +.x-item-disabled .x-grid-page-first .x-btn-text{background-image:url(../images/default/grid/page-first-disabled.gif);} +.x-item-disabled .x-grid-page-last .x-btn-text{background-image:url(../images/default/grid/page-last-disabled.gif);} +.x-item-disabled .x-grid-page-next .x-btn-text{background-image:url(../images/default/grid/page-next-disabled.gif);} +.x-item-disabled .x-grid-page-prev .x-btn-text{background-image:url(../images/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(../images/default/sizer/e-handle.gif);background-position:left;} +.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-west{background:url(../images/default/sizer/e-handle.gif);background-position:left;} +.x-resizable-over .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-south{background:url(../images/default/sizer/s-handle.gif);background-position:top;} +.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-north{background:url(../images/default/sizer/s-handle.gif);background-position:top;} +.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background:url(../images/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(../images/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(../images/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(../images/default/sizer/sw-handle.gif);background-position:top right;} +.x-resizable-proxy{border:1px dashed #6593cf;position:absolute;overflow:hidden;display:none;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-color:#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-color:#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-color:#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-row{cursor:default;} +.x-grid-row-alt{background-color:#f1f1f1;} +.x-grid-row-over td{background-color:#d9e8fb;} +.x-grid-resize-proxy{width:3px;background-color:#ccc;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(../images/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(../images/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(../images/default/grid/sort_asc.gif);display:inline;} +.x-grid-header .sort-desc .x-grid-sort-icon{background-image:url(../images/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(../images/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(../images/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(../images/default/grid/col-move-top.gif) no-repeat left top;} +.col-move-bottom{background:transparent url(../images/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(../images/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(../images/default/grid/dirty.gif) no-repeat 0 0;} +.x-grid-row-alt .x-grid-dirty-cell{background-color:#f1f1f1;} +.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(../images/default/grid/hmenu-asc.gif);} +.xg-hmenu-sort-desc .x-menu-item-icon{background-image:url(../images/default/grid/hmenu-desc.gif);} +.xg-hmenu-lock .x-menu-item-icon{background-image:url(../images/default/grid/hmenu-lock.gif);} +.xg-hmenu-unlock .x-menu-item-icon{background-image:url(../images/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-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(../images/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(../images/default/layout/panel-close.gif);} +.x-layout-stick{background-image:url(../images/default/layout/stick.gif);} +.x-layout-collapse-west,.x-layout-expand-east{background-image:url(../images/default/layout/collapse.gif);} +.x-layout-expand-west,.x-layout-collapse-east{background-image:url(../images/default/layout/expand.gif);} +.x-layout-collapse-north,.x-layout-expand-south{background-image:url(../images/default/layout/ns-collapse.gif);} +.x-layout-expand-north,.x-layout-collapse-south{background-image:url(../images/default/layout/ns-expand.gif);} +.x-layout-split-h{background-image:url(../images/default/sizer/e-handle.gif);background-position:left;} +.x-layout-split-v{background-image:url(../images/default/sizer/s-handle.gif);background-position:top;} +.x-layout-panel .x-tabs-wrap{background:url(../images/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(../images/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(../images/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:#aaa;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(../images/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(../images/default/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;padding-left:3px;margin:0;} +.x-dlg .x-dlg-hd-right{background:url(../images/default/basic-dialog/hd-sprite.gif) no-repeat right 0;padding-right:3px;} +.x-dlg .x-dlg-dlg-body{background:url(../images/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 .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-left{background-position:0 -147px;} +.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-right{background-position:0 -168px;} +.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-center{background-position:0 -189px;} +.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-center{background-position:0 -126px;} +.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-right{background-position:0 -84px;} +.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-left{background-position:0 -63px;} +.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(../images/default/basic-dialog/close.gif);} +.x-dlg .x-dlg-collapse{background-image:url(../images/default/basic-dialog/collapse.gif);} +.x-dlg-collapsed .x-dlg-collapse{background-image:url(../images/default/basic-dialog/expand.gif);} +.x-dlg div.x-resizable-handle-east{background-image:url(../images/default/basic-dialog/e-handle.gif);border:0;background-position:right;margin-right:0;} +.x-dlg div.x-resizable-handle-south{background-image:url(../images/default/sizer/s-handle-dark.gif);border:0;height:6px;} +.x-dlg div.x-resizable-handle-west{background-image:url(../images/default/basic-dialog/e-handle.gif);border:0;background-position:1px;} +.x-dlg div.x-resizable-handle-north{background-image:url(../images/default/s.gif);border:0;} +.x-dlg div.x-resizable-handle-northeast,.xtheme-gray .x-dlg div.x-resizable-handle-northeast{background-image:url(../images/default/s.gif);border:0;} +.x-dlg div.x-resizable-handle-northwest,.xtheme-gray .x-dlg div.x-resizable-handle-northwest{background-image:url(../images/default/s.gif);border:0;} +.x-dlg div.x-resizable-handle-southeast{background-image:url(../images/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(../images/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(../images/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(../images/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 #ddd;border-left:1px solid #ddd;border-right:1px solid #bbb;border-bottom:1px solid #bbb;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(../images/default/dd/drop-no.gif);} +.x-dd-drop-ok .x-dd-drop-icon{background-image:url(../images/default/dd/drop-yes.gif);} +.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(../images/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(../images/default/tree/folder.gif);} +.x-tree-node-expanded .x-tree-node-icon{background-image:url(../images/default/tree/folder-open.gif);} +.x-tree-node-leaf .x-tree-node-icon{background-image:url(../images/default/tree/leaf.gif);} +.ext-ie input.x-tree-node-cb{width:15px;height:15px;} +input.x-tree-node-cb{margin-left:1px;} +.ext-ie input.x-tree-node-cb{margin-left:0;} +.x-tree-noicon .x-tree-node-icon{width:0;height:0;} +.x-tree-node-loading .x-tree-node-icon{background-image:url(../images/default/tree/loading.gif)!important;} +.x-tree-node-loading a span{font-style:italic;color:#444;} +.x-tree-lines .x-tree-elbow{background-image:url(../images/default/tree/elbow.gif);} +.x-tree-lines .x-tree-elbow-plus{background-image:url(../images/default/tree/elbow-plus.gif);} +.x-tree-lines .x-tree-elbow-minus{background-image:url(../images/default/tree/elbow-minus.gif);} +.x-tree-lines .x-tree-elbow-end{background-image:url(../images/default/tree/elbow-end.gif);} +.x-tree-lines .x-tree-elbow-end-plus{background-image:url(../images/default/tree/elbow-end-plus.gif);} +.x-tree-lines .x-tree-elbow-end-minus{background-image:url(../images/default/tree/elbow-end-minus.gif);} +.x-tree-lines .x-tree-elbow-line{background-image:url(../images/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(../images/default/tree/elbow-plus-nl.gif);} +.x-tree-no-lines .x-tree-elbow-minus{background-image:url(../images/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(../images/default/tree/elbow-end-plus-nl.gif);} +.x-tree-no-lines .x-tree-elbow-end-minus{background-image:url(../images/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 #36c;} +.x-tree-node div.x-tree-drag-insert-above{border-top:1px dotted #36c;} +.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 #36c;} +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{border-top:2px solid #36c;} +.x-tree-node .x-tree-drag-append a span{background:#ddd;border:1px dotted gray;} +.x-tree-node .x-tree-selected a span{background:#36c;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(../images/default/tree/drop-add.gif);} +.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url(../images/default/tree/drop-over.gif);} +.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url(../images/default/tree/drop-under.gif);} +.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url(../images/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(../images/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(../images/default/qtip/tip-sprite.gif) no-repeat 0 -12px;height:6px;overflow:hidden;} +.x-tip .x-tip-top-left{background:transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 0;padding-left:6px;zoom:1;} +.x-tip .x-tip-top-right{background:transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right 0;padding-right:6px;zoom:1;} +.x-tip .x-tip-ft{background:transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -18px;height:6px;overflow:hidden;} +.x-tip .x-tip-ft-left{background:transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -6px;padding-left:6px;zoom:1;} +.x-tip .x-tip-ft-right{background:transparent url(../images/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(../images/default/qtip/tip-sprite.gif) no-repeat 0 -24px;padding-left:6px;zoom:1;} +.x-tip .x-tip-bd-right{background:transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right -24px;padding-right:6px;zoom:1;} +.x-tip h3{font:bold 11px tahoma,arial,helvetica,sans-serif;margin:0;padding:2px 0;color:#444;} +.x-tip .x-tip-bd-inner{font:normal 11px tahoma,arial,helvetica,sans-serif;margin:0!important;line-height:14px;color:#444;padding:0;float:left;} +.x-form-invalid-tip .x-tip-top{background-image:url(../images/default/form/error-tip-corners.gif);} +.x-form-invalid-tip .x-tip-top-left{background-image:url(../images/default/form/error-tip-corners.gif);} +.x-form-invalid-tip .x-tip-top-right{background-image:url(../images/default/form/error-tip-corners.gif);} +.x-form-invalid-tip .x-tip-ft{background-image:url(../images/default/form/error-tip-corners.gif);} +.x-form-invalid-tip .x-tip-ft-left{background-image:url(../images/default/form/error-tip-corners.gif);} +.x-form-invalid-tip .x-tip-ft-right{background-image:url(../images/default/form/error-tip-corners.gif);} +.x-form-invalid-tip .x-tip-bd-left{background-image:url(../images/default/form/error-tip-corners.gif);} +.x-form-invalid-tip .x-tip-bd-right{background-image:url(../images/default/form/error-tip-corners.gif);} +.x-form-invalid-tip .x-tip-bd .x-tip-bd-inner{padding-left:24px;background:transparent url(../images/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;position:relative;} +.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(../images/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(../images/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(../images/default/shared/right-btn.gif);margin-right:2px;text-decoration:none!important;} +.x-date-left a{background-image:url(../images/default/shared/left-btn.gif);margin-left:2px;text-decoration:none!important;} +table.x-date-inner{width:100%;table-layout:fixed;} +.x-date-inner th{width:25px;} +.x-date-inner th{background:#dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;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:#dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;border:1px solid #8db2e3;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:#aaa;text-decoration:none!important;} +.x-date-bottom{padding:4px;border-top:1px solid #a3bad9;background:#dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;} +.x-date-inner a:hover,.x-date-inner .x-date-disabled a:hover{text-decoration:none!important;color:black;background:#ddecfe;} +.x-date-inner .x-date-disabled a{cursor:default;background:#eee;color:#bbb;} +.x-date-mmenu{background:#eee!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-date-mp{position:absolute;left:0;top:0;background:white;display:none;} +.x-date-mp td{padding:2px;font:normal 11px arial,helvetica,tahoma,sans-serif;} +td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn{border:0 none;text-align:center;vertical-align:middle;width:25%;} +.x-date-mp-ok{margin-right:3px;} +.x-date-mp-btns button{text-decoration:none;text-align:center;text-decoration:none!important;background:#083772;color:white;border:1px solid;border-color:#36c #005 #005 #36c;padding:1px 3px 1px;font:normal 11px arial,helvetica,tahoma,sans-serif;cursor:pointer;} +.x-date-mp-btns{background:#dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;} +.x-date-mp-btns td{border-top:1px solid #c5d2df;text-align:center;} +td.x-date-mp-month a,td.x-date-mp-year a{display:block;padding:2px 4px;text-decoration:none;text-align:center;color:#15428b;} +td.x-date-mp-month a:hover,td.x-date-mp-year a:hover{color:#15428b;text-decoration:none;cursor:pointer;background:#ddecfe;} +td.x-date-mp-sel a{padding:1px 3px;background:#dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;border:1px solid #8db2e3;} +.x-date-mp-ybtn a{overflow:hidden;width:15px;height:15px;cursor:pointer;background:transparent url(../images/default/panel/tool-sprites.gif) no-repeat;display:block;margin:0 auto;} +.x-date-mp-ybtn a.x-date-mp-next{background-position:0 -120px;} +.x-date-mp-ybtn a.x-date-mp-next:hover{background-position:-15px -120px;} +.x-date-mp-ybtn a.x-date-mp-prev{background-position:0 -105px;} +.x-date-mp-ybtn a.x-date-mp-prev:hover{background-position:-15px -105px;} +.x-date-mp-ybtn{text-align:center;} +td.x-date-mp-sep{border-right:1px solid #c5d2df;} + +.x-menu{border:1px solid #718bb7;z-index:15000;background:#fff url(../images/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{font-size:1px;line-height:1px;} +.x-menu-list-item{font:normal 11px tahoma,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(../images/default/menu/menu-parent.gif) no-repeat right;} +.x-menu-sep{display:block;font-size:1px;line-height:1px;height:1px;background:#c3daf9;margin:3px 3px 3px 32px;} +.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(../images/default/menu/unchecked.gif) no-repeat center;} +.x-menu-item-checked .x-menu-item-icon{background-image:url(../images/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(../images/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-date-menu{padding:0!important;} + + .x-box-tl{background:transparent url(../images/default/box/corners.gif) no-repeat 0 0;zoom:1;} +.x-box-tc{height:8px;background:transparent url(../images/default/box/tb.gif) repeat-x 0 0;overflow:hidden;} +.x-box-tr{background:transparent url(../images/default/box/corners.gif) no-repeat right -8px;} +.x-box-ml{background:transparent url(../images/default/box/l.gif) repeat-y 0;padding-left:4px;overflow:hidden;zoom:1;} +.x-box-mc{background:#eee url(../images/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(../images/default/box/r.gif) repeat-y right;padding-right:4px;overflow:hidden;} +.x-box-bl{background:transparent url(../images/default/box/corners.gif) no-repeat 0 -16px;zoom:1;} +.x-box-bc{background:transparent url(../images/default/box/tb.gif) repeat-x 0 -8px;height:8px;overflow:hidden;} +.x-box-br{background:transparent url(../images/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(../images/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(../images/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(../images/default/box/l-blue.gif);} +.x-box-blue .x-box-mr{background-image:url(../images/default/box/r-blue.gif);} + +#x-debug-browser .x-tree .x-tree-node a span{color:#222297;font-size: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 #eee!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:#eee;border:1px dashed #aaa;} + +.x-combo-list{border:1px solid #98c0f4;background:#ddecfe;zoom:1;overflow:hidden;} +.x-combo-list-inner{overflow:auto;background:white;position:relative;zoom:1;overflow-x:hidden;} +.x-combo-list-hd{font:bold 11px tahoma,arial,helvetica,sans-serif;color:#15428b;background-image:url(../images/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;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} +.x-combo-list .x-combo-selected{background-color:#c3daf9!important;cursor:pointer;border:1px solid #369;} +.x-combo-noedit{cursor:pointer;} +.x-combo-list-small .x-combo-list-item{font:normal 11px tahoma,arial,helvetica,sans-serif;} + +.x-html-editor-wrap{border:1px solid #a9bfd3;background:white;} +.x-html-editor-tb .x-btn-text{background:transparent url(../images/default/editor/tb-sprite.gif) no-repeat;} +.x-html-editor-tb .x-edit-bold .x-btn-text{background-position:0 0;} +.x-html-editor-tb .x-edit-italic .x-btn-text{background-position:-16px 0;} +.x-html-editor-tb .x-edit-underline .x-btn-text{background-position:-32px 0;} +.x-html-editor-tb .x-edit-forecolor .x-btn-text{background-position:-160px 0;} +.x-html-editor-tb .x-edit-backcolor .x-btn-text{background-position:-176px 0;} +.x-html-editor-tb .x-edit-justifyleft .x-btn-text{background-position:-112px 0;} +.x-html-editor-tb .x-edit-justifycenter .x-btn-text{background-position:-128px 0;} +.x-html-editor-tb .x-edit-justifyright .x-btn-text{background-position:-144px 0;} +.x-html-editor-tb .x-edit-insertorderedlist .x-btn-text{background-position:-80px 0;} +.x-html-editor-tb .x-edit-insertunorderedlist .x-btn-text{background-position:-96px 0;} +.x-html-editor-tb .x-edit-increasefontsize .x-btn-text{background-position:-48px 0;} +.x-html-editor-tb .x-edit-decreasefontsize .x-btn-text{background-position:-64px 0;} +.x-html-editor-tb .x-edit-sourceedit .x-btn-text{background-position:-192px 0;} +.x-html-editor-tb .x-edit-createlink .x-btn-text{background-position:-208px 0;} +.x-html-editor-tip .x-tip-bd .x-tip-bd-inner{padding:5px;padding-bottom:1px;} +.x-html-editor-tb .x-toolbar{position:static!important;} + diff --git a/examples/ext/resources/css/form.css b/examples/ext/resources/css/form.css new file mode 100644 index 0000000..21dd5bc --- /dev/null +++ b/examples/ext/resources/css/form.css @@ -0,0 +1,407 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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(../images/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(../images/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-date-trigger{ + background-image: url(../images/default/form/date-trigger.gif); + cursor:pointer; +} +.x-form-field-wrap .x-form-clear-trigger{ + background-image: url(../images/default/form/clear-trigger.gif); + cursor:pointer; +} +.x-form-field-wrap .x-form-search-trigger{ + background-image: url(../images/default/form/search-trigger.gif); + cursor:pointer; +} +.ext-safari .x-form-field-wrap .x-form-trigger{ + right:0; +} +.x-form-field-wrap .x-form-twin-triggers{ + +} +.x-form-field-wrap .x-form-twin-triggers .x-form-trigger{ + position:static; + top:auto; + vertical-align:top; +} + + +.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-trigger-wrap-focus .x-form-trigger{ + background-position:-51px 0; +} +.x-trigger-wrap-focus .x-form-trigger-over{ + background-position:-68px 0; +} +.x-trigger-wrap-focus .x-form-trigger-click{ + background-position:-85px 0; +} +.x-trigger-wrap-focus .x-form-trigger{ + border-bottom: 1px solid #7eadd9; +} + +.x-item-disabled .x-form-trigger-over{ + background-position:0 0 !important; + border-bottom: 1px solid #B5B8C8; +} +.x-item-disabled .x-form-trigger-click{ + background-position:0 0 !important; + border-bottom: 1px solid #B5B8C8; +} + +/* field focus style */ +.x-form-focus, textarea.x-form-focus{ + border: 1px solid #7eadd9; +} + +/* invalid fields */ +.x-form-invalid, textarea.x-form-invalid{ + background:#fff url(../images/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; +} +.x-form-grow-sizer p { + margin:0 !important; + border:0 none !important; + padding:0 !important; +} +/* Form Items CSS */ + +.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; + z-index:2; + position:relative; +} + +.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(../images/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; + position:static; +} +.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; +} +.ext-ie .x-form fieldset { + padding-top: 0; +} +.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 .x-form-btns-ct .x-btn-focus .x-btn-left{ + background-position:0 -147px; +} +.x-form .x-form-btns-ct .x-btn-focus .x-btn-right{ + background-position:0 -168px; +} +.x-form .x-form-btns-ct .x-btn-focus .x-btn-center{ + background-position:0 -189px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-center{ + background-position:0 -126px; +} +.x-form .x-form-btns-ct .x-btn-click .x-btn-right{ + background-position:0 -84px; +} +.x-form .x-form-btns-ct .x-btn-click .x-btn-left{ + background-position:0 -63px; +} +.x-form-invalid-icon { + width:16px; + height:18px; + visibility:hidden; + position:absolute; + left:0; + top:0; + display:block; + background:transparent url(../images/default/form/exclamation.gif) no-repeat 0 2px; +} + + +.ext-ie td .x-form-text { + position:relative; + top:-1px; +} \ No newline at end of file diff --git a/examples/ext/resources/css/grid.css b/examples/ext/resources/css/grid.css new file mode 100644 index 0000000..043b2c4 --- /dev/null +++ b/examples/ext/resources/css/grid.css @@ -0,0 +1,298 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + +/* Grid2 styles */ +.x-grid { + position:relative; + overflow:hidden; + background-color:#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-color: #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-color: #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-color:#f1f1f1; +} +.x-grid-row-over td{ + background-color:#d9e8fb; +} +.x-grid-resize-proxy { + width:3px; + background-color:#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(../images/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(../images/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(../images/default/grid/sort_asc.gif); + display: inline; +} +.x-grid-header .sort-desc .x-grid-sort-icon { + background-image: url(../images/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(../images/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(../images/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(../images/default/grid/col-move-top.gif) no-repeat left top; +} +.col-move-bottom{ + background:transparent url(../images/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(../images/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(../images/default/grid/dirty.gif) no-repeat 0 0; +} + +.x-grid-row-alt .x-grid-dirty-cell{ + background-color:#f1f1f1; +} +/* 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(../images/default/grid/hmenu-asc.gif); +} +.xg-hmenu-sort-desc .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-desc.gif); +} +.xg-hmenu-lock .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-lock.gif); +} +.xg-hmenu-unlock .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-unlock.gif); +} + +/* dd */ +.x-dd-drag-ghost .x-grid-dd-wrap { + padding:1px 3px 3px 1px; +} \ No newline at end of file diff --git a/examples/ext/resources/css/layout.css b/examples/ext/resources/css/layout.css new file mode 100644 index 0000000..eda245e --- /dev/null +++ b/examples/ext/resources/css/layout.css @@ -0,0 +1,252 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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(../images/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(../images/default/layout/panel-close.gif); +} +.x-layout-stick{ + background-image:url(../images/default/layout/stick.gif); +} +.x-layout-collapse-west,.x-layout-expand-east{ + background-image:url(../images/default/layout/collapse.gif); +} +.x-layout-expand-west,.x-layout-collapse-east{ + background-image:url(../images/default/layout/expand.gif); +} +.x-layout-collapse-north,.x-layout-expand-south{ + background-image:url(../images/default/layout/ns-collapse.gif); +} +.x-layout-expand-north,.x-layout-collapse-south{ + background-image:url(../images/default/layout/ns-expand.gif); +} +.x-layout-split-h{ + background-image:url(../images/default/sizer/e-handle.gif); + background-position: left; +} +.x-layout-split-v{ + background-image:url(../images/default/sizer/s-handle.gif); + background-position: top; +} +.x-layout-panel .x-tabs-wrap{ + background:url(../images/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(../images/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; +} \ No newline at end of file diff --git a/examples/ext/resources/css/menu.css b/examples/ext/resources/css/menu.css new file mode 100644 index 0000000..dfb44a7 --- /dev/null +++ b/examples/ext/resources/css/menu.css @@ -0,0 +1,119 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + +.x-menu { + border:1px solid #718bb7; + z-index: 15000; + background: #fff url(../images/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{ + font-size:1px; + line-height:1px; +} +.x-menu-list-item{ + font:normal 11px tahoma,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(../images/default/menu/menu-parent.gif) no-repeat right; +} +.x-menu-sep { + display:block; + font-size:1px; + line-height:1px; + height:1px; + background:#c3daf9; + margin: 3px 3px 3px 32px; +} +.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(../images/default/menu/unchecked.gif) no-repeat center; +} + +.x-menu-item-checked .x-menu-item-icon{ + background-image:url(../images/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(../images/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-date-menu { + padding:0 !important; +} diff --git a/examples/ext/resources/css/qtips.css b/examples/ext/resources/css/qtips.css new file mode 100644 index 0000000..185d013 --- /dev/null +++ b/examples/ext/resources/css/qtips.css @@ -0,0 +1,120 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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(../images/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(../images/default/qtip/tip-sprite.gif) no-repeat 0 -12px; + height:6px; + overflow:hidden; +} +.x-tip .x-tip-top-left { + background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 0; + padding-left:6px; + zoom:1; +} +.x-tip .x-tip-top-right { + background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right 0; + padding-right:6px; + zoom:1; +} +.x-tip .x-tip-ft { + background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -18px; + height:6px; + overflow:hidden; +} +.x-tip .x-tip-ft-left { + background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -6px; + padding-left:6px; + zoom:1; +} +.x-tip .x-tip-ft-right { + background: transparent url(../images/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(../images/default/qtip/tip-sprite.gif) no-repeat 0 -24px; + padding-left:6px; + zoom:1; +} +.x-tip .x-tip-bd-right { + background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right -24px; + padding-right:6px; + zoom:1; +} + +.x-tip h3 { + font: bold 11px tahoma,arial,helvetica,sans-serif; + margin:0; + padding:2px 0; + color:#444; +} +.x-tip .x-tip-bd-inner { + font: normal 11px tahoma,arial,helvetica,sans-serif; + margin:0 !important; + line-height:14px; + color:#444; + padding:0; + float:left; +} + + +.x-form-invalid-tip { +} + +.x-form-invalid-tip .x-tip-top { + background-image: url(../images/default/form/error-tip-corners.gif); +} +.x-form-invalid-tip .x-tip-top-left { + background-image: url(../images/default/form/error-tip-corners.gif); +} +.x-form-invalid-tip .x-tip-top-right { + background-image: url(../images/default/form/error-tip-corners.gif); +} +.x-form-invalid-tip .x-tip-ft { + background-image: url(../images/default/form/error-tip-corners.gif); +} +.x-form-invalid-tip .x-tip-ft-left { + background-image: url(../images/default/form/error-tip-corners.gif); +} +.x-form-invalid-tip .x-tip-ft-right { + background-image: url(../images/default/form/error-tip-corners.gif); +} +.x-form-invalid-tip .x-tip-bd-left { + background-image: url(../images/default/form/error-tip-corners.gif); +} +.x-form-invalid-tip .x-tip-bd-right { + background-image: url(../images/default/form/error-tip-corners.gif); +} +.x-form-invalid-tip .x-tip-bd .x-tip-bd-inner { + padding-left:24px; + background:transparent url(../images/default/form/exclamation.gif) no-repeat 2px 2px; +} +.x-form-invalid-tip .x-tip-bd-inner { + padding:2px; +} \ No newline at end of file diff --git a/examples/ext/resources/css/reset-min.css b/examples/ext/resources/css/reset-min.css new file mode 100644 index 0000000..ed6a197 --- /dev/null +++ b/examples/ext/resources/css/reset-min.css @@ -0,0 +1,9 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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 diff --git a/examples/ext/resources/css/resizable.css b/examples/ext/resources/css/resizable.css new file mode 100644 index 0000000..47257d7 --- /dev/null +++ b/examples/ext/resources/css/resizable.css @@ -0,0 +1,143 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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(../images/default/sizer/e-handle.gif); + background-position: left; +} +.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west{ + background:url(../images/default/sizer/e-handle.gif); + background-position: left; +} +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{ + background:url(../images/default/sizer/s-handle.gif); + background-position: top; +} +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north{ + background:url(../images/default/sizer/s-handle.gif); + background-position: top; +} +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background:url(../images/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(../images/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(../images/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(../images/default/sizer/sw-handle.gif); + background-position: top right; +} +.x-resizable-proxy{ + border: 1px dashed #6593cf; + position:absolute; + overflow:hidden; + display:none; + 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); +} diff --git a/examples/ext/resources/css/tabs.css b/examples/ext/resources/css/tabs.css new file mode 100644 index 0000000..e0406cb --- /dev/null +++ b/examples/ext/resources/css/tabs.css @@ -0,0 +1,134 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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(../images/default/tabs/tab-sprite.gif) no-repeat right 0; +} +.x-tabs-strip .on .x-tabs-left { + background: url(../images/default/tabs/tab-sprite.gif) no-repeat 0 -100px; +} +.x-tabs-strip .x-tabs-right { + background: url(../images/default/tabs/tab-sprite.gif) no-repeat right -50px; +} +.x-tabs-strip .x-tabs-left { + background: url(../images/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(../images/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(../images/default/layout/tab-close-on.gif); +} +.x-tabs-strip .x-tabs-closable .close-over{ + background-image:url(../images/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(../images/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left; +} +.x-tabs-bottom .x-tabs-strip .x-tabs-left { + background: url(../images/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right; +} +.x-tabs-bottom .x-tabs-strip .on .x-tabs-right { + background: url(../images/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left; +} +.x-tabs-bottom .x-tabs-strip .on .x-tabs-left { + background: url(../images/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; +} + diff --git a/examples/ext/resources/css/toolbar.css b/examples/ext/resources/css/toolbar.css new file mode 100644 index 0000000..a2b0725 --- /dev/null +++ b/examples/ext/resources/css/toolbar.css @@ -0,0 +1,165 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + +.x-toolbar{ + border-top: 1px solid #eaf0f7; + border-bottom: 1px solid #a9bfd3; + display: block; + padding:2px; + background:#d0def0 url(../images/default/layout/panel-title-light-bg.gif) repeat-x; + position:relative; + zoom:1; +} +.x-toolbar .x-item-disabled .x-btn-icon { + opacity: .35; + -moz-opacity: .35; + filter: alpha(opacity=35); +} +.x-toolbar td { + vertical-align:middle; +} +.mso .x-toolbar, .x-grid-mso .x-toolbar{ + border: 0 none; + background: url(../images/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(../images/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(../images/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(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 0; +} +.x-toolbar .x-btn-over .x-btn-right{ + background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px; +} +.x-toolbar .x-btn-over .x-btn-center{ + background:url(../images/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(../images/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(../images/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(../images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px; +} + +.x-toolbar .x-btn-with-menu .x-btn-center em{ + padding-right:8px; +} + +.x-toolbar .ytb-text{ + padding:2px; +} +.x-toolbar .ytb-sep { + background-image: url(../images/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(../images/default/grid/grid-blue-split.gif); +} + + +/* Paging Toolbar */ + +.x-grid-page-number{ + width:24px; + height:14px; +} +.x-grid-page-first .x-btn-text{ + background-image: url(../images/default/grid/page-first.gif); +} +.x-grid-loading .x-btn-text{ + background-image: url(../images/default/grid/done.gif); +} +.x-grid-page-last .x-btn-text{ + background-image: url(../images/default/grid/page-last.gif); +} +.x-grid-page-next .x-btn-text{ + background-image: url(../images/default/grid/page-next.gif); +} +.x-grid-page-prev .x-btn-text{ + background-image: url(../images/default/grid/page-prev.gif); +} +.x-item-disabled .x-grid-loading .x-btn-text{ + background-image: url(../images/default/grid/loading.gif); +} +.x-item-disabled .x-grid-page-first .x-btn-text{ + background-image: url(../images/default/grid/page-first-disabled.gif); +} +.x-item-disabled .x-grid-page-last .x-btn-text{ + background-image: url(../images/default/grid/page-last-disabled.gif); +} +.x-item-disabled .x-grid-page-next .x-btn-text{ + background-image: url(../images/default/grid/page-next-disabled.gif); +} +.x-item-disabled .x-grid-page-prev .x-btn-text{ + background-image: url(../images/default/grid/page-prev-disabled.gif); +} +.x-paging-info { + position:absolute; + top:8px; + right: 8px; + color:#15428b; +} diff --git a/examples/ext/resources/css/tree.css b/examples/ext/resources/css/tree.css new file mode 100644 index 0000000..59fa54a --- /dev/null +++ b/examples/ext/resources/css/tree.css @@ -0,0 +1,192 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@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(../images/default/tree/folder.gif); +} +.x-tree-node-expanded .x-tree-node-icon{ + background-image:url(../images/default/tree/folder-open.gif); +} +.x-tree-node-leaf .x-tree-node-icon{ + background-image:url(../images/default/tree/leaf.gif); +} + +/* checkboxes */ +.ext-ie input.x-tree-node-cb { + width:15px; + height:15px; +} +input.x-tree-node-cb { + margin-left:1px; +} +.ext-ie input.x-tree-node-cb { + margin-left:0; +} + + +.x-tree-noicon .x-tree-node-icon{ + width:0; height:0; +} +/* loading icon */ +.x-tree-node-loading .x-tree-node-icon{ + background-image:url(../images/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(../images/default/tree/elbow.gif); +} +.x-tree-lines .x-tree-elbow-plus{ + background-image:url(../images/default/tree/elbow-plus.gif); +} +.x-tree-lines .x-tree-elbow-minus{ + background-image:url(../images/default/tree/elbow-minus.gif); +} +.x-tree-lines .x-tree-elbow-end{ + background-image:url(../images/default/tree/elbow-end.gif); +} +.x-tree-lines .x-tree-elbow-end-plus{ + background-image:url(../images/default/tree/elbow-end-plus.gif); +} +.x-tree-lines .x-tree-elbow-end-minus{ + background-image:url(../images/default/tree/elbow-end-minus.gif); +} +.x-tree-lines .x-tree-elbow-line{ + background-image:url(../images/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(../images/default/tree/elbow-plus-nl.gif); +} +.x-tree-no-lines .x-tree-elbow-minus{ + background-image:url(../images/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(../images/default/tree/elbow-end-plus-nl.gif); +} +.x-tree-no-lines .x-tree-elbow-end-minus{ + background-image:url(../images/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(../images/default/tree/drop-add.gif); +} +.x-tree-drop-ok-above .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-over.gif); +} +.x-tree-drop-ok-below .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-under.gif); +} +.x-tree-drop-ok-between .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-between.gif); +} diff --git a/examples/ext/resources/css/xtheme-aero.css b/examples/ext/resources/css/xtheme-aero.css new file mode 100644 index 0000000..a47d5d9 --- /dev/null +++ b/examples/ext/resources/css/xtheme-aero.css @@ -0,0 +1,701 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + +/* menus */ +.x-menu { + border: 1px solid #718bb7; + z-index: 15000; + zoom: 1; + background: #f0f0f0 url(../images/aero/menu/menu.gif) repeat-y; + padding: 2px; +} + +.x-menu-list{ + background:transparent; + border:0 none; +} + +.x-menu-item-icon { + margin-right: 8px; +} + +.x-menu-sep { + background-color:#e0e0e0; + border-bottom:1px solid #fff; + margin-left:3px; +} +.x-menu-item { + color:#222; +} +.x-menu-item-active { + color: #233d6d; + background: #ebf3fd url(../images/aero/menu/item-over.gif) repeat-x left bottom; + border:1px solid #aaccf6; + 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; +} + + +.x-menu-check-item .x-menu-item-icon{ + background-image: url(../images/aero/menu/unchecked.gif); +} + +.x-menu-item-checked .x-menu-item-icon{ + background-image:url(../images/aero/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(../images/default/menu/group-checked.gif) no-repeat center; +} +/** +* 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: url(../images/aero/tabs/tab-strip-bg.gif) #cedff5 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(../images/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(../images/aero/tabs/tab-sprite.gif) no-repeat 0 -100px; +} + +.x-tabs-top .x-tabs-strip .x-tabs-right { + background: transparent url(../images/aero/tabs/tab-sprite.gif) no-repeat right -50px; +} + +.x-tabs-top .x-tabs-strip .x-tabs-left { + background: transparent url(../images/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: url(../images/aero/tabs/tab-strip-btm-bg.gif) #cedff5 repeat-x top; + border-top: 1px solid #8db2e3; + border-bottom: 0 none; +} + +.x-tabs-bottom .x-tabs-strip .x-tabs-right { + background: transparent url(../images/aero/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right; +} + +.x-tabs-bottom .x-tabs-strip .x-tabs-left { + background: transparent url(../images/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(../images/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(../images/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(../images/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(../images/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(../images/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: #ffffff; + 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(../images/aero/basic-dialog/bg-center.gif) repeat-x bottom; + zoom: 1; +} + +.x-dlg .x-dlg-bg-left{ + padding-left: 7px; + background: transparent url(../images/aero/basic-dialog/bg-left.gif) no-repeat bottom left; + zoom: 1; +} + +.x-dlg .x-dlg-bg-right{ + padding-right: 7px; + background: transparent url(../images/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: #ffffff; + 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(../images/aero/basic-dialog/aero-close.gif); +} + +.x-dlg .x-dlg-collapse { + background-image: url(../images/aero/basic-dialog/collapse.gif); +} + +.x-dlg-collapsed { + border-bottom: 1px solid #96b9e6; +} + +.x-dlg .x-dlg-close-over { + background-image: url(../images/aero/basic-dialog/aero-close-over.gif); +} + +.x-dlg .x-dlg-collapse-over { + background-image: url(../images/aero/basic-dialog/collapse-over.gif); +} + +.x-dlg-collapsed .x-dlg-collapse { + background-image: url(../images/aero/basic-dialog/expand.gif); +} + +.x-dlg-collapsed .x-dlg-collapse-over { + background-image: url(../images/aero/basic-dialog/expand-over.gif); +} + +.x-dlg div.x-resizable-handle-east{ + background-image: url(../images/aero/s.gif); + border: 0 none; +} + +.x-dlg div.x-resizable-handle-south{ + background-image: url(../images/aero/s.gif); + border: 0 none; +} + +.x-dlg div.x-resizable-handle-west{ + background-image: url(../images/aero/s.gif); + border: 0 none; +} + +.x-dlg div.x-resizable-handle-southeast{ + background-image: url(../images/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(../images/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(../images/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: url(../images/aero/grid/grid-hrow.gif) #ebeadb 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(../images/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: #ffffff !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(../images/aero/grid/grid-blue-split.gif); +} + +.x-grid-header{ + background: url(../images/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-color: #d9e8fb; +} + +.x-grid-col { + border-right: 1px solid #eeeeee; + border-bottom: 1px solid #eeeeee; +} + +.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 #ffffff; + 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(../images/aero/grid/sort_asc.gif); +} + +.x-grid-header .sort-desc .x-grid-sort-icon { + background-image: url(../images/aero/grid/sort_desc.gif); +} + +.x-dd-drag-proxy .x-grid-hd-inner{ + background: url(../images/aero/grid/grid-hrow.gif) #ebeadb 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: url(../images/aero/grid/grid-hrow.gif) #ebeadb repeat-x 0 0 !important; + vertical-align: middle !important; + color: #000000; + padding: 0; + border-top: 1px solid #ffffff; + 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: url(../images/default/toolbar/tb-bg.gif) #d0def0 repeat-x; +} + +.x-toolbar .ytb-sep{ + background-image: url(../images/aero/grid/grid-blue-split.gif); +} + +.x-toolbar .x-btn-over .x-btn-left{ + background: url(../images/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 0; +} + +.x-toolbar .x-btn-over .x-btn-right{ + background: url(../images/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px; +} + +.x-toolbar .x-btn-over .x-btn-center{ + background: url(../images/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(../images/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(../images/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(../images/aero/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px; +} + +/*************** TABS 2 *****************/ +/** +* Tabs +*/ +.x-tab-panel-header, .x-tab-panel-footer { + background: #deecfd; + border: 1px solid #8db2e3; +} + +.x-tab-panel-header { + background: #deecfd; + border: 1px solid #8db2e3; + padding-bottom: 2px; +} + +.x-tab-panel-footer { + background: #deecfd; + border: 1px solid #8db2e3; + padding-top: 2px; +} + +.x-tab-strip-top{ + padding-top: 1px; + background: url(../images/aero/tabs/tab-strip-bg.gif) #cedff5 repeat-x bottom; + border-bottom: 1px solid #8db2e3; +} + +.x-tab-strip-bottom{ + padding-bottom: 1px; + background: url(../images/aero/tabs/tab-strip-btm-bg.gif) #cedff5 repeat-x top; + border-top: 1px solid #8db2e3; + border-bottom: 0 none; +} + +.x-tab-strip .x-tab-strip-text { + color: #15428b; + font: bold 11px tahoma,arial,verdana,sans-serif; +} + +.x-tab-strip .x-tab-strip-active .x-tab-text { + cursor: default; + color: #15428b; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-right { + background: url(../images/aero/tabs/tab-sprite.gif) no-repeat right 0; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-left { + background: url(../images/aero/tabs/tab-sprite.gif) no-repeat 0 -100px; +} + +.x-tab-strip-top .x-tab-right { + background: url(../images/aero/tabs/tab-sprite.gif) no-repeat right -50px; +} + +.x-tab-strip-top .x-tab-left { + background: url(../images/aero/tabs/tab-sprite.gif) no-repeat 0 -150px; +} + +.x-tab-strip-bottom .x-tab-right { + background: url(../images/aero/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right; +} + +.x-tab-strip-bottom .x-tab-left { + background: url(../images/aero/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + background: url(../images/aero/tabs/tab-btm-right-bg.gif) no-repeat bottom left; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-left { + background: url(../images/aero/tabs/tab-btm-left-bg.gif) no-repeat bottom right; +} + +.x-tab-panel-body-top { + border: 1px solid #8db2e3; + border-top: 0 none; +} + +.x-tab-panel-body-bottom { + border: 1px solid #8db2e3; + border-bottom: 0 none; +} diff --git a/examples/ext/resources/css/xtheme-gray.css b/examples/ext/resources/css/xtheme-gray.css new file mode 100644 index 0000000..83447fe --- /dev/null +++ b/examples/ext/resources/css/xtheme-gray.css @@ -0,0 +1,437 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + + +.ext-el-mask-msg { + border:1px solid #aaa; + background: #ddd url(../images/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(../images/gray/menu/menu.gif); +} +.x-menu-item-arrow{ + background-image:url(../images/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(../images/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(../images/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(../images/gray/layout/gradient-bg.gif); + background-color:#EAE8D5; + border:1px solid #b3b6b0; +} +.x-dlg-shadow{ + background:#aaaaaa; +} +.x-dlg-proxy .tabset{ + background:url(../images/gray/layout/gradient-bg.gif); +} +.x-dlg .x-dlg-hd { + background: url(../images/gray/basic-dialog/hd-sprite.gif) repeat-x 0 -82px; + background-color:#333333; +} +.x-dlg .x-dlg-hd-left { + background: url(../images/gray/basic-dialog/hd-sprite.gif) no-repeat 0 -41px; +} +.x-dlg .x-dlg-hd-right { + background: url(../images/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(../images/gray/basic-dialog/close.gif); +} +.x-dlg .x-dlg-collapse { + background-image:url(../images/gray/basic-dialog/collapse.gif); +} +.x-dlg-collapsed .x-dlg-collapse { + background-image:url(../images/gray/basic-dialog/expand.gif); +} +.x-dlg div.x-resizable-handle-east{ + background-image:url(../images/gray/basic-dialog/e-handle.gif); + border:0 none; +} +.x-dlg div.x-resizable-handle-south{ + background-image:url(../images/gray/basic-dialog/s-handle.gif); + border:0 none; +} +.x-dlg div.x-resizable-handle-west{ + background-image:url(../images/gray/basic-dialog/e-handle.gif); + border:0 none; +} +.x-dlg div.x-resizable-handle-southeast{ + background-image:url(../images/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(../images/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(../images/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(../images/gray/tabs/tab-sprite.gif) no-repeat right 0; +} +.x-tabs-top .x-tabs-strip .on .x-tabs-left { + background: url(../images/gray/tabs/tab-sprite.gif) no-repeat 0px -100px; +} +.x-tabs-top .x-tabs-strip .x-tabs-right { + background: url(../images/gray/tabs/tab-sprite.gif) no-repeat right -50px; +} +.x-tabs-top .x-tabs-strip .x-tabs-left { + background: url(../images/gray/tabs/tab-sprite.gif) no-repeat 0px -150px; +} +.x-tabs-strip .x-tabs-closable .close-icon{ + background-image:url(../images/gray/layout/tab-close.gif); +} +.x-tabs-strip .on .close-icon{ + background-image:url(../images/gray/layout/tab-close-on.gif); +} +.x-tabs-strip .x-tabs-closable .close-over{ + background-image:url(../images/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(../images/gray/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left; +} +.x-tabs-bottom .x-tabs-strip .x-tabs-left { + background: url(../images/gray/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right; +} +.x-tabs-bottom .x-tabs-strip .on .x-tabs-right { + background: url(../images/gray/tabs/tab-btm-right-bg.gif) no-repeat bottom left; +} +.x-tabs-bottom .x-tabs-strip .on .x-tabs-left { + background: url(../images/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(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-top-left { + background-image: url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-top-right { + background-image: url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-ft { + background-image: url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-ft-left { + background-image: url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-ft-right { + background-image: url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-bd-left { + background-image: url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-bd-right { + background-image: url(../images/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(../images/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(../images/gray/layout/panel-close.gif); +} +.x-layout-stick{ + background-image:url(../images/gray/layout/stick.gif); +} +.x-layout-collapse-west,.x-layout-expand-east{ + background-image:url(../images/gray/layout/collapse.gif); +} +.x-layout-expand-west,.x-layout-collapse-east{ + background-image:url(../images/gray/layout/expand.gif); +} +.x-layout-collapse-north,.x-layout-expand-south{ + background-image:url(../images/gray/layout/ns-collapse.gif); +} +.x-layout-expand-north,.x-layout-collapse-south{ + background-image:url(../images/gray/layout/ns-expand.gif); +} +.x-layout-split-h{ + background-image:url(../images/gray/sizer/e-handle-dark.gif); +} +.x-layout-split-v{ + background-image:url(../images/gray/sizer/s-handle-dark.gif); +} +.x-layout-panel .x-tabs-wrap{ + background:url(../images/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(../images/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(../images/gray/sizer/e-handle.gif); + background-position: left; +} +.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-west{ + background:url(../images/gray/sizer/e-handle.gif); + background-position: left; +} +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{ + background:url(../images/gray/sizer/s-handle.gif); + background-position: top; +} +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-north{ + background:url(../images/gray/sizer/s-handle.gif); + background-position: top; +} +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background:url(../images/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(../images/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(../images/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(../images/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(../images/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(../images/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(../images/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(../images/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(../images/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; +} \ No newline at end of file diff --git a/examples/ext/resources/css/xtheme-vista.css b/examples/ext/resources/css/xtheme-vista.css new file mode 100644 index 0000000..986c0f7 --- /dev/null +++ b/examples/ext/resources/css/xtheme-vista.css @@ -0,0 +1,511 @@ +/* + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * licensing@extjs.com + * + * http://www.extjs.com/license + */ + +.ext-el-mask-msg { + border:1px solid #aaa; + background: #ddd url(../images/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(../images/gray/menu/menu.gif); +} +.x-menu-item-arrow{ + background-image:url(../images/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(../images/vista/tabs/tab-sprite.gif) no-repeat right -50px; +} +.x-tabs-top .x-tabs-strip a .x-tabs-left{ + background:transparent url(../images/vista/tabs/tab-sprite.gif) no-repeat 0px -150px; +} +.x-tabs-top .x-tabs-strip .on .x-tabs-right { + background: url(../images/vista/tabs/tab-sprite.gif) no-repeat right 0; +} +.x-tabs-top .x-tabs-strip .on .x-tabs-left{ + background: url(../images/vista/tabs/tab-sprite.gif) no-repeat 0px -100px; +} +.x-tabs-strip .x-tabs-closable .close-icon{ + background-image:url(../images/vista/layout/tab-close.gif); +} +.x-tabs-strip .on .close-icon{ + background-image:url(../images/vista/layout/tab-close-on.gif); +} +.x-tabs-strip .x-tabs-closable .close-over{ + background-image:url(../images/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(../images/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(../images/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(../images/vista/tabs/tab-btm-right-bg.gif) no-repeat bottom left; +} +.x-tabs-bottom .x-tabs-strip .on .x-tabs-left { + background: url(../images/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(../images/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(../images/vista/basic-dialog/hd-sprite.gif) no-repeat 0 -41px; + zoom:1; +} +.x-dlg .x-dlg-hd-right { + background: url(../images/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(../images/vista/basic-dialog/bg-center.gif) repeat-x bottom; + zoom:1; +} +.x-dlg .x-dlg-bg-left{ + padding-left:4px; + background:transparent url(../images/vista/basic-dialog/bg-left.gif) no-repeat bottom left; + zoom:1; +} +.x-dlg .x-dlg-bg-right{ + padding-right:4px; + background:transparent url(../images/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(../images/vista/basic-dialog/close.gif); +} +.x-dlg .x-dlg-collapse { + background-image:url(../images/vista/basic-dialog/collapse.gif); +} +.x-dlg-collapsed .x-dlg-collapse { + background-image:url(../images/vista/basic-dialog/expand.gif); +} +.x-dlg div.x-resizable-handle-east{ + background-image:url(../images/vista/s.gif); + border:0 none; +} +.x-dlg div.x-resizable-handle-south{ + background-image:url(../images/vista/s.gif); + border:0 none; +} +.x-dlg div.x-resizable-handle-west{ + background-image:url(../images/vista/s.gif); + border:0 none; +} +.x-dlg div.x-resizable-handle-southeast{ + background-image:url(../images/vista/s.gif); + background-position: bottom right; + width:8px; + height:8px; + border:0; +} +.x-dlg div.x-resizable-handle-southwest{ + background-image:url(../images/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(../images/vista/s.gif); + border:0 none; +} + +/* QuickTips */ + +.x-tip .x-tip-top { + background-image: url(../images/vista/qtip/tip-sprite.gif); +} +.x-tip .x-tip-top-left { + background-image: url(../images/vista/qtip/tip-sprite.gif); +} +.x-tip .x-tip-top-right { + background-image: url(../images/vista/qtip/tip-sprite.gif); +} +.x-tip .x-tip-ft { + background-image: url(../images/vista/qtip/tip-sprite.gif); +} +.x-tip .x-tip-ft-left { + background-image: url(../images/vista/qtip/tip-sprite.gif); +} +.x-tip .x-tip-ft-right { + background-image: url(../images/vista/qtip/tip-sprite.gif); +} +.x-tip .x-tip-bd-left { + background-image: url(../images/vista/qtip/tip-sprite.gif); +} +.x-tip .x-tip-bd-right { + background-image: url(../images/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(../images/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(../images/vista/layout/panel-title-bg.gif) repeat-x; +} +.x-layout-close{ + background-image:url(../images/vista/layout/tab-close.gif); +} + +.x-layout-stick{ + background-image:url(../images/vista/layout/stick.gif); +} +.x-layout-collapse-west,.x-layout-expand-east{ + background-image:url(../images/vista/layout/collapse.gif); +} +.x-layout-expand-west,.x-layout-collapse-east{ + background-image:url(../images/vista/layout/expand.gif); +} +.x-layout-collapse-north,.x-layout-expand-south{ + background-image:url(../images/vista/layout/ns-collapse.gif); +} +.x-layout-expand-north,.x-layout-collapse-south{ + background-image:url(../images/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(../images/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(../images/vista/sizer/e-handle.gif); + background-position: left; +} +.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-west{ + background:url(../images/vista/sizer/e-handle.gif); + background-position: left; +} +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{ + background:url(../images/vista/sizer/s-handle.gif); + background-position: top; +} +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-north{ + background:url(../images/vista/sizer/s-handle.gif); + background-position: top; +} +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background:url(../images/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(../images/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(../images/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(../images/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(../images/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(../images/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(../images/vista/grid/grid-split.gif); +} +.x-grid-header{ + background: url(../images/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-color:#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(../images/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(../images/vista/grid/grid-split.gif); +} + +.x-toolbar .x-btn-over .x-btn-left{ + background:url(../images/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 0px; +} +.x-toolbar .x-btn-over .x-btn-right{ + background:url(../images/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px; +} +.x-toolbar .x-btn-over .x-btn-center{ + background:url(../images/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(../images/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(../images/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(../images/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(../images/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; +} \ No newline at end of file diff --git a/examples/ext/resources/images/aero/basic-dialog/aero-close-over.gif b/examples/ext/resources/images/aero/basic-dialog/aero-close-over.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ed8d815fdecf34c73fd1fba5a83f992f41607fe GIT binary patch literal 1109 zcmeH`+fNi{7{+G<1k`{C9%$;3;(2W>#im%br0R;NNDT2nVuBZ#mBb6HNo}HW*GgC; z^;BwJg%FWsL{hRc5az2*4D+b93LbE@e<9ogw{JwMy>H~B0^b~4RwuGyU+ zyEw8d(d-e(E}ryCRA-EGvo24Zc7LF|7}~?!@tFGDa8M*m0Tw-GcD(f^CU+o(P~js~OfE`~-K6lBmyOdn+- z7>5vx##j`J!+TB-bNYJ`!V*Mz6yXi)(Fx;m0mdbW3BZVYOoW(Z6krTXm`MUF>a1h{ zaS7NY#AVE?z$Jl`aYBZKjCmP&84C&s3KkF+6%Z9Hs#sD$QVp=I>PZ!nDo$#U)Ud39 zY#8BW3M;CnXu67YMFT~{3IYXT6@iMdhIGv+DXi*POM#ZcC9HQ&s;JZ`*ZG{i>?QV@ES{sWN-+!9hos>)NIz zg|konvH1Lg^$i83Rag1YoQ?B0Tq-%UbKzFY*E8ylRXDQeuBp#iRV%hy1JutsCq^Rq zQ*A99=B>@JRW40mTN~{!Eh-~y<;26EmQ`l$AhW+{tIb|rP1rgv_%Aa-yZuVhzK7m3 z-#To=>yIn<54$q9XJ-B)uyZP@Z>rs=0}Xrn>L$%J*Y+2@dAxV|m*4H`wOT9G_NKH} zOs%U3AF)oG+%f-RVTPUg@esVRtUS;#y?FYf?i(vC+nP!ajdYd{p?i+>-RDXU7T0XK zY~J7g+dz)LXV#P%%}Q}@AzeQ0D@&t!uaka~S6H!<{*dsWCpVrg+U%^nnfDiNH0Svy Sn~JJO>{*Mf)r84J{O}RVW)egI literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/basic-dialog/aero-close.gif b/examples/ext/resources/images/aero/basic-dialog/aero-close.gif new file mode 100644 index 0000000000000000000000000000000000000000..c61d29f20d534f8d86ea34158af7f3a0dcc7e08d GIT binary patch literal 882 zcmeH`OKTHh6o$W2(da_KqPS3~MG(Y=%Zi(V;AJJ~O6a04x)AyU6bcrLq<8}tiVDq4 zlh{geQB(vGw3A8Nrg&-U1=7}3o1}53Gn2{8H`i~zbDaDJx4t|)ysLL{;G8{wruXEP zF49GkgbWT2_F>=kdsD*?Ufg*2>gLn8w}jcT%>13HkHQB{nAKB~nUY#U&J=R3lxzz* zOUOIotR_lEMs8-MKiQm~mG$YoBFa`qHq){#$~2R=GI=|lr|AMs&(Un&%oeO{fle;a z=L`1qVhnvbUwyM!eO;`-`&57b)sU7O(l?{&8kidkAWOB<|I zjY>7XT!V6h{ZzbFg_RY)qQI)k*SFZ33coeBp|h&aerbHefNB$J2CEya)`U%yH%z`s zq2YjPF~y3_)wXfVhAjs)8+6Jw3Yrra&|^EOyI@dmI5E(4z;L1Ip%H-Tg6Uz)gO-Pu z2bPDn54MjsL+S(dkp}4a-~=(~1>6n54bTn24bcn1i_OrD&<{dCyiYfMXaz7$J**#pW2r074A5L;mL|gbdvP!zMB}BARYTU`iFW4$jJRYJI96(h$F@1_KTB4*TiSzk9O?ud3^Qg a$oP}Q-j(v@OWj{mM@DxYx_zRXocar<rib^&FtIUXAq9qpDd&bo7Ae}+*o8UiCM1QdU=Ff%YPGw6W)4ayS? z9RC>@IXE09EI81_#;#Dz?A1kpGPCGHh%>C4!ox$q9^XzM%9f{nmabcltr<|$Ql$Dp3c`tUF`)fw6MU`kk0EQzm){t$gAq#>>#)z~o}t MFxlTuQh>o40K47T;{X5v literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/basic-dialog/bg-right.gif b/examples/ext/resources/images/aero/basic-dialog/bg-right.gif new file mode 100644 index 0000000000000000000000000000000000000000..c605caeebe57cdd1ae0dd8a1e9b82bb7b7460ed5 GIT binary patch literal 1202 zcmZ?wbhEHbWM`Pm($2upvf#+6d*45N|Mma>e}+*o8UiCM1QdU=Ff%YPGw6W)4ayS? z9RC@ZIYcxV4mdQi@r&6=BrH7C!Yu37(lKG-kuHASpqw2amE3z3jJxJYOnTzcqZYg< z=I6&0@2UEcRda4`O!J&+7JF%r@#D-^Kn}Z!5fUqEOsl?$3^*M;GRrr`yF;mA*PX zKl;2~to64S_qR9qfA`zB`{(PY7w11;x6k(X_s7?dm)pzl`|NUT0BdN#YU4(MK)j5fjekZ2PC;cAJDxQR~GAbOH?90b+ NU`jBbfrA5sH30of+E4%h literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/basic-dialog/close.gif b/examples/ext/resources/images/aero/basic-dialog/close.gif new file mode 100644 index 0000000000000000000000000000000000000000..4278db9835cf57d9c0e759204d9b7d2add221dc0 GIT binary patch literal 350 zcmZ?wbhEHbC>mi#>VpU^3c%G z*x1;Lii(nwlE}!&va+)3>gr#=ekCO(J$drP-Q7JuKR-S`-rnB6y}iAusj0rczPPy9 z$jInF5HK)UTU#^G5-9#;VPs&CXV3vz0`e0BTlE3|bPpXN`vvW3Cv&po6fUT3Tp6|Y zipKGSFRS+6$yi{pP(v+)H8qICg}=M8HEH5y_HJj9fS23?f*ee>q72m%9TL1kyqywl z3Os=d;&K9V;*%#SFa=JXIX`f&f>@x)%y}Y#OBLAM*0Tk&taoEclH9R#mt>yDDa%(<}?OG@6;F+gzJxXJ_YS=jFHa{5t*(-S*|fhws(*;(_O2d1+x$ z%^G42ArgeiWZH}O*5B#AbnoTmw!Ui*-`+6WZ&`<%x<}0)D6>7<>0mk?akG;#JL8=s zXLhn?mte6|76)x5V>ZVhn=@)7qdl&$g=DQH(?xO?lDE28tBdP$@m+4dYlyeG7@M25 zx%p=w`R5tX+!PyYUq;NX|w`){J+e;EzFoMnM_{ zVldCBAx53&AtXSAMPXL68d)@6;9x-jii0SxQan(CRv@Zbz|jQIyh;li5EFn-KupB6 z3`_zT5ywS{i)Js2?dJ^h?)^jB(Wqb zlA_8;l@yQ^EFq8(mJ!GZD@awelEku#l_V%hjFNyft2n6v7&P!=i2wPA3+Ux#I)cy< z+ZHz#e}YK$6HDJ^l=WI1S9Qkm2d>_yxFYE&F-d*?UVJ_bDa9Z`jW==TiClf zt1^pQPIe5RzLj$0$M25vKEt7+n|ti7b$y#MA7^F%sXW&G++!_`^S=nu&lqz}`T2#9j$ipTcz&jR_0#GVXey?oV1fgUfb*7=k_O;ULBdey;5J&n7*TS|47Tmile#uCCm3U kW}Zz-C;H1;HdM52t(-hmSJ}E&mzJ7!_}u_Q=yb%czXu5PUH||9 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/basic-dialog/collapse.gif b/examples/ext/resources/images/aero/basic-dialog/collapse.gif new file mode 100644 index 0000000000000000000000000000000000000000..d7a3b369b04c018e9165f5a7cf2e0489f8733d43 GIT binary patch literal 851 zcmeH`O=}ZT6o#kPMQ|mg3l}aFcg2P76gS0%t^NbSjY$52AP9<56pM=@ZbULM8LX5p zS`|SA&15ERQdFAy0kJjJd^FBv=4LW;=i|eXzUi0LNE9-ut zY!y^e(uRuqN2%C~W-seTL32x*Q`EeIMoYR|(!HWii&a`&r;6?;y4_d5lIk~e{kvIjTAz2xR?FFHjT$YdvF9|}ywOP-U9sJT zW}p8w!X1M*4e`T(9aHQL_^t`RE#9_y$L7B*(I(ItLYMF!;oTwZJEHH1eF}XaOqUyO zYGICz0}lp1SRU9^SQIQjEnuhi(GGx6LHraL`al90hDaDV0XQL!LKubUhTw+iMc_r~ zaikH@2q{B90-vQ|$V9*(U>L*@#2Cg9rsfzV7_m5t1>+)$A&N2L5OHK27{{24I4ub> zfpG$Hf;<79T40g_2q`#@^gsV_f#dApgd|N!C&wG(pO7-Aq{+4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8T4Iyu3VMvDaL$t*frCj@X=a z_te(a*ViW;?uwOCIB;MS6C0OD_J%h%8FCoc*uDr;h}v4nd5yIo{K1`#4b0qfK07u% yJlr9y9d~BO#>dAeD0|QI*}3WI=^4h^_s;Cx{QUd^=WaRQU0YsWp32O`U=09jY;5ZQ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/basic-dialog/expand-over.gif b/examples/ext/resources/images/aero/basic-dialog/expand-over.gif new file mode 100644 index 0000000000000000000000000000000000000000..96a6be88ce9935ec5d732c4e38c9d567bd06317e GIT binary patch literal 1044 zcmeH`*-KPm7{-q#Sb|XqW>ltvky}DhsD)`vZYhKpky2EUAVn8Jghn7rqG?u|l?pkN zGc;vEq9U|Vv$~b#m_{zCIqEp$%$YN1nX`Oz-ml}|&}|Ptemqyt#S3q4eok8Yr3fN| z;0dCvtSk#>RW|8wH@~TR+*i}_u2yZR*A6x6zp6jG)do+ek?J)1)Fw)8@^zXSwTV_+ zIE}%rF_K!dS7%()nLIkPr`zJxm}#w<>M}DLGpn`GS_{)C8#^n)}`IE<5|b;>pP(={^f{x(OB&r{>`KHEHHTcB)9 z$Yu}NmgR|Mn0BDwPJY&jrk(PP6J}lV!aACB!5=qT@*ukhExP3;66{`BCeaFsmc6h_ z$qq_hWx>ILi$+dbvFzF~UT0vP12+R6R(7-C=9B^+#T@qdfn;TpQvfdqq#wLICPkq9 zK=IhegOA5F4>XS%0T=-@2(tpP0%k?b3BZX8m=|Tg2!0X!CGbm_mw;D{us?tWQ4%Cs zM6w`(AYlQ4fUt-_L|8(yq?7;_Wh@0i3Sblfq*%rQ1;C(yH$wc+KU^SI3<)BLAR>8V zW8)`?%|2q&$Eds>jj=kYbh6FT^W0o_xU{w6M(9IpV^r!)<()WFY+B`shTRGD{kUz> z*)8YVhc4HL*8W;-&+pq;lwOxJIM6a&<>ac}5x)_9VHauRJ$-%@oo|Bv&v?V-41Vo#EkYGgGgh zzP+$LY#^q&xBvQ?gyP}TZJM(U&%U%BnyoI(QPm{ncGO1~-Rggo8ku;^7pux^j?1~X vzob`n_gcJ4b1~0mZ`ymjF*3hJ^{P0&U^pSAp*Jq8#xbrvRTUi*Lmd4JF>3pk literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/basic-dialog/expand.gif b/examples/ext/resources/images/aero/basic-dialog/expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..ebeef99b66afe6acafb462095d090cc06726a044 GIT binary patch literal 875 zcmeH`OKTHh6o#iL7+f}+7V1Jl5b4fMiy~dsv_HU=8&T;Y^-1_qH@UGs)fpcMQc53=^oQrcV z$0d`=8JxNCAb<1GtJ{y)7oWbn%NOovH<$CD_>U@I&{Bet5(a$H;ERKlXz@jpm+W*w zO$&Nf?B|3(xuTX6wN*(@i)L0dGNP3hNmeqml9iE2rbIFuBqtfUl9?-!7iIFYY^`oZ zkk^~7w_B|@mCpO^&WA6$u-g^B>ZNbW#&@MsQ$N@BorbZ~7*rcZb>FBqX|)wr+ibTD zwJ!ZByL&RN$?S&=dkWj{(YgY^Roc{OOQXM3*3_ZZhqg{TI&Jsiz+hd29T4c+pqNxP zBQs@a>{-yWLA5|5OeLV&Q2{NojhX{GVY(dweH(NK`Y!4|7!DXN4qOW@0Gt5b0NltFoe(`g@B-#j<^|vd=uz+}`V@SM0cAl{ zLi8C1Ap{}P5NKqEVFVyV;4s|({KEx~`-ew3ZiJg0ZVZ2dizT>2v5CZ5T3Cw3PhTpp zt%&!y6Z6ln9$8sf9y@dK+^IrycInvkt;w;`c4G15Tx#OUXlMS;_?4sA#|sa)pG{pm MU$3m^g$3^HU&wH)E&4&%fP$@$LSLZx3I7d-Uqtlh@xqeE-ET3PwXxYGouC}?6~5LRMnW%$Av!0sT;kjhZP7{KZv%;3uKg&~01 zftx{@FTAo(hK!kcJqI-x^a7fe)E2ACT)p1 k3k;eLvkOT_#4IpuJkG4-J4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8PJX8yJ}8yR~vTWL;hzu{rDR zsjaK8uTMDKCF{Ly&CSgjmsiD}{=Bkb72~~Kt-q(Oy}P^O^Q*h3x39myzk!)s&S%Gl v#FOV literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/basic-dialog/w-handle.gif b/examples/ext/resources/images/aero/basic-dialog/w-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..d59eafc2076a5a40099bd26d7457a73ba9bc9ac5 GIT binary patch literal 817 zcmZ?wbhEHbWMN=oXlG#1*VlJ&aPal@O-oB-7zLvtFv3DW@h1z=$Nw30K>h~h2?h>6 U21X7E0S5)gW>$7K4h{xu0Q^P?w*UYD literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/gradient-bg.gif b/examples/ext/resources/images/aero/gradient-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..8134e4994f2a36da074990b94a5f17aefd378600 GIT binary patch literal 1472 zcmeIx`%jZs7{KwDTLnZd*hMh7R3%&{VK|xh5d@TrMjeTpnq?_&b8`}Bh(kowLJ^R= zwLrP_Mz6F*N-1{`N?)K@6i}uD1>V*|OIv8)A|*;9JN<2c#7;i>=A7rpCpmEmrw$)U zc7mcXc@UIVGnG~gOy34*)9Li-becMyuD$~>)ERVj219+9F_Xbm-(}8ZvefrjGxzFd z?gQ+Z2W-&U2kcoQXO_sF&Em{uap$rD-W-Vsija6n4j*~Q*W?J0hYp%tpk9;bpv@I( z@`Tz)B2B(fn=b+vZGl)@(4Z|8YYQ8+MGfzZp1v;z8bNg>jk*$vu2iBclgyVj>B^es z9|O{PvUGvmyzs<9PmwK9WcqTTMPJ^kuV~R%wCXE?Ha*qBP}OFjwi~K|4nuYOVl`;T zVhzx_SPOK48f&|ZG@#o^cQDa=jErs*qsPQ}W@7f3n4r(hETGq1*K1~j_Lq?Dr%LqcFxvPW zut}by5*6B{LZvEO(+Ju$Vv_!sOuZvAc4ePkK}Mg^X|R8{wv3g3jV&Qm0~*o(w;!4zGtP^}q4TE3f=4jcq2s zNTj41IT7{z(FAgK^iIzZ@_2j+Ir8!+!Q#r@%9(ju7k_5|Ghf7eqx2?7%YoH4jP!wx7HA*Q43) zwFOW=pP6ly3pn=?dHpWVl+z~h4aA7q3Dbmfk>A9h*D=1j0=ZkaJtNDl4|Dy58=OQ4 zb=w|rEX#G|6q4dPk_gFV6VcYbmUmazi7x6i6Xb&As-j$U2PJ(S9-JDYvw05^=DZ2M z-q(%65iC7!Sf=Hfs~2MFb#cc_ASYbPO$Z9ewDx-)GFuhcxKI?v{g{Fd`2H?N2mNoG a(II?Zs7)DAnPM9b=8J95L)rdV=-9sjoxm#q literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/grid/grid-blue-split.gif b/examples/ext/resources/images/aero/grid/grid-blue-split.gif new file mode 100644 index 0000000000000000000000000000000000000000..5286f58f6f798184c3eeacba1352cfd39b9ae03e GIT binary patch literal 817 zcmZ?wbhEHbWMbfDXlG!Ub?iS7FpPrH5Ezjmp!kyo==$`@NUn@4xcl;MEU@u6;Oi#l_<(QpFT5;g3%Bd$|0cmlLhGf{|q`H nPk{0S1BVoYrq2Wc#zV~Pyb=r?3JDC2Ol*7#9t#p29T=p zJcax;g_4ZSVuiHK)SMIrMuz{RU^E1Veh3Hyb1Enc>n7!trXpqG6OwnmIgc}P0i~IM zm=}mSfEWY}nIU3~KsG1<`hg1m-}wK4LBPw+(~W_ViIE{12pRq#U=ZX0>SSVO6l7o$ zWMmd({C}IFg@KKQm5r5!jg6I!ot=$?OOTt3laou7Uw}tYQcOxpLQFzjT3$m@T2@s~ zTtZ1-SyfX@M^{H$(a^*|+eAZKN1KtIot=x5ON5(SL|aBeMn;=d@c#(oA_fLVRz@%Y z`w2)eGBE=k#?HaX#Vx?V#K_Fd#KO$V%EAJasRhb0un4jWDH=Mm2?r*!D;0_uHBMZ} zq3pErplHy=4=Tnkx|Jh zscGpMnOVgprDf$6l~v6xt!?ccon4bAPnkMx`iz;g7A;<~blLJ1D_3pWyk+aQ?K^hv zI&}ER(PPI?oIG{u@|COCuHU$M>*1rvPo6$|{^I4UkDoq&`TFhqkDtF78JHp70g@0O zA^8Uw{ESR2EX*wIApbBjm4iGh$ik{<$R^|%$evgztYp;4A>uS~;l_iU%Emz-M3agx za*3&!JXHM%@)Fob#CfQREFZx=1ozMXTMRtRjKE~WEXZKb@T=bQKf{F3>3<9T|FVQ_ z{m;;?AC~U@qwou_`aj38_^(IpzX-b4KRSK2RsZ4f3;%C|k}Eh>XB6d^gQ}#4`mMe- zevtGG3Lj-4hNWj`wDjDFH$5veFpj3@(e#WzhZ0QB?QfY@PnkXE{n#5nF1Xe{)o-kl*A9MEw{S`Q3ANMzcBubr(pdUI-(lrP`{4gK1!1YVEVH;IQ8yz6 z+)Y4gV}QzJQKT~27OhM!$D5!;KPCE45Jg ztq9})oBY6JS)5-~qMMwbqnnftZcY5QxbCNgD2m09Qf@d}%B{zna>Yhl$D=8i;*_g@ z=KH#H!PB1l8{gah)OhFAzYFER$A1#N{zmfr+ra-fd7vpcKCw6%T<~7jX19YTUr#}!AeC@mUpC_Dnajbt+-uKtJ`G4!9XPOt*&U=+np7-g_y273ZkM`TI_r4iA z)%xDq^*er?`m%RwWbocMw|@6SI)k7BJU%5AlKvamH(#~Ik^UXg(*K^(^glYd0UNEM z&EUot@r~Q&xm`)^FgbBB(*N$nK94ln6Ss`0w!X<41;3Fd70QG6WQVvM_@@t^*=Kd4hpMoq>@<#$&^R ngUt*~JRuPV49@Mm@`0w!X<41;3Fd70QG6WQVvM_=?t^*=Kd4hpMoq>@<#$&^R ngH4QVY9mEVcn)kx zWMC9f}-qT zS9f*_H=dvG(9GpJVZn-vi#;Z5#qJ7eyu3VMvDaL$tyx!CBQ|H0F7?R<|;&Gp{C?(S~>Pfj;ZZ(o0Ze*-hOoKHkS%i#`T?J%8%8y_E^ zpzJ-*Vdti&r)L;v-#fF@xb^%3`)~>0U0YsWUJ<-nEqCG8*Vi{BpPuI{{jK%(j{M{s zXLoOZfB!%;x4fTC^T)?0CTqv9Te$P{^9u{}XZY>i_4W0Q&DrN4;om+G9EN?s6{N`;4ypg zpjp68V_}PONXElfi8Ko)PMNY758D;mB$7B)re!?p)L6FSQJ2oTj6>Z9$21;unq13x y+-tsQ!Q(!gZ!aGAJFsa!nc%`V^Uy^1RSTX>(pvN2$>abx&8JgB!X#527_0%M<4zp_ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/layout/ns-collapse.gif b/examples/ext/resources/images/aero/layout/ns-collapse.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2ad235dad390e71a096e2e943ade1f22c1de113 GIT binary patch literal 842 zcmZ?wbhEHb`0w!X<41;3Fd70QG6WQVvM_@@t^*=Kd4hpMoq>@<#$&?* n$7V)8E}jD)5)QYqC^Aiu2z=<$#VoJZv*Y8Uqy4PRObpfl%OVxB literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/layout/ns-expand.gif b/examples/ext/resources/images/aero/layout/ns-expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..0817ec66fd410022c495adacc4855a4cc548ce0f GIT binary patch literal 843 zcmZ?wbhEHb`0w!X<41;3Fd70QG6WQVvM_=?t^*=Kd4hpMgMpDl#$&^R ogN=+#3Lzc_iVW>+!bUb08y~uKaLb3q?AZA5V7~%88w-Oq0L1MSzyJUM literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/layout/panel-close.gif b/examples/ext/resources/images/aero/layout/panel-close.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e96481a1fdb16a6f332ae06e138f15ac24fcc03 GIT binary patch literal 829 zcmZ?wbhEHbWM^P!XlGzZj0<)6@9^Z&RfbV88UiCP1QdU=Ff%YPGU$N34$2b@98wI7 f92^b-4GxWrJbWP?8xjt;u!}3DSX@YSV6X-NNAwV) literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/layout/panel-title-bg.gif b/examples/ext/resources/images/aero/layout/panel-title-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..89eb514b5d8e138056dee082981c6c74e8b5088e GIT binary patch literal 830 zcmZ?wbhEHbWMmLyXlG#HH%t~Z%Mr0I6?3eUbZeLPo+uYEOEzesT<~J~(4`7tixt9_ zD}=99j9jf0wN^QLjdIL-<=BlX@tai>wla)@(GVEoA)xq^1?YqS3_2ixfbs+bhctt_ fM+d_}M`ku|Aq5Ktg@y)37A}c^4+%^S4Gh)*fw>?P literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/layout/panel-title-light-bg.gif b/examples/ext/resources/images/aero/layout/panel-title-light-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..f4c44ce09ad347d796b7050e06d75fa043d3783b GIT binary patch literal 833 zcmZ?wbhEHbWMoigXlGzJd++mw2VX8f`f}~b*PGA2-Ffl-{;Thg-u!s>?#IgyKi_=% z_5RE6Pv8E0`}ybR@4tWk{`>#`Kf@>(4T0ej0*XIbfL{5}pab#{C{HkO$T287R6JO~ e*v!f$q~O4y(9poh!X;thuyN7RZV_fC25SI8**uc~ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/layout/tab-close-on.gif b/examples/ext/resources/images/aero/layout/tab-close-on.gif new file mode 100644 index 0000000000000000000000000000000000000000..556e905b11cddb4abcacaf2160ff811ec47a894d GIT binary patch literal 880 zcmV-$1CRViNk%w1VG95Y0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui01E&M000P00DlP_NKl}>g9s4{d`IWkyNACTy%X5( zSCwBCFIN1ePMyV%9R;2n`Eleqf#u45yqHp;xQ{O{zWfEQ5lwL5BIf+nt*1|)1%v(y G2mm|n+a1fq{uZ2jn48o?zh6WMJix@z}87 pU?UF~kIsPx1?N_NZabd}gGC2BxnzU3XiQk-(8liE#lyj14FHlE< literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/menu/checked.gif b/examples/ext/resources/images/aero/menu/checked.gif new file mode 100644 index 0000000000000000000000000000000000000000..fad5893727ee8a13f428aa777380ae97152adec8 GIT binary patch literal 959 zcmZ?wbhEHb6krfwXlGz>j-2EYIms=0ihImdkJxD*ann5GrhCOt_fD7*mN_@JU|~Yh zlH}5*DP>F3%9rQXt#bJ9P}a7(ufM;0=I)-EyC%%tyKeK&xyuhMUUy>sj`JIKUfjO_ z>dyTab{)LB=kT>-Cr%wbdG^%lGbhhnIDP)=+4C1qp1*tM!nLy(uU)-*?dpv?S8v|E zb?f%+J9qBfy?6e~qdWJX+*RNl{ef##~$B&;sfByLSi(wRuh5*qap!k!8nE{v; zbU->ld4hps4uc|xjK_ur2b)<{HDXQ_Japi6Q1W6iYUvPA5Rzlscwpk<4sO9XmXjI+ zi&_OWe7|@wG&BoL67X4M6R7Omz-DfcwPk^l8<#v6OGU!M%_;%{ss?XfI5Zp-5OGar zYW(QXz|GEX#*rx~s>CVD%q0^Mz{1hH&cW`(j0A>8wr;ZvZ4rjePOb7*MGqXL4LK$% TI;tJY@rY17bXb6iiNP8GS6tA5 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/menu/item-over.gif b/examples/ext/resources/images/aero/menu/item-over.gif new file mode 100644 index 0000000000000000000000000000000000000000..01678393246989162922ff0051d855ea02b4c464 GIT binary patch literal 820 zcmZ?wbhEHbWMU9yXlGzpb>`d67r$SB{>v~5Mnhoag@EEu7NDp9Gw6W44$2b@9D)q2 W95Nmo7Bnz$2y4ZhC`fc*um%9+ToJhd literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/menu/menu.gif b/examples/ext/resources/images/aero/menu/menu.gif new file mode 100644 index 0000000000000000000000000000000000000000..30a2c4b6c0458751f85126e8bbca6ef2ccc2ff00 GIT binary patch literal 834 zcmZ?wbhEHb{Kde?(9Xc{=<(wZA3ps5|DRzLjE2C-3jxKSEI?2HXV3w89h4^+IOG|a lIb=LGEI8Q6z#`0voy-@k72&h=Y%ZQ8zP%g((!cJJT4@8F*OhYlV-dg#cp zW5-XNI(_EM*|Vq5Up;&A+S!ZOuUxr$qNpFDl?^y$-QVDS9;ix)3mg1{>fcnt(^ zUcUi>w{PFRfB*i&hYz1Vefsj{%h#`8zkU10FbYOPfHonZ_>+YhWU>y30Obh=jxGj9 z4jGRP3l283GHb+~D0p~)!9>Yxj)(FAXDKG5ESZ1@4oAD0WI9R=9v*6Ak!N+{dHKMR zl}FY^$AdFLm4!>ptVN@75u5?#BR20ya;KC(goN;9V qqtnW!)kYaNB(j|}n>i$H<|I5^)XKF~L^CSn=7x7MEgZ~D4AuZjXTU80 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/qtip/bg.gif b/examples/ext/resources/images/aero/qtip/bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..5c0e8c92a810d244a29f21f467b90f5d61fdf0ec GIT binary patch literal 1024 zcmV+b1poU-Nk%w1VF>_E0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui00{t2000Qx0RIUbI8dFzg9q0sT*$EDLUs@%Mr=p1 zVnuftGiuzJ@twzyAK{4{NwTC#lkrljR4K2e%a<@+&YMZIrcIjka_ZDsucyzSKz-U9 zO0=j^qW6+2UCLA`zNb*3=8GCNpVg~Z^=aM8wd>Y>V8e+p>=mnFs)!ReUCi{TW1~SM1Kmmare&KkGs9fT`K0I1 u@IZ?8$gwm=i>NC~T4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8T4Iyu3VMvDaL$t*frCj@X=a z_te(a*ViW;?vnN1w&v#MjLWNHPj6d$dwap-Q**tyue-au;`6J!r?;=azrTT*Th3?4 zhKGkcgtg<&>_~55;E?Bb&`2;ka(p6lgjs~8(zE7Cn)zivZYI2Fo-4gN?(D9uudi=N zK0VKO_qMmUcND+AcXs#o_xBGpbIbef+41r5iOJgW=l1OU{QSaV@A-avcYS?*V{`WX Tb9;AxfB)ccH}iKX0S0RTywIF? literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/sizer/e-handle.gif b/examples/ext/resources/images/aero/sizer/e-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2c9f538243ecbc0364b1afd7287248ce8f2c513 GIT binary patch literal 1586 zcmV-22F>|LNk%w1VG01y2ZsOv000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015!m2LK5F0M(fb#|@jog8~U2L^!bELTm{gE{ymP zV#A6QA7-3*QDaAr3O$AdDUsnwlO+vqM2YbuOOYupo>b|Q=1iF}SK7>36KBhtI(@?Y z$rEVLph%A@HOjQ8Q=(9ZN+lVU>eQE3vtr%4vnp4iTDx8q8y4)>q)ok&J-hVjShH*6 z!kvrOZP~hN>9);__if+1d;JCmoK|pQ!gkpnR-9PwU&ed~LpI!4?_$T2F<-V^`LX8C znK?(^>{&GB(V$6(F3oziYt^t*%SKK6v~9$-ao?V-yEpIOpK}8@?K}8xffOkEo#kl2fezwDeD{e#JT~D!6iVD@GL|q$@_W+S)5Z!KyT@ zM#XyctE-hlD=MbZvRW;*(|Wopwy3_!t+d@UzWn0r@4W!SD{#Hv+B>kp1gm>+!3-;$@Vp2|+%Uuw@B8n<4ojSI#r+2S zu*Dv0O!3Afk8Co?7@yp6$|!%lvdb6495Tl-i`=r!FXLP@%`=yLGtVsN47AKa@9eYC zM;ooO(myBN^U_Z@4Rz5`BRw_ISnFIh(^gCEb=P2XE%w%AQ*CzELu-Au+GsnycG_^e k-S*XN*Bv+AcYi(h+j83v-FMz$mp!-Mg8PlPrvU)~JKnY_G5`Po literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/sizer/ne-handle-dark.gif b/examples/ext/resources/images/aero/sizer/ne-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9c041c45f673735de9f54f7967eddec62cde469 GIT binary patch literal 839 zcmZ?wbhEHb#gW lSa7hJgPTi$AwlsV10#z=iiLm@LpO)4)SL=|#|Ii1tN|md5{du- literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/sizer/ne-handle.gif b/examples/ext/resources/images/aero/sizer/ne-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..942ae825357ebae7f68e5ef818d7ebc5de4c02cd GIT binary patch literal 854 zcmV-c1F8H+Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ox0I>-iNU)&6g9r(R`}c1fLxQMK{fqby gBC2o^w-G#NZrs9(1Jj{1N0Feqbmt<5BNz|>J6tuIF8}}l literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/sizer/nw-handle-dark.gif b/examples/ext/resources/images/aero/sizer/nw-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..23fced98bfa4e805e9e078fcad909735344b7957 GIT binary patch literal 839 zcmZ?wbhEHb#gW lSa7hJLy${=AtBL`k&(%PC%{07p_^G&Zcc}Qazg`yH2@eV5k3F_ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/sizer/nw-handle.gif b/examples/ext/resources/images/aero/sizer/nw-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..d39b0c38d8994139e389a7da016506e0537aac66 GIT binary patch literal 853 zcmV-b1FHN-Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ow0I>-iNU)&6g9s7+`?qajID-FBp^Au# f;5LcjBtrZbZk)Mu5G9&JmyTdYROiyE3kU!^<_nt% literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/sizer/s-handle-dark.gif b/examples/ext/resources/images/aero/sizer/s-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..ddc2e18ce48da6338fb4e065effd31f769ae3e34 GIT binary patch literal 1060 zcmZ?wbhEHbyui-I(9Qq?YgWws|NlRjIZBL%z{m;##h)z9ARp_12vDA2;P}tL$RXpg zVZp&>4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8PHh8W@=7yR~vTWL;hzu{rDR zsjaK8uTMDKCF{Ly&CSgjmsiD}{=Bkb72~~Kt-q(Oy}P^O^Q*h3x39myzk!)s&S%Gl z#F1=;#XNk%w1VbBK(0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui0MG{t000R80M!W`NU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVZ2ANwTELlPFWFT*({Vj%bu;+?Z0rgaihAOo3`)Yz=I1PPQ1ABU*OP@}?y7lYWvuoeZy}S4C;KPgmA5Xr#`Sa-0t6$H)z5Dm@7rtA2$K=XW)SdCaB+*pMVA`=%9oaYUrVeCaUP7j5g}%qmV`_>7ZqiaYU-(|rmE_ythVavtFXocie*3mJC`c7>Hq)$ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/sizer/se-handle-dark.gif b/examples/ext/resources/images/aero/sizer/se-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a678e67fd6edad35c463cb6d96b05fc9d6e89c8 GIT binary patch literal 838 zcmZ?wbhEHb6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ow0M(^ChYD3VYzVQXLuanwzl7M%nHv}G f-@}9j!xh{H(V;_#75{Cs2(hHelPFV`3^a literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/sizer/sw-handle-dark.gif b/examples/ext/resources/images/aero/sizer/sw-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..937102c6b23e59f512f74b5393378ced56e006c9 GIT binary patch literal 839 zcmZ?wbhEHb literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/sizer/sw-handle.gif b/examples/ext/resources/images/aero/sizer/sw-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9e2f563a037e362e69290dff5c19f0316f4659b GIT binary patch literal 855 zcmV-d1E~B*Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Oy0I>4&D5AAwkkh5Wu<4INq2MrDdrA7vRHntp%f(1;CJRD{PCm0kI G7_0$|G=z8n literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/tabs/tab-btm-inactive-right-bg.gif b/examples/ext/resources/images/aero/tabs/tab-btm-inactive-right-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..94deb880211bfed28b5e879e19d74b69059a82c3 GIT binary patch literal 1618 zcmeH`{WF^f0LP!wM%MMV+;rH^#*S+6P~9Bu)pc$)ucdZ1wVU1S^oZ9PhP(B4hSHU( zR>eyxtv2#Xyo)3xULq22rA^dpL|&h~zer?6*8Ug!q2K%b0iXNaeIug6FI@ZuJoY6} z1pv)dSqlw%M29*iRD?+(X*dMjjjgH36$Dvef^ z(W)`ofOmUW;QvwJ3(N60A~pbgtMm2~0Ne(ghr33SJDBBgN1tRi`N?Dz!XvshviIq9 zwezu*4R&wm%suxjcU|T29<%kx>-gl^{O7aifK*Ovl%ts2a-jg)pcuRs+e6DwZpsR< zFFGUdJH>Jaa4StQ?a^(~4XH2jN&T6zCBGB+JqgsZ&tiDk)jrgUFoZBf`mrHZf|I_~91URDoX`<4R`Ymzfw;x!w9)H{hDf!=X&|h7eCQ=OFEj+$r zf5LCHFm4%hof}3P9gN|VoBL{G4^m-(bG~A0o;s}AW|Y707DpS=?Xv5Ae_o(b43bZQ zq^3Cf=$>M=KWlq|PBm);lhro2YhyHvLAF>7gg&7kn63FmF*^m{W%6exw&p^x$fcTvQ)_Im!+|BxHyi zlG1QubaIhg+?Z17Eor)m&X6>tFu1gqGk})yD39eWZ7t+wNZU#zIO*eCCb_h|6y_uA zsQ6$FV}HjBFMC=O1j#zf5&>g})LuW!bECvtZi9--X zAhT>f3gQ4SQ$ZRk<1o5uCP>l4fcYxPQ%+gRUbYuO**6!YQ1&lfUYFRtOw3XZuBH)G zLmNd3)v%z_S3M#^XQ?SNOm%MU$pM9$s%80VXhvR^hQ2Q$XvPjr3e7m+0Om2=fjR~g zewL`6I2EkaP9h>e-PGwD*}7?$bfS*s`YZSi0ILA?Y|qAQ{VcMJsONygNjVgN#?Cv=5s3ZcBzB^zM$g6T1F1w m*}X5U30Cj#)17mXogEasPgIOa0 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/tabs/tab-btm-right-bg.gif b/examples/ext/resources/images/aero/tabs/tab-btm-right-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..622812a9166259b0f85879a0243845db96d6b52d GIT binary patch literal 1604 zcmeH`c~8>^06>4%YLRJ1A}Lz}T7rSn!=SLjHZ)xz*m7LqZ*&9MSyBO58=_J>+V zQ3P3F=r#ldgwmFKww$F&LcqkssO-q)`ey&0|D{1{7opWx*sFC~qT@ZnX=fwKS| z0P2R7V`4K;Vx8Tv312#vrS|7imssIm)x2I)?``V#rAD93{Ey7!Q1|%n z?ln8SR;SnI^7{RL;4N0NjXy&9?Rt+i!1;eh*5QC%Bd!KJA^8mnKJdmGh10 z{FNWa_)u|YM%$&SaVPjY5!};`v}=hD4Z<26%fgg-9C!b$!I|Yq`WGaM3(;q4@~A)hf;NNI-(k>s5#Y4 zR@^~$GZc3*9G#*zhKCdbaqDDdU4n+8tWR|5l=tz6qg4&b@FLaEsgZZO@Q^sYsxgxg zt!^Tciqya46!xl{bE$gugM#Yl!iSJU1)5*U-MyOMC>*`!_p-TYZAKZ;S9RY1_Dao)kG@RKY5skYB<FJ9?mWi`X1x;L8HQGF?2n?PX({;1V<3p0LiLEt8J*63diF!?N(aW^@A- zfMKkBXb8nR6A;C=&K`|7S_MHVnB8Z=*%yZJ$FH$>=RzxtyFvsVW1BzqfMQ!f_ONY> z7_RZVCCH};`}4RBihVgj%eJp1x{Y=b9)@*@lS4`!e-RF5;tySjH#t@_Q?O16F}u{c zmh*L=b3M1h%km9gP?9B>nM i+9Rt9`Nku!iR$+#?!}uu%7&EFd#a}F^Obnu<9`7OM+Rm9 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/tabs/tab-sprite.gif b/examples/ext/resources/images/aero/tabs/tab-sprite.gif new file mode 100644 index 0000000000000000000000000000000000000000..560c4d9048fe2da76831cbabd25f1d1ab26a97e6 GIT binary patch literal 3866 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 E143Y93jhEB literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/tabs/tab-strip-bg.gif b/examples/ext/resources/images/aero/tabs/tab-strip-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..287d3162fd91654d94eaad6e277eaf76f28d9c7c GIT binary patch literal 826 zcmZ?wbhEHbWMq(HXlG#9dExDeTOZHe|9auU*GrGSU4H!S>eKJnpZ&P`;>Yb*KkvN$ zdGGD72k(9{jDpb+7>*&J_>%?bt^W)SnxjEQ?q`I@C5s=a;ag8W(E=o--$;{7F2+7P% zWe87AQ7|%Ba7j&8FfuSOQ!q5JGBmO>HB!(uFf}kZ+p+j0P#=4Vr>`sfH6CexDft?u z8*)G)&H|6fVg?4eLmeKJnpZ&P`;>Yb*KkvN$ zdGGD72k(9{jDpb+7>*&J_>%?bt^W) literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/toolbar/bg.gif b/examples/ext/resources/images/aero/toolbar/bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..03cf427a2610c7c0d71f4d680389b49b1559d49d GIT binary patch literal 904 zcmZ?wbhEHbWMZ&jXlGzJapUcYn{Q9vczg2Z+fz5+p1$?&^zC*?oP&%WG#_Jv^-jE2A<3jxKSEI=3iXV3w;3zR1qI8qth zdju4fTsQ<2>}ozdSm?~oCu5d#VS%DE8;^vV&jba=CU*{QF&+tl1xrp&Vq#&4IJxP` ziRsK70vZmRmoYN4^C{doY20{zK9`7r#Hj_2Kmj?8S^-5SRxZ&+VH*-2HeKarWMr@g E0HmIRM*si- literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/aero/toolbar/tb-btn-sprite.gif b/examples/ext/resources/images/aero/toolbar/tb-btn-sprite.gif new file mode 100644 index 0000000000000000000000000000000000000000..19bbef3c687f19a70b72c454bc2542e92b04c893 GIT binary patch literal 1127 zcmZ?wbhEHbWM-&iXlGz>`0r3Od0)xY0~Iq4Rm?bCJ?B`>oTK&gPd3dz*}CLR%aU_l zD=ze`x;$asm5J-FP1|y7=C<4Oc0KGp@OARxuQQK*oqzJ{(lcLIpZm7u8ukxPurZ-YfblWU`p4o5&%%PX!%{-|5oZ<}b{tn!>Yw4W=u^Uq zQpF50j}MM*?7gx+W?f1zJDKabS=0$Rg*yZqflo?c5Ixr^dQ@Bde4NjsFf-c#W=%hte#Xx8144{oy_EOnT}e!Oo~L)&NLV<%|FT literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/basic-dialog/btn-arrow.gif b/examples/ext/resources/images/default/basic-dialog/btn-arrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..f90d5df4455c332d19dcc8b621a19e53c672612a GIT binary patch literal 870 zcmZ?wbhEHbernn7GpqKUUw`Q0mSb0ToV>R8?9Kh>?)?A%A85cR7!84;8v=?yS(q6Z7#Vax zUI66@1`cNi&HxUF4GIUDn0duaCIlolF!PEkbz~SY9&O@c^J6$L@o@_)r+F36fdvm4 e7??TCIy4q6Xzpf_KfuF~nAS2=D2rYb$6u{3dg@Hl5C_+UxWP}hhwlxkH5Tk`Q2xfD|VSo>dMX@~M2ACyIHs>wM zO9USSdAPC43^Egm+jwulZxr9`_Ar;Fya@wYOwXL6&5~OTZ zy{43^R;4O(MZF`TR>{K&Wvr4LTIxR_P9cqnHuUpe=ReHTk zwLz~kxN2B88MH>D#%R=K$MDy@B_b!~cyOGFeU#(PpP}iCLVDNSM zYPgVH+QA8Af`FbQ^u;+ISXgUK*J&cKTpik)^$+L?cg#N$TG9}lz6(N60ff-7QXe?X z1Fj$*+wJRf43q9_nTm>HjBWGYWhLx`!_~siir(=m3?(l>KH>%y{&1!R@`-3KMaXvm zZv_Ewz#X_u1omd5K=;urYIAZ^%7%+e1VxPSTW1FuVO8(b>VxlV;tm{q@Jx^%(D3Cz zy z6v3)V<#%7KJy#OLug_}k=0D6EiOKruin2TF=j*gX*$~ZHm_LVER-RU;X9jjctiHi)3 zeJnf$GLj7pP5o;2lUOSKV^zd-BO3vC604f{{R1d4Yk$je(Ux!efJiBO@aVPsE804;fk*WxQe}6c#pgOBlzkIk9o^@qPv8E*Z~F j4JRkFIw?h*6k_z8$d=5vM#EU`>?~GhhKiNO3Jlf&dGRKI literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/basic-dialog/e-handle.gif b/examples/ext/resources/images/default/basic-dialog/e-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..dde28262ece20a9925515ab777d795d642d9f377 GIT binary patch literal 995 zcmZ?wbhEHbWM#O(-p&95p^ZEL|NjqWjuN9GFtS2G@h1y2$j3S$0+c5hI1Vr{a>#gW zSa7hJLs%>3#D;~3+Xa-p=6GyebhKN-IP1=djf;=>D>!$_cy3y9a}Xwye0g*kiI*?5Qm)FE0;R>^0YG>#D1(BQ|H< zJ+*c9_4NsdyJDpj4jkCT#Kz^3z2VJGh8)H^~xm(V6*Or%;r!q4!SOWk8%504Q literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/basic-dialog/expand.gif b/examples/ext/resources/images/default/basic-dialog/expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b423f06bec115ef5163dd352a6b249e83d63704 GIT binary patch literal 884 zcmZ?wbhEHbSKV^zd-BO3vC604f{{R1#EA_L8Cn=+ykaC27B+NC7{{%N5Ntf& zFK=1ovS7gyPgV|>vXGrYsb16cU5`!SoSfP)Q`WIb#BxK!`T6$D3@b7=yl`0L#>=(! Kq>zIHgEath6)|!E literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/basic-dialog/hd-sprite.gif b/examples/ext/resources/images/default/basic-dialog/hd-sprite.gif new file mode 100644 index 0000000000000000000000000000000000000000..42da1ea1aa4322c3995eebfbbea9a6e8c3eb77ea GIT binary patch literal 1099 zcmZ?wbhEHbWM-&lXlGy$)C?EYiV)I@6w;0o)`=F@i4oC_714_m)r%L^PY^Rm6f;Z` zH%t~cN|7*5l`u||G)b2<&5$z9lrqbbGS8Ma&ylvsm9fl|vCNmXDv-4JSK2bm`zya0vPFVPO+Hzo=EoiUW<# zt-R7&85aT+o!hu13_^AkENo)sW?~Im5RiDNg-b{!q(fjK6AOo^oXv^{2OL}3c(n`? z0um24adC-+cuZKp#Ka=XC$l2qfI}-2tCoO5K;nT0E+&=`4uJ(sK-Uz9X;c_IJk-Xo z?6;=E@bR%edFMWzN~5Qzrs*f2TT>bQ{@gtKWw+(i!R!IjKB)<%j$y1Z!Zof6-y9;DGq~5NJ}7gDVJu-S5NBXy HWUvMRItY+| literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/basic-dialog/progress.gif b/examples/ext/resources/images/default/basic-dialog/progress.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c3a53714cfb1a69bca5d304f3c11e776879fe63 GIT binary patch literal 19442 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

      7~8!cSq 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 XWgudCAVF$jcua3$WG-oLW^VvHsf`Br literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/basic-dialog/progress2.gif b/examples/ext/resources/images/default/basic-dialog/progress2.gif new file mode 100644 index 0000000000000000000000000000000000000000..0b3fcd264e88613aeba6f5a04960031b4dbf6f37 GIT binary patch literal 14113 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
      I_}1TPPv4ZhJ)nzAf^Q!h(R>umIuIMOQ<;IfJM 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 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/basic-dialog/s-handle.gif b/examples/ext/resources/images/default/basic-dialog/s-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..c17db09702d8e39a25df3e1cfa847b7ddd004e84 GIT binary patch literal 992 zcmZ?wbhEHbyui-N(9Qq?p^ZEL|NjqWjuN9GFtS2G@h1y2$j3S$0+c5hIQB9ya>#gW zSa7hJLs%>3#D;~3+Xa-p=6GyebhKN-IP1=djf;=>D>!$_cy3y9a}Xwye0g*kiI*?5UFU1_q}2ZmnDnS(jHwY|grS zYU}Fj>k|%l$$D>Fb8~aX+fl6@9wVn{Oa!M?d$LFZ(!z@^VzW> vaVFC%HL)EM4v!B{Q1+hZvvbqa(=&{-@15DX`T6+;&fRjpySAKdV6X-NNI7nx literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/basic-dialog/se-handle.gif b/examples/ext/resources/images/default/basic-dialog/se-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..f730f604387bda5aebf25f2222b2f2b0b3310ba3 GIT binary patch literal 833 zcmZ?wbhEHbWM^P!XlDR{(8irF-hBfzM~Tr87+E2p_>+Yh5$9C8ed96SOJ f3mlu6c(_C+Oi*BG=V#_{*kPdP+{(qw#9$2o$Qcew literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/box/corners-blue.gif b/examples/ext/resources/images/default/box/corners-blue.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa419b50abe5030db04492578d5dfd39c02fb6ab GIT binary patch literal 1010 zcmZ?wbhEHbXlGzpbnMH9^WV;$J9qKo#mkp3U%h(u+O=ypZrr$e^X8p9ckbT3 zd+*-8gExOZc<|ui!-tO^J$n53@slS{o<4p0?Af#D&!4}1`SR7PSFc~ce)Hzd+qZAu zy?gim{reZ6{(SiG;p4}TpFVy1{Q2{jFJHcX{rc_Ox9{J-|M>Ca=g*(NfB*jT=g;52 zfB*ga_y7NYhEYJJ5ODbKKqZq#iZO~mS(q6ZW-;i1JPgVc3>@bfOgUvd3KTeaMcKM` zTmT9+Dym5^6eP5&35jyCL~LwoUdG4CQ1IlzMJEOhS7<|o6TkONJB|cJt&_qGY8j_CFdSfKOOVXz5IAt4 zV}p{G0>c6amIz;I6#<3?kJdQw@UbxnC^#-)=MmtuQ0WM8YMvo$(vtdt@jw$#qNfCh wKq7O5AQyweiU(yaTnsEKITutM85$V*3^XlGzJaNxkCA+uU@@+{rdHrH*em)ef#d+yZ7(kfB5j>g)|NZ;-|Nno6kqR9CJB(DX)7#&QKUtU= zfEhstWHBgDFmRk=;OCU_C{XAUlw(`PkjU7?)Tn7;VYmK z&r@KbvglBQu=1upg@udrDMSY z2FDg@ogF$0Oia(gUJntM;F*w7{y{XRIF%d;*fMw Ru}w*2KC@pnhK+^68UTSX)nNbt literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/box/l-blue.gif b/examples/ext/resources/images/default/box/l-blue.gif new file mode 100644 index 0000000000000000000000000000000000000000..5ed7f0043b6b0f956076e02583ca7d18a150e8f6 GIT binary patch literal 810 zcmZ?wbhEHbWMN=rXlGzpbnMHWJ9pl^dGqhzKZa2-8UiCM1QdU=0Db(QK?me-P@Z7m PU}s=uVK7ioV6X-NGaC=| literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/box/l.gif b/examples/ext/resources/images/default/box/l.gif new file mode 100644 index 0000000000000000000000000000000000000000..0160f97fe75409f17ab6c3c91f7cbdc58afa8f8f GIT binary patch literal 810 zcmZ?wbhEHbWMN=rXlGzJc<|tzJ9pl^dGqhzKZa2-8UiCM1QdU=0Db(QK?me-P@Z7m PU}s=uVK7ioV6X-N<)RPU literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/box/r-blue.gif b/examples/ext/resources/images/default/box/r-blue.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ea5cae3b7b571ec41ac2b5d38c8a675a1f66efc GIT binary patch literal 810 zcmZ?wbhEHbWMN=rXlGzpbnMHWJ9pl^dGr7Oe}+*o8UiCM1QdU=0Db(QK?me-P@Z7m PU}s=w;80LdV6X-NJSY$C literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/box/r.gif b/examples/ext/resources/images/default/box/r.gif new file mode 100644 index 0000000000000000000000000000000000000000..34237f6292a7da6ac5d1b95d13ce76a7194dd596 GIT binary patch literal 810 zcmZ?wbhEHbWMN=rXlGzJc<|tzJ9pl^dGr7Oe}+*o8UiCM1QdU=0Db(QK?me-P@Z7m PU}s=w;80LdV6X-N?ynEj literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/box/tb-blue.gif b/examples/ext/resources/images/default/box/tb-blue.gif new file mode 100644 index 0000000000000000000000000000000000000000..562fecca87176274af7bf13c419daaf93f169249 GIT binary patch literal 851 zcmZ?wbhEHbWMt4{XlGzpbnMHL<6oAa{JQeg*VSjft~>i}!})KUE_~a1@%#46-*;X4 zvFF;4eb;~7zJ2@P&7Vha|2%Q`=a~n;&OiEf>B+Ba&wkx{`TPEx-%p-AdGqGY@@87@w|Nk?Lg3%Bd$|0cmlLhGf{|q`H xPk{0S1BVKOBoBu|W0NBntB_a%g98I2m#~UU!-oTo%xv5uDh>q)92y%KtN|VsNKya* literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/dd/drop-add.gif b/examples/ext/resources/images/default/dd/drop-add.gif new file mode 100644 index 0000000000000000000000000000000000000000..b22cd1448efa13c47ad6d3b75bdea8b4031c31e9 GIT binary patch literal 1001 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 U;ezY9-WkTkP-6N%4gg~Q2Qp;nKmY&$ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/form/clear-trigger.psd b/examples/ext/resources/images/default/form/clear-trigger.psd new file mode 100644 index 0000000000000000000000000000000000000000..f637fa5d1e12460beabc8b49968ebc0ac883e754 GIT binary patch literal 11804 zcmds6349aP)}JgbA;Ocbf>0GuzzQfJ2%?B00)>YNvUCxIvIz*tj;%n8sK7&Q0D1CQ zltrLGX$urmTA(P<7APcb>E5(W(lkk%eQ6sqbH8&Z({?6l6~E8l?|bhhzmt2G|2b#w z%)MuF?;SDbgAWNF;rR%l=?1ij5D}P%Pn#Gda2|Dsn39*gv69|L?fuB$)^z-xcZ_{4X20k60XxFxV=MG&uck0loQ$W{epAL8` z@TpFnxc9s0xL3xsevqPF5EIuLxGK)@FY{NO49xe089u%ln6UW4E9?>u#0o8GIs42h8( z5j{U9=|;dbx%q`xBUW#1D}JhLx2L=J>D%wcpqGXYdu{lL*GIlP_PufACj?LYaQcjy zvqD0{<}X;dXz?dYmabX5ZvBRhpGSVV?W?c9*}h}v?mc^d*!RyL_y6nYvE#p-IC(1W z^!W=HlP_JCrd;{;x0|R9vZ4sjD>ATAkivwb>ocy7~qej}Ume z1HV4~f!ojH3xxt<8{8ire*=)9qtLI{VE<0

        o7Rp;JAVnkiWNRA}kX#4!D)64-8 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 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/form/date-trigger.psd b/examples/ext/resources/images/default/form/date-trigger.psd new file mode 100644 index 0000000000000000000000000000000000000000..74883b21c54ba3552492162863caf022d51e43c1 GIT binary patch literal 12377 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 BA5{PV literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/form/exclamation.gif b/examples/ext/resources/images/default/form/exclamation.gif new file mode 100644 index 0000000000000000000000000000000000000000..fabf616f7791abc0b4055c3c5c3de74888c6a4e1 GIT binary patch literal 995 zcmZ?wbhEHb6krfwXlGzJ`) z_lwCs7ZU@nqy*h4h`d)2dAA_;ZcYB(+Wd#HL672tA18)9O$vRM8umOr{Bc_Jlk}M9 zIk7J?BVOf1zRrt!nIHeKB<5*Rhp~jL$U* zpX(A|Hf6nS%zV?B^R7AXaZBm5j*3_9wXZvCU-eeM>8^h>ss2+#>X(M3uZ>Axo07k@ zqwHTr&Of@>%Z|O#QL2^~=7jS@?Cs;_sUmeBZp}!L*mh~ z2M3f4cPwz+oO+bI-Eq;Di%cvYVrCXDA}UNvdHLm-qBle&D<3&vZs7Cof}+4tPT?%2 z7D0^^ZZTOc)>#^kk31){GledBdGOFO2O)Wzh7U~+4?2u2^QIkOKH=QXBeP3D;6+lG z$Rha_9VZ(eI`OJm$voJF;SOWl@drM;g literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/form/search-trigger.gif b/examples/ext/resources/images/default/form/search-trigger.gif new file mode 100644 index 0000000000000000000000000000000000000000..db8802beb370d7554d5319c0e0d5c4ecb8da2c5b GIT binary patch literal 2182 zcmV;12zmEMNk%w1VP*gr0EYkoEJ<@NQiwHQoj7N%J7}#uYOy_Uvp;aNK5(==bhkcs zxIKKjMQ4^tXq8B5nnG@~LT|K7aj8Ubv`KTcN_DkNb+$}*xK4PsPkFgecC=A=wo!Sw zK>t8HguXn4zdVe>M}xgcgTG6KzFdO4U4p!9gP(DOo^FGnaD}3FjIVQxuy&Nac$K|H zio!~Uz)6h4NR7lrk;O-p$4HaKN|eS*mB>+x!BLFCT9?RLn8{$2#$%nzWSz=kG$KLt-_nF#FMer zk-6KOx!0e#*PFiDow?ejw7{XW%Bi%$uDZyexY(h;-KD+Sq`uy$z1g+6$eF;~n8Dwc z!{C|J=bqK)oYv~9!QHgM*R{jhxXa(D$KkBQ;;+l&q1fx9-R`8?>ZjiBuF&JJ(B!Gx z>$J(?w#($V%;dSs;JC}=xy|Ca&gQ+&;k?h~u+ZeS)8@6*<-XD3z0l^n(CN9{>b}|N zzTfM;-|xiD-N?_^$crFNz}e}--0H;L>&VsT&DZA2+vdyM=E~UX$=U47-08^Q?9AHh&fe(F-0sEQ z`O4k(%-{6L-}}(k;L+IQ(AnnK+~d&Q>d@Wo)!*&e-sIfg;nCml!s749*5vZh=Kj>=_}A(G*yZxs=Jwp>@Yv?~+UWM)>G0j?^xy6F*y#J&>i*m8 z|J>^P-0S|`?f>2L|KIfg;o;%q2J$<>%_==G9y|_2TUI zIf000R80KEttNU)$64nh(tT*y!e!iEqNK8)CK zBE^LkFG}>sv7^U-9vOM@NU~%eA)QjHT*>le$(I~m!ZeAJrA?J5^Xc4~PoGbo9K9$T zI+PhSYwFZlgErLPznUyPN%h212+^WPlP+!g^qyC*`0nA`hp(*He@|~trMglG&z|~f zxsh{A-%fo(i5_iNhzuKA>zFD_yV4V>V8nz4BgM9pRlU{t`UNbw>({dUaJ6~!i(lA# zgjE_wteCM%w|9>XnepKRjW2fd_49(PHnVlgg2ZSogNZt5$U=8ITuqReF@%Vjc3d0T z?cBRR^!^=O$XBt~h{$MNBh0?DP=^QqD}Frrav|u_=cD(d1CKRnaJ-nJ58Z5J$&gWF z=cB_8_&Brxg*wZGMhY>&01;gbODLC;5cuiGpML-fNZ?cQWO$D~KX~w78acoKMpy=;Ra00y@+aODyx;Ac8Tnd67#l$xxFAj55+_LkP$~LzpMQ9Mj)_@wK3Y zgF@`sK1s@o>TQug8Lb?0$T&|Zphu3V zpppwURJo_qEQr<`;ON~jREQqN8LJkrJK$7Drr=T(o6|TZ6E3I@)Q)m>O0-C@a#5jgZ zuDkXc>#PO@`_wno%EN`TzajvLJi``SDY7e`(;_DYRFIB2<_IH!2IkyqimsQGdv3ZC zSip=kg-T(76uv@>hA@ueddf8Mnv1Tw_TnpqHw?@3iM$6(fWbA~mPw4h{60(Tzm7WM z2sr1k^1uKO9MQuA6P$65BY4d*#~!b2GIGf$OR&W#cf=zE9B}ZV$sQ2XOF<}u@F9fD zFw0D`$q(3!v(BcNqRTd)K(KVpYG9*_&OG}Jw826XZFD1!h_i|Y1dKqy+8LN3jw6lW zRRAy_+bkrGc#?oD1N{p1RZqSjrZCF?A`a@LZre=Hlu7X z010asa6#6*qyo6$gkRnC7Kkfewki<_zydnO7?Q|1Z#NRR7nQs+N$V@H1B)Gc!178Z zdE~*hAEHQdcise0fO;Q13z7To0`&fS@WU6cb1&R{(mD(CK=a5Y)^O9yF1v8uNAk-< z?z||_tFA}`0i-~VIN;qK|*{VjxBMjA&p%9cNUdCPhd{Ln6`-i)5r6gsHsg(Sog3?BZZ;>s~=bv@We39JM;t)^^ckVc!#Wk`O`?AORAVgaUz^P$+bBb8{E<@({tR&oj^V=+(c^fd2jZ^y}yO+|a?E1BVRk z*YEj}&kq?ke8h_*1`HlOX4LR8Lr07l&I6jrUDVsdqxW#nex9Dg|LBW&%)0^uaO06L z7!LX3@dZNI9giM8pXr0~c>)1nC~$+l1mxeqhY9<-^&2sHfqVZIYeg>x514Y`#Lpfh z7luFd^v!7;^~$;(2Yd7!_}rku&yW7|n6WR7n>ua!jG3>_TC{kH*XwV1`>cHD-S^&K z^;f_38#Zp*{K*#oouBU7y=U)dpC9`2@R5Ifb@bTDQ>V|IJ@@_j3sP0P*8FDNW3R;sG1)f#P$u2x@Xwlp=jSZ%Fs?L16C4F}#i zjz4o&bJw9jWpY(m1bjV-#D_RR{9kTxq%Hv~ogAV~7Q zRkmgN9yi~qs|s_cSmHh&oBH9k%hJT5rz{_F3g` zPPyZ!Z!bC=xo>*>UnX20aO|DUD`Kv09s4jP_@T*9*0dn)jF&0VP_tPyHp5FgHB2h8 zP1&6H>DOZ$Zpfmf-_hCy+UKU`Z_)1yyb<=kEqagc_KK@Mmp(i? zs$%){O@98W36G<$1oh6^=w=W~V`S3TPKFO&k?eE!Pp=flj$Zcb%EF)8RxYi4lPvVc3q9k@a@Z~qSo zlXmtF7{71%rkHu}w}cmOiJg98;+idG zq4oai@l(UJd$tvAe*NCHU#4G?F1=Epxo!Ud)$-BW%rljei4AW?oKb)Ff!E2mA{xFg z3L5@#i{abxw^s&7`oHVHyePCN|Ix~e+uqUN^wjUE{iJSS?7*9j6SuY$4m_x`lcny`WoZSNb6i5h=>?xm~KJR|hA>&wga(^X$u2VNd_ zapmRWmtqEWZ}u+vm-Bw1FrPFGxm1c7q?BjTc+Henf$@so9Ttt)dS*RYu{M( z56QH-<7S?HN%O*niC?uo=gk5 zwddIWDErRpv5_SsC!Pqn^5#VGovDMTEL*94<8F4B=gyO@_0LUOx#P!pjU;H& zD}`apcHKDrY4pl~M;HE-`D3-PK>F4yf4{GXM;$#`x@gGcfx^RYFCS&`)=AfY>kE=UXxg)RTJ?s4FW#IG|I)^1vtP@3vS-gPb2f~=cW2|`&Bt^5CCu)f z{`t($Puy%sSQFJ?&;%DA`Y|@H{-cPTX(Miz`1>WtPxJmY>6sQJ)vRQp8byn*Hp;M3vWa=CjW5r$oasjrs4-=DXyWYcZu4%cSkcqhj9K{k}uI^tB(KoO^BtK0Mdh92YRbZ|&TK#2fYZQV#bV zJwoJ_y!*$k`%Ej=Y6m?EjP{Hz$@5)1>z~_vRJJkq^9U?_&V(&Do;f0$oVnqoudHd* zy7ZJk9r1o38LLpew^JHPU?VTwi5&1nrc7>pdDTD1>v~@qlXn!)j?&?NVNC;g7q=P% z*R4r;K{V{}zP`$#TPxyI3i^0$+$D>{)Q)k%4TnZ<2swED`c=zEC(gZ6@Y((JKwvv``DPk2#hIM~pk7&i2I zILYaJQD;Qt`4C@&&TsgI$j?_H_O_rMfdqNdgUz8SW8u7p_&r&ww=J@!HL&UY&bUL zseePk&-ybFC>5VH&;%o6TqaqyHfnCMv&O9^@-C8r8=+=0oO)O-gaF_&NxN@{9{IZo;@ z$6I7*22vUlEbWX2b6jSrW;7&N+87PyxD3rsiiZS?jnQBp%Pf_Qh6Ib1(MTW6T#APT zOADjH9G6+j84U@RW=4ZKE<>}L;vvD()TvozF#pXG_|aucD5=b;!Yr4;+%-$g*_ebB z;Fm*dFw12y&1ek?FeX}qSuV3=Ga3>s8b*Uz{!|~#@~8S>mOs@8bNs13n8W`KK6+LU z#a?jv>#XFgs*NhRSq@cO$=xhCuR;!QIwh1&cq1jJ3bPu=0^@>$Er%ano6@Ytl$6j0<3b9|WI4=1+Jyw@XtV}1Sq_Ja){p>&f!1Iq%Po3F zLxP21G?>Xx^}$Sjst;x|<%1nkE6M0&P)dcl{2N}F&Hrs)nAzhnA8Zx20SmxB!9K+N zVEY6MB(+W0GHf0;4eQqq_a@v35zmcpbxK;N)M+zfc1*w*J@*Q+fd7i8ppC8AocLC@ z`6(C&=D>sk&*^I~648S5zJmlEUDbAWjP|a+--6;8j=AwXS6oQZ5iLUX?RN$V9Igg? z*Kl@M|NllHP!6{#=c{aX0(a}s-uCt6b!*}5#~&fNkvk8mgzgKXTX39k!#mXHr?_=v z;O@-7!V!oT#leV#cuVvGcN}w3IT2m_F6tkIyRiS5>fse{b95dafvfH^E?2j!&V~~( zRi59VXu}D2ocf}<7C2O0LU0jWiz`Qj2?o7$r?$O~u(`F6Up#@iyPDver*}q7@5~=# zF+&jZJbiC#ZMBN{xM=j#BQRGB&Pwh{?GN^cNbWSL7tDCIO?zj<>x&jZ!N4(&!8J9( zh5QbVhx`0+101*KdyrMkfpH9+ARGk8z@doTCLaw)N30cNi5wow#}YX(cV6Gg^WmV_ zuuh4E?=*HwEVmoRcN4ksTQDK{X>|s%(iX1AhLzL4JSPkKLm#+moeDj|4_gOa0{wjq zJ>moGP3$#n7F^8^!g@9m?N|q)h0O|^5o?4C&{o0*aw~kc(Xs<;BLtyGjz`(y+}%Nm zI51mbbE+MkBJ$u6gQxt^F&*3L00n0h95OgLcDCKYR#+ecvlAYskEgE-yR~Zib{v8c zE;=i?gX8=SFb0u(+?(-ngHmN!J|mwXLvswSxj6uifz5yn$7cLeBu}k8HA6yY;21dj zz(H^fYzpM~Zst#_v@FfBnc;K}j)4<_gWwq06v**t=9|?TUD3k1Rdf!HffIp);278x z_?|Q7&s_BPFXqqu35N?pyo-*$_b&V33UJjq1ekXjOJ?}tGkEiVa=<+!oTa0A)is~1 zABFGabMe4d%%8lyp(6gFzKtbQNH!Bi?!?j~b#lAI6NE5z=D2|R7W%WD+FKTffTKfU zkdH09<{}8e@!=ax&D2Lb{G{1v+Dn;9AQ!<`|7>a^&^r!wq6?$b*eN-q=%KO@PF_1` zXzR2z!gpeaO4JUUooJzDRNd@E9;yAGSGBU7yehh?A(2(pD3z>gogT8PX@7DY#ct76 zjZ)~UMghsH#@NZK#wcV}qd;U;GhaAxNs)5)z;*PUL!s)TLsesVWL4|p{0%T!)#Q6m zH1*q%w)yMn92^5D0tdk{uqja0inneK`tj1%%~AAk zou!jSip?jh7z^O4a|lq?ih?%&9pA|Fm(o?usnb=86^^WGEI(P*SUOn+S$L=(`I}aM zYpF@iG(lB!%5;@tG0CdN@{>Ex(oy8jJ;mX-4s|EjZ`mO;R5kLGu4*g}S=F3A2H!nS z@WZ^%8lkG854vWtm@G3(?92;QNO!XVsv5l0Rjo5nr?FFVMxm=3&0|$H+VXFxY9?K6 zJzdq1$f|0TN>;T_4_Vb3(;W}7Y`UsZ3SHGGAX(KIJ6Y8jg{*26h^%TYsR?Q7DtST{ zUDdkiP}LY7S=G8Yp{jM!SzxlNRmzfW8m;w#%tZfIT@797P}N)k90QvH)gVV&rY*U|A_u`SuqluuH@sM@DmP|@GdVa0P6Q5uV_;JthbAoAVrno&+%?nV;21a& zI0%k`O@XRbdoL_Pk$Nwzh^}fZoh(vpK3NP{09TzufU2eo|1}o>l^0e(S2d?jS2b2R zvZ}HCWL0D7WL0C~p{i-FT#T_clvg%ERddR8Rbw&9s>bq@JI>O{s@4S$RjT6n;a^&y zs*#^`wPJC|s^;`D`0jCn2>)};+QOp4H-Y3FtA^-fqvjDDtU+j$kw5PHi_6`S* zp3HW1bl7p{<5;KW6v&6R4l`llH8m40g61X*`NY;yKos(nxw5bT9^Q7O5eg!m zP&nWrF2`xF;~R|iL<6thNRW?q*=XF{3s!B}Qm@_4v_kY|DPGX4P+6``y!3OD8iErc zjx>QHJ*$8y<`-lsa7e&K)Oi>iEXh}HD$I}pp1X1>jY3OHb;#?)Tz8-IEf#Z!l*n_- zFRCiqyM&nI{`z;-MfpSsp4L;5Rag;o{&HeTmV$sx-GOR_bqy6?ctIrZvyFAN-O?Jw zjZO8zb2fzC^7Fpfg0kg^b5+%Wv)6;g>qI4tib!))WR>LYUJUuYzA4R8q=j%ncug-u z-FA}o#`pD*t2mu6Fzxlt;Tm0ldfWX~>uTwF|*xLW@+ z9cOMlmCKc764zU9&84pL=RZQ@QiwB@KhB{n^J1uRr59ghvP+B8L%P9Kh%0s1=s5Ed zb@U!~Wf{dLOU7LCYJc(DHI49vrHU2BkLOU9H;Z9*z%fiOX0p$fpR;e3t*x|5Bc<`Va>}syW_qkPga~~({7J%WGWjC!jKsSk9LSSo zMQJ+4@sbp$A&%IE<6cs(%k`bLhL|Is`*x(Ryu>PvPRLAN{^|$B>|t}>yp@>{tqlnc zi^@z{fOh7!#nnM9Q#?}jwCv?hD`^v?|CkLBu`GL_OA zbwB&b(rJ4%1#$NavmeC9XhXuHQj?ZJ>RF>_FTI``6&AYR6|z68RPomIy|tSM2oJIf0*i41<~!+0XDw|2i&{?KRI z?&@3_9NMTbBGlu6E2xL|K#}5&NxRflC4`D!lmqN;cvy(2>gvSpHJXxQM-g5K$f(a7d=G21JmQWSY=smW?Kda zhlRKmmX?2O$D1z9rTpjYXwH_Ug4jf18J?IunulaClPJvts;?g-`9f(6sXm~Yx!r-p2(WqfbNJmLW zsRNdUa2)OJkcwO-!a(R&sa2KMqE^`=!_~bsHTwF>!s2QpL?a}Q5~7p`Wk<_bmzUxY zm4mRiyLZ@Y%gPOQ94#{85>TV8yLXB>?tc0qYLqg(TBtQ@!cKtYRJ>6OS@4pcrR8dU zS$<)KuA&qc60f zmak(B8pINo>#8Ith;Q6a#z3|b2^T}y#I0@3*AGLS?~gxhZ|#O1K!jrB~|%CQJ^U%7uiQWI_;i(`b7(8dkZuLKj0@ zg3@(#su(7Dnif)VFnDt>+kGZXuB}@V>XAhOhqk%c=xI%862=4in&kI{u!E0nt!2&JQj(DC#J!o)Y!>Trn1 zL9`QsmimSkSY6%?7`4I1{A41@J-Gz6K{;*_Hrvbv$dXcOYi=Txcuh}Tt+COdt2NZ? zbp%Sm!Pp7DwKxU-V@zHN_jJ0U5DoAMy6KtB`wDec>LV32K{?SRZnm~imZTC}Gs+~a ztvBXAf!t4u8}zywB^To$Jle9!D32@QR&#e8)Rr`{rmbJ_BcW8vXzI>lw7Q8-RYF^2S~68novE7M zodm)FYYfR;T|khlTt3m)VNGV%nntVAQuON zaz)Zn=v-o*3kmf=T{wBCF*3TL5xy*RKA@*9vL+@~F`YbuOvS-KD&svWN{o#;gr+Ve zvIo{gpc{@6kxJ-+@@loVUPl{BjM_FOp&q6&Xz1KgM!iPKf#7XDJB*QJkZ3iWhrySH zF7vyPP!Ci~C2@FYugD_Q0_9qrsU`{;hDueaf-2RT8YZ>0#8{(NIuY(Pg6I(1>t&(w zco;vr+D>%z>xT4vX-(CwAL7k*W#xLZ1E$v2Yj6LM&}6ErChDJodEKVe)X=H>Kwvnh zRk9&{NQeVB-MM_fwMkcNgHv%276}-HNtf}?tb6jqpj|3`l@qZ-EFML4SYD+$JIg=+wTss6}zvt+Te%lio}%eWz}&yy5XhP8y_{8 z4RviOX5FKmKQ@?Z>>7t!q;fjkAedF&YDKYF2u#W9bg72=1{iv)UI-Zd1H!~Z%~7OQ zGInxRY8NN0EA8xaa(kUkFM`8H_d{?Z3(4wgM*WRiUW!^@m&K`!!HMX0@#??H`#+Iw BV7LGP literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/form/text-bg.gif b/examples/ext/resources/images/default/form/text-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..4179607cc1e9486dd6fcc8467c79b5b41dbf4f76 GIT binary patch literal 819 zcmZ?wbhEHbWMmLxXlG!!_xRa|&!0bk{rdI$_wPS{{`~#>&!4}4|NZ;_|3AYh7!85p p9s-I#S%6;r&!7YHC@4=ba0oCkvIrP7I50A^3uwfgFi>Ey1^^@>A+7)b literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/form/trigger-tpl.gif b/examples/ext/resources/images/default/form/trigger-tpl.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3701a383107e090fe25d3fb8d63aaa9290435e9 GIT binary patch literal 1487 zcmeH`{ZrC+0DwPCBIojs3o|_0?P^-#Ox&%!R?e}@xx}{YYR;I~>N*jn-Qn&=-p-KA zeA(%=S((N$6_|l9fQC+Hxi9#N2luQwPBW3%=l!}^GELum-8=KbTwwF%Rj%DgphgD1_aTFbxxSbc_7 z*tiC}T&|Us6}Q{%@p#OB*cyNreCzg?@X|W$2*O^k*XQ%C`Tc=FAQ%j8?6A4LxwQ?$ zFnGh80{=sSgX_p0D-7aZyI(&6LSe8g^uSq3699<4vDu>uKv9OqBv(z-4-J(@5=c^c zCvT(%gPg*qb@7!*M7$td*%d>&myq6H6@|%BvEwc%rj<`}&sV>d68bLbzTg)ez92R{ zL%OWyA+pbMNDmz0eA2_8Du?G1p`W#a zi*2IW=5FT;Nm@-f=nK&Ju|GKH$G>G{YFkTqB2{y*&pLXG@cG}HCp8gjUV5YGKrX;c zKcN|~+$?$NF%5hJAHnq}74oAsZQo5Wi&P-SqG~)}Tn55ltvZdK`IT)rc<_XRg^Z+L zEoNSBGTq*jc(eqdQjVJMM2OG;fu#t{Wg$qSxg0~TkXJ<4QMskK7QwahebOaMWkPZx zRCQcO<&}om1lH;#2Gv?~f?O}Zn-ZB9UH!@7hU*~W__FO@Msfvo|59dNOf4yZWj)Bw z%xm6#wG3~s&!Wh#gS~vA{n3r&QHV_+#^*Lr;_-`|0`e>QZ$*LSBb*;mXnE6}$b132 z(DJsR0TJCw1C%R+wAP Mbv*YluxN1lKj3usvH$=8 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/form/trigger.gif b/examples/ext/resources/images/default/form/trigger.gif new file mode 100644 index 0000000000000000000000000000000000000000..b220bbed3cad39be91536a4bd22181c8a95f248c GIT binary patch literal 1816 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 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/gradient-bg.gif b/examples/ext/resources/images/default/gradient-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..8134e4994f2a36da074990b94a5f17aefd378600 GIT binary patch literal 1472 zcmeIx`%jZs7{KwDTLnZd*hMh7R3%&{VK|xh5d@TrMjeTpnq?_&b8`}Bh(kowLJ^R= zwLrP_Mz6F*N-1{`N?)K@6i}uD1>V*|OIv8)A|*;9JN<2c#7;i>=A7rpCpmEmrw$)U zc7mcXc@UIVGnG~gOy34*)9Li-becMyuD$~>)ERVj219+9F_Xbm-(}8ZvefrjGxzFd z?gQ+Z2W-&U2kcoQXO_sF&Em{uap$rD-W-Vsija6n4j*~Q*W?J0hYp%tpk9;bpv@I( z@`Tz)B2B(fn=b+vZGl)@(4Z|8YYQ8+MGfzZp1v;z8bNg>jk*$vu2iBclgyVj>B^es z9|O{PvUGvmyzs<9PmwK9WcqTTMPJ^kuV~R%wCXE?Ha*qBP}OFjwi~K|4nuYOVl`;T zVhzx_SPOK48f&|ZG@#o^cQDa=jErs*qsPQ}W@7f3n4r(hETGq1*K1~j_Lq?Dr%LqcFxvPW zut}by5*6B{LZvEO(+Ju$Vv_!sOuZvAc4ePkK}Mg^X|R8{wv3g3jV&Qm0~*o(w;!4zGtP^}q4TE3f=4jcq2s zNTj41IT7{z(FAgK^iIzZ@_2j+Ir8!+!Q#r@%9(ju7k_5|Ghf7eqx2?7%YoH4jP!wx7HA*Q43) zwFOW=pP6ly3pn=?dHpWVl+z~h4aA7q3Dbmfk>A9h*D=1j0=ZkaJtNDl4|Dy58=OQ4 zb=w|rEX#G|6q4dPk_gFV6VcYbmUmazi7x6i6Xb&As-j$U2PJ(S9-JDYvw05^=DZ2M z-q(%65iC7!Sf=Hfs~2MFb#cc_ASYbPO$Z9ewDx-)GFuhcxKI?v{g{Fd`2H?N2mNoG a(II?Zs7)DAnPM9b=8J95L)rdV=-9sjoxm#q literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/Thumbs.db b/examples/ext/resources/images/default/grid/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..46df4e9df82a2b7d64eec82946944d3530c3abfe GIT binary patch literal 33792 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 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/arrow-left-white.gif b/examples/ext/resources/images/default/grid/arrow-left-white.gif new file mode 100644 index 0000000000000000000000000000000000000000..63088f56e1c33fd23437ab00ef3e10570c4a57fa GIT binary patch literal 825 zcmZ?wbhEHbWMSZBXlGz>`0uc0#Y_e;`2YVugfU8vhQJ630mYvz%pkAofCx~YVBipA cVC0bDXlQU?ViVMIiI|XhxRH&WjfKG)0LI-8@c;k- literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/arrow-right-white.gif b/examples/ext/resources/images/default/grid/arrow-right-white.gif new file mode 100644 index 0000000000000000000000000000000000000000..e9e06789044eacb8a695cd1df46449bcb2b9aa07 GIT binary patch literal 825 zcmZ?wbhEHbWMSZBXlGz>`0uc0#Y_e;`2YVugfU8vhQJ630mYvz%pkAofCx~YVBipA cVB}zNNKj~OV&PY_IbpESp@o^1jfKG)0Ls}94FCWD literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/col-move-bottom.gif b/examples/ext/resources/images/default/grid/col-move-bottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..cc1e473ecc1a48f6d33d935f226588c495da4e05 GIT binary patch literal 868 zcmZ?wbhEHb( zLO{cVgpLOZ6Fwx&_)sw8LBWC#1q=Q+toSft!~X>b{xgh%(GVD#A)xq^g_(hYn?VQU zd{CZX;BaIR=ZFzVT;Rwl#vu{Yu%W4$ky$xng~3BdrVc>?i4_ctPK=BUEM^-R4mL70 a^J-WG2rw*VW@C5a%Q0YR@NEQ2S_1&+BRBT| literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/col-move-top.gif b/examples/ext/resources/images/default/grid/col-move-top.gif new file mode 100644 index 0000000000000000000000000000000000000000..58ff32cc8fa2aa1be310b03bb2af77c1b77abe93 GIT binary patch literal 869 zcmZ?wbhEHbG68wVGIhem=U(^LUb4h;c?We$u2%uEc{03e(}^8f$< literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/dirty.gif b/examples/ext/resources/images/default/grid/dirty.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f217a47959965037bdaacf23dbcbe800a59273f GIT binary patch literal 832 zcmZ?wbhEHb>lyj2t2o f3la`CGVn;rtSCr4)W)vpHOFJ)qNAORj11NQ63h`c literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/done.gif b/examples/ext/resources/images/default/grid/done.gif new file mode 100644 index 0000000000000000000000000000000000000000..a937cb22c84a2ac6ecfc12ae9681ab72ed83ca78 GIT binary patch literal 133 zcmZ?wbhEHb6krfwXl7towPL}p0*huu%~roJzC1V7qiQ)z(xVq;t8Q*e g@TwP&*%vbDj%DY0^FxMh_Sd^OqF)Bg*^}7&&A#5)LvkG7IyS zOnBJr%r7CL!Q$}XP&==XoWqO@51m;T- zPZpr7|1;=-+z!eU3>@+d`VlJv8V|8>3M$wXTxdAR#L6ikV-V2L(7?dJ#=^p24FK}3 BP__U7 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/grid-blue-hd.gif b/examples/ext/resources/images/default/grid/grid-blue-hd.gif new file mode 100644 index 0000000000000000000000000000000000000000..862094e6803f522712e4d193c7becd8e9b857dd3 GIT binary patch literal 829 zcmZ?wbhEHbWMmL!XlGzJa`*r7`~Ocp_<#1%{|it4Uw-=k+VlT6U;e-I>i_*W{~x~l z|K$Du=O6#S`uzXxm;WEW{r~*q|F@t2fByde=kI?YU>F6XAuyCfK=CIF(E0xvbU>Z} m<=_zzU~q6?um%8<;zWG_ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/grid-blue-split.gif b/examples/ext/resources/images/default/grid/grid-blue-split.gif new file mode 100644 index 0000000000000000000000000000000000000000..5286f58f6f798184c3eeacba1352cfd39b9ae03e GIT binary patch literal 817 zcmZ?wbhEHbWMbfDXlG!Ub?iS7FpPrH5Ezjmp!kyo=M_wPS^_`om@~ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/grid-loading.gif b/examples/ext/resources/images/default/grid/grid-loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..d112c54013e1e4c2f606e848352f08958134c46f GIT binary patch literal 701 zcmZ?wbhEHb6krfw_{6~Q|NsBg$>(oA`P8%SHjuGk&%@0ppYOTwO7TCppKD04vtxj( zk)8oFBLf42;y+oZ(#)I^h4Rdj3>8V47nBGRLn+Q9-(eXZMC@T`q-A zfguTok_rhvuF+B}YGk&S-hZ1Y!QP;7UE)!jv*adK6)hob2AOf}GE&w)<#=MknJHoV zY^}*Md|xE}K6*MO&RAU_^MUKk=Djk=g^pDJi6uprK3M%`#IdVL zUEAw4e{ zmg0{~p6|Ie&p`6H%mYO|r)_gjg|As;$iv1hQk=MZgX#CFjEx2xI6HUG&(-w8Y7Wpj zcm93g6udbnGzoX) literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/grid-vista-hd.gif b/examples/ext/resources/images/default/grid/grid-vista-hd.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0972638e8305d32d4a2419b3dd317f3c8fd3fe2 GIT binary patch literal 829 zcmZ?wbhEHbWMmL!XlGzJe){5xGZ#;uy>#l_<(QpFT5;g3%Bd$|0cmlLhGf{|q`H nPk{0S1BVoYrq2Wc#zV~Pyb=r?3JDC2Ol*7#9t#p29T=29Ey>tSt{5 zHY{*#Vsg}oIT5h%K(m0QN{+|JM3-h^O`|Opf{7fxyq0BWID}eGbgMYd>zNVs*sDWV zoA1qwjZY3uXHRaM;~D(iZJx6IEfY?Wr2(@o4CQoZZdq`CwriwbsHEt#km;etaZ`6L zTz!3gENh*F_qI0?jS`nu#m){}(7wIk@jlUvh3oF_E@dsdaeDjvxJFSXZaJBV1#O2r zgyqE~6rDPbPjEKrQ!sFDJ262wU4TQ;rQ!Sn=9UHq#|Nzf3_+{e1Rfn?ZRD4$;FDGQ z#@r~Pu^>)X$(*&3x9Pl?tj&%CoF~dRyY`d67r$SB{>v~5Mnhoag@EEu7NDp9Gw6W44$2b@93l*? Z95Nmo7Bnz$2y4ZhC{SczU}R*l1^^j55kLR{ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/grid3-hrow.gif b/examples/ext/resources/images/default/grid/grid3-hrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..2c9533a17fcc2cd0b4809cffea32071a0214220d GIT binary patch literal 836 zcmZ?wbhEHbWMU9wXlG!!aN)x1H}BrOegF2|hj;HkzW?y)!^h7bKYjW6^C!b77!85p z9s-I#S%6;r&!7YHC@4=ba40eea>#gWP-tT2;FpLvv7zBG6AK5=3=4;b1_lXc1_l8E G25SI~86|@N literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/grid3-special-col-bg.gif b/examples/ext/resources/images/default/grid/grid3-special-col-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..0b4d6ca3bf28ba44b4ee215fddf936aab7cdd5a0 GIT binary patch literal 837 zcmZ?wbhEHblwe?DXlG!!aN)x1H}BrOegF2|hj;HkzW?y)!^h7bKYjW6^C!b77!85p z9s-I#S%6;r&!7YHC@4=ba40bda>#gmIKarv!7ZX-kkHV;z{nslr{jQv6El~jRSSoL H0)sUGu7M?* literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/grid3-special-col-sel-bg.gif b/examples/ext/resources/images/default/grid/grid3-special-col-sel-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..1dfe9a69eae133929f3835ffcfd108959539b9e5 GIT binary patch literal 843 zcmZ?wbhEHblwe?DXlGzpb>`cJ$GN zbN|hshj0HpdiUqa`#(?L|9SS|&x?_??HKjfkTCXkweD9 mfT4kbgI~?WW5NQ*7JhN9o*xBDE*)ahRw)@D7aeL~um%9t9ucMh literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/hmenu-asc.gif b/examples/ext/resources/images/default/grid/hmenu-asc.gif new file mode 100644 index 0000000000000000000000000000000000000000..8917e0eee0cdf7758e83c4cffa7a7239f72b8427 GIT binary patch literal 931 zcmeH`u}i~197Zo~Emb-ML>(No#i13!1{`|2)F4_jl^X=3LnUJzge<}>RZc~zP~kV; zB68w#pu>SnK&adpIt5*dn`7OIQ?33Dj(x+oeanNlwY^!!2PQI6AN?^vMGITlu?Sc$ zU>9uS*}igoaC}8PN`jCCnovooc75v7&|^Bl#h|GI2x(JLP!wWjlNOK|~-m_dM?T+-E!pI0dd^5l}(d@Glq_swQ5Q<6ypk{;!;VaqFyLusAH|W zI_^hNH}3WaBSr@P!$9skWgujrrQZ^Mn?RWcN@fn{AM5KVovc^P{B4D$=SroI5_&zI zNSF`DRwb35%9fAbth<-%@nxq_$~TO}IN9OvPh(dz1*g;6JvytHv(;6&xjkRcOr!mB r{VRFNa;Pe5osHT>5@ibIb~{3g+0C%lYO~3O6<&R=-|w9m23q?84YkzM literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/hmenu-desc.gif b/examples/ext/resources/images/default/grid/hmenu-desc.gif new file mode 100644 index 0000000000000000000000000000000000000000..f26b7c2fc5836850958f7f2b1fafd3988a988d7a GIT binary patch literal 930 zcmeH`u}cC`9LIl>nH9kiSwcv;h)RPe4nCSX#PT4JtLbR)IJcwe#y6z#3aSf)9!+l$ z;%yxW@kSwnZWM)ZydeVHiWX}!?QdxG!)N_2ANcN;ig{#6Ai)s+7(q%#GE!y5mQ{jO zj5MrhrlNCIcT|&WCe|#b*{*J3-4-SmmeaOT%60^HIHrQgae`8gf*j^igs3uBp{hnT zopO)5V>`?=nQ1YLFxzIBGSTNY=9rB4oG{nnt~U^b3F->w3Rehk(B^L2>$m$u&+|JS zzvF-O{o!cJw7~xri2now00G#VJYn()2%o@AE8lw!UPJ@SiC{BRyCfUg+)-YByjskr zv+Ug{Ji~hAw(%`jAsUlHdvfpXd_GaEWO`qB`!@?~^gbD{hpr>BT&DZEGYhLy?xoZ; n!ca~nNw;=d4=v4s)H*Z{&Ndrqrwj#{39jU-m51Y}8o>51Tocwt literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/hmenu-lock.gif b/examples/ext/resources/images/default/grid/hmenu-lock.gif new file mode 100644 index 0000000000000000000000000000000000000000..1596126108fd99fc56226b412c6749c55ad5402b GIT binary patch literal 955 zcmZ?wbhEHb6krfwXlG#X4~ou+bjZoeOV2FG$|=q-C@C(jDlf0eD{N@b6W`Inv#*zP ze=o<1{(yu1+=nJ`ADhB`dOG8|nG9#s|^2dGCVn`{Pc*@>k~$=Pg%ddVgCO)!~fR||KBnE z|HJVAKg0iLR{x*dJ-;0I|GC%y_pblnMF0Qq{Qtk(|NlOXjV)~*Jzd>>6DCZaK7IO( z88c?ioVjUP%kt&RSFKvLYv;-0XzkU1m_xG3of4~3u@#FvBAOHXT`19w_f1o=? z!B7qX#h)z93=CNeIv`Jg@&p6N42G*5G9DWiIGRQ-bEs^3`rv@RCy$K9p(kC=rd|^` zST-*?>B_{iQlwx7E2E<(Ghbe(62oy`Y27&t0f`^nn;9J1SUxr?H8M5pwCs2h(8SWt zC8Qv+=HXHgep#c0o(mriDDdjJR6ObU=;Xr2&gPqN_0-kZOwH=MQtsX=WoB-cUnB8y dW3n5EfMAf!nn#R>TRBB^*6i?z@O5CY1_0nG4B-F( literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/hmenu-lock.png b/examples/ext/resources/images/default/grid/hmenu-lock.png new file mode 100644 index 0000000000000000000000000000000000000000..8b81e7ff284100752e155dff383c18bd00107eee GIT binary patch literal 648 zcmV;30(bq1P)WdKHUATcr^L}hv)GB7YRATlyKF)%tYH6SZ6F)%P+<{wS~000McNliru z(*hb477vONgHQkf010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00H1h zL_t(|+NDy@YZE~f{$`WrhuKPySQAA=4|-5UL@Ysj^nd8hiS;2Kdj#HUllo z8f~>&*KFH9Nwz?Ckui3oR;%3`NI(gPUDtho|G}f2_3e8bT8ASerBbE5)1bTYdcFQ| zZM?C8k+I47`6u~>51*b--wCz*ER>uRr zeV-UkHLH%}72i$a+1i|RAKlWyIlu9^60fuoN4rrzunmYfG3Rj9y^HEzZv5(CEO81y zUYkzkSk-KQ`3%0SF=Q~vI7Aru=z0O7P{Z@#ja`PhX$8v2D-^Gzc;YIGcnR19E(0MI z;kZD@0aiO(XrN-PsAlqHZzKK#l1tJ_)zheV5(%VKYS5UK?$7C;0+>qp-G76P-YrWc z5ZrIlD9FnLDKc3)8S0<dA!cTgY+CR4-a*;u;!NrNF3LWTlP5a1_; iES|Z7@j-3=)A|j?vD&^)Yn&Va00007>1uYXA>3Qh}beSb(Ur!W`$ZoRvwlh8h#GSA{v3P9MZmob1&N}#H|)3 ziyhJ(U{)KHf*@)Iy5?}L)|RKuO{O%cx#h;IvM2X1`q0Jo18y$3o31q0)ZQR~04YGX zfXCOw7l;j1uOz`;`%xPF|1H(H=TQ-Al80O7c-*kEIp@ZM``Ch}Whn7a@ zEo{qiRYg+i%R z4h#&aR4TPvt$O^~PNy46p*I)|Mx)VWGFdDZtJOL&G4XSL3{j3aZnxWK zXJ;3eLR8p^IE^@iXhU=a0)b#Kw7t0&jYea!SUet2Boc@bilUOqB;u|J|M|xX6jAAP z03n=6?Mi(Dm?nrZ^SKu7#oi7Bm%1nSA1H5qaf|0_D`c0ZeXQSbMRJ}Wp^ujFWEojX z(Y1{1lBcW8em3h3o6B)FgQ$TZv?6jQ8yMxx;o>^&qx~ghy5ef_6fHB&ac3`cuq8MD zSbdMbr>J*|b@#!#g0h@qxe*x=qGVcHY literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/hmenu-unlock.png b/examples/ext/resources/images/default/grid/hmenu-unlock.png new file mode 100644 index 0000000000000000000000000000000000000000..9dd5df34b70b94b708e862053ef4a634246acc8d GIT binary patch literal 697 zcmV;q0!ICbP)WdKHUATcr^L}hv)GB7YRATlyKF)%tYH6SZ6F)%P+<{wS~000McNliru z(*g|-5GqRX(wr!towOa3bz1}%hRS$Ze*UVXl27U>F*+kf-M;&k-s!`fDVCrZezlf>dy^3`BTW$z=L>EIW zO>?T0B!*En2q>u<@}12dniz6|2?Qm9qx{jpBiX~P{FQ(#@rTzxF``)#1i>x@j&6Pg z`g9}R!YZ+#Bpq}r3e{~P5}$S=h*)1OVUmx@SN9wqKg;4@^1P3fXJWAV73+q9*IOoT f&)vjR{Ezq!d`RXXnklE900000NkvXXu0mjfw|6I- literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/invalid_line.gif b/examples/ext/resources/images/default/grid/invalid_line.gif new file mode 100644 index 0000000000000000000000000000000000000000..fb7e0f34d6231868ed2f80b6067be837e70cac44 GIT binary patch literal 815 zcmZ?wbhEHbWMN=tXlGzx_z#4mU^E0qXb33&WMKq(T?a&f@&p4150I4La9D7liGhiU G!5RR1hX@}4 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/loading.gif b/examples/ext/resources/images/default/grid/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..e846e1d6c58796558015ffee1fdec546bc207ee8 GIT binary patch literal 771 zcmZ?wbhEHb6krfw*v!MQYQ=(yeQk4RPu{+D?cCXuwr^cCp}%d_ius2R?!0jBXnAQ) zOH<|l|Nj|aK=D7fpKD04vtxj(k)8oFBT!uNCkrbB0}q1^NDatX1{VJbCr|b)oWWMT zS%hVC ~NwO_yO%;SvZ5MdNYf|QNy-I*%yJaj+uTdt+qbZ z4E`Fzb8m}I&!N8OKmWEcCmrLs^Hs&3i)mt@hQVdcqghkaBs*D}tG_lKew4?rTjzIZ z9tSone1TS+TR7tu^CunG)Y7Jg#sw#)sG9C!c0I%LEzP)9;hqRf&)s$D8d5Db{TBs% zgl0~5QQ91luq4Q9tJgt4QLbaxZvAaKeCM9!oy85dg4k>TdBSVqjHub_PG=PO&J-rx z7oYTuF+kH|tG-UK+EkUhDjYx?zW?T|lx>+aOQm zzL$v$zBLo4Cj=G&tw{H}dW?tlTkS)SY4<#NS92z*EY-MMB6Ftp`R=*=*Ev7cS+X%W zMCur^FdlokL}1Y+&aasU2J4#EOuNlnb9CmqgLCGTSY!1BD42pkHY^XidQ5=>YQx%` z*%Pm9D!CkBu&tMWm(%-ejACVWGS2RX5=QOJ$1*tr7F}F+*-OA+Ly&Isg|AEuUYicA z#%IG6kPXkHt{zk2M6zK@Vu^4Q(1zE$?yY6M!^&jQ+2^E?!p7{g*|X6}vuRC3p@jk0 W117c83?+LXEZI4G$p&LV25SKE>nb+@ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/mso-hd.gif b/examples/ext/resources/images/default/grid/mso-hd.gif new file mode 100644 index 0000000000000000000000000000000000000000..669f3cf089a61580a9d1c7632a5b1309f8d0439a GIT binary patch literal 875 zcmZ?wbhEHbWMYtKXlGzpd-4Cei~rYO`oH1Q|BaXbZ@T<{^OgTwuKwS8_5ZeO|94#b zzw`S4UDyBbzVUz0&HsCE{@-`&|NdM558VEL!C+hQ;zA>HJFm1! z#)%1x%x&D_IuR=Z8kt%-g@N({4h;>A%p3w50S6iynb`#tJSI3aHnDO`7-U>H(Adn* Pui(%j;MmmCz+epk$!Kdz literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/nowait.gif b/examples/ext/resources/images/default/grid/nowait.gif new file mode 100644 index 0000000000000000000000000000000000000000..4c5862cd554d78f20683709d0b450b67f81bd24d GIT binary patch literal 884 zcmZ?wbhEHb6k-r!XlGz>`0sG^=;33>fanOrC>RZa5f%c9KUtVTUe*B-pgh6A5y-&E zA>*-O!NDdb7MYkC1`iK4@=0rzWCSQRbnt4Ywd@dF=+rMIANR*%(jvDmG5%#TnwOp& kU}SchrxH17*#QO%<_$5P0_ncfbgjEYUKG8!(7<2~0Pia+WB>pF literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/page-first-disabled.gif b/examples/ext/resources/images/default/grid/page-first-disabled.gif new file mode 100644 index 0000000000000000000000000000000000000000..1e02c419f5e73fc1ba5770df0448d44adf856288 GIT binary patch literal 925 zcmZ?wbhEHb6krfwXlGzZPfyRu$tfx-s;H=_udjFb@6g=b+}hgO*4EbE-rn8a-P_yS z*VotI-#=;6q{)*fPnj}h=FFM1XV0EDZ{Ga*^A|2$xOnm6B}gPhY%v@z$+dw{PFR zd-v{x2M-uV!Dt8!L;Mq+#E6<8x|aFW_O4e+3))3Q*|Q=94?bWMk!6jGP<+(r$fM>Xwqe7gmNr&4?FkK$jz>EMMFb>zJ~*Z~ zvMU=|C?p6pu`gocw@ENKkig96%Ptk5a9{xwcPOV4M}k2k%Q{v@i4+D0okN>5F7xql HFjxZs_zi%( literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/page-first.gif b/examples/ext/resources/images/default/grid/page-first.gif new file mode 100644 index 0000000000000000000000000000000000000000..d84f41a91fca3a0ccc1107a78ffbf7b62c527afb GIT binary patch literal 925 zcmZ?wbhEHb6krfwXlGzh@tC0DJ54uuo^j+di-h&|8QW#kzUrr(*H68ylXk-(>4ag{ zZHv4+cEz{tOYf>=ebOm>XHxXSuI{Hx{sE`lD_*51{Hrf`RNeQhe(3PuA-LgMaLe7$ z)_W1{_x-!R`FH*eYuz6C>RX^ z>V<&fPZnkd21y1TkddG~!N5_)V9X)ov0=f%X7nX_llo;Ppa!i5VLFJ8Q4$&%&Em#6pV(z;0OW5pDfG_ z46F<~Am@Pc1OrC}12>0^$A$$5o7t@;-Y_UNJMxKf6&W}lT+k*Y$eyJjc<@21kdg?` z9)m}X2f37ODg+`IICZeGskVGL@ZdlLlaQT?!H)&bz6?zAIR*(A8e5nhSgkHN9C*OQ m>dC5ipkT8?(+Va*AAy7q4&fY(0%9#)p=)k#W@Tbxum%8@3U^Ha literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/page-last.gif b/examples/ext/resources/images/default/grid/page-last.gif new file mode 100644 index 0000000000000000000000000000000000000000..3df5c2ba50b143fca7d168d5acbcc4404b903ee8 GIT binary patch literal 923 zcmZ?wbhEHb6krfwXlGzh@tC0DJ54uuo^j+di-h&|8QW#kzUrr(*H68ylXk-(>4ag{ zZHv4+cEz{tOYf>=ebOm>XHxXSuI{Hx{sE`lD_*51{Hrf`RNeQhe(3PuA-LgMaLe7$ z)_W1{_x-!R`FH*eYuz6C>RX^ z>V<&fPZnkd21y1TkddG~!N5_$V9X)ov0=f%X7)sh7DeV(M==$yO&0_YC2+|IvM<}Q z@ZbVY8B+}&lf=VK2L;XIwg}8jWa;H%bG(qjsCck}M+|z`(?y z1M&eVPcU$JFtBpScx+g3u$hC^!6V}XBXb*zY)A!1phGj4Fjq*7gQ62lFOR54M?r!E kLmQ{U6cz@-#wJD`MJWvdVWq}d0_-7oPHt8|*uY>70KTb0MF0Q* literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/page-next.gif b/examples/ext/resources/images/default/grid/page-next.gif new file mode 100644 index 0000000000000000000000000000000000000000..960163530132545abe690cb8e49c5fef0f923344 GIT binary patch literal 875 zcmZ?wbhEHb6krfwXlGzh@tC0DJ54uuo^j+di-h&|8QW#kzUrr(*H68ylXk-(>4ag{ zZHv4+cEz{tOYf>=ebOm>XHxXSuI{Hx{sE`lD_*51{Hrf`RNeQhe(3PuA-LgMaLe7$ z)_W1{_x-!R`FH*eYuz6C>RX^ z>V<&fPZnkd21y1TkddG~!NB3cV9X)ov0=f%W)9;69vKr@Ionu*A5?G{Hgn3DYJ|un wK6d5q<#D`_!KiqUp-ntt3Jb$U#ts%8MWY1*!jGC}2?&SWIk{Q=U;~3S0KQg&YXATM literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/page-prev-disabled.gif b/examples/ext/resources/images/default/grid/page-prev-disabled.gif new file mode 100644 index 0000000000000000000000000000000000000000..37154d62406ddc064dba311b95f554e49ad38003 GIT binary patch literal 879 zcmZ?wbhEHb6krfwXlGzZPfyRu$tfx-s;H=_udjFb@6g=b+}hgO*4EbD-QC;U+t=4O zY0{+0lPAxdIdk5;dGqJbU$}7L;>C-XELpN*#fp_HSMJ!cW9QDDr%#{0ef##^yLTBz z!Dt8!oe)s`$->OQz{;Qlaxy4SFmU)VaC69bY*=uxnSOV literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/page-prev.gif b/examples/ext/resources/images/default/grid/page-prev.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb70cf8f6a3b7f524bbeb3656d875a823b27fd7c GIT binary patch literal 879 zcmZ?wbhEHb6krfwXlGzh@tC0DJ54uuo^j+di-h&|8QW#kzUrr(*H68ylXk-(>4ag{ zZHv4+cEz{tOYf>=ebOm>XHxXSuI{Hx{sE`lD_*51{Hrf`RNeQhe(3PuA-LgMaLe7$ z)_W1{_x-!R`FH*eYuz6C>RX^ z>V<&fPZnkd21y1TkddG~!NB3eV9X)ov0=f%W)AK)kBA8^Y;DZmPc|?ZI=9Q{X*oQZ zkbJD2lgIqQijPiCj2*mD6%7sx9yN0CvxS^laG;@KrlbJNftid9=jS`{vav8&0{~Hw Bh1385 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/pick-button.gif b/examples/ext/resources/images/default/grid/pick-button.gif new file mode 100644 index 0000000000000000000000000000000000000000..6957924a8bf01f24f6930aa0213d794a3f56924d GIT binary patch literal 1036 zcmZ?wbhEHbA}e@6f*BUeEG-{mbu9UVeYtn)@A#A9pQ#+`IB&@5(0= zRzH}y`r(9CPbRH>G-dUZ>1!TLU-xM0+NU$tJ)FJ%!HkVh=4^U8ck{CaTb?f6`F!=h zms^g%-go-h&Rf5C-u=Dz!SB6~|L%M6=kVF*ht9t`fBVhRyMGQn`g7pPpQDfe9DDTl z(5wGPUi>@u`u~ZCzfU~=ed^KQvyc9qee&n@+yCcY{k`z?&xIF%F1`GB>D9kWZ~k3* z`RB^(KUZJ||Ns8~&oBx`LjW}d6o0ZXGcYhR=zxSld4hrCB?B{ujK>Cr zPF^XagaZi+ome=9Dmm#SD}7El7CSA;=KXekY^RG>e-{ zuuVYm(pR@|5zQ!{2@Y3s!WlFkEt+xRKzr=&*z_|U*@qgNWbB##KVWn?)_GXn$>4`} z#Rk5^9iqw$CMLJ{owi8Xkg$-crJaR6?!tz^#b0>Dw8Q57c+l9;Af%gcqV6G6E2r=p gYaW5X0}L(q1$Yc3_9+}>;A5Sv9e-|5r2~UC0H_cnr~m)} literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/refresh.gif b/examples/ext/resources/images/default/grid/refresh.gif new file mode 100644 index 0000000000000000000000000000000000000000..254203b52ee25c86ef4a9424cc7d6866665c1a23 GIT binary patch literal 1015 zcmZ?wbhEHb6krfwXlGzB^-R`JI$@Z4*0Si4UD;!Yvd3=KPrPa$$4+2~o5YYjjlto+ zgJ0v5u(qcW?N5{Xp5;t=o;Uq@>eSC!GryM2eo;05W#Qbf^$TB?FZx!y{Kx9+MceNc zOd(?r_V}mu<^lb+3BWvifKDhF=r5{+_n;&#b+F7jHVTc+2_ayKk@F zd13AT+naCnZ@b;U@6Lw#2mWn4cyaULJG)QZU3BRG@yC7FUavoV?*6Gu_b*+4aO2Ly zv(K(wdwJ#Fo2&Pqyt(n{+ns0MZ$1Bi_vw%OFaO_r{r~yr%g?`Fe(?Oq!xujuz54(7 z_5UZYem;5q^ZC2~FW&xo@$Tn~cmH2~`2Xg^uQwllzxnk4{pUaLzx@CF?a$|Le?Ncw z|K(~F^zyJUG^Z(c1|9}4c`|}rw{{I7k z|Ns7j0K+I4njxV0lZBCiftx`GQ(}D!&&C7gE(+~Y%_;4`oEKAO% zDV*%j-2EYIms=0ihImdkJxD*ann5GrhCOt_fD7*mN_@JU|~Yh zlH}5*DP>F3%9rQXt#bJ9;Pl_AtZj8)e}DJP-90mRO_;lP-R7O^x9r-qeb1Jidw1;K zKX>_o#p_P2-*JBTzJq)AAKI|<;`aSlckaKi>)_Qrhp!zxeDu(fW5aL2&AYd5-M(@A-tF6WZr{0c>(2e#ckkc1d++>}M|bZ(ymSA_y$28PKYDua;miAv zUOssE@WI2!4<9{x_~`M2N6#KTe)9Oq(zkK@q?aP-hU%!6+_U+q`A3uKn{Q2YOFNRSt)Ivb< zCkrzJgCK(r$l;(o!NBpKL779wW5a@j%^bpFa}I1+c({#=)o#uSgQOPDOrxwjGt!z| zdt@$e$lSc_@o^LJpjAf}JZwJMArZPP=b&Sgps8HqqLPD`kM_zs`Roai*qqK|#L3VT zF?sR}KXId?9~w-oM=!LvF0}h7u%L13YL4V{2NpVaOx6sKXt0%-%sxprU4%n}F=ee| zk7OB3V$o4<2?NtNdOnMp+}aIPI1Cb!oedm&q`N#WDjn;2s@TV#Wb?^^L6Du@WzE4m zBH2;`fg2hOC%gI1Qk$u|ta4(CLnAZyojrZEhG#jire0bj>DOw0Oe9%D!a<-Z<>RHq z%WD>VO!l0r8@nULP;YPhBrdTFH4+!k**uiX3i z{QdXWpZ@~^!zdUHf#DSbia%Kx85kHDbU@w$^aLtQ^>)SRb9SKCQ``Jr`=eVAz{OT z183VTy}$iASS#R nB^X?DXxtttx-R#(S?*zGzsXrO9p?HCdj*-f<$NLv92l$th`d^G literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/row-over.gif b/examples/ext/resources/images/default/grid/row-over.gif new file mode 100644 index 0000000000000000000000000000000000000000..b288e38739ad9914b73eb32837303a11a37f354a GIT binary patch literal 823 zcmV-71IYYGNk%w1VF3Ug0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui0096U000OS0Po$iSC8I2dGX-ATgb4XLx%wY06VC` Bj$r@* literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/row-sel.gif b/examples/ext/resources/images/default/grid/row-sel.gif new file mode 100644 index 0000000000000000000000000000000000000000..98209e6e7f1ea8cf1ae6c1d61c49e775a37a246c GIT binary patch literal 823 zcmZ?wbhEHbWMq(KXlG!!`QrEOm%s16{{7(1pGR;1JbC};*@r(bKmL9F`S1V#{~1QX wXb24J5K#Qd0`%X11|5(uL3x6KLxe$C!6IP+Ln9*-6GOy_4GW#y85tR@0bQ{sTL1t6 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/sort_asc.gif b/examples/ext/resources/images/default/grid/sort_asc.gif new file mode 100644 index 0000000000000000000000000000000000000000..e12e0b6f8edf5060cfc1f0929128b686bc5bfd83 GIT binary patch literal 825 zcmZ?wbhEHb`0uc0#Y~1#Fd70QG6WQVvM_@@t^*=Kd4hpMjDeAZMId2; VV>6?WoXd=Whlkn(_}N$(tO1K24D`0uc0#Y~1#Fd70QG6WQVvM_@@t^*=Kd4hpMoPm)=!oz@} Wp_zkK%;&@eg~RP^@=P2Y4AuaU4Gd)f literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/grid/wait.gif b/examples/ext/resources/images/default/grid/wait.gif new file mode 100644 index 0000000000000000000000000000000000000000..471c1a4f93f2cabf0b3a85c3ff8e0a8aadefc548 GIT binary patch literal 1100 zcmZwFZA@EL90u^)S14;kcS~P51JcqXyBK7YjR|$m*3qt)1nqFnf*+(nyIT_zZIrbc zP70+hE$ePOAcE2K4FU;V;KM+=xUiQtnG(k(Qx;;(oQVNl47kM11c$9(j7iV=cuw*= z&;L26aeaM*8AVX!4nUmF3luezO5JukyN8Fbj*JY)E9#Hd|0*@ZIv{eO*Nb# z12yCIrOhLLJlbn33DTB}t(F_b2bV4~y*j=}%v9m90(t13QX1^b_==P$D+H{5*5Mu? z8gKY>BXXf^7@!+sCzFj+>XgJsqfc(1Ya(r=#J=3 zlZtj9{~(p*xA$9X2mMtN6e0bM#^36uHAhJ9Q&;+@HQ_ThCJ=yPPcaaStzMs1DHP_0 zvw_E92pgO+s83$0SnZp{u*pvQ$A3#Rftg(VD(=52XCTzUftd4T-22$PQrgIR*gHx4 z{43C_yk?5j?(i$Mual4dFf?{<9Wn}qfaB%>iNwkdu&q!m&h2IcZ$2Th!C8}<*_&Pr zyKl`OZw8N)3D^4?RK}UoD=o00gbKYHy=yv32mZ9Dl8aIS8x^Z$2?NwcBLzFmZOtoW zzN62&u*QDIz{Fy}^YAXY&Txmg7ATSAhAr8K5fZbFZ*SFa$_qE2L|VVFHOI{wKE8B_ zGXV2p-56OO`rc4Z7g3zbj)2_3YjK$((`OUqD%*mgvS`YELYsVW1or1)YW%;)D$oE>#r zQ3z|D(W$Eg`c?NY^+fD&+nctrc25@u47U__J8-QW7NqK!$T9C@*SpuaHyFRRpIGae rj_Lao#za}+eaj_<`F9!mRdtBiaY8;H`0o(Vu;KK>|7RZkKlk|m`6vG`Jo$g|>HkYl|6hLg|LXJq z*I)d<@$&!8m;Z0Q`hVy3e}+*o8Un*81QdU=FoV3K10q0qf`LPwfssSTW5a@j%?wOD iArS@)&h5PNMll*66^^tBbH?qtQJ{FJU!IwX!5RR^E;%az literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/layout/expand.gif b/examples/ext/resources/images/default/layout/expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..7b6e1c1ef82bc36104018936848c3ebfa6e05e6b GIT binary patch literal 842 zcmZ?wbhEHb`0o(Vu;KK>|7RZkKlk|m`6vG`Jo$g|>HkYl|6hLg|LXJq z*I)d<@$&!8m;Z0Q`hVy3e}+*o8Un*81QdU=FoV3K10q0qf`LPwfssSTW5a@jO^j@6 iCK3sWhnx8sU0hxiEIiaD!s-`t;^Ttj{VdE(4AubXYdZG; literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/layout/gradient-bg.gif b/examples/ext/resources/images/default/layout/gradient-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..8134e4994f2a36da074990b94a5f17aefd378600 GIT binary patch literal 1472 zcmeIx`%jZs7{KwDTLnZd*hMh7R3%&{VK|xh5d@TrMjeTpnq?_&b8`}Bh(kowLJ^R= zwLrP_Mz6F*N-1{`N?)K@6i}uD1>V*|OIv8)A|*;9JN<2c#7;i>=A7rpCpmEmrw$)U zc7mcXc@UIVGnG~gOy34*)9Li-becMyuD$~>)ERVj219+9F_Xbm-(}8ZvefrjGxzFd z?gQ+Z2W-&U2kcoQXO_sF&Em{uap$rD-W-Vsija6n4j*~Q*W?J0hYp%tpk9;bpv@I( z@`Tz)B2B(fn=b+vZGl)@(4Z|8YYQ8+MGfzZp1v;z8bNg>jk*$vu2iBclgyVj>B^es z9|O{PvUGvmyzs<9PmwK9WcqTTMPJ^kuV~R%wCXE?Ha*qBP}OFjwi~K|4nuYOVl`;T zVhzx_SPOK48f&|ZG@#o^cQDa=jErs*qsPQ}W@7f3n4r(hETGq1*K1~j_Lq?Dr%LqcFxvPW zut}by5*6B{LZvEO(+Ju$Vv_!sOuZvAc4ePkK}Mg^X|R8{wv3g3jV&Qm0~*o(w;!4zGtP^}q4TE3f=4jcq2s zNTj41IT7{z(FAgK^iIzZ@_2j+Ir8!+!Q#r@%9(ju7k_5|Ghf7eqx2?7%YoH4jP!wx7HA*Q43) zwFOW=pP6ly3pn=?dHpWVl+z~h4aA7q3Dbmfk>A9h*D=1j0=ZkaJtNDl4|Dy58=OQ4 zb=w|rEX#G|6q4dPk_gFV6VcYbmUmazi7x6i6Xb&As-j$U2PJ(S9-JDYvw05^=DZ2M z-q(%65iC7!Sf=Hfs~2MFb#cc_ASYbPO$Z9ewDx-)GFuhcxKI?v{g{Fd`2H?N2mNoG a(II?Zs7)DAnPM9b=8J95L)rdV=-9sjoxm#q literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/layout/ns-collapse.gif b/examples/ext/resources/images/default/layout/ns-collapse.gif new file mode 100644 index 0000000000000000000000000000000000000000..df2a77e9cc50cdb15e8be856710f506d462a9677 GIT binary patch literal 842 zcmZ?wbhEHb`0o(Vu;KK>|7RZkKlk|m`6vG`Jo$g|>HkYl|6hLg|LXJq z*I)d<@$&!8m;Z0Q`hVy3e}+*o8Un*81QdU=FoV3K10q0qf`LPwfssSTW5WW+W=1|P io&z5e4!5x=GEI;OeCX1}EU(tHE{jAJP4AubO%sO%a literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/layout/ns-expand.gif b/examples/ext/resources/images/default/layout/ns-expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..77ab9dad2948270706c9b982c5fcdce78940b4c4 GIT binary patch literal 843 zcmZ?wbhEHb`0o(Vu;KK>|7RZkKlk|m`6vG`Jo$g|>HkYl|6hLg|LXJq z*I)d<@$&!8m;Z0Q`hVy3e}+*o8Un*81QdU=FoV3K10q0qf`LPWfssSTW5a@jjf_kR jAsz;b4DD>fMm823AG&mK%ZJ76*!b{ZzXCfO3xhQP{>?dp literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/layout/panel-close.gif b/examples/ext/resources/images/default/layout/panel-close.gif new file mode 100644 index 0000000000000000000000000000000000000000..2bdd6239987b95025826fa39f37a036d73ae1c9a GIT binary patch literal 829 zcmZ?wbhEHbWM^P!XlG!MGRSrK@6dAaKf@>(4S|st0*XIbm>C!t8FWBi2jvL{4k-pk f4i1Na28TvQ9=?!{4GD)^*u|AnEG{HEFjxZs3+oT= literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/layout/panel-title-bg.gif b/examples/ext/resources/images/default/layout/panel-title-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1daef54c578cced19b7f0c3074dd7a23d071cb1 GIT binary patch literal 838 zcmZ?wbhEHbWMoKTXlGzB%sOhAecUMblu_OpknmbK5V>R(wmyk!^#qaiSiLO}5+3(z&}UbNe&Fw0C0UOPyhe` literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/layout/panel-title-light-bg.gif b/examples/ext/resources/images/default/layout/panel-title-light-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..8c2c83d82536f2e1e8c1fa15ccdf6683047b1d34 GIT binary patch literal 835 zcmZ?wbhEHbWMoKUXlGzJdGFVm`@haV{B`m1uPaY~Uw`)d){EbFU;TOT=Fj7|f1bYo z^Wx***Ps8s`}&t*6pV(zunPgjpDaK>{b$et`3#gN7&sIdqzxh#C@?lLvvCPXC@3&A WvZm{QhJfNv7G{tF#eZVXMX8A; zsVNHOnI#ztAsML(?w-B@3=BFTX;5xq;Lv4YLV0FMhC)b2s)D9)qBYY9s=7v2nHV6X-NX@DCv literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/layout/tab-close-on.gif b/examples/ext/resources/images/default/layout/tab-close-on.gif new file mode 100644 index 0000000000000000000000000000000000000000..eacea39b623348f656de9a8f0df4ac4b74ceccbd GIT binary patch literal 880 zcmZ?wbhEHb)z|%kKX-x z_TkUV&wm+4!Dt8!#}H8b$pZA&e+C_p=RkRafy0-9okPYWK%u#rLy#**AmKn$J2Q)p zz={Nh21Zf+FqsJojYs=sS(PMy7OF5cvh&sKnGv+0v0q<*pG<%Q!&xR)rDrk@3zqxO MXKm)=;9#%@0E9$42LJ#7 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/layout/tab-close.gif b/examples/ext/resources/images/default/layout/tab-close.gif new file mode 100644 index 0000000000000000000000000000000000000000..45db61e6000bedd9a4eacdd171d99a9af159389b GIT binary patch literal 859 zcmZ?wbhEHb+a1fq{uZ2jn48o?zgxVBqGE@d#MZ z(99ty#S`H0kb#knn;}DEVv=)*u)3Vdj=;yqxu0#kX9cC0)w0klmAo1XIMn(o} E0NP7EbN~PV literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/menu/checked.gif b/examples/ext/resources/images/default/menu/checked.gif new file mode 100644 index 0000000000000000000000000000000000000000..091268bfe3763bb304ecf33436e43ce11e2414f7 GIT binary patch literal 982 zcmZ?wbhEHb6krfwXlG!Mj4TpPjg|>);OysQYm?%f!p=2?gMTs?-xN-sdEA1Nc?70# z3r^z{oh~XpNm5`rpUMhB^)=u~p)>6D7IX;UtAF1pFe;6`t{5A@85p@{PFwuufKo){QLLs|Ns9CqhMHsfZ|UUW(Ed31|5)Z zKzV|JV>3f7hm6OD1qYj1Sv6u#1TZi#@w0GcI9)tBMJr-kL1R&qM=y(=n%TyVz+@2- zXNwvQflZvk${|KY6DK)!wDYp5h}~>l>@KDk7INc^LBawCY5TN{2ZgP!69gngSPWJj zX5p0-kYW%_Ogt#W=r(_cL}1gAUOrJi4Nc~-N7J-*)fy%^Fgi{$O1stel^gq4^*6d_<-Z#AvfW6LF2YF$tQ%Qv#xc2NN`}V1^@w|=z9PF literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/menu/group-checked.gif b/examples/ext/resources/images/default/menu/group-checked.gif new file mode 100644 index 0000000000000000000000000000000000000000..d30b3e5a8f138bfbbfea3d1d6d5631a81268fe26 GIT binary patch literal 891 zcmZ?wbhEHb6krfwXlGzxGAUp-FJv++Vzw-1u&!ctt7CJoDF4C-YI>17M;4q>erj}J#1 znRLYtaeQ=iW)bC#?NNBB=*-HhDWD|4xae>zCoh|V$$>=XHZB1n7Kal~O{`q}VgeQu b3s{-ixj1G-bT~0I2=PqTialkbz+epkbq-F$ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/menu/menu-parent.gif b/examples/ext/resources/images/default/menu/menu-parent.gif new file mode 100644 index 0000000000000000000000000000000000000000..1e375622ff951a3a3f1ccc668061e81b9c93b411 GIT binary patch literal 854 zcmZ?wbhEHbOQz{a2h@&qVP zFmM<%@JmQ|Y*@g^%E=?8;=tJG)Wo9VlknjJLnFJO0!M|%0mo(rQBEC(fQyeBCb4lX KFcA=7um%9T95sFb literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/menu/menu.gif b/examples/ext/resources/images/default/menu/menu.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3d7dfaacf852cf25d3bd37159c96def1e706564 GIT binary patch literal 842 zcmZ?wbhEHb{Kde?(9Xbc_}0&RZ~i`i{`~#>_us#N|Ns9#!zdUHfe{k|ia%L^e*Mp& z1M)E_PcU$(Gca?=cx+g3u#tg=fuXv$NR;ZnHa1A D_d6!Z literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/menu/unchecked.gif b/examples/ext/resources/images/default/menu/unchecked.gif new file mode 100644 index 0000000000000000000000000000000000000000..70ba3c49e20295efab625c5b8d726ef2a9458886 GIT binary patch literal 917 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 G=>G%QOHzFR literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/qtip/bg.gif b/examples/ext/resources/images/default/qtip/bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..43488afdbd4924057e45df94ed68690068fbabac GIT binary patch literal 1091 zcmZ?wbhEHbvJG_ z_wB{IZ!h0}dj&)vzP|>dkKf;X{QmaSk9R=y`N#XuKRjL%gg;OJ?2_%ZN9oX+&1IxF3}_H>l603F*t71i4@GZyiE4sw%lkTl{?!^ z6Bo7I-L2~P;_hzq*8BVGLsu~TDQ|svxII!MZqJR@$6^zdt>?XQDtdZif@HSanM&4& z=Nke$o_R~@-`i0Xygcmmtu?PVY}k3~nAhx8xhrg)|NZ;-|Nno6Q7{?;gDC_Qf3h$$FfcOc zfE)$N6ATu z!(r;m%j_$9KP-wo!oMF4bR^Z#pCLVEt6JIYJY>r`(GBHu8TKMAH hV%craN*NY1aV$`Fvrs8ibZTIkpzPfzqoBZG4FEi-n5_T+ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/qtip/tip-sprite.gif b/examples/ext/resources/images/default/qtip/tip-sprite.gif new file mode 100644 index 0000000000000000000000000000000000000000..36a5e1df22af8fb7932b597f35313020183ba60b GIT binary patch literal 4032 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 DrDMj5 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/s.gif b/examples/ext/resources/images/default/s.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d11fa9ada9e93505b3d736acb204083f45d5fbf GIT binary patch literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/shadow-c.png b/examples/ext/resources/images/default/shadow-c.png new file mode 100644 index 0000000000000000000000000000000000000000..ffc42bd2982e38733528795e2f87278b66bb8341 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blof6lG66d1S#FEVXJcW?V+*F2; zj8X+7GX=+jA_XG@19JrfV=Du5D}dPgB49r-vITomw5WRvR`MB;$k*8o|0J>k`MjPkjv*Ddk`odVHUPP{43?J# RBNhW$44$rjF6*2UngC@NE5rZ* literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/shadow-lr.png b/examples/ext/resources/images/default/shadow-lr.png new file mode 100644 index 0000000000000000000000000000000000000000..bb88b6f2be887650f28b16726e470c09459b9c86 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CG!3HG1zpHNqQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiZnf4978H@C8Z=JJZMPDQ+U>TNx_ce55uGN4u2%Q{wE|U g2=cJ=GBC0+@aVFNEX<$33#f^~)78&qol`;+0F-4Xf&c&j literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/shadow.png b/examples/ext/resources/images/default/shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..75c0eba3e101e3f32cef8bde7bae7383d849e935 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Q+l0V0jwbN>KRk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XZhE>nhE&`-GTD~D$v~hjI>0gT@Uw(Rj}ARr(#+ZY|Nr|R ztz576{))TQsGN9FjsN;R=N;cX_7>}LNxZmoT3OARN%FUXp-|AVh0k3k3m;=qQcOOgc@EIAyfV(r;i((zEeg z`}y44S?ng!NoE&wcK=*_2F$s1%jHel(|yj_4>tF9g$FFYCZ&0@DQ;=K_|9xe0dH@S zX*Z%4Z8@@VyGFIRewDnzd#yOua)FIqa}4Vg?=kT(Xhpeh(=cjy2J|F@r>mdKI;Vst E09T24*8l(j literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/shared/calendar.gif b/examples/ext/resources/images/default/shared/calendar.gif new file mode 100644 index 0000000000000000000000000000000000000000..133cf232b243baf857367233e750477675f3190f GIT binary patch literal 979 zcmZ?wbhEHb6krfw_|Cv!=$UBjnPB3PXyTD<>X~HXm1O3TVD6D*;+bL!L|&=p9%&Yy z$rhfe21!Q^Q_foy-7_zKYFYTes_3C(>0^ho$8NPxd}^OC{AUPgcoyFJG`!<^QvZ{z zDbMnzKTnzZDQo7}(m5|{=DsSP^R0H#i}HnEYgc@4VPKfFcR$P>d-aR%Rj;~Nz3y50x_9NPmes$yHvFEn<75zjyE6rRxuF+*-OfrGSB)`bNRn_N2hWXw`F z1SB%CNxF5h++3*4-Y2c*)x+@dA!D0_Ny3>5#Y4>Oyy6-T9SR2-+2lNnp5aC62aVf7*|&4xzT^Yd-|U2>IL4xC*cvD9p$mdk;F#a0uwaxaLi_TL;LoDk6{ z_LiSPBA|iw_G1P%(cIo|3A36`3aNVZ2}m*>X-_;{7Al|+pwP(3%EG4-A<%HJk&(@q JpNE6N8UT=&&-wrW literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/shared/glass-bg.gif b/examples/ext/resources/images/default/shared/glass-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..26fbbae3bc6d2510832a5ed709f0cb029c2c1170 GIT binary patch literal 873 zcmZ?wbhEHbWMpt*XlGzJe&g*4AiDYX)q+w@6G_xop)#NygPUI-MM=} z^!_{$-T!dm{)dbAKU@Mb9(=g)@WaK2A1*!oaQVT<%a1-@ehfsPt~~sB_0h*Gk3U^| z^yxZ~`{dJA5c+)e>E~-e^z6&^=U;C;`E>K?=UY!d-+uP_&hsxfUVOdx;_KT_KNv>A zXb8|f1QdU=0PXzGpaZfQlqVQC+!&%a1WaT)$|)>om2)9Mk%@&tK#^^Rgu{V`ZWgW# wlLCgu<17lIIuQpJG%~aEtN6@tSlD!$TihV!!H0*;9Rf;j6Erp|DKJSKV^zd-BO3vC604f{{R1d4Yk$n}L-sZYVSj)zmI o(Q}fL|Dq=uMNdw3X~iE>$=vYlK$lteqcf2P3=A_Zn3))?0bn93t^fc4 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/shared/right-btn.gif b/examples/ext/resources/images/default/shared/right-btn.gif new file mode 100644 index 0000000000000000000000000000000000000000..dee63e2113fcca680699455e8a56ee3eecc81c40 GIT binary patch literal 871 zcmZ?wbhEHbSKV^zd-BO3vC604f{{R1d4Yk$hk=zr!efJiBO@aVPsE804;fk*WxQe}6c#pgOBlzkIk8cxsZYUC>4${T q6OT!%mh)U@eo8sjryPH%CUe8H16^j>kIqCIFfh!NVPs)pum%9ETq}wI literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/shared/warning.gif b/examples/ext/resources/images/default/shared/warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..806d4bc09385a98ef1ac19d25e30a21310964e7e GIT binary patch literal 960 zcmZ?wbhEHb6krfwXlDR{f&hVn2muENhm@owhyM-@5dsqm1SVuCOej#8P@%A(LSO-q zY!KMcp>SY^z=a6{7Zxa7SYhyB1;c|43=ehyk-&!?1`l=wJUAfm;Do@30|Fm_AFI_r#;p+LTS5IEMaRKbDQDQU%2#0{;PZnkd237_gkWx^dVBna` zz|A4!v0=eMCPx*A6NM8NOc1gSve|KQ1H(iiYYu@O7ZQ#gR8*}I_~Dqq(8*@R^@`(W z@)HIIWfz?e!wVeVa#HbKFBUvx;Axbo`SPIg5jz8ey-mRe1I2~|N`gTPEE1a-8hE@l zIU)=NI+%skoc{dSsL0&PpvCnl!Qs*I)AH$&GFuihv|L@Lt98xe!$KzpaZ%Pw4hauj N9~|!BW@BNn1^{&szCZu~ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/sizer/e-handle-dark.gif b/examples/ext/resources/images/default/sizer/e-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5486c1a95bcc0f39a88c15c10c04ef7c3c561dd GIT binary patch literal 1062 zcmZ?wbhEHb#gW zSa7hJLs%>3#D;~3+Xa-p=6GyebhKN-IP1=djf;=>D>!$_cy3y9a}Xwye0g*kiI*?5Qm)FE0;R>^0YG>#D1(BQ|H< zJ+*c9_4NsdyJWq$t+}~5+bHZ`26bb>Fw+9?{8q{mh;)M z;o;#9VePmxJJK5%IOMqVHRPj^sIT3W`5a^n+Y$P=Sr`RJG*P^>+2hm zPtWt+z3uJo9mTKjo!!0t{rv;Y-12^Vc6@w%VzPGpxjj2SKfkcpd%oY^U0+|{*qnX; T+}_>a-#<9q&HP*pKCAv-hK1$|Ns9CqhK@yMn(uI{$v4q z^gn|R$h)9C!NBpKfm=XAL80MbGZUwri^YZqhZs0z^?H5?BpvP&kx!db5t!`W$7S2b zqB-%Q$7EIBJeSUo%H9(-b?1e=ob=3RreXN4Gm*mSr)OK$9{O`qIOF^RkA5xFQ(IO9 zFA8Y)Qk9(g>dN%6%}IB6ZPp537_~c2R9fuK^(DT0C)w`)@-kv`_TxiyyRYTm+?Dlm z+u82#x%YQh|7ByF6IPITsO+X(*qn%W@yBY|oz3n@jiJwDpWpD!D2@#*RM zbouaqd#t{`KC@K){5zTIFYoRwZ~uS)Uu;d~r?Y35yRVo1RrUSt+WvO_e>SyWKknT> zJ%9fHy1zfqK96ts%NTLLo=K|Xej|%gL_(8*oyNju5wi@%W(mC&iq(=uJ08}`wQ)S^ zU@r4m)TA`+$HFenMHNXcqO(ps>K2aMv8dblS;yl(gIhO}`i(wCBu{X-7xARuS!$-r zBtxy6DwFLl{a7+3@KuG%R2RL@rISOsESFA=YWlf!dTg9#+RVgBGoQ{#TXpj3tc*=F z(`J{P%UnLE;@C>{IW_xUs!yq9`t^KTlbF|wh3RZvD`vN;S*=*yYqTq4ZlxC2%O&OS zey&(Dz3kM>?LPQFywyoHAYVDT0ajVyEf83S5 zYUk}~v)}G~z3g<}j<=J3>+SdwC9S{f)2`L|`~Ez7{eCaQVeNvw_itHmILNZPy5Jy> z_M8uUINa|T91(v1`~4w4?>U7>|FZqra8xea=i@Pz{v4wd67%mAp3VHu<2 zhTV5Ioz;IFV|>wdeI5}aFh%{jYv+pP@iy=AuwcHjMWHRrml`Q7q*+i$mvZu8$Qzn3`O RcKf}i-@V(HGcqz*0{{svxFG-l literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/sizer/ne-handle-dark.gif b/examples/ext/resources/images/default/sizer/ne-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..04e5ecf7d3837aec9510f5467282c10f158a5563 GIT binary patch literal 839 zcmZ?wbhEHb+Yh5$94ZWq95Nmo l794Em;N}uwNKib;z{ui|Vj-Z!(9Iz$HK#)0@qq>gYXJ2^5-b1! literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/sizer/ne-handle.gif b/examples/ext/resources/images/default/sizer/ne-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..09405c7ac7b321b3eb9170b1584167448819a071 GIT binary patch literal 854 zcmZ?wbhEHbc63}qqP#3eHjE2L+1SS?XB|ZfS0S0RTeD^Ni literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/sizer/nw-handle-dark.gif b/examples/ext/resources/images/default/sizer/nw-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e49d6967c08db2c02a3aeb9c1f3cacb9c8665f6 GIT binary patch literal 839 zcmZ?wbhEHb+Yh5$94ZWq95Nmo l794Em5abeINJw;KWMp#S2{2G%=w_Cco6{kn+|a;a4FKuB5a0j+ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/sizer/nw-handle.gif b/examples/ext/resources/images/default/sizer/nw-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..2fcea8a9285dc74626ba9374055b25ab77e53a08 GIT binary patch literal 853 zcmZ?wbhEHb#gW zSa7hJLs%>3#D;~3+Xa-p=6GyebhKN-IP1=djf;=>D>!$_cy3y9a}Xwye0g*kiI*?5UEB1_q}2ZmnDnS(jHwY|grS zYU}Fj>k|%l$$D>Fb8~aX+fl6@9wVn{Oa!M?d$LFZ(!z@^VzW> zaVFC%HL)EM4v!B{Q1+hZvvbqa(=&{-@15DX`T6+;&fRjpySBW%ydrpY+}T}QUtiyl ze0rYm?rm>x?*pKCAv-hK1$|Ns9CqhK@yMn(uI{$v4q z^gn|R$h)9C!NBpKfty3dW5a@j%^bp7F()=GJlrmz>@~+@*_y+_d!cbc5tmb38XMJ3HH=_|=`0o0p%T&eFss>$PRY#l;?zwPH_g zS$TPRz+$htURzgPT^+GG>+Y$otFNz5INT-cy=~3S%^8FMbi#@YAI?A-kP`~v50 zIp1AdUS3`iygKgeuC1@HZ%95pZ|#k>jf~q0nRm>cz3u(|1I^s>etUL&e0*ZEcKo?L zJ3n7!TI4<7Z||eAWv;!(H3F^$JPCf70^_gXw#@wm_C+l$Bj4s4oFCb)=Y zKAGsDw(`j&AG4QFCI`4_KAjR0micsQMB2)y(_+eAKAoP>rul3}%CyX9Gc%U0d^Rg* z+skLO3yx_%pHp%z^ZDG0XDgr2tNHfw`TPbptrrVg#Ijy2>`+_vVo{ITs~3wWxM{sy zG9@hQ<LuU0IXmi21oie;-_ty;6~)vMJTjxl$oIxtuR03tF% AKmY&$ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/sizer/se-handle-dark.gif b/examples/ext/resources/images/default/sizer/se-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..c4c1087868afab5b5bfd329f52d9907eb1c0061a GIT binary patch literal 838 zcmZ?wbhEHb+YZ5$9Lfxg96SOJ k3mltSSY>Q9925^Vv52er?AV~l(9La}b>~E3vIB!P0N;ZWjQ{`u literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/sizer/se-handle.gif b/examples/ext/resources/images/default/sizer/se-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..972055e7b297a702ab9aa2d799d133b94ac92315 GIT binary patch literal 853 zcmZ?wbhEHb{~M&wt%~@%zrJ-wdN* zGz5lq2q^w!0s8MhgAT}-pgh6AVaveCA>$E{(A3N!$mMciL!xsdyOP%wjSCG&yTw_> nZk(97*nvsGxlP1k!4l8OOsp$nb_OLhOgBgro5QJ~z+epkjJq?f literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/sizer/sw-handle-dark.gif b/examples/ext/resources/images/default/sizer/sw-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..77224b0c06f1666685286c5322fb02b4cd2204bc GIT binary patch literal 839 zcmZ?wbhEHb+Yh5$94ZWq93m15 l2M#ndammSOI2<_C%q421Gvk7Sb33nm)}0d@l^YrutN|0L6o3E# literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/sizer/sw-handle.gif b/examples/ext/resources/images/default/sizer/sw-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ca0ed96df2059fe283c1d65fa1032a777e1ff97 GIT binary patch literal 855 zcmZ?wbhEHbP>N`pGZ~Mnho8hJfNv7NFbz zGw6VP0Ll{#93Bjs0SpQg9vo=m;MX!aVUT#Zl~37e&W{a?4s$ZA^7I%896G?xEX$K) nFyY_038 zR_0Od>Pm~1;?&Y2hbStdLsYx~PdtzptDPWnz91loHr>M3kFlh`Pw+fX^2^L3q-T7E zgMA3p0Khj)EmOM5lk50HI??cI*XU}Ga#cF6mrd&BQ+kCO9GwQoX2HpMP^|@LmcY4X zgH~r))*DvAHE?Zh;^}kX)m|0&-xhfHdH8?qAprN%;N>R(WC(!e#SkTJV^zr4F@+jQ z`$P@u{cH}g=h0Ms%;|_ZO%GRnC;qcrv02L|)m`)#!oulZ%M3H+@(d@dFCqIuYPoY` zx;$~=4}4X`+iYLr5|_w)?<1j9u+nk5`O}u{eoUsIps(~98-)eCNrH+aIWpW*Pw|Sd zzm6teAHb}Sx8#7_4LRMPtq=`#Ut;_miU__%mzddZe(tFIkx8riGC$9Bcg!fNT zXzXi!Hg3x&_3#rFQU~Wru87rK(GN9sUru`?y!Wxi07n}u!=uT@8^{E{@#f)FyRiyIK${p*1;lpzu_C^yI+kWP)x=k$w`xza z$Xj)29)If=PG5m zd4wd(z5Id_%l(VR0t>5<=CCx8en~_!p@YYvIUOBs)fgxLF{{)m z;PZq|p)lf}QY2A@Fi@vdUkZr_twN|v5p+V`N;uXfnLLU`g=rE*uHLy+$kn$UL_2bq4B8p;s<0kKKu`H@IPA?f&&c0F$TJEc za9(BjajJI=nb_$aKb+?BP8^NQS58Ji8PmuI6MDb$1%wibKJ0 z1FqfK57apS+!>JSpHH`S`WMdbyZl-_;)oP~D5@;5L`)P1md~ZR11ou%$$Pr|3uSw& z7q5ta)Q7!h+yhB9$w5O=Q(170+#wD=r4G1*>sQsu`y1aQ7THw#_52&pfWSNM{mn{5 f%7Kw_{M!RlZDQBKRzup(fw?g=C1V=~13vy2u}b^O literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tabs/tab-btm-left-bg.gif b/examples/ext/resources/images/default/tabs/tab-btm-left-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..e36ad2015f109538a86e123af2a3379b1e7dd9d6 GIT binary patch literal 877 zcmZ?wbhEHbWM(j8XlGz>`0tQ9`TXQ9_YdFtdF;;5llOj|eemnTqhFVw{J!?=_pKMd z@4ou;;LV@M@Bcje`1jT4zi+?({qX(Y=b!(+|Ni&u@BhF5L4aWtjE2C_3<1TTEX*L6 z>wpMQo?zhcV$crZP?+%GKobYQmdOc&#KWz8%1(2BY*^&X#jMUV#lYZ@0|&D_Pl>^X ngAQ!W;yfV+1_vEjnE8233^p8aU}9$H*&^WJaGsHok--`OmAY2X literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tabs/tab-btm-right-bg.gif b/examples/ext/resources/images/default/tabs/tab-btm-right-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..b538273da697f403c690c49802502f995dbe69f5 GIT binary patch literal 1606 zcmeH`YfoAS0EPjXC0;s{Icqu_-P$Mu+I4Yivo0gsf~ZY3nbCeQt6QD*f}NQgqo&zh zWun!tuC!RKPAnF=NJT+#UTJL+>%Da7L@Rd=91!p*sEBOczgW`e!}Iygle}r^gw)et z;ou*@XfPPwkN<`~PZzIGtnA8Hcc)(N&1&`*bbCsJS7q|90Nyq0zQ(q%ckG*7J}cz2 zZ~L5{18Dca<2~5(`F;LZz+UsZ!2h$rySvDMSIcq#>EBPlP<~iIP9#ytd{l#a3zM%9 zc23a3j%TzH`|dw&h&&ZEqv&Hz-i-O|dQ|#zt^5}H3ts+IzwsG8@#3?#bWv=^-Q-H^ z>QrUi+#mRwpkuABxJ4F`{@#Z?F<04rs^!!6i~&pMh__g=R`{i+x2( z-atKBpq66PkJ~esSgS)6C}V^#?Y%&~>JM_iLlJ6+eti>5zDMcP_uq)lG#$OtZ{*!M zSw?QXA~LhuKWPX&S|zr$J;>rSTB-)X=H81bZxcHucJ*K-_;Pkw>R6Z61V^768Fc9t zbZk~)#Wl#hz{>16H#)QpE{n?6=SGJ;4$VY^Kl5<8X5Uyi?O-jr}*rELPm+HrI^h%wUQ(j)4d9Lyt(arRf)NsVyf@P zhiqBQ9o2ytfJu!g1v=|udBFX~WGldGB4A3o5D5jA2X~8j7IquiYUyUyVyv7lMyZv{ zVe_m!UQm~eFO>T+V2@Z;3JL~IJn-R&+Y0u|0z_#mZK4GN)-HaL zTV@|vF5=rItK?|`9!14&3>p|^8-D_9{>G3^0&WaDup# za84QW2+8>f71!f@9Fk&lP8<#{lsyU0Be|YNUg~klqkgoxCSz#0O~r|3(&iMp1D6fQ zNo||c?@!{OnWQBWG@EMff#%M5Y|uRZP^cJ>3@_hWB*qE0o}W#zZz;3W61HFDk2HkZ5qF76h%S4dL3TU{}k;931HIIQ{&idi5fT~!}Xs$PR5 l6L&P!BbRryb#V`Obd4z+JNl-y#9hPfyvwJJa5(Ive*j2i2hRWi literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tabs/tab-sprite.gif b/examples/ext/resources/images/default/tabs/tab-sprite.gif new file mode 100644 index 0000000000000000000000000000000000000000..ac89148b64f047b6c3186e7629fe3888c49f11bc GIT binary patch literal 3088 zcmeH|=T{Sk0>#5nA_Apq!BRx377$Y4i3;KM8yC{R)GVbv%UkR=rr zMXM2zOu`Dogb{|>0R%EYMr4GLgpi#O2xQ2}`X zK#(cuQrSQmVXB5Wf+CGzJ2?0*P6L@k=;5~Xaf$D_?NnYDo!8Ce^|5)>0UqN6k2S;} z7~v0b`5fLTZ*;VGY?(5?OrJEc1%|K|l{9VW%wHf|@ZLY*bUy1fv846N!ECLY>VjKrv;*zS{?wbl*(;XS)-XdY-5L4{`mS+~`OGhQ z6894(cK~s;&;>>$EDWQE8vjWhaAo&pkd9ae3}ZR6Kg_>Di2hx$?N&-NI)VAm8*nPpm-;E3ULG2w$X8cF(`O z&b>VU=S?Ac{?%`?-5el%y{8C~gY4Jr}AUM?lbLcKw1`sCk(o zUO*ypJ;kW%r%7TossmoHM1r zQe5&tO4_cKjo0WNNSu=4UME#DeZ$AEvG($=sJi^7aH{@8WslPbf~;<<27Yk7dYy4> zd#!rtD|fbf_@uw|`pB8cZSs+bgxVXSQK^d>-p(7gTK>gCn07S!MX`456qc?12qD?( z#=mF6bQ6Iei*=L#k(k)JDbE#KyZ#rr88_x~0FxVS@lzfyw4h^>D5q+}x2yULPpGXJ3S{bO(1^N6YVTWg*u4 z)4J`lESNwZ*Z&!!4_jtBIObtJ9Ffhhmox9E*c0=U;{Or9Ii{zhX@?sYN9^MY(D z?M->$z8y}Ad@!_fQ#q~AEl}~`WYLZ-wdHWnXhlI3tJ0yB_TD>7Q5a`awUr8{?5R)` zB|@v5h7%93Yf}`b6;(OUgQf32)C(rwb~7qd@Cr;hgR=!q|<@} zm4B2LRqt{Sp+lmTkDjrr-TdivSoA|Pgw0!z;~|XG70Smb=v&W7IwOLpd{STZ7L*Xe zj2;@wvZcNC&ZIMA4a#z|O^t6}2KP4Mv!|TSiVtjh&P|8!MTW4GqE!`qR?Yra zIy)sx^+I5S44{VeU#n2P6cQ#axb*%EqUuk15%SP{$UxSZ>Xn{_JffqU2JRSCuK`A+ z#x-d0zLOdOgrRlJ`_Z&E4Q*ef@>Y`m1L=_Ty4?d^y`=9Mj-$ zvazu`2Cq}e$s%pU#aV^&dz`fO`LHWea|E9fsBI`M#{KdQlTVMJ3 zcj!;nF;Oj>I_q;k`wFlT==!&m8uE`rr#HRO_j!ah6hyM79Z353z9kJs3D6m*kIyLE z!@7$zSu-vxdTNkeV`*Odg`A(@G;mnsqjJ`)o6nc$9n%^gBcXGiF$d_tUhziKbSP6Tp5Ei%X2neg% z3pxLV59Wsv5T9$!emrRSkRH4h=n7kalzn;r>v}?s|G7&!58%THyM0ej`I?`4VHmmN zW`>Dmi?{B?S=N>`<4zU%Ze|&{ZNdBvX>3W4Idlbd`{93u zr?=0nt_9E(-zxtYCe6An=J_+i`%^y4el}-sN?R9a_bbH?F0@SmnWe=lthd1DHzeT9 z;3W!cXSirx0?53yQ(?UezF?MsGe^i2)*!gp7!R_jcTrmJg-e#>aTeq-rS&1WR1*)f z9K55nJ_cV@#N#Xlc%?NIE?bNTt&{i57|O#FcTBh5S@`JFHh0P=jvSh9s@1=bBq>TB z?w{Q`C8dWS8GYLITZ3QSa$I_+s$=btDE%Dq!_gRZP5C}?_>`E_bcch#YeZl4xpiu| wQ%mtaEW3AmWg?lV>x^uXW#3H}Y&LzMeAn5OSGUUb>sqeAdqjO=n?2y*UxNsNUjP6A literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/toolbar/btn-arrow-light.gif b/examples/ext/resources/images/default/toolbar/btn-arrow-light.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0e24b55e7ee53b419bdd5d769bb036b19fe9592 GIT binary patch literal 916 zcmZ?wbhEHbQ@i%X_#s+qO5ao&#Bg}b_z?(JW>fAX3`Gd3KV zv*q~0?WdOQKC^1y`Sph`ZaH>k$H{AZ&)(dB?ha5d!zdUHfuS4%ia%Kx85kHDbU>Z} zernn7GpqKUUw`Q0mSb0ToV>R8?9Kh>?)?A%A85cR7!84;8v=?yS(q6Z7#Vax zUI66@296R2W)2yT4GRu7a|mm>STHs?w+nNawPX}9G%#|o>fAZ8aq;nf1?Mgq&rM5C zPSyxs6?1aa(*sN*0#Y579~gX_Ir7AO7EE5yG(%Y4FT%k%!-dUUH;Lzh!*aJqzAC;N dg;0f-Rg6jrr6;$pzP>);aF?w2wgd+TYXG#xTAcs@ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/toolbar/btn-over-bg.gif b/examples/ext/resources/images/default/toolbar/btn-over-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..ee2dd9860c799be6dc194b387c36a953c55aac59 GIT binary patch literal 837 zcmZ?wbhEHbWMoKTXlGzJeCy}&J3mj~|8@T1uggzJpf;!hT!Z~imrfcyl?6AT{b$et`3#gN7&v4Zqzw`_ELgzA$|)pg(Xe14 SBQvX#kb;4O15gDcgEauAx-gUg literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/toolbar/tb-bg.gif b/examples/ext/resources/images/default/toolbar/tb-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..4969e4efeb37821bba1319dce59cd339cec06f86 GIT binary patch literal 862 zcmZ?wbhEHbWML3xXlG!!aPPx~`#|*Z;=Kx_O l3y+3|gN`0p@r*V7q$pUm3-bnby?^AEjPaQM}t!!H*ddA;Q5t7XSu zFFE#R+3~k4PP|=t;?1g)?^d6ByXN%!b!Xl!KK^0dnGYMz0@24!=Ra;b_i6KmPg{ZL z;^*y`fauH4D?s#h_tkHEu72Hn?c2WV-}hhte(=VRgExO1zV(w~6pV(zAP51)pDfHE zXXtab`h5^C3PidkvO_ z0WD5K!ag%JGz=IV8PqwH40b4}HP7Hpvg?pkRBN3fmXy>nQ}J2b4B4c*4o;OpCENT1#2mWU{FjxZs D%xTSp literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/drop-add.gif b/examples/ext/resources/images/default/tree/drop-add.gif new file mode 100644 index 0000000000000000000000000000000000000000..b22cd1448efa13c47ad6d3b75bdea8b4031c31e9 GIT binary patch literal 1001 zcmZ?wbhEHb6krfwXlG!sZ8LT1HFNH_aOtsj?X~gjxA*9E^z3&Ep6U}i%{O4CWB5GR zxH(~o^CD6fgr+PAPg@j`zBoE{b!f)w;OtcqS!<$mRz>A)jmQU~$dc{RCEH^Pc0?BK zj4s|4Q@Ag_Y)yK_x{UHY2^CvX>NjQ8>`JNKlUBPgy>f3}?ar*)o!Rv}a|;e8R~}5M zI+k5?IJ@p(X5I1prmcC+Tl3ns7k2C@@7Z0}wX?EwUq$b}>dE`-8_$%sovdm*S<`y9 zvg=S~|DoE>6ZKu^Yp3pS>N(xmcc!K9QuCyv4O0&^O+Vf`{Y>lRvmG-|x6L@yKI2T+ z?1R&1ADl7ea@VxWol~!LO}o-P{c88ji`{c?Oj>eo%Chs*mR*>(;O5i?H>WMVJ$u!a zxvQ_tS$1N<@{-~Tgx`xUa|S^%B{CoY`?W?%iUF5@2}Z*cg>Eg z>v!B;zx&SmUDr15xw>=vgZ29!ZQJ`~+mSmvj^5pQ^4^hC_l_QYap3f`!)G2GJNw}H zxtAxeygq;Z-KCo^FW&ihj$;hsoH8C8796zp$T+b>@c4oQ4ptl9{CxcUY?nYS7uzPr^nkf~ zF-KnfWK`sLl+9v^jSOlzC8As$;v$iu&bdH0ut_86$zxX@GwwqiGMCbLCdz4)g$X=7 zcxoaWQ~HIKhmx0vy2>O}Xevx#ky5l?_wGr-qtgtHrgJ}!+;FF#5#6#i2*%nh> zyAFx!#AZoGf3_x%!Zyuz9to2P8w(l~c~334oIij5|Ns9CqhK@yhFS=VTXXjp>_!!i-ZjhjBP9&d=d&P1P-@w z2*?REbZj`-z{teJvFE@96*ex`7^N1;;s=LXIk{il(fr(WZkkH%E}e=3)qp;}RJS=1 ZACr#t%8J+VSOzWgoT4>ViN zU%dGJ;lrOVU;h61@&EsShEXsY0)sdN6o0Y+UH6|s2joUjo?zgZ#9+@MbEA=|m5*7N zuP1?_;V=Wcmd2kAjEoFSyb3l63JeWQEzG)l4<-aOJF{^!n#_11;LyO$#4EyJxnXG= zBd1*n!vlvz??xWBngt9APKV|*$upc#SeW74&N(&d!GU0fOO1}n=k{oQNISc~334!T+I5ReJa7x*DTyS#YWmWQ8@*yChwS&o6 zrsT(mM-FYgx*h@@4;QobG08Hm@c7Wg%*HKZQ}Uv~iG_ooBg3QNK|^B;FB^}5K!V!o j#pc~334eSRT}sa)VS__s8w&@Y zgu;q|!z~;Fasmw<8xA%wGBG*Ccx+O2Y*vXZDtTe_=t!5iao(F9ACgZ@)bm{w(wUgh k*e9SZBf7&RvvH|ppWc*{Usi^4=^EOswG7BU)WBd303hyMjsO4v literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/drop-yes.gif b/examples/ext/resources/images/default/tree/drop-yes.gif new file mode 100644 index 0000000000000000000000000000000000000000..8aacb307e89d690f46853e01f5c4726bd5d94e31 GIT binary patch literal 1016 zcmZ?wbhEHb6krfwXlGzhFH%vfSJo_7)vQuAsWC9EH&km;*6LR^?KiYxFJMjooS=wa?sdwqwu&r?{0KDI0upwuR+x56{~g zkq<(VSvvztwnvw2k15z6Ua%vwaA$PU&gkM@F@^i$%l9PIZcnS(l~TJWt#)5}{f^9- z1J*HzZPSi=W*zp-IqIEx!mH#^WYOu+{6mTPhZFOT08vuj(d7JNDFp|U3y&lh98WDi zo>p==rRYRP$%%~86B%VEGs{k8RUS;KJD6E_Jiqc}cGa2O`cnnX`*Pb46}28MZ8%lj zaHgpFTzUJ+%FZKY-6tw0oU5O>vwy;#zG=ssCm!gZcDil)nbs*M`lp@kn035;#_6_M zr`l(nX`gwvYwo%3nHRffUg(*1rFZuAiSsW_n15;F+#8b?UYok``qahOr>(v;d-dhn ztL{u+dw=%2>kHRkU$E}Z()D+iZN9m5#o~d_ub#R;qm;f57%vfxPJS?4f`H%+y8jS!N=PUJlT2r&He)i4xD~_ z;M%)OH{V=&_T};0@2@}p{P5-1r$2vx|NZy(|Ns9CqkyasQ2fcl%)rpgpaaqk$`cG6 zR~e)^Wjr=4aC9<_3F%-wzQDoVIAhB~=k&AfoLyW-Re?t*%+d(FBC_aGf`Fq$D3_+D zkjse)Dz(dOBqZEh6jdE-UYxkdEGT3zv4dmE!Dl=ZWi9e%{1g;@!G-s^!P$| z8==@$AR3<{5^GPA?~^>Pma%d|c$9FpHZ#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$lae%R5x_+pfh=9;jCRWxkA&~=x h2Yp#A(~SZe4mdO}wqloSIC&-M@bZAgN<174)&TX)MQs28 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/elbow-end-minus.gif b/examples/ext/resources/images/default/tree/elbow-end-minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..9a8d727d70ff5161ec18c0cd0156ae8d50a23b75 GIT binary patch literal 905 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$``4~=2xoOmJxRJ?YUCe?7 p4c<*mc6tvw4?K5dl1^^H;N?iZ| literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/elbow-end-plus-nl.gif b/examples/ext/resources/images/default/tree/elbow-end-plus-nl.gif new file mode 100644 index 0000000000000000000000000000000000000000..9f7f69880f48db8d86785639055fcc198764617b GIT binary patch literal 900 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$y4*XmR1y>vzmpih{E$}o|KC(Juvl9;ogEauy5=OfK literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/elbow-end.gif b/examples/ext/resources/images/default/tree/elbow-end.gif new file mode 100644 index 0000000000000000000000000000000000000000..f24ddee799ccebea4dfe60fd65a5703a6a59d44f GIT binary patch literal 844 zcmZ?wbhEHb6krfy_|CxK^xx^&v19*7!DtAK$PiHc$->A01UeuBlqVQCG#MBA01UeuBlqVQCv>6yVWIQ%3 sIM~R@rxjCSpm?~QTh?igM}U%RmzciOnH3WikN0ueH<|n}RA8_M07ViGB>(^b literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/elbow-minus-nl.gif b/examples/ext/resources/images/default/tree/elbow-minus-nl.gif new file mode 100644 index 0000000000000000000000000000000000000000..928779e92361aaebfe9446b236d95cb64256e443 GIT binary patch literal 898 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$lae%R5x_+pfh=9;jCRWxkA&~=x h2Yp#A(~SZe4mdO}wqloSIC&-M@bZAgN<174)&TX)MQs28 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/elbow-minus.gif b/examples/ext/resources/images/default/tree/elbow-minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..97dcc7110f13c3cfb72a66a9891e8ab3ccef4a98 GIT binary patch literal 908 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$``4~=2xoOmJxRJ?YUCe?7 s4c<*mc6tvw4?K5duiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$y4*XmR1y>vzmpih{E$}o|KC;?;W0q*gYXG$^NPhqT literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/elbow.gif b/examples/ext/resources/images/default/tree/elbow.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8f42083895bb98276f01a5d0e33debddb3ccf1b GIT binary patch literal 850 zcmZ?wbhEHb6krfy_|CxK^xx^&v19*7!DtAK$PiHc$->A01UeuBlqVQC^cfgAWIQ%3 wIM~R@rxjCSpm?~QTh?igM}U%R7pF1PhKh>{$NPBfn?f{-mK<+pWMr@g0DWQ)HUIzs literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/folder-open.gif b/examples/ext/resources/images/default/tree/folder-open.gif new file mode 100644 index 0000000000000000000000000000000000000000..56ba737bcc7734693d7ddb2f50c8f3235fceacee GIT binary patch literal 956 zcmZ?wbhEHb6krfwXlGzB^h$R6?=&-=aaIP?oGg}kIcy8^I2ILfEiU9P24$!>3v-_@?Pw@dZdEXiZDqz?6KotSEHa+=}k8OCR3nw(sqcz%)E z^&Jkk_UAm>?EL6pz~8F{|8JLmcvAKMN&S?id*>|OyM6oiIctwC-Fj{1-dlT*9ou>8 z$^Yvu|6jNKf8Y82L+Ae=lmGvp`Tzf%|NoaBIdbIa(W7V2p1pYS;<0P5Z#?|?{QdXW zpa1{*{pbJx{|uvGGz2IP0mYvz%nS^S3_2i_KzV|JV1OfBquQXEGvI4}0>6q3BdQLvD`XSzZ1sfd8&rn9pxa_cf0 z8;-R|sQDgyVbIvhINu@p(3Fo!OdU)nOn*uow`yILl(G@%_!WGtV|{}AnFkvZ9YR(b rI<1IZ9mc}SXv*Rj;4nR}iJ6T{KqBGLF$ZZACT_Vm-ya@qV6X-NkKMK> literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/folder.gif b/examples/ext/resources/images/default/tree/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..20412f7c1ba83b82dc3421b211db2f2e93f08bf2 GIT binary patch literal 952 zcmZ?wbhEHb6krfwXlGzB^h$R6?=&-=aaIP?oGg}kIcy8^I2IRjFD>R>Udq3sOkj1T z@R}--bv0re>LfNdN^fnF-QFU)=hNov3pP6ZL zdwbCB?S=oZs*|No!)|Nor- z|92fYaNzXm(`U|{xqSKZwQJXoU3-1w;m7CizrX(c9|#ym!DtB3CIl3JvM@6+Ff!^t&H2GZdv-WZP}~tRj*oB|LorIYr@vw({}!uwfFDhO(&LbJ2U^lzeR`sUwH800T8|T z00#d*{P_PLi2nZvyK9sf4FQ^mfZ|UUW(Ec>1|5)1pgh6A(Z?XlA>*-O!NF!$M-7&b z2M@Kd^GWGABrIrf5YP;mqG0Ic!oef1<ENsed*j@4Yk?RR_1qN#Xfm)wA literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/loading.gif b/examples/ext/resources/images/default/tree/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..e846e1d6c58796558015ffee1fdec546bc207ee8 GIT binary patch literal 771 zcmZ?wbhEHb6krfw*v!MQYQ=(yeQk4RPu{+D?cCXuwr^cCp}%d_ius2R?!0jBXnAQ) zOH<|l|Nj|aK=D7fpKD04vtxj(k)8oFBT!uNCkrbB0}q1^NDatX1{VJbCr|b)oWWMT zS%hVC ~NwO_yO%;SvZ5MdNYf|QNy-I*%yJaj+uTdt+qbZ z4E`Fzb8m}I&!N8OKmWEcCmrLs^Hs&3i)mt@hQVdcqghkaBs*D}tG_lKew4?rTjzIZ z9tSone1TS+TR7tu^CunG)Y7Jg#sw#)sG9C!c0I%LEzP)9;hqRf&)s$D8d5Db{TBs% zgl0~5QQ91luq4Q9tJgt4QLbaxZvAaKeCM9!oy85dg4k>TdBSVqjHub_PG=PO&J-rx z7oYTuF+kH|tG-UK+EkUhDjYx?zW?T|lx>+aOQm zzL$v$zBLo4Cj=G&tw{H}dW?tlTkS)SY4<#NS92z*EY-MMB6Ftp`R=*=*Ev7cS+X%W zMCur^FdlokL}1Y+&aasU2J4#EOuNlnb9CmqgLCGTSY!1BD42pkHY^XidQ5=>YQx%` z*%Pm9D!CkBu&tMWm(%-ejACVWGS2RX5=QOJ$1*tr7F}F+*-OA+Ly&Isg|AEuUYicA z#%IG6kPXkHt{zk2M6zK@Vu^4Q(1zE$?yY6M!^&jQ+2^E?!p7{g*|X6}vuRC3p@jk0 W117c83?+LXEZI4G$p&LV25SKE>nb+@ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/default/tree/s.gif b/examples/ext/resources/images/default/tree/s.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d11fa9ada9e93505b3d736acb204083f45d5fbf GIT binary patch literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/basic-dialog/close.gif b/examples/ext/resources/images/gray/basic-dialog/close.gif new file mode 100644 index 0000000000000000000000000000000000000000..116234711fa716bf062135b054253090917b3cea GIT binary patch literal 893 zcmV-@1A_cVNk%w1VGjTg0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui01p5U000PD0EfsJNU$KmAv=aBS;(-V5`;S(N?f=j z;gE|MGhVF7kfk0w8o1o_X-$(1Bs+JQOJq)U}BQ6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~EC2ui01p5U000PS0E^fdNU$J5BRz^RS;(*Noutb5CA*7*{)Xr literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/basic-dialog/dlg-bg.gif b/examples/ext/resources/images/gray/basic-dialog/dlg-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a466633d70ca1475db2c11061d37911e3b7205c GIT binary patch literal 27857 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 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/basic-dialog/e-handle.gif b/examples/ext/resources/images/gray/basic-dialog/e-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..48877e748d8fd70185e08c4847b16c932d653664 GIT binary patch literal 995 zcmZ?wbhEHbWM#O(-p&95YgWws|NlRjIZBL%z{m;##h)z9ARp_12vDA2;5fj*$RXpg zVZp&>4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8T4Iyu3VMvDaL$t*frCj@X=a z_te(a*ViW;?uwOCIB;MS6C0OD_J%h%8FCoc*uDr;h}v4nd5yIo{K1`#4b0qfK07u% yJlr9y9d~BO#>dAeD0|QI*}3WI=^4h^_s;Cx{QUd^=WaRQU0YsWp32O`U=09jY;5ZQ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/basic-dialog/expand.gif b/examples/ext/resources/images/gray/basic-dialog/expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f41ed152ab60c9c157bee3464a598f50f9dc2d9 GIT binary patch literal 911 zcmV;A191FDNk%w1VGjTg0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~EC2ui01p5U000Pd0E^hDVWXhIgEorzD8i(n!-q_Y^zZ?(V#A3=GHTpt zBx8?>KK_XuIdUS%9{-LZTY0SIzmFzS!u0Vm(4S_)%0*XIbm>C%48FWBy1my_^j{gjb4nH0^CbaVjSQL2dC^*c`qEbG!_4H%jj7zLPE8WwKQy6dVhLG`n5eXi`84^ISC8aygYEZ(~4DFjl$O_ z9GzsUeWCezv#dzhvj+vvF1#YfF-I0`{L0!d<`kyjIh*Mer*^S-1!wRxpV@pxT=^F! rGhTSi-JxZ1%I07Yiyyzs+`I)@jB9Ri7RY`GZMeaZ%E-dV!e9*m?<{#= literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/basic-dialog/s-handle.gif b/examples/ext/resources/images/gray/basic-dialog/s-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..c13c9cdc0561773f3684528ca64dc6286eeda5b5 GIT binary patch literal 992 zcmZ?wbhEHbyui-N(9Qq?YgWws|NlRjIZBL%z{m;##h)z9ARp_12vDA2;MmK+$RXpg zVZp&>4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8PJX8yJ}8yR~vTWL;hzu{rDR zsjaK8uTMDKCF{Ly&CSgjmsiD}{=Bkb72~~Kt-q(Oy}P^O^Q*h3x39myzk!)s&S%Gl v#FV*|OIv8)A|*;9JN<2c#7;i>=A7rpCpmEmrw$)U zc7mcXc@UIVGnG~gOy34*)9Li-becMyuD$~>)ERVj219+9F_Xbm-(}8ZvefrjGxzFd z?gQ+Z2W-&U2kcoQXO_sF&Em{uap$rD-W-Vsija6n4j*~Q*W?J0hYp%tpk9;bpv@I( z@`Tz)B2B(fn=b+vZGl)@(4Z|8YYQ8+MGfzZp1v;z8bNg>jk*$vu2iBclgyVj>B^es z9|O{PvUGvmyzs<9PmwK9WcqTTMPJ^kuV~R%wCXE?Ha*qBP}OFjwi~K|4nuYOVl`;T zVhzx_SPOK48f&|ZG@#o^cQDa=jErs*qsPQ}W@7f3n4r(hETGq1*K1~j_Lq?Dr%LqcFxvPW zut}by5*6B{LZvEO(+Ju$Vv_!sOuZvAc4ePkK}Mg^X|R8{wv3g3jV&Qm0~*o(w;!4zGtP^}q4TE3f=4jcq2s zNTj41IT7{z(FAgK^iIzZ@_2j+Ir8!+!Q#r@%9(ju7k_5|Ghf7eqx2?7%YoH4jP!wx7HA*Q43) zwFOW=pP6ly3pn=?dHpWVl+z~h4aA7q3Dbmfk>A9h*D=1j0=ZkaJtNDl4|Dy58=OQ4 zb=w|rEX#G|6q4dPk_gFV6VcYbmUmazi7x6i6Xb&As-j$U2PJ(S9-JDYvw05^=DZ2M z-q(%65iC7!Sf=Hfs~2MFb#cc_ASYbPO$Z9ewDx-)GFuhcxKI?v{g{Fd`2H?N2mNoG a(II?Zs7)DAnPM9b=8J95L)rdV=-9sjoxm#q literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/grid/grid-hrow.gif b/examples/ext/resources/images/gray/grid/grid-hrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..a263abb03f6467dae2f38083b7c21f78b7f56d28 GIT binary patch literal 825 zcmZ?wbhEHbWML3vXlG!!cInXTSGO5P!DtAK$PiHc$pZBEe+C_p??HKjfkTXenM1~7 X!-9j&9Ku>LCjt~2+6Cm_??HKjfkT~vnM1~7 p!-9j&j0`*>5dsX(?Y#0vF&ZBgj`> literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/layout/expand.gif b/examples/ext/resources/images/gray/layout/expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..2bcf242ce27018c925723efb2b4eab6883fc35a4 GIT binary patch literal 842 zcmZ?wbhEHb`0tPy7kc{P|1*#NpL_iO{FDC|p8UV~^#7%&|1UrLfA#tQ z>o5M_c=`Y4%m24t{lD}2Kf@>(4S``40*XIbm_gpr0TG})!N8%;z{nxvv0=f%CPp?j i6N!Yx!_EARE-o($79Q#nVf70+@o~ZNeimjX25SI}ygG{j literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/layout/gradient-bg.gif b/examples/ext/resources/images/gray/layout/gradient-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..d311e7de678b9b299180cc43fd0e27aa094089ad GIT binary patch literal 1202 zcmZ?wbhEHbWMpt)YiD41`tmEVcn)kx zWMC9f}-qT zS9f*_H=dvG(9GpJVZn-vi#;Z5#qJ7eyu3VMvDaL$tyx!CBQ|H0F7?R<|;&Gp{C?(S~>Pfj;ZZ(o0Ze*-hOoKHkS%i#`T?J%8%8y_E^ zpzJ-*Vdti&r)L;v-#fF@xb^%3`)~>0U0YsWUJ<-nEqCG8*Vi{BpPuI{{jK%(j{M{s zXLoOZfB!%;x4fTC^T)?0CTqv9Te$P{^9u{}XZY>i_4W0Q&DrN4;om+G9EN?s6{N`;4ypg zpjp68V_}PONXElfi8Ko)PMNY758D;mB$7B)re!?p)L6FSQJ2oTj6>Z9$21;unq13x y+-tsQ!Q(!gZ!aGAJFsa!nc%`V^Uy^1RSTX>(pvN2$>abx&8JgB!X#527_0%M<4zp_ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/layout/ns-collapse.gif b/examples/ext/resources/images/gray/layout/ns-collapse.gif new file mode 100644 index 0000000000000000000000000000000000000000..c567131a0cf0bef3b0d5c72a1dc7f2c76f0997c3 GIT binary patch literal 842 zcmZ?wbhEHb`0tPy7kc{P|1*#NpL_iO{FDC|p8UV~^#7%&|1UrLfA#tQ z>o5M_c=`Y4%m24t{lD}2Kf@>(4S``40*XIbm_gpr0TG})!N8%;z{nxvv0;H@Gb0}t i&w&pKhuc^bnI=dCK6L3~mRIZ9@o~}7epY5C25SI>9XbX8 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/layout/ns-expand.gif b/examples/ext/resources/images/gray/layout/ns-expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..bf967e7480ec3206cd7d218b329ca101dfe5ed20 GIT binary patch literal 843 zcmZ?wbhEHb`0tPy7kc{P|1*#NpL_iO{FDC|p8UV~^#7%&|1UrLfA#tQ z>o5M_c=`Y4%m24t{lD}2Kf@>(4S``40*XIbm_gpr0TG})!N8%xz{nxvv0=f%Mn)!u j5Dx=IhITe#BO8m24_!LA<-=ljYknmbK5V>R(wmyk!^#qaiSiLO}5+3(z&}UbNe&Fw0C0UOPyhe` literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/layout/panel-title-light-bg.gif b/examples/ext/resources/images/gray/layout/panel-title-light-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9187e347597bc83593971d6a77df61e1bdfb635 GIT binary patch literal 842 zcmZ?wbhEHbWMnX6XlGzJcwohm!)s0)-+1Qut}~~$oj<$#@`VG}t{k~_{lwi{XCL0X z^z`BN7f)`#dH&$-%SZ2DKl%9f`KR|UzkGcC_4B)LUq1Z!_UYG;FTa0%|NH0Xzkk0O zM!{$Z45<)M{K*1z?|%jzkgGv?f`LPw!8l<@!a}B2P9Y_SiU$iAn_0Pp6f6=JFfcMQ SGVt6uv2pS7epzNF25SJ`)Kv=r literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/layout/stick.gif b/examples/ext/resources/images/gray/layout/stick.gif new file mode 100644 index 0000000000000000000000000000000000000000..afcc2bf0af8d95b8b92d5330bea9261c0c43c333 GIT binary patch literal 874 zcmZ?wbhEHbgwvrlP4cMco57RB}PMF1ciX&PZnm7cNPDMITxiSmZYXA zlxLP?D1>CBD!6<41~4$_fTTgWg@HqtfssSTW5a@j&5V3PJ}Uwe8rlWq^<*42CLL*K ZGRjJM@nO-CMmc+{9E(Xy4mB`X0{}q#BRK#7 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/layout/tab-close-on.gif b/examples/ext/resources/images/gray/layout/tab-close-on.gif new file mode 100644 index 0000000000000000000000000000000000000000..556e905b11cddb4abcacaf2160ff811ec47a894d GIT binary patch literal 880 zcmV-$1CRViNk%w1VG95Y0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui01E&M000P00DlP_NKl}>g9s4{d`IWkyNACTy%X5( zSCwBCFIN1ePMyV%9R;2n`Eleqf#u45yqHp;xQ{O{zWfEQ5lwL5BIf+nt*1|)1%v(y G2mm|n+a1fq{uZ2jn48o?zgxVBqGE@d#MZ z(99ty#S`H0kb#knn;}DEVv=)*u)3Vdj=;yqxu0#kX9cC0)w0klmAo1XIMn(o} E0NP7EbN~PV literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/menu/checked.gif b/examples/ext/resources/images/gray/menu/checked.gif new file mode 100644 index 0000000000000000000000000000000000000000..091268bfe3763bb304ecf33436e43ce11e2414f7 GIT binary patch literal 982 zcmZ?wbhEHb6krfwXlG!Mj4TpPjg|>);OysQYm?%f!p=2?gMTs?-xN-sdEA1Nc?70# z3r^z{oh~XpNm5`rpUMhB^)=u~p)>6D7IX;UtAF1pFe;6`t{5A@85p@{PFwuufKo){QLLs|Ns9CqhMHsfZ|UUW(Ed31|5)Z zKzV|JV>3f7hm6OD1qYj1Sv6u#1TZi#@w0GcI9)tBMJr-kL1R&qM=y(=n%TyVz+@2- zXNwvQflZvk${|KY6DK)!wDYp5h}~>l>@KDk7INc^LBawCY5TN{2ZgP!69gngSPWJj zX5p0-kYW%_Ogt#W=r(_cL}1gAUOrJi4Nc~-N7J-*)fy%^Fgi{$O1stel^gq4^*6d_<-Z#AvfW6LF2YF$tQ%Qv#xc2NN`}V1^@w|=z9PF literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/menu/group-checked.gif b/examples/ext/resources/images/gray/menu/group-checked.gif new file mode 100644 index 0000000000000000000000000000000000000000..d30b3e5a8f138bfbbfea3d1d6d5631a81268fe26 GIT binary patch literal 891 zcmZ?wbhEHb6krfwXlGzxGAUp-FJv++Vzw-1u&!ctt7CJoDF4C-YI>17M;4q>erj}J#1 znRLYtaeQ=iW)bC#?NNBB=*-HhDWD|4xae>zCoh|V$$>=XHZB1n7Kal~O{`q}VgeQu b3s{-ixj1G-bT~0I2=PqTialkbz+epkbq-F$ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/menu/menu-parent.gif b/examples/ext/resources/images/gray/menu/menu-parent.gif new file mode 100644 index 0000000000000000000000000000000000000000..7e1378a8081c518ca4e3761171d29ba6703ed9be GIT binary patch literal 846 zcmZ?wbhEHbB0Jk|j&_?%jLz=+S%k?lFvl(GVB`A)xq^ zg_(hYok0iWS5Tf{;Lv7Zl#%e*@PLtliC2szL1E#cW>zi>6OIIiMn+-IFp&v?$qju{ Mj#)Jk1_}(;0Le`qjsO4v literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/menu/menu.gif b/examples/ext/resources/images/gray/menu/menu.gif new file mode 100644 index 0000000000000000000000000000000000000000..3e12a1d80449df3802f67db9520b87813bd5a515 GIT binary patch literal 842 zcmV-Q1GW4|Nk%w1Vfp|80EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui0Qvv{000Ol0M!W`NU)&6f!NNyyZ5i5!-o(fN}Ncs UqQ#3CGiuz(v7^V27XtzSJCtde4gdfE literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/menu/unchecked.gif b/examples/ext/resources/images/gray/menu/unchecked.gif new file mode 100644 index 0000000000000000000000000000000000000000..70ba3c49e20295efab625c5b8d726ef2a9458886 GIT binary patch literal 917 zcmZ?wbhEHb6krfwXlG!M32boq?{MeN^?UbjK6r5Z(W84$pFVo=;^~_=FWR z&!0bj{rctm_isOc{`md-*WbT?{{8#+|Nno6Q7{?;Lq7x*f3h$$FfcOcfV=|A6AT_E0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui00{t2000Qx0RIUbI8dFzg9q0sT*$EDLUs@%Mr=p1 zVnuftGiuzJ@twzyAK{4{NwTC#lkrljR4K2e%a<@+&YMZIrcIjka_ZDsucyzSKz-U9 zO0=j^qW6+2UCLA`zNb*3=8GCNpVg~Z^=aM8wd>Y>V8e+p>=mnFs)!ReUCi{TW1~SM1Kmmare&KkGs9fT`K0I1 u@IZ?8$gwm=i>NC~TJgn%Pf}qxkaE;E z!}!vcdm)qxVRJ@?p~Jr4=kNGFpC8`8f8MXx=VN&T0yezAx(&P|Nk-Df@={eV`G0P&DS4ZI!aU`(RkfGQHaUA0)s9+PSI&88XTgm+dQbizjw*Z4SIfjx zWP^9B-F(I9E3wMby|Od=YCPE{=Vsx}*A;`6F4qiVj<#sOd+ybiqV_j4u&e5d0z=J< zS@nq(Jn8Cg92c;S6S6Y*rHi!$;UG(Xs9CeCzp@YwyG^^PAh2`=z*7+w@UE6nji>xf7`L_bk3;$qI{yg=rxC_k95GhGlizj6k>Vy>c?+&NcS&6n!VQ(pA?&sVWUyP;Ja$=v+QX7TQY>NhH>71ew|p2WekiWK8`^EN+9x=g zw%X6v?O7f84_a~U{nSmHwZRWYX=_8z{d?AiH(d8fKJcP!Bp>tg(j+5U6+MzqSk9jH z&jTqo>tEiEq^*xu%}IOK$NYZo*%*KDhwaAKM}OirCc-0l8O-~X;lSvxV{Sn6n7(SXe(Fi3 zC1jf#zcR_RJ6B1Xuwigw|2}t!iMIgFcvGiUlk8Y`?4ZK>8=a8K6sPW^2kO}RXF_UR zJ$`v}m_U9xss`I_q;Zr$X@cvkvUK`=f@)RMb2ddZXQ4EY9HmqMb_6>4xmDBW0KXE^3!|!(3}~d%HC+ zmvnUa*{@^`HPV4~f!+e;xT# zqqb>Nxl|B?9-w@eMesUxZkg?SRTOOmyuMcY4y9CHth8tUUmE^35ADN}Rhk%VKt&%U zx3=WX1kmb{W`E`gqZB~fchf<)gissitRCa{!cBKTrSBE}G)KqQp>&{-%qTNGyYE)Q zQ4VSUnxpv@T@1eBegBcy<>lVGcdilp$~p7pPHKcZbsWb^WO#)q%HJj5$caW=WB6+M zyC!g)D9rG(hde*G03+wzp*30r%+JGtyU|D{nL_YIj2XHji3Wvb`o8{e>s^DH%>0*w@W7Xb_xz

        t-M8nBaURXUaboUVW83^fxJIsd4O4xB`Dqa~5)^Py95?XG6a}#?Hwz zTL6NI9Sx(MB_2c;3$_qmALU8(AW=YY5y9}WuYpHi5(_^5x?URbaLB#jA;@=R&=47c zbSFEreBZBahCPL=In|A@D)w`nB_6#_#G~C_V0#&V_4OV&mGg4NMouXvgmU#M@ zg`zXLO?|5>*`eUCePj3d`M%4kInO7Ld+N5EFTRhBYgf;)ds-|zH1 z9y-(0DAcFi>n)22B`h^!u9$5Kst$+Ym17=Q3OxGE$zj^(zD(Loj}GV^U#oHa{luYc zW3ZVSz6|^Q)qQDV_|S2QIIU?M*6cdc7lDj_`33txy8dbSa73)&w_ikr=a-ejb=sOc z4)FBx>m7QLfd{zXKbe|LG*xZzl0Ge`k2W+(xi>om`Qq?ElPST2$C1!j1SMUo3#1;{ z57k{YGrw}y@?jJ#fV;Nu$(04r&}MjLtS_rsYu;Dy!N(PkF|IVGIYKYG?LhNJvYDy) z$je_sv(ZhilIiMW*C(OVTkzpw*h<;b?b*=giBYMklwWDKxFG2M)%2OW0e!i(HemW| z@vz~qNl&q4zzj0;^zK%?pY&%lLV9{fT-*DnTfPoc3PIZ=FYZEE%eurFhR1zj#!bn_ zj{xF3-p46f#jNDSt883QW7r-+M4zw~QZDOv}psZF|YR`u5Dotk>!TL&W_ zTmsu&04C^LJph3(TtV0wZbV;efBff6oEhn&vFZa$lAZYnjlbFF?b_{ZtP)khD7F2l zT?r_u56X~=lAA=y?m(Z-PV5GtWuWNucM|0==wGeqpA%?N$b~>3`@~lzDaA; zBynq!nPyU}DCzqt%=N^ibxX{`Gt4{{V9-AIz#k>hSeci?)<~L|P`Amx&Q(rpV#3T6mlVJ_Clwqwv`@JduYd z3GsPySp`~IWQ(jKSQb@^$||L0(Ro=6VOE7)_H(W57Z%you{vCqCIlM0S;@xB)005Q-O^;*F;G&?#^}1tFsN%NGR#ih>|T z!SJFGbWs?+2+1#s6ct6u7e@n%VdCO~&}Y D2qnhi literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/s.gif b/examples/ext/resources/images/gray/s.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d11fa9ada9e93505b3d736acb204083f45d5fbf GIT binary patch literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/sizer/e-handle-dark.gif b/examples/ext/resources/images/gray/sizer/e-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..eac9662eade56ad43732ddff31ebe463871c445e GIT binary patch literal 1062 zcmZ?wbhEHb4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8T4Iyu3VMvDaL$t*frCj@X=a z_te(a*ViW;?vnN1w&v#MjLWNHPj6d$dwap-Q**tyue-au;`6J!r?;=azrTT*Th3?4 zhKGkcgtg<&>_~55;E?Bb&`2;ka(p6lgjs~8(zE7Cn)zivZYI2Fo-4gN?(D9uudi=N zK0VKO_qMmUcND+AcXs#o_xBGpbIbef+41r5iOJgW=l1OU{QSaV@A-avcYS?*V{`WX Tb9;AxfB)ccH}iKX0S0RTywIF? literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/sizer/e-handle.gif b/examples/ext/resources/images/gray/sizer/e-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2c9f538243ecbc0364b1afd7287248ce8f2c513 GIT binary patch literal 1586 zcmV-22F>|LNk%w1VG01y2ZsOv000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015!m2LK5F0M(fb#|@jog8~U2L^!bELTm{gE{ymP zV#A6QA7-3*QDaAr3O$AdDUsnwlO+vqM2YbuOOYupo>b|Q=1iF}SK7>36KBhtI(@?Y z$rEVLph%A@HOjQ8Q=(9ZN+lVU>eQE3vtr%4vnp4iTDx8q8y4)>q)ok&J-hVjShH*6 z!kvrOZP~hN>9);__if+1d;JCmoK|pQ!gkpnR-9PwU&ed~LpI!4?_$T2F<-V^`LX8C znK?(^>{&GB(V$6(F3oziYt^t*%SKK6v~9$-ao?V-yEpIOpK}8@?K}8xffOkEo#kl2fezwDeD{e#JT~D!6iVD@GL|q$@_W+S)5Z!KyT@ zM#XyctE-hlD=MbZvRW;*(|Wopwy3_!t+d@UzWn0r@4W!SD{#Hv+B>kp1gm>+!3-;$@Vp2|+%Uuw@B8n<4ojSI#r+2S zu*Dv0O!3Afk8Co?7@yp6$|!%lvdb6495Tl-i`=r!FXLP@%`=yLGtVsN47AKa@9eYC zM;ooO(myBN^U_Z@4Rz5`BRw_ISnFIh(^gCEb=P2XE%w%AQ*CzELu-Au+GsnycG_^e k-S*XN*Bv+AcYi(h+j83v-FMz$mp!-Mg8PlPrvU)~JKnY_G5`Po literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/sizer/ne-handle-dark.gif b/examples/ext/resources/images/gray/sizer/ne-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9c041c45f673735de9f54f7967eddec62cde469 GIT binary patch literal 839 zcmZ?wbhEHb#gW lSa7hJgPTi$AwlsV10#z=iiLm@LpO)4)SL=|#|Ii1tN|md5{du- literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/sizer/ne-handle.gif b/examples/ext/resources/images/gray/sizer/ne-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..942ae825357ebae7f68e5ef818d7ebc5de4c02cd GIT binary patch literal 854 zcmV-c1F8H+Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ox0I>-iNU)&6g9r(R`}c1fLxQMK{fqby gBC2o^w-G#NZrs9(1Jj{1N0Feqbmt<5BNz|>J6tuIF8}}l literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/sizer/nw-handle-dark.gif b/examples/ext/resources/images/gray/sizer/nw-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..23fced98bfa4e805e9e078fcad909735344b7957 GIT binary patch literal 839 zcmZ?wbhEHb#gW lSa7hJLy${=AtBL`k&(%PC%{07p_^G&Zcc}Qazg`yH2@eV5k3F_ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/sizer/nw-handle.gif b/examples/ext/resources/images/gray/sizer/nw-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..d39b0c38d8994139e389a7da016506e0537aac66 GIT binary patch literal 853 zcmV-b1FHN-Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ow0I>-iNU)&6g9s7+`?qajID-FBp^Au# f;5LcjBtrZbZk)Mu5G9&JmyTdYROiyE3kU!^<_nt% literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/sizer/s-handle-dark.gif b/examples/ext/resources/images/gray/sizer/s-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..ddc2e18ce48da6338fb4e065effd31f769ae3e34 GIT binary patch literal 1060 zcmZ?wbhEHbyui-I(9Qq?YgWws|NlRjIZBL%z{m;##h)z9ARp_12vDA2;P}tL$RXpg zVZp&>4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8PHh8W@=7yR~vTWL;hzu{rDR zsjaK8uTMDKCF{Ly&CSgjmsiD}{=Bkb72~~Kt-q(Oy}P^O^Q*h3x39myzk!)s&S%Gl z#F1=;#XNk%w1VbBK(0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui0MG{t000R80M!W`NU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVZ2ANwTELlPFWFT*({Vj%bu;+?Z0rgaihAOo3`)Yz=I1PPQ1ABU*OP@}?y7lYWvuoeZy}S4C;KPgmA5Xr#`Sa-0t6$H)z5Dm@7rtA2$K=XW)SdCaB+*pMVA`=%9oaYUrVeCaUP7j5g}%qmV`_>7ZqiaYU-(|rmE_ythVavtFXocie*3mJC`c7>Hq)$ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/sizer/se-handle-dark.gif b/examples/ext/resources/images/gray/sizer/se-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a678e67fd6edad35c463cb6d96b05fc9d6e89c8 GIT binary patch literal 838 zcmZ?wbhEHb6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ow0M(^ChYD3VYzVQXLuanwzl7M%nHv}G f-@}9j!xh{H(V;_#75{Cs2(hHelPFV`3^a literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/sizer/sw-handle-dark.gif b/examples/ext/resources/images/gray/sizer/sw-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..937102c6b23e59f512f74b5393378ced56e006c9 GIT binary patch literal 839 zcmZ?wbhEHb literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/sizer/sw-handle.gif b/examples/ext/resources/images/gray/sizer/sw-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9e2f563a037e362e69290dff5c19f0316f4659b GIT binary patch literal 855 zcmV-d1E~B*Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Oy0I>-?#P7;$1Ytu zaplUX>(|fRym{{S?F)DAT)cPh^23MM9zDAL`0jcWvj^pRv2Xf5GSTx%=ki5wlN! ziI4aQXaE2%t3xUk$z;#w<|Y&hu~IpuQc2b78I5LEtCcS=D_2(+^m_IBy2fD88jVXE z8!KkB&SKG9t!p;hI`De03;dr8y!Th+fB5?V{*}b5PXN*TKtxeO?oh9^F8VEOiE^k< z))4zaepl}Bqq*jUlPI-vn5np%{Mqfqyk)ce9_DkfWPZfH(3XB>p(}4RCI3NYwc9vf zjn@25s6)Ne89*;FbKBlO1@hS|11CE^?am*==CF%LD_(TQ;`D>1?3zOb0{qf&`3gAJ zMCBQTSi?+rfu3m`rv>vTIl{rq^dI+8;kRi+=JB83#8Ds8hOHxak_sG0uaDTl`^PJ( zo!3X5%@g&pD=oFUe*1=53R2NIcnCWrFxqXC~GM2eMkqVg`lIt;+#$ybU zr3ur|vfRcCps$({r;@EL89I{nPPT(({pCy;vfd>iQ*Ethpo^TU!w^ z)&ARsVzT}IrE<2NQ9^au+e?2+)gsCmWJd?7pY7K(pR+aY5x`p$emTxJ8PZjLBSswV^-cX9hJDjO6y7h1 zJVNnHqtRUd%)u;=Ulw!VtYkLsA|)`FaFrX7C;s3GD3TlS+sb3@laX+;;KSRxoBQ!`COJav{IClwzGQSV%5$cm#*@@ z*CF08?dVGz(!y(H?N#A*(f}{~Cq?KD8?GtRc8%ZSw4D^%jf|TwfY7_%-Obvl^gR>( b$k%)3M)cD?OH0<)p0zb6{j@D20{Hk}th4;{ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/tabs/tab-btm-left-bg.gif b/examples/ext/resources/images/gray/tabs/tab-btm-left-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..ae47e170c594f23bf5c30bb6fb4c5e378e157f47 GIT binary patch literal 875 zcmZ?wbhEHbWM(j8XlGzpvts6@OD7&bzVY@40yn1!-&6@}B-aY#8;mPOE&%b_s z`ThIrU%%e{`Saob|4;w_fBFCa+yDPR{{R2||Nr0r|Nk?Lg3%Bd$|0cmlLhGf{|q`H zPk{0S1BVBLW&nf2ga-$jIQX?pP8cK}Zsk*Un)74BqQjibsysag0*4N;Gt2Vi7)&^L kfR$O4$Hze6-~nc4ULGBT2?q`^GPBCC2sA8jXkf4g09rRzr~m)} literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/tabs/tab-btm-right-bg.gif b/examples/ext/resources/images/gray/tabs/tab-btm-right-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..bd70cbcded73f1356a939b13784df5cbe068fe16 GIT binary patch literal 1601 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 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/toolbar/gray-bg.gif b/examples/ext/resources/images/gray/toolbar/gray-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..bd49438f33937ef9547dc8300fa73c3c239d9e7e GIT binary patch literal 832 zcmZ?wbhEHbWMq(LXlGzJdusRnJ13q$x%BGAwKp%Xzj<}@-J3h_-`xN3_U?!G4?etm z{PEr65AUA*|Noz16pV(zunPgjpDaK>{b$et`3#gN7&v4Zqzw`_ELgzA$|)pg(Xe14 SBQvX#kb;4O15gDcgEauAx-gUg literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/gray/toolbar/tb-btn-sprite.gif b/examples/ext/resources/images/gray/toolbar/tb-btn-sprite.gif new file mode 100644 index 0000000000000000000000000000000000000000..bd56f88ec1f82a93fc5e0a994f556bc930e84576 GIT binary patch literal 963 zcmZ?wbhEHbWM;5uXlGz>`0sG;+~G@?j$glY?8@a6*Ds&Aa^>WW8)xs`yY}eO^(POn zJ$ZEF$&;HeUfg~A=E=LaPv5Wg{1q&uEZQ)>4un>4~z>$fGi$%`j0>c4T7M`FAg98Q(okD`@ zVS6MN9B%KGwQrM&{FHKPsxGt31c3vLE$fU$1w0N2J2Y(8y0j=Fd(qpD?TU};W_V9; ij_s3nN!xHhJhhdxL6t+!#-iyVdxxloowR}igEat8K&-I< literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/basic-dialog/bg-center.gif b/examples/ext/resources/images/vista/basic-dialog/bg-center.gif new file mode 100644 index 0000000000000000000000000000000000000000..7bf4a4b41d57c4889b8551cbeef72cd4d432e24e GIT binary patch literal 865 zcmZ?wbhEHbWMtUD($2u3udi=oW8>=T>f__%@9)nr3PwXc;Nalv>l+dlnU*2LQ79iGl)DDv*T_w8u`nrUjU3a~{y^h$NdU%=bYO%Gqw-wwx73=-| zZOrb{$Itez7GHmVU&BwXd)`0ZCme2NR<~OtvGMV-36kD%K0iOEoSv$jzHg1>=I7@Y zSa#p@`Sm&D@>1vJc59`!zP`30@^qZ<@2@$xwc;Nalv>l+dlnU*2LQ79iGl)DDv*T_w8u`nrUjU3a~{y^h$NdU%=bYO%Gqw-wwx73=-| zZOrb{$Itez7GHmVU&BwXd)`0ZCme2NR<~OtvGMV-36kD%K0iOEoSv$jzHg1>=I7@Y zSa#p@`Sm&D@>1vJc59`!zP`30@^qZ<@2@$xwC>mi#>VpU^3c%G z*x1;Lii(nwlE}!&va+)3>gr#=ekCO(J$drP-Q7JuKR-S`-rnB6y}iAusj0rczPPy9 z$jInF5HK)UTU#^G5-9#;VPs&CXV3vz0`e0BTlE3|bPpXN`vvW3Cv&po6fUT3Tp6|Y zipKGSFRS+6$yi{pP(v+)H8qICg}=M8HEH5y_HJj9fS23?f*ee>q72m%9TL1kyqywl z3Os=d;&K9V;*%#SFa=JXIX`f&f>@x)%y}Y#OBLAM*0Tk&taoEclH9R#mt>yDC>mi#>VpU^3c%G z*x1;Lii(nwlE}!&va+)3>gr#=ekCO(J$drP-Q7JuKR-S`-rnB6y}iAusj0rczPPy9 z$jInF5HK)UTU#^G5-9#;VPs&CXV3vz0`e0BTh;;pbPpXN`vvW3Cv&po6fUT3Tp6|Y zipKGcZ>@IR%~)WdIQ!&Nhc6o>w%pJCuE@3G#`_;!4Sg?v|Cgv%;0a`FYiA2=QD6$> r=%2t5*sCBGIDJOoGzB)dd7TO@^W0dHB$uyPDVgOlbDe^`BZD;ne9vIC literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/basic-dialog/dlg-bg.gif b/examples/ext/resources/images/vista/basic-dialog/dlg-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a466633d70ca1475db2c11061d37911e3b7205c GIT binary patch literal 27857 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 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/basic-dialog/e-handle.gif b/examples/ext/resources/images/vista/basic-dialog/e-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..48877e748d8fd70185e08c4847b16c932d653664 GIT binary patch literal 995 zcmZ?wbhEHbWM#O(-p&95YgWws|NlRjIZBL%z{m;##h)z9ARp_12vDA2;5fj*$RXpg zVZp&>4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8T4Iyu3VMvDaL$t*frCj@X=a z_te(a*ViW;?uwOCIB;MS6C0OD_J%h%8FCoc*uDr;h}v4nd5yIo{K1`#4b0qfK07u% yJlr9y9d~BO#>dAeD0|QI*}3WI=^4h^_s;Cx{QUd^=WaRQU0YsWp32O`U=09jY;5ZQ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/basic-dialog/expand.gif b/examples/ext/resources/images/vista/basic-dialog/expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b4b0d1e950e34f602f5227eb7e0fa9d707953b0 GIT binary patch literal 351 zcmZ?wbhEHbC>mi#>VpU^3c%G z*x1;Lii(nwlE}!&va+)3>gr#=ekCO(J$drP-Q7JuKR-S`-rnB6y}iAusj0rczPPy9 z$jInF5HK)UTU#^G5-9#;VPs&CXV3vz0`e0BTg?IgbPpXN`vvW3Cv&po6fUT3Tp6|Y zipKGWFRS+Q`I!WK2soF)wMd{tPORgo!@ddCV(l6WnpXVyFDfL;P$eNJ(a|ZvAKEV*;nZpmDaDF-IY IJ2F@U0DGff6aWAK literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/basic-dialog/hd-sprite.gif b/examples/ext/resources/images/vista/basic-dialog/hd-sprite.gif new file mode 100644 index 0000000000000000000000000000000000000000..3c2dd632dd60f2fbd55ca74969053abcb40a0b89 GIT binary patch literal 462 zcmZ?wbhEHbWM-&lxT?fpXlNc46>n&0rmn87t*x)GZ=$BAZDeGTpI@S_ZJ?^EnV6WC zk&zP{o0OH6UsO~c78b3ksjH@@rK@XXVq%q&l9`)ZWNKLk$fb0|QfU z?*KhLV=XN`V`EDrBlG|N|1;1ADE?$&WMEKY&;c0_@)HBw>jMEEEhk&#`URK-H$^z{ zxpy4o2-RA6ROw1a3sa*2i_oi*Q_oMUx-4vQSWy0_K!A&}VS=ctgMQ1axHDb z!irK--MyTgiYzRO^72!s3koVqOV63d%&f@9rYIz&$i?McCMn_W>Fw(u7#tcN866v+ zn4GacD<`j@NU@|$v7)M`u0gS>{bFa|l?jukOq-!NYyRDZi#*yhe_i^SKbLiK1vBI ZAG7-kT6NwL$YRiBUaqntNPvaG8UP8Kc8&l5 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/basic-dialog/s-handle.gif b/examples/ext/resources/images/vista/basic-dialog/s-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..c13c9cdc0561773f3684528ca64dc6286eeda5b5 GIT binary patch literal 992 zcmZ?wbhEHbyui-N(9Qq?YgWws|NlRjIZBL%z{m;##h)z9ARp_12vDA2;MmK+$RXpg zVZp&>4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8PJX8yJ}8yR~vTWL;hzu{rDR zsjaK8uTMDKCF{Ly&CSgjmsiD}{=Bkb72~~Kt-q(Oy}P^O^Q*h3x39myzk!)s&S%Gl v#Fh~h2?h>6 U21X7E0S5)gW>$7K4h{xu0Q^P?w*UYD literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/gradient-bg.gif b/examples/ext/resources/images/vista/gradient-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..8134e4994f2a36da074990b94a5f17aefd378600 GIT binary patch literal 1472 zcmeIx`%jZs7{KwDTLnZd*hMh7R3%&{VK|xh5d@TrMjeTpnq?_&b8`}Bh(kowLJ^R= zwLrP_Mz6F*N-1{`N?)K@6i}uD1>V*|OIv8)A|*;9JN<2c#7;i>=A7rpCpmEmrw$)U zc7mcXc@UIVGnG~gOy34*)9Li-becMyuD$~>)ERVj219+9F_Xbm-(}8ZvefrjGxzFd z?gQ+Z2W-&U2kcoQXO_sF&Em{uap$rD-W-Vsija6n4j*~Q*W?J0hYp%tpk9;bpv@I( z@`Tz)B2B(fn=b+vZGl)@(4Z|8YYQ8+MGfzZp1v;z8bNg>jk*$vu2iBclgyVj>B^es z9|O{PvUGvmyzs<9PmwK9WcqTTMPJ^kuV~R%wCXE?Ha*qBP}OFjwi~K|4nuYOVl`;T zVhzx_SPOK48f&|ZG@#o^cQDa=jErs*qsPQ}W@7f3n4r(hETGq1*K1~j_Lq?Dr%LqcFxvPW zut}by5*6B{LZvEO(+Ju$Vv_!sOuZvAc4ePkK}Mg^X|R8{wv3g3jV&Qm0~*o(w;!4zGtP^}q4TE3f=4jcq2s zNTj41IT7{z(FAgK^iIzZ@_2j+Ir8!+!Q#r@%9(ju7k_5|Ghf7eqx2?7%YoH4jP!wx7HA*Q43) zwFOW=pP6ly3pn=?dHpWVl+z~h4aA7q3Dbmfk>A9h*D=1j0=ZkaJtNDl4|Dy58=OQ4 zb=w|rEX#G|6q4dPk_gFV6VcYbmUmazi7x6i6Xb&As-j$U2PJ(S9-JDYvw05^=DZ2M z-q(%65iC7!Sf=Hfs~2MFb#cc_ASYbPO$Z9ewDx-)GFuhcxKI?v{g{Fd`2H?N2mNoG a(II?Zs7)DAnPM9b=8J95L)rdV=-9sjoxm#q literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/grid/grid-split.gif b/examples/ext/resources/images/vista/grid/grid-split.gif new file mode 100644 index 0000000000000000000000000000000000000000..c76a16e95997a487ee9cd1675ecdd99bd2f37c17 GIT binary patch literal 817 zcmZ?wbhEHbWMbfDXlGzpvts7||Nj|A!DtAK$PiHc$pZBEe+C_p??HKjfrF2Mkww6x PV8OvA4t_Qc4hCxg>zoX) literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/grid/grid-vista-hd.gif b/examples/ext/resources/images/vista/grid/grid-vista-hd.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0972638e8305d32d4a2419b3dd317f3c8fd3fe2 GIT binary patch literal 829 zcmZ?wbhEHbWMmL!XlGzJe){5xGZ#;uy>#l_<(QpFT5;g3%Bd$|0cmlLhGf{|q`H nPk{0S1BVoYrq2Wc#zV~Pyb=r?3JDC2Ol*7#9t#p29T=`0w!X<41;3Fd70QG6WQVvM_@@t^*=Kd4hpMoq>@<#$&^R ngUt*~JRuPV49@Mm@`0w!X<41;3Fd70QG6WQVvM_=?t^*=Kd4hpMoq>@<#$&^R ngH4QVY9mEVcn)kx zWMC9f}-qT zS9f*_H=dvG(9GpJVZn-vi#;Z5#qJ7eyu3VMvDaL$tyx!CBQ|H0F7?R<|;&Gp{C?(S~>Pfj;ZZ(o0Ze*-hOoKHkS%i#`T?J%8%8y_E^ zpzJ-*Vdti&r)L;v-#fF@xb^%3`)~>0U0YsWUJ<-nEqCG8*Vi{BpPuI{{jK%(j{M{s zXLoOZfB!%;x4fTC^T)?0CTqv9Te$P{^9u{}XZY>i_4W0Q&DrN4;om+G9EN?s6{N`;4ypg zpjp68V_}PONXElfi8Ko)PMNY758D;mB$7B)re!?p)L6FSQJ2oTj6>Z9$21;unq13x y+-tsQ!Q(!gZ!aGAJFsa!nc%`V^Uy^1RSTX>(pvN2$>abx&8JgB!X#527_0%M<4zp_ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/layout/ns-collapse.gif b/examples/ext/resources/images/vista/layout/ns-collapse.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2ad235dad390e71a096e2e943ade1f22c1de113 GIT binary patch literal 842 zcmZ?wbhEHb`0w!X<41;3Fd70QG6WQVvM_@@t^*=Kd4hpMoq>@<#$&?* n$7V)8E}jD)5)QYqC^Aiu2z=<$#VoJZv*Y8Uqy4PRObpfl%OVxB literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/layout/ns-expand.gif b/examples/ext/resources/images/vista/layout/ns-expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..0817ec66fd410022c495adacc4855a4cc548ce0f GIT binary patch literal 843 zcmZ?wbhEHb`0w!X<41;3Fd70QG6WQVvM_=?t^*=Kd4hpMgMpDl#$&^R ogN=+#3Lzc_iVW>+!bUb08y~uKaLb3q?AZA5V7~%88w-Oq0L1MSzyJUM literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/layout/panel-close.gif b/examples/ext/resources/images/vista/layout/panel-close.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e96481a1fdb16a6f332ae06e138f15ac24fcc03 GIT binary patch literal 829 zcmZ?wbhEHbWM^P!XlGzZj0<)6@9^Z&RfbV88UiCP1QdU=Ff%YPGU$N34$2b@98wI7 f92^b-4GxWrJbWP?8xjt;u!}3DSX@YSV6X-NNAwV) literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/layout/panel-title-bg.gif b/examples/ext/resources/images/vista/layout/panel-title-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..681f517a3c2e78c59a0a066e72c9d98c89bd5798 GIT binary patch literal 888 zcmcJOT}V@57{{M|>C|cSy*dzr-6X~>bt5B8-OE?rwTx5*riBXgoz#9DzP zf_73c5Wmu@^K&s0wVo7-u6twKw`k<)WUe1B%Jm>kn&;S4MzJtR9 zc1K788dw2fm~Ov+l3}{kYMQ1^CX-dAqFL6?^C_A(cXnz+q3Kv`HW-|W$N6M((dRp* z)f!YPox#9btv!**Od^rA*?L!3H%3Rt^m<04(VNXSr*p(;wCHq3i^ajR-TV9d@PC%j z;31yZV(1{Q5`b9f&sFvyr<4)r95y5_F87`i8s^sD6oo!s=$ituoOsj3J1#VwsIp#t zm332pvc(#k`xm=Sym^4EPKdMWC?-j@*h`S-U+>DN*J#c&u0_Z3T z@f3suFuwq24KT9=(Ey~%rUDQ1Nmz*1ei8TDPqUJ6J%#bto2YHJYKUSU&3 z<>fY35_b^=2(r>{o+6&Bf@~DWCCCyuuG-U4*6pDYbd6%t)D0{qBWJ1^#l_<v?3yLtEet$R0a-@ke1!L7RwZ{K@#|Iw3&Po6z~_Tt%#S1(?@dG+S)n|JTu zfB5+E)924$zJC4o{l|}=45MH)1O|5qDE?#tI`BV(4#=6HJi)-B&0t&dV1uJG8;`h7 m$N~dK2L?uF4iSR_21h1VZV8iu4-8H$oC?leGL}XP4AuY#5nmwy literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/layout/stick.gif b/examples/ext/resources/images/vista/layout/stick.gif new file mode 100644 index 0000000000000000000000000000000000000000..7db68eec95fc77cce1fc4560a257dd0fef64c200 GIT binary patch literal 872 zcmZ?wbhEHbgwvrlP4cMco57R!o#gWSa7h}g-^(5MS#M@b^&=k d6N!%t8@eSVt=4E1Dje_QlWr4PX`sMh4FDiwBDw$o literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/layout/tab-close-on.gif b/examples/ext/resources/images/vista/layout/tab-close-on.gif new file mode 100644 index 0000000000000000000000000000000000000000..556e905b11cddb4abcacaf2160ff811ec47a894d GIT binary patch literal 880 zcmV-$1CRViNk%w1VG95Y0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui01E&M000P00DlP_NKl}>g9s4{d`IWkyNACTy%X5( zSCwBCFIN1ePMyV%9R;2n`Eleqf#u45yqHp;xQ{O{zWfEQ5lwL5BIf+nt*1|)1%v(y G2mm|n+a1fq{uZ2jn48o?zh6WMJix@z}87 pU?UF~kIsPx1?N_NZabd}gGC2BxnzU3XiQk-(8liE#lyj14FHlE< literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/qtip/bg.gif b/examples/ext/resources/images/vista/qtip/bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..5c0e8c92a810d244a29f21f467b90f5d61fdf0ec GIT binary patch literal 1024 zcmV+b1poU-Nk%w1VF>_E0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui00{t2000Qx0RIUbI8dFzg9q0sT*$EDLUs@%Mr=p1 zVnuftGiuzJ@twzyAK{4{NwTC#lkrljR4K2e%a<@+&YMZIrcIjka_ZDsucyzSKz-U9 zO0=j^qW6+2UCLA`zNb*3=8GCNpVg~Z^=aM8wd>Y>V8e+p>=mnFs)!ReUCi{TW1~SM1Kmmare&KkGs9fT`K0I1 u@IZ?8$gwm=i>NC~T;$%+c3wNW3C)a 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 E0I-oB(f|Me literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/s.gif b/examples/ext/resources/images/vista/s.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d11fa9ada9e93505b3d736acb204083f45d5fbf GIT binary patch literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/sizer/e-handle-dark.gif b/examples/ext/resources/images/vista/sizer/e-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..eac9662eade56ad43732ddff31ebe463871c445e GIT binary patch literal 1062 zcmZ?wbhEHb4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8T4Iyu3VMvDaL$t*frCj@X=a z_te(a*ViW;?vnN1w&v#MjLWNHPj6d$dwap-Q**tyue-au;`6J!r?;=azrTT*Th3?4 zhKGkcgtg<&>_~55;E?Bb&`2;ka(p6lgjs~8(zE7Cn)zivZYI2Fo-4gN?(D9uudi=N zK0VKO_qMmUcND+AcXs#o_xBGpbIbef+41r5iOJgW=l1OU{QSaV@A-avcYS?*V{`WX Tb9;AxfB)ccH}iKX0S0RTywIF? literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/sizer/e-handle.gif b/examples/ext/resources/images/vista/sizer/e-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2c9f538243ecbc0364b1afd7287248ce8f2c513 GIT binary patch literal 1586 zcmV-22F>|LNk%w1VG01y2ZsOv000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015!m2LK5F0M(fb#|@jog8~U2L^!bELTm{gE{ymP zV#A6QA7-3*QDaAr3O$AdDUsnwlO+vqM2YbuOOYupo>b|Q=1iF}SK7>36KBhtI(@?Y z$rEVLph%A@HOjQ8Q=(9ZN+lVU>eQE3vtr%4vnp4iTDx8q8y4)>q)ok&J-hVjShH*6 z!kvrOZP~hN>9);__if+1d;JCmoK|pQ!gkpnR-9PwU&ed~LpI!4?_$T2F<-V^`LX8C znK?(^>{&GB(V$6(F3oziYt^t*%SKK6v~9$-ao?V-yEpIOpK}8@?K}8xffOkEo#kl2fezwDeD{e#JT~D!6iVD@GL|q$@_W+S)5Z!KyT@ zM#XyctE-hlD=MbZvRW;*(|Wopwy3_!t+d@UzWn0r@4W!SD{#Hv+B>kp1gm>+!3-;$@Vp2|+%Uuw@B8n<4ojSI#r+2S zu*Dv0O!3Afk8Co?7@yp6$|!%lvdb6495Tl-i`=r!FXLP@%`=yLGtVsN47AKa@9eYC zM;ooO(myBN^U_Z@4Rz5`BRw_ISnFIh(^gCEb=P2XE%w%AQ*CzELu-Au+GsnycG_^e k-S*XN*Bv+AcYi(h+j83v-FMz$mp!-Mg8PlPrvU)~JKnY_G5`Po literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/sizer/ne-handle-dark.gif b/examples/ext/resources/images/vista/sizer/ne-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9c041c45f673735de9f54f7967eddec62cde469 GIT binary patch literal 839 zcmZ?wbhEHb#gW lSa7hJgPTi$AwlsV10#z=iiLm@LpO)4)SL=|#|Ii1tN|md5{du- literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/sizer/ne-handle.gif b/examples/ext/resources/images/vista/sizer/ne-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..942ae825357ebae7f68e5ef818d7ebc5de4c02cd GIT binary patch literal 854 zcmV-c1F8H+Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ox0I>-iNU)&6g9r(R`}c1fLxQMK{fqby gBC2o^w-G#NZrs9(1Jj{1N0Feqbmt<5BNz|>J6tuIF8}}l literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/sizer/nw-handle-dark.gif b/examples/ext/resources/images/vista/sizer/nw-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..23fced98bfa4e805e9e078fcad909735344b7957 GIT binary patch literal 839 zcmZ?wbhEHb#gW lSa7hJLy${=AtBL`k&(%PC%{07p_^G&Zcc}Qazg`yH2@eV5k3F_ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/sizer/nw-handle.gif b/examples/ext/resources/images/vista/sizer/nw-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..d39b0c38d8994139e389a7da016506e0537aac66 GIT binary patch literal 853 zcmV-b1FHN-Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ow0I>-iNU)&6g9s7+`?qajID-FBp^Au# f;5LcjBtrZbZk)Mu5G9&JmyTdYROiyE3kU!^<_nt% literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/sizer/s-handle-dark.gif b/examples/ext/resources/images/vista/sizer/s-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..ddc2e18ce48da6338fb4e065effd31f769ae3e34 GIT binary patch literal 1060 zcmZ?wbhEHbyui-I(9Qq?YgWws|NlRjIZBL%z{m;##h)z9ARp_12vDA2;P}tL$RXpg zVZp&>4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8PHh8W@=7yR~vTWL;hzu{rDR zsjaK8uTMDKCF{Ly&CSgjmsiD}{=Bkb72~~Kt-q(Oy}P^O^Q*h3x39myzk!)s&S%Gl z#F1=;#XNk%w1VbBK(0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui0MG{t000R80M!W`NU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVZ2ANwTELlPFWFT*({Vj%bu;+?Z0rgaihAOo3`)Yz=I1PPQ1ABU*OP@}?y7lYWvuoeZy}S4C;KPgmA5Xr#`Sa-0t6$H)z5Dm@7rtA2$K=XW)SdCaB+*pMVA`=%9oaYUrVeCaUP7j5g}%qmV`_>7ZqiaYU-(|rmE_ythVavtFXocie*3mJC`c7>Hq)$ literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/sizer/se-handle-dark.gif b/examples/ext/resources/images/vista/sizer/se-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a678e67fd6edad35c463cb6d96b05fc9d6e89c8 GIT binary patch literal 838 zcmZ?wbhEHb6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ow0M(^ChYD3VYzVQXLuanwzl7M%nHv}G f-@}9j!xh{H(V;_#75{Cs2(hHelPFV`3^a literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/sizer/sw-handle-dark.gif b/examples/ext/resources/images/vista/sizer/sw-handle-dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..937102c6b23e59f512f74b5393378ced56e006c9 GIT binary patch literal 839 zcmZ?wbhEHb literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/sizer/sw-handle.gif b/examples/ext/resources/images/vista/sizer/sw-handle.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9e2f563a037e362e69290dff5c19f0316f4659b GIT binary patch literal 855 zcmV-d1E~B*Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Oy0I>b#?Xj_V)Gl_4D&fNJvOYNy*5_$jQmc&CSir%PS}-C@d^2 zDJdx{E32%mtg5Q2t*x!EuWxEmpg2F=$T!MCXKW;pD p+|RbvM@36v9K^$0{|0b#?Xj_V)Gl_4D%!4h~L8NJvRZ$;ima$;rvh&CScpD<~)^ zEG#T3DJd%}tE{Z7s;a83t*x)GZ)|LAYHDh3ZfD!o=;-L|?Ck03VHgFYAux18 zK=CIF(6Rp+bU;o9tx;JQ*%5wKRY?ytoYTPlbe^b&9Q6dlJ&ZxbYYRl zWG&sQl9iX22Sl6odTm`5+7rA!>+Y$q3D?#o91i-cwQWu0qLlNiVzZ5PZ*MOM-qq{9 zJ@5F=vd^!2JIdGJ-yfIAB+V51M$)UOZ?PaMO6$A`+JIuvH>$MPeJX z)q{ua3T+yXI#i}*JnGa~w&GEj&bAkix($wLJnk{#J8_`b;@OJFeKy}-Jnna3(|j_) zMJ)5lL=UxTv)Kj5G@s8Yxt95SZpE{e&*#;Adzn7}f~3NW1ubG(FBW#Ft$MMj$L!UM#S`4L zUM`sumi2P!G`6mn%jT55dbxZ-o7SrpJx<@BuUxTg)vHx&w!M0_y2R;!`++rEu4TPm zyW`oa*X#Ctd-Zz#0XFS78;*!&zu9;~j{7dt8MD`KHeYble!JyLSoYhkH_}$W-FBz! z_1oUX=|YP3k7uj%_g%1k@P0o7yUvFL zEaEvI4sxik`EZEG{LP2M0`58=j|e%7A3Q3NzUJdGnesOuk1Mq6d^({rJ?GO&jpb`T zozhuv^MJ+RxX$M@Cf9R5pS5_t=JPq5?{7YzcVO53a=}I1b_=UGL&3pIKIU(~Tn=#8 z{dy%NJooF>i1f8zuf>$V{dzs2*!SQKE|v)gZ)PlC`|VcF_P5_|7aZ69ey8Mm?)SSD z&)0sxSMyq}w}F9`Md8PT7V*3v4?EP?{dm-4{_e-)3GRA7pG*nQ`}uU5xPyZOgEau_ C3isjw literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/tabs/tab-btm-left-bg.gif b/examples/ext/resources/images/vista/tabs/tab-btm-left-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d81e54e1043facc21074c0e90417f108e0a53f0 GIT binary patch literal 895 zcmZ?wbhEHbWM(j8XlGyu4h~L8NJvjl@9F88JbCht9Xs|PKD__%k^M)2=;(n12M!)Q zc>n(W>$e`DIgJ9J(BFZRLb%kS$iPx55vW@VhJMC>~O zX@@{iC=?ov#$Yf60)a>*ve|4tpDz#yghHWACX;T-w|7-CrBkW+8x3~8;fZy+jeBgtD|FMC?K4{>bAA)%Q@qH7J z5I-cmDLQ9zP}mZ30A9K!pm;f(>AF2*tFYuPw0i+sEL|4 zOW#*+j-y58@8C?v-w&@!=w+Of$Zb|#C7E!ZHD1bTbad8_vL-6pn*5S|BD@tZ`3W-~OC@{=r4wGZ*-J8Yf%haXc2esLOxo5})g{ zhoqI1Ncg-xk5#q&;Lw6qcr!w?t$mDq24) zs#g3QUDZ)}^V530qCK`PQQ2{%uUh#_B4tF`iD2rLUB|_VR|vq@Xw~fu?TG45rdzM- zJ`i;^}%aA^^{TbGb0l; zbFAWI3)i`cv+%syt_l1BCuo_41S6~hXjH9L7?QxSJ`YPbT164ri0|frLbUBgG=^al z!)_RD^Rev+`@)g_TKi%mm0@3kM@=>dMb9A|E2+|2$7+U-;aJP`7#)%`!AR%&xhQ<< zpU~7g;Y(Pm$+?lAjdZ;#D8{?~D#47oHcM}qTvBv9k}2H}>$w$NO&xP@)v`?P?YeoS zXQy6@_q=J;jd^yPJV$xykbPljfxI>9npe@0Fz!_n(#>8~PxdjNy0`e6Pjl~bOa$c1 F{{Xv+AMOAE literal 0 HcmV?d00001 diff --git a/examples/ext/resources/images/vista/tabs/tab-sprite.gif b/examples/ext/resources/images/vista/tabs/tab-sprite.gif new file mode 100644 index 0000000000000000000000000000000000000000..a16eedb822c1d852020d7c58a40307659ad1f8ee GIT binary patch literal 3150 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 literal 0 HcmV?d00001 diff --git a/examples/ext/resources/resources.jsb b/examples/ext/resources/resources.jsb new file mode 100644 index 0000000..317413b --- /dev/null +++ b/examples/ext/resources/resources.jsb @@ -0,0 +1,563 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- 2.39.2