yui-rails-asset 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. data/LICENSE +21 -0
  2. data/README +17 -0
  3. data/lib/yui/rails.rb +29 -0
  4. data/lib/yui/rails/engine.rb +10 -0
  5. data/lib/yui/rails/version.rb +6 -0
  6. data/vendor/assets/javascripts/yui-2.8.1/build/animation/animation-debug.js +1396 -0
  7. data/vendor/assets/javascripts/yui-2.8.1/build/animation/animation-min.js +23 -0
  8. data/vendor/assets/javascripts/yui-2.8.1/build/animation/animation.js +1392 -0
  9. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/ajax-loader.gif +0 -0
  10. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/asc.gif +0 -0
  11. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/autocomplete.css +7 -0
  12. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/back-h.png +0 -0
  13. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/back-v.png +0 -0
  14. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/bar-h.png +0 -0
  15. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/bar-v.png +0 -0
  16. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/bg-h.gif +0 -0
  17. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/bg-v.gif +0 -0
  18. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/blankimage.png +0 -0
  19. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/button.css +7 -0
  20. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/calendar.css +8 -0
  21. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/carousel.css +7 -0
  22. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/check0.gif +0 -0
  23. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/check1.gif +0 -0
  24. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/check2.gif +0 -0
  25. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/colorpicker.css +7 -0
  26. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/container.css +7 -0
  27. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/datatable.css +8 -0
  28. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/desc.gif +0 -0
  29. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/dt-arrow-dn.png +0 -0
  30. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/dt-arrow-up.png +0 -0
  31. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/editor-knob.gif +0 -0
  32. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/editor-sprite-active.gif +0 -0
  33. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/editor-sprite.gif +0 -0
  34. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/editor.css +10 -0
  35. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/header_background.png +0 -0
  36. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/hue_bg.png +0 -0
  37. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/imagecropper.css +7 -0
  38. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/layout.css +7 -0
  39. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/layout_sprite.png +0 -0
  40. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/loading.gif +0 -0
  41. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/logger.css +7 -0
  42. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menu-button-arrow-disabled.png +0 -0
  43. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menu-button-arrow.png +0 -0
  44. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menu.css +7 -0
  45. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menubaritem_submenuindicator.png +0 -0
  46. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menubaritem_submenuindicator_disabled.png +0 -0
  47. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menuitem_checkbox.png +0 -0
  48. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menuitem_checkbox_disabled.png +0 -0
  49. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menuitem_submenuindicator.png +0 -0
  50. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menuitem_submenuindicator_disabled.png +0 -0
  51. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/paginator.css +7 -0
  52. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/picker_mask.png +0 -0
  53. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/profilerviewer.css +7 -0
  54. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/progressbar.css +7 -0
  55. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/resize.css +7 -0
  56. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/simpleeditor.css +10 -0
  57. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/skin.css +36 -0
  58. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/slider.css +7 -0
  59. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/split-button-arrow-active.png +0 -0
  60. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/split-button-arrow-disabled.png +0 -0
  61. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/split-button-arrow-focus.png +0 -0
  62. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/split-button-arrow-hover.png +0 -0
  63. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/split-button-arrow.png +0 -0
  64. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/sprite.png +0 -0
  65. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/sprite.psd +0 -0
  66. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/tabview.css +8 -0
  67. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/treeview-loading.gif +0 -0
  68. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/treeview-sprite.gif +0 -0
  69. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/treeview.css +7 -0
  70. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/wait.gif +0 -0
  71. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/yuitest.css +7 -0
  72. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/assets/autocomplete-core.css +7 -0
  73. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/assets/skins/sam/autocomplete-skin.css +57 -0
  74. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/assets/skins/sam/autocomplete.css +7 -0
  75. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/autocomplete-debug.js +3009 -0
  76. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/autocomplete-min.js +12 -0
  77. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/autocomplete.js +2966 -0
  78. data/vendor/assets/javascripts/yui-2.8.1/build/base/base-min.css +7 -0
  79. data/vendor/assets/javascripts/yui-2.8.1/build/base/base.css +131 -0
  80. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/button-core.css +44 -0
  81. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/button-skin.css +219 -0
  82. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/button.css +7 -0
  83. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/menu-button-arrow-disabled.png +0 -0
  84. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/menu-button-arrow.png +0 -0
  85. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/split-button-arrow-active.png +0 -0
  86. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/split-button-arrow-disabled.png +0 -0
  87. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/split-button-arrow-focus.png +0 -0
  88. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/split-button-arrow-hover.png +0 -0
  89. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/split-button-arrow.png +0 -0
  90. data/vendor/assets/javascripts/yui-2.8.1/build/button/button-debug.js +4694 -0
  91. data/vendor/assets/javascripts/yui-2.8.1/build/button/button-min.js +11 -0
  92. data/vendor/assets/javascripts/yui-2.8.1/build/button/button.js +4633 -0
  93. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/calendar-core.css +132 -0
  94. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/calendar.css +320 -0
  95. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/calgrad.png +0 -0
  96. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/callt.gif +0 -0
  97. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/calrt.gif +0 -0
  98. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/calx.gif +0 -0
  99. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/skins/sam/calendar-skin.css +361 -0
  100. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/skins/sam/calendar.css +8 -0
  101. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/calendar-debug.js +7324 -0
  102. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/calendar-min.js +18 -0
  103. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/calendar.js +7294 -0
  104. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/assets/ajax-loader.gif +0 -0
  105. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/assets/carousel-core.css +88 -0
  106. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/assets/skins/sam/ajax-loader.gif +0 -0
  107. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/assets/skins/sam/carousel-skin.css +142 -0
  108. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/assets/skins/sam/carousel.css +7 -0
  109. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/carousel-debug.js +4390 -0
  110. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/carousel-min.js +12 -0
  111. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/carousel.js +4349 -0
  112. data/vendor/assets/javascripts/yui-2.8.1/build/charts/assets/charts.swf +0 -0
  113. data/vendor/assets/javascripts/yui-2.8.1/build/charts/charts-debug.js +2061 -0
  114. data/vendor/assets/javascripts/yui-2.8.1/build/charts/charts-min.js +9 -0
  115. data/vendor/assets/javascripts/yui-2.8.1/build/charts/charts.js +2060 -0
  116. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/colorpicker-core.css +6 -0
  117. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/hue_thumb.png +0 -0
  118. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/picker_mask.png +0 -0
  119. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/picker_thumb.png +0 -0
  120. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/skins/sam/colorpicker-skin.css +105 -0
  121. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/skins/sam/colorpicker.css +7 -0
  122. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/skins/sam/hue_bg.png +0 -0
  123. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/skins/sam/picker_mask.png +0 -0
  124. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/colorpicker-debug.js +1783 -0
  125. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/colorpicker-min.js +9 -0
  126. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/colorpicker.js +1763 -0
  127. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection-debug.js +1576 -0
  128. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection-min.js +9 -0
  129. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection.js +1546 -0
  130. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection.swf +0 -0
  131. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection_core-debug.js +980 -0
  132. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection_core-min.js +8 -0
  133. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection_core.js +957 -0
  134. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/alrt16_1.gif +0 -0
  135. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/blck16_1.gif +0 -0
  136. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/close12_1.gif +0 -0
  137. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/container-core.css +176 -0
  138. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/container.css +324 -0
  139. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/hlp16_1.gif +0 -0
  140. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/info16_1.gif +0 -0
  141. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/skins/sam/container-skin.css +242 -0
  142. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/skins/sam/container.css +7 -0
  143. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/tip16_1.gif +0 -0
  144. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/warn16_1.gif +0 -0
  145. data/vendor/assets/javascripts/yui-2.8.1/build/container/container-debug.js +9076 -0
  146. data/vendor/assets/javascripts/yui-2.8.1/build/container/container-min.js +19 -0
  147. data/vendor/assets/javascripts/yui-2.8.1/build/container/container.js +9052 -0
  148. data/vendor/assets/javascripts/yui-2.8.1/build/container/container_core-debug.js +5136 -0
  149. data/vendor/assets/javascripts/yui-2.8.1/build/container/container_core-min.js +14 -0
  150. data/vendor/assets/javascripts/yui-2.8.1/build/container/container_core.js +5126 -0
  151. data/vendor/assets/javascripts/yui-2.8.1/build/cookie/cookie-debug.js +482 -0
  152. data/vendor/assets/javascripts/yui-2.8.1/build/cookie/cookie-min.js +7 -0
  153. data/vendor/assets/javascripts/yui-2.8.1/build/cookie/cookie.js +482 -0
  154. data/vendor/assets/javascripts/yui-2.8.1/build/datasource/datasource-debug.js +3067 -0
  155. data/vendor/assets/javascripts/yui-2.8.1/build/datasource/datasource-min.js +12 -0
  156. data/vendor/assets/javascripts/yui-2.8.1/build/datasource/datasource.js +2996 -0
  157. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/datatable-core.css +93 -0
  158. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/datatable.css +49 -0
  159. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/skins/sam/datatable-skin.css +240 -0
  160. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/skins/sam/datatable.css +8 -0
  161. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/skins/sam/dt-arrow-dn.png +0 -0
  162. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/skins/sam/dt-arrow-up.png +0 -0
  163. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/datatable-debug.js +17360 -0
  164. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/datatable-min.js +29 -0
  165. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/datatable.js +17122 -0
  166. data/vendor/assets/javascripts/yui-2.8.1/build/datemath/datemath-debug.js +408 -0
  167. data/vendor/assets/javascripts/yui-2.8.1/build/datemath/datemath-min.js +7 -0
  168. data/vendor/assets/javascripts/yui-2.8.1/build/datemath/datemath.js +408 -0
  169. data/vendor/assets/javascripts/yui-2.8.1/build/dom/dom-debug.js +1872 -0
  170. data/vendor/assets/javascripts/yui-2.8.1/build/dom/dom-min.js +9 -0
  171. data/vendor/assets/javascripts/yui-2.8.1/build/dom/dom.js +1832 -0
  172. data/vendor/assets/javascripts/yui-2.8.1/build/dragdrop/dragdrop-debug.js +3710 -0
  173. data/vendor/assets/javascripts/yui-2.8.1/build/dragdrop/dragdrop-min.js +10 -0
  174. data/vendor/assets/javascripts/yui-2.8.1/build/dragdrop/dragdrop.js +3601 -0
  175. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/editor-core.css +602 -0
  176. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/simpleeditor-core.css +602 -0
  177. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/blankimage.png +0 -0
  178. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/editor-knob.gif +0 -0
  179. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/editor-skin.css +711 -0
  180. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/editor-sprite-active.gif +0 -0
  181. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/editor-sprite.gif +0 -0
  182. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/editor.css +10 -0
  183. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/simpleeditor-skin.css +711 -0
  184. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/simpleeditor.css +10 -0
  185. data/vendor/assets/javascripts/yui-2.8.1/build/editor/editor-debug.js +9557 -0
  186. data/vendor/assets/javascripts/yui-2.8.1/build/editor/editor-min.js +30 -0
  187. data/vendor/assets/javascripts/yui-2.8.1/build/editor/editor.js +9447 -0
  188. data/vendor/assets/javascripts/yui-2.8.1/build/editor/simpleeditor-debug.js +7493 -0
  189. data/vendor/assets/javascripts/yui-2.8.1/build/editor/simpleeditor-min.js +24 -0
  190. data/vendor/assets/javascripts/yui-2.8.1/build/editor/simpleeditor.js +7406 -0
  191. data/vendor/assets/javascripts/yui-2.8.1/build/element-delegate/element-delegate-debug.js +141 -0
  192. data/vendor/assets/javascripts/yui-2.8.1/build/element-delegate/element-delegate-min.js +7 -0
  193. data/vendor/assets/javascripts/yui-2.8.1/build/element-delegate/element-delegate.js +138 -0
  194. data/vendor/assets/javascripts/yui-2.8.1/build/element/element-debug.js +1106 -0
  195. data/vendor/assets/javascripts/yui-2.8.1/build/element/element-min.js +8 -0
  196. data/vendor/assets/javascripts/yui-2.8.1/build/element/element.js +1090 -0
  197. data/vendor/assets/javascripts/yui-2.8.1/build/event-delegate/event-delegate-debug.js +283 -0
  198. data/vendor/assets/javascripts/yui-2.8.1/build/event-delegate/event-delegate-min.js +7 -0
  199. data/vendor/assets/javascripts/yui-2.8.1/build/event-delegate/event-delegate.js +281 -0
  200. data/vendor/assets/javascripts/yui-2.8.1/build/event-mouseenter/event-mouseenter-debug.js +219 -0
  201. data/vendor/assets/javascripts/yui-2.8.1/build/event-mouseenter/event-mouseenter-min.js +7 -0
  202. data/vendor/assets/javascripts/yui-2.8.1/build/event-mouseenter/event-mouseenter.js +219 -0
  203. data/vendor/assets/javascripts/yui-2.8.1/build/event-simulate/event-simulate-debug.js +622 -0
  204. data/vendor/assets/javascripts/yui-2.8.1/build/event-simulate/event-simulate-min.js +7 -0
  205. data/vendor/assets/javascripts/yui-2.8.1/build/event-simulate/event-simulate.js +622 -0
  206. data/vendor/assets/javascripts/yui-2.8.1/build/event/event-debug.js +2524 -0
  207. data/vendor/assets/javascripts/yui-2.8.1/build/event/event-min.js +11 -0
  208. data/vendor/assets/javascripts/yui-2.8.1/build/event/event.js +2500 -0
  209. data/vendor/assets/javascripts/yui-2.8.1/build/fonts/fonts-min.css +7 -0
  210. data/vendor/assets/javascripts/yui-2.8.1/build/fonts/fonts.css +56 -0
  211. data/vendor/assets/javascripts/yui-2.8.1/build/get/get-debug.js +773 -0
  212. data/vendor/assets/javascripts/yui-2.8.1/build/get/get-min.js +7 -0
  213. data/vendor/assets/javascripts/yui-2.8.1/build/get/get.js +755 -0
  214. data/vendor/assets/javascripts/yui-2.8.1/build/grids/grids-min.css +7 -0
  215. data/vendor/assets/javascripts/yui-2.8.1/build/grids/grids.css +467 -0
  216. data/vendor/assets/javascripts/yui-2.8.1/build/history/assets/blank.html +1 -0
  217. data/vendor/assets/javascripts/yui-2.8.1/build/history/history-debug.js +808 -0
  218. data/vendor/assets/javascripts/yui-2.8.1/build/history/history-min.js +7 -0
  219. data/vendor/assets/javascripts/yui-2.8.1/build/history/history.js +808 -0
  220. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/assets/imagecropper-core.css +33 -0
  221. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/assets/skins/sam/imagecropper-skin.css +16 -0
  222. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/assets/skins/sam/imagecropper.css +7 -0
  223. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/imagecropper-debug.js +907 -0
  224. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/imagecropper-min.js +8 -0
  225. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/imagecropper.js +889 -0
  226. data/vendor/assets/javascripts/yui-2.8.1/build/imageloader/imageloader-debug.js +487 -0
  227. data/vendor/assets/javascripts/yui-2.8.1/build/imageloader/imageloader-min.js +7 -0
  228. data/vendor/assets/javascripts/yui-2.8.1/build/imageloader/imageloader.js +481 -0
  229. data/vendor/assets/javascripts/yui-2.8.1/build/json/json-debug.js +538 -0
  230. data/vendor/assets/javascripts/yui-2.8.1/build/json/json-min.js +7 -0
  231. data/vendor/assets/javascripts/yui-2.8.1/build/json/json.js +538 -0
  232. data/vendor/assets/javascripts/yui-2.8.1/build/layout/assets/layout-core.css +158 -0
  233. data/vendor/assets/javascripts/yui-2.8.1/build/layout/assets/skins/sam/layout-skin.css +207 -0
  234. data/vendor/assets/javascripts/yui-2.8.1/build/layout/assets/skins/sam/layout.css +7 -0
  235. data/vendor/assets/javascripts/yui-2.8.1/build/layout/assets/skins/sam/layout_sprite.png +0 -0
  236. data/vendor/assets/javascripts/yui-2.8.1/build/layout/layout-debug.js +2305 -0
  237. data/vendor/assets/javascripts/yui-2.8.1/build/layout/layout-min.js +11 -0
  238. data/vendor/assets/javascripts/yui-2.8.1/build/layout/layout.js +2290 -0
  239. data/vendor/assets/javascripts/yui-2.8.1/build/logger/assets/logger-core.css +7 -0
  240. data/vendor/assets/javascripts/yui-2.8.1/build/logger/assets/logger.css +57 -0
  241. data/vendor/assets/javascripts/yui-2.8.1/build/logger/assets/skins/sam/logger-skin.css +55 -0
  242. data/vendor/assets/javascripts/yui-2.8.1/build/logger/assets/skins/sam/logger.css +7 -0
  243. data/vendor/assets/javascripts/yui-2.8.1/build/logger/logger-debug.js +2104 -0
  244. data/vendor/assets/javascripts/yui-2.8.1/build/logger/logger-min.js +9 -0
  245. data/vendor/assets/javascripts/yui-2.8.1/build/logger/logger.js +2104 -0
  246. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu-core.css +242 -0
  247. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu.css +503 -0
  248. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu_down_arrow.png +0 -0
  249. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu_down_arrow_disabled.png +0 -0
  250. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu_up_arrow.png +0 -0
  251. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu_up_arrow_disabled.png +0 -0
  252. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menubaritem_submenuindicator.png +0 -0
  253. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menubaritem_submenuindicator_disabled.png +0 -0
  254. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menubaritem_submenuindicator_selected.png +0 -0
  255. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_checkbox.png +0 -0
  256. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_checkbox_disabled.png +0 -0
  257. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_checkbox_selected.png +0 -0
  258. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_submenuindicator.png +0 -0
  259. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_submenuindicator_disabled.png +0 -0
  260. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_submenuindicator_selected.png +0 -0
  261. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menu-skin.css +339 -0
  262. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menu.css +7 -0
  263. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menubaritem_submenuindicator.png +0 -0
  264. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menubaritem_submenuindicator_disabled.png +0 -0
  265. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menuitem_checkbox.png +0 -0
  266. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menuitem_checkbox_disabled.png +0 -0
  267. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menuitem_submenuindicator.png +0 -0
  268. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menuitem_submenuindicator_disabled.png +0 -0
  269. data/vendor/assets/javascripts/yui-2.8.1/build/menu/menu-debug.js +9870 -0
  270. data/vendor/assets/javascripts/yui-2.8.1/build/menu/menu-min.js +16 -0
  271. data/vendor/assets/javascripts/yui-2.8.1/build/menu/menu.js +9823 -0
  272. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/assets/paginator-core.css +6 -0
  273. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/assets/skins/sam/paginator-skin.css +78 -0
  274. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/assets/skins/sam/paginator.css +7 -0
  275. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/paginator-debug.js +2393 -0
  276. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/paginator-min.js +10 -0
  277. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/paginator.js +2393 -0
  278. data/vendor/assets/javascripts/yui-2.8.1/build/profiler/profiler-debug.js +557 -0
  279. data/vendor/assets/javascripts/yui-2.8.1/build/profiler/profiler-min.js +7 -0
  280. data/vendor/assets/javascripts/yui-2.8.1/build/profiler/profiler.js +557 -0
  281. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/profilerviewer-core.css +6 -0
  282. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/asc.gif +0 -0
  283. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/desc.gif +0 -0
  284. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/header_background.png +0 -0
  285. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/profilerviewer-skin.css +167 -0
  286. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/profilerviewer.css +7 -0
  287. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/wait.gif +0 -0
  288. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/profilerviewer-debug.js +1229 -0
  289. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/profilerviewer-min.js +9 -0
  290. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/profilerviewer.js +1192 -0
  291. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/progressbar-core.css +85 -0
  292. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/back-h.png +0 -0
  293. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/back-v.png +0 -0
  294. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/bar-h.png +0 -0
  295. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/bar-v.png +0 -0
  296. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/progressbar-skin.css +56 -0
  297. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/progressbar.css +7 -0
  298. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/progressbar-debug.js +691 -0
  299. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/progressbar-min.js +8 -0
  300. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/progressbar.js +677 -0
  301. data/vendor/assets/javascripts/yui-2.8.1/build/reset-fonts-grids/reset-fonts-grids.css +7 -0
  302. data/vendor/assets/javascripts/yui-2.8.1/build/reset-fonts/reset-fonts.css +7 -0
  303. data/vendor/assets/javascripts/yui-2.8.1/build/reset/reset-min.css +7 -0
  304. data/vendor/assets/javascripts/yui-2.8.1/build/reset/reset.css +142 -0
  305. data/vendor/assets/javascripts/yui-2.8.1/build/resize/assets/resize-core.css +173 -0
  306. data/vendor/assets/javascripts/yui-2.8.1/build/resize/assets/skins/sam/layout_sprite.png +0 -0
  307. data/vendor/assets/javascripts/yui-2.8.1/build/resize/assets/skins/sam/resize-skin.css +142 -0
  308. data/vendor/assets/javascripts/yui-2.8.1/build/resize/assets/skins/sam/resize.css +7 -0
  309. data/vendor/assets/javascripts/yui-2.8.1/build/resize/resize-debug.js +1749 -0
  310. data/vendor/assets/javascripts/yui-2.8.1/build/resize/resize-min.js +10 -0
  311. data/vendor/assets/javascripts/yui-2.8.1/build/resize/resize.js +1689 -0
  312. data/vendor/assets/javascripts/yui-2.8.1/build/selector/selector-debug.js +651 -0
  313. data/vendor/assets/javascripts/yui-2.8.1/build/selector/selector-min.js +8 -0
  314. data/vendor/assets/javascripts/yui-2.8.1/build/selector/selector.js +644 -0
  315. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/bg-fader.gif +0 -0
  316. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/bg-h.gif +0 -0
  317. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/bg-v-e.gif +0 -0
  318. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/bg-v.gif +0 -0
  319. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/left-thumb.png +0 -0
  320. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/right-thumb.png +0 -0
  321. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/skins/sam/bg-h.gif +0 -0
  322. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/skins/sam/bg-v.gif +0 -0
  323. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/skins/sam/slider-skin.css +24 -0
  324. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/skins/sam/slider.css +7 -0
  325. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/slider-core.css +17 -0
  326. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/slider-skin.css +20 -0
  327. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-bar.gif +0 -0
  328. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-e.gif +0 -0
  329. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-fader.gif +0 -0
  330. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-n.gif +0 -0
  331. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-s.gif +0 -0
  332. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-w.gif +0 -0
  333. data/vendor/assets/javascripts/yui-2.8.1/build/slider/slider-debug.js +2114 -0
  334. data/vendor/assets/javascripts/yui-2.8.1/build/slider/slider-min.js +9 -0
  335. data/vendor/assets/javascripts/yui-2.8.1/build/slider/slider.js +2068 -0
  336. data/vendor/assets/javascripts/yui-2.8.1/build/storage/storage-debug.js +1185 -0
  337. data/vendor/assets/javascripts/yui-2.8.1/build/storage/storage-min.js +8 -0
  338. data/vendor/assets/javascripts/yui-2.8.1/build/storage/storage.js +1183 -0
  339. data/vendor/assets/javascripts/yui-2.8.1/build/stylesheet/stylesheet-debug.js +648 -0
  340. data/vendor/assets/javascripts/yui-2.8.1/build/stylesheet/stylesheet-min.js +7 -0
  341. data/vendor/assets/javascripts/yui-2.8.1/build/stylesheet/stylesheet.js +645 -0
  342. data/vendor/assets/javascripts/yui-2.8.1/build/swf/swf-debug.js +269 -0
  343. data/vendor/assets/javascripts/yui-2.8.1/build/swf/swf-min.js +7 -0
  344. data/vendor/assets/javascripts/yui-2.8.1/build/swf/swf.js +268 -0
  345. data/vendor/assets/javascripts/yui-2.8.1/build/swfdetect/swfdetect-debug.js +93 -0
  346. data/vendor/assets/javascripts/yui-2.8.1/build/swfdetect/swfdetect-min.js +7 -0
  347. data/vendor/assets/javascripts/yui-2.8.1/build/swfdetect/swfdetect.js +93 -0
  348. data/vendor/assets/javascripts/yui-2.8.1/build/swfstore/swf.js +238 -0
  349. data/vendor/assets/javascripts/yui-2.8.1/build/swfstore/swfstore-debug.js +470 -0
  350. data/vendor/assets/javascripts/yui-2.8.1/build/swfstore/swfstore-min.js +7 -0
  351. data/vendor/assets/javascripts/yui-2.8.1/build/swfstore/swfstore.js +453 -0
  352. data/vendor/assets/javascripts/yui-2.8.1/build/swfstore/swfstore.swf +0 -0
  353. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/border_tabs.css +54 -0
  354. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/loading.gif +0 -0
  355. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/skin-sam.css +77 -0
  356. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/skins/sam/tabview-skin.css +186 -0
  357. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/skins/sam/tabview.css +8 -0
  358. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/tabview-core.css +133 -0
  359. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/tabview.css +77 -0
  360. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/tabview-debug.js +995 -0
  361. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/tabview-min.js +8 -0
  362. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/tabview.js +987 -0
  363. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/check0.gif +0 -0
  364. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/check1.gif +0 -0
  365. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/check2.gif +0 -0
  366. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/loading.gif +0 -0
  367. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/treeview-loading.gif +0 -0
  368. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/treeview-skin.css +249 -0
  369. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/treeview-sprite.gif +0 -0
  370. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/treeview.css +7 -0
  371. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/treeview-core.css +6 -0
  372. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/treeview-debug.js +4058 -0
  373. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/treeview-min.js +12 -0
  374. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/treeview.js +3989 -0
  375. data/vendor/assets/javascripts/yui-2.8.1/build/uploader/assets/uploader.swf +0 -0
  376. data/vendor/assets/javascripts/yui-2.8.1/build/uploader/uploader-debug.js +1072 -0
  377. data/vendor/assets/javascripts/yui-2.8.1/build/uploader/uploader-min.js +15 -0
  378. data/vendor/assets/javascripts/yui-2.8.1/build/uploader/uploader.js +1069 -0
  379. data/vendor/assets/javascripts/yui-2.8.1/build/utilities/utilities.js +39 -0
  380. data/vendor/assets/javascripts/yui-2.8.1/build/yahoo-dom-event/yahoo-dom-event.js +14 -0
  381. data/vendor/assets/javascripts/yui-2.8.1/build/yahoo/yahoo-debug.js +1075 -0
  382. data/vendor/assets/javascripts/yui-2.8.1/build/yahoo/yahoo-min.js +7 -0
  383. data/vendor/assets/javascripts/yui-2.8.1/build/yahoo/yahoo.js +1075 -0
  384. data/vendor/assets/javascripts/yui-2.8.1/build/yuiloader-dom-event/yuiloader-dom-event.js +17 -0
  385. data/vendor/assets/javascripts/yui-2.8.1/build/yuiloader/yuiloader-debug.js +3879 -0
  386. data/vendor/assets/javascripts/yui-2.8.1/build/yuiloader/yuiloader-min.js +10 -0
  387. data/vendor/assets/javascripts/yui-2.8.1/build/yuiloader/yuiloader.js +3879 -0
  388. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/assets/skins/sam/yuitest-skin.css +7 -0
  389. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/assets/skins/sam/yuitest.css +7 -0
  390. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/assets/testlogger.css +7 -0
  391. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/assets/yuitest-core.css +7 -0
  392. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest-debug.js +2741 -0
  393. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest-min.js +10 -0
  394. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest.js +2741 -0
  395. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest_core-debug.js +1976 -0
  396. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest_core-min.js +9 -0
  397. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest_core.js +1976 -0
  398. metadata +470 -0
