lpmp 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (636) hide show
  1. data/LICENSE +3 -0
  2. data/README +3 -0
  3. data/Rakefile +45 -0
  4. data/bin/lpmp +107 -0
  5. data/config/help.yaml +1 -0
  6. data/config/hosts.yaml +2 -0
  7. data/config/log.yaml +1 -0
  8. data/config/memcache.yaml +5 -0
  9. data/erb/index.erb +62 -0
  10. data/lib/bg_pull/caichen.rb +199 -0
  11. data/lib/bg_pull/lpmp.rb +45 -0
  12. data/lib/exception.rb +8 -0
  13. data/lib/lpmp.rb +53 -0
  14. data/lib/pull/lpmp.rb +355 -0
  15. data/lib/remote_lmp.rb +129 -0
  16. data/lib/utils.rb +14 -0
  17. data/lib/xq_push/caichen.rb +174 -0
  18. data/lib/xq_push/lpmp.rb +96 -0
  19. data/log/lpmp1st.log +1 -0
  20. data/public/css/ext-portal.css +40 -0
  21. data/public/css/lpmp.css +6 -0
  22. data/public/designer/caichen.epj +1 -0
  23. data/public/designer/hostmonitor.epj +1 -0
  24. data/public/ext-3.0.0/INCLUDE_ORDER.txt +35 -0
  25. data/public/ext-3.0.0/adapter/ext/ext-base-debug.js +3589 -0
  26. data/public/ext-3.0.0/adapter/ext/ext-base.js +7 -0
  27. data/public/ext-3.0.0/adapter/jquery/ext-jquery-adapter-debug.js +2292 -0
  28. data/public/ext-3.0.0/adapter/jquery/ext-jquery-adapter.js +7 -0
  29. data/public/ext-3.0.0/adapter/prototype/ext-prototype-adapter-debug.js +2346 -0
  30. data/public/ext-3.0.0/adapter/prototype/ext-prototype-adapter.js +7 -0
  31. data/public/ext-3.0.0/adapter/yui/ext-yui-adapter-debug.js +2136 -0
  32. data/public/ext-3.0.0/adapter/yui/ext-yui-adapter.js +7 -0
  33. data/public/ext-3.0.0/ext-all-debug.js +65610 -0
  34. data/public/ext-3.0.0/ext-all.js +11 -0
  35. data/public/ext-3.0.0/license.txt +42 -0
  36. data/public/ext-3.0.0/pkgs/cmp-foundation-debug.js +11287 -0
  37. data/public/ext-3.0.0/pkgs/cmp-foundation.js +7 -0
  38. data/public/ext-3.0.0/pkgs/data-foundation-debug.js +3853 -0
  39. data/public/ext-3.0.0/pkgs/data-foundation.js +7 -0
  40. data/public/ext-3.0.0/pkgs/data-grouping-debug.js +139 -0
  41. data/public/ext-3.0.0/pkgs/data-grouping.js +7 -0
  42. data/public/ext-3.0.0/pkgs/data-json-debug.js +582 -0
  43. data/public/ext-3.0.0/pkgs/data-json.js +7 -0
  44. data/public/ext-3.0.0/pkgs/data-list-views-debug.js +1278 -0
  45. data/public/ext-3.0.0/pkgs/data-list-views.js +7 -0
  46. data/public/ext-3.0.0/pkgs/data-xml-debug.js +234 -0
  47. data/public/ext-3.0.0/pkgs/data-xml.js +7 -0
  48. data/public/ext-3.0.0/pkgs/direct-debug.js +1121 -0
  49. data/public/ext-3.0.0/pkgs/direct.js +7 -0
  50. data/public/ext-3.0.0/pkgs/ext-dd-debug.js +4567 -0
  51. data/public/ext-3.0.0/pkgs/ext-dd.js +7 -0
  52. data/public/ext-3.0.0/pkgs/ext-foundation-debug.js +13417 -0
  53. data/public/ext-3.0.0/pkgs/ext-foundation.js +7 -0
  54. data/public/ext-3.0.0/pkgs/pkg-buttons-debug.js +1060 -0
  55. data/public/ext-3.0.0/pkgs/pkg-buttons.js +7 -0
  56. data/public/ext-3.0.0/pkgs/pkg-charts-debug.js +1621 -0
  57. data/public/ext-3.0.0/pkgs/pkg-charts.js +10 -0
  58. data/public/ext-3.0.0/pkgs/pkg-forms-debug.js +7661 -0
  59. data/public/ext-3.0.0/pkgs/pkg-forms.js +7 -0
  60. data/public/ext-3.0.0/pkgs/pkg-grid-editor-debug.js +560 -0
  61. data/public/ext-3.0.0/pkgs/pkg-grid-editor.js +7 -0
  62. data/public/ext-3.0.0/pkgs/pkg-grid-foundation-debug.js +4765 -0
  63. data/public/ext-3.0.0/pkgs/pkg-grid-foundation.js +7 -0
  64. data/public/ext-3.0.0/pkgs/pkg-grid-grouping-debug.js +517 -0
  65. data/public/ext-3.0.0/pkgs/pkg-grid-grouping.js +7 -0
  66. data/public/ext-3.0.0/pkgs/pkg-grid-property-debug.js +370 -0
  67. data/public/ext-3.0.0/pkgs/pkg-grid-property.js +7 -0
  68. data/public/ext-3.0.0/pkgs/pkg-history-debug.js +203 -0
  69. data/public/ext-3.0.0/pkgs/pkg-history.js +7 -0
  70. data/public/ext-3.0.0/pkgs/pkg-menu-debug.js +1628 -0
  71. data/public/ext-3.0.0/pkgs/pkg-menu.js +7 -0
  72. data/public/ext-3.0.0/pkgs/pkg-tabs-debug.js +1100 -0
  73. data/public/ext-3.0.0/pkgs/pkg-tabs.js +7 -0
  74. data/public/ext-3.0.0/pkgs/pkg-tips-debug.js +994 -0
  75. data/public/ext-3.0.0/pkgs/pkg-tips.js +7 -0
  76. data/public/ext-3.0.0/pkgs/pkg-toolbars-debug.js +1374 -0
  77. data/public/ext-3.0.0/pkgs/pkg-toolbars.js +7 -0
  78. data/public/ext-3.0.0/pkgs/pkg-tree-debug.js +4522 -0
  79. data/public/ext-3.0.0/pkgs/pkg-tree.js +7 -0
  80. data/public/ext-3.0.0/pkgs/resizable-debug.js +760 -0
  81. data/public/ext-3.0.0/pkgs/resizable.js +7 -0
  82. data/public/ext-3.0.0/pkgs/state-debug.js +274 -0
  83. data/public/ext-3.0.0/pkgs/state.js +7 -0
  84. data/public/ext-3.0.0/pkgs/window-debug.js +1888 -0
  85. data/public/ext-3.0.0/pkgs/window.js +7 -0
  86. data/public/ext-3.0.0/resources/charts.swf +0 -0
  87. data/public/ext-3.0.0/resources/css/README.txt +3 -0
  88. data/public/ext-3.0.0/resources/css/ext-all-notheme.css +5345 -0
  89. data/public/ext-3.0.0/resources/css/ext-all.css +6990 -0
  90. data/public/ext-3.0.0/resources/css/reset-min.css +7 -0
  91. data/public/ext-3.0.0/resources/css/structure/borders.css +54 -0
  92. data/public/ext-3.0.0/resources/css/structure/box.css +80 -0
  93. data/public/ext-3.0.0/resources/css/structure/button.css +440 -0
  94. data/public/ext-3.0.0/resources/css/structure/combo.css +45 -0
  95. data/public/ext-3.0.0/resources/css/structure/core.css +326 -0
  96. data/public/ext-3.0.0/resources/css/structure/date-picker.css +265 -0
  97. data/public/ext-3.0.0/resources/css/structure/dd.css +61 -0
  98. data/public/ext-3.0.0/resources/css/structure/debug.css +26 -0
  99. data/public/ext-3.0.0/resources/css/structure/dialog.css +62 -0
  100. data/public/ext-3.0.0/resources/css/structure/editor.css +92 -0
  101. data/public/ext-3.0.0/resources/css/structure/form.css +562 -0
  102. data/public/ext-3.0.0/resources/css/structure/grid.css +552 -0
  103. data/public/ext-3.0.0/resources/css/structure/layout.css +296 -0
  104. data/public/ext-3.0.0/resources/css/structure/list-view.css +85 -0
  105. data/public/ext-3.0.0/resources/css/structure/menu.css +205 -0
  106. data/public/ext-3.0.0/resources/css/structure/panel-reset.css +130 -0
  107. data/public/ext-3.0.0/resources/css/structure/panel.css +468 -0
  108. data/public/ext-3.0.0/resources/css/structure/progress.css +42 -0
  109. data/public/ext-3.0.0/resources/css/structure/qtips.css +153 -0
  110. data/public/ext-3.0.0/resources/css/structure/reset.css +7 -0
  111. data/public/ext-3.0.0/resources/css/structure/resizable.css +149 -0
  112. data/public/ext-3.0.0/resources/css/structure/slider.css +103 -0
  113. data/public/ext-3.0.0/resources/css/structure/tabs.css +372 -0
  114. data/public/ext-3.0.0/resources/css/structure/toolbar.css +259 -0
  115. data/public/ext-3.0.0/resources/css/structure/tree.css +203 -0
  116. data/public/ext-3.0.0/resources/css/structure/window.css +222 -0
  117. data/public/ext-3.0.0/resources/css/visual/borders.css +25 -0
  118. data/public/ext-3.0.0/resources/css/visual/box.css +74 -0
  119. data/public/ext-3.0.0/resources/css/visual/button.css +94 -0
  120. data/public/ext-3.0.0/resources/css/visual/combo.css +43 -0
  121. data/public/ext-3.0.0/resources/css/visual/core.css +76 -0
  122. data/public/ext-3.0.0/resources/css/visual/date-picker.css +143 -0
  123. data/public/ext-3.0.0/resources/css/visual/dd.css +29 -0
  124. data/public/ext-3.0.0/resources/css/visual/debug.css +24 -0
  125. data/public/ext-3.0.0/resources/css/visual/dialog.css +34 -0
  126. data/public/ext-3.0.0/resources/css/visual/editor.css +13 -0
  127. data/public/ext-3.0.0/resources/css/visual/form.css +117 -0
  128. data/public/ext-3.0.0/resources/css/visual/grid.css +272 -0
  129. data/public/ext-3.0.0/resources/css/visual/layout.css +53 -0
  130. data/public/ext-3.0.0/resources/css/visual/list-view.css +37 -0
  131. data/public/ext-3.0.0/resources/css/visual/menu.css +82 -0
  132. data/public/ext-3.0.0/resources/css/visual/panel.css +87 -0
  133. data/public/ext-3.0.0/resources/css/visual/progress.css +32 -0
  134. data/public/ext-3.0.0/resources/css/visual/qtips.css +44 -0
  135. data/public/ext-3.0.0/resources/css/visual/resizable.css +43 -0
  136. data/public/ext-3.0.0/resources/css/visual/slider.css +21 -0
  137. data/public/ext-3.0.0/resources/css/visual/tabs.css +119 -0
  138. data/public/ext-3.0.0/resources/css/visual/toolbar.css +103 -0
  139. data/public/ext-3.0.0/resources/css/visual/tree.css +157 -0
  140. data/public/ext-3.0.0/resources/css/visual/window.css +86 -0
  141. data/public/ext-3.0.0/resources/css/xtheme-blue.css +1652 -0
  142. data/public/ext-3.0.0/resources/expressinstall.swf +0 -0
  143. data/public/ext-3.0.0/resources/images/default/box/corners-blue.gif +0 -0
  144. data/public/ext-3.0.0/resources/images/default/box/corners.gif +0 -0
  145. data/public/ext-3.0.0/resources/images/default/box/l-blue.gif +0 -0
  146. data/public/ext-3.0.0/resources/images/default/box/l.gif +0 -0
  147. data/public/ext-3.0.0/resources/images/default/box/r-blue.gif +0 -0
  148. data/public/ext-3.0.0/resources/images/default/box/r.gif +0 -0
  149. data/public/ext-3.0.0/resources/images/default/box/tb-blue.gif +0 -0
  150. data/public/ext-3.0.0/resources/images/default/box/tb.gif +0 -0
  151. data/public/ext-3.0.0/resources/images/default/button/arrow.gif +0 -0
  152. data/public/ext-3.0.0/resources/images/default/button/btn.gif +0 -0
  153. data/public/ext-3.0.0/resources/images/default/button/group-cs.gif +0 -0
  154. data/public/ext-3.0.0/resources/images/default/button/group-lr.gif +0 -0
  155. data/public/ext-3.0.0/resources/images/default/button/group-tb.gif +0 -0
  156. data/public/ext-3.0.0/resources/images/default/button/s-arrow-b-noline.gif +0 -0
  157. data/public/ext-3.0.0/resources/images/default/button/s-arrow-b.gif +0 -0
  158. data/public/ext-3.0.0/resources/images/default/button/s-arrow-bo.gif +0 -0
  159. data/public/ext-3.0.0/resources/images/default/button/s-arrow-noline.gif +0 -0
  160. data/public/ext-3.0.0/resources/images/default/button/s-arrow-o.gif +0 -0
  161. data/public/ext-3.0.0/resources/images/default/button/s-arrow.gif +0 -0
  162. data/public/ext-3.0.0/resources/images/default/dd/drop-add.gif +0 -0
  163. data/public/ext-3.0.0/resources/images/default/dd/drop-no.gif +0 -0
  164. data/public/ext-3.0.0/resources/images/default/dd/drop-yes.gif +0 -0
  165. data/public/ext-3.0.0/resources/images/default/editor/tb-sprite.gif +0 -0
  166. data/public/ext-3.0.0/resources/images/default/form/checkbox.gif +0 -0
  167. data/public/ext-3.0.0/resources/images/default/form/clear-trigger.gif +0 -0
  168. data/public/ext-3.0.0/resources/images/default/form/clear-trigger.psd +0 -0
  169. data/public/ext-3.0.0/resources/images/default/form/date-trigger.gif +0 -0
  170. data/public/ext-3.0.0/resources/images/default/form/date-trigger.psd +0 -0
  171. data/public/ext-3.0.0/resources/images/default/form/error-tip-corners.gif +0 -0
  172. data/public/ext-3.0.0/resources/images/default/form/exclamation.gif +0 -0
  173. data/public/ext-3.0.0/resources/images/default/form/radio.gif +0 -0
  174. data/public/ext-3.0.0/resources/images/default/form/search-trigger.gif +0 -0
  175. data/public/ext-3.0.0/resources/images/default/form/search-trigger.psd +0 -0
  176. data/public/ext-3.0.0/resources/images/default/form/text-bg.gif +0 -0
  177. data/public/ext-3.0.0/resources/images/default/form/trigger-tpl.gif +0 -0
  178. data/public/ext-3.0.0/resources/images/default/form/trigger.gif +0 -0
  179. data/public/ext-3.0.0/resources/images/default/form/trigger.psd +0 -0
  180. data/public/ext-3.0.0/resources/images/default/gradient-bg.gif +0 -0
  181. data/public/ext-3.0.0/resources/images/default/grid/arrow-left-white.gif +0 -0
  182. data/public/ext-3.0.0/resources/images/default/grid/arrow-right-white.gif +0 -0
  183. data/public/ext-3.0.0/resources/images/default/grid/col-move-bottom.gif +0 -0
  184. data/public/ext-3.0.0/resources/images/default/grid/col-move-top.gif +0 -0
  185. data/public/ext-3.0.0/resources/images/default/grid/columns.gif +0 -0
  186. data/public/ext-3.0.0/resources/images/default/grid/dirty.gif +0 -0
  187. data/public/ext-3.0.0/resources/images/default/grid/done.gif +0 -0
  188. data/public/ext-3.0.0/resources/images/default/grid/drop-no.gif +0 -0
  189. data/public/ext-3.0.0/resources/images/default/grid/drop-yes.gif +0 -0
  190. data/public/ext-3.0.0/resources/images/default/grid/footer-bg.gif +0 -0
  191. data/public/ext-3.0.0/resources/images/default/grid/grid-blue-hd.gif +0 -0
  192. data/public/ext-3.0.0/resources/images/default/grid/grid-blue-split.gif +0 -0
  193. data/public/ext-3.0.0/resources/images/default/grid/grid-hrow.gif +0 -0
  194. data/public/ext-3.0.0/resources/images/default/grid/grid-loading.gif +0 -0
  195. data/public/ext-3.0.0/resources/images/default/grid/grid-split.gif +0 -0
  196. data/public/ext-3.0.0/resources/images/default/grid/grid-vista-hd.gif +0 -0
  197. data/public/ext-3.0.0/resources/images/default/grid/grid3-hd-btn.gif +0 -0
  198. data/public/ext-3.0.0/resources/images/default/grid/grid3-hrow-over.gif +0 -0
  199. data/public/ext-3.0.0/resources/images/default/grid/grid3-hrow.gif +0 -0
  200. data/public/ext-3.0.0/resources/images/default/grid/grid3-special-col-bg.gif +0 -0
  201. data/public/ext-3.0.0/resources/images/default/grid/grid3-special-col-sel-bg.gif +0 -0
  202. data/public/ext-3.0.0/resources/images/default/grid/group-by.gif +0 -0
  203. data/public/ext-3.0.0/resources/images/default/grid/group-collapse.gif +0 -0
  204. data/public/ext-3.0.0/resources/images/default/grid/group-expand-sprite.gif +0 -0
  205. data/public/ext-3.0.0/resources/images/default/grid/group-expand.gif +0 -0
  206. data/public/ext-3.0.0/resources/images/default/grid/hd-pop.gif +0 -0
  207. data/public/ext-3.0.0/resources/images/default/grid/hmenu-asc.gif +0 -0
  208. data/public/ext-3.0.0/resources/images/default/grid/hmenu-desc.gif +0 -0
  209. data/public/ext-3.0.0/resources/images/default/grid/hmenu-lock.gif +0 -0
  210. data/public/ext-3.0.0/resources/images/default/grid/hmenu-lock.png +0 -0
  211. data/public/ext-3.0.0/resources/images/default/grid/hmenu-unlock.gif +0 -0
  212. data/public/ext-3.0.0/resources/images/default/grid/hmenu-unlock.png +0 -0
  213. data/public/ext-3.0.0/resources/images/default/grid/invalid_line.gif +0 -0
  214. data/public/ext-3.0.0/resources/images/default/grid/loading.gif +0 -0
  215. data/public/ext-3.0.0/resources/images/default/grid/mso-hd.gif +0 -0
  216. data/public/ext-3.0.0/resources/images/default/grid/nowait.gif +0 -0
  217. data/public/ext-3.0.0/resources/images/default/grid/page-first-disabled.gif +0 -0
  218. data/public/ext-3.0.0/resources/images/default/grid/page-first.gif +0 -0
  219. data/public/ext-3.0.0/resources/images/default/grid/page-last-disabled.gif +0 -0
  220. data/public/ext-3.0.0/resources/images/default/grid/page-last.gif +0 -0
  221. data/public/ext-3.0.0/resources/images/default/grid/page-next-disabled.gif +0 -0
  222. data/public/ext-3.0.0/resources/images/default/grid/page-next.gif +0 -0
  223. data/public/ext-3.0.0/resources/images/default/grid/page-prev-disabled.gif +0 -0
  224. data/public/ext-3.0.0/resources/images/default/grid/page-prev.gif +0 -0
  225. data/public/ext-3.0.0/resources/images/default/grid/pick-button.gif +0 -0
  226. data/public/ext-3.0.0/resources/images/default/grid/refresh.gif +0 -0
  227. data/public/ext-3.0.0/resources/images/default/grid/row-check-sprite.gif +0 -0
  228. data/public/ext-3.0.0/resources/images/default/grid/row-expand-sprite.gif +0 -0
  229. data/public/ext-3.0.0/resources/images/default/grid/row-over.gif +0 -0
  230. data/public/ext-3.0.0/resources/images/default/grid/row-sel.gif +0 -0
  231. data/public/ext-3.0.0/resources/images/default/grid/sort-hd.gif +0 -0
  232. data/public/ext-3.0.0/resources/images/default/grid/sort_asc.gif +0 -0
  233. data/public/ext-3.0.0/resources/images/default/grid/sort_desc.gif +0 -0
  234. data/public/ext-3.0.0/resources/images/default/grid/wait.gif +0 -0
  235. data/public/ext-3.0.0/resources/images/default/layout/collapse.gif +0 -0
  236. data/public/ext-3.0.0/resources/images/default/layout/expand.gif +0 -0
  237. data/public/ext-3.0.0/resources/images/default/layout/gradient-bg.gif +0 -0
  238. data/public/ext-3.0.0/resources/images/default/layout/mini-bottom.gif +0 -0
  239. data/public/ext-3.0.0/resources/images/default/layout/mini-left.gif +0 -0
  240. data/public/ext-3.0.0/resources/images/default/layout/mini-right.gif +0 -0
  241. data/public/ext-3.0.0/resources/images/default/layout/mini-top.gif +0 -0
  242. data/public/ext-3.0.0/resources/images/default/layout/ns-collapse.gif +0 -0
  243. data/public/ext-3.0.0/resources/images/default/layout/ns-expand.gif +0 -0
  244. data/public/ext-3.0.0/resources/images/default/layout/panel-close.gif +0 -0
  245. data/public/ext-3.0.0/resources/images/default/layout/panel-title-bg.gif +0 -0
  246. data/public/ext-3.0.0/resources/images/default/layout/panel-title-light-bg.gif +0 -0
  247. data/public/ext-3.0.0/resources/images/default/layout/stick.gif +0 -0
  248. data/public/ext-3.0.0/resources/images/default/layout/stuck.gif +0 -0
  249. data/public/ext-3.0.0/resources/images/default/layout/tab-close-on.gif +0 -0
  250. data/public/ext-3.0.0/resources/images/default/layout/tab-close.gif +0 -0
  251. data/public/ext-3.0.0/resources/images/default/menu/checked.gif +0 -0
  252. data/public/ext-3.0.0/resources/images/default/menu/group-checked.gif +0 -0
  253. data/public/ext-3.0.0/resources/images/default/menu/item-over.gif +0 -0
  254. data/public/ext-3.0.0/resources/images/default/menu/menu-parent.gif +0 -0
  255. data/public/ext-3.0.0/resources/images/default/menu/menu.gif +0 -0
  256. data/public/ext-3.0.0/resources/images/default/menu/unchecked.gif +0 -0
  257. data/public/ext-3.0.0/resources/images/default/panel/corners-sprite.gif +0 -0
  258. data/public/ext-3.0.0/resources/images/default/panel/left-right.gif +0 -0
  259. data/public/ext-3.0.0/resources/images/default/panel/light-hd.gif +0 -0
  260. data/public/ext-3.0.0/resources/images/default/panel/tool-sprite-tpl.gif +0 -0
  261. data/public/ext-3.0.0/resources/images/default/panel/tool-sprites.gif +0 -0
  262. data/public/ext-3.0.0/resources/images/default/panel/tools-sprites-trans.gif +0 -0
  263. data/public/ext-3.0.0/resources/images/default/panel/top-bottom.gif +0 -0
  264. data/public/ext-3.0.0/resources/images/default/panel/top-bottom.png +0 -0
  265. data/public/ext-3.0.0/resources/images/default/panel/white-corners-sprite.gif +0 -0
  266. data/public/ext-3.0.0/resources/images/default/panel/white-left-right.gif +0 -0
  267. data/public/ext-3.0.0/resources/images/default/panel/white-top-bottom.gif +0 -0
  268. data/public/ext-3.0.0/resources/images/default/progress/progress-bg.gif +0 -0
  269. data/public/ext-3.0.0/resources/images/default/qtip/bg.gif +0 -0
  270. data/public/ext-3.0.0/resources/images/default/qtip/close.gif +0 -0
  271. data/public/ext-3.0.0/resources/images/default/qtip/tip-anchor-sprite.gif +0 -0
  272. data/public/ext-3.0.0/resources/images/default/qtip/tip-sprite.gif +0 -0
  273. data/public/ext-3.0.0/resources/images/default/s.gif +0 -0
  274. data/public/ext-3.0.0/resources/images/default/shadow-c.png +0 -0
  275. data/public/ext-3.0.0/resources/images/default/shadow-lr.png +0 -0
  276. data/public/ext-3.0.0/resources/images/default/shadow.png +0 -0
  277. data/public/ext-3.0.0/resources/images/default/shared/blue-loading.gif +0 -0
  278. data/public/ext-3.0.0/resources/images/default/shared/calendar.gif +0 -0
  279. data/public/ext-3.0.0/resources/images/default/shared/glass-bg.gif +0 -0
  280. data/public/ext-3.0.0/resources/images/default/shared/hd-sprite.gif +0 -0
  281. data/public/ext-3.0.0/resources/images/default/shared/large-loading.gif +0 -0
  282. data/public/ext-3.0.0/resources/images/default/shared/left-btn.gif +0 -0
  283. data/public/ext-3.0.0/resources/images/default/shared/loading-balls.gif +0 -0
  284. data/public/ext-3.0.0/resources/images/default/shared/right-btn.gif +0 -0
  285. data/public/ext-3.0.0/resources/images/default/shared/warning.gif +0 -0
  286. data/public/ext-3.0.0/resources/images/default/sizer/e-handle-dark.gif +0 -0
  287. data/public/ext-3.0.0/resources/images/default/sizer/e-handle.gif +0 -0
  288. data/public/ext-3.0.0/resources/images/default/sizer/ne-handle-dark.gif +0 -0
  289. data/public/ext-3.0.0/resources/images/default/sizer/ne-handle.gif +0 -0
  290. data/public/ext-3.0.0/resources/images/default/sizer/nw-handle-dark.gif +0 -0
  291. data/public/ext-3.0.0/resources/images/default/sizer/nw-handle.gif +0 -0
  292. data/public/ext-3.0.0/resources/images/default/sizer/s-handle-dark.gif +0 -0
  293. data/public/ext-3.0.0/resources/images/default/sizer/s-handle.gif +0 -0
  294. data/public/ext-3.0.0/resources/images/default/sizer/se-handle-dark.gif +0 -0
  295. data/public/ext-3.0.0/resources/images/default/sizer/se-handle.gif +0 -0
  296. data/public/ext-3.0.0/resources/images/default/sizer/square.gif +0 -0
  297. data/public/ext-3.0.0/resources/images/default/sizer/sw-handle-dark.gif +0 -0
  298. data/public/ext-3.0.0/resources/images/default/sizer/sw-handle.gif +0 -0
  299. data/public/ext-3.0.0/resources/images/default/slider/slider-bg.png +0 -0
  300. data/public/ext-3.0.0/resources/images/default/slider/slider-thumb.png +0 -0
  301. data/public/ext-3.0.0/resources/images/default/slider/slider-v-bg.png +0 -0
  302. data/public/ext-3.0.0/resources/images/default/slider/slider-v-thumb.png +0 -0
  303. data/public/ext-3.0.0/resources/images/default/tabs/scroll-left.gif +0 -0
  304. data/public/ext-3.0.0/resources/images/default/tabs/scroll-right.gif +0 -0
  305. data/public/ext-3.0.0/resources/images/default/tabs/scroller-bg.gif +0 -0
  306. data/public/ext-3.0.0/resources/images/default/tabs/tab-btm-inactive-left-bg.gif +0 -0
  307. data/public/ext-3.0.0/resources/images/default/tabs/tab-btm-inactive-right-bg.gif +0 -0
  308. data/public/ext-3.0.0/resources/images/default/tabs/tab-btm-left-bg.gif +0 -0
  309. data/public/ext-3.0.0/resources/images/default/tabs/tab-btm-right-bg.gif +0 -0
  310. data/public/ext-3.0.0/resources/images/default/tabs/tab-close.gif +0 -0
  311. data/public/ext-3.0.0/resources/images/default/tabs/tab-strip-bg.gif +0 -0
  312. data/public/ext-3.0.0/resources/images/default/tabs/tab-strip-bg.png +0 -0
  313. data/public/ext-3.0.0/resources/images/default/tabs/tab-strip-btm-bg.gif +0 -0
  314. data/public/ext-3.0.0/resources/images/default/tabs/tabs-sprite.gif +0 -0
  315. data/public/ext-3.0.0/resources/images/default/toolbar/bg.gif +0 -0
  316. data/public/ext-3.0.0/resources/images/default/toolbar/btn-arrow-light.gif +0 -0
  317. data/public/ext-3.0.0/resources/images/default/toolbar/btn-arrow.gif +0 -0
  318. data/public/ext-3.0.0/resources/images/default/toolbar/btn-over-bg.gif +0 -0
  319. data/public/ext-3.0.0/resources/images/default/toolbar/gray-bg.gif +0 -0
  320. data/public/ext-3.0.0/resources/images/default/toolbar/more.gif +0 -0
  321. data/public/ext-3.0.0/resources/images/default/toolbar/tb-bg.gif +0 -0
  322. data/public/ext-3.0.0/resources/images/default/toolbar/tb-btn-sprite.gif +0 -0
  323. data/public/ext-3.0.0/resources/images/default/toolbar/tb-xl-btn-sprite.gif +0 -0
  324. data/public/ext-3.0.0/resources/images/default/toolbar/tb-xl-sep.gif +0 -0
  325. data/public/ext-3.0.0/resources/images/default/tree/arrows.gif +0 -0
  326. data/public/ext-3.0.0/resources/images/default/tree/drop-add.gif +0 -0
  327. data/public/ext-3.0.0/resources/images/default/tree/drop-between.gif +0 -0
  328. data/public/ext-3.0.0/resources/images/default/tree/drop-no.gif +0 -0
  329. data/public/ext-3.0.0/resources/images/default/tree/drop-over.gif +0 -0
  330. data/public/ext-3.0.0/resources/images/default/tree/drop-under.gif +0 -0
  331. data/public/ext-3.0.0/resources/images/default/tree/drop-yes.gif +0 -0
  332. data/public/ext-3.0.0/resources/images/default/tree/elbow-end-minus-nl.gif +0 -0
  333. data/public/ext-3.0.0/resources/images/default/tree/elbow-end-minus.gif +0 -0
  334. data/public/ext-3.0.0/resources/images/default/tree/elbow-end-plus-nl.gif +0 -0
  335. data/public/ext-3.0.0/resources/images/default/tree/elbow-end-plus.gif +0 -0
  336. data/public/ext-3.0.0/resources/images/default/tree/elbow-end.gif +0 -0
  337. data/public/ext-3.0.0/resources/images/default/tree/elbow-line.gif +0 -0
  338. data/public/ext-3.0.0/resources/images/default/tree/elbow-minus-nl.gif +0 -0
  339. data/public/ext-3.0.0/resources/images/default/tree/elbow-minus.gif +0 -0
  340. data/public/ext-3.0.0/resources/images/default/tree/elbow-plus-nl.gif +0 -0
  341. data/public/ext-3.0.0/resources/images/default/tree/elbow-plus.gif +0 -0
  342. data/public/ext-3.0.0/resources/images/default/tree/elbow.gif +0 -0
  343. data/public/ext-3.0.0/resources/images/default/tree/folder-open.gif +0 -0
  344. data/public/ext-3.0.0/resources/images/default/tree/folder.gif +0 -0
  345. data/public/ext-3.0.0/resources/images/default/tree/leaf.gif +0 -0
  346. data/public/ext-3.0.0/resources/images/default/tree/loading.gif +0 -0
  347. data/public/ext-3.0.0/resources/images/default/tree/s.gif +0 -0
  348. data/public/ext-3.0.0/resources/images/default/window/icon-error.gif +0 -0
  349. data/public/ext-3.0.0/resources/images/default/window/icon-info.gif +0 -0
  350. data/public/ext-3.0.0/resources/images/default/window/icon-question.gif +0 -0
  351. data/public/ext-3.0.0/resources/images/default/window/icon-warning.gif +0 -0
  352. data/public/ext-3.0.0/resources/images/default/window/left-corners.png +0 -0
  353. data/public/ext-3.0.0/resources/images/default/window/left-corners.psd +0 -0
  354. data/public/ext-3.0.0/resources/images/default/window/left-right.png +0 -0
  355. data/public/ext-3.0.0/resources/images/default/window/left-right.psd +0 -0
  356. data/public/ext-3.0.0/resources/images/default/window/right-corners.png +0 -0
  357. data/public/ext-3.0.0/resources/images/default/window/right-corners.psd +0 -0
  358. data/public/ext-3.0.0/resources/images/default/window/top-bottom.png +0 -0
  359. data/public/ext-3.0.0/resources/images/default/window/top-bottom.psd +0 -0
  360. data/public/ext-3.0.0/resources/images/icon/chart.gif +0 -0
  361. data/public/ext-3.0.0/src/adapter/core/ext-base-ajax.js +371 -0
  362. data/public/ext-3.0.0/src/adapter/core/ext-base-anim-extra.js +301 -0
  363. data/public/ext-3.0.0/src/adapter/core/ext-base-anim.js +477 -0
  364. data/public/ext-3.0.0/src/adapter/core/ext-base-begin.js +18 -0
  365. data/public/ext-3.0.0/src/adapter/core/ext-base-dom.js +157 -0
  366. data/public/ext-3.0.0/src/adapter/core/ext-base-end.js +21 -0
  367. data/public/ext-3.0.0/src/adapter/core/ext-base-event.js +453 -0
  368. data/public/ext-3.0.0/src/adapter/core/ext-base-point.js +17 -0
  369. data/public/ext-3.0.0/src/adapter/core/ext-base-region.js +81 -0
  370. data/public/ext-3.0.0/src/adapter/ext-base-dom-more.js +9 -0
  371. data/public/ext-3.0.0/src/adapter/jquery-bridge.js +546 -0
  372. data/public/ext-3.0.0/src/adapter/prototype-bridge.js +600 -0
  373. data/public/ext-3.0.0/src/adapter/yui-bridge.js +390 -0
  374. data/public/ext-3.0.0/src/core/CompositeElement.js +136 -0
  375. data/public/ext-3.0.0/src/core/CompositeElementLite-more.js +102 -0
  376. data/public/ext-3.0.0/src/core/DomHelper-more.js +179 -0
  377. data/public/ext-3.0.0/src/core/Element-more.js +192 -0
  378. data/public/ext-3.0.0/src/core/Element.alignment.js +370 -0
  379. data/public/ext-3.0.0/src/core/Element.dd.js +46 -0
  380. data/public/ext-3.0.0/src/core/Element.fx-more.js +152 -0
  381. data/public/ext-3.0.0/src/core/Element.insertion-more.js +52 -0
  382. data/public/ext-3.0.0/src/core/Element.keys.js +48 -0
  383. data/public/ext-3.0.0/src/core/Element.legacy.js +42 -0
  384. data/public/ext-3.0.0/src/core/Element.position-more.js +165 -0
  385. data/public/ext-3.0.0/src/core/Element.scroll-more.js +110 -0
  386. data/public/ext-3.0.0/src/core/Element.style-more.js +318 -0
  387. data/public/ext-3.0.0/src/core/Error.js +81 -0
  388. data/public/ext-3.0.0/src/core/EventManager-more.js +334 -0
  389. data/public/ext-3.0.0/src/core/Ext-more.js +669 -0
  390. data/public/ext-3.0.0/src/core/Template-more.js +115 -0
  391. data/public/ext-3.0.0/src/core/core/CompositeElementLite.js +197 -0
  392. data/public/ext-3.0.0/src/core/core/DomHelper.js +378 -0
  393. data/public/ext-3.0.0/src/core/core/DomQuery.js +826 -0
  394. data/public/ext-3.0.0/src/core/core/Element.fx.js +324 -0
  395. data/public/ext-3.0.0/src/core/core/Element.insertion.js +147 -0
  396. data/public/ext-3.0.0/src/core/core/Element.js +945 -0
  397. data/public/ext-3.0.0/src/core/core/Element.position.js +303 -0
  398. data/public/ext-3.0.0/src/core/core/Element.scroll.js +58 -0
  399. data/public/ext-3.0.0/src/core/core/Element.style.js +439 -0
  400. data/public/ext-3.0.0/src/core/core/Element.traversal.js +176 -0
  401. data/public/ext-3.0.0/src/core/core/EventManager.js +623 -0
  402. data/public/ext-3.0.0/src/core/core/Ext.js +922 -0
  403. data/public/ext-3.0.0/src/core/core/Fx.js +1115 -0
  404. data/public/ext-3.0.0/src/core/core/Template.js +185 -0
  405. data/public/ext-3.0.0/src/data/Api.js +210 -0
  406. data/public/ext-3.0.0/src/data/ArrayReader.js +102 -0
  407. data/public/ext-3.0.0/src/data/ArrayStore.js +70 -0
  408. data/public/ext-3.0.0/src/data/DataField.js +249 -0
  409. data/public/ext-3.0.0/src/data/DataProxy.js +427 -0
  410. data/public/ext-3.0.0/src/data/DataReader.js +160 -0
  411. data/public/ext-3.0.0/src/data/DataWriter.js +201 -0
  412. data/public/ext-3.0.0/src/data/DirectProxy.js +141 -0
  413. data/public/ext-3.0.0/src/data/DirectStore.js +52 -0
  414. data/public/ext-3.0.0/src/data/GroupingStore.js +139 -0
  415. data/public/ext-3.0.0/src/data/HttpProxy.js +276 -0
  416. data/public/ext-3.0.0/src/data/JsonReader.js +311 -0
  417. data/public/ext-3.0.0/src/data/JsonStore.js +49 -0
  418. data/public/ext-3.0.0/src/data/JsonWriter.js +77 -0
  419. data/public/ext-3.0.0/src/data/MemoryProxy.js +69 -0
  420. data/public/ext-3.0.0/src/data/Record.js +400 -0
  421. data/public/ext-3.0.0/src/data/ScriptTagProxy.js +279 -0
  422. data/public/ext-3.0.0/src/data/SortTypes.js +91 -0
  423. data/public/ext-3.0.0/src/data/Store.js +1492 -0
  424. data/public/ext-3.0.0/src/data/StoreMgr.js +72 -0
  425. data/public/ext-3.0.0/src/data/Tree.js +785 -0
  426. data/public/ext-3.0.0/src/data/XmlReader.js +128 -0
  427. data/public/ext-3.0.0/src/data/XmlStore.js +75 -0
  428. data/public/ext-3.0.0/src/data/XmlWriter.js +45 -0
  429. data/public/ext-3.0.0/src/data/core/Connection.js +575 -0
  430. data/public/ext-3.0.0/src/dd/DDCore.js +2992 -0
  431. data/public/ext-3.0.0/src/dd/DragSource.js +365 -0
  432. data/public/ext-3.0.0/src/dd/DragTracker.js +217 -0
  433. data/public/ext-3.0.0/src/dd/DragZone.js +133 -0
  434. data/public/ext-3.0.0/src/dd/DropTarget.js +115 -0
  435. data/public/ext-3.0.0/src/dd/DropZone.js +262 -0
  436. data/public/ext-3.0.0/src/dd/Registry.js +127 -0
  437. data/public/ext-3.0.0/src/dd/ScrollManager.js +201 -0
  438. data/public/ext-3.0.0/src/dd/StatusProxy.js +171 -0
  439. data/public/ext-3.0.0/src/debug.js +906 -0
  440. data/public/ext-3.0.0/src/direct/Direct.js +235 -0
  441. data/public/ext-3.0.0/src/direct/Event.js +34 -0
  442. data/public/ext-3.0.0/src/direct/JsonProvider.js +45 -0
  443. data/public/ext-3.0.0/src/direct/PollingProvider.js +151 -0
  444. data/public/ext-3.0.0/src/direct/Provider.js +110 -0
  445. data/public/ext-3.0.0/src/direct/RemotingProvider.js +373 -0
  446. data/public/ext-3.0.0/src/direct/Transaction.js +32 -0
  447. data/public/ext-3.0.0/src/locale/ext-lang-af.js +184 -0
  448. data/public/ext-3.0.0/src/locale/ext-lang-bg.js +278 -0
  449. data/public/ext-3.0.0/src/locale/ext-lang-ca.js +315 -0
  450. data/public/ext-3.0.0/src/locale/ext-lang-cs.js +293 -0
  451. data/public/ext-3.0.0/src/locale/ext-lang-da.js +296 -0
  452. data/public/ext-3.0.0/src/locale/ext-lang-de.js +326 -0
  453. data/public/ext-3.0.0/src/locale/ext-lang-el_GR.js +309 -0
  454. data/public/ext-3.0.0/src/locale/ext-lang-en.js +335 -0
  455. data/public/ext-3.0.0/src/locale/ext-lang-en_GB.js +315 -0
  456. data/public/ext-3.0.0/src/locale/ext-lang-es.js +318 -0
  457. data/public/ext-3.0.0/src/locale/ext-lang-fa.js +272 -0
  458. data/public/ext-3.0.0/src/locale/ext-lang-fi.js +302 -0
  459. data/public/ext-3.0.0/src/locale/ext-lang-fr.js +335 -0
  460. data/public/ext-3.0.0/src/locale/ext-lang-fr_CA.js +218 -0
  461. data/public/ext-3.0.0/src/locale/ext-lang-gr.js +175 -0
  462. data/public/ext-3.0.0/src/locale/ext-lang-he.js +292 -0
  463. data/public/ext-3.0.0/src/locale/ext-lang-hr.js +295 -0
  464. data/public/ext-3.0.0/src/locale/ext-lang-hu.js +296 -0
  465. data/public/ext-3.0.0/src/locale/ext-lang-id.js +302 -0
  466. data/public/ext-3.0.0/src/locale/ext-lang-it.js +295 -0
  467. data/public/ext-3.0.0/src/locale/ext-lang-ja.js +318 -0
  468. data/public/ext-3.0.0/src/locale/ext-lang-ko.js +267 -0
  469. data/public/ext-3.0.0/src/locale/ext-lang-lt.js +333 -0
  470. data/public/ext-3.0.0/src/locale/ext-lang-lv.js +176 -0
  471. data/public/ext-3.0.0/src/locale/ext-lang-mk.js +176 -0
  472. data/public/ext-3.0.0/src/locale/ext-lang-nl.js +323 -0
  473. data/public/ext-3.0.0/src/locale/ext-lang-no_NB.js +294 -0
  474. data/public/ext-3.0.0/src/locale/ext-lang-no_NN.js +294 -0
  475. data/public/ext-3.0.0/src/locale/ext-lang-pl.js +304 -0
  476. data/public/ext-3.0.0/src/locale/ext-lang-pt.js +260 -0
  477. data/public/ext-3.0.0/src/locale/ext-lang-pt_BR.js +302 -0
  478. data/public/ext-3.0.0/src/locale/ext-lang-pt_PT.js +298 -0
  479. data/public/ext-3.0.0/src/locale/ext-lang-ro.js +295 -0
  480. data/public/ext-3.0.0/src/locale/ext-lang-ru.js +319 -0
  481. data/public/ext-3.0.0/src/locale/ext-lang-sk.js +182 -0
  482. data/public/ext-3.0.0/src/locale/ext-lang-sl.js +176 -0
  483. data/public/ext-3.0.0/src/locale/ext-lang-sr.js +179 -0
  484. data/public/ext-3.0.0/src/locale/ext-lang-sr_RS.js +178 -0
  485. data/public/ext-3.0.0/src/locale/ext-lang-sv_SE.js +178 -0
  486. data/public/ext-3.0.0/src/locale/ext-lang-th.js +294 -0
  487. data/public/ext-3.0.0/src/locale/ext-lang-tr.js +306 -0
  488. data/public/ext-3.0.0/src/locale/ext-lang-ukr.js +258 -0
  489. data/public/ext-3.0.0/src/locale/ext-lang-vn.js +181 -0
  490. data/public/ext-3.0.0/src/locale/ext-lang-zh_CN.js +174 -0
  491. data/public/ext-3.0.0/src/locale/ext-lang-zh_TW.js +178 -0
  492. data/public/ext-3.0.0/src/state/CookieProvider.js +91 -0
  493. data/public/ext-3.0.0/src/state/Provider.js +127 -0
  494. data/public/ext-3.0.0/src/state/StateManager.js +69 -0
  495. data/public/ext-3.0.0/src/util/CSS.js +161 -0
  496. data/public/ext-3.0.0/src/util/ClickRepeater.js +200 -0
  497. data/public/ext-3.0.0/src/util/Cookies.js +96 -0
  498. data/public/ext-3.0.0/src/util/Date.js +1317 -0
  499. data/public/ext-3.0.0/src/util/Format.js +356 -0
  500. data/public/ext-3.0.0/src/util/History.js +203 -0
  501. data/public/ext-3.0.0/src/util/KeyMap.js +242 -0
  502. data/public/ext-3.0.0/src/util/KeyNav.js +161 -0
  503. data/public/ext-3.0.0/src/util/MixedCollection.js +576 -0
  504. data/public/ext-3.0.0/src/util/Observable-more.js +178 -0
  505. data/public/ext-3.0.0/src/util/TextMetrics.js +131 -0
  506. data/public/ext-3.0.0/src/util/UpdateManager.js +536 -0
  507. data/public/ext-3.0.0/src/util/XTemplate.js +379 -0
  508. data/public/ext-3.0.0/src/util/core/DelayedTask.js +68 -0
  509. data/public/ext-3.0.0/src/util/core/JSON.js +174 -0
  510. data/public/ext-3.0.0/src/util/core/Observable.js +483 -0
  511. data/public/ext-3.0.0/src/util/core/TaskMgr.js +174 -0
  512. data/public/ext-3.0.0/src/widgets/Action.js +252 -0
  513. data/public/ext-3.0.0/src/widgets/BoxComponent.js +519 -0
  514. data/public/ext-3.0.0/src/widgets/Button.js +762 -0
  515. data/public/ext-3.0.0/src/widgets/ButtonGroup.js +103 -0
  516. data/public/ext-3.0.0/src/widgets/ColorPalette.js +148 -0
  517. data/public/ext-3.0.0/src/widgets/Component.js +1540 -0
  518. data/public/ext-3.0.0/src/widgets/ComponentMgr.js +159 -0
  519. data/public/ext-3.0.0/src/widgets/Container.js +894 -0
  520. data/public/ext-3.0.0/src/widgets/CycleButton.js +188 -0
  521. data/public/ext-3.0.0/src/widgets/DataView.js +749 -0
  522. data/public/ext-3.0.0/src/widgets/DatePicker.js +771 -0
  523. data/public/ext-3.0.0/src/widgets/Editor.js +385 -0
  524. data/public/ext-3.0.0/src/widgets/Layer.js +466 -0
  525. data/public/ext-3.0.0/src/widgets/LoadMask.js +123 -0
  526. data/public/ext-3.0.0/src/widgets/MessageBox.js +626 -0
  527. data/public/ext-3.0.0/src/widgets/PagingToolbar.js +502 -0
  528. data/public/ext-3.0.0/src/widgets/Panel.js +1772 -0
  529. data/public/ext-3.0.0/src/widgets/PanelDD.js +154 -0
  530. data/public/ext-3.0.0/src/widgets/ProgressBar.js +289 -0
  531. data/public/ext-3.0.0/src/widgets/Resizable.js +760 -0
  532. data/public/ext-3.0.0/src/widgets/Shadow.js +192 -0
  533. data/public/ext-3.0.0/src/widgets/Slider.js +426 -0
  534. data/public/ext-3.0.0/src/widgets/SplitBar.js +436 -0
  535. data/public/ext-3.0.0/src/widgets/SplitButton.js +124 -0
  536. data/public/ext-3.0.0/src/widgets/TabPanel.js +1100 -0
  537. data/public/ext-3.0.0/src/widgets/Toolbar.js +781 -0
  538. data/public/ext-3.0.0/src/widgets/Viewport.js +124 -0
  539. data/public/ext-3.0.0/src/widgets/Window.js +941 -0
  540. data/public/ext-3.0.0/src/widgets/WindowManager.js +187 -0
  541. data/public/ext-3.0.0/src/widgets/chart/Chart.js +721 -0
  542. data/public/ext-3.0.0/src/widgets/chart/EventProxy.js +20 -0
  543. data/public/ext-3.0.0/src/widgets/chart/FlashComponent.js +117 -0
  544. data/public/ext-3.0.0/src/widgets/chart/swfobject.js +783 -0
  545. data/public/ext-3.0.0/src/widgets/form/Action.js +626 -0
  546. data/public/ext-3.0.0/src/widgets/form/BasicForm.js +735 -0
  547. data/public/ext-3.0.0/src/widgets/form/Checkbox.js +177 -0
  548. data/public/ext-3.0.0/src/widgets/form/CheckboxGroup.js +419 -0
  549. data/public/ext-3.0.0/src/widgets/form/Combo.js +1232 -0
  550. data/public/ext-3.0.0/src/widgets/form/DateField.js +389 -0
  551. data/public/ext-3.0.0/src/widgets/form/DisplayField.js +98 -0
  552. data/public/ext-3.0.0/src/widgets/form/Field.js +640 -0
  553. data/public/ext-3.0.0/src/widgets/form/FieldSet.js +305 -0
  554. data/public/ext-3.0.0/src/widgets/form/Form.js +335 -0
  555. data/public/ext-3.0.0/src/widgets/form/Hidden.js +39 -0
  556. data/public/ext-3.0.0/src/widgets/form/HtmlEditor.js +1179 -0
  557. data/public/ext-3.0.0/src/widgets/form/Label.js +64 -0
  558. data/public/ext-3.0.0/src/widgets/form/NumberField.js +139 -0
  559. data/public/ext-3.0.0/src/widgets/form/Radio.js +81 -0
  560. data/public/ext-3.0.0/src/widgets/form/RadioGroup.js +116 -0
  561. data/public/ext-3.0.0/src/widgets/form/TextArea.js +117 -0
  562. data/public/ext-3.0.0/src/widgets/form/TextField.js +491 -0
  563. data/public/ext-3.0.0/src/widgets/form/TimeField.js +146 -0
  564. data/public/ext-3.0.0/src/widgets/form/TriggerField.js +328 -0
  565. data/public/ext-3.0.0/src/widgets/form/VTypes.js +135 -0
  566. data/public/ext-3.0.0/src/widgets/grid/AbstractSelectionModel.js +57 -0
  567. data/public/ext-3.0.0/src/widgets/grid/CellSelectionModel.js +262 -0
  568. data/public/ext-3.0.0/src/widgets/grid/CheckboxSelectionModel.js +103 -0
  569. data/public/ext-3.0.0/src/widgets/grid/Column.js +406 -0
  570. data/public/ext-3.0.0/src/widgets/grid/ColumnDD.js +199 -0
  571. data/public/ext-3.0.0/src/widgets/grid/ColumnModel.js +592 -0
  572. data/public/ext-3.0.0/src/widgets/grid/ColumnSplitDD.js +62 -0
  573. data/public/ext-3.0.0/src/widgets/grid/EditorGrid.js +291 -0
  574. data/public/ext-3.0.0/src/widgets/grid/GridDD.js +95 -0
  575. data/public/ext-3.0.0/src/widgets/grid/GridEditor.js +21 -0
  576. data/public/ext-3.0.0/src/widgets/grid/GridPanel.js +952 -0
  577. data/public/ext-3.0.0/src/widgets/grid/GridView.js +1776 -0
  578. data/public/ext-3.0.0/src/widgets/grid/GroupingView.js +517 -0
  579. data/public/ext-3.0.0/src/widgets/grid/PropertyGrid.js +370 -0
  580. data/public/ext-3.0.0/src/widgets/grid/RowNumberer.js +61 -0
  581. data/public/ext-3.0.0/src/widgets/grid/RowSelectionModel.js +530 -0
  582. data/public/ext-3.0.0/src/widgets/layout/AbsoluteLayout.js +82 -0
  583. data/public/ext-3.0.0/src/widgets/layout/AccordionLayout.js +177 -0
  584. data/public/ext-3.0.0/src/widgets/layout/AnchorLayout.js +200 -0
  585. data/public/ext-3.0.0/src/widgets/layout/BorderLayout.js +1108 -0
  586. data/public/ext-3.0.0/src/widgets/layout/BoxLayout.js +417 -0
  587. data/public/ext-3.0.0/src/widgets/layout/CardLayout.js +127 -0
  588. data/public/ext-3.0.0/src/widgets/layout/ColumnLayout.js +130 -0
  589. data/public/ext-3.0.0/src/widgets/layout/ContainerLayout.js +215 -0
  590. data/public/ext-3.0.0/src/widgets/layout/FitLayout.js +48 -0
  591. data/public/ext-3.0.0/src/widgets/layout/FormLayout.js +266 -0
  592. data/public/ext-3.0.0/src/widgets/layout/TableLayout.js +194 -0
  593. data/public/ext-3.0.0/src/widgets/list/ColumnResizer.js +123 -0
  594. data/public/ext-3.0.0/src/widgets/list/ListView.js +357 -0
  595. data/public/ext-3.0.0/src/widgets/list/Sorter.js +70 -0
  596. data/public/ext-3.0.0/src/widgets/menu/BaseItem.js +160 -0
  597. data/public/ext-3.0.0/src/widgets/menu/CheckItem.js +114 -0
  598. data/public/ext-3.0.0/src/widgets/menu/ColorMenu.js +72 -0
  599. data/public/ext-3.0.0/src/widgets/menu/DateMenu.js +90 -0
  600. data/public/ext-3.0.0/src/widgets/menu/Item.js +211 -0
  601. data/public/ext-3.0.0/src/widgets/menu/Menu.js +733 -0
  602. data/public/ext-3.0.0/src/widgets/menu/MenuMgr.js +211 -0
  603. data/public/ext-3.0.0/src/widgets/menu/Separator.js +46 -0
  604. data/public/ext-3.0.0/src/widgets/menu/TextItem.js +46 -0
  605. data/public/ext-3.0.0/src/widgets/tips/QuickTip.js +207 -0
  606. data/public/ext-3.0.0/src/widgets/tips/QuickTips.js +159 -0
  607. data/public/ext-3.0.0/src/widgets/tips/Tip.js +157 -0
  608. data/public/ext-3.0.0/src/widgets/tips/ToolTip.js +492 -0
  609. data/public/ext-3.0.0/src/widgets/tree/AsyncTreeNode.js +114 -0
  610. data/public/ext-3.0.0/src/widgets/tree/TreeDragZone.js +82 -0
  611. data/public/ext-3.0.0/src/widgets/tree/TreeDropZone.js +321 -0
  612. data/public/ext-3.0.0/src/widgets/tree/TreeEditor.js +160 -0
  613. data/public/ext-3.0.0/src/widgets/tree/TreeEventModel.js +169 -0
  614. data/public/ext-3.0.0/src/widgets/tree/TreeFilter.js +114 -0
  615. data/public/ext-3.0.0/src/widgets/tree/TreeLoader.js +342 -0
  616. data/public/ext-3.0.0/src/widgets/tree/TreeNode.js +546 -0
  617. data/public/ext-3.0.0/src/widgets/tree/TreeNodeUI.js +633 -0
  618. data/public/ext-3.0.0/src/widgets/tree/TreePanel.js +918 -0
  619. data/public/ext-3.0.0/src/widgets/tree/TreeSelectionModel.js +315 -0
  620. data/public/ext-3.0.0/src/widgets/tree/TreeSorter.js +106 -0
  621. data/public/js/ext-portal.js +235 -0
  622. data/public/js/global.js +7 -0
  623. data/public/js/outerframe.js +47 -0
  624. data/public/js/portal.js +713 -0
  625. data/public/js/test_chart.js +152 -0
  626. data/test/config.rb +62 -0
  627. data/test/config/hosts.yaml +5 -0
  628. data/test/config/log.yaml +1 -0
  629. data/test/config/memcache.yaml +5 -0
  630. data/test/exception.rb +39 -0
  631. data/test/method_missing.rb +14 -0
  632. data/test/module.rb +39 -0
  633. data/test/remote_lmp.rb +126 -0
  634. data/test/sinatra.rb +29 -0
  635. data/test/sinatra_base.rb +16 -0
  636. metadata +690 -0
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Ext JS Library 3.0.0
3
+ * Copyright(c) 2006-2009 Ext JS, LLC
4
+ * licensing@extjs.com
5
+ * http://www.extjs.com/license
6
+ */
7
+ window.undefined=window.undefined;Ext={version:"3.0"};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var g=0,t=Object.prototype.toString,s=function(e){if(Ext.isArray(e)||e.callee){return true}if(/NodeList|HTMLCollection/.test(t.call(e))){return true}return((e.nextNode||e.item)&&Ext.isNumber(e.length))},u=navigator.userAgent.toLowerCase(),z=function(e){return e.test(u)},i=document,l=i.compatMode=="CSS1Compat",B=z(/opera/),h=z(/chrome/),v=z(/webkit/),y=!h&&z(/safari/),f=y&&z(/applewebkit\/4/),b=y&&z(/version\/3/),C=y&&z(/version\/4/),r=!B&&z(/msie/),p=r&&z(/msie 7/),o=r&&z(/msie 8/),q=r&&!p&&!o,n=!v&&z(/gecko/),d=n&&z(/rv:1\.8/),a=n&&z(/rv:1\.9/),w=r&&!l,A=z(/windows|win32/),k=z(/macintosh|mac os x/),j=z(/adobeair/),m=z(/linux/),c=/^https/i.test(window.location.protocol);if(q){try{i.execCommand("BackgroundImageCache",false,true)}catch(x){}}Ext.apply(Ext,{SSL_SECURE_URL:"javascript:false",isStrict:l,isSecure:c,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,USE_NATIVE_JSON:false,applyIf:function(D,E){if(D){for(var e in E){if(Ext.isEmpty(D[e])){D[e]=E[e]}}}return D},id:function(e,D){return(e=Ext.getDom(e)||{}).id=e.id||(D||"ext-gen")+(++g)},extend:function(){var D=function(F){for(var E in F){this[E]=F[E]}};var e=Object.prototype.constructor;return function(K,H,J){if(Ext.isObject(H)){J=H;H=K;K=J.constructor!=e?J.constructor:function(){H.apply(this,arguments)}}var G=function(){},I,E=H.prototype;G.prototype=E;I=K.prototype=new G();I.constructor=K;K.superclass=E;if(E.constructor==e){E.constructor=H}K.override=function(F){Ext.override(K,F)};I.superclass=I.supr=(function(){return E});I.override=D;Ext.override(K,J);K.extend=function(F){Ext.extend(K,F)};return K}}(),override:function(e,E){if(E){var D=e.prototype;Ext.apply(D,E);if(Ext.isIE&&E.toString!=e.toString){D.toString=E.toString}}},namespace:function(){var D,e;Ext.each(arguments,function(E){e=E.split(".");D=window[e[0]]=window[e[0]]||{};Ext.each(e.slice(1),function(F){D=D[F]=D[F]||{}})});return D},urlEncode:function(I,H){var F,D=[],E,G=encodeURIComponent;for(E in I){F=!Ext.isDefined(I[E]);Ext.each(F?E:I[E],function(J,e){D.push("&",G(E),"=",(J!=E||!F)?G(J):"")})}if(!H){D.shift();H=""}return H+D.join("")},urlDecode:function(E,D){var H={},G=E.split("&"),I=decodeURIComponent,e,F;Ext.each(G,function(J){J=J.split("=");e=I(J[0]);F=I(J[1]);H[e]=D||!H[e]?F:[].concat(H[e]).concat(F)});return H},urlAppend:function(e,D){if(!Ext.isEmpty(D)){return e+(e.indexOf("?")===-1?"?":"&")+D}return e},toArray:function(){return r?function(e,F,D,E){E=[];Ext.each(e,function(G){E.push(G)});return E.slice(F||0,D||E.length)}:function(e,E,D){return Array.prototype.slice.call(e,E||0,D||e.length)}}(),each:function(G,F,E){if(Ext.isEmpty(G,true)){return}if(!s(G)||Ext.isPrimitive(G)){G=[G]}for(var D=0,e=G.length;D<e;D++){if(F.call(E||G[D],G[D],D,G)===false){return D}}},iterate:function(E,D,e){if(s(E)){Ext.each(E,D,e);return}else{if(Ext.isObject(E)){for(var F in E){if(E.hasOwnProperty(F)){if(D.call(e||E,F,E[F])===false){return}}}}}},getDom:function(e){if(!e||!i){return null}return e.dom?e.dom:(Ext.isString(e)?i.getElementById(e):e)},getBody:function(){return Ext.get(i.body||i.documentElement)},removeNode:r?function(){var e;return function(D){if(D&&D.tagName!="BODY"){e=e||i.createElement("div");e.appendChild(D);e.innerHTML=""}}}():function(e){if(e&&e.parentNode&&e.tagName!="BODY"){e.parentNode.removeChild(e)}},isEmpty:function(D,e){return D===null||D===undefined||((Ext.isArray(D)&&!D.length))||(!e?D==="":false)},isArray:function(e){return t.apply(e)==="[object Array]"},isObject:function(e){return e&&typeof e=="object"},isPrimitive:function(e){return Ext.isString(e)||Ext.isNumber(e)||Ext.isBoolean(e)},isFunction:function(e){return t.apply(e)==="[object Function]"},isNumber:function(e){return typeof e==="number"&&isFinite(e)},isString:function(e){return typeof e==="string"},isBoolean:function(e){return typeof e==="boolean"},isDefined:function(e){return typeof e!=="undefined"},isOpera:B,isWebKit:v,isChrome:h,isSafari:y,isSafari3:b,isSafari4:C,isSafari2:f,isIE:r,isIE6:q,isIE7:p,isIE8:o,isGecko:n,isGecko2:d,isGecko3:a,isBorderBox:w,isLinux:m,isWindows:A,isMac:k,isAir:j});Ext.ns=Ext.namespace})();Ext.ns("Ext","Ext.util","Ext.lib","Ext.data");Ext.apply(Function.prototype,{createInterceptor:function(b,a){var c=this;return !Ext.isFunction(b)?this:function(){var e=this,d=arguments;b.target=e;b.method=c;return(b.apply(a||e||window,d)!==false)?c.apply(e||window,d):null}},createCallback:function(){var a=arguments,b=this;return function(){return b.apply(window,a)}},createDelegate:function(c,b,a){var d=this;return function(){var f=b||arguments;if(a===true){f=Array.prototype.slice.call(arguments,0);f=f.concat(b)}else{if(Ext.isNumber(a)){f=Array.prototype.slice.call(arguments,0);var e=[a,0].concat(b);Array.prototype.splice.apply(f,e)}}return d.apply(c||window,f)}},defer:function(c,e,b,a){var d=this.createDelegate(e,b,a);if(c>0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(c){for(var b=0,a=this.length;b<a;b++){if(this[b]==c){return b}}return -1},remove:function(b){var a=this.indexOf(b);if(a!=-1){this.splice(a,1)}return this}});Ext.ns("Ext.grid","Ext.dd","Ext.tree","Ext.form","Ext.menu","Ext.state","Ext.layout","Ext.app","Ext.ux","Ext.chart","Ext.direct");Ext.apply(Ext,function(){var b=Ext,a=0;return{emptyFn:function(){},BLANK_IMAGE_URL:Ext.isIE6||Ext.isIE7?"http://extjs.com/s.gif":"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==",extendX:function(c,d){return Ext.extend(c,d(c.prototype))},getDoc:function(){return Ext.get(document)},isDate:function(c){return Object.prototype.toString.apply(c)==="[object Date]"},num:function(d,c){d=Number(d===null||typeof d=="boolean"?NaN:d);return isNaN(d)?c:d},value:function(e,c,d){return Ext.isEmpty(e,d)?c:e},escapeRe:function(c){return c.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},sequence:function(f,c,e,d){f[c]=f[c].createSequence(e,d)},addBehaviors:function(g){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(g)})}else{var d={},f,c,e;for(c in g){if((f=c.split("@"))[1]){e=f[0];if(!d[e]){d[e]=Ext.select(e)}d[e].on(f[1],g[c])}}d=null}},combine:function(){var e=arguments,d=e.length,g=[];for(var f=0;f<d;f++){var c=e[f];if(Ext.isArray(c)){g=g.concat(c)}else{if(c.length!==undefined&&!c.substr){g=g.concat(Array.prototype.slice.call(c,0))}else{g.push(c)}}}return g},copyTo:function(c,d,e){if(typeof e=="string"){e=e.split(/[,;\s]/)}Ext.each(e,function(f){if(d.hasOwnProperty(f)){c[f]=d[f]}},this);return c},destroy:function(){Ext.each(arguments,function(c){if(c){if(Ext.isArray(c)){this.destroy.apply(this,c)}else{if(Ext.isFunction(c.destroy)){c.destroy()}else{if(c.dom){c.remove()}}}}},this)},destroyMembers:function(j,g,e,f){for(var h=1,d=arguments,c=d.length;h<c;h++){Ext.destroy(j[d[h]]);delete j[d[h]]}},clean:function(c){var d=[];Ext.each(c,function(e){if(!!e){d.push(e)}});return d},unique:function(c){var d=[],e={};Ext.each(c,function(f){if(!e[f]){d.push(f)}e[f]=true});return d},flatten:function(c){var e=[];function d(f){Ext.each(f,function(g){if(Ext.isArray(g)){d(g)}else{e.push(g)}});return e}return d(c)},min:function(c,d){var e=c[0];d=d||function(g,f){return g<f?-1:1};Ext.each(c,function(f){e=d(e,f)==-1?e:f});return e},max:function(c,d){var e=c[0];d=d||function(g,f){return g>f?1:-1};Ext.each(c,function(f){e=d(e,f)==1?e:f});return e},mean:function(c){return Ext.sum(c)/c.length},sum:function(c){var d=0;Ext.each(c,function(e){d+=e});return d},partition:function(c,d){var e=[[],[]];Ext.each(c,function(g,h,f){e[(d&&d(g,h,f))||(!d&&g)?0:1].push(g)});return e},invoke:function(c,d){var f=[],e=Array.prototype.slice.call(arguments,2);Ext.each(c,function(g,h){if(g&&typeof g[d]=="function"){f.push(g[d].apply(g,e))}else{f.push(undefined)}});return f},pluck:function(c,e){var d=[];Ext.each(c,function(f){d.push(f[e])});return d},zip:function(){var l=Ext.partition(arguments,function(i){return !Ext.isFunction(i)}),g=l[0],k=l[1][0],c=Ext.max(Ext.pluck(g,"length")),f=[];for(var h=0;h<c;h++){f[h]=[];if(k){f[h]=k.apply(k,Ext.pluck(g,h))}else{for(var e=0,d=g.length;e<d;e++){f[h].push(g[e][h])}}}return f},getCmp:function(c){return Ext.ComponentMgr.get(c)},useShims:b.isIE6||(b.isMac&&b.isGecko2),type:function(d){if(d===undefined||d===null){return false}if(d.htmlElement){return"element"}var c=typeof d;if(c=="object"&&d.nodeName){switch(d.nodeType){case 1:return"element";case 3:return(/\S/).test(d.nodeValue)?"textnode":"whitespace"}}if(c=="object"||c=="function"){switch(d.constructor){case Array:return"array";case RegExp:return"regexp";case Date:return"date"}if(typeof d.length=="number"&&typeof d.item=="function"){return"nodelist"}}return c},intercept:function(f,c,e,d){f[c]=f[c].createInterceptor(e,d)},callback:function(c,f,e,d){if(Ext.isFunction(c)){if(d){c.defer(d,f,e||[])}else{c.apply(f,e||[])}}}}}());Ext.apply(Function.prototype,{createSequence:function(b,a){var c=this;return !Ext.isFunction(b)?this:function(){var d=c.apply(this||window,arguments);b.apply(a||this||window,arguments);return d}}});Ext.applyIf(String,{escape:function(a){return a.replace(/('|\\)/g,"\\$1")},leftPad:function(d,b,c){var a=String(d);if(!c){c=" "}while(a.length<b){a=c+a}return a}});String.prototype.toggle=function(b,a){return this==b?a:b};String.prototype.trim=function(){var a=/^\s+|\s+$/g;return function(){return this.replace(a,"")}}();Date.prototype.getElapsed=function(a){return Math.abs((a||new Date()).getTime()-this.getTime())};Ext.applyIf(Number.prototype,{constrain:function(b,a){return Math.min(Math.max(this,b),a)}});Ext.util.TaskRunner=function(e){e=e||10;var f=[],a=[],b=0,g=false,d=function(){g=false;clearInterval(b);b=0},h=function(){if(!g){g=true;b=setInterval(i,e)}},c=function(j){a.push(j);if(j.onStop){j.onStop.apply(j.scope||j)}},i=function(){var l=a.length,n=new Date().getTime();if(l>0){for(var p=0;p<l;p++){f.remove(a[p])}a=[];if(f.length<1){d();return}}for(var p=0,o,k,m,j=f.length;p<j;++p){o=f[p];k=n-o.taskRunTime;if(o.interval<=k){m=o.run.apply(o.scope||o,o.args||[++o.taskRunCount]);o.taskRunTime=n;if(m===false||o.taskRunCount===o.repeat){c(o);return}}if(o.duration&&o.duration<=(n-o.taskStartTime)){c(o)}}};this.start=function(j){f.push(j);j.taskStartTime=new Date().getTime();j.taskRunTime=0;j.taskRunCount=0;h();return j};this.stop=function(j){c(j);return j};this.stopAll=function(){d();for(var k=0,j=f.length;k<j;k++){if(f[k].onStop){f[k].onStop()}}f=[];a=[]}};Ext.TaskMgr=new Ext.util.TaskRunner();if(typeof jQuery=="undefined"){throw"Unable to load Ext, jQuery not found."}(function(){var b;Ext.lib.Dom={getViewWidth:function(d){return d?Math.max(jQuery(document).width(),jQuery(window).width()):jQuery(window).width()},getViewHeight:function(d){return d?Math.max(jQuery(document).height(),jQuery(window).height()):jQuery(window).height()},isAncestor:function(e,f){e=Ext.getDom(e);f=Ext.getDom(f);if(!e||!f){return false}if(e.contains&&!Ext.isSafari){return e.contains(f)}else{if(e.compareDocumentPosition){return !!(e.compareDocumentPosition(f)&16)}else{var d=f.parentNode;while(d){if(d==e){return true}else{if(!d.tagName||d.tagName.toUpperCase()=="HTML"){return false}}d=d.parentNode}return false}}},getRegion:function(d){return Ext.lib.Region.getRegion(d)},getY:function(d){return this.getXY(d)[1]},getX:function(d){return this.getXY(d)[0]},getXY:function(f){var e,j,l,m,i=(document.body||document.documentElement);f=Ext.getDom(f);if(f==i){return[0,0]}if(f.getBoundingClientRect){l=f.getBoundingClientRect();m=c(document).getScroll();return[Math.round(l.left+m.left),Math.round(l.top+m.top)]}var n=0,k=0;e=f;var d=c(f).getStyle("position")=="absolute";while(e){n+=e.offsetLeft;k+=e.offsetTop;if(!d&&c(e).getStyle("position")=="absolute"){d=true}if(Ext.isGecko){j=c(e);var o=parseInt(j.getStyle("borderTopWidth"),10)||0;var g=parseInt(j.getStyle("borderLeftWidth"),10)||0;n+=g;k+=o;if(e!=f&&j.getStyle("overflow")!="visible"){n+=g;k+=o}}e=e.offsetParent}if(Ext.isSafari&&d){n-=i.offsetLeft;k-=i.offsetTop}if(Ext.isGecko&&!d){var h=c(i);n+=parseInt(h.getStyle("borderLeftWidth"),10)||0;k+=parseInt(h.getStyle("borderTopWidth"),10)||0}e=f.parentNode;while(e&&e!=i){if(!Ext.isOpera||(e.tagName!="TR"&&c(e).getStyle("display")!="inline")){n-=e.scrollLeft;k-=e.scrollTop}e=e.parentNode}return[n,k]},setXY:function(d,e){d=Ext.fly(d,"_setXY");d.position();var f=d.translatePoints(e);if(e[0]!==false){d.dom.style.left=f.left+"px"}if(e[1]!==false){d.dom.style.top=f.top+"px"}},setX:function(e,d){this.setXY(e,[d,false])},setY:function(d,e){this.setXY(d,[false,e])}};function c(d){if(!b){b=new Ext.Element.Flyweight()}b.dom=d;return b}Ext.lib.Event={getPageX:function(d){d=d.browserEvent||d;return d.pageX},getPageY:function(d){d=d.browserEvent||d;return d.pageY},getXY:function(d){d=d.browserEvent||d;return[d.pageX,d.pageY]},getTarget:function(d){return d.target},on:function(h,d,g,f,e){jQuery(h).bind(d,g)},un:function(f,d,e){jQuery(f).unbind(d,e)},purgeElement:function(d){jQuery(d).unbind()},preventDefault:function(d){d=d.browserEvent||d;if(d.preventDefault){d.preventDefault()}else{d.returnValue=false}},stopPropagation:function(d){d=d.browserEvent||d;if(d.stopPropagation){d.stopPropagation()}else{d.cancelBubble=true}},stopEvent:function(d){this.preventDefault(d);this.stopPropagation(d)},onAvailable:function(j,e,d){var i=new Date();var g=function(){if(i.getElapsed()>10000){clearInterval(h)}var f=document.getElementById(j);if(f){clearInterval(h);e.call(d||window,f)}};var h=setInterval(g,50)},resolveTextNode:function(d){if(d&&3==d.nodeType){return d.parentNode}else{return d}},getRelatedTarget:function(e){e=e.browserEvent||e;var d=e.relatedTarget;if(!d){if(e.type=="mouseout"){d=e.toElement}else{if(e.type=="mouseover"){d=e.fromElement}}}return this.resolveTextNode(d)}};Ext.lib.Ajax=function(){var d=function(e){return function(g,f){if((f=="error"||f=="timeout")&&e.failure){e.failure.call(e.scope||window,{responseText:g.responseText,responseXML:g.responseXML,argument:e.argument})}else{if(e.success){e.success.call(e.scope||window,{responseText:g.responseText,responseXML:g.responseXML,argument:e.argument})}}}};return{request:function(k,h,e,i,f){var j={type:k,url:h,data:i,timeout:e.timeout,complete:d(e)};if(f){var g=f.headers;if(f.xmlData){j.data=f.xmlData;j.processData=false;j.type=(k?k:(f.method?f.method:"POST"));if(!g||!g["Content-Type"]){j.contentType="text/xml"}}else{if(f.jsonData){j.data=typeof f.jsonData=="object"?Ext.encode(f.jsonData):f.jsonData;j.processData=false;j.type=(k?k:(f.method?f.method:"POST"));if(!g||!g["Content-Type"]){j.contentType="application/json"}}}if(g){j.beforeSend=function(m){for(var l in g){if(g.hasOwnProperty(l)){m.setRequestHeader(l,g[l])}}}}}jQuery.ajax(j)},formRequest:function(i,h,f,j,e,g){jQuery.ajax({type:Ext.getDom(i).method||"POST",url:h,data:jQuery(i).serialize()+(j?"&"+j:""),timeout:f.timeout,complete:d(f)})},isCallInProgress:function(e){return false},abort:function(e){return false},serializeForm:function(e){return jQuery(e.dom||e).serialize()}}}();Ext.lib.Anim=function(){var d=function(e,f){var g=true;return{stop:function(h){},isAnimated:function(){return g},proxyCallback:function(){g=false;Ext.callback(e,f)}}};return{scroll:function(h,f,j,k,e,g){var i=d(e,g);h=Ext.getDom(h);if(typeof f.scroll.to[0]=="number"){h.scrollLeft=f.scroll.to[0]}if(typeof f.scroll.to[1]=="number"){h.scrollTop=f.scroll.to[1]}i.proxyCallback();return i},motion:function(h,f,i,j,e,g){return this.run(h,f,i,j,e,g)},color:function(h,f,j,k,e,g){var i=d(e,g);i.proxyCallback();return i},run:function(g,q,j,p,h,s,r){var l=d(h,s),m=Ext.fly(g,"_animrun");var f={};for(var i in q){switch(i){case"points":var n,u;m.position();if(n=q.points.by){var t=m.getXY();u=m.translatePoints([t[0]+n[0],t[1]+n[1]])}else{u=m.translatePoints(q.points.to)}f.left=u.left;f.top=u.top;if(!parseInt(m.getStyle("left"),10)){m.setLeft(0)}if(!parseInt(m.getStyle("top"),10)){m.setTop(0)}if(q.points.from){m.setXY(q.points.from)}break;case"width":f.width=q.width.to;if(q.width.from){m.setWidth(q.width.from)}break;case"height":f.height=q.height.to;if(q.height.from){m.setHeight(q.height.from)}break;case"opacity":f.opacity=q.opacity.to;if(q.opacity.from){m.setOpacity(q.opacity.from)}break;case"left":f.left=q.left.to;if(q.left.from){m.setLeft(q.left.from)}break;case"top":f.top=q.top.to;if(q.top.from){m.setTop(q.top.from)}break;default:f[i]=q[i].to;if(q[i].from){m.setStyle(i,q[i].from)}break}}jQuery(g).animate(f,j*1000,undefined,l.proxyCallback);return l}}}();Ext.lib.Region=function(f,g,d,e){this.top=f;this[1]=f;this.right=g;this.bottom=d;this.left=e;this[0]=e};Ext.lib.Region.prototype={contains:function(d){return(d.left>=this.left&&d.right<=this.right&&d.top>=this.top&&d.bottom<=this.bottom)},getArea:function(){return((this.bottom-this.top)*(this.right-this.left))},intersect:function(h){var f=Math.max(this.top,h.top);var g=Math.min(this.right,h.right);var d=Math.min(this.bottom,h.bottom);var e=Math.max(this.left,h.left);if(d>=f&&g>=e){return new Ext.lib.Region(f,g,d,e)}else{return null}},union:function(h){var f=Math.min(this.top,h.top);var g=Math.max(this.right,h.right);var d=Math.max(this.bottom,h.bottom);var e=Math.min(this.left,h.left);return new Ext.lib.Region(f,g,d,e)},constrainTo:function(d){this.top=this.top.constrain(d.top,d.bottom);this.bottom=this.bottom.constrain(d.top,d.bottom);this.left=this.left.constrain(d.left,d.right);this.right=this.right.constrain(d.left,d.right);return this},adjust:function(f,e,d,g){this.top+=f;this.left+=e;this.right+=g;this.bottom+=d;return this}};Ext.lib.Region.getRegion=function(g){var i=Ext.lib.Dom.getXY(g);var f=i[1];var h=i[0]+g.offsetWidth;var d=i[1]+g.offsetHeight;var e=i[0];return new Ext.lib.Region(f,h,d,e)};Ext.lib.Point=function(d,e){if(Ext.isArray(d)){e=d[1];d=d[0]}this.x=this.right=this.left=this[0]=d;this.y=this.top=this.bottom=this[1]=e};Ext.lib.Point.prototype=new Ext.lib.Region();if(Ext.isIE){function a(){var d=Function.prototype;delete d.createSequence;delete d.defer;delete d.createDelegate;delete d.createCallback;delete d.createInterceptor;window.detachEvent("onunload",a)}window.attachEvent("onunload",a)}})();
@@ -0,0 +1,2346 @@
1
+ /*!
2
+ * Ext JS Library 3.0.0
3
+ * Copyright(c) 2006-2009 Ext JS, LLC
4
+ * licensing@extjs.com
5
+ * http://www.extjs.com/license
6
+ */
7
+
8
+ // for old browsers
9
+ window.undefined = window.undefined;
10
+
11
+ /**
12
+ * @class Ext
13
+ * Ext core utilities and functions.
14
+ * @singleton
15
+ */
16
+
17
+ Ext = {
18
+ /**
19
+ * The version of the framework
20
+ * @type String
21
+ */
22
+ version : '3.0'
23
+ };
24
+
25
+ /**
26
+ * Copies all the properties of config to obj.
27
+ * @param {Object} obj The receiver of the properties
28
+ * @param {Object} config The source of the properties
29
+ * @param {Object} defaults A different object that will also be applied for default values
30
+ * @return {Object} returns obj
31
+ * @member Ext apply
32
+ */
33
+ Ext.apply = function(o, c, defaults){
34
+ // no "this" reference for friendly out of scope calls
35
+ if(defaults){
36
+ Ext.apply(o, defaults);
37
+ }
38
+ if(o && c && typeof c == 'object'){
39
+ for(var p in c){
40
+ o[p] = c[p];
41
+ }
42
+ }
43
+ return o;
44
+ };
45
+
46
+ (function(){
47
+ var idSeed = 0,
48
+ toString = Object.prototype.toString,
49
+ //assume it's not null and not an array
50
+ isIterable = function(v){
51
+ //check for array or arguments
52
+ if(Ext.isArray(v) || v.callee){
53
+ return true;
54
+ }
55
+ //check for node list type
56
+ if(/NodeList|HTMLCollection/.test(toString.call(v))){
57
+ return true;
58
+ }
59
+ //NodeList has an item and length property
60
+ //IXMLDOMNodeList has nextNode method, needs to be checked first.
61
+ return ((v.nextNode || v.item) && Ext.isNumber(v.length));
62
+ },
63
+ ua = navigator.userAgent.toLowerCase(),
64
+ check = function(r){
65
+ return r.test(ua);
66
+ },
67
+ DOC = document,
68
+ isStrict = DOC.compatMode == "CSS1Compat",
69
+ isOpera = check(/opera/),
70
+ isChrome = check(/chrome/),
71
+ isWebKit = check(/webkit/),
72
+ isSafari = !isChrome && check(/safari/),
73
+ isSafari2 = isSafari && check(/applewebkit\/4/), // unique to Safari 2
74
+ isSafari3 = isSafari && check(/version\/3/),
75
+ isSafari4 = isSafari && check(/version\/4/),
76
+ isIE = !isOpera && check(/msie/),
77
+ isIE7 = isIE && check(/msie 7/),
78
+ isIE8 = isIE && check(/msie 8/),
79
+ isIE6 = isIE && !isIE7 && !isIE8,
80
+ isGecko = !isWebKit && check(/gecko/),
81
+ isGecko2 = isGecko && check(/rv:1\.8/),
82
+ isGecko3 = isGecko && check(/rv:1\.9/),
83
+ isBorderBox = isIE && !isStrict,
84
+ isWindows = check(/windows|win32/),
85
+ isMac = check(/macintosh|mac os x/),
86
+ isAir = check(/adobeair/),
87
+ isLinux = check(/linux/),
88
+ isSecure = /^https/i.test(window.location.protocol);
89
+
90
+ // remove css image flicker
91
+ if(isIE6){
92
+ try{
93
+ DOC.execCommand("BackgroundImageCache", false, true);
94
+ }catch(e){}
95
+ }
96
+
97
+ Ext.apply(Ext, {
98
+ /**
99
+ * URL to a blank file used by Ext when in secure mode for iframe src and onReady src to prevent
100
+ * the IE insecure content warning (defaults to javascript:false).
101
+ * @type String
102
+ */
103
+ SSL_SECURE_URL : 'javascript:false',
104
+ /**
105
+ * True if the browser is in strict (standards-compliant) mode, as opposed to quirks mode
106
+ * @type Boolean
107
+ */
108
+ isStrict : isStrict,
109
+ /**
110
+ * True if the page is running over SSL
111
+ * @type Boolean
112
+ */
113
+ isSecure : isSecure,
114
+ /**
115
+ * True when the document is fully initialized and ready for action
116
+ * @type Boolean
117
+ */
118
+ isReady : false,
119
+
120
+ /**
121
+ * True if the {@link Ext.Fx} Class is available
122
+ * @type Boolean
123
+ * @property enableFx
124
+ */
125
+
126
+ /**
127
+ * True to automatically uncache orphaned Ext.Elements periodically (defaults to true)
128
+ * @type Boolean
129
+ */
130
+ enableGarbageCollector : true,
131
+
132
+ /**
133
+ * True to automatically purge event listeners after uncaching an element (defaults to false).
134
+ * Note: this only happens if {@link #enableGarbageCollector} is true.
135
+ * @type Boolean
136
+ */
137
+ enableListenerCollection : false,
138
+
139
+ /**
140
+ * Indicates whether to use native browser parsing for JSON methods.
141
+ * This option is ignored if the browser does not support native JSON methods.
142
+ * <b>Note: Native JSON methods will not work with objects that have functions.
143
+ * Also, property names must be quoted, otherwise the data will not parse.</b> (Defaults to false)
144
+ * @type Boolean
145
+ */
146
+ USE_NATIVE_JSON : false,
147
+
148
+ /**
149
+ * Copies all the properties of config to obj if they don't already exist.
150
+ * @param {Object} obj The receiver of the properties
151
+ * @param {Object} config The source of the properties
152
+ * @return {Object} returns obj
153
+ */
154
+ applyIf : function(o, c){
155
+ if(o){
156
+ for(var p in c){
157
+ if(Ext.isEmpty(o[p])){
158
+ o[p] = c[p];
159
+ }
160
+ }
161
+ }
162
+ return o;
163
+ },
164
+
165
+ /**
166
+ * Generates unique ids. If the element already has an id, it is unchanged
167
+ * @param {Mixed} el (optional) The element to generate an id for
168
+ * @param {String} prefix (optional) Id prefix (defaults "ext-gen")
169
+ * @return {String} The generated Id.
170
+ */
171
+ id : function(el, prefix){
172
+ return (el = Ext.getDom(el) || {}).id = el.id || (prefix || "ext-gen") + (++idSeed);
173
+ },
174
+
175
+ /**
176
+ * Extends one class with another class and optionally overrides members with the passed literal. This class
177
+ * also adds the function "override()" to the class that can be used to override
178
+ * members on an instance.
179
+ * * <p>
180
+ * This function also supports a 2-argument call in which the subclass's constructor is
181
+ * not passed as an argument. In this form, the parameters are as follows:</p><p>
182
+ * <div class="mdetail-params"><ul>
183
+ * <li><code>superclass</code>
184
+ * <div class="sub-desc">The class being extended</div></li>
185
+ * <li><code>overrides</code>
186
+ * <div class="sub-desc">A literal with members which are copied into the subclass's
187
+ * prototype, and are therefore shared among all instances of the new class.<p>
188
+ * This may contain a special member named <tt><b>constructor</b></tt>. This is used
189
+ * to define the constructor of the new class, and is returned. If this property is
190
+ * <i>not</i> specified, a constructor is generated and returned which just calls the
191
+ * superclass's constructor passing on its parameters.</p></div></li>
192
+ * </ul></div></p><p>
193
+ * For example, to create a subclass of the Ext GridPanel:
194
+ * <pre><code>
195
+ MyGridPanel = Ext.extend(Ext.grid.GridPanel, {
196
+ constructor: function(config) {
197
+ // Your preprocessing here
198
+ MyGridPanel.superclass.constructor.apply(this, arguments);
199
+ // Your postprocessing here
200
+ },
201
+
202
+ yourMethod: function() {
203
+ // etc.
204
+ }
205
+ });
206
+ </code></pre>
207
+ * </p>
208
+ * @param {Function} subclass The class inheriting the functionality
209
+ * @param {Function} superclass The class being extended
210
+ * @param {Object} overrides (optional) A literal with members which are copied into the subclass's
211
+ * prototype, and are therefore shared between all instances of the new class.
212
+ * @return {Function} The subclass constructor.
213
+ * @method extend
214
+ */
215
+ extend : function(){
216
+ // inline overrides
217
+ var io = function(o){
218
+ for(var m in o){
219
+ this[m] = o[m];
220
+ }
221
+ };
222
+ var oc = Object.prototype.constructor;
223
+
224
+ return function(sb, sp, overrides){
225
+ if(Ext.isObject(sp)){
226
+ overrides = sp;
227
+ sp = sb;
228
+ sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
229
+ }
230
+ var F = function(){},
231
+ sbp,
232
+ spp = sp.prototype;
233
+
234
+ F.prototype = spp;
235
+ sbp = sb.prototype = new F();
236
+ sbp.constructor=sb;
237
+ sb.superclass=spp;
238
+ if(spp.constructor == oc){
239
+ spp.constructor=sp;
240
+ }
241
+ sb.override = function(o){
242
+ Ext.override(sb, o);
243
+ };
244
+ sbp.superclass = sbp.supr = (function(){
245
+ return spp;
246
+ });
247
+ sbp.override = io;
248
+ Ext.override(sb, overrides);
249
+ sb.extend = function(o){Ext.extend(sb, o);};
250
+ return sb;
251
+ };
252
+ }(),
253
+
254
+ /**
255
+ * Adds a list of functions to the prototype of an existing class, overwriting any existing methods with the same name.
256
+ * Usage:<pre><code>
257
+ Ext.override(MyClass, {
258
+ newMethod1: function(){
259
+ // etc.
260
+ },
261
+ newMethod2: function(foo){
262
+ // etc.
263
+ }
264
+ });
265
+ </code></pre>
266
+ * @param {Object} origclass The class to override
267
+ * @param {Object} overrides The list of functions to add to origClass. This should be specified as an object literal
268
+ * containing one or more methods.
269
+ * @method override
270
+ */
271
+ override : function(origclass, overrides){
272
+ if(overrides){
273
+ var p = origclass.prototype;
274
+ Ext.apply(p, overrides);
275
+ if(Ext.isIE && overrides.toString != origclass.toString){
276
+ p.toString = overrides.toString;
277
+ }
278
+ }
279
+ },
280
+
281
+ /**
282
+ * Creates namespaces to be used for scoping variables and classes so that they are not global.
283
+ * Specifying the last node of a namespace implicitly creates all other nodes. Usage:
284
+ * <pre><code>
285
+ Ext.namespace('Company', 'Company.data');
286
+ Ext.namespace('Company.data'); // equivalent and preferable to above syntax
287
+ Company.Widget = function() { ... }
288
+ Company.data.CustomStore = function(config) { ... }
289
+ </code></pre>
290
+ * @param {String} namespace1
291
+ * @param {String} namespace2
292
+ * @param {String} etc
293
+ * @method namespace
294
+ */
295
+ namespace : function(){
296
+ var o, d;
297
+ Ext.each(arguments, function(v) {
298
+ d = v.split(".");
299
+ o = window[d[0]] = window[d[0]] || {};
300
+ Ext.each(d.slice(1), function(v2){
301
+ o = o[v2] = o[v2] || {};
302
+ });
303
+ });
304
+ return o;
305
+ },
306
+
307
+ /**
308
+ * Takes an object and converts it to an encoded URL. e.g. Ext.urlEncode({foo: 1, bar: 2}); would return "foo=1&bar=2". Optionally, property values can be arrays, instead of keys and the resulting string that's returned will contain a name/value pair for each array value.
309
+ * @param {Object} o
310
+ * @param {String} pre (optional) A prefix to add to the url encoded string
311
+ * @return {String}
312
+ */
313
+ urlEncode: function(o, pre){
314
+ var undef, buf = [], key, e = encodeURIComponent;
315
+
316
+ for(key in o){
317
+ undef = !Ext.isDefined(o[key]);
318
+ Ext.each(undef ? key : o[key], function(val, i){
319
+ buf.push("&", e(key), "=", (val != key || !undef) ? e(val) : "");
320
+ });
321
+ }
322
+ if(!pre){
323
+ buf.shift();
324
+ pre = "";
325
+ }
326
+ return pre + buf.join('');
327
+ },
328
+
329
+ /**
330
+ * Takes an encoded URL and and converts it to an object. Example: <pre><code>
331
+ Ext.urlDecode("foo=1&bar=2"); // returns {foo: "1", bar: "2"}
332
+ Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false); // returns {foo: "1", bar: ["2", "3", "4"]}
333
+ </code></pre>
334
+ * @param {String} string
335
+ * @param {Boolean} overwrite (optional) Items of the same name will overwrite previous values instead of creating an an array (Defaults to false).
336
+ * @return {Object} A literal with members
337
+ */
338
+ urlDecode : function(string, overwrite){
339
+ var obj = {},
340
+ pairs = string.split('&'),
341
+ d = decodeURIComponent,
342
+ name,
343
+ value;
344
+ Ext.each(pairs, function(pair) {
345
+ pair = pair.split('=');
346
+ name = d(pair[0]);
347
+ value = d(pair[1]);
348
+ obj[name] = overwrite || !obj[name] ? value :
349
+ [].concat(obj[name]).concat(value);
350
+ });
351
+ return obj;
352
+ },
353
+
354
+ /**
355
+ * Appends content to the query string of a URL, which handles logic for whether to place
356
+ * a question mark or ampersand.
357
+ * @param {String} url The url to append to.
358
+ * @@param {String} s The content to append to the url.
359
+ * @return (String) The appended string
360
+ */
361
+ urlAppend : function(url, s){
362
+ if(!Ext.isEmpty(s)){
363
+ return url + (url.indexOf('?') === -1 ? '?' : '&') + s;
364
+ }
365
+ return url;
366
+ },
367
+
368
+ /**
369
+ * Converts any iterable (numeric indices and a length property) into a true array
370
+ * Don't use this on strings. IE doesn't support "abc"[0] which this implementation depends on.
371
+ * For strings, use this instead: "abc".match(/./g) => [a,b,c];
372
+ * @param {Iterable} the iterable object to be turned into a true Array.
373
+ * @return (Array) array
374
+ */
375
+ toArray : function(){
376
+ return isIE ?
377
+ function(a, i, j, res){
378
+ res = [];
379
+ Ext.each(a, function(v) {
380
+ res.push(v);
381
+ });
382
+ return res.slice(i || 0, j || res.length);
383
+ } :
384
+ function(a, i, j){
385
+ return Array.prototype.slice.call(a, i || 0, j || a.length);
386
+ }
387
+ }(),
388
+
389
+ /**
390
+ * Iterates an array calling the passed function with each item, stopping if your function returns false. If the
391
+ * passed array is not really an array, your function is called once with it.
392
+ * The supplied function is called with (Object item, Number index, Array allItems).
393
+ * @param {Array/NodeList/Mixed} array
394
+ * @param {Function} fn
395
+ * @param {Object} scope
396
+ */
397
+ each: function(array, fn, scope){
398
+ if(Ext.isEmpty(array, true)){
399
+ return;
400
+ }
401
+ if(!isIterable(array) || Ext.isPrimitive(array)){
402
+ array = [array];
403
+ }
404
+ for(var i = 0, len = array.length; i < len; i++){
405
+ if(fn.call(scope || array[i], array[i], i, array) === false){
406
+ return i;
407
+ };
408
+ }
409
+ },
410
+
411
+ /**
412
+ * Iterates either the elements in an array, or each of the properties in an object.
413
+ * <b>Note</b>: If you are only iterating arrays, it is better to call {@link #each}.
414
+ * @param {Object/Array} object The object or array to be iterated
415
+ * @param {Function} fn The function to be called for each iteration.
416
+ * The iteration will stop if the supplied function returns false, or
417
+ * all array elements / object properties have been covered. The signature
418
+ * varies depending on the type of object being interated:
419
+ * <div class="mdetail-params"><ul>
420
+ * <li>Arrays : <tt>(Object item, Number index, Array allItems)</tt>
421
+ * <div class="sub-desc">
422
+ * When iterating an array, the supplied function is called with each item.</div></li>
423
+ * <li>Objects : <tt>(String key, Object value)</tt>
424
+ * <div class="sub-desc">
425
+ * When iterating an object, the supplied function is called with each key-value pair in
426
+ * the object.</div></li>
427
+ * </ul></div>
428
+ * @param {Object} scope The scope to call the supplied function with, defaults to
429
+ * the specified <tt>object</tt>
430
+ */
431
+ iterate : function(obj, fn, scope){
432
+ if(isIterable(obj)){
433
+ Ext.each(obj, fn, scope);
434
+ return;
435
+ }else if(Ext.isObject(obj)){
436
+ for(var prop in obj){
437
+ if(obj.hasOwnProperty(prop)){
438
+ if(fn.call(scope || obj, prop, obj[prop]) === false){
439
+ return;
440
+ };
441
+ }
442
+ }
443
+ }
444
+ },
445
+
446
+ /**
447
+ * Return the dom node for the passed String (id), dom node, or Ext.Element.
448
+ * Here are some examples:
449
+ * <pre><code>
450
+ // gets dom node based on id
451
+ var elDom = Ext.getDom('elId');
452
+ // gets dom node based on the dom node
453
+ var elDom1 = Ext.getDom(elDom);
454
+
455
+ // If we don&#39;t know if we are working with an
456
+ // Ext.Element or a dom node use Ext.getDom
457
+ function(el){
458
+ var dom = Ext.getDom(el);
459
+ // do something with the dom node
460
+ }
461
+ * </code></pre>
462
+ * <b>Note</b>: the dom node to be found actually needs to exist (be rendered, etc)
463
+ * when this method is called to be successful.
464
+ * @param {Mixed} el
465
+ * @return HTMLElement
466
+ */
467
+ getDom : function(el){
468
+ if(!el || !DOC){
469
+ return null;
470
+ }
471
+ return el.dom ? el.dom : (Ext.isString(el) ? DOC.getElementById(el) : el);
472
+ },
473
+
474
+ /**
475
+ * Returns the current document body as an {@link Ext.Element}.
476
+ * @return Ext.Element The document body
477
+ */
478
+ getBody : function(){
479
+ return Ext.get(DOC.body || DOC.documentElement);
480
+ },
481
+
482
+ /**
483
+ * Removes a DOM node from the document. The body node will be ignored if passed in.
484
+ * @param {HTMLElement} node The node to remove
485
+ */
486
+ removeNode : isIE ? function(){
487
+ var d;
488
+ return function(n){
489
+ if(n && n.tagName != 'BODY'){
490
+ d = d || DOC.createElement('div');
491
+ d.appendChild(n);
492
+ d.innerHTML = '';
493
+ }
494
+ }
495
+ }() : function(n){
496
+ if(n && n.parentNode && n.tagName != 'BODY'){
497
+ n.parentNode.removeChild(n);
498
+ }
499
+ },
500
+
501
+ /**
502
+ * <p>Returns true if the passed value is empty.</p>
503
+ * <p>The value is deemed to be empty if it is<div class="mdetail-params"><ul>
504
+ * <li>null</li>
505
+ * <li>undefined</li>
506
+ * <li>an empty array</li>
507
+ * <li>a zero length string (Unless the <tt>allowBlank</tt> parameter is <tt>true</tt>)</li>
508
+ * </ul></div>
509
+ * @param {Mixed} value The value to test
510
+ * @param {Boolean} allowBlank (optional) true to allow empty strings (defaults to false)
511
+ * @return {Boolean}
512
+ */
513
+ isEmpty : function(v, allowBlank){
514
+ return v === null || v === undefined || ((Ext.isArray(v) && !v.length)) || (!allowBlank ? v === '' : false);
515
+ },
516
+
517
+ /**
518
+ * Returns true if the passed object is a JavaScript array, otherwise false.
519
+ * @param {Object} object The object to test
520
+ * @return {Boolean}
521
+ */
522
+ isArray : function(v){
523
+ return toString.apply(v) === '[object Array]';
524
+ },
525
+
526
+ /**
527
+ * Returns true if the passed object is a JavaScript Object, otherwise false.
528
+ * @param {Object} object The object to test
529
+ * @return {Boolean}
530
+ */
531
+ isObject : function(v){
532
+ return v && typeof v == "object";
533
+ },
534
+
535
+ /**
536
+ * Returns true if the passed object is a JavaScript 'primitive', a string, number or boolean.
537
+ * @param {Mixed} value The value to test
538
+ * @return {Boolean}
539
+ */
540
+ isPrimitive : function(v){
541
+ return Ext.isString(v) || Ext.isNumber(v) || Ext.isBoolean(v);
542
+ },
543
+
544
+ /**
545
+ * Returns true if the passed object is a JavaScript Function, otherwise false.
546
+ * @param {Object} object The object to test
547
+ * @return {Boolean}
548
+ */
549
+ isFunction : function(v){
550
+ return toString.apply(v) === '[object Function]';
551
+ },
552
+
553
+ /**
554
+ * Returns true if the passed object is a number. Returns false for non-finite numbers.
555
+ * @param {Object} v The object to test
556
+ * @return {Boolean}
557
+ */
558
+ isNumber: function(v){
559
+ return typeof v === 'number' && isFinite(v);
560
+ },
561
+
562
+ /**
563
+ * Returns true if the passed object is a string.
564
+ * @param {Object} v The object to test
565
+ * @return {Boolean}
566
+ */
567
+ isString: function(v){
568
+ return typeof v === 'string';
569
+ },
570
+
571
+ /**
572
+ * Returns true if the passed object is a boolean.
573
+ * @param {Object} v The object to test
574
+ * @return {Boolean}
575
+ */
576
+ isBoolean: function(v){
577
+ return typeof v === 'boolean';
578
+ },
579
+
580
+ /**
581
+ * Returns true if the passed object is not undefined.
582
+ * @param {Object} v The object to test
583
+ * @return {Boolean}
584
+ */
585
+ isDefined: function(v){
586
+ return typeof v !== 'undefined';
587
+ },
588
+
589
+ /**
590
+ * True if the detected browser is Opera.
591
+ * @type Boolean
592
+ */
593
+ isOpera : isOpera,
594
+ /**
595
+ * True if the detected browser uses WebKit.
596
+ * @type Boolean
597
+ */
598
+ isWebKit: isWebKit,
599
+ /**
600
+ * True if the detected browser is Chrome.
601
+ * @type Boolean
602
+ */
603
+ isChrome : isChrome,
604
+ /**
605
+ * True if the detected browser is Safari.
606
+ * @type Boolean
607
+ */
608
+ isSafari : isSafari,
609
+ /**
610
+ * True if the detected browser is Safari 3.x.
611
+ * @type Boolean
612
+ */
613
+ isSafari3 : isSafari3,
614
+ /**
615
+ * True if the detected browser is Safari 4.x.
616
+ * @type Boolean
617
+ */
618
+ isSafari4 : isSafari4,
619
+ /**
620
+ * True if the detected browser is Safari 2.x.
621
+ * @type Boolean
622
+ */
623
+ isSafari2 : isSafari2,
624
+ /**
625
+ * True if the detected browser is Internet Explorer.
626
+ * @type Boolean
627
+ */
628
+ isIE : isIE,
629
+ /**
630
+ * True if the detected browser is Internet Explorer 6.x.
631
+ * @type Boolean
632
+ */
633
+ isIE6 : isIE6,
634
+ /**
635
+ * True if the detected browser is Internet Explorer 7.x.
636
+ * @type Boolean
637
+ */
638
+ isIE7 : isIE7,
639
+ /**
640
+ * True if the detected browser is Internet Explorer 8.x.
641
+ * @type Boolean
642
+ */
643
+ isIE8 : isIE8,
644
+ /**
645
+ * True if the detected browser uses the Gecko layout engine (e.g. Mozilla, Firefox).
646
+ * @type Boolean
647
+ */
648
+ isGecko : isGecko,
649
+ /**
650
+ * True if the detected browser uses a pre-Gecko 1.9 layout engine (e.g. Firefox 2.x).
651
+ * @type Boolean
652
+ */
653
+ isGecko2 : isGecko2,
654
+ /**
655
+ * True if the detected browser uses a Gecko 1.9+ layout engine (e.g. Firefox 3.x).
656
+ * @type Boolean
657
+ */
658
+ isGecko3 : isGecko3,
659
+ /**
660
+ * True if the detected browser is Internet Explorer running in non-strict mode.
661
+ * @type Boolean
662
+ */
663
+ isBorderBox : isBorderBox,
664
+ /**
665
+ * True if the detected platform is Linux.
666
+ * @type Boolean
667
+ */
668
+ isLinux : isLinux,
669
+ /**
670
+ * True if the detected platform is Windows.
671
+ * @type Boolean
672
+ */
673
+ isWindows : isWindows,
674
+ /**
675
+ * True if the detected platform is Mac OS.
676
+ * @type Boolean
677
+ */
678
+ isMac : isMac,
679
+ /**
680
+ * True if the detected platform is Adobe Air.
681
+ * @type Boolean
682
+ */
683
+ isAir : isAir
684
+ });
685
+
686
+ /**
687
+ * Creates namespaces to be used for scoping variables and classes so that they are not global.
688
+ * Specifying the last node of a namespace implicitly creates all other nodes. Usage:
689
+ * <pre><code>
690
+ Ext.namespace('Company', 'Company.data');
691
+ Ext.namespace('Company.data'); // equivalent and preferable to above syntax
692
+ Company.Widget = function() { ... }
693
+ Company.data.CustomStore = function(config) { ... }
694
+ </code></pre>
695
+ * @param {String} namespace1
696
+ * @param {String} namespace2
697
+ * @param {String} etc
698
+ * @method namespace
699
+ */
700
+ Ext.ns = Ext.namespace;
701
+ })();
702
+
703
+ Ext.ns("Ext", "Ext.util", "Ext.lib", "Ext.data");
704
+
705
+
706
+ /**
707
+ * @class Function
708
+ * These functions are available on every Function object (any JavaScript function).
709
+ */
710
+ Ext.apply(Function.prototype, {
711
+ /**
712
+ * Creates an interceptor function. The passed fcn is called before the original one. If it returns false,
713
+ * the original one is not called. The resulting function returns the results of the original function.
714
+ * The passed fcn is called with the parameters of the original function. Example usage:
715
+ * <pre><code>
716
+ var sayHi = function(name){
717
+ alert('Hi, ' + name);
718
+ }
719
+
720
+ sayHi('Fred'); // alerts "Hi, Fred"
721
+
722
+ // create a new function that validates input without
723
+ // directly modifying the original function:
724
+ var sayHiToFriend = sayHi.createInterceptor(function(name){
725
+ return name == 'Brian';
726
+ });
727
+
728
+ sayHiToFriend('Fred'); // no alert
729
+ sayHiToFriend('Brian'); // alerts "Hi, Brian"
730
+ </code></pre>
731
+ * @param {Function} fcn The function to call before the original
732
+ * @param {Object} scope (optional) The scope of the passed fcn (Defaults to scope of original function or window)
733
+ * @return {Function} The new function
734
+ */
735
+ createInterceptor : function(fcn, scope){
736
+ var method = this;
737
+ return !Ext.isFunction(fcn) ?
738
+ this :
739
+ function() {
740
+ var me = this,
741
+ args = arguments;
742
+ fcn.target = me;
743
+ fcn.method = method;
744
+ return (fcn.apply(scope || me || window, args) !== false) ?
745
+ method.apply(me || window, args) :
746
+ null;
747
+ };
748
+ },
749
+
750
+ /**
751
+ * Creates a callback that passes arguments[0], arguments[1], arguments[2], ...
752
+ * Call directly on any function. Example: <code>myFunction.createCallback(arg1, arg2)</code>
753
+ * Will create a function that is bound to those 2 args. <b>If a specific scope is required in the
754
+ * callback, use {@link #createDelegate} instead.</b> The function returned by createCallback always
755
+ * executes in the window scope.
756
+ * <p>This method is required when you want to pass arguments to a callback function. If no arguments
757
+ * are needed, you can simply pass a reference to the function as a callback (e.g., callback: myFn).
758
+ * However, if you tried to pass a function with arguments (e.g., callback: myFn(arg1, arg2)) the function
759
+ * would simply execute immediately when the code is parsed. Example usage:
760
+ * <pre><code>
761
+ var sayHi = function(name){
762
+ alert('Hi, ' + name);
763
+ }
764
+
765
+ // clicking the button alerts "Hi, Fred"
766
+ new Ext.Button({
767
+ text: 'Say Hi',
768
+ renderTo: Ext.getBody(),
769
+ handler: sayHi.createCallback('Fred')
770
+ });
771
+ </code></pre>
772
+ * @return {Function} The new function
773
+ */
774
+ createCallback : function(/*args...*/){
775
+ // make args available, in function below
776
+ var args = arguments,
777
+ method = this;
778
+ return function() {
779
+ return method.apply(window, args);
780
+ };
781
+ },
782
+
783
+ /**
784
+ * Creates a delegate (callback) that sets the scope to obj.
785
+ * Call directly on any function. Example: <code>this.myFunction.createDelegate(this, [arg1, arg2])</code>
786
+ * Will create a function that is automatically scoped to obj so that the <tt>this</tt> variable inside the
787
+ * callback points to obj. Example usage:
788
+ * <pre><code>
789
+ var sayHi = function(name){
790
+ // Note this use of "this.text" here. This function expects to
791
+ // execute within a scope that contains a text property. In this
792
+ // example, the "this" variable is pointing to the btn object that
793
+ // was passed in createDelegate below.
794
+ alert('Hi, ' + name + '. You clicked the "' + this.text + '" button.');
795
+ }
796
+
797
+ var btn = new Ext.Button({
798
+ text: 'Say Hi',
799
+ renderTo: Ext.getBody()
800
+ });
801
+
802
+ // This callback will execute in the scope of the
803
+ // button instance. Clicking the button alerts
804
+ // "Hi, Fred. You clicked the "Say Hi" button."
805
+ btn.on('click', sayHi.createDelegate(btn, ['Fred']));
806
+ </code></pre>
807
+ * @param {Object} obj (optional) The object for which the scope is set
808
+ * @param {Array} args (optional) Overrides arguments for the call. (Defaults to the arguments passed by the caller)
809
+ * @param {Boolean/Number} appendArgs (optional) if True args are appended to call args instead of overriding,
810
+ * if a number the args are inserted at the specified position
811
+ * @return {Function} The new function
812
+ */
813
+ createDelegate : function(obj, args, appendArgs){
814
+ var method = this;
815
+ return function() {
816
+ var callArgs = args || arguments;
817
+ if (appendArgs === true){
818
+ callArgs = Array.prototype.slice.call(arguments, 0);
819
+ callArgs = callArgs.concat(args);
820
+ }else if (Ext.isNumber(appendArgs)){
821
+ callArgs = Array.prototype.slice.call(arguments, 0); // copy arguments first
822
+ var applyArgs = [appendArgs, 0].concat(args); // create method call params
823
+ Array.prototype.splice.apply(callArgs, applyArgs); // splice them in
824
+ }
825
+ return method.apply(obj || window, callArgs);
826
+ };
827
+ },
828
+
829
+ /**
830
+ * Calls this function after the number of millseconds specified, optionally in a specific scope. Example usage:
831
+ * <pre><code>
832
+ var sayHi = function(name){
833
+ alert('Hi, ' + name);
834
+ }
835
+
836
+ // executes immediately:
837
+ sayHi('Fred');
838
+
839
+ // executes after 2 seconds:
840
+ sayHi.defer(2000, this, ['Fred']);
841
+
842
+ // this syntax is sometimes useful for deferring
843
+ // execution of an anonymous function:
844
+ (function(){
845
+ alert('Anonymous');
846
+ }).defer(100);
847
+ </code></pre>
848
+ * @param {Number} millis The number of milliseconds for the setTimeout call (if less than or equal to 0 the function is executed immediately)
849
+ * @param {Object} obj (optional) The object for which the scope is set
850
+ * @param {Array} args (optional) Overrides arguments for the call. (Defaults to the arguments passed by the caller)
851
+ * @param {Boolean/Number} appendArgs (optional) if True args are appended to call args instead of overriding,
852
+ * if a number the args are inserted at the specified position
853
+ * @return {Number} The timeout id that can be used with clearTimeout
854
+ */
855
+ defer : function(millis, obj, args, appendArgs){
856
+ var fn = this.createDelegate(obj, args, appendArgs);
857
+ if(millis > 0){
858
+ return setTimeout(fn, millis);
859
+ }
860
+ fn();
861
+ return 0;
862
+ }
863
+ });
864
+
865
+ /**
866
+ * @class String
867
+ * These functions are available on every String object.
868
+ */
869
+ Ext.applyIf(String, {
870
+ /**
871
+ * Allows you to define a tokenized string and pass an arbitrary number of arguments to replace the tokens. Each
872
+ * token must be unique, and must increment in the format {0}, {1}, etc. Example usage:
873
+ * <pre><code>
874
+ var cls = 'my-class', text = 'Some text';
875
+ var s = String.format('&lt;div class="{0}">{1}&lt;/div>', cls, text);
876
+ // s now contains the string: '&lt;div class="my-class">Some text&lt;/div>'
877
+ * </code></pre>
878
+ * @param {String} string The tokenized string to be formatted
879
+ * @param {String} value1 The value to replace token {0}
880
+ * @param {String} value2 Etc...
881
+ * @return {String} The formatted string
882
+ * @static
883
+ */
884
+ format : function(format){
885
+ var args = Ext.toArray(arguments, 1);
886
+ return format.replace(/\{(\d+)\}/g, function(m, i){
887
+ return args[i];
888
+ });
889
+ }
890
+ });
891
+
892
+ /**
893
+ * @class Array
894
+ */
895
+ Ext.applyIf(Array.prototype, {
896
+ /**
897
+ * Checks whether or not the specified object exists in the array.
898
+ * @param {Object} o The object to check for
899
+ * @return {Number} The index of o in the array (or -1 if it is not found)
900
+ */
901
+ indexOf : function(o){
902
+ for (var i = 0, len = this.length; i < len; i++){
903
+ if(this[i] == o){
904
+ return i;
905
+ }
906
+ }
907
+ return -1;
908
+ },
909
+
910
+ /**
911
+ * Removes the specified object from the array. If the object is not found nothing happens.
912
+ * @param {Object} o The object to remove
913
+ * @return {Array} this array
914
+ */
915
+ remove : function(o){
916
+ var index = this.indexOf(o);
917
+ if(index != -1){
918
+ this.splice(index, 1);
919
+ }
920
+ return this;
921
+ }
922
+ });
923
+ /**
924
+ * @class Ext
925
+ */
926
+
927
+ Ext.ns("Ext.grid", "Ext.dd", "Ext.tree", "Ext.form", "Ext.menu",
928
+ "Ext.state", "Ext.layout", "Ext.app", "Ext.ux", "Ext.chart", "Ext.direct");
929
+ /**
930
+ * Namespace alloted for extensions to the framework.
931
+ * @property ux
932
+ * @type Object
933
+ */
934
+
935
+ Ext.apply(Ext, function(){
936
+ var E = Ext, idSeed = 0;
937
+
938
+ return {
939
+ /**
940
+ * A reusable empty function
941
+ * @property
942
+ * @type Function
943
+ */
944
+ emptyFn : function(){},
945
+
946
+ /**
947
+ * URL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
948
+ * In older versions of IE, this defaults to "http://extjs.com/s.gif" and you should change this to a URL on your server.
949
+ * For other browsers it uses an inline data URL.
950
+ * @type String
951
+ */
952
+ BLANK_IMAGE_URL : Ext.isIE6 || Ext.isIE7 ?
953
+ 'http:/' + '/extjs.com/s.gif' :
954
+ 'data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==',
955
+
956
+ extendX : function(supr, fn){
957
+ return Ext.extend(supr, fn(supr.prototype));
958
+ },
959
+
960
+ /**
961
+ * Returns the current HTML document object as an {@link Ext.Element}.
962
+ * @return Ext.Element The document
963
+ */
964
+ getDoc : function(){
965
+ return Ext.get(document);
966
+ },
967
+
968
+ /**
969
+ * Returns true if the passed object is a JavaScript date object, otherwise false.
970
+ * @param {Object} object The object to test
971
+ * @return {Boolean}
972
+ */
973
+ isDate : function(v){
974
+ return Object.prototype.toString.apply(v) === '[object Date]';
975
+ },
976
+
977
+ /**
978
+ * Utility method for validating that a value is numeric, returning the specified default value if it is not.
979
+ * @param {Mixed} value Should be a number, but any type will be handled appropriately
980
+ * @param {Number} defaultValue The value to return if the original value is non-numeric
981
+ * @return {Number} Value, if numeric, else defaultValue
982
+ */
983
+ num : function(v, defaultValue){
984
+ v = Number(v === null || typeof v == 'boolean'? NaN : v);
985
+ return isNaN(v)? defaultValue : v;
986
+ },
987
+
988
+ /**
989
+ * <p>Utility method for returning a default value if the passed value is empty.</p>
990
+ * <p>The value is deemed to be empty if it is<div class="mdetail-params"><ul>
991
+ * <li>null</li>
992
+ * <li>undefined</li>
993
+ * <li>an empty array</li>
994
+ * <li>a zero length string (Unless the <tt>allowBlank</tt> parameter is <tt>true</tt>)</li>
995
+ * </ul></div>
996
+ * @param {Mixed} value The value to test
997
+ * @param {Mixed} defaultValue The value to return if the original value is empty
998
+ * @param {Boolean} allowBlank (optional) true to allow zero length strings to qualify as non-empty (defaults to false)
999
+ * @return {Mixed} value, if non-empty, else defaultValue
1000
+ */
1001
+ value : function(v, defaultValue, allowBlank){
1002
+ return Ext.isEmpty(v, allowBlank) ? defaultValue : v;
1003
+ },
1004
+
1005
+ /**
1006
+ * Escapes the passed string for use in a regular expression
1007
+ * @param {String} str
1008
+ * @return {String}
1009
+ */
1010
+ escapeRe : function(s) {
1011
+ return s.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1");
1012
+ },
1013
+
1014
+ sequence : function(o, name, fn, scope){
1015
+ o[name] = o[name].createSequence(fn, scope);
1016
+ },
1017
+
1018
+ /**
1019
+ * Applies event listeners to elements by selectors when the document is ready.
1020
+ * The event name is specified with an <tt>&#64;</tt> suffix.
1021
+ * <pre><code>
1022
+ Ext.addBehaviors({
1023
+ // add a listener for click on all anchors in element with id foo
1024
+ '#foo a&#64;click' : function(e, t){
1025
+ // do something
1026
+ },
1027
+
1028
+ // add the same listener to multiple selectors (separated by comma BEFORE the &#64;)
1029
+ '#foo a, #bar span.some-class&#64;mouseover' : function(){
1030
+ // do something
1031
+ }
1032
+ });
1033
+ * </code></pre>
1034
+ * @param {Object} obj The list of behaviors to apply
1035
+ */
1036
+ addBehaviors : function(o){
1037
+ if(!Ext.isReady){
1038
+ Ext.onReady(function(){
1039
+ Ext.addBehaviors(o);
1040
+ });
1041
+ } else {
1042
+ var cache = {}, // simple cache for applying multiple behaviors to same selector does query multiple times
1043
+ parts,
1044
+ b,
1045
+ s;
1046
+ for (b in o) {
1047
+ if ((parts = b.split('@'))[1]) { // for Object prototype breakers
1048
+ s = parts[0];
1049
+ if(!cache[s]){
1050
+ cache[s] = Ext.select(s);
1051
+ }
1052
+ cache[s].on(parts[1], o[b]);
1053
+ }
1054
+ }
1055
+ cache = null;
1056
+ }
1057
+ },
1058
+
1059
+
1060
+ // deprecated
1061
+ combine : function(){
1062
+ var as = arguments, l = as.length, r = [];
1063
+ for(var i = 0; i < l; i++){
1064
+ var a = as[i];
1065
+ if(Ext.isArray(a)){
1066
+ r = r.concat(a);
1067
+ }else if(a.length !== undefined && !a.substr){
1068
+ r = r.concat(Array.prototype.slice.call(a, 0));
1069
+ }else{
1070
+ r.push(a);
1071
+ }
1072
+ }
1073
+ return r;
1074
+ },
1075
+
1076
+ /**
1077
+ * Copies a set of named properties fom the source object to the destination object.
1078
+ * <p>example:<pre><code>
1079
+ ImageComponent = Ext.extend(Ext.BoxComponent, {
1080
+ initComponent: function() {
1081
+ this.autoEl = { tag: 'img' };
1082
+ MyComponent.superclass.initComponent.apply(this, arguments);
1083
+ this.initialBox = Ext.copyTo({}, this.initialConfig, 'x,y,width,height');
1084
+ }
1085
+ });
1086
+ * </code></pre>
1087
+ * @param {Object} The destination object.
1088
+ * @param {Object} The source object.
1089
+ * @param {Array/String} Either an Array of property names, or a comma-delimited list
1090
+ * of property names to copy.
1091
+ * @return {Object} The modified object.
1092
+ */
1093
+ copyTo : function(dest, source, names){
1094
+ if(typeof names == 'string'){
1095
+ names = names.split(/[,;\s]/);
1096
+ }
1097
+ Ext.each(names, function(name){
1098
+ if(source.hasOwnProperty(name)){
1099
+ dest[name] = source[name];
1100
+ }
1101
+ }, this);
1102
+ return dest;
1103
+ },
1104
+
1105
+ /**
1106
+ * Attempts to destroy any objects passed to it by removing all event listeners, removing them from the
1107
+ * DOM (if applicable) and calling their destroy functions (if available). This method is primarily
1108
+ * intended for arguments of type {@link Ext.Element} and {@link Ext.Component}, but any subclass of
1109
+ * {@link Ext.util.Observable} can be passed in. Any number of elements and/or components can be
1110
+ * passed into this function in a single call as separate arguments.
1111
+ * @param {Mixed} arg1 An {@link Ext.Element}, {@link Ext.Component}, or an Array of either of these to destroy
1112
+ * @param {Mixed} arg2 (optional)
1113
+ * @param {Mixed} etc... (optional)
1114
+ */
1115
+ destroy : function(){
1116
+ Ext.each(arguments, function(arg){
1117
+ if(arg){
1118
+ if(Ext.isArray(arg)){
1119
+ this.destroy.apply(this, arg);
1120
+ }else if(Ext.isFunction(arg.destroy)){
1121
+ arg.destroy();
1122
+ }else if(arg.dom){
1123
+ arg.remove();
1124
+ }
1125
+ }
1126
+ }, this);
1127
+ },
1128
+
1129
+ /**
1130
+ * Attempts to destroy and then remove a set of named properties of the passed object.
1131
+ * @param {Object} o The object (most likely a Component) who's properties you wish to destroy.
1132
+ * @param {Mixed} arg1 The name of the property to destroy and remove from the object.
1133
+ * @param {Mixed} etc... More property names to destroy and remove.
1134
+ */
1135
+ destroyMembers : function(o, arg1, arg2, etc){
1136
+ for(var i = 1, a = arguments, len = a.length; i < len; i++) {
1137
+ Ext.destroy(o[a[i]]);
1138
+ delete o[a[i]];
1139
+ }
1140
+ },
1141
+
1142
+ /**
1143
+ * Creates a copy of the passed Array with falsy values removed.
1144
+ * @param {Array/NodeList} arr The Array from which to remove falsy values.
1145
+ * @return {Array} The new, compressed Array.
1146
+ */
1147
+ clean : function(arr){
1148
+ var ret = [];
1149
+ Ext.each(arr, function(v){
1150
+ if(!!v){
1151
+ ret.push(v);
1152
+ }
1153
+ });
1154
+ return ret;
1155
+ },
1156
+
1157
+ /**
1158
+ * Creates a copy of the passed Array, filtered to contain only unique values.
1159
+ * @param {Array} arr The Array to filter
1160
+ * @return {Array} The new Array containing unique values.
1161
+ */
1162
+ unique : function(arr){
1163
+ var ret = [],
1164
+ collect = {};
1165
+
1166
+ Ext.each(arr, function(v) {
1167
+ if(!collect[v]){
1168
+ ret.push(v);
1169
+ }
1170
+ collect[v] = true;
1171
+ });
1172
+ return ret;
1173
+ },
1174
+
1175
+ /**
1176
+ * Recursively flattens into 1-d Array. Injects Arrays inline.
1177
+ * @param {Array} arr The array to flatten
1178
+ * @return {Array} The new, flattened array.
1179
+ */
1180
+ flatten : function(arr){
1181
+ var worker = [];
1182
+ function rFlatten(a) {
1183
+ Ext.each(a, function(v) {
1184
+ if(Ext.isArray(v)){
1185
+ rFlatten(v);
1186
+ }else{
1187
+ worker.push(v);
1188
+ }
1189
+ });
1190
+ return worker;
1191
+ }
1192
+ return rFlatten(arr);
1193
+ },
1194
+
1195
+ /**
1196
+ * Returns the minimum value in the Array.
1197
+ * @param {Array|NodeList} arr The Array from which to select the minimum value.
1198
+ * @param {Function} comp (optional) a function to perform the comparision which determines minimization.
1199
+ * If omitted the "<" operator will be used. Note: gt = 1; eq = 0; lt = -1
1200
+ * @return {Object} The minimum value in the Array.
1201
+ */
1202
+ min : function(arr, comp){
1203
+ var ret = arr[0];
1204
+ comp = comp || function(a,b){ return a < b ? -1 : 1; };
1205
+ Ext.each(arr, function(v) {
1206
+ ret = comp(ret, v) == -1 ? ret : v;
1207
+ });
1208
+ return ret;
1209
+ },
1210
+
1211
+ /**
1212
+ * Returns the maximum value in the Array
1213
+ * @param {Array|NodeList} arr The Array from which to select the maximum value.
1214
+ * @param {Function} comp (optional) a function to perform the comparision which determines maximization.
1215
+ * If omitted the ">" operator will be used. Note: gt = 1; eq = 0; lt = -1
1216
+ * @return {Object} The maximum value in the Array.
1217
+ */
1218
+ max : function(arr, comp){
1219
+ var ret = arr[0];
1220
+ comp = comp || function(a,b){ return a > b ? 1 : -1; };
1221
+ Ext.each(arr, function(v) {
1222
+ ret = comp(ret, v) == 1 ? ret : v;
1223
+ });
1224
+ return ret;
1225
+ },
1226
+
1227
+ /**
1228
+ * Calculates the mean of the Array
1229
+ * @param {Array} arr The Array to calculate the mean value of.
1230
+ * @return {Number} The mean.
1231
+ */
1232
+ mean : function(arr){
1233
+ return Ext.sum(arr) / arr.length;
1234
+ },
1235
+
1236
+ /**
1237
+ * Calculates the sum of the Array
1238
+ * @param {Array} arr The Array to calculate the sum value of.
1239
+ * @return {Number} The sum.
1240
+ */
1241
+ sum : function(arr){
1242
+ var ret = 0;
1243
+ Ext.each(arr, function(v) {
1244
+ ret += v;
1245
+ });
1246
+ return ret;
1247
+ },
1248
+
1249
+ /**
1250
+ * Partitions the set into two sets: a true set and a false set.
1251
+ * Example:
1252
+ * Example2:
1253
+ * <pre><code>
1254
+ // Example 1:
1255
+ Ext.partition([true, false, true, true, false]); // [[true, true, true], [false, false]]
1256
+
1257
+ // Example 2:
1258
+ Ext.partition(
1259
+ Ext.query("p"),
1260
+ function(val){
1261
+ return val.className == "class1"
1262
+ }
1263
+ );
1264
+ // true are those paragraph elements with a className of "class1",
1265
+ // false set are those that do not have that className.
1266
+ * </code></pre>
1267
+ * @param {Array|NodeList} arr The array to partition
1268
+ * @param {Function} truth (optional) a function to determine truth. If this is omitted the element
1269
+ * itself must be able to be evaluated for its truthfulness.
1270
+ * @return {Array} [true<Array>,false<Array>]
1271
+ */
1272
+ partition : function(arr, truth){
1273
+ var ret = [[],[]];
1274
+ Ext.each(arr, function(v, i, a) {
1275
+ ret[ (truth && truth(v, i, a)) || (!truth && v) ? 0 : 1].push(v);
1276
+ });
1277
+ return ret;
1278
+ },
1279
+
1280
+ /**
1281
+ * Invokes a method on each item in an Array.
1282
+ * <pre><code>
1283
+ // Example:
1284
+ Ext.invoke(Ext.query("p"), "getAttribute", "id");
1285
+ // [el1.getAttribute("id"), el2.getAttribute("id"), ..., elN.getAttribute("id")]
1286
+ * </code></pre>
1287
+ * @param {Array|NodeList} arr The Array of items to invoke the method on.
1288
+ * @param {String} methodName The method name to invoke.
1289
+ * @param {Anything} ... Arguments to send into the method invocation.
1290
+ * @return {Array} The results of invoking the method on each item in the array.
1291
+ */
1292
+ invoke : function(arr, methodName){
1293
+ var ret = [],
1294
+ args = Array.prototype.slice.call(arguments, 2);
1295
+ Ext.each(arr, function(v,i) {
1296
+ if (v && typeof v[methodName] == "function") {
1297
+ ret.push(v[methodName].apply(v, args));
1298
+ } else {
1299
+ ret.push(undefined);
1300
+ }
1301
+ });
1302
+ return ret;
1303
+ },
1304
+
1305
+ /**
1306
+ * Plucks the value of a property from each item in the Array
1307
+ * <pre><code>
1308
+ // Example:
1309
+ Ext.pluck(Ext.query("p"), "className"); // [el1.className, el2.className, ..., elN.className]
1310
+ * </code></pre>
1311
+ * @param {Array|NodeList} arr The Array of items to pluck the value from.
1312
+ * @param {String} prop The property name to pluck from each element.
1313
+ * @return {Array} The value from each item in the Array.
1314
+ */
1315
+ pluck : function(arr, prop){
1316
+ var ret = [];
1317
+ Ext.each(arr, function(v) {
1318
+ ret.push( v[prop] );
1319
+ });
1320
+ return ret;
1321
+ },
1322
+
1323
+ /**
1324
+ * <p>Zips N sets together.</p>
1325
+ * <pre><code>
1326
+ // Example 1:
1327
+ Ext.zip([1,2,3],[4,5,6]); // [[1,4],[2,5],[3,6]]
1328
+ // Example 2:
1329
+ Ext.zip(
1330
+ [ "+", "-", "+"],
1331
+ [ 12, 10, 22],
1332
+ [ 43, 15, 96],
1333
+ function(a, b, c){
1334
+ return "$" + a + "" + b + "." + c
1335
+ }
1336
+ ); // ["$+12.43", "$-10.15", "$+22.96"]
1337
+ * </code></pre>
1338
+ * @param {Arrays|NodeLists} arr This argument may be repeated. Array(s) to contribute values.
1339
+ * @param {Function} zipper (optional) The last item in the argument list. This will drive how the items are zipped together.
1340
+ * @return {Array} The zipped set.
1341
+ */
1342
+ zip : function(){
1343
+ var parts = Ext.partition(arguments, function( val ){ return !Ext.isFunction(val); }),
1344
+ arrs = parts[0],
1345
+ fn = parts[1][0],
1346
+ len = Ext.max(Ext.pluck(arrs, "length")),
1347
+ ret = [];
1348
+
1349
+ for (var i = 0; i < len; i++) {
1350
+ ret[i] = [];
1351
+ if(fn){
1352
+ ret[i] = fn.apply(fn, Ext.pluck(arrs, i));
1353
+ }else{
1354
+ for (var j = 0, aLen = arrs.length; j < aLen; j++){
1355
+ ret[i].push( arrs[j][i] );
1356
+ }
1357
+ }
1358
+ }
1359
+ return ret;
1360
+ },
1361
+
1362
+ /**
1363
+ * This is shorthand reference to {@link Ext.ComponentMgr#get}.
1364
+ * Looks up an existing {@link Ext.Component Component} by {@link Ext.Component#id id}
1365
+ * @param {String} id The component {@link Ext.Component#id id}
1366
+ * @return Ext.Component The Component, <tt>undefined</tt> if not found, or <tt>null</tt> if a
1367
+ * Class was found.
1368
+ */
1369
+ getCmp : function(id){
1370
+ return Ext.ComponentMgr.get(id);
1371
+ },
1372
+
1373
+ /**
1374
+ * By default, Ext intelligently decides whether floating elements should be shimmed. If you are using flash,
1375
+ * you may want to set this to true.
1376
+ * @type Boolean
1377
+ */
1378
+ useShims: E.isIE6 || (E.isMac && E.isGecko2),
1379
+
1380
+ // inpired by a similar function in mootools library
1381
+ /**
1382
+ * Returns the type of object that is passed in. If the object passed in is null or undefined it
1383
+ * return false otherwise it returns one of the following values:<div class="mdetail-params"><ul>
1384
+ * <li><b>string</b>: If the object passed is a string</li>
1385
+ * <li><b>number</b>: If the object passed is a number</li>
1386
+ * <li><b>boolean</b>: If the object passed is a boolean value</li>
1387
+ * <li><b>date</b>: If the object passed is a Date object</li>
1388
+ * <li><b>function</b>: If the object passed is a function reference</li>
1389
+ * <li><b>object</b>: If the object passed is an object</li>
1390
+ * <li><b>array</b>: If the object passed is an array</li>
1391
+ * <li><b>regexp</b>: If the object passed is a regular expression</li>
1392
+ * <li><b>element</b>: If the object passed is a DOM Element</li>
1393
+ * <li><b>nodelist</b>: If the object passed is a DOM NodeList</li>
1394
+ * <li><b>textnode</b>: If the object passed is a DOM text node and contains something other than whitespace</li>
1395
+ * <li><b>whitespace</b>: If the object passed is a DOM text node and contains only whitespace</li>
1396
+ * </ul></div>
1397
+ * @param {Mixed} object
1398
+ * @return {String}
1399
+ */
1400
+ type : function(o){
1401
+ if(o === undefined || o === null){
1402
+ return false;
1403
+ }
1404
+ if(o.htmlElement){
1405
+ return 'element';
1406
+ }
1407
+ var t = typeof o;
1408
+ if(t == 'object' && o.nodeName) {
1409
+ switch(o.nodeType) {
1410
+ case 1: return 'element';
1411
+ case 3: return (/\S/).test(o.nodeValue) ? 'textnode' : 'whitespace';
1412
+ }
1413
+ }
1414
+ if(t == 'object' || t == 'function') {
1415
+ switch(o.constructor) {
1416
+ case Array: return 'array';
1417
+ case RegExp: return 'regexp';
1418
+ case Date: return 'date';
1419
+ }
1420
+ if(typeof o.length == 'number' && typeof o.item == 'function') {
1421
+ return 'nodelist';
1422
+ }
1423
+ }
1424
+ return t;
1425
+ },
1426
+
1427
+ intercept : function(o, name, fn, scope){
1428
+ o[name] = o[name].createInterceptor(fn, scope);
1429
+ },
1430
+
1431
+ // internal
1432
+ callback : function(cb, scope, args, delay){
1433
+ if(Ext.isFunction(cb)){
1434
+ if(delay){
1435
+ cb.defer(delay, scope, args || []);
1436
+ }else{
1437
+ cb.apply(scope, args || []);
1438
+ }
1439
+ }
1440
+ }
1441
+ };
1442
+ }());
1443
+
1444
+ /**
1445
+ * @class Function
1446
+ * These functions are available on every Function object (any JavaScript function).
1447
+ */
1448
+ Ext.apply(Function.prototype, {
1449
+ /**
1450
+ * Create a combined function call sequence of the original function + the passed function.
1451
+ * The resulting function returns the results of the original function.
1452
+ * The passed fcn is called with the parameters of the original function. Example usage:
1453
+ * <pre><code>
1454
+ var sayHi = function(name){
1455
+ alert('Hi, ' + name);
1456
+ }
1457
+
1458
+ sayHi('Fred'); // alerts "Hi, Fred"
1459
+
1460
+ var sayGoodbye = sayHi.createSequence(function(name){
1461
+ alert('Bye, ' + name);
1462
+ });
1463
+
1464
+ sayGoodbye('Fred'); // both alerts show
1465
+ </code></pre>
1466
+ * @param {Function} fcn The function to sequence
1467
+ * @param {Object} scope (optional) The scope of the passed fcn (Defaults to scope of original function or window)
1468
+ * @return {Function} The new function
1469
+ */
1470
+ createSequence : function(fcn, scope){
1471
+ var method = this;
1472
+ return !Ext.isFunction(fcn) ?
1473
+ this :
1474
+ function(){
1475
+ var retval = method.apply(this || window, arguments);
1476
+ fcn.apply(scope || this || window, arguments);
1477
+ return retval;
1478
+ };
1479
+ }
1480
+ });
1481
+
1482
+
1483
+ /**
1484
+ * @class String
1485
+ * These functions are available as static methods on the JavaScript String object.
1486
+ */
1487
+ Ext.applyIf(String, {
1488
+
1489
+ /**
1490
+ * Escapes the passed string for ' and \
1491
+ * @param {String} string The string to escape
1492
+ * @return {String} The escaped string
1493
+ * @static
1494
+ */
1495
+ escape : function(string) {
1496
+ return string.replace(/('|\\)/g, "\\$1");
1497
+ },
1498
+
1499
+ /**
1500
+ * Pads the left side of a string with a specified character. This is especially useful
1501
+ * for normalizing number and date strings. Example usage:
1502
+ * <pre><code>
1503
+ var s = String.leftPad('123', 5, '0');
1504
+ // s now contains the string: '00123'
1505
+ * </code></pre>
1506
+ * @param {String} string The original string
1507
+ * @param {Number} size The total length of the output string
1508
+ * @param {String} char (optional) The character with which to pad the original string (defaults to empty string " ")
1509
+ * @return {String} The padded string
1510
+ * @static
1511
+ */
1512
+ leftPad : function (val, size, ch) {
1513
+ var result = String(val);
1514
+ if(!ch) {
1515
+ ch = " ";
1516
+ }
1517
+ while (result.length < size) {
1518
+ result = ch + result;
1519
+ }
1520
+ return result;
1521
+ }
1522
+ });
1523
+
1524
+ /**
1525
+ * Utility function that allows you to easily switch a string between two alternating values. The passed value
1526
+ * is compared to the current string, and if they are equal, the other value that was passed in is returned. If
1527
+ * they are already different, the first value passed in is returned. Note that this method returns the new value
1528
+ * but does not change the current string.
1529
+ * <pre><code>
1530
+ // alternate sort directions
1531
+ sort = sort.toggle('ASC', 'DESC');
1532
+
1533
+ // instead of conditional logic:
1534
+ sort = (sort == 'ASC' ? 'DESC' : 'ASC');
1535
+ </code></pre>
1536
+ * @param {String} value The value to compare to the current string
1537
+ * @param {String} other The new value to use if the string already equals the first value passed in
1538
+ * @return {String} The new value
1539
+ */
1540
+ String.prototype.toggle = function(value, other){
1541
+ return this == value ? other : value;
1542
+ };
1543
+
1544
+ /**
1545
+ * Trims whitespace from either end of a string, leaving spaces within the string intact. Example:
1546
+ * <pre><code>
1547
+ var s = ' foo bar ';
1548
+ alert('-' + s + '-'); //alerts "- foo bar -"
1549
+ alert('-' + s.trim() + '-'); //alerts "-foo bar-"
1550
+ </code></pre>
1551
+ * @return {String} The trimmed string
1552
+ */
1553
+ String.prototype.trim = function(){
1554
+ var re = /^\s+|\s+$/g;
1555
+ return function(){ return this.replace(re, ""); };
1556
+ }();
1557
+
1558
+ // here to prevent dependency on Date.js
1559
+ /**
1560
+ Returns the number of milliseconds between this date and date
1561
+ @param {Date} date (optional) Defaults to now
1562
+ @return {Number} The diff in milliseconds
1563
+ @member Date getElapsed
1564
+ */
1565
+ Date.prototype.getElapsed = function(date) {
1566
+ return Math.abs((date || new Date()).getTime()-this.getTime());
1567
+ };
1568
+
1569
+
1570
+ /**
1571
+ * @class Number
1572
+ */
1573
+ Ext.applyIf(Number.prototype, {
1574
+ /**
1575
+ * Checks whether or not the current number is within a desired range. If the number is already within the
1576
+ * range it is returned, otherwise the min or max value is returned depending on which side of the range is
1577
+ * exceeded. Note that this method returns the constrained value but does not change the current number.
1578
+ * @param {Number} min The minimum number in the range
1579
+ * @param {Number} max The maximum number in the range
1580
+ * @return {Number} The constrained value if outside the range, otherwise the current value
1581
+ */
1582
+ constrain : function(min, max){
1583
+ return Math.min(Math.max(this, min), max);
1584
+ }
1585
+ });
1586
+ /**
1587
+ * @class Ext.util.TaskRunner
1588
+ * Provides the ability to execute one or more arbitrary tasks in a multithreaded
1589
+ * manner. Generally, you can use the singleton {@link Ext.TaskMgr} instead, but
1590
+ * if needed, you can create separate instances of TaskRunner. Any number of
1591
+ * separate tasks can be started at any time and will run independently of each
1592
+ * other. Example usage:
1593
+ * <pre><code>
1594
+ // Start a simple clock task that updates a div once per second
1595
+ var updateClock = function(){
1596
+ Ext.fly('clock').update(new Date().format('g:i:s A'));
1597
+ }
1598
+ var task = {
1599
+ run: updateClock,
1600
+ interval: 1000 //1 second
1601
+ }
1602
+ var runner = new Ext.util.TaskRunner();
1603
+ runner.start(task);
1604
+
1605
+ // equivalent using TaskMgr
1606
+ Ext.TaskMgr.start({
1607
+ run: updateClock,
1608
+ interval: 1000
1609
+ });
1610
+
1611
+ * </code></pre>
1612
+ * Also see {@link Ext.util.DelayedTask}.
1613
+ *
1614
+ * @constructor
1615
+ * @param {Number} interval (optional) The minimum precision in milliseconds supported by this TaskRunner instance
1616
+ * (defaults to 10)
1617
+ */
1618
+ Ext.util.TaskRunner = function(interval){
1619
+ interval = interval || 10;
1620
+ var tasks = [],
1621
+ removeQueue = [],
1622
+ id = 0,
1623
+ running = false,
1624
+
1625
+ // private
1626
+ stopThread = function(){
1627
+ running = false;
1628
+ clearInterval(id);
1629
+ id = 0;
1630
+ },
1631
+
1632
+ // private
1633
+ startThread = function(){
1634
+ if(!running){
1635
+ running = true;
1636
+ id = setInterval(runTasks, interval);
1637
+ }
1638
+ },
1639
+
1640
+ // private
1641
+ removeTask = function(t){
1642
+ removeQueue.push(t);
1643
+ if(t.onStop){
1644
+ t.onStop.apply(t.scope || t);
1645
+ }
1646
+ },
1647
+
1648
+ // private
1649
+ runTasks = function(){
1650
+ var rqLen = removeQueue.length,
1651
+ now = new Date().getTime();
1652
+
1653
+ if(rqLen > 0){
1654
+ for(var i = 0; i < rqLen; i++){
1655
+ tasks.remove(removeQueue[i]);
1656
+ }
1657
+ removeQueue = [];
1658
+ if(tasks.length < 1){
1659
+ stopThread();
1660
+ return;
1661
+ }
1662
+ }
1663
+ for(var i = 0, t, itime, rt, len = tasks.length; i < len; ++i){
1664
+ t = tasks[i];
1665
+ itime = now - t.taskRunTime;
1666
+ if(t.interval <= itime){
1667
+ rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]);
1668
+ t.taskRunTime = now;
1669
+ if(rt === false || t.taskRunCount === t.repeat){
1670
+ removeTask(t);
1671
+ return;
1672
+ }
1673
+ }
1674
+ if(t.duration && t.duration <= (now - t.taskStartTime)){
1675
+ removeTask(t);
1676
+ }
1677
+ }
1678
+ };
1679
+
1680
+ /**
1681
+ * Starts a new task.
1682
+ * @method start
1683
+ * @param {Object} task A config object that supports the following properties:<ul>
1684
+ * <li><code>run</code> : Function<div class="sub-desc">The function to execute each time the task is run. The
1685
+ * function will be called at each interval and passed the <code>args</code> argument if specified. If a
1686
+ * particular scope is required, be sure to specify it using the <code>scope</code> argument.</div></li>
1687
+ * <li><code>interval</code> : Number<div class="sub-desc">The frequency in milliseconds with which the task
1688
+ * should be executed.</div></li>
1689
+ * <li><code>args</code> : Array<div class="sub-desc">(optional) An array of arguments to be passed to the function
1690
+ * specified by <code>run</code>.</div></li>
1691
+ * <li><code>scope</code> : Object<div class="sub-desc">(optional) The scope (<tt>this</tt> reference) in which to execute the
1692
+ * <code>run</code> function. Defaults to the task config object.</div></li>
1693
+ * <li><code>duration</code> : Number<div class="sub-desc">(optional) The length of time in milliseconds to execute
1694
+ * the task before stopping automatically (defaults to indefinite).</div></li>
1695
+ * <li><code>repeat</code> : Number<div class="sub-desc">(optional) The number of times to execute the task before
1696
+ * stopping automatically (defaults to indefinite).</div></li>
1697
+ * </ul>
1698
+ * @return {Object} The task
1699
+ */
1700
+ this.start = function(task){
1701
+ tasks.push(task);
1702
+ task.taskStartTime = new Date().getTime();
1703
+ task.taskRunTime = 0;
1704
+ task.taskRunCount = 0;
1705
+ startThread();
1706
+ return task;
1707
+ };
1708
+
1709
+ /**
1710
+ * Stops an existing running task.
1711
+ * @method stop
1712
+ * @param {Object} task The task to stop
1713
+ * @return {Object} The task
1714
+ */
1715
+ this.stop = function(task){
1716
+ removeTask(task);
1717
+ return task;
1718
+ };
1719
+
1720
+ /**
1721
+ * Stops all tasks that are currently running.
1722
+ * @method stopAll
1723
+ */
1724
+ this.stopAll = function(){
1725
+ stopThread();
1726
+ for(var i = 0, len = tasks.length; i < len; i++){
1727
+ if(tasks[i].onStop){
1728
+ tasks[i].onStop();
1729
+ }
1730
+ }
1731
+ tasks = [];
1732
+ removeQueue = [];
1733
+ };
1734
+ };
1735
+
1736
+ /**
1737
+ * @class Ext.TaskMgr
1738
+ * @extends Ext.util.TaskRunner
1739
+ * A static {@link Ext.util.TaskRunner} instance that can be used to start and stop arbitrary tasks. See
1740
+ * {@link Ext.util.TaskRunner} for supported methods and task config properties.
1741
+ * <pre><code>
1742
+ // Start a simple clock task that updates a div once per second
1743
+ var task = {
1744
+ run: function(){
1745
+ Ext.fly('clock').update(new Date().format('g:i:s A'));
1746
+ },
1747
+ interval: 1000 //1 second
1748
+ }
1749
+ Ext.TaskMgr.start(task);
1750
+ </code></pre>
1751
+ * @singleton
1752
+ */
1753
+ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){
1754
+
1755
+ var libFlyweight,
1756
+ version = Prototype.Version.split('.'),
1757
+ mouseEnterSupported = (parseInt(version[0]) >= 2) || (parseInt(version[1]) >= 7) || (parseInt(version[2]) >= 1),
1758
+ mouseCache = {},
1759
+ isXUL = Ext.isGecko ? function(node){
1760
+ return Object.prototype.toString.call(node) == '[object XULElement]';
1761
+ } : function(){},
1762
+ isTextNode = Ext.isGecko ? function(node){
1763
+ try{
1764
+ return node.nodeType == 3;
1765
+ }catch(e) {
1766
+ return false;
1767
+ }
1768
+
1769
+ } : function(node){
1770
+ return node.nodeType == 3;
1771
+ },
1772
+ elContains = function(parent, child) {
1773
+ if(parent && parent.firstChild){
1774
+ while(child) {
1775
+ if(child === parent) {
1776
+ return true;
1777
+ }
1778
+ try {
1779
+ child = child.parentNode;
1780
+ } catch(e) {
1781
+ // In FF if you mouseout an text input element
1782
+ // thats inside a div sometimes it randomly throws
1783
+ // Permission denied to get property HTMLDivElement.parentNode
1784
+ // See https://bugzilla.mozilla.org/show_bug.cgi?id=208427
1785
+ return false;
1786
+ }
1787
+ if(child && (child.nodeType != 1)) {
1788
+ child = null;
1789
+ }
1790
+ }
1791
+ }
1792
+ return false;
1793
+ },
1794
+ checkRelatedTarget = function(e) {
1795
+ var related = Ext.lib.Event.getRelatedTarget(e);
1796
+ return !(isXUL(related) || elContains(e.currentTarget,related));
1797
+ };
1798
+
1799
+ Ext.lib.Dom = {
1800
+ getViewWidth : function(full){
1801
+ return full ? this.getDocumentWidth() : this.getViewportWidth();
1802
+ },
1803
+
1804
+ getViewHeight : function(full){
1805
+ return full ? this.getDocumentHeight() : this.getViewportHeight();
1806
+ },
1807
+
1808
+ getDocumentHeight: function() { // missing from prototype?
1809
+ var scrollHeight = (document.compatMode != "CSS1Compat") ? document.body.scrollHeight : document.documentElement.scrollHeight;
1810
+ return Math.max(scrollHeight, this.getViewportHeight());
1811
+ },
1812
+
1813
+ getDocumentWidth: function() { // missing from prototype?
1814
+ var scrollWidth = (document.compatMode != "CSS1Compat") ? document.body.scrollWidth : document.documentElement.scrollWidth;
1815
+ return Math.max(scrollWidth, this.getViewportWidth());
1816
+ },
1817
+
1818
+ getViewportHeight: function() { // missing from prototype?
1819
+ var height = self.innerHeight;
1820
+ var mode = document.compatMode;
1821
+
1822
+ if ( (mode || Ext.isIE) && !Ext.isOpera ) {
1823
+ height = (mode == "CSS1Compat") ?
1824
+ document.documentElement.clientHeight : // Standards
1825
+ document.body.clientHeight; // Quirks
1826
+ }
1827
+
1828
+ return height;
1829
+ },
1830
+
1831
+ getViewportWidth: function() { // missing from prototype?
1832
+ var width = self.innerWidth; // Safari
1833
+ var mode = document.compatMode;
1834
+
1835
+ if (mode || Ext.isIE) { // IE, Gecko, Opera
1836
+ width = (mode == "CSS1Compat") ?
1837
+ document.documentElement.clientWidth : // Standards
1838
+ document.body.clientWidth; // Quirks
1839
+ }
1840
+ return width;
1841
+ },
1842
+
1843
+ isAncestor : function(p, c){ // missing from prototype?
1844
+ p = Ext.getDom(p);
1845
+ c = Ext.getDom(c);
1846
+ if (!p || !c) {return false;}
1847
+
1848
+ if(p.contains && !Ext.isSafari) {
1849
+ return p.contains(c);
1850
+ }else if(p.compareDocumentPosition) {
1851
+ return !!(p.compareDocumentPosition(c) & 16);
1852
+ }else{
1853
+ var parent = c.parentNode;
1854
+ while (parent) {
1855
+ if (parent == p) {
1856
+ return true;
1857
+ }
1858
+ else if (!parent.tagName || parent.tagName.toUpperCase() == "HTML") {
1859
+ return false;
1860
+ }
1861
+ parent = parent.parentNode;
1862
+ }
1863
+ return false;
1864
+ }
1865
+ },
1866
+
1867
+ getRegion : function(el){
1868
+ return Ext.lib.Region.getRegion(el);
1869
+ },
1870
+
1871
+ getY : function(el){
1872
+ return this.getXY(el)[1];
1873
+ },
1874
+
1875
+ getX : function(el){
1876
+ return this.getXY(el)[0];
1877
+ },
1878
+
1879
+ getXY : function(el){ // this initially used Position.cumulativeOffset but it is not accurate enough
1880
+ var p, pe, b, scroll, bd = (document.body || document.documentElement);
1881
+ el = Ext.getDom(el);
1882
+
1883
+ if(el == bd){
1884
+ return [0, 0];
1885
+ }
1886
+
1887
+ if (el.getBoundingClientRect) {
1888
+ b = el.getBoundingClientRect();
1889
+ scroll = fly(document).getScroll();
1890
+ return [Math.round(b.left + scroll.left), Math.round(b.top + scroll.top)];
1891
+ }
1892
+ var x = 0, y = 0;
1893
+
1894
+ p = el;
1895
+
1896
+ var hasAbsolute = fly(el).getStyle("position") == "absolute";
1897
+
1898
+ while (p) {
1899
+
1900
+ x += p.offsetLeft;
1901
+ y += p.offsetTop;
1902
+
1903
+ if (!hasAbsolute && fly(p).getStyle("position") == "absolute") {
1904
+ hasAbsolute = true;
1905
+ }
1906
+
1907
+ if (Ext.isGecko) {
1908
+ pe = fly(p);
1909
+
1910
+ var bt = parseInt(pe.getStyle("borderTopWidth"), 10) || 0;
1911
+ var bl = parseInt(pe.getStyle("borderLeftWidth"), 10) || 0;
1912
+
1913
+
1914
+ x += bl;
1915
+ y += bt;
1916
+
1917
+
1918
+ if (p != el && pe.getStyle('overflow') != 'visible') {
1919
+ x += bl;
1920
+ y += bt;
1921
+ }
1922
+ }
1923
+ p = p.offsetParent;
1924
+ }
1925
+
1926
+ if (Ext.isSafari && hasAbsolute) {
1927
+ x -= bd.offsetLeft;
1928
+ y -= bd.offsetTop;
1929
+ }
1930
+
1931
+ if (Ext.isGecko && !hasAbsolute) {
1932
+ var dbd = fly(bd);
1933
+ x += parseInt(dbd.getStyle("borderLeftWidth"), 10) || 0;
1934
+ y += parseInt(dbd.getStyle("borderTopWidth"), 10) || 0;
1935
+ }
1936
+
1937
+ p = el.parentNode;
1938
+ while (p && p != bd) {
1939
+ if (!Ext.isOpera || (p.tagName != 'TR' && fly(p).getStyle("display") != "inline")) {
1940
+ x -= p.scrollLeft;
1941
+ y -= p.scrollTop;
1942
+ }
1943
+ p = p.parentNode;
1944
+ }
1945
+ return [x, y];
1946
+ },
1947
+
1948
+ setXY : function(el, xy){ // this initially used Position.cumulativeOffset but it is not accurate enough
1949
+ el = Ext.fly(el, '_setXY');
1950
+ el.position();
1951
+ var pts = el.translatePoints(xy);
1952
+ if(xy[0] !== false){
1953
+ el.dom.style.left = pts.left + "px";
1954
+ }
1955
+ if(xy[1] !== false){
1956
+ el.dom.style.top = pts.top + "px";
1957
+ }
1958
+ },
1959
+
1960
+ setX : function(el, x){
1961
+ this.setXY(el, [x, false]);
1962
+ },
1963
+
1964
+ setY : function(el, y){
1965
+ this.setXY(el, [false, y]);
1966
+ }
1967
+ };
1968
+
1969
+ Ext.lib.Event = {
1970
+ getPageX : function(e){
1971
+ return Event.pointerX(e.browserEvent || e);
1972
+ },
1973
+
1974
+ getPageY : function(e){
1975
+ return Event.pointerY(e.browserEvent || e);
1976
+ },
1977
+
1978
+ getXY : function(e){
1979
+ e = e.browserEvent || e;
1980
+ return [Event.pointerX(e), Event.pointerY(e)];
1981
+ },
1982
+
1983
+ getTarget : function(e){
1984
+ return Event.element(e.browserEvent || e);
1985
+ },
1986
+
1987
+ resolveTextNode: function(node) {
1988
+ return node && !isXUL(node) && isTextNode(node) ? node.parentNode : node;
1989
+ },
1990
+
1991
+ getRelatedTarget: function(ev) { // missing from prototype?
1992
+ ev = ev.browserEvent || ev;
1993
+ var t = ev.relatedTarget;
1994
+ if (!t) {
1995
+ if (ev.type == "mouseout") {
1996
+ t = ev.toElement;
1997
+ } else if (ev.type == "mouseover") {
1998
+ t = ev.fromElement;
1999
+ }
2000
+ }
2001
+
2002
+ return this.resolveTextNode(t);
2003
+ },
2004
+
2005
+ on : function(el, eventName, fn){
2006
+ if((eventName == 'mouseenter' || eventName == 'mouseleave') && !mouseEnterSupported){
2007
+ var item = mouseCache[el.id] || (mouseCache[el.id] = {});
2008
+ item[eventName] = fn;
2009
+ fn = fn.createInterceptor(checkRelatedTarget);
2010
+ eventName = (eventName == 'mouseenter') ? 'mouseover' : 'mouseout';
2011
+ }
2012
+ Event.observe(el, eventName, fn, false);
2013
+ },
2014
+
2015
+ un : function(el, eventName, fn){
2016
+ if((eventName == 'mouseenter' || eventName == 'mouseleave') && !mouseEnterSupported){
2017
+ var item = mouseCache[el.id],
2018
+ ev = item && item[eventName];
2019
+
2020
+ if(ev){
2021
+ fn = ev.fn;
2022
+ delete item[eventName];
2023
+ eventName = (eventName == 'mouseenter') ? 'mouseover' : 'mouseout';
2024
+ }
2025
+ }
2026
+ Event.stopObserving(el, eventName, fn, false);
2027
+ },
2028
+
2029
+ purgeElement : function(el){
2030
+ // no equiv?
2031
+ },
2032
+
2033
+ preventDefault : function(e){ // missing from prototype?
2034
+ e = e.browserEvent || e;
2035
+ if(e.preventDefault) {
2036
+ e.preventDefault();
2037
+ } else {
2038
+ e.returnValue = false;
2039
+ }
2040
+ },
2041
+
2042
+ stopPropagation : function(e){ // missing from prototype?
2043
+ e = e.browserEvent || e;
2044
+ if(e.stopPropagation) {
2045
+ e.stopPropagation();
2046
+ } else {
2047
+ e.cancelBubble = true;
2048
+ }
2049
+ },
2050
+
2051
+ stopEvent : function(e){
2052
+ Event.stop(e.browserEvent || e);
2053
+ },
2054
+
2055
+ onAvailable : function(id, fn, scope){ // no equiv
2056
+ var start = new Date(), iid;
2057
+ var f = function(){
2058
+ if(start.getElapsed() > 10000){
2059
+ clearInterval(iid);
2060
+ }
2061
+ var el = document.getElementById(id);
2062
+ if(el){
2063
+ clearInterval(iid);
2064
+ fn.call(scope||window, el);
2065
+ }
2066
+ };
2067
+ iid = setInterval(f, 50);
2068
+ }
2069
+ };
2070
+
2071
+ Ext.lib.Ajax = function(){
2072
+ var createSuccess = function(cb){
2073
+ return cb.success ? function(xhr){
2074
+ cb.success.call(cb.scope||window, {
2075
+ responseText: xhr.responseText,
2076
+ responseXML : xhr.responseXML,
2077
+ argument: cb.argument
2078
+ });
2079
+ } : Ext.emptyFn;
2080
+ };
2081
+ var createFailure = function(cb){
2082
+ return cb.failure ? function(xhr){
2083
+ cb.failure.call(cb.scope||window, {
2084
+ responseText: xhr.responseText,
2085
+ responseXML : xhr.responseXML,
2086
+ argument: cb.argument
2087
+ });
2088
+ } : Ext.emptyFn;
2089
+ };
2090
+ return {
2091
+ request : function(method, uri, cb, data, options){
2092
+ var o = {
2093
+ method: method,
2094
+ parameters: data || '',
2095
+ timeout: cb.timeout,
2096
+ onSuccess: createSuccess(cb),
2097
+ onFailure: createFailure(cb)
2098
+ };
2099
+ if(options){
2100
+ var hs = options.headers;
2101
+ if(hs){
2102
+ o.requestHeaders = hs;
2103
+ }
2104
+ if(options.xmlData){
2105
+ method = (method ? method : (options.method ? options.method : 'POST'));
2106
+ if (!hs || !hs['Content-Type']){
2107
+ o.contentType = 'text/xml';
2108
+ }
2109
+ o.postBody = options.xmlData;
2110
+ delete o.parameters;
2111
+ }
2112
+ if(options.jsonData){
2113
+ method = (method ? method : (options.method ? options.method : 'POST'));
2114
+ if (!hs || !hs['Content-Type']){
2115
+ o.contentType = 'application/json';
2116
+ }
2117
+ o.postBody = typeof options.jsonData == 'object' ? Ext.encode(options.jsonData) : options.jsonData;
2118
+ delete o.parameters;
2119
+ }
2120
+ }
2121
+ new Ajax.Request(uri, o);
2122
+ },
2123
+
2124
+ formRequest : function(form, uri, cb, data, isUpload, sslUri){
2125
+ new Ajax.Request(uri, {
2126
+ method: Ext.getDom(form).method ||'POST',
2127
+ parameters: Form.serialize(form)+(data?'&'+data:''),
2128
+ timeout: cb.timeout,
2129
+ onSuccess: createSuccess(cb),
2130
+ onFailure: createFailure(cb)
2131
+ });
2132
+ },
2133
+
2134
+ isCallInProgress : function(trans){
2135
+ return false;
2136
+ },
2137
+
2138
+ abort : function(trans){
2139
+ return false;
2140
+ },
2141
+
2142
+ serializeForm : function(form){
2143
+ return Form.serialize(form.dom||form);
2144
+ }
2145
+ };
2146
+ }();
2147
+
2148
+
2149
+ Ext.lib.Anim = function(){
2150
+
2151
+ var easings = {
2152
+ easeOut: function(pos) {
2153
+ return 1-Math.pow(1-pos,2);
2154
+ },
2155
+ easeIn: function(pos) {
2156
+ return 1-Math.pow(1-pos,2);
2157
+ }
2158
+ };
2159
+ var createAnim = function(cb, scope){
2160
+ return {
2161
+ stop : function(skipToLast){
2162
+ this.effect.cancel();
2163
+ },
2164
+
2165
+ isAnimated : function(){
2166
+ return this.effect.state == 'running';
2167
+ },
2168
+
2169
+ proxyCallback : function(){
2170
+ Ext.callback(cb, scope);
2171
+ }
2172
+ };
2173
+ };
2174
+ return {
2175
+ scroll : function(el, args, duration, easing, cb, scope){
2176
+ // not supported so scroll immediately?
2177
+ var anim = createAnim(cb, scope);
2178
+ el = Ext.getDom(el);
2179
+ if(typeof args.scroll.to[0] == 'number'){
2180
+ el.scrollLeft = args.scroll.to[0];
2181
+ }
2182
+ if(typeof args.scroll.to[1] == 'number'){
2183
+ el.scrollTop = args.scroll.to[1];
2184
+ }
2185
+ anim.proxyCallback();
2186
+ return anim;
2187
+ },
2188
+
2189
+ motion : function(el, args, duration, easing, cb, scope){
2190
+ return this.run(el, args, duration, easing, cb, scope);
2191
+ },
2192
+
2193
+ color : function(el, args, duration, easing, cb, scope){
2194
+ return this.run(el, args, duration, easing, cb, scope);
2195
+ },
2196
+
2197
+ run : function(el, args, duration, easing, cb, scope, type){
2198
+ var o = {};
2199
+ for(var k in args){
2200
+ switch(k){ // scriptaculous doesn't support, so convert these
2201
+ case 'points':
2202
+ var by, pts, e = Ext.fly(el, '_animrun');
2203
+ e.position();
2204
+ if(by = args.points.by){
2205
+ var xy = e.getXY();
2206
+ pts = e.translatePoints([xy[0]+by[0], xy[1]+by[1]]);
2207
+ }else{
2208
+ pts = e.translatePoints(args.points.to);
2209
+ }
2210
+ o.left = pts.left+'px';
2211
+ o.top = pts.top+'px';
2212
+ break;
2213
+ case 'width':
2214
+ o.width = args.width.to+'px';
2215
+ break;
2216
+ case 'height':
2217
+ o.height = args.height.to+'px';
2218
+ break;
2219
+ case 'opacity':
2220
+ o.opacity = String(args.opacity.to);
2221
+ break;
2222
+ default:
2223
+ o[k] = String(args[k].to);
2224
+ break;
2225
+ }
2226
+ }
2227
+ var anim = createAnim(cb, scope);
2228
+ anim.effect = new Effect.Morph(Ext.id(el), {
2229
+ duration: duration,
2230
+ afterFinish: anim.proxyCallback,
2231
+ transition: easings[easing] || Effect.Transitions.linear,
2232
+ style: o
2233
+ });
2234
+ return anim;
2235
+ }
2236
+ };
2237
+ }();
2238
+
2239
+
2240
+ // all lib flyweight calls use their own flyweight to prevent collisions with developer flyweights
2241
+ function fly(el){
2242
+ if(!libFlyweight){
2243
+ libFlyweight = new Ext.Element.Flyweight();
2244
+ }
2245
+ libFlyweight.dom = el;
2246
+ return libFlyweight;
2247
+ }
2248
+
2249
+ Ext.lib.Region = function(t, r, b, l) {
2250
+ this.top = t;
2251
+ this[1] = t;
2252
+ this.right = r;
2253
+ this.bottom = b;
2254
+ this.left = l;
2255
+ this[0] = l;
2256
+ };
2257
+
2258
+ Ext.lib.Region.prototype = {
2259
+ contains : function(region) {
2260
+ return ( region.left >= this.left &&
2261
+ region.right <= this.right &&
2262
+ region.top >= this.top &&
2263
+ region.bottom <= this.bottom );
2264
+
2265
+ },
2266
+
2267
+ getArea : function() {
2268
+ return ( (this.bottom - this.top) * (this.right - this.left) );
2269
+ },
2270
+
2271
+ intersect : function(region) {
2272
+ var t = Math.max( this.top, region.top );
2273
+ var r = Math.min( this.right, region.right );
2274
+ var b = Math.min( this.bottom, region.bottom );
2275
+ var l = Math.max( this.left, region.left );
2276
+
2277
+ if (b >= t && r >= l) {
2278
+ return new Ext.lib.Region(t, r, b, l);
2279
+ } else {
2280
+ return null;
2281
+ }
2282
+ },
2283
+ union : function(region) {
2284
+ var t = Math.min( this.top, region.top );
2285
+ var r = Math.max( this.right, region.right );
2286
+ var b = Math.max( this.bottom, region.bottom );
2287
+ var l = Math.min( this.left, region.left );
2288
+
2289
+ return new Ext.lib.Region(t, r, b, l);
2290
+ },
2291
+
2292
+ constrainTo : function(r) {
2293
+ this.top = this.top.constrain(r.top, r.bottom);
2294
+ this.bottom = this.bottom.constrain(r.top, r.bottom);
2295
+ this.left = this.left.constrain(r.left, r.right);
2296
+ this.right = this.right.constrain(r.left, r.right);
2297
+ return this;
2298
+ },
2299
+
2300
+ adjust : function(t, l, b, r){
2301
+ this.top += t;
2302
+ this.left += l;
2303
+ this.right += r;
2304
+ this.bottom += b;
2305
+ return this;
2306
+ }
2307
+ };
2308
+
2309
+ Ext.lib.Region.getRegion = function(el) {
2310
+ var p = Ext.lib.Dom.getXY(el);
2311
+
2312
+ var t = p[1];
2313
+ var r = p[0] + el.offsetWidth;
2314
+ var b = p[1] + el.offsetHeight;
2315
+ var l = p[0];
2316
+
2317
+ return new Ext.lib.Region(t, r, b, l);
2318
+ };
2319
+
2320
+ Ext.lib.Point = function(x, y) {
2321
+ if (Ext.isArray(x)) {
2322
+ y = x[1];
2323
+ x = x[0];
2324
+ }
2325
+ this.x = this.right = this.left = this[0] = x;
2326
+ this.y = this.top = this.bottom = this[1] = y;
2327
+ };
2328
+
2329
+ Ext.lib.Point.prototype = new Ext.lib.Region();
2330
+
2331
+
2332
+ // prevent IE leaks
2333
+ if(Ext.isIE) {
2334
+ function fnCleanUp() {
2335
+ var p = Function.prototype;
2336
+ delete p.createSequence;
2337
+ delete p.defer;
2338
+ delete p.createDelegate;
2339
+ delete p.createCallback;
2340
+ delete p.createInterceptor;
2341
+
2342
+ window.detachEvent("onunload", fnCleanUp);
2343
+ }
2344
+ window.attachEvent("onunload", fnCleanUp);
2345
+ }
2346
+ })();