@@ -0,0 +1,2524 @@
1
+ /*
2
+ Copyright (c) 2010, Yahoo! Inc. All rights reserved.
3
+ Code licensed under the BSD License:
4
+ http://developer.yahoo.com/yui/license.html
5
+ version: 2.8.1
6
+ */
7
+
8
+ /**
9
+ * The CustomEvent class lets you define events for your application
10
+ * that can be subscribed to by one or more independent component.
11
+ *
12
+ * @param {String} type The type of event, which is passed to the callback
13
+ * when the event fires
14
+ * @param {Object} context The context the event will fire from. "this" will
15
+ * refer to this object in the callback. Default value:
16
+ * the window object. The listener can override this.
17
+ * @param {boolean} silent pass true to prevent the event from writing to
18
+ * the debugsystem
19
+ * @param {int} signature the signature that the custom event subscriber
20
+ * will receive. YAHOO.util.CustomEvent.LIST or
21
+ * YAHOO.util.CustomEvent.FLAT. The default is
22
+ * YAHOO.util.CustomEvent.LIST.
23
+ * @param fireOnce {boolean} If configured to fire once, the custom event
24
+ * will only notify subscribers a single time regardless of how many times
25
+ * the event is fired. In addition, new subscribers will be notified
26
+ * immediately if the event has already been fired.
27
+ * @namespace YAHOO.util
28
+ * @class CustomEvent
29
+ * @constructor
30
+ */
31
+ YAHOO.util.CustomEvent = function(type, context, silent, signature, fireOnce) {
32
+
33
+ /**
34
+ * The type of event, returned to subscribers when the event fires
35
+ * @property type
36
+ * @type string
37
+ */
38
+ this.type = type;
39
+
40
+ /**
41
+ * The context the event will fire from by default. Defaults to the window obj.
42
+ * @property scope
43
+ * @type object
44
+ */
45
+ this.scope = context || window;
46
+
47
+ /**
48
+ * By default all custom events are logged in the debug build. Set silent to true
49
+ * to disable debug output for this event.
50
+ * @property silent
51
+ * @type boolean
52
+ */
53
+ this.silent = silent;
54
+
55
+ /**
56
+ * If configured to fire once, the custom event will only notify subscribers
57
+ * a single time regardless of how many times the event is fired. In addition,
58
+ * new subscribers will be notified immediately if the event has already been
59
+ * fired.
60
+ * @property fireOnce
61
+ * @type boolean
62
+ * @default false
63
+ */
64
+ this.fireOnce = fireOnce;
65
+
66
+ /**
67
+ * Indicates whether or not this event has ever been fired.
68
+ * @property fired
69
+ * @type boolean
70
+ * @default false
71
+ */
72
+ this.fired = false;
73
+
74
+ /**
75
+ * For fireOnce events the arguments the event was fired with are stored
76
+ * so that new subscribers get the proper payload.
77
+ * @property firedWith
78
+ * @type Array
79
+ */
80
+ this.firedWith = null;
81
+
82
+ /**
83
+ * Custom events support two styles of arguments provided to the event
84
+ * subscribers.
85
+ * <ul>
86
+ * <li>YAHOO.util.CustomEvent.LIST:
87
+ * <ul>
88
+ * <li>param1: event name</li>
89
+ * <li>param2: array of arguments sent to fire</li>
90
+ * <li>param3: <optional> a custom object supplied by the subscriber</li>
91
+ * </ul>
92
+ * </li>
93
+ * <li>YAHOO.util.CustomEvent.FLAT
94
+ * <ul>
95
+ * <li>param1: the first argument passed to fire. If you need to
96
+ * pass multiple parameters, use and array or object literal</li>
97
+ * <li>param2: <optional> a custom object supplied by the subscriber</li>
98
+ * </ul>
99
+ * </li>
100
+ * </ul>
101
+ * @property signature
102
+ * @type int
103
+ */
104
+ this.signature = signature || YAHOO.util.CustomEvent.LIST;
105
+
106
+ /**
107
+ * The subscribers to this event
108
+ * @property subscribers
109
+ * @type Subscriber[]
110
+ */
111
+ this.subscribers = [];
112
+
113
+ if (!this.silent) {
114
+ YAHOO.log( "Creating " + this, "info", "Event" );
115
+ }
116
+
117
+ var onsubscribeType = "_YUICEOnSubscribe";
118
+
119
+ // Only add subscribe events for events that are not generated by
120
+ // CustomEvent
121
+ if (type !== onsubscribeType) {
122
+
123
+ /**
124
+ * Custom events provide a custom event that fires whenever there is
125
+ * a new subscriber to the event. This provides an opportunity to
126
+ * handle the case where there is a non-repeating event that has
127
+ * already fired has a new subscriber.
128
+ *
129
+ * @event subscribeEvent
130
+ * @type YAHOO.util.CustomEvent
131
+ * @param fn {Function} The function to execute
132
+ * @param obj <Object> An object to be passed along when the event fires.
133
+ * Defaults to the custom event.
134
+ * @param override <boolean|Object> If true, the obj passed in becomes the
135
+ * execution context of the listener. If an object, that object becomes
136
+ * the execution context. Defaults to the custom event.
137
+ */
138
+ this.subscribeEvent =
139
+ new YAHOO.util.CustomEvent(onsubscribeType, this, true);
140
+
141
+ }
142
+
143
+
144
+ /**
145
+ * In order to make it possible to execute the rest of the subscriber
146
+ * stack when one thows an exception, the subscribers exceptions are
147
+ * caught. The most recent exception is stored in this property
148
+ * @property lastError
149
+ * @type Error
150
+ */
151
+ this.lastError = null;
152
+ };
153
+
154
+ /**
155
+ * Subscriber listener sigature constant. The LIST type returns three
156
+ * parameters: the event type, the array of args passed to fire, and
157
+ * the optional custom object
158
+ * @property YAHOO.util.CustomEvent.LIST
159
+ * @static
160
+ * @type int
161
+ */
162
+ YAHOO.util.CustomEvent.LIST = 0;
163
+
164
+ /**
165
+ * Subscriber listener sigature constant. The FLAT type returns two
166
+ * parameters: the first argument passed to fire and the optional
167
+ * custom object
168
+ * @property YAHOO.util.CustomEvent.FLAT
169
+ * @static
170
+ * @type int
171
+ */
172
+ YAHOO.util.CustomEvent.FLAT = 1;
173
+
174
+ YAHOO.util.CustomEvent.prototype = {
175
+
176
+ /**
177
+ * Subscribes the caller to this event
178
+ * @method subscribe
179
+ * @param {Function} fn The function to execute
180
+ * @param {Object} obj An object to be passed along when the event fires.
181
+ * overrideContext <boolean|Object> If true, the obj passed in becomes the execution
182
+ * context of the listener. If an object, that object becomes the execution context.
183
+ */
184
+ subscribe: function(fn, obj, overrideContext) {
185
+
186
+ if (!fn) {
187
+ throw new Error("Invalid callback for subscriber to '" + this.type + "'");
188
+ }
189
+
190
+ if (this.subscribeEvent) {
191
+ this.subscribeEvent.fire(fn, obj, overrideContext);
192
+ }
193
+
194
+ var s = new YAHOO.util.Subscriber(fn, obj, overrideContext);
195
+
196
+ if (this.fireOnce && this.fired) {
197
+ this.notify(s, this.firedWith);
198
+ } else {
199
+ this.subscribers.push(s);
200
+ }
201
+ },
202
+
203
+ /**
204
+ * Unsubscribes subscribers.
205
+ * @method unsubscribe
206
+ * @param {Function} fn The subscribed function to remove, if not supplied
207
+ * all will be removed
208
+ * @param {Object} obj The custom object passed to subscribe. This is
209
+ * optional, but if supplied will be used to
210
+ * disambiguate multiple listeners that are the same
211
+ * (e.g., you subscribe many object using a function
212
+ * that lives on the prototype)
213
+ * @return {boolean} True if the subscriber was found and detached.
214
+ */
215
+ unsubscribe: function(fn, obj) {
216
+
217
+ if (!fn) {
218
+ return this.unsubscribeAll();
219
+ }
220
+
221
+ var found = false;
222
+ for (var i=0, len=this.subscribers.length; i<len; ++i) {
223
+ var s = this.subscribers[i];
224
+ if (s && s.contains(fn, obj)) {
225
+ this._delete(i);
226
+ found = true;
227
+ }
228
+ }
229
+
230
+ return found;
231
+ },
232
+
233
+ /**
234
+ * Notifies the subscribers. The callback functions will be executed
235
+ * from the context specified when the event was created, and with the
236
+ * following parameters:
237
+ * <ul>
238
+ * <li>The type of event</li>
239
+ * <li>All of the arguments fire() was executed with as an array</li>
240
+ * <li>The custom object (if any) that was passed into the subscribe()
241
+ * method</li>
242
+ * </ul>
243
+ * @method fire
244
+ * @param {Object*} arguments an arbitrary set of parameters to pass to
245
+ * the handler.
246
+ * @return {boolean} false if one of the subscribers returned false,
247
+ * true otherwise
248
+ */
249
+ fire: function() {
250
+
251
+ this.lastError = null;
252
+
253
+ var errors = [],
254
+ len=this.subscribers.length;
255
+
256
+
257
+ var args=[].slice.call(arguments, 0), ret=true, i, rebuild=false;
258
+
259
+ if (this.fireOnce) {
260
+ if (this.fired) {
261
+ YAHOO.log('fireOnce event has already fired: ' + this.type);
262
+ return true;
263
+ } else {
264
+ this.firedWith = args;
265
+ }
266
+ }
267
+
268
+ this.fired = true;
269
+
270
+ if (!len && this.silent) {
271
+ //YAHOO.log('DEBUG no subscribers');
272
+ return true;
273
+ }
274
+
275
+ if (!this.silent) {
276
+ YAHOO.log( "Firing " + this + ", " +
277
+ "args: " + args + ", " +
278
+ "subscribers: " + len,
279
+ "info", "Event" );
280
+ }
281
+
282
+ // make a copy of the subscribers so that there are
283
+ // no index problems if one subscriber removes another.
284
+ var subs = this.subscribers.slice();
285
+
286
+ for (i=0; i<len; ++i) {
287
+ var s = subs[i];
288
+ if (!s) {
289
+ rebuild=true;
290
+ } else {
291
+
292
+ ret = this.notify(s, args);
293
+
294
+ if (false === ret) {
295
+ if (!this.silent) {
296
+ YAHOO.log("Event stopped, sub " + i + " of " + len, "info", "Event");
297
+ }
298
+
299
+ break;
300
+ }
301
+ }
302
+ }
303
+
304
+ return (ret !== false);
305
+ },
306
+
307
+ notify: function(s, args) {
308
+
309
+ var ret, param=null, scope = s.getScope(this.scope),
310
+ throwErrors = YAHOO.util.Event.throwErrors;
311
+
312
+ if (!this.silent) {
313
+ YAHOO.log( this.type + "-> " + s, "info", "Event" );
314
+ }
315
+
316
+ if (this.signature == YAHOO.util.CustomEvent.FLAT) {
317
+
318
+ if (args.length > 0) {
319
+ param = args[0];
320
+ }
321
+
322
+ try {
323
+ ret = s.fn.call(scope, param, s.obj);
324
+ } catch(e) {
325
+ this.lastError = e;
326
+ // errors.push(e);
327
+ YAHOO.log(this + " subscriber exception: " + e, "error", "Event");
328
+ if (throwErrors) {
329
+ throw e;
330
+ }
331
+ }
332
+ } else {
333
+ try {
334
+ ret = s.fn.call(scope, this.type, args, s.obj);
335
+ } catch(ex) {
336
+ this.lastError = ex;
337
+ YAHOO.log(this + " subscriber exception: " + ex, "error", "Event");
338
+ if (throwErrors) {
339
+ throw ex;
340
+ }
341
+ }
342
+ }
343
+
344
+ return ret;
345
+ },
346
+
347
+ /**
348
+ * Removes all listeners
349
+ * @method unsubscribeAll
350
+ * @return {int} The number of listeners unsubscribed
351
+ */
352
+ unsubscribeAll: function() {
353
+ var l = this.subscribers.length, i;
354
+ for (i=l-1; i>-1; i--) {
355
+ this._delete(i);
356
+ }
357
+
358
+ this.subscribers=[];
359
+
360
+ return l;
361
+ },
362
+
363
+ /**
364
+ * @method _delete
365
+ * @private
366
+ */
367
+ _delete: function(index) {
368
+ var s = this.subscribers[index];
369
+ if (s) {
370
+ delete s.fn;
371
+ delete s.obj;
372
+ }
373
+
374
+ // this.subscribers[index]=null;
375
+ this.subscribers.splice(index, 1);
376
+ },
377
+
378
+ /**
379
+ * @method toString
380
+ */
381
+ toString: function() {
382
+ return "CustomEvent: " + "'" + this.type + "', " +
383
+ "context: " + this.scope;
384
+
385
+ }
386
+ };
387
+
388
+ /////////////////////////////////////////////////////////////////////
389
+
390
+ /**
391
+ * Stores the subscriber information to be used when the event fires.
392
+ * @param {Function} fn The function to execute
393
+ * @param {Object} obj An object to be passed along when the event fires
394
+ * @param {boolean} overrideContext If true, the obj passed in becomes the execution
395
+ * context of the listener
396
+ * @class Subscriber
397
+ * @constructor
398
+ */
399
+ YAHOO.util.Subscriber = function(fn, obj, overrideContext) {
400
+
401
+ /**
402
+ * The callback that will be execute when the event fires
403
+ * @property fn
404
+ * @type function
405
+ */
406
+ this.fn = fn;
407
+
408
+ /**
409
+ * An optional custom object that will passed to the callback when
410
+ * the event fires
411
+ * @property obj
412
+ * @type object
413
+ */
414
+ this.obj = YAHOO.lang.isUndefined(obj) ? null : obj;
415
+
416
+ /**
417
+ * The default execution context for the event listener is defined when the
418
+ * event is created (usually the object which contains the event).
419
+ * By setting overrideContext to true, the execution context becomes the custom
420
+ * object passed in by the subscriber. If overrideContext is an object, that
421
+ * object becomes the context.
422
+ * @property overrideContext
423
+ * @type boolean|object
424
+ */
425
+ this.overrideContext = overrideContext;
426
+
427
+ };
428
+
429
+ /**
430
+ * Returns the execution context for this listener. If overrideContext was set to true
431
+ * the custom obj will be the context. If overrideContext is an object, that is the
432
+ * context, otherwise the default context will be used.
433
+ * @method getScope
434
+ * @param {Object} defaultScope the context to use if this listener does not
435
+ * override it.
436
+ */
437
+ YAHOO.util.Subscriber.prototype.getScope = function(defaultScope) {
438
+ if (this.overrideContext) {
439
+ if (this.overrideContext === true) {
440
+ return this.obj;
441
+ } else {
442
+ return this.overrideContext;
443
+ }
444
+ }
445
+ return defaultScope;
446
+ };
447
+
448
+ /**
449
+ * Returns true if the fn and obj match this objects properties.
450
+ * Used by the unsubscribe method to match the right subscriber.
451
+ *
452
+ * @method contains
453
+ * @param {Function} fn the function to execute
454
+ * @param {Object} obj an object to be passed along when the event fires
455
+ * @return {boolean} true if the supplied arguments match this
456
+ * subscriber's signature.
457
+ */
458
+ YAHOO.util.Subscriber.prototype.contains = function(fn, obj) {
459
+ if (obj) {
460
+ return (this.fn == fn && this.obj == obj);
461
+ } else {
462
+ return (this.fn == fn);
463
+ }
464
+ };
465
+
466
+ /**
467
+ * @method toString
468
+ */
469
+ YAHOO.util.Subscriber.prototype.toString = function() {
470
+ return "Subscriber { obj: " + this.obj +
471
+ ", overrideContext: " + (this.overrideContext || "no") + " }";
472
+ };
473
+
474
+ /**
475
+ * The Event Utility provides utilities for managing DOM Events and tools
476
+ * for building event systems
477
+ *
478
+ * @module event
479
+ * @title Event Utility
480
+ * @namespace YAHOO.util
481
+ * @requires yahoo
482
+ */
483
+
484
+ // The first instance of Event will win if it is loaded more than once.
485
+ // @TODO this needs to be changed so that only the state data that needs to
486
+ // be preserved is kept, while methods are overwritten/added as needed.
487
+ // This means that the module pattern can't be used.
488
+ if (!YAHOO.util.Event) {
489
+
490
+ /**
491
+ * The event utility provides functions to add and remove event listeners,
492
+ * event cleansing. It also tries to automatically remove listeners it
493
+ * registers during the unload event.
494
+ *
495
+ * @class Event
496
+ * @static
497
+ */
498
+ YAHOO.util.Event = function() {
499
+
500
+ /**
501
+ * True after the onload event has fired
502
+ * @property loadComplete
503
+ * @type boolean
504
+ * @static
505
+ * @private
506
+ */
507
+ var loadComplete = false,
508
+
509
+ /**
510
+ * Cache of wrapped listeners
511
+ * @property listeners
512
+ * @type array
513
+ * @static
514
+ * @private
515
+ */
516
+ listeners = [],
517
+
518
+
519
+ /**
520
+ * User-defined unload function that will be fired before all events
521
+ * are detached
522
+ * @property unloadListeners
523
+ * @type array
524
+ * @static
525
+ * @private
526
+ */
527
+ unloadListeners = [],
528
+
529
+ /**
530
+ * The number of times to poll after window.onload. This number is
531
+ * increased if additional late-bound handlers are requested after
532
+ * the page load.
533
+ * @property retryCount
534
+ * @static
535
+ * @private
536
+ */
537
+ retryCount = 0,
538
+
539
+ /**
540
+ * onAvailable listeners
541
+ * @property onAvailStack
542
+ * @static
543
+ * @private
544
+ */
545
+ onAvailStack = [],
546
+
547
+ /**
548
+ * Counter for auto id generation
549
+ * @property counter
550
+ * @static
551
+ * @private
552
+ */
553
+ counter = 0,
554
+
555
+ /**
556
+ * Normalized keycodes for webkit/safari
557
+ * @property webkitKeymap
558
+ * @type {int: int}
559
+ * @private
560
+ * @static
561
+ * @final
562
+ */
563
+ webkitKeymap = {
564
+ 63232: 38, // up
565
+ 63233: 40, // down
566
+ 63234: 37, // left
567
+ 63235: 39, // right
568
+ 63276: 33, // page up
569
+ 63277: 34, // page down
570
+ 25: 9 // SHIFT-TAB (Safari provides a different key code in
571
+ // this case, even though the shiftKey modifier is set)
572
+ },
573
+
574
+ isIE = YAHOO.env.ua.ie,
575
+
576
+ // String constants used by the addFocusListener and removeFocusListener methods
577
+
578
+ FOCUSIN = "focusin",
579
+ FOCUSOUT = "focusout";
580
+
581
+ return {
582
+
583
+ /**
584
+ * The number of times we should look for elements that are not
585
+ * in the DOM at the time the event is requested after the document
586
+ * has been loaded. The default is 500@amp;40 ms, so it will poll
587
+ * for 20 seconds or until all outstanding handlers are bound
588
+ * (whichever comes first).
589
+ * @property POLL_RETRYS
590
+ * @type int
591
+ * @static
592
+ * @final
593
+ */
594
+ POLL_RETRYS: 500,
595
+
596
+ /**
597
+ * The poll interval in milliseconds
598
+ * @property POLL_INTERVAL
599
+ * @type int
600
+ * @static
601
+ * @final
602
+ */
603
+ POLL_INTERVAL: 40,
604
+
605
+ /**
606
+ * Element to bind, int constant
607
+ * @property EL
608
+ * @type int
609
+ * @static
610
+ * @final
611
+ */
612
+ EL: 0,
613
+
614
+ /**
615
+ * Type of event, int constant
616
+ * @property TYPE
617
+ * @type int
618
+ * @static
619
+ * @final
620
+ */
621
+ TYPE: 1,
622
+
623
+ /**
624
+ * Function to execute, int constant
625
+ * @property FN
626
+ * @type int
627
+ * @static
628
+ * @final
629
+ */
630
+ FN: 2,
631
+
632
+ /**
633
+ * Function wrapped for context correction and cleanup, int constant
634
+ * @property WFN
635
+ * @type int
636
+ * @static
637
+ * @final
638
+ */
639
+ WFN: 3,
640
+
641
+ /**
642
+ * Object passed in by the user that will be returned as a
643
+ * parameter to the callback, int constant. Specific to
644
+ * unload listeners
645
+ * @property OBJ
646
+ * @type int
647
+ * @static
648
+ * @final
649
+ */
650
+ UNLOAD_OBJ: 3,
651
+
652
+ /**
653
+ * Adjusted context, either the element we are registering the event
654
+ * on or the custom object passed in by the listener, int constant
655
+ * @property ADJ_SCOPE
656
+ * @type int
657
+ * @static
658
+ * @final
659
+ */
660
+ ADJ_SCOPE: 4,
661
+
662
+ /**
663
+ * The original obj passed into addListener
664
+ * @property OBJ
665
+ * @type int
666
+ * @static
667
+ * @final
668
+ */
669
+ OBJ: 5,
670
+
671
+ /**
672
+ * The original context parameter passed into addListener
673
+ * @property OVERRIDE
674
+ * @type int
675
+ * @static
676
+ * @final
677
+ */
678
+ OVERRIDE: 6,
679
+
680
+ /**
681
+ * The original capture parameter passed into addListener
682
+ * @property CAPTURE
683
+ * @type int
684
+ * @static
685
+ * @final
686
+ */
687
+ CAPTURE: 7,
688
+
689
+ /**
690
+ * addListener/removeListener can throw errors in unexpected scenarios.
691
+ * These errors are suppressed, the method returns false, and this property
692
+ * is set
693
+ * @property lastError
694
+ * @static
695
+ * @type Error
696
+ */
697
+ lastError: null,
698
+
699
+ /**
700
+ * Safari detection
701
+ * @property isSafari
702
+ * @private
703
+ * @static
704
+ * @deprecated use YAHOO.env.ua.webkit
705
+ */
706
+ isSafari: YAHOO.env.ua.webkit,
707
+
708
+ /**
709
+ * webkit version
710
+ * @property webkit
711
+ * @type string
712
+ * @private
713
+ * @static
714
+ * @deprecated use YAHOO.env.ua.webkit
715
+ */
716
+ webkit: YAHOO.env.ua.webkit,
717
+
718
+ /**
719
+ * IE detection
720
+ * @property isIE
721
+ * @private
722
+ * @static
723
+ * @deprecated use YAHOO.env.ua.ie
724
+ */
725
+ isIE: isIE,
726
+
727
+ /**
728
+ * poll handle
729
+ * @property _interval
730
+ * @static
731
+ * @private
732
+ */
733
+ _interval: null,
734
+
735
+ /**
736
+ * document readystate poll handle
737
+ * @property _dri
738
+ * @static
739
+ * @private
740
+ */
741
+ _dri: null,
742
+
743
+
744
+ /**
745
+ * Map of special event types
746
+ * @property _specialTypes
747
+ * @static
748
+ * @private
749
+ */
750
+ _specialTypes: {
751
+ focusin: (isIE ? "focusin" : "focus"),
752
+ focusout: (isIE ? "focusout" : "blur")
753
+ },
754
+
755
+
756
+ /**
757
+ * True when the document is initially usable
758
+ * @property DOMReady
759
+ * @type boolean
760
+ * @static
761
+ */
762
+ DOMReady: false,
763
+
764
+ /**
765
+ * Errors thrown by subscribers of custom events are caught
766
+ * and the error message is written to the debug console. If
767
+ * this property is set to true, it will also re-throw the
768
+ * error.
769
+ * @property throwErrors
770
+ * @type boolean
771
+ * @default false
772
+ */
773
+ throwErrors: false,
774
+
775
+
776
+ /**
777
+ * @method startInterval
778
+ * @static
779
+ * @private
780
+ */
781
+ startInterval: function() {
782
+ if (!this._interval) {
783
+ // var self = this;
784
+ // var callback = function() { self._tryPreloadAttach(); };
785
+ // this._interval = setInterval(callback, this.POLL_INTERVAL);
786
+ this._interval = YAHOO.lang.later(this.POLL_INTERVAL, this, this._tryPreloadAttach, null, true);
787
+ }
788
+ },
789
+
790
+ /**
791
+ * Executes the supplied callback when the item with the supplied
792
+ * id is found. This is meant to be used to execute behavior as
793
+ * soon as possible as the page loads. If you use this after the
794
+ * initial page load it will poll for a fixed time for the element.
795
+ * The number of times it will poll and the frequency are
796
+ * configurable. By default it will poll for 10 seconds.
797
+ *
798
+ * <p>The callback is executed with a single parameter:
799
+ * the custom object parameter, if provided.</p>
800
+ *
801
+ * @method onAvailable
802
+ *
803
+ * @param {string||string[]} id the id of the element, or an array
804
+ * of ids to look for.
805
+ * @param {function} fn what to execute when the element is found.
806
+ * @param {object} obj an optional object to be passed back as
807
+ * a parameter to fn.
808
+ * @param {boolean|object} overrideContext If set to true, fn will execute
809
+ * in the context of obj, if set to an object it
810
+ * will execute in the context of that object
811
+ * @param checkContent {boolean} check child node readiness (onContentReady)
812
+ * @static
813
+ */
814
+ onAvailable: function(id, fn, obj, overrideContext, checkContent) {
815
+
816
+ var a = (YAHOO.lang.isString(id)) ? [id] : id;
817
+
818
+ for (var i=0; i<a.length; i=i+1) {
819
+ onAvailStack.push({id: a[i],
820
+ fn: fn,
821
+ obj: obj,
822
+ overrideContext: overrideContext,
823
+ checkReady: checkContent });
824
+ }
825
+
826
+ retryCount = this.POLL_RETRYS;
827
+
828
+ this.startInterval();
829
+ },
830
+
831
+ /**
832
+ * Works the same way as onAvailable, but additionally checks the
833
+ * state of sibling elements to determine if the content of the
834
+ * available element is safe to modify.
835
+ *
836
+ * <p>The callback is executed with a single parameter:
837
+ * the custom object parameter, if provided.</p>
838
+ *
839
+ * @method onContentReady
840
+ *
841
+ * @param {string} id the id of the element to look for.
842
+ * @param {function} fn what to execute when the element is ready.
843
+ * @param {object} obj an optional object to be passed back as
844
+ * a parameter to fn.
845
+ * @param {boolean|object} overrideContext If set to true, fn will execute
846
+ * in the context of obj. If an object, fn will
847
+ * exectute in the context of that object
848
+ *
849
+ * @static
850
+ */
851
+ onContentReady: function(id, fn, obj, overrideContext) {
852
+ this.onAvailable(id, fn, obj, overrideContext, true);
853
+ },
854
+
855
+ /**
856
+ * Executes the supplied callback when the DOM is first usable. This
857
+ * will execute immediately if called after the DOMReady event has
858
+ * fired. @todo the DOMContentReady event does not fire when the
859
+ * script is dynamically injected into the page. This means the
860
+ * DOMReady custom event will never fire in FireFox or Opera when the
861
+ * library is injected. It _will_ fire in Safari, and the IE
862
+ * implementation would allow for us to fire it if the defered script
863
+ * is not available. We want this to behave the same in all browsers.
864
+ * Is there a way to identify when the script has been injected
865
+ * instead of included inline? Is there a way to know whether the
866
+ * window onload event has fired without having had a listener attached
867
+ * to it when it did so?
868
+ *
869
+ * <p>The callback is a CustomEvent, so the signature is:</p>
870
+ * <p>type &lt;string&gt;, args &lt;array&gt;, customobject &lt;object&gt;</p>
871
+ * <p>For DOMReady events, there are no fire argments, so the
872
+ * signature is:</p>
873
+ * <p>"DOMReady", [], obj</p>
874
+ *
875
+ *
876
+ * @method onDOMReady
877
+ *
878
+ * @param {function} fn what to execute when the element is found.
879
+ * @param {object} obj an optional object to be passed back as
880
+ * a parameter to fn.
881
+ * @param {boolean|object} overrideContext If set to true, fn will execute
882
+ * in the context of obj, if set to an object it
883
+ * will execute in the context of that object
884
+ *
885
+ * @static
886
+ */
887
+ // onDOMReady: function(fn, obj, overrideContext) {
888
+ onDOMReady: function() {
889
+ this.DOMReadyEvent.subscribe.apply(this.DOMReadyEvent, arguments);
890
+ },
891
+
892
+
893
+ /**
894
+ * Appends an event handler
895
+ *
896
+ * @method _addListener
897
+ *
898
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
899
+ * reference, or a collection of ids and/or elements to assign the
900
+ * listener to.
901
+ * @param {String} sType The type of event to append
902
+ * @param {Function} fn The method the event invokes
903
+ * @param {Object} obj An arbitrary object that will be
904
+ * passed as a parameter to the handler
905
+ * @param {Boolean|object} overrideContext If true, the obj passed in becomes
906
+ * the execution context of the listener. If an
907
+ * object, this object becomes the execution
908
+ * context.
909
+ * @param {boolen} capture capture or bubble phase
910
+ * @return {Boolean} True if the action was successful or defered,
911
+ * false if one or more of the elements
912
+ * could not have the listener attached,
913
+ * or if the operation throws an exception.
914
+ * @private
915
+ * @static
916
+ */
917
+ _addListener: function(el, sType, fn, obj, overrideContext, bCapture) {
918
+
919
+ if (!fn || !fn.call) {
920
+ YAHOO.log(sType + " addListener failed, invalid callback", "error", "Event");
921
+ return false;
922
+ }
923
+
924
+ // The el argument can be an array of elements or element ids.
925
+ if ( this._isValidCollection(el)) {
926
+ var ok = true;
927
+ for (var i=0,len=el.length; i<len; ++i) {
928
+ ok = this.on(el[i],
929
+ sType,
930
+ fn,
931
+ obj,
932
+ overrideContext) && ok;
933
+ }
934
+ return ok;
935
+
936
+ } else if (YAHOO.lang.isString(el)) {
937
+ var oEl = this.getEl(el);
938
+ // If the el argument is a string, we assume it is
939
+ // actually the id of the element. If the page is loaded
940
+ // we convert el to the actual element, otherwise we
941
+ // defer attaching the event until onload event fires
942
+
943
+ // check to see if we need to delay hooking up the event
944
+ // until after the page loads.
945
+ if (oEl) {
946
+ el = oEl;
947
+ } else {
948
+ // defer adding the event until the element is available
949
+ this.onAvailable(el, function() {
950
+ YAHOO.util.Event._addListener(el, sType, fn, obj, overrideContext, bCapture);
951
+ });
952
+
953
+ return true;
954
+ }
955
+ }
956
+
957
+ // Element should be an html element or an array if we get
958
+ // here.
959
+ if (!el) {
960
+ // this.logger.debug("unable to attach event " + sType);
961
+ return false;
962
+ }
963
+
964
+ // we need to make sure we fire registered unload events
965
+ // prior to automatically unhooking them. So we hang on to
966
+ // these instead of attaching them to the window and fire the
967
+ // handles explicitly during our one unload event.
968
+ if ("unload" == sType && obj !== this) {
969
+ unloadListeners[unloadListeners.length] =
970
+ [el, sType, fn, obj, overrideContext];
971
+ return true;
972
+ }
973
+
974
+ // this.logger.debug("Adding handler: " + el + ", " + sType);
975
+
976
+ // if the user chooses to override the context, we use the custom
977
+ // object passed in, otherwise the executing context will be the
978
+ // HTML element that the event is registered on
979
+ var context = el;
980
+ if (overrideContext) {
981
+ if (overrideContext === true) {
982
+ context = obj;
983
+ } else {
984
+ context = overrideContext;
985
+ }
986
+ }
987
+
988
+ // wrap the function so we can return the obj object when
989
+ // the event fires;
990
+ var wrappedFn = function(e) {
991
+ return fn.call(context, YAHOO.util.Event.getEvent(e, el),
992
+ obj);
993
+ };
994
+
995
+ var li = [el, sType, fn, wrappedFn, context, obj, overrideContext, bCapture];
996
+ var index = listeners.length;
997
+ // cache the listener so we can try to automatically unload
998
+ listeners[index] = li;
999
+
1000
+ try {
1001
+ this._simpleAdd(el, sType, wrappedFn, bCapture);
1002
+ } catch(ex) {
1003
+ // handle an error trying to attach an event. If it fails
1004
+ // we need to clean up the cache
1005
+ this.lastError = ex;
1006
+ this.removeListener(el, sType, fn);
1007
+ return false;
1008
+ }
1009
+
1010
+ return true;
1011
+
1012
+ },
1013
+
1014
+ /**
1015
+ * Checks to see if the type requested is a special type
1016
+ * (as defined by the _specialTypes hash), and (if so) returns
1017
+ * the special type name.
1018
+ *
1019
+ * @method _getType
1020
+ *
1021
+ * @param {String} sType The type to look up
1022
+ * @private
1023
+ */
1024
+ _getType: function (type) {
1025
+
1026
+ return this._specialTypes[type] || type;
1027
+
1028
+ },
1029
+
1030
+
1031
+ /**
1032
+ * Appends an event handler
1033
+ *
1034
+ * @method addListener
1035
+ *
1036
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
1037
+ * reference, or a collection of ids and/or elements to assign the
1038
+ * listener to.
1039
+ * @param {String} sType The type of event to append
1040
+ * @param {Function} fn The method the event invokes
1041
+ * @param {Object} obj An arbitrary object that will be
1042
+ * passed as a parameter to the handler
1043
+ * @param {Boolean|object} overrideContext If true, the obj passed in becomes
1044
+ * the execution context of the listener. If an
1045
+ * object, this object becomes the execution
1046
+ * context.
1047
+ * @return {Boolean} True if the action was successful or defered,
1048
+ * false if one or more of the elements
1049
+ * could not have the listener attached,
1050
+ * or if the operation throws an exception.
1051
+ * @static
1052
+ */
1053
+ addListener: function (el, sType, fn, obj, overrideContext) {
1054
+
1055
+ var capture = ((sType == FOCUSIN || sType == FOCUSOUT) && !YAHOO.env.ua.ie) ? true : false;
1056
+
1057
+ return this._addListener(el, this._getType(sType), fn, obj, overrideContext, capture);
1058
+
1059
+ },
1060
+
1061
+
1062
+ /**
1063
+ * Attaches a focusin event listener to the specified element for
1064
+ * the purpose of listening for the focus event on the element's
1065
+ * descendants.
1066
+ * @method addFocusListener
1067
+ *
1068
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
1069
+ * reference, or a collection of ids and/or elements to assign the
1070
+ * listener to.
1071
+ * @param {Function} fn The method the event invokes
1072
+ * @param {Object} obj An arbitrary object that will be
1073
+ * passed as a parameter to the handler
1074
+ * @param {Boolean|object} overrideContext If true, the obj passed in becomes
1075
+ * the execution context of the listener. If an
1076
+ * object, this object becomes the execution
1077
+ * context.
1078
+ * @return {Boolean} True if the action was successful or defered,
1079
+ * false if one or more of the elements
1080
+ * could not have the listener attached,
1081
+ * or if the operation throws an exception.
1082
+ * @static
1083
+ * @deprecated use YAHOO.util.Event.on and specify "focusin" as the event type.
1084
+ */
1085
+ addFocusListener: function (el, fn, obj, overrideContext) {
1086
+ return this.on(el, FOCUSIN, fn, obj, overrideContext);
1087
+ },
1088
+
1089
+
1090
+ /**
1091
+ * Removes a focusin event listener to the specified element for
1092
+ * the purpose of listening for the focus event on the element's
1093
+ * descendants.
1094
+ *
1095
+ * @method removeFocusListener
1096
+ *
1097
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
1098
+ * reference, or a collection of ids and/or elements to remove
1099
+ * the listener from.
1100
+ * @param {Function} fn the method the event invokes. If fn is
1101
+ * undefined, then all event handlers for the type of event are
1102
+ * removed.
1103
+ * @return {boolean} true if the unbind was successful, false
1104
+ * otherwise.
1105
+ * @static
1106
+ * @deprecated use YAHOO.util.Event.removeListener and specify "focusin" as the event type.
1107
+ */
1108
+ removeFocusListener: function (el, fn) {
1109
+ return this.removeListener(el, FOCUSIN, fn);
1110
+ },
1111
+
1112
+ /**
1113
+ * Attaches a focusout event listener to the specified element for
1114
+ * the purpose of listening for the blur event on the element's
1115
+ * descendants.
1116
+ *
1117
+ * @method addBlurListener
1118
+ *
1119
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
1120
+ * reference, or a collection of ids and/or elements to assign the
1121
+ * listener to.
1122
+ * @param {Function} fn The method the event invokes
1123
+ * @param {Object} obj An arbitrary object that will be
1124
+ * passed as a parameter to the handler
1125
+ * @param {Boolean|object} overrideContext If true, the obj passed in becomes
1126
+ * the execution context of the listener. If an
1127
+ * object, this object becomes the execution
1128
+ * context.
1129
+ * @return {Boolean} True if the action was successful or defered,
1130
+ * false if one or more of the elements
1131
+ * could not have the listener attached,
1132
+ * or if the operation throws an exception.
1133
+ * @static
1134
+ * @deprecated use YAHOO.util.Event.on and specify "focusout" as the event type.
1135
+ */
1136
+ addBlurListener: function (el, fn, obj, overrideContext) {
1137
+ return this.on(el, FOCUSOUT, fn, obj, overrideContext);
1138
+ },
1139
+
1140
+ /**
1141
+ * Removes a focusout event listener to the specified element for
1142
+ * the purpose of listening for the blur event on the element's
1143
+ * descendants.
1144
+ *
1145
+ * @method removeBlurListener
1146
+ *
1147
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
1148
+ * reference, or a collection of ids and/or elements to remove
1149
+ * the listener from.
1150
+ * @param {Function} fn the method the event invokes. If fn is
1151
+ * undefined, then all event handlers for the type of event are
1152
+ * removed.
1153
+ * @return {boolean} true if the unbind was successful, false
1154
+ * otherwise.
1155
+ * @static
1156
+ * @deprecated use YAHOO.util.Event.removeListener and specify "focusout" as the event type.
1157
+ */
1158
+ removeBlurListener: function (el, fn) {
1159
+ return this.removeListener(el, FOCUSOUT, fn);
1160
+ },
1161
+
1162
+ /**
1163
+ * Removes an event listener
1164
+ *
1165
+ * @method removeListener
1166
+ *
1167
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
1168
+ * reference, or a collection of ids and/or elements to remove
1169
+ * the listener from.
1170
+ * @param {String} sType the type of event to remove.
1171
+ * @param {Function} fn the method the event invokes. If fn is
1172
+ * undefined, then all event handlers for the type of event are
1173
+ * removed.
1174
+ * @return {boolean} true if the unbind was successful, false
1175
+ * otherwise.
1176
+ * @static
1177
+ */
1178
+ removeListener: function(el, sType, fn) {
1179
+ var i, len, li;
1180
+
1181
+ sType = this._getType(sType);
1182
+
1183
+ // The el argument can be a string
1184
+ if (typeof el == "string") {
1185
+ el = this.getEl(el);
1186
+ // The el argument can be an array of elements or element ids.
1187
+ } else if ( this._isValidCollection(el)) {
1188
+ var ok = true;
1189
+ for (i=el.length-1; i>-1; i--) {
1190
+ ok = ( this.removeListener(el[i], sType, fn) && ok );
1191
+ }
1192
+ return ok;
1193
+ }
1194
+
1195
+ if (!fn || !fn.call) {
1196
+ // this.logger.debug("Error, function is not valid " + fn);
1197
+ //return false;
1198
+ return this.purgeElement(el, false, sType);
1199
+ }
1200
+
1201
+ if ("unload" == sType) {
1202
+
1203
+ for (i=unloadListeners.length-1; i>-1; i--) {
1204
+ li = unloadListeners[i];
1205
+ if (li &&
1206
+ li[0] == el &&
1207
+ li[1] == sType &&
1208
+ li[2] == fn) {
1209
+ unloadListeners.splice(i, 1);
1210
+ // unloadListeners[i]=null;
1211
+ return true;
1212
+ }
1213
+ }
1214
+
1215
+ return false;
1216
+ }
1217
+
1218
+ var cacheItem = null;
1219
+
1220
+ // The index is a hidden parameter; needed to remove it from
1221
+ // the method signature because it was tempting users to
1222
+ // try and take advantage of it, which is not possible.
1223
+ var index = arguments[3];
1224
+
1225
+ if ("undefined" === typeof index) {
1226
+ index = this._getCacheIndex(listeners, el, sType, fn);
1227
+ }
1228
+
1229
+ if (index >= 0) {
1230
+ cacheItem = listeners[index];
1231
+ }
1232
+
1233
+ if (!el || !cacheItem) {
1234
+ // this.logger.debug("cached listener not found");
1235
+ return false;
1236
+ }
1237
+
1238
+ // this.logger.debug("Removing handler: " + el + ", " + sType);
1239
+
1240
+ var bCapture = cacheItem[this.CAPTURE] === true ? true : false;
1241
+
1242
+ try {
1243
+ this._simpleRemove(el, sType, cacheItem[this.WFN], bCapture);
1244
+ } catch(ex) {
1245
+ this.lastError = ex;
1246
+ return false;
1247
+ }
1248
+
1249
+ // removed the wrapped handler
1250
+ delete listeners[index][this.WFN];
1251
+ delete listeners[index][this.FN];
1252
+ listeners.splice(index, 1);
1253
+ // listeners[index]=null;
1254
+
1255
+ return true;
1256
+
1257
+ },
1258
+
1259
+ /**
1260
+ * Returns the event's target element. Safari sometimes provides
1261
+ * a text node, and this is automatically resolved to the text
1262
+ * node's parent so that it behaves like other browsers.
1263
+ * @method getTarget
1264
+ * @param {Event} ev the event
1265
+ * @param {boolean} resolveTextNode when set to true the target's
1266
+ * parent will be returned if the target is a
1267
+ * text node. @deprecated, the text node is
1268
+ * now resolved automatically
1269
+ * @return {HTMLElement} the event's target
1270
+ * @static
1271
+ */
1272
+ getTarget: function(ev, resolveTextNode) {
1273
+ var t = ev.target || ev.srcElement;
1274
+ return this.resolveTextNode(t);
1275
+ },
1276
+
1277
+ /**
1278
+ * In some cases, some browsers will return a text node inside
1279
+ * the actual element that was targeted. This normalizes the
1280
+ * return value for getTarget and getRelatedTarget.
1281
+ * @method resolveTextNode
1282
+ * @param {HTMLElement} node node to resolve
1283
+ * @return {HTMLElement} the normized node
1284
+ * @static
1285
+ */
1286
+ resolveTextNode: function(n) {
1287
+ try {
1288
+ if (n && 3 == n.nodeType) {
1289
+ return n.parentNode;
1290
+ }
1291
+ } catch(e) { }
1292
+
1293
+ return n;
1294
+ },
1295
+
1296
+ /**
1297
+ * Returns the event's pageX
1298
+ * @method getPageX
1299
+ * @param {Event} ev the event
1300
+ * @return {int} the event's pageX
1301
+ * @static
1302
+ */
1303
+ getPageX: function(ev) {
1304
+ var x = ev.pageX;
1305
+ if (!x && 0 !== x) {
1306
+ x = ev.clientX || 0;
1307
+
1308
+ if ( this.isIE ) {
1309
+ x += this._getScrollLeft();
1310
+ }
1311
+ }
1312
+
1313
+ return x;
1314
+ },
1315
+
1316
+ /**
1317
+ * Returns the event's pageY
1318
+ * @method getPageY
1319
+ * @param {Event} ev the event
1320
+ * @return {int} the event's pageY
1321
+ * @static
1322
+ */
1323
+ getPageY: function(ev) {
1324
+ var y = ev.pageY;
1325
+ if (!y && 0 !== y) {
1326
+ y = ev.clientY || 0;
1327
+
1328
+ if ( this.isIE ) {
1329
+ y += this._getScrollTop();
1330
+ }
1331
+ }
1332
+
1333
+
1334
+ return y;
1335
+ },
1336
+
1337
+ /**
1338
+ * Returns the pageX and pageY properties as an indexed array.
1339
+ * @method getXY
1340
+ * @param {Event} ev the event
1341
+ * @return {[x, y]} the pageX and pageY properties of the event
1342
+ * @static
1343
+ */
1344
+ getXY: function(ev) {
1345
+ return [this.getPageX(ev), this.getPageY(ev)];
1346
+ },
1347
+
1348
+ /**
1349
+ * Returns the event's related target
1350
+ * @method getRelatedTarget
1351
+ * @param {Event} ev the event
1352
+ * @return {HTMLElement} the event's relatedTarget
1353
+ * @static
1354
+ */
1355
+ getRelatedTarget: function(ev) {
1356
+ var t = ev.relatedTarget;
1357
+ if (!t) {
1358
+ if (ev.type == "mouseout") {
1359
+ t = ev.toElement;
1360
+ } else if (ev.type == "mouseover") {
1361
+ t = ev.fromElement;
1362
+ }
1363
+ }
1364
+
1365
+ return this.resolveTextNode(t);
1366
+ },
1367
+
1368
+ /**
1369
+ * Returns the time of the event. If the time is not included, the
1370
+ * event is modified using the current time.
1371
+ * @method getTime
1372
+ * @param {Event} ev the event
1373
+ * @return {Date} the time of the event
1374
+ * @static
1375
+ */
1376
+ getTime: function(ev) {
1377
+ if (!ev.time) {
1378
+ var t = new Date().getTime();
1379
+ try {
1380
+ ev.time = t;
1381
+ } catch(ex) {
1382
+ this.lastError = ex;
1383
+ return t;
1384
+ }
1385
+ }
1386
+
1387
+ return ev.time;
1388
+ },
1389
+
1390
+ /**
1391
+ * Convenience method for stopPropagation + preventDefault
1392
+ * @method stopEvent
1393
+ * @param {Event} ev the event
1394
+ * @static
1395
+ */
1396
+ stopEvent: function(ev) {
1397
+ this.stopPropagation(ev);
1398
+ this.preventDefault(ev);
1399
+ },
1400
+
1401
+ /**
1402
+ * Stops event propagation
1403
+ * @method stopPropagation
1404
+ * @param {Event} ev the event
1405
+ * @static
1406
+ */
1407
+ stopPropagation: function(ev) {
1408
+ if (ev.stopPropagation) {
1409
+ ev.stopPropagation();
1410
+ } else {
1411
+ ev.cancelBubble = true;
1412
+ }
1413
+ },
1414
+
1415
+ /**
1416
+ * Prevents the default behavior of the event
1417
+ * @method preventDefault
1418
+ * @param {Event} ev the event
1419
+ * @static
1420
+ */
1421
+ preventDefault: function(ev) {
1422
+ if (ev.preventDefault) {
1423
+ ev.preventDefault();
1424
+ } else {
1425
+ ev.returnValue = false;
1426
+ }
1427
+ },
1428
+
1429
+ /**
1430
+ * Finds the event in the window object, the caller's arguments, or
1431
+ * in the arguments of another method in the callstack. This is
1432
+ * executed automatically for events registered through the event
1433
+ * manager, so the implementer should not normally need to execute
1434
+ * this function at all.
1435
+ * @method getEvent
1436
+ * @param {Event} e the event parameter from the handler
1437
+ * @param {HTMLElement} boundEl the element the listener is attached to
1438
+ * @return {Event} the event
1439
+ * @static
1440
+ */
1441
+ getEvent: function(e, boundEl) {
1442
+ var ev = e || window.event;
1443
+
1444
+ if (!ev) {
1445
+ var c = this.getEvent.caller;
1446
+ while (c) {
1447
+ ev = c.arguments[0];
1448
+ if (ev && Event == ev.constructor) {
1449
+ break;
1450
+ }
1451
+ c = c.caller;
1452
+ }
1453
+ }
1454
+
1455
+ return ev;
1456
+ },
1457
+
1458
+ /**
1459
+ * Returns the charcode for an event
1460
+ * @method getCharCode
1461
+ * @param {Event} ev the event
1462
+ * @return {int} the event's charCode
1463
+ * @static
1464
+ */
1465
+ getCharCode: function(ev) {
1466
+ var code = ev.keyCode || ev.charCode || 0;
1467
+
1468
+ // webkit key normalization
1469
+ if (YAHOO.env.ua.webkit && (code in webkitKeymap)) {
1470
+ code = webkitKeymap[code];
1471
+ }
1472
+ return code;
1473
+ },
1474
+
1475
+ /**
1476
+ * Locating the saved event handler data by function ref
1477
+ *
1478
+ * @method _getCacheIndex
1479
+ * @static
1480
+ * @private
1481
+ */
1482
+ _getCacheIndex: function(a, el, sType, fn) {
1483
+ for (var i=0, l=a.length; i<l; i=i+1) {
1484
+ var li = a[i];
1485
+ if ( li &&
1486
+ li[this.FN] == fn &&
1487
+ li[this.EL] == el &&
1488
+ li[this.TYPE] == sType ) {
1489
+ return i;
1490
+ }
1491
+ }
1492
+
1493
+ return -1;
1494
+ },
1495
+
1496
+ /**
1497
+ * Generates an unique ID for the element if it does not already
1498
+ * have one.
1499
+ * @method generateId
1500
+ * @param el the element to create the id for
1501
+ * @return {string} the resulting id of the element
1502
+ * @static
1503
+ */
1504
+ generateId: function(el) {
1505
+ var id = el.id;
1506
+
1507
+ if (!id) {
1508
+ id = "yuievtautoid-" + counter;
1509
+ ++counter;
1510
+ el.id = id;
1511
+ }
1512
+
1513
+ return id;
1514
+ },
1515
+
1516
+
1517
+ /**
1518
+ * We want to be able to use getElementsByTagName as a collection
1519
+ * to attach a group of events to. Unfortunately, different
1520
+ * browsers return different types of collections. This function
1521
+ * tests to determine if the object is array-like. It will also
1522
+ * fail if the object is an array, but is empty.
1523
+ * @method _isValidCollection
1524
+ * @param o the object to test
1525
+ * @return {boolean} true if the object is array-like and populated
1526
+ * @static
1527
+ * @private
1528
+ */
1529
+ _isValidCollection: function(o) {
1530
+ try {
1531
+ return ( o && // o is something
1532
+ typeof o !== "string" && // o is not a string
1533
+ o.length && // o is indexed
1534
+ !o.tagName && // o is not an HTML element
1535
+ !o.alert && // o is not a window
1536
+ typeof o[0] !== "undefined" );
1537
+ } catch(ex) {
1538
+ YAHOO.log("node access error (xframe?)", "warn");
1539
+ return false;
1540
+ }
1541
+
1542
+ },
1543
+
1544
+ /**
1545
+ * @private
1546
+ * @property elCache
1547
+ * DOM element cache
1548
+ * @static
1549
+ * @deprecated Elements are not cached due to issues that arise when
1550
+ * elements are removed and re-added
1551
+ */
1552
+ elCache: {},
1553
+
1554
+ /**
1555
+ * We cache elements bound by id because when the unload event
1556
+ * fires, we can no longer use document.getElementById
1557
+ * @method getEl
1558
+ * @static
1559
+ * @private
1560
+ * @deprecated Elements are not cached any longer
1561
+ */
1562
+ getEl: function(id) {
1563
+ return (typeof id === "string") ? document.getElementById(id) : id;
1564
+ },
1565
+
1566
+ /**
1567
+ * Clears the element cache
1568
+ * @deprecated Elements are not cached any longer
1569
+ * @method clearCache
1570
+ * @static
1571
+ * @private
1572
+ */
1573
+ clearCache: function() { },
1574
+
1575
+ /**
1576
+ * Custom event the fires when the dom is initially usable
1577
+ * @event DOMReadyEvent
1578
+ */
1579
+ DOMReadyEvent: new YAHOO.util.CustomEvent("DOMReady", YAHOO, 0, 0, 1),
1580
+
1581
+ /**
1582
+ * hook up any deferred listeners
1583
+ * @method _load
1584
+ * @static
1585
+ * @private
1586
+ */
1587
+ _load: function(e) {
1588
+
1589
+ if (!loadComplete) {
1590
+ loadComplete = true;
1591
+ var EU = YAHOO.util.Event;
1592
+
1593
+ // Just in case DOMReady did not go off for some reason
1594
+ EU._ready();
1595
+
1596
+ // Available elements may not have been detected before the
1597
+ // window load event fires. Try to find them now so that the
1598
+ // the user is more likely to get the onAvailable notifications
1599
+ // before the window load notification
1600
+ EU._tryPreloadAttach();
1601
+
1602
+ }
1603
+ },
1604
+
1605
+ /**
1606
+ * Fires the DOMReady event listeners the first time the document is
1607
+ * usable.
1608
+ * @method _ready
1609
+ * @static
1610
+ * @private
1611
+ */
1612
+ _ready: function(e) {
1613
+ var EU = YAHOO.util.Event;
1614
+ if (!EU.DOMReady) {
1615
+ EU.DOMReady=true;
1616
+
1617
+ // Fire the content ready custom event
1618
+ EU.DOMReadyEvent.fire();
1619
+
1620
+ // Remove the DOMContentLoaded (FF/Opera)
1621
+ EU._simpleRemove(document, "DOMContentLoaded", EU._ready);
1622
+ }
1623
+ },
1624
+
1625
+ /**
1626
+ * Polling function that runs before the onload event fires,
1627
+ * attempting to attach to DOM Nodes as soon as they are
1628
+ * available
1629
+ * @method _tryPreloadAttach
1630
+ * @static
1631
+ * @private
1632
+ */
1633
+ _tryPreloadAttach: function() {
1634
+
1635
+ if (onAvailStack.length === 0) {
1636
+ retryCount = 0;
1637
+ if (this._interval) {
1638
+ // clearInterval(this._interval);
1639
+ this._interval.cancel();
1640
+ this._interval = null;
1641
+ }
1642
+ return;
1643
+ }
1644
+
1645
+ if (this.locked) {
1646
+ return;
1647
+ }
1648
+
1649
+ if (this.isIE) {
1650
+ // Hold off if DOMReady has not fired and check current
1651
+ // readyState to protect against the IE operation aborted
1652
+ // issue.
1653
+ if (!this.DOMReady) {
1654
+ this.startInterval();
1655
+ return;
1656
+ }
1657
+ }
1658
+
1659
+ this.locked = true;
1660
+
1661
+ // this.logger.debug("tryPreloadAttach");
1662
+
1663
+ // keep trying until after the page is loaded. We need to
1664
+ // check the page load state prior to trying to bind the
1665
+ // elements so that we can be certain all elements have been
1666
+ // tested appropriately
1667
+ var tryAgain = !loadComplete;
1668
+ if (!tryAgain) {
1669
+ tryAgain = (retryCount > 0 && onAvailStack.length > 0);
1670
+ }
1671
+
1672
+ // onAvailable
1673
+ var notAvail = [];
1674
+
1675
+ var executeItem = function (el, item) {
1676
+ var context = el;
1677
+ if (item.overrideContext) {
1678
+ if (item.overrideContext === true) {
1679
+ context = item.obj;
1680
+ } else {
1681
+ context = item.overrideContext;
1682
+ }
1683
+ }
1684
+ item.fn.call(context, item.obj);
1685
+ };
1686
+
1687
+ var i, len, item, el, ready=[];
1688
+
1689
+ // onAvailable onContentReady
1690
+ for (i=0, len=onAvailStack.length; i<len; i=i+1) {
1691
+ item = onAvailStack[i];
1692
+ if (item) {
1693
+ el = this.getEl(item.id);
1694
+ if (el) {
1695
+ if (item.checkReady) {
1696
+ if (loadComplete || el.nextSibling || !tryAgain) {
1697
+ ready.push(item);
1698
+ onAvailStack[i] = null;
1699
+ }
1700
+ } else {
1701
+ executeItem(el, item);
1702
+ onAvailStack[i] = null;
1703
+ }
1704
+ } else {
1705
+ notAvail.push(item);
1706
+ }
1707
+ }
1708
+ }
1709
+
1710
+ // make sure onContentReady fires after onAvailable
1711
+ for (i=0, len=ready.length; i<len; i=i+1) {
1712
+ item = ready[i];
1713
+ executeItem(this.getEl(item.id), item);
1714
+ }
1715
+
1716
+
1717
+ retryCount--;
1718
+
1719
+ if (tryAgain) {
1720
+ for (i=onAvailStack.length-1; i>-1; i--) {
1721
+ item = onAvailStack[i];
1722
+ if (!item || !item.id) {
1723
+ onAvailStack.splice(i, 1);
1724
+ }
1725
+ }
1726
+
1727
+ this.startInterval();
1728
+ } else {
1729
+ if (this._interval) {
1730
+ // clearInterval(this._interval);
1731
+ this._interval.cancel();
1732
+ this._interval = null;
1733
+ }
1734
+ }
1735
+
1736
+ this.locked = false;
1737
+
1738
+ },
1739
+
1740
+ /**
1741
+ * Removes all listeners attached to the given element via addListener.
1742
+ * Optionally, the node's children can also be purged.
1743
+ * Optionally, you can specify a specific type of event to remove.
1744
+ * @method purgeElement
1745
+ * @param {HTMLElement} el the element to purge
1746
+ * @param {boolean} recurse recursively purge this element's children
1747
+ * as well. Use with caution.
1748
+ * @param {string} sType optional type of listener to purge. If
1749
+ * left out, all listeners will be removed
1750
+ * @static
1751
+ */
1752
+ purgeElement: function(el, recurse, sType) {
1753
+ var oEl = (YAHOO.lang.isString(el)) ? this.getEl(el) : el;
1754
+ var elListeners = this.getListeners(oEl, sType), i, len;
1755
+ if (elListeners) {
1756
+ for (i=elListeners.length-1; i>-1; i--) {
1757
+ var l = elListeners[i];
1758
+ this.removeListener(oEl, l.type, l.fn);
1759
+ }
1760
+ }
1761
+
1762
+ if (recurse && oEl && oEl.childNodes) {
1763
+ for (i=0,len=oEl.childNodes.length; i<len ; ++i) {
1764
+ this.purgeElement(oEl.childNodes[i], recurse, sType);
1765
+ }
1766
+ }
1767
+ },
1768
+
1769
+ /**
1770
+ * Returns all listeners attached to the given element via addListener.
1771
+ * Optionally, you can specify a specific type of event to return.
1772
+ * @method getListeners
1773
+ * @param el {HTMLElement|string} the element or element id to inspect
1774
+ * @param sType {string} optional type of listener to return. If
1775
+ * left out, all listeners will be returned
1776
+ * @return {Object} the listener. Contains the following fields:
1777
+ * &nbsp;&nbsp;type: (string) the type of event
1778
+ * &nbsp;&nbsp;fn: (function) the callback supplied to addListener
1779
+ * &nbsp;&nbsp;obj: (object) the custom object supplied to addListener
1780
+ * &nbsp;&nbsp;adjust: (boolean|object) whether or not to adjust the default context
1781
+ * &nbsp;&nbsp;scope: (boolean) the derived context based on the adjust parameter
1782
+ * &nbsp;&nbsp;index: (int) its position in the Event util listener cache
1783
+ * @static
1784
+ */
1785
+ getListeners: function(el, sType) {
1786
+ var results=[], searchLists;
1787
+ if (!sType) {
1788
+ searchLists = [listeners, unloadListeners];
1789
+ } else if (sType === "unload") {
1790
+ searchLists = [unloadListeners];
1791
+ } else {
1792
+ sType = this._getType(sType);
1793
+ searchLists = [listeners];
1794
+ }
1795
+
1796
+ var oEl = (YAHOO.lang.isString(el)) ? this.getEl(el) : el;
1797
+
1798
+ for (var j=0;j<searchLists.length; j=j+1) {
1799
+ var searchList = searchLists[j];
1800
+ if (searchList) {
1801
+ for (var i=0,len=searchList.length; i<len ; ++i) {
1802
+ var l = searchList[i];
1803
+ if ( l && l[this.EL] === oEl &&
1804
+ (!sType || sType === l[this.TYPE]) ) {
1805
+ results.push({
1806
+ type: l[this.TYPE],
1807
+ fn: l[this.FN],
1808
+ obj: l[this.OBJ],
1809
+ adjust: l[this.OVERRIDE],
1810
+ scope: l[this.ADJ_SCOPE],
1811
+ index: i
1812
+ });
1813
+ }
1814
+ }
1815
+ }
1816
+ }
1817
+
1818
+ return (results.length) ? results : null;
1819
+ },
1820
+
1821
+ /**
1822
+ * Removes all listeners registered by pe.event. Called
1823
+ * automatically during the unload event.
1824
+ * @method _unload
1825
+ * @static
1826
+ * @private
1827
+ */
1828
+ _unload: function(e) {
1829
+
1830
+ var EU = YAHOO.util.Event, i, j, l, len, index,
1831
+ ul = unloadListeners.slice(), context;
1832
+
1833
+ // execute and clear stored unload listeners
1834
+ for (i=0, len=unloadListeners.length; i<len; ++i) {
1835
+ l = ul[i];
1836
+ if (l) {
1837
+ context = window;
1838
+ if (l[EU.ADJ_SCOPE]) {
1839
+ if (l[EU.ADJ_SCOPE] === true) {
1840
+ context = l[EU.UNLOAD_OBJ];
1841
+ } else {
1842
+ context = l[EU.ADJ_SCOPE];
1843
+ }
1844
+ }
1845
+ l[EU.FN].call(context, EU.getEvent(e, l[EU.EL]), l[EU.UNLOAD_OBJ] );
1846
+ ul[i] = null;
1847
+ }
1848
+ }
1849
+
1850
+ l = null;
1851
+ context = null;
1852
+ unloadListeners = null;
1853
+
1854
+ // Remove listeners to handle IE memory leaks
1855
+ // 2.5.0 listeners are removed for all browsers again. FireFox preserves
1856
+ // at least some listeners between page refreshes, potentially causing
1857
+ // errors during page load (mouseover listeners firing before they
1858
+ // should if the user moves the mouse at the correct moment).
1859
+ if (listeners) {
1860
+ for (j=listeners.length-1; j>-1; j--) {
1861
+ l = listeners[j];
1862
+ if (l) {
1863
+ EU.removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], j);
1864
+ }
1865
+ }
1866
+ l=null;
1867
+ }
1868
+
1869
+ EU._simpleRemove(window, "unload", EU._unload);
1870
+
1871
+ },
1872
+
1873
+ /**
1874
+ * Returns scrollLeft
1875
+ * @method _getScrollLeft
1876
+ * @static
1877
+ * @private
1878
+ */
1879
+ _getScrollLeft: function() {
1880
+ return this._getScroll()[1];
1881
+ },
1882
+
1883
+ /**
1884
+ * Returns scrollTop
1885
+ * @method _getScrollTop
1886
+ * @static
1887
+ * @private
1888
+ */
1889
+ _getScrollTop: function() {
1890
+ return this._getScroll()[0];
1891
+ },
1892
+
1893
+ /**
1894
+ * Returns the scrollTop and scrollLeft. Used to calculate the
1895
+ * pageX and pageY in Internet Explorer
1896
+ * @method _getScroll
1897
+ * @static
1898
+ * @private
1899
+ */
1900
+ _getScroll: function() {
1901
+ var dd = document.documentElement, db = document.body;
1902
+ if (dd && (dd.scrollTop || dd.scrollLeft)) {
1903
+ return [dd.scrollTop, dd.scrollLeft];
1904
+ } else if (db) {
1905
+ return [db.scrollTop, db.scrollLeft];
1906
+ } else {
1907
+ return [0, 0];
1908
+ }
1909
+ },
1910
+
1911
+ /**
1912
+ * Used by old versions of CustomEvent, restored for backwards
1913
+ * compatibility
1914
+ * @method regCE
1915
+ * @private
1916
+ * @static
1917
+ * @deprecated still here for backwards compatibility
1918
+ */
1919
+ regCE: function() {},
1920
+
1921
+ /**
1922
+ * Adds a DOM event directly without the caching, cleanup, context adj, etc
1923
+ *
1924
+ * @method _simpleAdd
1925
+ * @param {HTMLElement} el the element to bind the handler to
1926
+ * @param {string} sType the type of event handler
1927
+ * @param {function} fn the callback to invoke
1928
+ * @param {boolen} capture capture or bubble phase
1929
+ * @static
1930
+ * @private
1931
+ */
1932
+ _simpleAdd: function () {
1933
+ if (window.addEventListener) {
1934
+ return function(el, sType, fn, capture) {
1935
+ el.addEventListener(sType, fn, (capture));
1936
+ };
1937
+ } else if (window.attachEvent) {
1938
+ return function(el, sType, fn, capture) {
1939
+ el.attachEvent("on" + sType, fn);
1940
+ };
1941
+ } else {
1942
+ return function(){};
1943
+ }
1944
+ }(),
1945
+
1946
+ /**
1947
+ * Basic remove listener
1948
+ *
1949
+ * @method _simpleRemove
1950
+ * @param {HTMLElement} el the element to bind the handler to
1951
+ * @param {string} sType the type of event handler
1952
+ * @param {function} fn the callback to invoke
1953
+ * @param {boolen} capture capture or bubble phase
1954
+ * @static
1955
+ * @private
1956
+ */
1957
+ _simpleRemove: function() {
1958
+ if (window.removeEventListener) {
1959
+ return function (el, sType, fn, capture) {
1960
+ el.removeEventListener(sType, fn, (capture));
1961
+ };
1962
+ } else if (window.detachEvent) {
1963
+ return function (el, sType, fn) {
1964
+ el.detachEvent("on" + sType, fn);
1965
+ };
1966
+ } else {
1967
+ return function(){};
1968
+ }
1969
+ }()
1970
+ };
1971
+
1972
+ }();
1973
+
1974
+ (function() {
1975
+ var EU = YAHOO.util.Event;
1976
+
1977
+ /**
1978
+ * YAHOO.util.Event.on is an alias for addListener
1979
+ * @method on
1980
+ * @see addListener
1981
+ * @static
1982
+ */
1983
+ EU.on = EU.addListener;
1984
+
1985
+ /**
1986
+ * YAHOO.util.Event.onFocus is an alias for addFocusListener
1987
+ * @method onFocus
1988
+ * @see addFocusListener
1989
+ * @static
1990
+ * @deprecated use YAHOO.util.Event.on and specify "focusin" as the event type.
1991
+ */
1992
+ EU.onFocus = EU.addFocusListener;
1993
+
1994
+ /**
1995
+ * YAHOO.util.Event.onBlur is an alias for addBlurListener
1996
+ * @method onBlur
1997
+ * @see addBlurListener
1998
+ * @static
1999
+ * @deprecated use YAHOO.util.Event.on and specify "focusout" as the event type.
2000
+ */
2001
+ EU.onBlur = EU.addBlurListener;
2002
+
2003
+ /*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */
2004
+
2005
+ // Internet Explorer: use the readyState of a defered script.
2006
+ // This isolates what appears to be a safe moment to manipulate
2007
+ // the DOM prior to when the document's readyState suggests
2008
+ // it is safe to do so.
2009
+ if (EU.isIE) {
2010
+ if (self !== self.top) {
2011
+ document.onreadystatechange = function() {
2012
+ if (document.readyState == 'complete') {
2013
+ document.onreadystatechange = null;
2014
+ EU._ready();
2015
+ }
2016
+ };
2017
+ } else {
2018
+
2019
+ // Process onAvailable/onContentReady items when the
2020
+ // DOM is ready.
2021
+ YAHOO.util.Event.onDOMReady(
2022
+ YAHOO.util.Event._tryPreloadAttach,
2023
+ YAHOO.util.Event, true);
2024
+
2025
+ var n = document.createElement('p');
2026
+
2027
+ EU._dri = setInterval(function() {
2028
+ try {
2029
+ // throws an error if doc is not ready
2030
+ n.doScroll('left');
2031
+ clearInterval(EU._dri);
2032
+ EU._dri = null;
2033
+ EU._ready();
2034
+ n = null;
2035
+ } catch (ex) {
2036
+ }
2037
+ }, EU.POLL_INTERVAL);
2038
+ }
2039
+
2040
+ // The document's readyState in Safari currently will
2041
+ // change to loaded/complete before images are loaded.
2042
+ } else if (EU.webkit && EU.webkit < 525) {
2043
+
2044
+ EU._dri = setInterval(function() {
2045
+ var rs=document.readyState;
2046
+ if ("loaded" == rs || "complete" == rs) {
2047
+ clearInterval(EU._dri);
2048
+ EU._dri = null;
2049
+ EU._ready();
2050
+ }
2051
+ }, EU.POLL_INTERVAL);
2052
+
2053
+ // FireFox and Opera: These browsers provide a event for this
2054
+ // moment. The latest WebKit releases now support this event.
2055
+ } else {
2056
+
2057
+ EU._simpleAdd(document, "DOMContentLoaded", EU._ready);
2058
+
2059
+ }
2060
+ /////////////////////////////////////////////////////////////
2061
+
2062
+
2063
+ EU._simpleAdd(window, "load", EU._load);
2064
+ EU._simpleAdd(window, "unload", EU._unload);
2065
+ EU._tryPreloadAttach();
2066
+ })();
2067
+
2068
+ }
2069
+ /**
2070
+ * EventProvider is designed to be used with YAHOO.augment to wrap
2071
+ * CustomEvents in an interface that allows events to be subscribed to
2072
+ * and fired by name. This makes it possible for implementing code to
2073
+ * subscribe to an event that either has not been created yet, or will
2074
+ * not be created at all.
2075
+ *
2076
+ * @Class EventProvider
2077
+ */
2078
+ YAHOO.util.EventProvider = function() { };
2079
+
2080
+ YAHOO.util.EventProvider.prototype = {
2081
+
2082
+ /**
2083
+ * Private storage of custom events
2084
+ * @property __yui_events
2085
+ * @type Object[]
2086
+ * @private
2087
+ */
2088
+ __yui_events: null,
2089
+
2090
+ /**
2091
+ * Private storage of custom event subscribers
2092
+ * @property __yui_subscribers
2093
+ * @type Object[]
2094
+ * @private
2095
+ */
2096
+ __yui_subscribers: null,
2097
+
2098
+ /**
2099
+ * Subscribe to a CustomEvent by event type
2100
+ *
2101
+ * @method subscribe
2102
+ * @param p_type {string} the type, or name of the event
2103
+ * @param p_fn {function} the function to exectute when the event fires
2104
+ * @param p_obj {Object} An object to be passed along when the event
2105
+ * fires
2106
+ * @param overrideContext {boolean} If true, the obj passed in becomes the
2107
+ * execution scope of the listener
2108
+ */
2109
+ subscribe: function(p_type, p_fn, p_obj, overrideContext) {
2110
+
2111
+ this.__yui_events = this.__yui_events || {};
2112
+ var ce = this.__yui_events[p_type];
2113
+
2114
+ if (ce) {
2115
+ ce.subscribe(p_fn, p_obj, overrideContext);
2116
+ } else {
2117
+ this.__yui_subscribers = this.__yui_subscribers || {};
2118
+ var subs = this.__yui_subscribers;
2119
+ if (!subs[p_type]) {
2120
+ subs[p_type] = [];
2121
+ }
2122
+ subs[p_type].push(
2123
+ { fn: p_fn, obj: p_obj, overrideContext: overrideContext } );
2124
+ }
2125
+ },
2126
+
2127
+ /**
2128
+ * Unsubscribes one or more listeners the from the specified event
2129
+ * @method unsubscribe
2130
+ * @param p_type {string} The type, or name of the event. If the type
2131
+ * is not specified, it will attempt to remove
2132
+ * the listener from all hosted events.
2133
+ * @param p_fn {Function} The subscribed function to unsubscribe, if not
2134
+ * supplied, all subscribers will be removed.
2135
+ * @param p_obj {Object} The custom object passed to subscribe. This is
2136
+ * optional, but if supplied will be used to
2137
+ * disambiguate multiple listeners that are the same
2138
+ * (e.g., you subscribe many object using a function
2139
+ * that lives on the prototype)
2140
+ * @return {boolean} true if the subscriber was found and detached.
2141
+ */
2142
+ unsubscribe: function(p_type, p_fn, p_obj) {
2143
+ this.__yui_events = this.__yui_events || {};
2144
+ var evts = this.__yui_events;
2145
+ if (p_type) {
2146
+ var ce = evts[p_type];
2147
+ if (ce) {
2148
+ return ce.unsubscribe(p_fn, p_obj);
2149
+ }
2150
+ } else {
2151
+ var ret = true;
2152
+ for (var i in evts) {
2153
+ if (YAHOO.lang.hasOwnProperty(evts, i)) {
2154
+ ret = ret && evts[i].unsubscribe(p_fn, p_obj);
2155
+ }
2156
+ }
2157
+ return ret;
2158
+ }
2159
+
2160
+ return false;
2161
+ },
2162
+
2163
+ /**
2164
+ * Removes all listeners from the specified event. If the event type
2165
+ * is not specified, all listeners from all hosted custom events will
2166
+ * be removed.
2167
+ * @method unsubscribeAll
2168
+ * @param p_type {string} The type, or name of the event
2169
+ */
2170
+ unsubscribeAll: function(p_type) {
2171
+ return this.unsubscribe(p_type);
2172
+ },
2173
+
2174
+ /**
2175
+ * Creates a new custom event of the specified type. If a custom event
2176
+ * by that name already exists, it will not be re-created. In either
2177
+ * case the custom event is returned.
2178
+ *
2179
+ * @method createEvent
2180
+ *
2181
+ * @param p_type {string} the type, or name of the event
2182
+ * @param p_config {object} optional config params. Valid properties are:
2183
+ *
2184
+ * <ul>
2185
+ * <li>
2186
+ * scope: defines the default execution scope. If not defined
2187
+ * the default scope will be this instance.
2188
+ * </li>
2189
+ * <li>
2190
+ * silent: if true, the custom event will not generate log messages.
2191
+ * This is false by default.
2192
+ * </li>
2193
+ * <li>
2194
+ * fireOnce: if true, the custom event will only notify subscribers
2195
+ * once regardless of the number of times the event is fired. In
2196
+ * addition, new subscribers will be executed immediately if the
2197
+ * event has already fired.
2198
+ * This is false by default.
2199
+ * </li>
2200
+ * <li>
2201
+ * onSubscribeCallback: specifies a callback to execute when the
2202
+ * event has a new subscriber. This will fire immediately for
2203
+ * each queued subscriber if any exist prior to the creation of
2204
+ * the event.
2205
+ * </li>
2206
+ * </ul>
2207
+ *
2208
+ * @return {CustomEvent} the custom event
2209
+ *
2210
+ */
2211
+ createEvent: function(p_type, p_config) {
2212
+
2213
+ this.__yui_events = this.__yui_events || {};
2214
+ var opts = p_config || {},
2215
+ events = this.__yui_events, ce;
2216
+
2217
+ if (events[p_type]) {
2218
+ YAHOO.log("EventProvider createEvent skipped: '"+p_type+"' already exists");
2219
+ } else {
2220
+
2221
+ ce = new YAHOO.util.CustomEvent(p_type, opts.scope || this, opts.silent,
2222
+ YAHOO.util.CustomEvent.FLAT, opts.fireOnce);
2223
+
2224
+ events[p_type] = ce;
2225
+
2226
+ if (opts.onSubscribeCallback) {
2227
+ ce.subscribeEvent.subscribe(opts.onSubscribeCallback);
2228
+ }
2229
+
2230
+ this.__yui_subscribers = this.__yui_subscribers || {};
2231
+ var qs = this.__yui_subscribers[p_type];
2232
+
2233
+ if (qs) {
2234
+ for (var i=0; i<qs.length; ++i) {
2235
+ ce.subscribe(qs[i].fn, qs[i].obj, qs[i].overrideContext);
2236
+ }
2237
+ }
2238
+ }
2239
+
2240
+ return events[p_type];
2241
+ },
2242
+
2243
+
2244
+ /**
2245
+ * Fire a custom event by name. The callback functions will be executed
2246
+ * from the scope specified when the event was created, and with the
2247
+ * following parameters:
2248
+ * <ul>
2249
+ * <li>The first argument fire() was executed with</li>
2250
+ * <li>The custom object (if any) that was passed into the subscribe()
2251
+ * method</li>
2252
+ * </ul>
2253
+ * @method fireEvent
2254
+ * @param p_type {string} the type, or name of the event
2255
+ * @param arguments {Object*} an arbitrary set of parameters to pass to
2256
+ * the handler.
2257
+ * @return {boolean} the return value from CustomEvent.fire
2258
+ *
2259
+ */
2260
+ fireEvent: function(p_type) {
2261
+
2262
+ this.__yui_events = this.__yui_events || {};
2263
+ var ce = this.__yui_events[p_type];
2264
+
2265
+ if (!ce) {
2266
+ YAHOO.log(p_type + "event fired before it was created.");
2267
+ return null;
2268
+ }
2269
+
2270
+ var args = [];
2271
+ for (var i=1; i<arguments.length; ++i) {
2272
+ args.push(arguments[i]);
2273
+ }
2274
+ return ce.fire.apply(ce, args);
2275
+ },
2276
+
2277
+ /**
2278
+ * Returns true if the custom event of the provided type has been created
2279
+ * with createEvent.
2280
+ * @method hasEvent
2281
+ * @param type {string} the type, or name of the event
2282
+ */
2283
+ hasEvent: function(type) {
2284
+ if (this.__yui_events) {
2285
+ if (this.__yui_events[type]) {
2286
+ return true;
2287
+ }
2288
+ }
2289
+ return false;
2290
+ }
2291
+
2292
+ };
2293
+
2294
+ (function() {
2295
+
2296
+ var Event = YAHOO.util.Event, Lang = YAHOO.lang;
2297
+
2298
+ /**
2299
+ * KeyListener is a utility that provides an easy interface for listening for
2300
+ * keydown/keyup events fired against DOM elements.
2301
+ * @namespace YAHOO.util
2302
+ * @class KeyListener
2303
+ * @constructor
2304
+ * @param {HTMLElement} attachTo The element or element ID to which the key
2305
+ * event should be attached
2306
+ * @param {String} attachTo The element or element ID to which the key
2307
+ * event should be attached
2308
+ * @param {Object} keyData The object literal representing the key(s)
2309
+ * to detect. Possible attributes are
2310
+ * shift(boolean), alt(boolean), ctrl(boolean)
2311
+ * and keys(either an int or an array of ints
2312
+ * representing keycodes).
2313
+ * @param {Function} handler The CustomEvent handler to fire when the
2314
+ * key event is detected
2315
+ * @param {Object} handler An object literal representing the handler.
2316
+ * @param {String} event Optional. The event (keydown or keyup) to
2317
+ * listen for. Defaults automatically to keydown.
2318
+ *
2319
+ * @knownissue the "keypress" event is completely broken in Safari 2.x and below.
2320
+ * the workaround is use "keydown" for key listening. However, if
2321
+ * it is desired to prevent the default behavior of the keystroke,
2322
+ * that can only be done on the keypress event. This makes key
2323
+ * handling quite ugly.
2324
+ * @knownissue keydown is also broken in Safari 2.x and below for the ESC key.
2325
+ * There currently is no workaround other than choosing another
2326
+ * key to listen for.
2327
+ */
2328
+ YAHOO.util.KeyListener = function(attachTo, keyData, handler, event) {
2329
+ if (!attachTo) {
2330
+ YAHOO.log("No attachTo element specified", "error");
2331
+ } else if (!keyData) {
2332
+ YAHOO.log("No keyData specified", "error");
2333
+ } else if (!handler) {
2334
+ YAHOO.log("No handler specified", "error");
2335
+ }
2336
+
2337
+ if (!event) {
2338
+ event = YAHOO.util.KeyListener.KEYDOWN;
2339
+ }
2340
+
2341
+ /**
2342
+ * The CustomEvent fired internally when a key is pressed
2343
+ * @event keyEvent
2344
+ * @private
2345
+ * @param {Object} keyData The object literal representing the key(s) to
2346
+ * detect. Possible attributes are shift(boolean),
2347
+ * alt(boolean), ctrl(boolean) and keys(either an
2348
+ * int or an array of ints representing keycodes).
2349
+ */
2350
+ var keyEvent = new YAHOO.util.CustomEvent("keyPressed");
2351
+
2352
+ /**
2353
+ * The CustomEvent fired when the KeyListener is enabled via the enable()
2354
+ * function
2355
+ * @event enabledEvent
2356
+ * @param {Object} keyData The object literal representing the key(s) to
2357
+ * detect. Possible attributes are shift(boolean),
2358
+ * alt(boolean), ctrl(boolean) and keys(either an
2359
+ * int or an array of ints representing keycodes).
2360
+ */
2361
+ this.enabledEvent = new YAHOO.util.CustomEvent("enabled");
2362
+
2363
+ /**
2364
+ * The CustomEvent fired when the KeyListener is disabled via the
2365
+ * disable() function
2366
+ * @event disabledEvent
2367
+ * @param {Object} keyData The object literal representing the key(s) to
2368
+ * detect. Possible attributes are shift(boolean),
2369
+ * alt(boolean), ctrl(boolean) and keys(either an
2370
+ * int or an array of ints representing keycodes).
2371
+ */
2372
+ this.disabledEvent = new YAHOO.util.CustomEvent("disabled");
2373
+
2374
+ if (Lang.isString(attachTo)) {
2375
+ attachTo = document.getElementById(attachTo); // No Dom util
2376
+ }
2377
+
2378
+ if (Lang.isFunction(handler)) {
2379
+ keyEvent.subscribe(handler);
2380
+ } else {
2381
+ keyEvent.subscribe(handler.fn, handler.scope, handler.correctScope);
2382
+ }
2383
+
2384
+ /**
2385
+ * Handles the key event when a key is pressed.
2386
+ * @method handleKeyPress
2387
+ * @param {DOMEvent} e The keypress DOM event
2388
+ * @param {Object} obj The DOM event scope object
2389
+ * @private
2390
+ */
2391
+ function handleKeyPress(e, obj) {
2392
+ if (! keyData.shift) {
2393
+ keyData.shift = false;
2394
+ }
2395
+ if (! keyData.alt) {
2396
+ keyData.alt = false;
2397
+ }
2398
+ if (! keyData.ctrl) {
2399
+ keyData.ctrl = false;
2400
+ }
2401
+
2402
+ // check held down modifying keys first
2403
+ if (e.shiftKey == keyData.shift &&
2404
+ e.altKey == keyData.alt &&
2405
+ e.ctrlKey == keyData.ctrl) { // if we pass this, all modifiers match
2406
+
2407
+ var dataItem, keys = keyData.keys, key;
2408
+
2409
+ if (YAHOO.lang.isArray(keys)) {
2410
+ for (var i=0;i<keys.length;i++) {
2411
+ dataItem = keys[i];
2412
+ key = Event.getCharCode(e);
2413
+
2414
+ if (dataItem == key) {
2415
+ keyEvent.fire(key, e);
2416
+ break;
2417
+ }
2418
+ }
2419
+ } else {
2420
+ key = Event.getCharCode(e);
2421
+ if (keys == key ) {
2422
+ keyEvent.fire(key, e);
2423
+ }
2424
+ }
2425
+ }
2426
+ }
2427
+
2428
+ /**
2429
+ * Enables the KeyListener by attaching the DOM event listeners to the
2430
+ * target DOM element
2431
+ * @method enable
2432
+ */
2433
+ this.enable = function() {
2434
+ if (! this.enabled) {
2435
+ Event.on(attachTo, event, handleKeyPress);
2436
+ this.enabledEvent.fire(keyData);
2437
+ }
2438
+ /**
2439
+ * Boolean indicating the enabled/disabled state of the Tooltip
2440
+ * @property enabled
2441
+ * @type Boolean
2442
+ */
2443
+ this.enabled = true;
2444
+ };
2445
+
2446
+ /**
2447
+ * Disables the KeyListener by removing the DOM event listeners from the
2448
+ * target DOM element
2449
+ * @method disable
2450
+ */
2451
+ this.disable = function() {
2452
+ if (this.enabled) {
2453
+ Event.removeListener(attachTo, event, handleKeyPress);
2454
+ this.disabledEvent.fire(keyData);
2455
+ }
2456
+ this.enabled = false;
2457
+ };
2458
+
2459
+ /**
2460
+ * Returns a String representation of the object.
2461
+ * @method toString
2462
+ * @return {String} The string representation of the KeyListener
2463
+ */
2464
+ this.toString = function() {
2465
+ return "KeyListener [" + keyData.keys + "] " + attachTo.tagName +
2466
+ (attachTo.id ? "[" + attachTo.id + "]" : "");
2467
+ };
2468
+
2469
+ };
2470
+
2471
+ var KeyListener = YAHOO.util.KeyListener;
2472
+
2473
+ /**
2474
+ * Constant representing the DOM "keydown" event.
2475
+ * @property YAHOO.util.KeyListener.KEYDOWN
2476
+ * @static
2477
+ * @final
2478
+ * @type String
2479
+ */
2480
+ KeyListener.KEYDOWN = "keydown";
2481
+
2482
+ /**
2483
+ * Constant representing the DOM "keyup" event.
2484
+ * @property YAHOO.util.KeyListener.KEYUP
2485
+ * @static
2486
+ * @final
2487
+ * @type String
2488
+ */
2489
+ KeyListener.KEYUP = "keyup";
2490
+
2491
+ /**
2492
+ * keycode constants for a subset of the special keys
2493
+ * @property KEY
2494
+ * @static
2495
+ * @final
2496
+ */
2497
+ KeyListener.KEY = {
2498
+ ALT : 18,
2499
+ BACK_SPACE : 8,
2500
+ CAPS_LOCK : 20,
2501
+ CONTROL : 17,
2502
+ DELETE : 46,
2503
+ DOWN : 40,
2504
+ END : 35,
2505
+ ENTER : 13,
2506
+ ESCAPE : 27,
2507
+ HOME : 36,
2508
+ LEFT : 37,
2509
+ META : 224,
2510
+ NUM_LOCK : 144,
2511
+ PAGE_DOWN : 34,
2512
+ PAGE_UP : 33,
2513
+ PAUSE : 19,
2514
+ PRINTSCREEN : 44,
2515
+ RIGHT : 39,
2516
+ SCROLL_LOCK : 145,
2517
+ SHIFT : 16,
2518
+ SPACE : 32,
2519
+ TAB : 9,
2520
+ UP : 38
2521
+ };
2522
+
2523
+ })();
2524
+ YAHOO.register("event", YAHOO.util.Event, {version: "2.8.1", build: "19"});