shattered_ogrerb 0.5.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (905) hide show
  1. data/lib/shattered_ogrerb.rb +17 -0
  2. data/lib/shattered_ogrerb/base.rb +28 -0
  3. data/lib/shattered_ogrerb/camera.rb +6 -0
  4. data/lib/shattered_ogrerb/key_manager.rb +54 -0
  5. data/lib/shattered_ogrerb/light.rb +5 -0
  6. data/lib/shattered_ogrerb/mesh_instance.rb +92 -0
  7. data/lib/shattered_ogrerb/rmaterial.rb +86 -0
  8. data/lib/shattered_ogrerb/vector.rb +211 -0
  9. data/vendor/Ogre/OIS.dll +0 -0
  10. data/vendor/Ogre/OgreGUIRenderer.dll +0 -0
  11. data/vendor/Ogre/OgreMain.dll +0 -0
  12. data/vendor/Ogre/Plugin_BSPSceneManager.dll +0 -0
  13. data/vendor/Ogre/Plugin_CgProgramManager.dll +0 -0
  14. data/vendor/Ogre/Plugin_OctreeSceneManager.dll +0 -0
  15. data/vendor/Ogre/Plugin_ParticleFX.dll +0 -0
  16. data/vendor/Ogre/RenderSystem_Direct3D9.dll +0 -0
  17. data/vendor/Ogre/RenderSystem_GL.dll +0 -0
  18. data/vendor/Ogre/cg.dll +0 -0
  19. data/vendor/Ogre/plugins.cfg +9 -0
  20. data/vendor/ogrerb/MIT_LICENCE +19 -0
  21. data/vendor/ogrerb/README +79 -0
  22. data/vendor/ogrerb/Rakefile +220 -0
  23. data/vendor/ogrerb/build/navi/extconf.rb +53 -0
  24. data/vendor/ogrerb/build/ogre/extconf.rb +50 -0
  25. data/vendor/ogrerb/build/ois/extconf.rb +48 -0
  26. data/vendor/ogrerb/doc_src/ogre.rb +152 -0
  27. data/vendor/ogrerb/doc_src/ois.rb +67 -0
  28. data/vendor/ogrerb/lib/constants.rb +35 -0
  29. data/vendor/ogrerb/lib/ogre.dll +0 -0
  30. data/vendor/ogrerb/lib/ruby_ois.dll +0 -0
  31. data/vendor/ogrerb/navi/Navi.i +5 -0
  32. data/vendor/ogrerb/navi/NaviData.i +18 -0
  33. data/vendor/ogrerb/navi/NaviManager.i +5 -0
  34. data/vendor/ogrerb/navi/NaviProxies.i +7 -0
  35. data/vendor/ogrerb/navi/lib/Navi.lib +0 -0
  36. data/vendor/ogrerb/navi/lib/Navi_d.lib +0 -0
  37. data/vendor/ogrerb/navi/lib/llmozlib.lib +0 -0
  38. data/vendor/ogrerb/navi/lib/llmozlib_d.lib +0 -0
  39. data/vendor/ogrerb/navi/navi_rb.i +53 -0
  40. data/vendor/ogrerb/navi/std_multimap.i +581 -0
  41. data/vendor/ogrerb/ogre.rb +23 -0
  42. data/vendor/ogrerb/ogre/Application.i +59 -0
  43. data/vendor/ogrerb/ogre/ApplicationFrameListener.i +67 -0
  44. data/vendor/ogrerb/ogre/ExampleApplication.i +7 -0
  45. data/vendor/ogrerb/ogre/ExampleFrameListener.i +7 -0
  46. data/vendor/ogrerb/ogre/OgreAlignedAllocator.i +5 -0
  47. data/vendor/ogrerb/ogre/OgreAnimable.i +5 -0
  48. data/vendor/ogrerb/ogre/OgreAnimation.i +5 -0
  49. data/vendor/ogrerb/ogre/OgreAnimationState.i +9 -0
  50. data/vendor/ogrerb/ogre/OgreAnimationTrack.i +5 -0
  51. data/vendor/ogrerb/ogre/OgreAny.i +5 -0
  52. data/vendor/ogrerb/ogre/OgreArchive.i +5 -0
  53. data/vendor/ogrerb/ogre/OgreArchiveFactory.i +5 -0
  54. data/vendor/ogrerb/ogre/OgreArchiveManager.i +5 -0
  55. data/vendor/ogrerb/ogre/OgreAutoParamDataSource.i +5 -0
  56. data/vendor/ogrerb/ogre/OgreAxisAlignedBox.i +5 -0
  57. data/vendor/ogrerb/ogre/OgreBillboard.i +5 -0
  58. data/vendor/ogrerb/ogre/OgreBillboardChain.i +11 -0
  59. data/vendor/ogrerb/ogre/OgreBillboardParticleRenderer.i +5 -0
  60. data/vendor/ogrerb/ogre/OgreBillboardSet.i +5 -0
  61. data/vendor/ogrerb/ogre/OgreBitwise.i +5 -0
  62. data/vendor/ogrerb/ogre/OgreBlendMode.i +5 -0
  63. data/vendor/ogrerb/ogre/OgreBone.i +5 -0
  64. data/vendor/ogrerb/ogre/OgreBorderPanelOverlayElement.i +5 -0
  65. data/vendor/ogrerb/ogre/OgreCamera.i +5 -0
  66. data/vendor/ogrerb/ogre/OgreCodec.i +5 -0
  67. data/vendor/ogrerb/ogre/OgreColourValue.i +5 -0
  68. data/vendor/ogrerb/ogre/OgreCommon.i +33 -0
  69. data/vendor/ogrerb/ogre/OgreCompiler2Pass.i +5 -0
  70. data/vendor/ogrerb/ogre/OgreCompositionPass.i +5 -0
  71. data/vendor/ogrerb/ogre/OgreCompositionTargetPass.i +5 -0
  72. data/vendor/ogrerb/ogre/OgreCompositionTechnique.i +5 -0
  73. data/vendor/ogrerb/ogre/OgreCompositor.i +5 -0
  74. data/vendor/ogrerb/ogre/OgreCompositorChain.i +5 -0
  75. data/vendor/ogrerb/ogre/OgreCompositorInstance.i +5 -0
  76. data/vendor/ogrerb/ogre/OgreCompositorManager.i +5 -0
  77. data/vendor/ogrerb/ogre/OgreCompositorScriptCompiler.i +5 -0
  78. data/vendor/ogrerb/ogre/OgreCompositorSerializer.i +5 -0
  79. data/vendor/ogrerb/ogre/OgreConfig.i +5 -0
  80. data/vendor/ogrerb/ogre/OgreConfigDialog.i +5 -0
  81. data/vendor/ogrerb/ogre/OgreConfigFile.i +13 -0
  82. data/vendor/ogrerb/ogre/OgreConfigOptionMap.i +5 -0
  83. data/vendor/ogrerb/ogre/OgreController.i +5 -0
  84. data/vendor/ogrerb/ogre/OgreControllerManager.i +5 -0
  85. data/vendor/ogrerb/ogre/OgreConvexBody.i +5 -0
  86. data/vendor/ogrerb/ogre/OgreDDSCodec.i +5 -0
  87. data/vendor/ogrerb/ogre/OgreDataStream.i +9 -0
  88. data/vendor/ogrerb/ogre/OgreDefaultHardwareBufferManager.i +5 -0
  89. data/vendor/ogrerb/ogre/OgreDynLib.i +5 -0
  90. data/vendor/ogrerb/ogre/OgreDynLibManager.i +5 -0
  91. data/vendor/ogrerb/ogre/OgreEdgeListBuilder.i +5 -0
  92. data/vendor/ogrerb/ogre/OgreEntity.i +5 -0
  93. data/vendor/ogrerb/ogre/OgreErrorDialog.i +5 -0
  94. data/vendor/ogrerb/ogre/OgreException.i +5 -0
  95. data/vendor/ogrerb/ogre/OgreExternalTextureSource.i +5 -0
  96. data/vendor/ogrerb/ogre/OgreExternalTextureSourceManager.i +5 -0
  97. data/vendor/ogrerb/ogre/OgreFactoryObj.i +5 -0
  98. data/vendor/ogrerb/ogre/OgreFileSystem.i +5 -0
  99. data/vendor/ogrerb/ogre/OgreFont.i +5 -0
  100. data/vendor/ogrerb/ogre/OgreFontManager.i +5 -0
  101. data/vendor/ogrerb/ogre/OgreFrameListener.i +12 -0
  102. data/vendor/ogrerb/ogre/OgreFreeImageCodec.i +5 -0
  103. data/vendor/ogrerb/ogre/OgreFrustum.i +5 -0
  104. data/vendor/ogrerb/ogre/OgreGpuProgram.i +5 -0
  105. data/vendor/ogrerb/ogre/OgreGpuProgramManager.i +5 -0
  106. data/vendor/ogrerb/ogre/OgreGpuProgramUsage.i +5 -0
  107. data/vendor/ogrerb/ogre/OgreHardwareBuffer.i +5 -0
  108. data/vendor/ogrerb/ogre/OgreHardwareBufferManager.i +9 -0
  109. data/vendor/ogrerb/ogre/OgreHardwareIndexBuffer.i +9 -0
  110. data/vendor/ogrerb/ogre/OgreHardwareOcclusionQuery.i +5 -0
  111. data/vendor/ogrerb/ogre/OgreHardwarePixelBuffer.i +9 -0
  112. data/vendor/ogrerb/ogre/OgreHardwareVertexBuffer.i +10 -0
  113. data/vendor/ogrerb/ogre/OgreHighLevelGpuProgram.i +5 -0
  114. data/vendor/ogrerb/ogre/OgreHighLevelGpuProgramManager.i +5 -0
  115. data/vendor/ogrerb/ogre/OgreImage.i +5 -0
  116. data/vendor/ogrerb/ogre/OgreImageCodec.i +5 -0
  117. data/vendor/ogrerb/ogre/OgreInstancedGeometry.i +5 -0
  118. data/vendor/ogrerb/ogre/OgreIteratorWrappers.i +5 -0
  119. data/vendor/ogrerb/ogre/OgreKeyFrame.i +7 -0
  120. data/vendor/ogrerb/ogre/OgreLight.i +5 -0
  121. data/vendor/ogrerb/ogre/OgreLog.i +5 -0
  122. data/vendor/ogrerb/ogre/OgreLogManager.i +9 -0
  123. data/vendor/ogrerb/ogre/OgreManualObject.i +5 -0
  124. data/vendor/ogrerb/ogre/OgreMaterial.i +9 -0
  125. data/vendor/ogrerb/ogre/OgreMaterialManager.i +22 -0
  126. data/vendor/ogrerb/ogre/OgreMaterialScriptCompiler.i +5 -0
  127. data/vendor/ogrerb/ogre/OgreMaterialSerializer.i +5 -0
  128. data/vendor/ogrerb/ogre/OgreMath.i +48 -0
  129. data/vendor/ogrerb/ogre/OgreMatrix3.i +5 -0
  130. data/vendor/ogrerb/ogre/OgreMatrix4.i +5 -0
  131. data/vendor/ogrerb/ogre/OgreMemoryMacros.i +5 -0
  132. data/vendor/ogrerb/ogre/OgreMemoryManager.i +5 -0
  133. data/vendor/ogrerb/ogre/OgreMesh.i +11 -0
  134. data/vendor/ogrerb/ogre/OgreMeshFileFormat.i +5 -0
  135. data/vendor/ogrerb/ogre/OgreMeshManager.i +9 -0
  136. data/vendor/ogrerb/ogre/OgreMeshSerializer.i +5 -0
  137. data/vendor/ogrerb/ogre/OgreMeshSerializerImpl.i +5 -0
  138. data/vendor/ogrerb/ogre/OgreMovableObject.i +46 -0
  139. data/vendor/ogrerb/ogre/OgreMovablePlane.i +5 -0
  140. data/vendor/ogrerb/ogre/OgreNoMemoryMacros.i +5 -0
  141. data/vendor/ogrerb/ogre/OgreNode.i +11 -0
  142. data/vendor/ogrerb/ogre/OgreNumerics.i +5 -0
  143. data/vendor/ogrerb/ogre/OgreOverlay.i +5 -0
  144. data/vendor/ogrerb/ogre/OgreOverlayContainer.i +5 -0
  145. data/vendor/ogrerb/ogre/OgreOverlayElement.i +5 -0
  146. data/vendor/ogrerb/ogre/OgreOverlayElementCommands.i +5 -0
  147. data/vendor/ogrerb/ogre/OgreOverlayElementFactory.i +5 -0
  148. data/vendor/ogrerb/ogre/OgreOverlayManager.i +9 -0
  149. data/vendor/ogrerb/ogre/OgrePanelOverlayElement.i +5 -0
  150. data/vendor/ogrerb/ogre/OgreParticle.i +5 -0
  151. data/vendor/ogrerb/ogre/OgreParticleAffector.i +5 -0
  152. data/vendor/ogrerb/ogre/OgreParticleAffectorFactory.i +5 -0
  153. data/vendor/ogrerb/ogre/OgreParticleEmitter.i +5 -0
  154. data/vendor/ogrerb/ogre/OgreParticleEmitterCommands.i +5 -0
  155. data/vendor/ogrerb/ogre/OgreParticleEmitterFactory.i +5 -0
  156. data/vendor/ogrerb/ogre/OgreParticleIterator.i +5 -0
  157. data/vendor/ogrerb/ogre/OgreParticleSystem.i +9 -0
  158. data/vendor/ogrerb/ogre/OgreParticleSystemManager.i +9 -0
  159. data/vendor/ogrerb/ogre/OgreParticleSystemRenderer.i +9 -0
  160. data/vendor/ogrerb/ogre/OgrePass.i +10 -0
  161. data/vendor/ogrerb/ogre/OgrePatchMesh.i +11 -0
  162. data/vendor/ogrerb/ogre/OgrePatchSurface.i +5 -0
  163. data/vendor/ogrerb/ogre/OgrePixelFormat.i +5 -0
  164. data/vendor/ogrerb/ogre/OgrePlane.i +5 -0
  165. data/vendor/ogrerb/ogre/OgrePlaneBoundedVolume.i +5 -0
  166. data/vendor/ogrerb/ogre/OgrePlatform.i +5 -0
  167. data/vendor/ogrerb/ogre/OgrePlugin.i +5 -0
  168. data/vendor/ogrerb/ogre/OgrePolygon.i +5 -0
  169. data/vendor/ogrerb/ogre/OgrePose.i +5 -0
  170. data/vendor/ogrerb/ogre/OgrePredefinedControllers.i +5 -0
  171. data/vendor/ogrerb/ogre/OgrePrefabFactory.i +5 -0
  172. data/vendor/ogrerb/ogre/OgrePrerequisites.i +5 -0
  173. data/vendor/ogrerb/ogre/OgreProfiler.i +5 -0
  174. data/vendor/ogrerb/ogre/OgreProgressiveMesh.i +5 -0
  175. data/vendor/ogrerb/ogre/OgreProxies.i +10 -0
  176. data/vendor/ogrerb/ogre/OgreQuaternion.i +5 -0
  177. data/vendor/ogrerb/ogre/OgreRadixSort.i +5 -0
  178. data/vendor/ogrerb/ogre/OgreRay.i +5 -0
  179. data/vendor/ogrerb/ogre/OgreRectangle.i +5 -0
  180. data/vendor/ogrerb/ogre/OgreRectangle2D.i +5 -0
  181. data/vendor/ogrerb/ogre/OgreRenderOperation.i +5 -0
  182. data/vendor/ogrerb/ogre/OgreRenderQueue.i +10 -0
  183. data/vendor/ogrerb/ogre/OgreRenderQueueInvocation.i +5 -0
  184. data/vendor/ogrerb/ogre/OgreRenderQueueListener.i +5 -0
  185. data/vendor/ogrerb/ogre/OgreRenderQueueSortingGrouping.i +5 -0
  186. data/vendor/ogrerb/ogre/OgreRenderSystem.i +12 -0
  187. data/vendor/ogrerb/ogre/OgreRenderSystemCapabilities.i +7 -0
  188. data/vendor/ogrerb/ogre/OgreRenderTarget.i +27 -0
  189. data/vendor/ogrerb/ogre/OgreRenderTargetListener.i +7 -0
  190. data/vendor/ogrerb/ogre/OgreRenderTexture.i +5 -0
  191. data/vendor/ogrerb/ogre/OgreRenderWindow.i +9 -0
  192. data/vendor/ogrerb/ogre/OgreRenderable.i +5 -0
  193. data/vendor/ogrerb/ogre/OgreResource.i +68 -0
  194. data/vendor/ogrerb/ogre/OgreResourceBackgroundQueue.i +5 -0
  195. data/vendor/ogrerb/ogre/OgreResourceGroupManager.i +17 -0
  196. data/vendor/ogrerb/ogre/OgreResourceManager.i +5 -0
  197. data/vendor/ogrerb/ogre/OgreRibbonTrail.i +5 -0
  198. data/vendor/ogrerb/ogre/OgreRoot.i +9 -0
  199. data/vendor/ogrerb/ogre/OgreRotationalSpline.i +5 -0
  200. data/vendor/ogrerb/ogre/OgreSceneManager.i +17 -0
  201. data/vendor/ogrerb/ogre/OgreSceneManagerEnumerator.i +8 -0
  202. data/vendor/ogrerb/ogre/OgreSceneNode.i +9 -0
  203. data/vendor/ogrerb/ogre/OgreSceneQuery.i +5 -0
  204. data/vendor/ogrerb/ogre/OgreScriptLoader.i +5 -0
  205. data/vendor/ogrerb/ogre/OgreSearchOps.i +5 -0
  206. data/vendor/ogrerb/ogre/OgreSerializer.i +5 -0
  207. data/vendor/ogrerb/ogre/OgreShadowCameraSetup.i +5 -0
  208. data/vendor/ogrerb/ogre/OgreShadowCameraSetupFocused.i +5 -0
  209. data/vendor/ogrerb/ogre/OgreShadowCameraSetupLiSPSM.i +5 -0
  210. data/vendor/ogrerb/ogre/OgreShadowCameraSetupPlaneOptimal.i +5 -0
  211. data/vendor/ogrerb/ogre/OgreShadowCaster.i +5 -0
  212. data/vendor/ogrerb/ogre/OgreShadowTextureManager.i +7 -0
  213. data/vendor/ogrerb/ogre/OgreShadowVolumeExtrudeProgram.i +5 -0
  214. data/vendor/ogrerb/ogre/OgreSharedPtr.i +5 -0
  215. data/vendor/ogrerb/ogre/OgreSimpleRenderable.i +5 -0
  216. data/vendor/ogrerb/ogre/OgreSimpleSpline.i +5 -0
  217. data/vendor/ogrerb/ogre/OgreSingleton.i +9 -0
  218. data/vendor/ogrerb/ogre/OgreSkeleton.i +5 -0
  219. data/vendor/ogrerb/ogre/OgreSkeletonFileFormat.i +5 -0
  220. data/vendor/ogrerb/ogre/OgreSkeletonInstance.i +5 -0
  221. data/vendor/ogrerb/ogre/OgreSkeletonManager.i +5 -0
  222. data/vendor/ogrerb/ogre/OgreSkeletonSerializer.i +5 -0
  223. data/vendor/ogrerb/ogre/OgreSphere.i +5 -0
  224. data/vendor/ogrerb/ogre/OgreSpotShadowFadePng.i +5 -0
  225. data/vendor/ogrerb/ogre/OgreStableHeaders.i +5 -0
  226. data/vendor/ogrerb/ogre/OgreStaticFaceGroup.i +5 -0
  227. data/vendor/ogrerb/ogre/OgreStaticGeometry.i +5 -0
  228. data/vendor/ogrerb/ogre/OgreStdHeaders.i +5 -0
  229. data/vendor/ogrerb/ogre/OgreString.i +5 -0
  230. data/vendor/ogrerb/ogre/OgreStringConverter.i +5 -0
  231. data/vendor/ogrerb/ogre/OgreStringInterface.i +5 -0
  232. data/vendor/ogrerb/ogre/OgreStringVector.i +5 -0
  233. data/vendor/ogrerb/ogre/OgreSubEntity.i +5 -0
  234. data/vendor/ogrerb/ogre/OgreSubMesh.i +5 -0
  235. data/vendor/ogrerb/ogre/OgreTagPoint.i +5 -0
  236. data/vendor/ogrerb/ogre/OgreTechnique.i +5 -0
  237. data/vendor/ogrerb/ogre/OgreTextAreaOverlayElement.i +5 -0
  238. data/vendor/ogrerb/ogre/OgreTexture.i +9 -0
  239. data/vendor/ogrerb/ogre/OgreTextureManager.i +12 -0
  240. data/vendor/ogrerb/ogre/OgreTextureUnitState.i +12 -0
  241. data/vendor/ogrerb/ogre/OgreTimer.i +6 -0
  242. data/vendor/ogrerb/ogre/OgreUTFString.i +5 -0
  243. data/vendor/ogrerb/ogre/OgreUnifiedHighLevelGpuProgram.i +5 -0
  244. data/vendor/ogrerb/ogre/OgreUserDefinedObject.i +5 -0
  245. data/vendor/ogrerb/ogre/OgreVector2.i +5 -0
  246. data/vendor/ogrerb/ogre/OgreVector3.i +30 -0
  247. data/vendor/ogrerb/ogre/OgreVector4.i +5 -0
  248. data/vendor/ogrerb/ogre/OgreVertexBoneAssignment.i +5 -0
  249. data/vendor/ogrerb/ogre/OgreVertexIndexData.i +5 -0
  250. data/vendor/ogrerb/ogre/OgreViewport.i +5 -0
  251. data/vendor/ogrerb/ogre/OgreWindowEventUtilities.i +7 -0
  252. data/vendor/ogrerb/ogre/OgreWireBoundingBox.i +5 -0
  253. data/vendor/ogrerb/ogre/OgreZip.i +5 -0
  254. data/vendor/ogrerb/ogre/ogre_rb.i +343 -0
  255. data/vendor/ogrerb/ogre/std_multimap.i +581 -0
  256. data/vendor/ogrerb/ois/OISProxies.i +9 -0
  257. data/vendor/ogrerb/ois/OISRenames.i +11 -0
  258. data/vendor/ogrerb/ois/ois.i +135 -0
  259. data/vendor/ogrerb/ois/std_multimap.i +581 -0
  260. data/vendor/ogrerb/platform.rb +23 -0
  261. data/vendor/ogrerb/samples/application.rb +146 -0
  262. data/vendor/ogrerb/samples/application_frame_listener.rb +302 -0
  263. data/vendor/ogrerb/samples/application_loading_bar.rb +115 -0
  264. data/vendor/ogrerb/samples/bsp.rb +74 -0
  265. data/vendor/ogrerb/samples/cg.dll +0 -0
  266. data/vendor/ogrerb/samples/js3250.dll +0 -0
  267. data/vendor/ogrerb/samples/lighting.rb +136 -0
  268. data/vendor/ogrerb/samples/media/materials/scripts/CloudySky.material +17 -0
  269. data/vendor/ogrerb/samples/media/materials/scripts/Flare.material +17 -0
  270. data/vendor/ogrerb/samples/media/materials/scripts/Knot.material +14 -0
  271. data/vendor/ogrerb/samples/media/materials/scripts/MorningSkyBox.material +17 -0
  272. data/vendor/ogrerb/samples/media/materials/scripts/Ogre.material +119 -0
  273. data/vendor/ogrerb/samples/media/materials/scripts/Razor.material +14 -0
  274. data/vendor/ogrerb/samples/media/materials/scripts/Ribbon.material +19 -0
  275. data/vendor/ogrerb/samples/media/materials/scripts/RustySteel.material +14 -0
  276. data/vendor/ogrerb/samples/media/materials/scripts/SpaceSkyBox.material +17 -0
  277. data/vendor/ogrerb/samples/media/materials/scripts/SpaceSkyPlane.material +17 -0
  278. data/vendor/ogrerb/samples/media/materials/scripts/TextureEffects.material +15 -0
  279. data/vendor/ogrerb/samples/media/materials/scripts/dragon.material +42 -0
  280. data/vendor/ogrerb/samples/media/materials/scripts/smoke.material +18 -0
  281. data/vendor/ogrerb/samples/media/materials/textures/GreenSkin.jpg +0 -0
  282. data/vendor/ogrerb/samples/media/materials/textures/MtlPlat2.jpg +0 -0
  283. data/vendor/ogrerb/samples/media/materials/textures/RustedMetal.jpg +0 -0
  284. data/vendor/ogrerb/samples/media/materials/textures/RustySteel.jpg +0 -0
  285. data/vendor/ogrerb/samples/media/materials/textures/Water02.jpg +0 -0
  286. data/vendor/ogrerb/samples/media/materials/textures/WeirdEye.png +0 -0
  287. data/vendor/ogrerb/samples/media/materials/textures/clouds.jpg +0 -0
  288. data/vendor/ogrerb/samples/media/materials/textures/cursor.png +0 -0
  289. data/vendor/ogrerb/samples/media/materials/textures/dirt01.jpg +0 -0
  290. data/vendor/ogrerb/samples/media/materials/textures/flare.png +0 -0
  291. data/vendor/ogrerb/samples/media/materials/textures/ogreborder.png +0 -0
  292. data/vendor/ogrerb/samples/media/materials/textures/ogreborderUp.png +0 -0
  293. data/vendor/ogrerb/samples/media/materials/textures/ribbonband.png +0 -0
  294. data/vendor/ogrerb/samples/media/materials/textures/smoke.png +0 -0
  295. data/vendor/ogrerb/samples/media/materials/textures/smokecolors.png +0 -0
  296. data/vendor/ogrerb/samples/media/materials/textures/spacesky.jpg +0 -0
  297. data/vendor/ogrerb/samples/media/materials/textures/spheremap.png +0 -0
  298. data/vendor/ogrerb/samples/media/materials/textures/texmap2.jpg +0 -0
  299. data/vendor/ogrerb/samples/media/models/knot.mesh +0 -0
  300. data/vendor/ogrerb/samples/media/models/ogrehead.mesh +0 -0
  301. data/vendor/ogrerb/samples/media/models/razor.mesh +0 -0
  302. data/vendor/ogrerb/samples/media/packs/OgreCore.zip +0 -0
  303. data/vendor/ogrerb/samples/media/packs/chiropteraDM.pk3 +0 -0
  304. data/vendor/ogrerb/samples/media/packs/chiropteraDM.txt +99 -0
  305. data/vendor/ogrerb/samples/media/packs/cubemap.zip +0 -0
  306. data/vendor/ogrerb/samples/media/packs/cubemapsJS.zip +0 -0
  307. data/vendor/ogrerb/samples/media/packs/dragon.zip +0 -0
  308. data/vendor/ogrerb/samples/media/packs/skybox.zip +0 -0
  309. data/vendor/ogrerb/samples/media/particles/smoke.particle +43 -0
  310. data/vendor/ogrerb/samples/navi/Media/NaviDemo.material +60 -0
  311. data/vendor/ogrerb/samples/navi/Media/OgreCore.zip +0 -0
  312. data/vendor/ogrerb/samples/navi/Media/cerulean.jpg +0 -0
  313. data/vendor/ogrerb/samples/navi/Media/clouds.jpg +0 -0
  314. data/vendor/ogrerb/samples/navi/Media/controlsNaviMask.png +0 -0
  315. data/vendor/ogrerb/samples/navi/Media/grass.jpg +0 -0
  316. data/vendor/ogrerb/samples/navi/Media/knot.mesh +0 -0
  317. data/vendor/ogrerb/samples/navi/Media/testNaviMask.png +0 -0
  318. data/vendor/ogrerb/samples/navi/NaviLocal/Navi.js +136 -0
  319. data/vendor/ogrerb/samples/navi/NaviLocal/buttonBg.jpg +0 -0
  320. data/vendor/ogrerb/samples/navi/NaviLocal/controls.html +303 -0
  321. data/vendor/ogrerb/samples/navi/NaviLocal/knobBg.jpg +0 -0
  322. data/vendor/ogrerb/samples/navi/NaviLocal/moo.dropdownmenu.js +87 -0
  323. data/vendor/ogrerb/samples/navi/NaviLocal/mootools.v1.1.js +6964 -0
  324. data/vendor/ogrerb/samples/navi/NaviLocal/naviLogo.html +32 -0
  325. data/vendor/ogrerb/samples/navi/NaviLocal/naviLogo.png +0 -0
  326. data/vendor/ogrerb/samples/navi/NaviLocal/pageBg.jpg +0 -0
  327. data/vendor/ogrerb/samples/navi/NaviLocal/sliderBg.jpg +0 -0
  328. data/vendor/ogrerb/samples/navi/NaviLocal/test.html +5 -0
  329. data/vendor/ogrerb/samples/navi/NaviLocal/welcome.html +36 -0
  330. data/vendor/ogrerb/samples/navi/NaviLocal/welcome.png +0 -0
  331. data/vendor/ogrerb/samples/navi/chrome/chromelist.txt +597 -0
  332. data/vendor/ogrerb/samples/navi/chrome/classic.jar +0 -0
  333. data/vendor/ogrerb/samples/navi/chrome/classic.manifest +4 -0
  334. data/vendor/ogrerb/samples/navi/chrome/comm.jar +0 -0
  335. data/vendor/ogrerb/samples/navi/chrome/comm.manifest +2 -0
  336. data/vendor/ogrerb/samples/navi/chrome/en-US.jar +0 -0
  337. data/vendor/ogrerb/samples/navi/chrome/en-US.manifest +9 -0
  338. data/vendor/ogrerb/samples/navi/chrome/toolkit.jar +0 -0
  339. data/vendor/ogrerb/samples/navi/chrome/toolkit.manifest +6 -0
  340. data/vendor/ogrerb/samples/navi/components/FeedProcessor.js +1825 -0
  341. data/vendor/ogrerb/samples/navi/components/alerts.xpt +0 -0
  342. data/vendor/ogrerb/samples/navi/components/appshell.xpt +0 -0
  343. data/vendor/ogrerb/samples/navi/components/appstartup.xpt +0 -0
  344. data/vendor/ogrerb/samples/navi/components/auth.dll +0 -0
  345. data/vendor/ogrerb/samples/navi/components/autocomplete.xpt +0 -0
  346. data/vendor/ogrerb/samples/navi/components/autoconfig.dll +0 -0
  347. data/vendor/ogrerb/samples/navi/components/autoconfig.xpt +0 -0
  348. data/vendor/ogrerb/samples/navi/components/caps.xpt +0 -0
  349. data/vendor/ogrerb/samples/navi/components/chardet.xpt +0 -0
  350. data/vendor/ogrerb/samples/navi/components/chrome.xpt +0 -0
  351. data/vendor/ogrerb/samples/navi/components/commandhandler.xpt +0 -0
  352. data/vendor/ogrerb/samples/navi/components/commandlines.xpt +0 -0
  353. data/vendor/ogrerb/samples/navi/components/composer.xpt +0 -0
  354. data/vendor/ogrerb/samples/navi/components/compreg.dat +1474 -0
  355. data/vendor/ogrerb/samples/navi/components/content_base.xpt +0 -0
  356. data/vendor/ogrerb/samples/navi/components/content_html.xpt +0 -0
  357. data/vendor/ogrerb/samples/navi/components/content_htmldoc.xpt +0 -0
  358. data/vendor/ogrerb/samples/navi/components/content_xmldoc.xpt +0 -0
  359. data/vendor/ogrerb/samples/navi/components/content_xslt.xpt +0 -0
  360. data/vendor/ogrerb/samples/navi/components/content_xtf.xpt +0 -0
  361. data/vendor/ogrerb/samples/navi/components/directory.xpt +0 -0
  362. data/vendor/ogrerb/samples/navi/components/docshell_base.xpt +0 -0
  363. data/vendor/ogrerb/samples/navi/components/dom.xpt +0 -0
  364. data/vendor/ogrerb/samples/navi/components/dom_base.xpt +0 -0
  365. data/vendor/ogrerb/samples/navi/components/dom_canvas.xpt +0 -0
  366. data/vendor/ogrerb/samples/navi/components/dom_core.xpt +0 -0
  367. data/vendor/ogrerb/samples/navi/components/dom_css.xpt +0 -0
  368. data/vendor/ogrerb/samples/navi/components/dom_events.xpt +0 -0
  369. data/vendor/ogrerb/samples/navi/components/dom_html.xpt +0 -0
  370. data/vendor/ogrerb/samples/navi/components/dom_loadsave.xpt +0 -0
  371. data/vendor/ogrerb/samples/navi/components/dom_range.xpt +0 -0
  372. data/vendor/ogrerb/samples/navi/components/dom_sidebar.xpt +0 -0
  373. data/vendor/ogrerb/samples/navi/components/dom_storage.xpt +0 -0
  374. data/vendor/ogrerb/samples/navi/components/dom_stylesheets.xpt +0 -0
  375. data/vendor/ogrerb/samples/navi/components/dom_svg.xpt +0 -0
  376. data/vendor/ogrerb/samples/navi/components/dom_traversal.xpt +0 -0
  377. data/vendor/ogrerb/samples/navi/components/dom_views.xpt +0 -0
  378. data/vendor/ogrerb/samples/navi/components/dom_xbl.xpt +0 -0
  379. data/vendor/ogrerb/samples/navi/components/dom_xpath.xpt +0 -0
  380. data/vendor/ogrerb/samples/navi/components/dom_xul.xpt +0 -0
  381. data/vendor/ogrerb/samples/navi/components/downloads.xpt +0 -0
  382. data/vendor/ogrerb/samples/navi/components/editor.xpt +0 -0
  383. data/vendor/ogrerb/samples/navi/components/embed_base.xpt +0 -0
  384. data/vendor/ogrerb/samples/navi/components/extensions.xpt +0 -0
  385. data/vendor/ogrerb/samples/navi/components/exthandler.xpt +0 -0
  386. data/vendor/ogrerb/samples/navi/components/fastfind.xpt +0 -0
  387. data/vendor/ogrerb/samples/navi/components/feeds.xpt +0 -0
  388. data/vendor/ogrerb/samples/navi/components/find.xpt +0 -0
  389. data/vendor/ogrerb/samples/navi/components/gfx.xpt +0 -0
  390. data/vendor/ogrerb/samples/navi/components/gksvgrenderer.xpt +0 -0
  391. data/vendor/ogrerb/samples/navi/components/history.xpt +0 -0
  392. data/vendor/ogrerb/samples/navi/components/htmlparser.xpt +0 -0
  393. data/vendor/ogrerb/samples/navi/components/imglib2.xpt +0 -0
  394. data/vendor/ogrerb/samples/navi/components/inspector.xpt +0 -0
  395. data/vendor/ogrerb/samples/navi/components/intl.xpt +0 -0
  396. data/vendor/ogrerb/samples/navi/components/intlcmpt.xpt +0 -0
  397. data/vendor/ogrerb/samples/navi/components/jar.xpt +0 -0
  398. data/vendor/ogrerb/samples/navi/components/jsconsole-clhandler.js +170 -0
  399. data/vendor/ogrerb/samples/navi/components/jsconsole.xpt +0 -0
  400. data/vendor/ogrerb/samples/navi/components/jsdservice.xpt +0 -0
  401. data/vendor/ogrerb/samples/navi/components/layout_base.xpt +0 -0
  402. data/vendor/ogrerb/samples/navi/components/layout_printing.xpt +0 -0
  403. data/vendor/ogrerb/samples/navi/components/layout_xul.xpt +0 -0
  404. data/vendor/ogrerb/samples/navi/components/layout_xul_tree.xpt +0 -0
  405. data/vendor/ogrerb/samples/navi/components/locale.xpt +0 -0
  406. data/vendor/ogrerb/samples/navi/components/lwbrk.xpt +0 -0
  407. data/vendor/ogrerb/samples/navi/components/mimetype.xpt +0 -0
  408. data/vendor/ogrerb/samples/navi/components/mozbrwsr.xpt +0 -0
  409. data/vendor/ogrerb/samples/navi/components/mozfind.xpt +0 -0
  410. data/vendor/ogrerb/samples/navi/components/necko.xpt +0 -0
  411. data/vendor/ogrerb/samples/navi/components/necko_about.xpt +0 -0
  412. data/vendor/ogrerb/samples/navi/components/necko_cache.xpt +0 -0
  413. data/vendor/ogrerb/samples/navi/components/necko_cookie.xpt +0 -0
  414. data/vendor/ogrerb/samples/navi/components/necko_data.xpt +0 -0
  415. data/vendor/ogrerb/samples/navi/components/necko_dns.xpt +0 -0
  416. data/vendor/ogrerb/samples/navi/components/necko_file.xpt +0 -0
  417. data/vendor/ogrerb/samples/navi/components/necko_ftp.xpt +0 -0
  418. data/vendor/ogrerb/samples/navi/components/necko_http.xpt +0 -0
  419. data/vendor/ogrerb/samples/navi/components/necko_res.xpt +0 -0
  420. data/vendor/ogrerb/samples/navi/components/necko_socket.xpt +0 -0
  421. data/vendor/ogrerb/samples/navi/components/necko_strconv.xpt +0 -0
  422. data/vendor/ogrerb/samples/navi/components/necko_viewsource.xpt +0 -0
  423. data/vendor/ogrerb/samples/navi/components/nsCloseAllWindows.js +143 -0
  424. data/vendor/ogrerb/samples/navi/components/nsDefaultCLH.js +231 -0
  425. data/vendor/ogrerb/samples/navi/components/nsDictionary.js +148 -0
  426. data/vendor/ogrerb/samples/navi/components/nsExtensionManager.js +8497 -0
  427. data/vendor/ogrerb/samples/navi/components/nsHelperAppDlg.js +990 -0
  428. data/vendor/ogrerb/samples/navi/components/nsInterfaceInfoToIDL.js +590 -0
  429. data/vendor/ogrerb/samples/navi/components/nsKillAll.js +200 -0
  430. data/vendor/ogrerb/samples/navi/components/nsPostUpdateWin.js +711 -0
  431. data/vendor/ogrerb/samples/navi/components/nsProgressDialog.js +949 -0
  432. data/vendor/ogrerb/samples/navi/components/nsProxyAutoConfig.js +396 -0
  433. data/vendor/ogrerb/samples/navi/components/nsResetPref.js +175 -0
  434. data/vendor/ogrerb/samples/navi/components/nsURLFormatter.js +179 -0
  435. data/vendor/ogrerb/samples/navi/components/nsUpdateService.js +3074 -0
  436. data/vendor/ogrerb/samples/navi/components/nsXULAppInstall.js +301 -0
  437. data/vendor/ogrerb/samples/navi/components/nsXmlRpcClient.js +1038 -0
  438. data/vendor/ogrerb/samples/navi/components/oji.xpt +0 -0
  439. data/vendor/ogrerb/samples/navi/components/passwordmgr.xpt +0 -0
  440. data/vendor/ogrerb/samples/navi/components/pipboot.xpt +0 -0
  441. data/vendor/ogrerb/samples/navi/components/pipnss.xpt +0 -0
  442. data/vendor/ogrerb/samples/navi/components/plugin.xpt +0 -0
  443. data/vendor/ogrerb/samples/navi/components/pref.xpt +0 -0
  444. data/vendor/ogrerb/samples/navi/components/prefetch.xpt +0 -0
  445. data/vendor/ogrerb/samples/navi/components/profile.xpt +0 -0
  446. data/vendor/ogrerb/samples/navi/components/progressDlg.xpt +0 -0
  447. data/vendor/ogrerb/samples/navi/components/proxyObject.xpt +0 -0
  448. data/vendor/ogrerb/samples/navi/components/rdf.xpt +0 -0
  449. data/vendor/ogrerb/samples/navi/components/satchel.xpt +0 -0
  450. data/vendor/ogrerb/samples/navi/components/saxparser.xpt +0 -0
  451. data/vendor/ogrerb/samples/navi/components/shistory.xpt +0 -0
  452. data/vendor/ogrerb/samples/navi/components/storage.xpt +0 -0
  453. data/vendor/ogrerb/samples/navi/components/toolkitprofile.xpt +0 -0
  454. data/vendor/ogrerb/samples/navi/components/transformiix.dll +0 -0
  455. data/vendor/ogrerb/samples/navi/components/txmgr.xpt +0 -0
  456. data/vendor/ogrerb/samples/navi/components/txtsvc.xpt +0 -0
  457. data/vendor/ogrerb/samples/navi/components/uconv.xpt +0 -0
  458. data/vendor/ogrerb/samples/navi/components/unicharutil.xpt +0 -0
  459. data/vendor/ogrerb/samples/navi/components/universalchardet.dll +0 -0
  460. data/vendor/ogrerb/samples/navi/components/update.xpt +0 -0
  461. data/vendor/ogrerb/samples/navi/components/uriloader.xpt +0 -0
  462. data/vendor/ogrerb/samples/navi/components/urlformatter.xpt +0 -0
  463. data/vendor/ogrerb/samples/navi/components/webBrowser_core.xpt +0 -0
  464. data/vendor/ogrerb/samples/navi/components/webbrowserpersist.xpt +0 -0
  465. data/vendor/ogrerb/samples/navi/components/webshell_idls.xpt +0 -0
  466. data/vendor/ogrerb/samples/navi/components/websrvcs.dll +0 -0
  467. data/vendor/ogrerb/samples/navi/components/websrvcs.xpt +0 -0
  468. data/vendor/ogrerb/samples/navi/components/widget.xpt +0 -0
  469. data/vendor/ogrerb/samples/navi/components/windowds.xpt +0 -0
  470. data/vendor/ogrerb/samples/navi/components/windowwatcher.xpt +0 -0
  471. data/vendor/ogrerb/samples/navi/components/xml-rpc.xpt +0 -0
  472. data/vendor/ogrerb/samples/navi/components/xmlextras.dll +0 -0
  473. data/vendor/ogrerb/samples/navi/components/xpcom_base.xpt +0 -0
  474. data/vendor/ogrerb/samples/navi/components/xpcom_components.xpt +0 -0
  475. data/vendor/ogrerb/samples/navi/components/xpcom_ds.xpt +0 -0
  476. data/vendor/ogrerb/samples/navi/components/xpcom_io.xpt +0 -0
  477. data/vendor/ogrerb/samples/navi/components/xpcom_obsolete.xpt +0 -0
  478. data/vendor/ogrerb/samples/navi/components/xpcom_thread.xpt +0 -0
  479. data/vendor/ogrerb/samples/navi/components/xpcom_xpti.xpt +0 -0
  480. data/vendor/ogrerb/samples/navi/components/xpconnect.xpt +0 -0
  481. data/vendor/ogrerb/samples/navi/components/xpinstall.xpt +0 -0
  482. data/vendor/ogrerb/samples/navi/components/xpti.dat +1424 -0
  483. data/vendor/ogrerb/samples/navi/components/xulapp.xpt +0 -0
  484. data/vendor/ogrerb/samples/navi/components/xulapp_setup.xpt +0 -0
  485. data/vendor/ogrerb/samples/navi/components/xuldoc.xpt +0 -0
  486. data/vendor/ogrerb/samples/navi/components/xulrunner.xpt +0 -0
  487. data/vendor/ogrerb/samples/navi/components/xultmpl.xpt +0 -0
  488. data/vendor/ogrerb/samples/navi/components/xulutil.dll +0 -0
  489. data/vendor/ogrerb/samples/navi/controlsNaviMask.png +0 -0
  490. data/vendor/ogrerb/samples/navi/greprefs/all.js +1344 -0
  491. data/vendor/ogrerb/samples/navi/greprefs/security-prefs.js +69 -0
  492. data/vendor/ogrerb/samples/navi/greprefs/xpinstall.js +2 -0
  493. data/vendor/ogrerb/samples/navi/navi_demo.rb +207 -0
  494. data/vendor/ogrerb/samples/navi/plugins.cfg +10 -0
  495. data/vendor/ogrerb/samples/navi/plugins/NPSWF32.dll +0 -0
  496. data/vendor/ogrerb/samples/navi/plugins/flashplayer.xpt +0 -0
  497. data/vendor/ogrerb/samples/navi/plugins/npnul32.dll +0 -0
  498. data/vendor/ogrerb/samples/navi/res/EditorOverride.css +359 -0
  499. data/vendor/ogrerb/samples/navi/res/Thumbs.db +0 -0
  500. data/vendor/ogrerb/samples/navi/res/arrow.gif +0 -0
  501. data/vendor/ogrerb/samples/navi/res/arrowd.gif +0 -0
  502. data/vendor/ogrerb/samples/navi/res/bloatcycle.html +40 -0
  503. data/vendor/ogrerb/samples/navi/res/broken-image.gif +0 -0
  504. data/vendor/ogrerb/samples/navi/res/charsetData.properties +199 -0
  505. data/vendor/ogrerb/samples/navi/res/charsetalias.properties +517 -0
  506. data/vendor/ogrerb/samples/navi/res/cmessage.txt +1 -0
  507. data/vendor/ogrerb/samples/navi/res/dtd/xhtml11.dtd +300 -0
  508. data/vendor/ogrerb/samples/navi/res/entityTables/html40Latin1.properties +146 -0
  509. data/vendor/ogrerb/samples/navi/res/entityTables/html40Special.properties +69 -0
  510. data/vendor/ogrerb/samples/navi/res/entityTables/html40Symbols.properties +164 -0
  511. data/vendor/ogrerb/samples/navi/res/entityTables/htmlEntityVersions.properties +50 -0
  512. data/vendor/ogrerb/samples/navi/res/entityTables/transliterate.properties +2367 -0
  513. data/vendor/ogrerb/samples/navi/res/fonts/fontEncoding.properties +127 -0
  514. data/vendor/ogrerb/samples/navi/res/fonts/fontNameMap.properties +134 -0
  515. data/vendor/ogrerb/samples/navi/res/forms.css +531 -0
  516. data/vendor/ogrerb/samples/navi/res/grabber.gif +0 -0
  517. data/vendor/ogrerb/samples/navi/res/hiddenWindow.html +1 -0
  518. data/vendor/ogrerb/samples/navi/res/html.css +478 -0
  519. data/vendor/ogrerb/samples/navi/res/html/Thumbs.db +0 -0
  520. data/vendor/ogrerb/samples/navi/res/html/gopher-audio.gif +0 -0
  521. data/vendor/ogrerb/samples/navi/res/html/gopher-binary.gif +0 -0
  522. data/vendor/ogrerb/samples/navi/res/html/gopher-find.gif +0 -0
  523. data/vendor/ogrerb/samples/navi/res/html/gopher-image.gif +0 -0
  524. data/vendor/ogrerb/samples/navi/res/html/gopher-menu.gif +0 -0
  525. data/vendor/ogrerb/samples/navi/res/html/gopher-movie.gif +0 -0
  526. data/vendor/ogrerb/samples/navi/res/html/gopher-sound.gif +0 -0
  527. data/vendor/ogrerb/samples/navi/res/html/gopher-telnet.gif +0 -0
  528. data/vendor/ogrerb/samples/navi/res/html/gopher-text.gif +0 -0
  529. data/vendor/ogrerb/samples/navi/res/html/gopher-unknown.gif +0 -0
  530. data/vendor/ogrerb/samples/navi/res/langGroups.properties +236 -0
  531. data/vendor/ogrerb/samples/navi/res/language.properties +259 -0
  532. data/vendor/ogrerb/samples/navi/res/loading-image.gif +0 -0
  533. data/vendor/ogrerb/samples/navi/res/quirk.css +282 -0
  534. data/vendor/ogrerb/samples/navi/res/samples/Anieyes.gif +0 -0
  535. data/vendor/ogrerb/samples/navi/res/samples/Thumbs.db +0 -0
  536. data/vendor/ogrerb/samples/navi/res/samples/aform.css +69 -0
  537. data/vendor/ogrerb/samples/navi/res/samples/beeptest.html +18 -0
  538. data/vendor/ogrerb/samples/navi/res/samples/bform.css +45 -0
  539. data/vendor/ogrerb/samples/navi/res/samples/bg.jpg +0 -0
  540. data/vendor/ogrerb/samples/navi/res/samples/cform.css +40 -0
  541. data/vendor/ogrerb/samples/navi/res/samples/checkboxTest.xul +47 -0
  542. data/vendor/ogrerb/samples/navi/res/samples/demoform.css +97 -0
  543. data/vendor/ogrerb/samples/navi/res/samples/find.html +97 -0
  544. data/vendor/ogrerb/samples/navi/res/samples/gear1.gif +0 -0
  545. data/vendor/ogrerb/samples/navi/res/samples/image_props.html +58 -0
  546. data/vendor/ogrerb/samples/navi/res/samples/mozform.css +256 -0
  547. data/vendor/ogrerb/samples/navi/res/samples/printsetup.html +175 -0
  548. data/vendor/ogrerb/samples/navi/res/samples/raptor.jpg +0 -0
  549. data/vendor/ogrerb/samples/navi/res/samples/rock_gra.gif +0 -0
  550. data/vendor/ogrerb/samples/navi/res/samples/scrollbarTest1.xul +66 -0
  551. data/vendor/ogrerb/samples/navi/res/samples/scrollbarTest2.xul +19 -0
  552. data/vendor/ogrerb/samples/navi/res/samples/sliderTest1.xul +14 -0
  553. data/vendor/ogrerb/samples/navi/res/samples/soundtest.html +20 -0
  554. data/vendor/ogrerb/samples/navi/res/samples/test.wav +0 -0
  555. data/vendor/ogrerb/samples/navi/res/samples/test0.html +220 -0
  556. data/vendor/ogrerb/samples/navi/res/samples/test1.html +84 -0
  557. data/vendor/ogrerb/samples/navi/res/samples/test10.html +16 -0
  558. data/vendor/ogrerb/samples/navi/res/samples/test11.html +42 -0
  559. data/vendor/ogrerb/samples/navi/res/samples/test12.html +79 -0
  560. data/vendor/ogrerb/samples/navi/res/samples/test13.html +126 -0
  561. data/vendor/ogrerb/samples/navi/res/samples/test14.html +5 -0
  562. data/vendor/ogrerb/samples/navi/res/samples/test15.html +5 -0
  563. data/vendor/ogrerb/samples/navi/res/samples/test16.html +124 -0
  564. data/vendor/ogrerb/samples/navi/res/samples/test2.html +41 -0
  565. data/vendor/ogrerb/samples/navi/res/samples/test3.html +126 -0
  566. data/vendor/ogrerb/samples/navi/res/samples/test4.html +335 -0
  567. data/vendor/ogrerb/samples/navi/res/samples/test5.html +199 -0
  568. data/vendor/ogrerb/samples/navi/res/samples/test6.html +335 -0
  569. data/vendor/ogrerb/samples/navi/res/samples/test7.html +11 -0
  570. data/vendor/ogrerb/samples/navi/res/samples/test8-1.html +66 -0
  571. data/vendor/ogrerb/samples/navi/res/samples/test8.html +662 -0
  572. data/vendor/ogrerb/samples/navi/res/samples/test8dom.html +64 -0
  573. data/vendor/ogrerb/samples/navi/res/samples/test8sca.html +308 -0
  574. data/vendor/ogrerb/samples/navi/res/samples/test8siz.html +224 -0
  575. data/vendor/ogrerb/samples/navi/res/samples/test8tab.html +9 -0
  576. data/vendor/ogrerb/samples/navi/res/samples/test9.html +12 -0
  577. data/vendor/ogrerb/samples/navi/res/samples/test9a.html +39 -0
  578. data/vendor/ogrerb/samples/navi/res/samples/test9b.html +16 -0
  579. data/vendor/ogrerb/samples/navi/res/samples/test_ed.html +5 -0
  580. data/vendor/ogrerb/samples/navi/res/samples/test_form.html +34 -0
  581. data/vendor/ogrerb/samples/navi/res/samples/test_gfx.html +75 -0
  582. data/vendor/ogrerb/samples/navi/res/samples/test_lbox.html +100 -0
  583. data/vendor/ogrerb/samples/navi/res/samples/test_pr.html +87 -0
  584. data/vendor/ogrerb/samples/navi/res/samples/test_weight.html +45 -0
  585. data/vendor/ogrerb/samples/navi/res/samples/toolbarTest1.xul +51 -0
  586. data/vendor/ogrerb/samples/navi/res/samples/treeTest1.css +62 -0
  587. data/vendor/ogrerb/samples/navi/res/samples/treeTest1.xul +110 -0
  588. data/vendor/ogrerb/samples/navi/res/samples/xulTest.css +130 -0
  589. data/vendor/ogrerb/samples/navi/res/svg.css +64 -0
  590. data/vendor/ogrerb/samples/navi/res/table-add-column-after-active.gif +0 -0
  591. data/vendor/ogrerb/samples/navi/res/table-add-column-after-hover.gif +0 -0
  592. data/vendor/ogrerb/samples/navi/res/table-add-column-after.gif +0 -0
  593. data/vendor/ogrerb/samples/navi/res/table-add-column-before-active.gif +0 -0
  594. data/vendor/ogrerb/samples/navi/res/table-add-column-before-hover.gif +0 -0
  595. data/vendor/ogrerb/samples/navi/res/table-add-column-before.gif +0 -0
  596. data/vendor/ogrerb/samples/navi/res/table-add-row-after-active.gif +0 -0
  597. data/vendor/ogrerb/samples/navi/res/table-add-row-after-hover.gif +0 -0
  598. data/vendor/ogrerb/samples/navi/res/table-add-row-after.gif +0 -0
  599. data/vendor/ogrerb/samples/navi/res/table-add-row-before-active.gif +0 -0
  600. data/vendor/ogrerb/samples/navi/res/table-add-row-before-hover.gif +0 -0
  601. data/vendor/ogrerb/samples/navi/res/table-add-row-before.gif +0 -0
  602. data/vendor/ogrerb/samples/navi/res/table-remove-column-active.gif +0 -0
  603. data/vendor/ogrerb/samples/navi/res/table-remove-column-hover.gif +0 -0
  604. data/vendor/ogrerb/samples/navi/res/table-remove-column.gif +0 -0
  605. data/vendor/ogrerb/samples/navi/res/table-remove-row-active.gif +0 -0
  606. data/vendor/ogrerb/samples/navi/res/table-remove-row-hover.gif +0 -0
  607. data/vendor/ogrerb/samples/navi/res/table-remove-row.gif +0 -0
  608. data/vendor/ogrerb/samples/navi/res/throbber/Thumbs.db +0 -0
  609. data/vendor/ogrerb/samples/navi/res/throbber/anim.gif +0 -0
  610. data/vendor/ogrerb/samples/navi/res/throbber/anims00.gif +0 -0
  611. data/vendor/ogrerb/samples/navi/res/throbber/anims01.gif +0 -0
  612. data/vendor/ogrerb/samples/navi/res/throbber/anims02.gif +0 -0
  613. data/vendor/ogrerb/samples/navi/res/throbber/anims03.gif +0 -0
  614. data/vendor/ogrerb/samples/navi/res/throbber/anims04.gif +0 -0
  615. data/vendor/ogrerb/samples/navi/res/throbber/anims05.gif +0 -0
  616. data/vendor/ogrerb/samples/navi/res/throbber/anims06.gif +0 -0
  617. data/vendor/ogrerb/samples/navi/res/throbber/anims07.gif +0 -0
  618. data/vendor/ogrerb/samples/navi/res/throbber/anims08.gif +0 -0
  619. data/vendor/ogrerb/samples/navi/res/throbber/anims09.gif +0 -0
  620. data/vendor/ogrerb/samples/navi/res/throbber/anims10.gif +0 -0
  621. data/vendor/ogrerb/samples/navi/res/throbber/anims11.gif +0 -0
  622. data/vendor/ogrerb/samples/navi/res/throbber/anims12.gif +0 -0
  623. data/vendor/ogrerb/samples/navi/res/throbber/anims13.gif +0 -0
  624. data/vendor/ogrerb/samples/navi/res/throbber/anims14.gif +0 -0
  625. data/vendor/ogrerb/samples/navi/res/throbber/anims15.gif +0 -0
  626. data/vendor/ogrerb/samples/navi/res/throbber/anims16.gif +0 -0
  627. data/vendor/ogrerb/samples/navi/res/throbber/anims17.gif +0 -0
  628. data/vendor/ogrerb/samples/navi/res/throbber/anims18.gif +0 -0
  629. data/vendor/ogrerb/samples/navi/res/throbber/anims19.gif +0 -0
  630. data/vendor/ogrerb/samples/navi/res/throbber/anims20.gif +0 -0
  631. data/vendor/ogrerb/samples/navi/res/throbber/anims21.gif +0 -0
  632. data/vendor/ogrerb/samples/navi/res/throbber/anims22.gif +0 -0
  633. data/vendor/ogrerb/samples/navi/res/throbber/anims23.gif +0 -0
  634. data/vendor/ogrerb/samples/navi/res/throbber/anims24.gif +0 -0
  635. data/vendor/ogrerb/samples/navi/res/throbber/anims25.gif +0 -0
  636. data/vendor/ogrerb/samples/navi/res/throbber/anims26.gif +0 -0
  637. data/vendor/ogrerb/samples/navi/res/throbber/anims27.gif +0 -0
  638. data/vendor/ogrerb/samples/navi/res/throbber/anims28.gif +0 -0
  639. data/vendor/ogrerb/samples/navi/res/throbber/anims29.gif +0 -0
  640. data/vendor/ogrerb/samples/navi/res/ua.css +235 -0
  641. data/vendor/ogrerb/samples/navi/res/viewer.properties +1 -0
  642. data/vendor/ogrerb/samples/navi/res/viewsource.css +118 -0
  643. data/vendor/ogrerb/samples/navi/res/wincharset.properties +55 -0
  644. data/vendor/ogrerb/samples/navi/resources.cfg +14 -0
  645. data/vendor/ogrerb/samples/navi/testNaviMask.png +0 -0
  646. data/vendor/ogrerb/samples/plugins.cfg +11 -0
  647. data/vendor/ogrerb/samples/quake3settings.cfg +2 -0
  648. data/vendor/ogrerb/samples/render_to_texture.rb +159 -0
  649. data/vendor/ogrerb/samples/resources.cfg +14 -0
  650. data/vendor/ogrerb/samples/sky_box.rb +105 -0
  651. data/vendor/ogrerb/samples/sky_dome.rb +84 -0
  652. data/vendor/ogrerb/samples/sky_plane.rb +24 -0
  653. data/vendor/ogrerb/samples/smoke.rb +21 -0
  654. data/vendor/ogrerb/src_headers/ExampleApplication/ExampleApplication.h +266 -0
  655. data/vendor/ogrerb/src_headers/ExampleApplication/ExampleFrameListener.h +408 -0
  656. data/vendor/ogrerb/src_headers/ExampleApplication/ExampleLoadingBar.h +182 -0
  657. data/vendor/ogrerb/src_headers/OGRE/GLX/OgreConfigDialogImp.h +76 -0
  658. data/vendor/ogrerb/src_headers/OGRE/GLX/OgreErrorDialogImp.h +53 -0
  659. data/vendor/ogrerb/src_headers/OGRE/GLX/OgreTimerImp.h +63 -0
  660. data/vendor/ogrerb/src_headers/OGRE/Ogre.h +130 -0
  661. data/vendor/ogrerb/src_headers/OGRE/OgreAlignedAllocator.h +181 -0
  662. data/vendor/ogrerb/src_headers/OGRE/OgreAnimable.h +299 -0
  663. data/vendor/ogrerb/src_headers/OGRE/OgreAnimation.h +406 -0
  664. data/vendor/ogrerb/src_headers/OGRE/OgreAnimationState.h +229 -0
  665. data/vendor/ogrerb/src_headers/OGRE/OgreAnimationTrack.h +547 -0
  666. data/vendor/ogrerb/src_headers/OGRE/OgreAny.h +405 -0
  667. data/vendor/ogrerb/src_headers/OGRE/OgreArchive.h +191 -0
  668. data/vendor/ogrerb/src_headers/OGRE/OgreArchiveFactory.h +62 -0
  669. data/vendor/ogrerb/src_headers/OGRE/OgreArchiveManager.h +130 -0
  670. data/vendor/ogrerb/src_headers/OGRE/OgreAutoParamDataSource.h +225 -0
  671. data/vendor/ogrerb/src_headers/OGRE/OgreAxisAlignedBox.h +790 -0
  672. data/vendor/ogrerb/src_headers/OGRE/OgreBillboard.h +217 -0
  673. data/vendor/ogrerb/src_headers/OGRE/OgreBillboardChain.h +343 -0
  674. data/vendor/ogrerb/src_headers/OGRE/OgreBillboardParticleRenderer.h +250 -0
  675. data/vendor/ogrerb/src_headers/OGRE/OgreBillboardSet.h +841 -0
  676. data/vendor/ogrerb/src_headers/OGRE/OgreBitwise.h +323 -0
  677. data/vendor/ogrerb/src_headers/OGRE/OgreBlendMode.h +245 -0
  678. data/vendor/ogrerb/src_headers/OGRE/OgreBone.h +142 -0
  679. data/vendor/ogrerb/src_headers/OGRE/OgreBorderPanelOverlayElement.h +344 -0
  680. data/vendor/ogrerb/src_headers/OGRE/OgreCamera.h +566 -0
  681. data/vendor/ogrerb/src_headers/OGRE/OgreCodec.h +133 -0
  682. data/vendor/ogrerb/src_headers/OGRE/OgreColourValue.h +319 -0
  683. data/vendor/ogrerb/src_headers/OGRE/OgreCommon.h +425 -0
  684. data/vendor/ogrerb/src_headers/OGRE/OgreCompiler2Pass.h +667 -0
  685. data/vendor/ogrerb/src_headers/OGRE/OgreCompositionPass.h +271 -0
  686. data/vendor/ogrerb/src_headers/OGRE/OgreCompositionTargetPass.h +153 -0
  687. data/vendor/ogrerb/src_headers/OGRE/OgreCompositionTechnique.h +146 -0
  688. data/vendor/ogrerb/src_headers/OGRE/OgreCompositor.h +179 -0
  689. data/vendor/ogrerb/src_headers/OGRE/OgreCompositorChain.h +208 -0
  690. data/vendor/ogrerb/src_headers/OGRE/OgreCompositorInstance.h +262 -0
  691. data/vendor/ogrerb/src_headers/OGRE/OgreCompositorManager.h +170 -0
  692. data/vendor/ogrerb/src_headers/OGRE/OgreCompositorScriptCompiler.h +186 -0
  693. data/vendor/ogrerb/src_headers/OGRE/OgreCompositorSerializer.h +59 -0
  694. data/vendor/ogrerb/src_headers/OGRE/OgreConfig.h +120 -0
  695. data/vendor/ogrerb/src_headers/OGRE/OgreConfigDialog.h +50 -0
  696. data/vendor/ogrerb/src_headers/OGRE/OgreConfigFile.h +102 -0
  697. data/vendor/ogrerb/src_headers/OGRE/OgreConfigOptionMap.h +56 -0
  698. data/vendor/ogrerb/src_headers/OGRE/OgreController.h +227 -0
  699. data/vendor/ogrerb/src_headers/OGRE/OgreControllerManager.h +287 -0
  700. data/vendor/ogrerb/src_headers/OGRE/OgreConvexBody.h +252 -0
  701. data/vendor/ogrerb/src_headers/OGRE/OgreDDSCodec.h +90 -0
  702. data/vendor/ogrerb/src_headers/OGRE/OgreDataStream.h +442 -0
  703. data/vendor/ogrerb/src_headers/OGRE/OgreDefaultHardwareBufferManager.h +116 -0
  704. data/vendor/ogrerb/src_headers/OGRE/OgreDynLib.h +116 -0
  705. data/vendor/ogrerb/src_headers/OGRE/OgreDynLibManager.h +110 -0
  706. data/vendor/ogrerb/src_headers/OGRE/OgreEdgeListBuilder.h +261 -0
  707. data/vendor/ogrerb/src_headers/OGRE/OgreEntity.h +771 -0
  708. data/vendor/ogrerb/src_headers/OGRE/OgreErrorDialog.h +50 -0
  709. data/vendor/ogrerb/src_headers/OGRE/OgreException.h +341 -0
  710. data/vendor/ogrerb/src_headers/OGRE/OgreExternalTextureSource.h +184 -0
  711. data/vendor/ogrerb/src_headers/OGRE/OgreExternalTextureSourceManager.h +117 -0
  712. data/vendor/ogrerb/src_headers/OGRE/OgreFactoryObj.h +65 -0
  713. data/vendor/ogrerb/src_headers/OGRE/OgreFileSystem.h +111 -0
  714. data/vendor/ogrerb/src_headers/OGRE/OgreFont.h +432 -0
  715. data/vendor/ogrerb/src_headers/OGRE/OgreFontManager.h +93 -0
  716. data/vendor/ogrerb/src_headers/OGRE/OgreFrameListener.h +106 -0
  717. data/vendor/ogrerb/src_headers/OGRE/OgreFreeImageCodec.h +77 -0
  718. data/vendor/ogrerb/src_headers/OGRE/OgreFrustum.h +590 -0
  719. data/vendor/ogrerb/src_headers/OGRE/OgreGpuProgram.h +1632 -0
  720. data/vendor/ogrerb/src_headers/OGRE/OgreGpuProgramManager.h +190 -0
  721. data/vendor/ogrerb/src_headers/OGRE/OgreGpuProgramUsage.h +129 -0
  722. data/vendor/ogrerb/src_headers/OGRE/OgreHardwareBuffer.h +330 -0
  723. data/vendor/ogrerb/src_headers/OGRE/OgreHardwareBufferManager.h +399 -0
  724. data/vendor/ogrerb/src_headers/OGRE/OgreHardwareIndexBuffer.h +78 -0
  725. data/vendor/ogrerb/src_headers/OGRE/OgreHardwareOcclusionQuery.h +125 -0
  726. data/vendor/ogrerb/src_headers/OGRE/OgreHardwarePixelBuffer.h +198 -0
  727. data/vendor/ogrerb/src_headers/OGRE/OgreHardwareVertexBuffer.h +541 -0
  728. data/vendor/ogrerb/src_headers/OGRE/OgreHighLevelGpuProgram.h +185 -0
  729. data/vendor/ogrerb/src_headers/OGRE/OgreHighLevelGpuProgramManager.h +146 -0
  730. data/vendor/ogrerb/src_headers/OGRE/OgreImage.h +428 -0
  731. data/vendor/ogrerb/src_headers/OGRE/OgreImageCodec.h +82 -0
  732. data/vendor/ogrerb/src_headers/OGRE/OgreInstancedGeometry.h +833 -0
  733. data/vendor/ogrerb/src_headers/OGRE/OgreIteratorWrappers.h +359 -0
  734. data/vendor/ogrerb/src_headers/OGRE/OgreKeyFrame.h +248 -0
  735. data/vendor/ogrerb/src_headers/OGRE/OgreLight.h +433 -0
  736. data/vendor/ogrerb/src_headers/OGRE/OgreLog.h +149 -0
  737. data/vendor/ogrerb/src_headers/OGRE/OgreLogManager.h +163 -0
  738. data/vendor/ogrerb/src_headers/OGRE/OgreManualObject.h +513 -0
  739. data/vendor/ogrerb/src_headers/OGRE/OgreMaterial.h +680 -0
  740. data/vendor/ogrerb/src_headers/OGRE/OgreMaterialManager.h +242 -0
  741. data/vendor/ogrerb/src_headers/OGRE/OgreMaterialScriptCompiler.h +330 -0
  742. data/vendor/ogrerb/src_headers/OGRE/OgreMaterialSerializer.h +278 -0
  743. data/vendor/ogrerb/src_headers/OGRE/OgreMath.h +606 -0
  744. data/vendor/ogrerb/src_headers/OGRE/OgreMatrix3.h +306 -0
  745. data/vendor/ogrerb/src_headers/OGRE/OgreMatrix4.h +603 -0
  746. data/vendor/ogrerb/src_headers/OGRE/OgreMemoryMacros.h +69 -0
  747. data/vendor/ogrerb/src_headers/OGRE/OgreMemoryManager.h +422 -0
  748. data/vendor/ogrerb/src_headers/OGRE/OgreMesh.h +875 -0
  749. data/vendor/ogrerb/src_headers/OGRE/OgreMeshFileFormat.h +277 -0
  750. data/vendor/ogrerb/src_headers/OGRE/OgreMeshManager.h +431 -0
  751. data/vendor/ogrerb/src_headers/OGRE/OgreMeshSerializer.h +99 -0
  752. data/vendor/ogrerb/src_headers/OGRE/OgreMeshSerializerImpl.h +218 -0
  753. data/vendor/ogrerb/src_headers/OGRE/OgreMovableObject.h +530 -0
  754. data/vendor/ogrerb/src_headers/OGRE/OgreMovablePlane.h +87 -0
  755. data/vendor/ogrerb/src_headers/OGRE/OgreNoMemoryMacros.h +42 -0
  756. data/vendor/ogrerb/src_headers/OGRE/OgreNode.h +727 -0
  757. data/vendor/ogrerb/src_headers/OGRE/OgreNumerics.h +55 -0
  758. data/vendor/ogrerb/src_headers/OGRE/OgreOverlay.h +285 -0
  759. data/vendor/ogrerb/src_headers/OGRE/OgreOverlayContainer.h +145 -0
  760. data/vendor/ogrerb/src_headers/OGRE/OgreOverlayElement.h +490 -0
  761. data/vendor/ogrerb/src_headers/OGRE/OgreOverlayElementCommands.h +115 -0
  762. data/vendor/ogrerb/src_headers/OGRE/OgreOverlayElementFactory.h +121 -0
  763. data/vendor/ogrerb/src_headers/OGRE/OgreOverlayManager.h +235 -0
  764. data/vendor/ogrerb/src_headers/OGRE/OgrePanelOverlayElement.h +154 -0
  765. data/vendor/ogrerb/src_headers/OGRE/OgreParticle.h +147 -0
  766. data/vendor/ogrerb/src_headers/OGRE/OgreParticleAffector.h +116 -0
  767. data/vendor/ogrerb/src_headers/OGRE/OgreParticleAffectorFactory.h +74 -0
  768. data/vendor/ogrerb/src_headers/OGRE/OgreParticleEmitter.h +506 -0
  769. data/vendor/ogrerb/src_headers/OGRE/OgreParticleEmitterCommands.h +200 -0
  770. data/vendor/ogrerb/src_headers/OGRE/OgreParticleEmitterFactory.h +77 -0
  771. data/vendor/ogrerb/src_headers/OGRE/OgreParticleIterator.h +61 -0
  772. data/vendor/ogrerb/src_headers/OGRE/OgreParticleSystem.h +878 -0
  773. data/vendor/ogrerb/src_headers/OGRE/OgreParticleSystemManager.h +389 -0
  774. data/vendor/ogrerb/src_headers/OGRE/OgreParticleSystemRenderer.h +124 -0
  775. data/vendor/ogrerb/src_headers/OGRE/OgrePass.h +1321 -0
  776. data/vendor/ogrerb/src_headers/OGRE/OgrePatchMesh.h +152 -0
  777. data/vendor/ogrerb/src_headers/OGRE/OgrePatchSurface.h +233 -0
  778. data/vendor/ogrerb/src_headers/OGRE/OgrePixelFormat.h +473 -0
  779. data/vendor/ogrerb/src_headers/OGRE/OgrePlane.h +154 -0
  780. data/vendor/ogrerb/src_headers/OGRE/OgrePlaneBoundedVolume.h +128 -0
  781. data/vendor/ogrerb/src_headers/OGRE/OgrePlatform.h +224 -0
  782. data/vendor/ogrerb/src_headers/OGRE/OgrePlugin.h +132 -0
  783. data/vendor/ogrerb/src_headers/OGRE/OgrePolygon.h +130 -0
  784. data/vendor/ogrerb/src_headers/OGRE/OgrePose.h +111 -0
  785. data/vendor/ogrerb/src_headers/OGRE/OgrePredefinedControllers.h +285 -0
  786. data/vendor/ogrerb/src_headers/OGRE/OgrePrefabFactory.h +66 -0
  787. data/vendor/ogrerb/src_headers/OGRE/OgrePrerequisites.h +390 -0
  788. data/vendor/ogrerb/src_headers/OGRE/OgreProfiler.h +415 -0
  789. data/vendor/ogrerb/src_headers/OGRE/OgreProgressiveMesh.h +248 -0
  790. data/vendor/ogrerb/src_headers/OGRE/OgreQuaternion.h +277 -0
  791. data/vendor/ogrerb/src_headers/OGRE/OgreRadixSort.h +322 -0
  792. data/vendor/ogrerb/src_headers/OGRE/OgreRay.h +115 -0
  793. data/vendor/ogrerb/src_headers/OGRE/OgreRectangle.h +69 -0
  794. data/vendor/ogrerb/src_headers/OGRE/OgreRectangle2D.h +79 -0
  795. data/vendor/ogrerb/src_headers/OGRE/OgreRenderOperation.h +84 -0
  796. data/vendor/ogrerb/src_headers/OGRE/OgreRenderQueue.h +256 -0
  797. data/vendor/ogrerb/src_headers/OGRE/OgreRenderQueueInvocation.h +218 -0
  798. data/vendor/ogrerb/src_headers/OGRE/OgreRenderQueueListener.h +89 -0
  799. data/vendor/ogrerb/src_headers/OGRE/OgreRenderQueueSortingGrouping.h +653 -0
  800. data/vendor/ogrerb/src_headers/OGRE/OgreRenderSystem.h +1255 -0
  801. data/vendor/ogrerb/src_headers/OGRE/OgreRenderSystemCapabilities.h +380 -0
  802. data/vendor/ogrerb/src_headers/OGRE/OgreRenderTarget.h +359 -0
  803. data/vendor/ogrerb/src_headers/OGRE/OgreRenderTargetListener.h +132 -0
  804. data/vendor/ogrerb/src_headers/OGRE/OgreRenderTexture.h +101 -0
  805. data/vendor/ogrerb/src_headers/OGRE/OgreRenderWindow.h +204 -0
  806. data/vendor/ogrerb/src_headers/OGRE/OgreRenderable.h +296 -0
  807. data/vendor/ogrerb/src_headers/OGRE/OgreResource.h +415 -0
  808. data/vendor/ogrerb/src_headers/OGRE/OgreResourceBackgroundQueue.h +453 -0
  809. data/vendor/ogrerb/src_headers/OGRE/OgreResourceGroupManager.h +858 -0
  810. data/vendor/ogrerb/src_headers/OGRE/OgreResourceManager.h +446 -0
  811. data/vendor/ogrerb/src_headers/OGRE/OgreRibbonTrail.h +224 -0
  812. data/vendor/ogrerb/src_headers/OGRE/OgreRoot.h +844 -0
  813. data/vendor/ogrerb/src_headers/OGRE/OgreRotationalSpline.h +129 -0
  814. data/vendor/ogrerb/src_headers/OGRE/OgreSceneManager.h +2871 -0
  815. data/vendor/ogrerb/src_headers/OGRE/OgreSceneManagerEnumerator.h +221 -0
  816. data/vendor/ogrerb/src_headers/OGRE/OgreSceneNode.h +448 -0
  817. data/vendor/ogrerb/src_headers/OGRE/OgreSceneQuery.h +557 -0
  818. data/vendor/ogrerb/src_headers/OGRE/OgreScriptLoader.h +89 -0
  819. data/vendor/ogrerb/src_headers/OGRE/OgreSearchOps.h +65 -0
  820. data/vendor/ogrerb/src_headers/OGRE/OgreSerializer.h +113 -0
  821. data/vendor/ogrerb/src_headers/OGRE/OgreShadowCameraSetup.h +100 -0
  822. data/vendor/ogrerb/src_headers/OGRE/OgreShadowCameraSetupFocused.h +281 -0
  823. data/vendor/ogrerb/src_headers/OGRE/OgreShadowCameraSetupLiSPSM.h +226 -0
  824. data/vendor/ogrerb/src_headers/OGRE/OgreShadowCameraSetupPlaneOptimal.h +81 -0
  825. data/vendor/ogrerb/src_headers/OGRE/OgreShadowCaster.h +215 -0
  826. data/vendor/ogrerb/src_headers/OGRE/OgreShadowTextureManager.h +145 -0
  827. data/vendor/ogrerb/src_headers/OGRE/OgreShadowVolumeExtrudeProgram.h +233 -0
  828. data/vendor/ogrerb/src_headers/OGRE/OgreSharedPtr.h +244 -0
  829. data/vendor/ogrerb/src_headers/OGRE/OgreSimpleRenderable.h +98 -0
  830. data/vendor/ogrerb/src_headers/OGRE/OgreSimpleSpline.h +130 -0
  831. data/vendor/ogrerb/src_headers/OGRE/OgreSingleton.h +79 -0
  832. data/vendor/ogrerb/src_headers/OGRE/OgreSkeleton.h +519 -0
  833. data/vendor/ogrerb/src_headers/OGRE/OgreSkeletonFileFormat.h +102 -0
  834. data/vendor/ogrerb/src_headers/OGRE/OgreSkeletonInstance.h +156 -0
  835. data/vendor/ogrerb/src_headers/OGRE/OgreSkeletonManager.h +98 -0
  836. data/vendor/ogrerb/src_headers/OGRE/OgreSkeletonSerializer.h +117 -0
  837. data/vendor/ogrerb/src_headers/OGRE/OgreSphere.h +101 -0
  838. data/vendor/ogrerb/src_headers/OGRE/OgreSpotShadowFadePng.h +648 -0
  839. data/vendor/ogrerb/src_headers/OGRE/OgreStableHeaders.h +80 -0
  840. data/vendor/ogrerb/src_headers/OGRE/OgreStaticFaceGroup.h +134 -0
  841. data/vendor/ogrerb/src_headers/OGRE/OgreStaticGeometry.h +748 -0
  842. data/vendor/ogrerb/src_headers/OGRE/OgreStdHeaders.h +102 -0
  843. data/vendor/ogrerb/src_headers/OGRE/OgreString.h +149 -0
  844. data/vendor/ogrerb/src_headers/OGRE/OgreStringConverter.h +246 -0
  845. data/vendor/ogrerb/src_headers/OGRE/OgreStringInterface.h +332 -0
  846. data/vendor/ogrerb/src_headers/OGRE/OgreStringVector.h +45 -0
  847. data/vendor/ogrerb/src_headers/OGRE/OgreSubEntity.h +230 -0
  848. data/vendor/ogrerb/src_headers/OGRE/OgreSubMesh.h +267 -0
  849. data/vendor/ogrerb/src_headers/OGRE/OgreTagPoint.h +116 -0
  850. data/vendor/ogrerb/src_headers/OGRE/OgreTechnique.h +488 -0
  851. data/vendor/ogrerb/src_headers/OGRE/OgreTextAreaOverlayElement.h +247 -0
  852. data/vendor/ogrerb/src_headers/OGRE/OgreTexture.h +414 -0
  853. data/vendor/ogrerb/src_headers/OGRE/OgreTextureManager.h +398 -0
  854. data/vendor/ogrerb/src_headers/OGRE/OgreTextureUnitState.h +1169 -0
  855. data/vendor/ogrerb/src_headers/OGRE/OgreTimer.h +44 -0
  856. data/vendor/ogrerb/src_headers/OGRE/OgreUTFString.h +2406 -0
  857. data/vendor/ogrerb/src_headers/OGRE/OgreUnifiedHighLevelGpuProgram.h +168 -0
  858. data/vendor/ogrerb/src_headers/OGRE/OgreUserDefinedObject.h +93 -0
  859. data/vendor/ogrerb/src_headers/OGRE/OgreVector2.h +532 -0
  860. data/vendor/ogrerb/src_headers/OGRE/OgreVector3.h +768 -0
  861. data/vendor/ogrerb/src_headers/OGRE/OgreVector4.h +396 -0
  862. data/vendor/ogrerb/src_headers/OGRE/OgreVertexBoneAssignment.h +56 -0
  863. data/vendor/ogrerb/src_headers/OGRE/OgreVertexIndexData.h +286 -0
  864. data/vendor/ogrerb/src_headers/OGRE/OgreViewport.h +331 -0
  865. data/vendor/ogrerb/src_headers/OGRE/OgreWindowEventUtilities.h +151 -0
  866. data/vendor/ogrerb/src_headers/OGRE/OgreWireBoundingBox.h +81 -0
  867. data/vendor/ogrerb/src_headers/OGRE/OgreZip.h +136 -0
  868. data/vendor/ogrerb/src_headers/OGRE/asm_math.h +367 -0
  869. data/vendor/ogrerb/src_headers/OIS/OIS.h +38 -0
  870. data/vendor/ogrerb/src_headers/OIS/OISConfig.h +49 -0
  871. data/vendor/ogrerb/src_headers/OIS/OISEffect.h +254 -0
  872. data/vendor/ogrerb/src_headers/OIS/OISEvents.h +43 -0
  873. data/vendor/ogrerb/src_headers/OIS/OISException.h +70 -0
  874. data/vendor/ogrerb/src_headers/OIS/OISForceFeedback.h +102 -0
  875. data/vendor/ogrerb/src_headers/OIS/OISInputManager.h +127 -0
  876. data/vendor/ogrerb/src_headers/OIS/OISInterface.h +47 -0
  877. data/vendor/ogrerb/src_headers/OIS/OISJoyStick.h +179 -0
  878. data/vendor/ogrerb/src_headers/OIS/OISKeyboard.h +310 -0
  879. data/vendor/ogrerb/src_headers/OIS/OISMouse.h +135 -0
  880. data/vendor/ogrerb/src_headers/OIS/OISObject.h +89 -0
  881. data/vendor/ogrerb/src_headers/OIS/OISPrereqs.h +170 -0
  882. data/vendor/ogrerb/src_headers/navi/Navi.h +121 -0
  883. data/vendor/ogrerb/src_headers/navi/NaviData.h +145 -0
  884. data/vendor/ogrerb/src_headers/navi/NaviEventListener.h +56 -0
  885. data/vendor/ogrerb/src_headers/navi/NaviManager.h +439 -0
  886. data/vendor/ogrerb/src_headers/navi/llmozlib.h +222 -0
  887. data/vendor/ogrerb/src_headers/wrappers/Application.h +61 -0
  888. data/vendor/ogrerb/src_headers/wrappers/ApplicationFrameListener.h +43 -0
  889. data/vendor/ogrerb/src_headers/wrappers/NaviProxies.h +15 -0
  890. data/vendor/ogrerb/src_headers/wrappers/OISProxies.h +58 -0
  891. data/vendor/ogrerb/src_headers/wrappers/OgreProxies.h +98 -0
  892. data/vendor/ogrerb/website/contact.html +43 -0
  893. data/vendor/ogrerb/website/docs.html +92 -0
  894. data/vendor/ogrerb/website/get.html +60 -0
  895. data/vendor/ogrerb/website/images/Thumbs.db +0 -0
  896. data/vendor/ogrerb/website/images/header.png +0 -0
  897. data/vendor/ogrerb/website/images/header.xcf +0 -0
  898. data/vendor/ogrerb/website/images/ogre3d.gif +0 -0
  899. data/vendor/ogrerb/website/images/redogrehead.png +0 -0
  900. data/vendor/ogrerb/website/images/ruby.png +0 -0
  901. data/vendor/ogrerb/website/images/sample.png +0 -0
  902. data/vendor/ogrerb/website/index.html +80 -0
  903. data/vendor/ogrerb/website/javascripts/prototype.js +3271 -0
  904. data/vendor/ogrerb/website/stylesheets/main.css +96 -0
  905. metadata +997 -0
@@ -0,0 +1,80 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
+ <head>
7
+ <title>Ogre.rb - Ruby wrapper for Ogre 3D</title>
8
+ <link rel="stylesheet" href="stylesheets/main.css" type="text/css" media="screen" />
9
+ <script src="javascripts/prototype.js" language="Javascript"></script>
10
+ </head>
11
+ <body>
12
+ <div id="wrapper">
13
+ <div id="header">
14
+ <div id="logo">
15
+ <img src="images/header.png"/>
16
+ </div>
17
+
18
+ <div id="navigation">
19
+ <ul>
20
+ <li class="current"><a href="index.html">Home</a></li>
21
+ <li><a href="get.html">Get Ogre.rb</a></li>
22
+ <li><a href="docs.html">Documentation</a></li>
23
+ <li><a href="contact.html">Contact</a></li>
24
+ </ul>
25
+ </div>
26
+ </div>
27
+
28
+ <div id="content">
29
+ <div class="entry">
30
+ <h2>About</h2>
31
+ <p>
32
+ Welcome to the site for Ogre.rb! This is a project to wrap, through SWIG, the entire public API of <a href="http://www.ogre3d.org">Ogre 3D</a>. Here you will find access to the released packages, the svn repository hosted on <a href="http://www.rubyforge.org">RubyForge</a> and documentation on how to use this wrapper for your own projects.
33
+ </p>
34
+
35
+ <p>
36
+ Ogre.rb is currently being built against Ogre 1.4.x [Eihort].
37
+ </p>
38
+
39
+ <p>
40
+ Ogre.rb is released under the <a href="#" onclick="$('licence_text').toggle();return false;">MIT Licence</a>.
41
+ </p>
42
+
43
+ <p id="licence_text" style="display: none;">
44
+ Copyright (c) 2007 Jason Roelofs<br/>
45
+ <br/>
46
+ Permission is hereby granted, free of charge, to any person obtaining a copy
47
+ of this software and associated documentation files (the "Software"), to deal
48
+ in the Software without restriction, including without limitation the rights
49
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
50
+ copies of the Software, and to permit persons to whom the Software is
51
+ furnished to do so, subject to the following conditions:<br/>
52
+ <br/>
53
+ The above copyright notice and this permission notice shall be included in
54
+ all copies or substantial portions of the Software.<br/>
55
+ <br/>
56
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
57
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
58
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
59
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
60
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
61
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
62
+ THE SOFTWARE.<br/>
63
+ </p>
64
+ </div>
65
+
66
+ <div class="entry">
67
+ <h2>Sample Code</h2>
68
+ <p style="text-align: center;">
69
+ <img src="images/sample.png"/>
70
+ </p>
71
+ </div>
72
+ </div>
73
+
74
+ <div id="footer">
75
+ <a href="http://www.ruby-lang.org"><img src="images/ruby.png"/></a>
76
+ <a href="http://www.ogre3d.org"><img src="images/ogre3d.gif"/></a>
77
+ </div>
78
+ </div>
79
+ </body>
80
+ </html>
@@ -0,0 +1,3271 @@
1
+ /* Prototype JavaScript framework, version 1.5.1
2
+ * (c) 2005-2007 Sam Stephenson
3
+ *
4
+ * Prototype is freely distributable under the terms of an MIT-style license.
5
+ * For details, see the Prototype web site: http://www.prototypejs.org/
6
+ *
7
+ /*--------------------------------------------------------------------------*/
8
+
9
+ var Prototype = {
10
+ Version: '1.5.1',
11
+
12
+ Browser: {
13
+ IE: !!(window.attachEvent && !window.opera),
14
+ Opera: !!window.opera,
15
+ WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
16
+ Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1
17
+ },
18
+
19
+ BrowserFeatures: {
20
+ XPath: !!document.evaluate,
21
+ ElementExtensions: !!window.HTMLElement,
22
+ SpecificElementExtensions:
23
+ (document.createElement('div').__proto__ !==
24
+ document.createElement('form').__proto__)
25
+ },
26
+
27
+ ScriptFragment: '<script[^>]*>([\u0001-\uFFFF]*?)</script>',
28
+ JSONFilter: /^\/\*-secure-\s*(.*)\s*\*\/\s*$/,
29
+
30
+ emptyFunction: function() { },
31
+ K: function(x) { return x }
32
+ }
33
+
34
+ var Class = {
35
+ create: function() {
36
+ return function() {
37
+ this.initialize.apply(this, arguments);
38
+ }
39
+ }
40
+ }
41
+
42
+ var Abstract = new Object();
43
+
44
+ Object.extend = function(destination, source) {
45
+ for (var property in source) {
46
+ destination[property] = source[property];
47
+ }
48
+ return destination;
49
+ }
50
+
51
+ Object.extend(Object, {
52
+ inspect: function(object) {
53
+ try {
54
+ if (object === undefined) return 'undefined';
55
+ if (object === null) return 'null';
56
+ return object.inspect ? object.inspect() : object.toString();
57
+ } catch (e) {
58
+ if (e instanceof RangeError) return '...';
59
+ throw e;
60
+ }
61
+ },
62
+
63
+ toJSON: function(object) {
64
+ var type = typeof object;
65
+ switch(type) {
66
+ case 'undefined':
67
+ case 'function':
68
+ case 'unknown': return;
69
+ case 'boolean': return object.toString();
70
+ }
71
+ if (object === null) return 'null';
72
+ if (object.toJSON) return object.toJSON();
73
+ if (object.ownerDocument === document) return;
74
+ var results = [];
75
+ for (var property in object) {
76
+ var value = Object.toJSON(object[property]);
77
+ if (value !== undefined)
78
+ results.push(property.toJSON() + ': ' + value);
79
+ }
80
+ return '{' + results.join(', ') + '}';
81
+ },
82
+
83
+ keys: function(object) {
84
+ var keys = [];
85
+ for (var property in object)
86
+ keys.push(property);
87
+ return keys;
88
+ },
89
+
90
+ values: function(object) {
91
+ var values = [];
92
+ for (var property in object)
93
+ values.push(object[property]);
94
+ return values;
95
+ },
96
+
97
+ clone: function(object) {
98
+ return Object.extend({}, object);
99
+ }
100
+ });
101
+
102
+ Function.prototype.bind = function() {
103
+ var __method = this, args = $A(arguments), object = args.shift();
104
+ return function() {
105
+ return __method.apply(object, args.concat($A(arguments)));
106
+ }
107
+ }
108
+
109
+ Function.prototype.bindAsEventListener = function(object) {
110
+ var __method = this, args = $A(arguments), object = args.shift();
111
+ return function(event) {
112
+ return __method.apply(object, [event || window.event].concat(args));
113
+ }
114
+ }
115
+
116
+ Object.extend(Number.prototype, {
117
+ toColorPart: function() {
118
+ return this.toPaddedString(2, 16);
119
+ },
120
+
121
+ succ: function() {
122
+ return this + 1;
123
+ },
124
+
125
+ times: function(iterator) {
126
+ $R(0, this, true).each(iterator);
127
+ return this;
128
+ },
129
+
130
+ toPaddedString: function(length, radix) {
131
+ var string = this.toString(radix || 10);
132
+ return '0'.times(length - string.length) + string;
133
+ },
134
+
135
+ toJSON: function() {
136
+ return isFinite(this) ? this.toString() : 'null';
137
+ }
138
+ });
139
+
140
+ Date.prototype.toJSON = function() {
141
+ return '"' + this.getFullYear() + '-' +
142
+ (this.getMonth() + 1).toPaddedString(2) + '-' +
143
+ this.getDate().toPaddedString(2) + 'T' +
144
+ this.getHours().toPaddedString(2) + ':' +
145
+ this.getMinutes().toPaddedString(2) + ':' +
146
+ this.getSeconds().toPaddedString(2) + '"';
147
+ };
148
+
149
+ var Try = {
150
+ these: function() {
151
+ var returnValue;
152
+
153
+ for (var i = 0, length = arguments.length; i < length; i++) {
154
+ var lambda = arguments[i];
155
+ try {
156
+ returnValue = lambda();
157
+ break;
158
+ } catch (e) {}
159
+ }
160
+
161
+ return returnValue;
162
+ }
163
+ }
164
+
165
+ /*--------------------------------------------------------------------------*/
166
+
167
+ var PeriodicalExecuter = Class.create();
168
+ PeriodicalExecuter.prototype = {
169
+ initialize: function(callback, frequency) {
170
+ this.callback = callback;
171
+ this.frequency = frequency;
172
+ this.currentlyExecuting = false;
173
+
174
+ this.registerCallback();
175
+ },
176
+
177
+ registerCallback: function() {
178
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
179
+ },
180
+
181
+ stop: function() {
182
+ if (!this.timer) return;
183
+ clearInterval(this.timer);
184
+ this.timer = null;
185
+ },
186
+
187
+ onTimerEvent: function() {
188
+ if (!this.currentlyExecuting) {
189
+ try {
190
+ this.currentlyExecuting = true;
191
+ this.callback(this);
192
+ } finally {
193
+ this.currentlyExecuting = false;
194
+ }
195
+ }
196
+ }
197
+ }
198
+ Object.extend(String, {
199
+ interpret: function(value) {
200
+ return value == null ? '' : String(value);
201
+ },
202
+ specialChar: {
203
+ '\b': '\\b',
204
+ '\t': '\\t',
205
+ '\n': '\\n',
206
+ '\f': '\\f',
207
+ '\r': '\\r',
208
+ '\\': '\\\\'
209
+ }
210
+ });
211
+
212
+ Object.extend(String.prototype, {
213
+ gsub: function(pattern, replacement) {
214
+ var result = '', source = this, match;
215
+ replacement = arguments.callee.prepareReplacement(replacement);
216
+
217
+ while (source.length > 0) {
218
+ if (match = source.match(pattern)) {
219
+ result += source.slice(0, match.index);
220
+ result += String.interpret(replacement(match));
221
+ source = source.slice(match.index + match[0].length);
222
+ } else {
223
+ result += source, source = '';
224
+ }
225
+ }
226
+ return result;
227
+ },
228
+
229
+ sub: function(pattern, replacement, count) {
230
+ replacement = this.gsub.prepareReplacement(replacement);
231
+ count = count === undefined ? 1 : count;
232
+
233
+ return this.gsub(pattern, function(match) {
234
+ if (--count < 0) return match[0];
235
+ return replacement(match);
236
+ });
237
+ },
238
+
239
+ scan: function(pattern, iterator) {
240
+ this.gsub(pattern, iterator);
241
+ return this;
242
+ },
243
+
244
+ truncate: function(length, truncation) {
245
+ length = length || 30;
246
+ truncation = truncation === undefined ? '...' : truncation;
247
+ return this.length > length ?
248
+ this.slice(0, length - truncation.length) + truncation : this;
249
+ },
250
+
251
+ strip: function() {
252
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
253
+ },
254
+
255
+ stripTags: function() {
256
+ return this.replace(/<\/?[^>]+>/gi, '');
257
+ },
258
+
259
+ stripScripts: function() {
260
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
261
+ },
262
+
263
+ extractScripts: function() {
264
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
265
+ var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
266
+ return (this.match(matchAll) || []).map(function(scriptTag) {
267
+ return (scriptTag.match(matchOne) || ['', ''])[1];
268
+ });
269
+ },
270
+
271
+ evalScripts: function() {
272
+ return this.extractScripts().map(function(script) { return eval(script) });
273
+ },
274
+
275
+ escapeHTML: function() {
276
+ var self = arguments.callee;
277
+ self.text.data = this;
278
+ return self.div.innerHTML;
279
+ },
280
+
281
+ unescapeHTML: function() {
282
+ var div = document.createElement('div');
283
+ div.innerHTML = this.stripTags();
284
+ return div.childNodes[0] ? (div.childNodes.length > 1 ?
285
+ $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
286
+ div.childNodes[0].nodeValue) : '';
287
+ },
288
+
289
+ toQueryParams: function(separator) {
290
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
291
+ if (!match) return {};
292
+
293
+ return match[1].split(separator || '&').inject({}, function(hash, pair) {
294
+ if ((pair = pair.split('='))[0]) {
295
+ var key = decodeURIComponent(pair.shift());
296
+ var value = pair.length > 1 ? pair.join('=') : pair[0];
297
+ if (value != undefined) value = decodeURIComponent(value);
298
+
299
+ if (key in hash) {
300
+ if (hash[key].constructor != Array) hash[key] = [hash[key]];
301
+ hash[key].push(value);
302
+ }
303
+ else hash[key] = value;
304
+ }
305
+ return hash;
306
+ });
307
+ },
308
+
309
+ toArray: function() {
310
+ return this.split('');
311
+ },
312
+
313
+ succ: function() {
314
+ return this.slice(0, this.length - 1) +
315
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
316
+ },
317
+
318
+ times: function(count) {
319
+ var result = '';
320
+ for (var i = 0; i < count; i++) result += this;
321
+ return result;
322
+ },
323
+
324
+ camelize: function() {
325
+ var parts = this.split('-'), len = parts.length;
326
+ if (len == 1) return parts[0];
327
+
328
+ var camelized = this.charAt(0) == '-'
329
+ ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
330
+ : parts[0];
331
+
332
+ for (var i = 1; i < len; i++)
333
+ camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
334
+
335
+ return camelized;
336
+ },
337
+
338
+ capitalize: function() {
339
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
340
+ },
341
+
342
+ underscore: function() {
343
+ return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
344
+ },
345
+
346
+ dasherize: function() {
347
+ return this.gsub(/_/,'-');
348
+ },
349
+
350
+ inspect: function(useDoubleQuotes) {
351
+ var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
352
+ var character = String.specialChar[match[0]];
353
+ return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
354
+ });
355
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
356
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
357
+ },
358
+
359
+ toJSON: function() {
360
+ return this.inspect(true);
361
+ },
362
+
363
+ unfilterJSON: function(filter) {
364
+ return this.sub(filter || Prototype.JSONFilter, '#{1}');
365
+ },
366
+
367
+ evalJSON: function(sanitize) {
368
+ var json = this.unfilterJSON();
369
+ try {
370
+ if (!sanitize || (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(json)))
371
+ return eval('(' + json + ')');
372
+ } catch (e) { }
373
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
374
+ },
375
+
376
+ include: function(pattern) {
377
+ return this.indexOf(pattern) > -1;
378
+ },
379
+
380
+ startsWith: function(pattern) {
381
+ return this.indexOf(pattern) === 0;
382
+ },
383
+
384
+ endsWith: function(pattern) {
385
+ var d = this.length - pattern.length;
386
+ return d >= 0 && this.lastIndexOf(pattern) === d;
387
+ },
388
+
389
+ empty: function() {
390
+ return this == '';
391
+ },
392
+
393
+ blank: function() {
394
+ return /^\s*$/.test(this);
395
+ }
396
+ });
397
+
398
+ if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
399
+ escapeHTML: function() {
400
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
401
+ },
402
+ unescapeHTML: function() {
403
+ return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
404
+ }
405
+ });
406
+
407
+ String.prototype.gsub.prepareReplacement = function(replacement) {
408
+ if (typeof replacement == 'function') return replacement;
409
+ var template = new Template(replacement);
410
+ return function(match) { return template.evaluate(match) };
411
+ }
412
+
413
+ String.prototype.parseQuery = String.prototype.toQueryParams;
414
+
415
+ Object.extend(String.prototype.escapeHTML, {
416
+ div: document.createElement('div'),
417
+ text: document.createTextNode('')
418
+ });
419
+
420
+ with (String.prototype.escapeHTML) div.appendChild(text);
421
+
422
+ var Template = Class.create();
423
+ Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
424
+ Template.prototype = {
425
+ initialize: function(template, pattern) {
426
+ this.template = template.toString();
427
+ this.pattern = pattern || Template.Pattern;
428
+ },
429
+
430
+ evaluate: function(object) {
431
+ return this.template.gsub(this.pattern, function(match) {
432
+ var before = match[1];
433
+ if (before == '\\') return match[2];
434
+ return before + String.interpret(object[match[3]]);
435
+ });
436
+ }
437
+ }
438
+
439
+ var $break = {}, $continue = new Error('"throw $continue" is deprecated, use "return" instead');
440
+
441
+ var Enumerable = {
442
+ each: function(iterator) {
443
+ var index = 0;
444
+ try {
445
+ this._each(function(value) {
446
+ iterator(value, index++);
447
+ });
448
+ } catch (e) {
449
+ if (e != $break) throw e;
450
+ }
451
+ return this;
452
+ },
453
+
454
+ eachSlice: function(number, iterator) {
455
+ var index = -number, slices = [], array = this.toArray();
456
+ while ((index += number) < array.length)
457
+ slices.push(array.slice(index, index+number));
458
+ return slices.map(iterator);
459
+ },
460
+
461
+ all: function(iterator) {
462
+ var result = true;
463
+ this.each(function(value, index) {
464
+ result = result && !!(iterator || Prototype.K)(value, index);
465
+ if (!result) throw $break;
466
+ });
467
+ return result;
468
+ },
469
+
470
+ any: function(iterator) {
471
+ var result = false;
472
+ this.each(function(value, index) {
473
+ if (result = !!(iterator || Prototype.K)(value, index))
474
+ throw $break;
475
+ });
476
+ return result;
477
+ },
478
+
479
+ collect: function(iterator) {
480
+ var results = [];
481
+ this.each(function(value, index) {
482
+ results.push((iterator || Prototype.K)(value, index));
483
+ });
484
+ return results;
485
+ },
486
+
487
+ detect: function(iterator) {
488
+ var result;
489
+ this.each(function(value, index) {
490
+ if (iterator(value, index)) {
491
+ result = value;
492
+ throw $break;
493
+ }
494
+ });
495
+ return result;
496
+ },
497
+
498
+ findAll: function(iterator) {
499
+ var results = [];
500
+ this.each(function(value, index) {
501
+ if (iterator(value, index))
502
+ results.push(value);
503
+ });
504
+ return results;
505
+ },
506
+
507
+ grep: function(pattern, iterator) {
508
+ var results = [];
509
+ this.each(function(value, index) {
510
+ var stringValue = value.toString();
511
+ if (stringValue.match(pattern))
512
+ results.push((iterator || Prototype.K)(value, index));
513
+ })
514
+ return results;
515
+ },
516
+
517
+ include: function(object) {
518
+ var found = false;
519
+ this.each(function(value) {
520
+ if (value == object) {
521
+ found = true;
522
+ throw $break;
523
+ }
524
+ });
525
+ return found;
526
+ },
527
+
528
+ inGroupsOf: function(number, fillWith) {
529
+ fillWith = fillWith === undefined ? null : fillWith;
530
+ return this.eachSlice(number, function(slice) {
531
+ while(slice.length < number) slice.push(fillWith);
532
+ return slice;
533
+ });
534
+ },
535
+
536
+ inject: function(memo, iterator) {
537
+ this.each(function(value, index) {
538
+ memo = iterator(memo, value, index);
539
+ });
540
+ return memo;
541
+ },
542
+
543
+ invoke: function(method) {
544
+ var args = $A(arguments).slice(1);
545
+ return this.map(function(value) {
546
+ return value[method].apply(value, args);
547
+ });
548
+ },
549
+
550
+ max: function(iterator) {
551
+ var result;
552
+ this.each(function(value, index) {
553
+ value = (iterator || Prototype.K)(value, index);
554
+ if (result == undefined || value >= result)
555
+ result = value;
556
+ });
557
+ return result;
558
+ },
559
+
560
+ min: function(iterator) {
561
+ var result;
562
+ this.each(function(value, index) {
563
+ value = (iterator || Prototype.K)(value, index);
564
+ if (result == undefined || value < result)
565
+ result = value;
566
+ });
567
+ return result;
568
+ },
569
+
570
+ partition: function(iterator) {
571
+ var trues = [], falses = [];
572
+ this.each(function(value, index) {
573
+ ((iterator || Prototype.K)(value, index) ?
574
+ trues : falses).push(value);
575
+ });
576
+ return [trues, falses];
577
+ },
578
+
579
+ pluck: function(property) {
580
+ var results = [];
581
+ this.each(function(value, index) {
582
+ results.push(value[property]);
583
+ });
584
+ return results;
585
+ },
586
+
587
+ reject: function(iterator) {
588
+ var results = [];
589
+ this.each(function(value, index) {
590
+ if (!iterator(value, index))
591
+ results.push(value);
592
+ });
593
+ return results;
594
+ },
595
+
596
+ sortBy: function(iterator) {
597
+ return this.map(function(value, index) {
598
+ return {value: value, criteria: iterator(value, index)};
599
+ }).sort(function(left, right) {
600
+ var a = left.criteria, b = right.criteria;
601
+ return a < b ? -1 : a > b ? 1 : 0;
602
+ }).pluck('value');
603
+ },
604
+
605
+ toArray: function() {
606
+ return this.map();
607
+ },
608
+
609
+ zip: function() {
610
+ var iterator = Prototype.K, args = $A(arguments);
611
+ if (typeof args.last() == 'function')
612
+ iterator = args.pop();
613
+
614
+ var collections = [this].concat(args).map($A);
615
+ return this.map(function(value, index) {
616
+ return iterator(collections.pluck(index));
617
+ });
618
+ },
619
+
620
+ size: function() {
621
+ return this.toArray().length;
622
+ },
623
+
624
+ inspect: function() {
625
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
626
+ }
627
+ }
628
+
629
+ Object.extend(Enumerable, {
630
+ map: Enumerable.collect,
631
+ find: Enumerable.detect,
632
+ select: Enumerable.findAll,
633
+ member: Enumerable.include,
634
+ entries: Enumerable.toArray
635
+ });
636
+ var $A = Array.from = function(iterable) {
637
+ if (!iterable) return [];
638
+ if (iterable.toArray) {
639
+ return iterable.toArray();
640
+ } else {
641
+ var results = [];
642
+ for (var i = 0, length = iterable.length; i < length; i++)
643
+ results.push(iterable[i]);
644
+ return results;
645
+ }
646
+ }
647
+
648
+ if (Prototype.Browser.WebKit) {
649
+ $A = Array.from = function(iterable) {
650
+ if (!iterable) return [];
651
+ if (!(typeof iterable == 'function' && iterable == '[object NodeList]') &&
652
+ iterable.toArray) {
653
+ return iterable.toArray();
654
+ } else {
655
+ var results = [];
656
+ for (var i = 0, length = iterable.length; i < length; i++)
657
+ results.push(iterable[i]);
658
+ return results;
659
+ }
660
+ }
661
+ }
662
+
663
+ Object.extend(Array.prototype, Enumerable);
664
+
665
+ if (!Array.prototype._reverse)
666
+ Array.prototype._reverse = Array.prototype.reverse;
667
+
668
+ Object.extend(Array.prototype, {
669
+ _each: function(iterator) {
670
+ for (var i = 0, length = this.length; i < length; i++)
671
+ iterator(this[i]);
672
+ },
673
+
674
+ clear: function() {
675
+ this.length = 0;
676
+ return this;
677
+ },
678
+
679
+ first: function() {
680
+ return this[0];
681
+ },
682
+
683
+ last: function() {
684
+ return this[this.length - 1];
685
+ },
686
+
687
+ compact: function() {
688
+ return this.select(function(value) {
689
+ return value != null;
690
+ });
691
+ },
692
+
693
+ flatten: function() {
694
+ return this.inject([], function(array, value) {
695
+ return array.concat(value && value.constructor == Array ?
696
+ value.flatten() : [value]);
697
+ });
698
+ },
699
+
700
+ without: function() {
701
+ var values = $A(arguments);
702
+ return this.select(function(value) {
703
+ return !values.include(value);
704
+ });
705
+ },
706
+
707
+ indexOf: function(object) {
708
+ for (var i = 0, length = this.length; i < length; i++)
709
+ if (this[i] == object) return i;
710
+ return -1;
711
+ },
712
+
713
+ reverse: function(inline) {
714
+ return (inline !== false ? this : this.toArray())._reverse();
715
+ },
716
+
717
+ reduce: function() {
718
+ return this.length > 1 ? this : this[0];
719
+ },
720
+
721
+ uniq: function(sorted) {
722
+ return this.inject([], function(array, value, index) {
723
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
724
+ array.push(value);
725
+ return array;
726
+ });
727
+ },
728
+
729
+ clone: function() {
730
+ return [].concat(this);
731
+ },
732
+
733
+ size: function() {
734
+ return this.length;
735
+ },
736
+
737
+ inspect: function() {
738
+ return '[' + this.map(Object.inspect).join(', ') + ']';
739
+ },
740
+
741
+ toJSON: function() {
742
+ var results = [];
743
+ this.each(function(object) {
744
+ var value = Object.toJSON(object);
745
+ if (value !== undefined) results.push(value);
746
+ });
747
+ return '[' + results.join(', ') + ']';
748
+ }
749
+ });
750
+
751
+ Array.prototype.toArray = Array.prototype.clone;
752
+
753
+ function $w(string) {
754
+ string = string.strip();
755
+ return string ? string.split(/\s+/) : [];
756
+ }
757
+
758
+ if (Prototype.Browser.Opera){
759
+ Array.prototype.concat = function() {
760
+ var array = [];
761
+ for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
762
+ for (var i = 0, length = arguments.length; i < length; i++) {
763
+ if (arguments[i].constructor == Array) {
764
+ for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
765
+ array.push(arguments[i][j]);
766
+ } else {
767
+ array.push(arguments[i]);
768
+ }
769
+ }
770
+ return array;
771
+ }
772
+ }
773
+ var Hash = function(object) {
774
+ if (object instanceof Hash) this.merge(object);
775
+ else Object.extend(this, object || {});
776
+ };
777
+
778
+ Object.extend(Hash, {
779
+ toQueryString: function(obj) {
780
+ var parts = [];
781
+ parts.add = arguments.callee.addPair;
782
+
783
+ this.prototype._each.call(obj, function(pair) {
784
+ if (!pair.key) return;
785
+ var value = pair.value;
786
+
787
+ if (value && typeof value == 'object') {
788
+ if (value.constructor == Array) value.each(function(value) {
789
+ parts.add(pair.key, value);
790
+ });
791
+ return;
792
+ }
793
+ parts.add(pair.key, value);
794
+ });
795
+
796
+ return parts.join('&');
797
+ },
798
+
799
+ toJSON: function(object) {
800
+ var results = [];
801
+ this.prototype._each.call(object, function(pair) {
802
+ var value = Object.toJSON(pair.value);
803
+ if (value !== undefined) results.push(pair.key.toJSON() + ': ' + value);
804
+ });
805
+ return '{' + results.join(', ') + '}';
806
+ }
807
+ });
808
+
809
+ Hash.toQueryString.addPair = function(key, value, prefix) {
810
+ key = encodeURIComponent(key);
811
+ if (value === undefined) this.push(key);
812
+ else this.push(key + '=' + (value == null ? '' : encodeURIComponent(value)));
813
+ }
814
+
815
+ Object.extend(Hash.prototype, Enumerable);
816
+ Object.extend(Hash.prototype, {
817
+ _each: function(iterator) {
818
+ for (var key in this) {
819
+ var value = this[key];
820
+ if (value && value == Hash.prototype[key]) continue;
821
+
822
+ var pair = [key, value];
823
+ pair.key = key;
824
+ pair.value = value;
825
+ iterator(pair);
826
+ }
827
+ },
828
+
829
+ keys: function() {
830
+ return this.pluck('key');
831
+ },
832
+
833
+ values: function() {
834
+ return this.pluck('value');
835
+ },
836
+
837
+ merge: function(hash) {
838
+ return $H(hash).inject(this, function(mergedHash, pair) {
839
+ mergedHash[pair.key] = pair.value;
840
+ return mergedHash;
841
+ });
842
+ },
843
+
844
+ remove: function() {
845
+ var result;
846
+ for(var i = 0, length = arguments.length; i < length; i++) {
847
+ var value = this[arguments[i]];
848
+ if (value !== undefined){
849
+ if (result === undefined) result = value;
850
+ else {
851
+ if (result.constructor != Array) result = [result];
852
+ result.push(value)
853
+ }
854
+ }
855
+ delete this[arguments[i]];
856
+ }
857
+ return result;
858
+ },
859
+
860
+ toQueryString: function() {
861
+ return Hash.toQueryString(this);
862
+ },
863
+
864
+ inspect: function() {
865
+ return '#<Hash:{' + this.map(function(pair) {
866
+ return pair.map(Object.inspect).join(': ');
867
+ }).join(', ') + '}>';
868
+ },
869
+
870
+ toJSON: function() {
871
+ return Hash.toJSON(this);
872
+ }
873
+ });
874
+
875
+ function $H(object) {
876
+ if (object instanceof Hash) return object;
877
+ return new Hash(object);
878
+ };
879
+
880
+ // Safari iterates over shadowed properties
881
+ if (function() {
882
+ var i = 0, Test = function(value) { this.key = value };
883
+ Test.prototype.key = 'foo';
884
+ for (var property in new Test('bar')) i++;
885
+ return i > 1;
886
+ }()) Hash.prototype._each = function(iterator) {
887
+ var cache = [];
888
+ for (var key in this) {
889
+ var value = this[key];
890
+ if ((value && value == Hash.prototype[key]) || cache.include(key)) continue;
891
+ cache.push(key);
892
+ var pair = [key, value];
893
+ pair.key = key;
894
+ pair.value = value;
895
+ iterator(pair);
896
+ }
897
+ };
898
+ ObjectRange = Class.create();
899
+ Object.extend(ObjectRange.prototype, Enumerable);
900
+ Object.extend(ObjectRange.prototype, {
901
+ initialize: function(start, end, exclusive) {
902
+ this.start = start;
903
+ this.end = end;
904
+ this.exclusive = exclusive;
905
+ },
906
+
907
+ _each: function(iterator) {
908
+ var value = this.start;
909
+ while (this.include(value)) {
910
+ iterator(value);
911
+ value = value.succ();
912
+ }
913
+ },
914
+
915
+ include: function(value) {
916
+ if (value < this.start)
917
+ return false;
918
+ if (this.exclusive)
919
+ return value < this.end;
920
+ return value <= this.end;
921
+ }
922
+ });
923
+
924
+ var $R = function(start, end, exclusive) {
925
+ return new ObjectRange(start, end, exclusive);
926
+ }
927
+
928
+ var Ajax = {
929
+ getTransport: function() {
930
+ return Try.these(
931
+ function() {return new XMLHttpRequest()},
932
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
933
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
934
+ ) || false;
935
+ },
936
+
937
+ activeRequestCount: 0
938
+ }
939
+
940
+ Ajax.Responders = {
941
+ responders: [],
942
+
943
+ _each: function(iterator) {
944
+ this.responders._each(iterator);
945
+ },
946
+
947
+ register: function(responder) {
948
+ if (!this.include(responder))
949
+ this.responders.push(responder);
950
+ },
951
+
952
+ unregister: function(responder) {
953
+ this.responders = this.responders.without(responder);
954
+ },
955
+
956
+ dispatch: function(callback, request, transport, json) {
957
+ this.each(function(responder) {
958
+ if (typeof responder[callback] == 'function') {
959
+ try {
960
+ responder[callback].apply(responder, [request, transport, json]);
961
+ } catch (e) {}
962
+ }
963
+ });
964
+ }
965
+ };
966
+
967
+ Object.extend(Ajax.Responders, Enumerable);
968
+
969
+ Ajax.Responders.register({
970
+ onCreate: function() {
971
+ Ajax.activeRequestCount++;
972
+ },
973
+ onComplete: function() {
974
+ Ajax.activeRequestCount--;
975
+ }
976
+ });
977
+
978
+ Ajax.Base = function() {};
979
+ Ajax.Base.prototype = {
980
+ setOptions: function(options) {
981
+ this.options = {
982
+ method: 'post',
983
+ asynchronous: true,
984
+ contentType: 'application/x-www-form-urlencoded',
985
+ encoding: 'UTF-8',
986
+ parameters: ''
987
+ }
988
+ Object.extend(this.options, options || {});
989
+
990
+ this.options.method = this.options.method.toLowerCase();
991
+ if (typeof this.options.parameters == 'string')
992
+ this.options.parameters = this.options.parameters.toQueryParams();
993
+ }
994
+ }
995
+
996
+ Ajax.Request = Class.create();
997
+ Ajax.Request.Events =
998
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
999
+
1000
+ Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
1001
+ _complete: false,
1002
+
1003
+ initialize: function(url, options) {
1004
+ this.transport = Ajax.getTransport();
1005
+ this.setOptions(options);
1006
+ this.request(url);
1007
+ },
1008
+
1009
+ request: function(url) {
1010
+ this.url = url;
1011
+ this.method = this.options.method;
1012
+ var params = Object.clone(this.options.parameters);
1013
+
1014
+ if (!['get', 'post'].include(this.method)) {
1015
+ // simulate other verbs over post
1016
+ params['_method'] = this.method;
1017
+ this.method = 'post';
1018
+ }
1019
+
1020
+ this.parameters = params;
1021
+
1022
+ if (params = Hash.toQueryString(params)) {
1023
+ // when GET, append parameters to URL
1024
+ if (this.method == 'get')
1025
+ this.url += (this.url.include('?') ? '&' : '?') + params;
1026
+ else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
1027
+ params += '&_=';
1028
+ }
1029
+
1030
+ try {
1031
+ if (this.options.onCreate) this.options.onCreate(this.transport);
1032
+ Ajax.Responders.dispatch('onCreate', this, this.transport);
1033
+
1034
+ this.transport.open(this.method.toUpperCase(), this.url,
1035
+ this.options.asynchronous);
1036
+
1037
+ if (this.options.asynchronous)
1038
+ setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);
1039
+
1040
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
1041
+ this.setRequestHeaders();
1042
+
1043
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
1044
+ this.transport.send(this.body);
1045
+
1046
+ /* Force Firefox to handle ready state 4 for synchronous requests */
1047
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
1048
+ this.onStateChange();
1049
+
1050
+ }
1051
+ catch (e) {
1052
+ this.dispatchException(e);
1053
+ }
1054
+ },
1055
+
1056
+ onStateChange: function() {
1057
+ var readyState = this.transport.readyState;
1058
+ if (readyState > 1 && !((readyState == 4) && this._complete))
1059
+ this.respondToReadyState(this.transport.readyState);
1060
+ },
1061
+
1062
+ setRequestHeaders: function() {
1063
+ var headers = {
1064
+ 'X-Requested-With': 'XMLHttpRequest',
1065
+ 'X-Prototype-Version': Prototype.Version,
1066
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
1067
+ };
1068
+
1069
+ if (this.method == 'post') {
1070
+ headers['Content-type'] = this.options.contentType +
1071
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
1072
+
1073
+ /* Force "Connection: close" for older Mozilla browsers to work
1074
+ * around a bug where XMLHttpRequest sends an incorrect
1075
+ * Content-length header. See Mozilla Bugzilla #246651.
1076
+ */
1077
+ if (this.transport.overrideMimeType &&
1078
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
1079
+ headers['Connection'] = 'close';
1080
+ }
1081
+
1082
+ // user-defined headers
1083
+ if (typeof this.options.requestHeaders == 'object') {
1084
+ var extras = this.options.requestHeaders;
1085
+
1086
+ if (typeof extras.push == 'function')
1087
+ for (var i = 0, length = extras.length; i < length; i += 2)
1088
+ headers[extras[i]] = extras[i+1];
1089
+ else
1090
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
1091
+ }
1092
+
1093
+ for (var name in headers)
1094
+ this.transport.setRequestHeader(name, headers[name]);
1095
+ },
1096
+
1097
+ success: function() {
1098
+ return !this.transport.status
1099
+ || (this.transport.status >= 200 && this.transport.status < 300);
1100
+ },
1101
+
1102
+ respondToReadyState: function(readyState) {
1103
+ var state = Ajax.Request.Events[readyState];
1104
+ var transport = this.transport, json = this.evalJSON();
1105
+
1106
+ if (state == 'Complete') {
1107
+ try {
1108
+ this._complete = true;
1109
+ (this.options['on' + this.transport.status]
1110
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
1111
+ || Prototype.emptyFunction)(transport, json);
1112
+ } catch (e) {
1113
+ this.dispatchException(e);
1114
+ }
1115
+
1116
+ var contentType = this.getHeader('Content-type');
1117
+ if (contentType && contentType.strip().
1118
+ match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
1119
+ this.evalResponse();
1120
+ }
1121
+
1122
+ try {
1123
+ (this.options['on' + state] || Prototype.emptyFunction)(transport, json);
1124
+ Ajax.Responders.dispatch('on' + state, this, transport, json);
1125
+ } catch (e) {
1126
+ this.dispatchException(e);
1127
+ }
1128
+
1129
+ if (state == 'Complete') {
1130
+ // avoid memory leak in MSIE: clean up
1131
+ this.transport.onreadystatechange = Prototype.emptyFunction;
1132
+ }
1133
+ },
1134
+
1135
+ getHeader: function(name) {
1136
+ try {
1137
+ return this.transport.getResponseHeader(name);
1138
+ } catch (e) { return null }
1139
+ },
1140
+
1141
+ evalJSON: function() {
1142
+ try {
1143
+ var json = this.getHeader('X-JSON');
1144
+ return json ? json.evalJSON() : null;
1145
+ } catch (e) { return null }
1146
+ },
1147
+
1148
+ evalResponse: function() {
1149
+ try {
1150
+ return eval((this.transport.responseText || '').unfilterJSON());
1151
+ } catch (e) {
1152
+ this.dispatchException(e);
1153
+ }
1154
+ },
1155
+
1156
+ dispatchException: function(exception) {
1157
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
1158
+ Ajax.Responders.dispatch('onException', this, exception);
1159
+ }
1160
+ });
1161
+
1162
+ Ajax.Updater = Class.create();
1163
+
1164
+ Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
1165
+ initialize: function(container, url, options) {
1166
+ this.container = {
1167
+ success: (container.success || container),
1168
+ failure: (container.failure || (container.success ? null : container))
1169
+ }
1170
+
1171
+ this.transport = Ajax.getTransport();
1172
+ this.setOptions(options);
1173
+
1174
+ var onComplete = this.options.onComplete || Prototype.emptyFunction;
1175
+ this.options.onComplete = (function(transport, param) {
1176
+ this.updateContent();
1177
+ onComplete(transport, param);
1178
+ }).bind(this);
1179
+
1180
+ this.request(url);
1181
+ },
1182
+
1183
+ updateContent: function() {
1184
+ var receiver = this.container[this.success() ? 'success' : 'failure'];
1185
+ var response = this.transport.responseText;
1186
+
1187
+ if (!this.options.evalScripts) response = response.stripScripts();
1188
+
1189
+ if (receiver = $(receiver)) {
1190
+ if (this.options.insertion)
1191
+ new this.options.insertion(receiver, response);
1192
+ else
1193
+ receiver.update(response);
1194
+ }
1195
+
1196
+ if (this.success()) {
1197
+ if (this.onComplete)
1198
+ setTimeout(this.onComplete.bind(this), 10);
1199
+ }
1200
+ }
1201
+ });
1202
+
1203
+ Ajax.PeriodicalUpdater = Class.create();
1204
+ Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
1205
+ initialize: function(container, url, options) {
1206
+ this.setOptions(options);
1207
+ this.onComplete = this.options.onComplete;
1208
+
1209
+ this.frequency = (this.options.frequency || 2);
1210
+ this.decay = (this.options.decay || 1);
1211
+
1212
+ this.updater = {};
1213
+ this.container = container;
1214
+ this.url = url;
1215
+
1216
+ this.start();
1217
+ },
1218
+
1219
+ start: function() {
1220
+ this.options.onComplete = this.updateComplete.bind(this);
1221
+ this.onTimerEvent();
1222
+ },
1223
+
1224
+ stop: function() {
1225
+ this.updater.options.onComplete = undefined;
1226
+ clearTimeout(this.timer);
1227
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
1228
+ },
1229
+
1230
+ updateComplete: function(request) {
1231
+ if (this.options.decay) {
1232
+ this.decay = (request.responseText == this.lastText ?
1233
+ this.decay * this.options.decay : 1);
1234
+
1235
+ this.lastText = request.responseText;
1236
+ }
1237
+ this.timer = setTimeout(this.onTimerEvent.bind(this),
1238
+ this.decay * this.frequency * 1000);
1239
+ },
1240
+
1241
+ onTimerEvent: function() {
1242
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
1243
+ }
1244
+ });
1245
+ function $(element) {
1246
+ if (arguments.length > 1) {
1247
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
1248
+ elements.push($(arguments[i]));
1249
+ return elements;
1250
+ }
1251
+ if (typeof element == 'string')
1252
+ element = document.getElementById(element);
1253
+ return Element.extend(element);
1254
+ }
1255
+
1256
+ if (Prototype.BrowserFeatures.XPath) {
1257
+ document._getElementsByXPath = function(expression, parentElement) {
1258
+ var results = [];
1259
+ var query = document.evaluate(expression, $(parentElement) || document,
1260
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
1261
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
1262
+ results.push(query.snapshotItem(i));
1263
+ return results;
1264
+ };
1265
+
1266
+ document.getElementsByClassName = function(className, parentElement) {
1267
+ var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
1268
+ return document._getElementsByXPath(q, parentElement);
1269
+ }
1270
+
1271
+ } else document.getElementsByClassName = function(className, parentElement) {
1272
+ var children = ($(parentElement) || document.body).getElementsByTagName('*');
1273
+ var elements = [], child;
1274
+ for (var i = 0, length = children.length; i < length; i++) {
1275
+ child = children[i];
1276
+ if (Element.hasClassName(child, className))
1277
+ elements.push(Element.extend(child));
1278
+ }
1279
+ return elements;
1280
+ };
1281
+
1282
+ /*--------------------------------------------------------------------------*/
1283
+
1284
+ if (!window.Element) var Element = {};
1285
+
1286
+ Element.extend = function(element) {
1287
+ var F = Prototype.BrowserFeatures;
1288
+ if (!element || !element.tagName || element.nodeType == 3 ||
1289
+ element._extended || F.SpecificElementExtensions || element == window)
1290
+ return element;
1291
+
1292
+ var methods = {}, tagName = element.tagName, cache = Element.extend.cache,
1293
+ T = Element.Methods.ByTag;
1294
+
1295
+ // extend methods for all tags (Safari doesn't need this)
1296
+ if (!F.ElementExtensions) {
1297
+ Object.extend(methods, Element.Methods),
1298
+ Object.extend(methods, Element.Methods.Simulated);
1299
+ }
1300
+
1301
+ // extend methods for specific tags
1302
+ if (T[tagName]) Object.extend(methods, T[tagName]);
1303
+
1304
+ for (var property in methods) {
1305
+ var value = methods[property];
1306
+ if (typeof value == 'function' && !(property in element))
1307
+ element[property] = cache.findOrStore(value);
1308
+ }
1309
+
1310
+ element._extended = Prototype.emptyFunction;
1311
+ return element;
1312
+ };
1313
+
1314
+ Element.extend.cache = {
1315
+ findOrStore: function(value) {
1316
+ return this[value] = this[value] || function() {
1317
+ return value.apply(null, [this].concat($A(arguments)));
1318
+ }
1319
+ }
1320
+ };
1321
+
1322
+ Element.Methods = {
1323
+ visible: function(element) {
1324
+ return $(element).style.display != 'none';
1325
+ },
1326
+
1327
+ toggle: function(element) {
1328
+ element = $(element);
1329
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
1330
+ return element;
1331
+ },
1332
+
1333
+ hide: function(element) {
1334
+ $(element).style.display = 'none';
1335
+ return element;
1336
+ },
1337
+
1338
+ show: function(element) {
1339
+ $(element).style.display = '';
1340
+ return element;
1341
+ },
1342
+
1343
+ remove: function(element) {
1344
+ element = $(element);
1345
+ element.parentNode.removeChild(element);
1346
+ return element;
1347
+ },
1348
+
1349
+ update: function(element, html) {
1350
+ html = typeof html == 'undefined' ? '' : html.toString();
1351
+ $(element).innerHTML = html.stripScripts();
1352
+ setTimeout(function() {html.evalScripts()}, 10);
1353
+ return element;
1354
+ },
1355
+
1356
+ replace: function(element, html) {
1357
+ element = $(element);
1358
+ html = typeof html == 'undefined' ? '' : html.toString();
1359
+ if (element.outerHTML) {
1360
+ element.outerHTML = html.stripScripts();
1361
+ } else {
1362
+ var range = element.ownerDocument.createRange();
1363
+ range.selectNodeContents(element);
1364
+ element.parentNode.replaceChild(
1365
+ range.createContextualFragment(html.stripScripts()), element);
1366
+ }
1367
+ setTimeout(function() {html.evalScripts()}, 10);
1368
+ return element;
1369
+ },
1370
+
1371
+ inspect: function(element) {
1372
+ element = $(element);
1373
+ var result = '<' + element.tagName.toLowerCase();
1374
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
1375
+ var property = pair.first(), attribute = pair.last();
1376
+ var value = (element[property] || '').toString();
1377
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
1378
+ });
1379
+ return result + '>';
1380
+ },
1381
+
1382
+ recursivelyCollect: function(element, property) {
1383
+ element = $(element);
1384
+ var elements = [];
1385
+ while (element = element[property])
1386
+ if (element.nodeType == 1)
1387
+ elements.push(Element.extend(element));
1388
+ return elements;
1389
+ },
1390
+
1391
+ ancestors: function(element) {
1392
+ return $(element).recursivelyCollect('parentNode');
1393
+ },
1394
+
1395
+ descendants: function(element) {
1396
+ return $A($(element).getElementsByTagName('*')).each(Element.extend);
1397
+ },
1398
+
1399
+ firstDescendant: function(element) {
1400
+ element = $(element).firstChild;
1401
+ while (element && element.nodeType != 1) element = element.nextSibling;
1402
+ return $(element);
1403
+ },
1404
+
1405
+ immediateDescendants: function(element) {
1406
+ if (!(element = $(element).firstChild)) return [];
1407
+ while (element && element.nodeType != 1) element = element.nextSibling;
1408
+ if (element) return [element].concat($(element).nextSiblings());
1409
+ return [];
1410
+ },
1411
+
1412
+ previousSiblings: function(element) {
1413
+ return $(element).recursivelyCollect('previousSibling');
1414
+ },
1415
+
1416
+ nextSiblings: function(element) {
1417
+ return $(element).recursivelyCollect('nextSibling');
1418
+ },
1419
+
1420
+ siblings: function(element) {
1421
+ element = $(element);
1422
+ return element.previousSiblings().reverse().concat(element.nextSiblings());
1423
+ },
1424
+
1425
+ match: function(element, selector) {
1426
+ if (typeof selector == 'string')
1427
+ selector = new Selector(selector);
1428
+ return selector.match($(element));
1429
+ },
1430
+
1431
+ up: function(element, expression, index) {
1432
+ element = $(element);
1433
+ if (arguments.length == 1) return $(element.parentNode);
1434
+ var ancestors = element.ancestors();
1435
+ return expression ? Selector.findElement(ancestors, expression, index) :
1436
+ ancestors[index || 0];
1437
+ },
1438
+
1439
+ down: function(element, expression, index) {
1440
+ element = $(element);
1441
+ if (arguments.length == 1) return element.firstDescendant();
1442
+ var descendants = element.descendants();
1443
+ return expression ? Selector.findElement(descendants, expression, index) :
1444
+ descendants[index || 0];
1445
+ },
1446
+
1447
+ previous: function(element, expression, index) {
1448
+ element = $(element);
1449
+ if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
1450
+ var previousSiblings = element.previousSiblings();
1451
+ return expression ? Selector.findElement(previousSiblings, expression, index) :
1452
+ previousSiblings[index || 0];
1453
+ },
1454
+
1455
+ next: function(element, expression, index) {
1456
+ element = $(element);
1457
+ if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
1458
+ var nextSiblings = element.nextSiblings();
1459
+ return expression ? Selector.findElement(nextSiblings, expression, index) :
1460
+ nextSiblings[index || 0];
1461
+ },
1462
+
1463
+ getElementsBySelector: function() {
1464
+ var args = $A(arguments), element = $(args.shift());
1465
+ return Selector.findChildElements(element, args);
1466
+ },
1467
+
1468
+ getElementsByClassName: function(element, className) {
1469
+ return document.getElementsByClassName(className, element);
1470
+ },
1471
+
1472
+ readAttribute: function(element, name) {
1473
+ element = $(element);
1474
+ if (Prototype.Browser.IE) {
1475
+ if (!element.attributes) return null;
1476
+ var t = Element._attributeTranslations;
1477
+ if (t.values[name]) return t.values[name](element, name);
1478
+ if (t.names[name]) name = t.names[name];
1479
+ var attribute = element.attributes[name];
1480
+ return attribute ? attribute.nodeValue : null;
1481
+ }
1482
+ return element.getAttribute(name);
1483
+ },
1484
+
1485
+ getHeight: function(element) {
1486
+ return $(element).getDimensions().height;
1487
+ },
1488
+
1489
+ getWidth: function(element) {
1490
+ return $(element).getDimensions().width;
1491
+ },
1492
+
1493
+ classNames: function(element) {
1494
+ return new Element.ClassNames(element);
1495
+ },
1496
+
1497
+ hasClassName: function(element, className) {
1498
+ if (!(element = $(element))) return;
1499
+ var elementClassName = element.className;
1500
+ if (elementClassName.length == 0) return false;
1501
+ if (elementClassName == className ||
1502
+ elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
1503
+ return true;
1504
+ return false;
1505
+ },
1506
+
1507
+ addClassName: function(element, className) {
1508
+ if (!(element = $(element))) return;
1509
+ Element.classNames(element).add(className);
1510
+ return element;
1511
+ },
1512
+
1513
+ removeClassName: function(element, className) {
1514
+ if (!(element = $(element))) return;
1515
+ Element.classNames(element).remove(className);
1516
+ return element;
1517
+ },
1518
+
1519
+ toggleClassName: function(element, className) {
1520
+ if (!(element = $(element))) return;
1521
+ Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className);
1522
+ return element;
1523
+ },
1524
+
1525
+ observe: function() {
1526
+ Event.observe.apply(Event, arguments);
1527
+ return $A(arguments).first();
1528
+ },
1529
+
1530
+ stopObserving: function() {
1531
+ Event.stopObserving.apply(Event, arguments);
1532
+ return $A(arguments).first();
1533
+ },
1534
+
1535
+ // removes whitespace-only text node children
1536
+ cleanWhitespace: function(element) {
1537
+ element = $(element);
1538
+ var node = element.firstChild;
1539
+ while (node) {
1540
+ var nextNode = node.nextSibling;
1541
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
1542
+ element.removeChild(node);
1543
+ node = nextNode;
1544
+ }
1545
+ return element;
1546
+ },
1547
+
1548
+ empty: function(element) {
1549
+ return $(element).innerHTML.blank();
1550
+ },
1551
+
1552
+ descendantOf: function(element, ancestor) {
1553
+ element = $(element), ancestor = $(ancestor);
1554
+ while (element = element.parentNode)
1555
+ if (element == ancestor) return true;
1556
+ return false;
1557
+ },
1558
+
1559
+ scrollTo: function(element) {
1560
+ element = $(element);
1561
+ var pos = Position.cumulativeOffset(element);
1562
+ window.scrollTo(pos[0], pos[1]);
1563
+ return element;
1564
+ },
1565
+
1566
+ getStyle: function(element, style) {
1567
+ element = $(element);
1568
+ style = style == 'float' ? 'cssFloat' : style.camelize();
1569
+ var value = element.style[style];
1570
+ if (!value) {
1571
+ var css = document.defaultView.getComputedStyle(element, null);
1572
+ value = css ? css[style] : null;
1573
+ }
1574
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
1575
+ return value == 'auto' ? null : value;
1576
+ },
1577
+
1578
+ getOpacity: function(element) {
1579
+ return $(element).getStyle('opacity');
1580
+ },
1581
+
1582
+ setStyle: function(element, styles, camelized) {
1583
+ element = $(element);
1584
+ var elementStyle = element.style;
1585
+
1586
+ for (var property in styles)
1587
+ if (property == 'opacity') element.setOpacity(styles[property])
1588
+ else
1589
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
1590
+ (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
1591
+ (camelized ? property : property.camelize())] = styles[property];
1592
+
1593
+ return element;
1594
+ },
1595
+
1596
+ setOpacity: function(element, value) {
1597
+ element = $(element);
1598
+ element.style.opacity = (value == 1 || value === '') ? '' :
1599
+ (value < 0.00001) ? 0 : value;
1600
+ return element;
1601
+ },
1602
+
1603
+ getDimensions: function(element) {
1604
+ element = $(element);
1605
+ var display = $(element).getStyle('display');
1606
+ if (display != 'none' && display != null) // Safari bug
1607
+ return {width: element.offsetWidth, height: element.offsetHeight};
1608
+
1609
+ // All *Width and *Height properties give 0 on elements with display none,
1610
+ // so enable the element temporarily
1611
+ var els = element.style;
1612
+ var originalVisibility = els.visibility;
1613
+ var originalPosition = els.position;
1614
+ var originalDisplay = els.display;
1615
+ els.visibility = 'hidden';
1616
+ els.position = 'absolute';
1617
+ els.display = 'block';
1618
+ var originalWidth = element.clientWidth;
1619
+ var originalHeight = element.clientHeight;
1620
+ els.display = originalDisplay;
1621
+ els.position = originalPosition;
1622
+ els.visibility = originalVisibility;
1623
+ return {width: originalWidth, height: originalHeight};
1624
+ },
1625
+
1626
+ makePositioned: function(element) {
1627
+ element = $(element);
1628
+ var pos = Element.getStyle(element, 'position');
1629
+ if (pos == 'static' || !pos) {
1630
+ element._madePositioned = true;
1631
+ element.style.position = 'relative';
1632
+ // Opera returns the offset relative to the positioning context, when an
1633
+ // element is position relative but top and left have not been defined
1634
+ if (window.opera) {
1635
+ element.style.top = 0;
1636
+ element.style.left = 0;
1637
+ }
1638
+ }
1639
+ return element;
1640
+ },
1641
+
1642
+ undoPositioned: function(element) {
1643
+ element = $(element);
1644
+ if (element._madePositioned) {
1645
+ element._madePositioned = undefined;
1646
+ element.style.position =
1647
+ element.style.top =
1648
+ element.style.left =
1649
+ element.style.bottom =
1650
+ element.style.right = '';
1651
+ }
1652
+ return element;
1653
+ },
1654
+
1655
+ makeClipping: function(element) {
1656
+ element = $(element);
1657
+ if (element._overflow) return element;
1658
+ element._overflow = element.style.overflow || 'auto';
1659
+ if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
1660
+ element.style.overflow = 'hidden';
1661
+ return element;
1662
+ },
1663
+
1664
+ undoClipping: function(element) {
1665
+ element = $(element);
1666
+ if (!element._overflow) return element;
1667
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
1668
+ element._overflow = null;
1669
+ return element;
1670
+ }
1671
+ };
1672
+
1673
+ Object.extend(Element.Methods, {
1674
+ childOf: Element.Methods.descendantOf,
1675
+ childElements: Element.Methods.immediateDescendants
1676
+ });
1677
+
1678
+ if (Prototype.Browser.Opera) {
1679
+ Element.Methods._getStyle = Element.Methods.getStyle;
1680
+ Element.Methods.getStyle = function(element, style) {
1681
+ switch(style) {
1682
+ case 'left':
1683
+ case 'top':
1684
+ case 'right':
1685
+ case 'bottom':
1686
+ if (Element._getStyle(element, 'position') == 'static') return null;
1687
+ default: return Element._getStyle(element, style);
1688
+ }
1689
+ };
1690
+ }
1691
+ else if (Prototype.Browser.IE) {
1692
+ Element.Methods.getStyle = function(element, style) {
1693
+ element = $(element);
1694
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
1695
+ var value = element.style[style];
1696
+ if (!value && element.currentStyle) value = element.currentStyle[style];
1697
+
1698
+ if (style == 'opacity') {
1699
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
1700
+ if (value[1]) return parseFloat(value[1]) / 100;
1701
+ return 1.0;
1702
+ }
1703
+
1704
+ if (value == 'auto') {
1705
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
1706
+ return element['offset'+style.capitalize()] + 'px';
1707
+ return null;
1708
+ }
1709
+ return value;
1710
+ };
1711
+
1712
+ Element.Methods.setOpacity = function(element, value) {
1713
+ element = $(element);
1714
+ var filter = element.getStyle('filter'), style = element.style;
1715
+ if (value == 1 || value === '') {
1716
+ style.filter = filter.replace(/alpha\([^\)]*\)/gi,'');
1717
+ return element;
1718
+ } else if (value < 0.00001) value = 0;
1719
+ style.filter = filter.replace(/alpha\([^\)]*\)/gi, '') +
1720
+ 'alpha(opacity=' + (value * 100) + ')';
1721
+ return element;
1722
+ };
1723
+
1724
+ // IE is missing .innerHTML support for TABLE-related elements
1725
+ Element.Methods.update = function(element, html) {
1726
+ element = $(element);
1727
+ html = typeof html == 'undefined' ? '' : html.toString();
1728
+ var tagName = element.tagName.toUpperCase();
1729
+ if (['THEAD','TBODY','TR','TD'].include(tagName)) {
1730
+ var div = document.createElement('div');
1731
+ switch (tagName) {
1732
+ case 'THEAD':
1733
+ case 'TBODY':
1734
+ div.innerHTML = '<table><tbody>' + html.stripScripts() + '</tbody></table>';
1735
+ depth = 2;
1736
+ break;
1737
+ case 'TR':
1738
+ div.innerHTML = '<table><tbody><tr>' + html.stripScripts() + '</tr></tbody></table>';
1739
+ depth = 3;
1740
+ break;
1741
+ case 'TD':
1742
+ div.innerHTML = '<table><tbody><tr><td>' + html.stripScripts() + '</td></tr></tbody></table>';
1743
+ depth = 4;
1744
+ }
1745
+ $A(element.childNodes).each(function(node) { element.removeChild(node) });
1746
+ depth.times(function() { div = div.firstChild });
1747
+ $A(div.childNodes).each(function(node) { element.appendChild(node) });
1748
+ } else {
1749
+ element.innerHTML = html.stripScripts();
1750
+ }
1751
+ setTimeout(function() { html.evalScripts() }, 10);
1752
+ return element;
1753
+ }
1754
+ }
1755
+ else if (Prototype.Browser.Gecko) {
1756
+ Element.Methods.setOpacity = function(element, value) {
1757
+ element = $(element);
1758
+ element.style.opacity = (value == 1) ? 0.999999 :
1759
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
1760
+ return element;
1761
+ };
1762
+ }
1763
+
1764
+ Element._attributeTranslations = {
1765
+ names: {
1766
+ colspan: "colSpan",
1767
+ rowspan: "rowSpan",
1768
+ valign: "vAlign",
1769
+ datetime: "dateTime",
1770
+ accesskey: "accessKey",
1771
+ tabindex: "tabIndex",
1772
+ enctype: "encType",
1773
+ maxlength: "maxLength",
1774
+ readonly: "readOnly",
1775
+ longdesc: "longDesc"
1776
+ },
1777
+ values: {
1778
+ _getAttr: function(element, attribute) {
1779
+ return element.getAttribute(attribute, 2);
1780
+ },
1781
+ _flag: function(element, attribute) {
1782
+ return $(element).hasAttribute(attribute) ? attribute : null;
1783
+ },
1784
+ style: function(element) {
1785
+ return element.style.cssText.toLowerCase();
1786
+ },
1787
+ title: function(element) {
1788
+ var node = element.getAttributeNode('title');
1789
+ return node.specified ? node.nodeValue : null;
1790
+ }
1791
+ }
1792
+ };
1793
+
1794
+ (function() {
1795
+ Object.extend(this, {
1796
+ href: this._getAttr,
1797
+ src: this._getAttr,
1798
+ type: this._getAttr,
1799
+ disabled: this._flag,
1800
+ checked: this._flag,
1801
+ readonly: this._flag,
1802
+ multiple: this._flag
1803
+ });
1804
+ }).call(Element._attributeTranslations.values);
1805
+
1806
+ Element.Methods.Simulated = {
1807
+ hasAttribute: function(element, attribute) {
1808
+ var t = Element._attributeTranslations, node;
1809
+ attribute = t.names[attribute] || attribute;
1810
+ node = $(element).getAttributeNode(attribute);
1811
+ return node && node.specified;
1812
+ }
1813
+ };
1814
+
1815
+ Element.Methods.ByTag = {};
1816
+
1817
+ Object.extend(Element, Element.Methods);
1818
+
1819
+ if (!Prototype.BrowserFeatures.ElementExtensions &&
1820
+ document.createElement('div').__proto__) {
1821
+ window.HTMLElement = {};
1822
+ window.HTMLElement.prototype = document.createElement('div').__proto__;
1823
+ Prototype.BrowserFeatures.ElementExtensions = true;
1824
+ }
1825
+
1826
+ Element.hasAttribute = function(element, attribute) {
1827
+ if (element.hasAttribute) return element.hasAttribute(attribute);
1828
+ return Element.Methods.Simulated.hasAttribute(element, attribute);
1829
+ };
1830
+
1831
+ Element.addMethods = function(methods) {
1832
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
1833
+
1834
+ if (!methods) {
1835
+ Object.extend(Form, Form.Methods);
1836
+ Object.extend(Form.Element, Form.Element.Methods);
1837
+ Object.extend(Element.Methods.ByTag, {
1838
+ "FORM": Object.clone(Form.Methods),
1839
+ "INPUT": Object.clone(Form.Element.Methods),
1840
+ "SELECT": Object.clone(Form.Element.Methods),
1841
+ "TEXTAREA": Object.clone(Form.Element.Methods)
1842
+ });
1843
+ }
1844
+
1845
+ if (arguments.length == 2) {
1846
+ var tagName = methods;
1847
+ methods = arguments[1];
1848
+ }
1849
+
1850
+ if (!tagName) Object.extend(Element.Methods, methods || {});
1851
+ else {
1852
+ if (tagName.constructor == Array) tagName.each(extend);
1853
+ else extend(tagName);
1854
+ }
1855
+
1856
+ function extend(tagName) {
1857
+ tagName = tagName.toUpperCase();
1858
+ if (!Element.Methods.ByTag[tagName])
1859
+ Element.Methods.ByTag[tagName] = {};
1860
+ Object.extend(Element.Methods.ByTag[tagName], methods);
1861
+ }
1862
+
1863
+ function copy(methods, destination, onlyIfAbsent) {
1864
+ onlyIfAbsent = onlyIfAbsent || false;
1865
+ var cache = Element.extend.cache;
1866
+ for (var property in methods) {
1867
+ var value = methods[property];
1868
+ if (!onlyIfAbsent || !(property in destination))
1869
+ destination[property] = cache.findOrStore(value);
1870
+ }
1871
+ }
1872
+
1873
+ function findDOMClass(tagName) {
1874
+ var klass;
1875
+ var trans = {
1876
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
1877
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
1878
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
1879
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
1880
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
1881
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
1882
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
1883
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
1884
+ "FrameSet", "IFRAME": "IFrame"
1885
+ };
1886
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
1887
+ if (window[klass]) return window[klass];
1888
+ klass = 'HTML' + tagName + 'Element';
1889
+ if (window[klass]) return window[klass];
1890
+ klass = 'HTML' + tagName.capitalize() + 'Element';
1891
+ if (window[klass]) return window[klass];
1892
+
1893
+ window[klass] = {};
1894
+ window[klass].prototype = document.createElement(tagName).__proto__;
1895
+ return window[klass];
1896
+ }
1897
+
1898
+ if (F.ElementExtensions) {
1899
+ copy(Element.Methods, HTMLElement.prototype);
1900
+ copy(Element.Methods.Simulated, HTMLElement.prototype, true);
1901
+ }
1902
+
1903
+ if (F.SpecificElementExtensions) {
1904
+ for (var tag in Element.Methods.ByTag) {
1905
+ var klass = findDOMClass(tag);
1906
+ if (typeof klass == "undefined") continue;
1907
+ copy(T[tag], klass.prototype);
1908
+ }
1909
+ }
1910
+
1911
+ Object.extend(Element, Element.Methods);
1912
+ delete Element.ByTag;
1913
+ };
1914
+
1915
+ var Toggle = { display: Element.toggle };
1916
+
1917
+ /*--------------------------------------------------------------------------*/
1918
+
1919
+ Abstract.Insertion = function(adjacency) {
1920
+ this.adjacency = adjacency;
1921
+ }
1922
+
1923
+ Abstract.Insertion.prototype = {
1924
+ initialize: function(element, content) {
1925
+ this.element = $(element);
1926
+ this.content = content.stripScripts();
1927
+
1928
+ if (this.adjacency && this.element.insertAdjacentHTML) {
1929
+ try {
1930
+ this.element.insertAdjacentHTML(this.adjacency, this.content);
1931
+ } catch (e) {
1932
+ var tagName = this.element.tagName.toUpperCase();
1933
+ if (['TBODY', 'TR'].include(tagName)) {
1934
+ this.insertContent(this.contentFromAnonymousTable());
1935
+ } else {
1936
+ throw e;
1937
+ }
1938
+ }
1939
+ } else {
1940
+ this.range = this.element.ownerDocument.createRange();
1941
+ if (this.initializeRange) this.initializeRange();
1942
+ this.insertContent([this.range.createContextualFragment(this.content)]);
1943
+ }
1944
+
1945
+ setTimeout(function() {content.evalScripts()}, 10);
1946
+ },
1947
+
1948
+ contentFromAnonymousTable: function() {
1949
+ var div = document.createElement('div');
1950
+ div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
1951
+ return $A(div.childNodes[0].childNodes[0].childNodes);
1952
+ }
1953
+ }
1954
+
1955
+ var Insertion = new Object();
1956
+
1957
+ Insertion.Before = Class.create();
1958
+ Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
1959
+ initializeRange: function() {
1960
+ this.range.setStartBefore(this.element);
1961
+ },
1962
+
1963
+ insertContent: function(fragments) {
1964
+ fragments.each((function(fragment) {
1965
+ this.element.parentNode.insertBefore(fragment, this.element);
1966
+ }).bind(this));
1967
+ }
1968
+ });
1969
+
1970
+ Insertion.Top = Class.create();
1971
+ Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
1972
+ initializeRange: function() {
1973
+ this.range.selectNodeContents(this.element);
1974
+ this.range.collapse(true);
1975
+ },
1976
+
1977
+ insertContent: function(fragments) {
1978
+ fragments.reverse(false).each((function(fragment) {
1979
+ this.element.insertBefore(fragment, this.element.firstChild);
1980
+ }).bind(this));
1981
+ }
1982
+ });
1983
+
1984
+ Insertion.Bottom = Class.create();
1985
+ Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
1986
+ initializeRange: function() {
1987
+ this.range.selectNodeContents(this.element);
1988
+ this.range.collapse(this.element);
1989
+ },
1990
+
1991
+ insertContent: function(fragments) {
1992
+ fragments.each((function(fragment) {
1993
+ this.element.appendChild(fragment);
1994
+ }).bind(this));
1995
+ }
1996
+ });
1997
+
1998
+ Insertion.After = Class.create();
1999
+ Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
2000
+ initializeRange: function() {
2001
+ this.range.setStartAfter(this.element);
2002
+ },
2003
+
2004
+ insertContent: function(fragments) {
2005
+ fragments.each((function(fragment) {
2006
+ this.element.parentNode.insertBefore(fragment,
2007
+ this.element.nextSibling);
2008
+ }).bind(this));
2009
+ }
2010
+ });
2011
+
2012
+ /*--------------------------------------------------------------------------*/
2013
+
2014
+ Element.ClassNames = Class.create();
2015
+ Element.ClassNames.prototype = {
2016
+ initialize: function(element) {
2017
+ this.element = $(element);
2018
+ },
2019
+
2020
+ _each: function(iterator) {
2021
+ this.element.className.split(/\s+/).select(function(name) {
2022
+ return name.length > 0;
2023
+ })._each(iterator);
2024
+ },
2025
+
2026
+ set: function(className) {
2027
+ this.element.className = className;
2028
+ },
2029
+
2030
+ add: function(classNameToAdd) {
2031
+ if (this.include(classNameToAdd)) return;
2032
+ this.set($A(this).concat(classNameToAdd).join(' '));
2033
+ },
2034
+
2035
+ remove: function(classNameToRemove) {
2036
+ if (!this.include(classNameToRemove)) return;
2037
+ this.set($A(this).without(classNameToRemove).join(' '));
2038
+ },
2039
+
2040
+ toString: function() {
2041
+ return $A(this).join(' ');
2042
+ }
2043
+ };
2044
+
2045
+ Object.extend(Element.ClassNames.prototype, Enumerable);
2046
+ /* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
2047
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
2048
+ * license. Please see http://www.yui-ext.com/ for more information. */
2049
+
2050
+ var Selector = Class.create();
2051
+
2052
+ Selector.prototype = {
2053
+ initialize: function(expression) {
2054
+ this.expression = expression.strip();
2055
+ this.compileMatcher();
2056
+ },
2057
+
2058
+ compileMatcher: function() {
2059
+ // Selectors with namespaced attributes can't use the XPath version
2060
+ if (Prototype.BrowserFeatures.XPath && !(/\[[\w-]*?:/).test(this.expression))
2061
+ return this.compileXPathMatcher();
2062
+
2063
+ var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
2064
+ c = Selector.criteria, le, p, m;
2065
+
2066
+ if (Selector._cache[e]) {
2067
+ this.matcher = Selector._cache[e]; return;
2068
+ }
2069
+ this.matcher = ["this.matcher = function(root) {",
2070
+ "var r = root, h = Selector.handlers, c = false, n;"];
2071
+
2072
+ while (e && le != e && (/\S/).test(e)) {
2073
+ le = e;
2074
+ for (var i in ps) {
2075
+ p = ps[i];
2076
+ if (m = e.match(p)) {
2077
+ this.matcher.push(typeof c[i] == 'function' ? c[i](m) :
2078
+ new Template(c[i]).evaluate(m));
2079
+ e = e.replace(m[0], '');
2080
+ break;
2081
+ }
2082
+ }
2083
+ }
2084
+
2085
+ this.matcher.push("return h.unique(n);\n}");
2086
+ eval(this.matcher.join('\n'));
2087
+ Selector._cache[this.expression] = this.matcher;
2088
+ },
2089
+
2090
+ compileXPathMatcher: function() {
2091
+ var e = this.expression, ps = Selector.patterns,
2092
+ x = Selector.xpath, le, m;
2093
+
2094
+ if (Selector._cache[e]) {
2095
+ this.xpath = Selector._cache[e]; return;
2096
+ }
2097
+
2098
+ this.matcher = ['.//*'];
2099
+ while (e && le != e && (/\S/).test(e)) {
2100
+ le = e;
2101
+ for (var i in ps) {
2102
+ if (m = e.match(ps[i])) {
2103
+ this.matcher.push(typeof x[i] == 'function' ? x[i](m) :
2104
+ new Template(x[i]).evaluate(m));
2105
+ e = e.replace(m[0], '');
2106
+ break;
2107
+ }
2108
+ }
2109
+ }
2110
+
2111
+ this.xpath = this.matcher.join('');
2112
+ Selector._cache[this.expression] = this.xpath;
2113
+ },
2114
+
2115
+ findElements: function(root) {
2116
+ root = root || document;
2117
+ if (this.xpath) return document._getElementsByXPath(this.xpath, root);
2118
+ return this.matcher(root);
2119
+ },
2120
+
2121
+ match: function(element) {
2122
+ return this.findElements(document).include(element);
2123
+ },
2124
+
2125
+ toString: function() {
2126
+ return this.expression;
2127
+ },
2128
+
2129
+ inspect: function() {
2130
+ return "#<Selector:" + this.expression.inspect() + ">";
2131
+ }
2132
+ };
2133
+
2134
+ Object.extend(Selector, {
2135
+ _cache: {},
2136
+
2137
+ xpath: {
2138
+ descendant: "//*",
2139
+ child: "/*",
2140
+ adjacent: "/following-sibling::*[1]",
2141
+ laterSibling: '/following-sibling::*',
2142
+ tagName: function(m) {
2143
+ if (m[1] == '*') return '';
2144
+ return "[local-name()='" + m[1].toLowerCase() +
2145
+ "' or local-name()='" + m[1].toUpperCase() + "']";
2146
+ },
2147
+ className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
2148
+ id: "[@id='#{1}']",
2149
+ attrPresence: "[@#{1}]",
2150
+ attr: function(m) {
2151
+ m[3] = m[5] || m[6];
2152
+ return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
2153
+ },
2154
+ pseudo: function(m) {
2155
+ var h = Selector.xpath.pseudos[m[1]];
2156
+ if (!h) return '';
2157
+ if (typeof h === 'function') return h(m);
2158
+ return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
2159
+ },
2160
+ operators: {
2161
+ '=': "[@#{1}='#{3}']",
2162
+ '!=': "[@#{1}!='#{3}']",
2163
+ '^=': "[starts-with(@#{1}, '#{3}')]",
2164
+ '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
2165
+ '*=': "[contains(@#{1}, '#{3}')]",
2166
+ '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
2167
+ '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
2168
+ },
2169
+ pseudos: {
2170
+ 'first-child': '[not(preceding-sibling::*)]',
2171
+ 'last-child': '[not(following-sibling::*)]',
2172
+ 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
2173
+ 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
2174
+ 'checked': "[@checked]",
2175
+ 'disabled': "[@disabled]",
2176
+ 'enabled': "[not(@disabled)]",
2177
+ 'not': function(m) {
2178
+ var e = m[6], p = Selector.patterns,
2179
+ x = Selector.xpath, le, m, v;
2180
+
2181
+ var exclusion = [];
2182
+ while (e && le != e && (/\S/).test(e)) {
2183
+ le = e;
2184
+ for (var i in p) {
2185
+ if (m = e.match(p[i])) {
2186
+ v = typeof x[i] == 'function' ? x[i](m) : new Template(x[i]).evaluate(m);
2187
+ exclusion.push("(" + v.substring(1, v.length - 1) + ")");
2188
+ e = e.replace(m[0], '');
2189
+ break;
2190
+ }
2191
+ }
2192
+ }
2193
+ return "[not(" + exclusion.join(" and ") + ")]";
2194
+ },
2195
+ 'nth-child': function(m) {
2196
+ return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
2197
+ },
2198
+ 'nth-last-child': function(m) {
2199
+ return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
2200
+ },
2201
+ 'nth-of-type': function(m) {
2202
+ return Selector.xpath.pseudos.nth("position() ", m);
2203
+ },
2204
+ 'nth-last-of-type': function(m) {
2205
+ return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
2206
+ },
2207
+ 'first-of-type': function(m) {
2208
+ m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
2209
+ },
2210
+ 'last-of-type': function(m) {
2211
+ m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
2212
+ },
2213
+ 'only-of-type': function(m) {
2214
+ var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
2215
+ },
2216
+ nth: function(fragment, m) {
2217
+ var mm, formula = m[6], predicate;
2218
+ if (formula == 'even') formula = '2n+0';
2219
+ if (formula == 'odd') formula = '2n+1';
2220
+ if (mm = formula.match(/^(\d+)$/)) // digit only
2221
+ return '[' + fragment + "= " + mm[1] + ']';
2222
+ if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
2223
+ if (mm[1] == "-") mm[1] = -1;
2224
+ var a = mm[1] ? Number(mm[1]) : 1;
2225
+ var b = mm[2] ? Number(mm[2]) : 0;
2226
+ predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
2227
+ "((#{fragment} - #{b}) div #{a} >= 0)]";
2228
+ return new Template(predicate).evaluate({
2229
+ fragment: fragment, a: a, b: b });
2230
+ }
2231
+ }
2232
+ }
2233
+ },
2234
+
2235
+ criteria: {
2236
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
2237
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
2238
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
2239
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
2240
+ attr: function(m) {
2241
+ m[3] = (m[5] || m[6]);
2242
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
2243
+ },
2244
+ pseudo: function(m) {
2245
+ if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
2246
+ return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
2247
+ },
2248
+ descendant: 'c = "descendant";',
2249
+ child: 'c = "child";',
2250
+ adjacent: 'c = "adjacent";',
2251
+ laterSibling: 'c = "laterSibling";'
2252
+ },
2253
+
2254
+ patterns: {
2255
+ // combinators must be listed first
2256
+ // (and descendant needs to be last combinator)
2257
+ laterSibling: /^\s*~\s*/,
2258
+ child: /^\s*>\s*/,
2259
+ adjacent: /^\s*\+\s*/,
2260
+ descendant: /^\s/,
2261
+
2262
+ // selectors follow
2263
+ tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
2264
+ id: /^#([\w\-\*]+)(\b|$)/,
2265
+ className: /^\.([\w\-\*]+)(\b|$)/,
2266
+ pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|\s|(?=:))/,
2267
+ attrPresence: /^\[([\w]+)\]/,
2268
+ attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\]]*?)\4|([^'"][^\]]*?)))?\]/
2269
+ },
2270
+
2271
+ handlers: {
2272
+ // UTILITY FUNCTIONS
2273
+ // joins two collections
2274
+ concat: function(a, b) {
2275
+ for (var i = 0, node; node = b[i]; i++)
2276
+ a.push(node);
2277
+ return a;
2278
+ },
2279
+
2280
+ // marks an array of nodes for counting
2281
+ mark: function(nodes) {
2282
+ for (var i = 0, node; node = nodes[i]; i++)
2283
+ node._counted = true;
2284
+ return nodes;
2285
+ },
2286
+
2287
+ unmark: function(nodes) {
2288
+ for (var i = 0, node; node = nodes[i]; i++)
2289
+ node._counted = undefined;
2290
+ return nodes;
2291
+ },
2292
+
2293
+ // mark each child node with its position (for nth calls)
2294
+ // "ofType" flag indicates whether we're indexing for nth-of-type
2295
+ // rather than nth-child
2296
+ index: function(parentNode, reverse, ofType) {
2297
+ parentNode._counted = true;
2298
+ if (reverse) {
2299
+ for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
2300
+ node = nodes[i];
2301
+ if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
2302
+ }
2303
+ } else {
2304
+ for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
2305
+ if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
2306
+ }
2307
+ },
2308
+
2309
+ // filters out duplicates and extends all nodes
2310
+ unique: function(nodes) {
2311
+ if (nodes.length == 0) return nodes;
2312
+ var results = [], n;
2313
+ for (var i = 0, l = nodes.length; i < l; i++)
2314
+ if (!(n = nodes[i])._counted) {
2315
+ n._counted = true;
2316
+ results.push(Element.extend(n));
2317
+ }
2318
+ return Selector.handlers.unmark(results);
2319
+ },
2320
+
2321
+ // COMBINATOR FUNCTIONS
2322
+ descendant: function(nodes) {
2323
+ var h = Selector.handlers;
2324
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
2325
+ h.concat(results, node.getElementsByTagName('*'));
2326
+ return results;
2327
+ },
2328
+
2329
+ child: function(nodes) {
2330
+ var h = Selector.handlers;
2331
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
2332
+ for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
2333
+ if (child.nodeType == 1 && child.tagName != '!') results.push(child);
2334
+ }
2335
+ return results;
2336
+ },
2337
+
2338
+ adjacent: function(nodes) {
2339
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
2340
+ var next = this.nextElementSibling(node);
2341
+ if (next) results.push(next);
2342
+ }
2343
+ return results;
2344
+ },
2345
+
2346
+ laterSibling: function(nodes) {
2347
+ var h = Selector.handlers;
2348
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
2349
+ h.concat(results, Element.nextSiblings(node));
2350
+ return results;
2351
+ },
2352
+
2353
+ nextElementSibling: function(node) {
2354
+ while (node = node.nextSibling)
2355
+ if (node.nodeType == 1) return node;
2356
+ return null;
2357
+ },
2358
+
2359
+ previousElementSibling: function(node) {
2360
+ while (node = node.previousSibling)
2361
+ if (node.nodeType == 1) return node;
2362
+ return null;
2363
+ },
2364
+
2365
+ // TOKEN FUNCTIONS
2366
+ tagName: function(nodes, root, tagName, combinator) {
2367
+ tagName = tagName.toUpperCase();
2368
+ var results = [], h = Selector.handlers;
2369
+ if (nodes) {
2370
+ if (combinator) {
2371
+ // fastlane for ordinary descendant combinators
2372
+ if (combinator == "descendant") {
2373
+ for (var i = 0, node; node = nodes[i]; i++)
2374
+ h.concat(results, node.getElementsByTagName(tagName));
2375
+ return results;
2376
+ } else nodes = this[combinator](nodes);
2377
+ if (tagName == "*") return nodes;
2378
+ }
2379
+ for (var i = 0, node; node = nodes[i]; i++)
2380
+ if (node.tagName.toUpperCase() == tagName) results.push(node);
2381
+ return results;
2382
+ } else return root.getElementsByTagName(tagName);
2383
+ },
2384
+
2385
+ id: function(nodes, root, id, combinator) {
2386
+ var targetNode = $(id), h = Selector.handlers;
2387
+ if (!nodes && root == document) return targetNode ? [targetNode] : [];
2388
+ if (nodes) {
2389
+ if (combinator) {
2390
+ if (combinator == 'child') {
2391
+ for (var i = 0, node; node = nodes[i]; i++)
2392
+ if (targetNode.parentNode == node) return [targetNode];
2393
+ } else if (combinator == 'descendant') {
2394
+ for (var i = 0, node; node = nodes[i]; i++)
2395
+ if (Element.descendantOf(targetNode, node)) return [targetNode];
2396
+ } else if (combinator == 'adjacent') {
2397
+ for (var i = 0, node; node = nodes[i]; i++)
2398
+ if (Selector.handlers.previousElementSibling(targetNode) == node)
2399
+ return [targetNode];
2400
+ } else nodes = h[combinator](nodes);
2401
+ }
2402
+ for (var i = 0, node; node = nodes[i]; i++)
2403
+ if (node == targetNode) return [targetNode];
2404
+ return [];
2405
+ }
2406
+ return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
2407
+ },
2408
+
2409
+ className: function(nodes, root, className, combinator) {
2410
+ if (nodes && combinator) nodes = this[combinator](nodes);
2411
+ return Selector.handlers.byClassName(nodes, root, className);
2412
+ },
2413
+
2414
+ byClassName: function(nodes, root, className) {
2415
+ if (!nodes) nodes = Selector.handlers.descendant([root]);
2416
+ var needle = ' ' + className + ' ';
2417
+ for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
2418
+ nodeClassName = node.className;
2419
+ if (nodeClassName.length == 0) continue;
2420
+ if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
2421
+ results.push(node);
2422
+ }
2423
+ return results;
2424
+ },
2425
+
2426
+ attrPresence: function(nodes, root, attr) {
2427
+ var results = [];
2428
+ for (var i = 0, node; node = nodes[i]; i++)
2429
+ if (Element.hasAttribute(node, attr)) results.push(node);
2430
+ return results;
2431
+ },
2432
+
2433
+ attr: function(nodes, root, attr, value, operator) {
2434
+ if (!nodes) nodes = root.getElementsByTagName("*");
2435
+ var handler = Selector.operators[operator], results = [];
2436
+ for (var i = 0, node; node = nodes[i]; i++) {
2437
+ var nodeValue = Element.readAttribute(node, attr);
2438
+ if (nodeValue === null) continue;
2439
+ if (handler(nodeValue, value)) results.push(node);
2440
+ }
2441
+ return results;
2442
+ },
2443
+
2444
+ pseudo: function(nodes, name, value, root, combinator) {
2445
+ if (nodes && combinator) nodes = this[combinator](nodes);
2446
+ if (!nodes) nodes = root.getElementsByTagName("*");
2447
+ return Selector.pseudos[name](nodes, value, root);
2448
+ }
2449
+ },
2450
+
2451
+ pseudos: {
2452
+ 'first-child': function(nodes, value, root) {
2453
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
2454
+ if (Selector.handlers.previousElementSibling(node)) continue;
2455
+ results.push(node);
2456
+ }
2457
+ return results;
2458
+ },
2459
+ 'last-child': function(nodes, value, root) {
2460
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
2461
+ if (Selector.handlers.nextElementSibling(node)) continue;
2462
+ results.push(node);
2463
+ }
2464
+ return results;
2465
+ },
2466
+ 'only-child': function(nodes, value, root) {
2467
+ var h = Selector.handlers;
2468
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
2469
+ if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
2470
+ results.push(node);
2471
+ return results;
2472
+ },
2473
+ 'nth-child': function(nodes, formula, root) {
2474
+ return Selector.pseudos.nth(nodes, formula, root);
2475
+ },
2476
+ 'nth-last-child': function(nodes, formula, root) {
2477
+ return Selector.pseudos.nth(nodes, formula, root, true);
2478
+ },
2479
+ 'nth-of-type': function(nodes, formula, root) {
2480
+ return Selector.pseudos.nth(nodes, formula, root, false, true);
2481
+ },
2482
+ 'nth-last-of-type': function(nodes, formula, root) {
2483
+ return Selector.pseudos.nth(nodes, formula, root, true, true);
2484
+ },
2485
+ 'first-of-type': function(nodes, formula, root) {
2486
+ return Selector.pseudos.nth(nodes, "1", root, false, true);
2487
+ },
2488
+ 'last-of-type': function(nodes, formula, root) {
2489
+ return Selector.pseudos.nth(nodes, "1", root, true, true);
2490
+ },
2491
+ 'only-of-type': function(nodes, formula, root) {
2492
+ var p = Selector.pseudos;
2493
+ return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
2494
+ },
2495
+
2496
+ // handles the an+b logic
2497
+ getIndices: function(a, b, total) {
2498
+ if (a == 0) return b > 0 ? [b] : [];
2499
+ return $R(1, total).inject([], function(memo, i) {
2500
+ if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
2501
+ return memo;
2502
+ });
2503
+ },
2504
+
2505
+ // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
2506
+ nth: function(nodes, formula, root, reverse, ofType) {
2507
+ if (nodes.length == 0) return [];
2508
+ if (formula == 'even') formula = '2n+0';
2509
+ if (formula == 'odd') formula = '2n+1';
2510
+ var h = Selector.handlers, results = [], indexed = [], m;
2511
+ h.mark(nodes);
2512
+ for (var i = 0, node; node = nodes[i]; i++) {
2513
+ if (!node.parentNode._counted) {
2514
+ h.index(node.parentNode, reverse, ofType);
2515
+ indexed.push(node.parentNode);
2516
+ }
2517
+ }
2518
+ if (formula.match(/^\d+$/)) { // just a number
2519
+ formula = Number(formula);
2520
+ for (var i = 0, node; node = nodes[i]; i++)
2521
+ if (node.nodeIndex == formula) results.push(node);
2522
+ } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
2523
+ if (m[1] == "-") m[1] = -1;
2524
+ var a = m[1] ? Number(m[1]) : 1;
2525
+ var b = m[2] ? Number(m[2]) : 0;
2526
+ var indices = Selector.pseudos.getIndices(a, b, nodes.length);
2527
+ for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
2528
+ for (var j = 0; j < l; j++)
2529
+ if (node.nodeIndex == indices[j]) results.push(node);
2530
+ }
2531
+ }
2532
+ h.unmark(nodes);
2533
+ h.unmark(indexed);
2534
+ return results;
2535
+ },
2536
+
2537
+ 'empty': function(nodes, value, root) {
2538
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
2539
+ // IE treats comments as element nodes
2540
+ if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
2541
+ results.push(node);
2542
+ }
2543
+ return results;
2544
+ },
2545
+
2546
+ 'not': function(nodes, selector, root) {
2547
+ var h = Selector.handlers, selectorType, m;
2548
+ var exclusions = new Selector(selector).findElements(root);
2549
+ h.mark(exclusions);
2550
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
2551
+ if (!node._counted) results.push(node);
2552
+ h.unmark(exclusions);
2553
+ return results;
2554
+ },
2555
+
2556
+ 'enabled': function(nodes, value, root) {
2557
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
2558
+ if (!node.disabled) results.push(node);
2559
+ return results;
2560
+ },
2561
+
2562
+ 'disabled': function(nodes, value, root) {
2563
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
2564
+ if (node.disabled) results.push(node);
2565
+ return results;
2566
+ },
2567
+
2568
+ 'checked': function(nodes, value, root) {
2569
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
2570
+ if (node.checked) results.push(node);
2571
+ return results;
2572
+ }
2573
+ },
2574
+
2575
+ operators: {
2576
+ '=': function(nv, v) { return nv == v; },
2577
+ '!=': function(nv, v) { return nv != v; },
2578
+ '^=': function(nv, v) { return nv.startsWith(v); },
2579
+ '$=': function(nv, v) { return nv.endsWith(v); },
2580
+ '*=': function(nv, v) { return nv.include(v); },
2581
+ '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
2582
+ '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
2583
+ },
2584
+
2585
+ matchElements: function(elements, expression) {
2586
+ var matches = new Selector(expression).findElements(), h = Selector.handlers;
2587
+ h.mark(matches);
2588
+ for (var i = 0, results = [], element; element = elements[i]; i++)
2589
+ if (element._counted) results.push(element);
2590
+ h.unmark(matches);
2591
+ return results;
2592
+ },
2593
+
2594
+ findElement: function(elements, expression, index) {
2595
+ if (typeof expression == 'number') {
2596
+ index = expression; expression = false;
2597
+ }
2598
+ return Selector.matchElements(elements, expression || '*')[index || 0];
2599
+ },
2600
+
2601
+ findChildElements: function(element, expressions) {
2602
+ var exprs = expressions.join(','), expressions = [];
2603
+ exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
2604
+ expressions.push(m[1].strip());
2605
+ });
2606
+ var results = [], h = Selector.handlers;
2607
+ for (var i = 0, l = expressions.length, selector; i < l; i++) {
2608
+ selector = new Selector(expressions[i].strip());
2609
+ h.concat(results, selector.findElements(element));
2610
+ }
2611
+ return (l > 1) ? h.unique(results) : results;
2612
+ }
2613
+ });
2614
+
2615
+ function $$() {
2616
+ return Selector.findChildElements(document, $A(arguments));
2617
+ }
2618
+ var Form = {
2619
+ reset: function(form) {
2620
+ $(form).reset();
2621
+ return form;
2622
+ },
2623
+
2624
+ serializeElements: function(elements, getHash) {
2625
+ var data = elements.inject({}, function(result, element) {
2626
+ if (!element.disabled && element.name) {
2627
+ var key = element.name, value = $(element).getValue();
2628
+ if (value != null) {
2629
+ if (key in result) {
2630
+ if (result[key].constructor != Array) result[key] = [result[key]];
2631
+ result[key].push(value);
2632
+ }
2633
+ else result[key] = value;
2634
+ }
2635
+ }
2636
+ return result;
2637
+ });
2638
+
2639
+ return getHash ? data : Hash.toQueryString(data);
2640
+ }
2641
+ };
2642
+
2643
+ Form.Methods = {
2644
+ serialize: function(form, getHash) {
2645
+ return Form.serializeElements(Form.getElements(form), getHash);
2646
+ },
2647
+
2648
+ getElements: function(form) {
2649
+ return $A($(form).getElementsByTagName('*')).inject([],
2650
+ function(elements, child) {
2651
+ if (Form.Element.Serializers[child.tagName.toLowerCase()])
2652
+ elements.push(Element.extend(child));
2653
+ return elements;
2654
+ }
2655
+ );
2656
+ },
2657
+
2658
+ getInputs: function(form, typeName, name) {
2659
+ form = $(form);
2660
+ var inputs = form.getElementsByTagName('input');
2661
+
2662
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
2663
+
2664
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
2665
+ var input = inputs[i];
2666
+ if ((typeName && input.type != typeName) || (name && input.name != name))
2667
+ continue;
2668
+ matchingInputs.push(Element.extend(input));
2669
+ }
2670
+
2671
+ return matchingInputs;
2672
+ },
2673
+
2674
+ disable: function(form) {
2675
+ form = $(form);
2676
+ Form.getElements(form).invoke('disable');
2677
+ return form;
2678
+ },
2679
+
2680
+ enable: function(form) {
2681
+ form = $(form);
2682
+ Form.getElements(form).invoke('enable');
2683
+ return form;
2684
+ },
2685
+
2686
+ findFirstElement: function(form) {
2687
+ return $(form).getElements().find(function(element) {
2688
+ return element.type != 'hidden' && !element.disabled &&
2689
+ ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
2690
+ });
2691
+ },
2692
+
2693
+ focusFirstElement: function(form) {
2694
+ form = $(form);
2695
+ form.findFirstElement().activate();
2696
+ return form;
2697
+ },
2698
+
2699
+ request: function(form, options) {
2700
+ form = $(form), options = Object.clone(options || {});
2701
+
2702
+ var params = options.parameters;
2703
+ options.parameters = form.serialize(true);
2704
+
2705
+ if (params) {
2706
+ if (typeof params == 'string') params = params.toQueryParams();
2707
+ Object.extend(options.parameters, params);
2708
+ }
2709
+
2710
+ if (form.hasAttribute('method') && !options.method)
2711
+ options.method = form.method;
2712
+
2713
+ return new Ajax.Request(form.readAttribute('action'), options);
2714
+ }
2715
+ }
2716
+
2717
+ /*--------------------------------------------------------------------------*/
2718
+
2719
+ Form.Element = {
2720
+ focus: function(element) {
2721
+ $(element).focus();
2722
+ return element;
2723
+ },
2724
+
2725
+ select: function(element) {
2726
+ $(element).select();
2727
+ return element;
2728
+ }
2729
+ }
2730
+
2731
+ Form.Element.Methods = {
2732
+ serialize: function(element) {
2733
+ element = $(element);
2734
+ if (!element.disabled && element.name) {
2735
+ var value = element.getValue();
2736
+ if (value != undefined) {
2737
+ var pair = {};
2738
+ pair[element.name] = value;
2739
+ return Hash.toQueryString(pair);
2740
+ }
2741
+ }
2742
+ return '';
2743
+ },
2744
+
2745
+ getValue: function(element) {
2746
+ element = $(element);
2747
+ var method = element.tagName.toLowerCase();
2748
+ return Form.Element.Serializers[method](element);
2749
+ },
2750
+
2751
+ clear: function(element) {
2752
+ $(element).value = '';
2753
+ return element;
2754
+ },
2755
+
2756
+ present: function(element) {
2757
+ return $(element).value != '';
2758
+ },
2759
+
2760
+ activate: function(element) {
2761
+ element = $(element);
2762
+ try {
2763
+ element.focus();
2764
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
2765
+ !['button', 'reset', 'submit'].include(element.type)))
2766
+ element.select();
2767
+ } catch (e) {}
2768
+ return element;
2769
+ },
2770
+
2771
+ disable: function(element) {
2772
+ element = $(element);
2773
+ element.blur();
2774
+ element.disabled = true;
2775
+ return element;
2776
+ },
2777
+
2778
+ enable: function(element) {
2779
+ element = $(element);
2780
+ element.disabled = false;
2781
+ return element;
2782
+ }
2783
+ }
2784
+
2785
+ /*--------------------------------------------------------------------------*/
2786
+
2787
+ var Field = Form.Element;
2788
+ var $F = Form.Element.Methods.getValue;
2789
+
2790
+ /*--------------------------------------------------------------------------*/
2791
+
2792
+ Form.Element.Serializers = {
2793
+ input: function(element) {
2794
+ switch (element.type.toLowerCase()) {
2795
+ case 'checkbox':
2796
+ case 'radio':
2797
+ return Form.Element.Serializers.inputSelector(element);
2798
+ default:
2799
+ return Form.Element.Serializers.textarea(element);
2800
+ }
2801
+ },
2802
+
2803
+ inputSelector: function(element) {
2804
+ return element.checked ? element.value : null;
2805
+ },
2806
+
2807
+ textarea: function(element) {
2808
+ return element.value;
2809
+ },
2810
+
2811
+ select: function(element) {
2812
+ return this[element.type == 'select-one' ?
2813
+ 'selectOne' : 'selectMany'](element);
2814
+ },
2815
+
2816
+ selectOne: function(element) {
2817
+ var index = element.selectedIndex;
2818
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
2819
+ },
2820
+
2821
+ selectMany: function(element) {
2822
+ var values, length = element.length;
2823
+ if (!length) return null;
2824
+
2825
+ for (var i = 0, values = []; i < length; i++) {
2826
+ var opt = element.options[i];
2827
+ if (opt.selected) values.push(this.optionValue(opt));
2828
+ }
2829
+ return values;
2830
+ },
2831
+
2832
+ optionValue: function(opt) {
2833
+ // extend element because hasAttribute may not be native
2834
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
2835
+ }
2836
+ }
2837
+
2838
+ /*--------------------------------------------------------------------------*/
2839
+
2840
+ Abstract.TimedObserver = function() {}
2841
+ Abstract.TimedObserver.prototype = {
2842
+ initialize: function(element, frequency, callback) {
2843
+ this.frequency = frequency;
2844
+ this.element = $(element);
2845
+ this.callback = callback;
2846
+
2847
+ this.lastValue = this.getValue();
2848
+ this.registerCallback();
2849
+ },
2850
+
2851
+ registerCallback: function() {
2852
+ setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
2853
+ },
2854
+
2855
+ onTimerEvent: function() {
2856
+ var value = this.getValue();
2857
+ var changed = ('string' == typeof this.lastValue && 'string' == typeof value
2858
+ ? this.lastValue != value : String(this.lastValue) != String(value));
2859
+ if (changed) {
2860
+ this.callback(this.element, value);
2861
+ this.lastValue = value;
2862
+ }
2863
+ }
2864
+ }
2865
+
2866
+ Form.Element.Observer = Class.create();
2867
+ Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
2868
+ getValue: function() {
2869
+ return Form.Element.getValue(this.element);
2870
+ }
2871
+ });
2872
+
2873
+ Form.Observer = Class.create();
2874
+ Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
2875
+ getValue: function() {
2876
+ return Form.serialize(this.element);
2877
+ }
2878
+ });
2879
+
2880
+ /*--------------------------------------------------------------------------*/
2881
+
2882
+ Abstract.EventObserver = function() {}
2883
+ Abstract.EventObserver.prototype = {
2884
+ initialize: function(element, callback) {
2885
+ this.element = $(element);
2886
+ this.callback = callback;
2887
+
2888
+ this.lastValue = this.getValue();
2889
+ if (this.element.tagName.toLowerCase() == 'form')
2890
+ this.registerFormCallbacks();
2891
+ else
2892
+ this.registerCallback(this.element);
2893
+ },
2894
+
2895
+ onElementEvent: function() {
2896
+ var value = this.getValue();
2897
+ if (this.lastValue != value) {
2898
+ this.callback(this.element, value);
2899
+ this.lastValue = value;
2900
+ }
2901
+ },
2902
+
2903
+ registerFormCallbacks: function() {
2904
+ Form.getElements(this.element).each(this.registerCallback.bind(this));
2905
+ },
2906
+
2907
+ registerCallback: function(element) {
2908
+ if (element.type) {
2909
+ switch (element.type.toLowerCase()) {
2910
+ case 'checkbox':
2911
+ case 'radio':
2912
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
2913
+ break;
2914
+ default:
2915
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
2916
+ break;
2917
+ }
2918
+ }
2919
+ }
2920
+ }
2921
+
2922
+ Form.Element.EventObserver = Class.create();
2923
+ Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
2924
+ getValue: function() {
2925
+ return Form.Element.getValue(this.element);
2926
+ }
2927
+ });
2928
+
2929
+ Form.EventObserver = Class.create();
2930
+ Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
2931
+ getValue: function() {
2932
+ return Form.serialize(this.element);
2933
+ }
2934
+ });
2935
+ if (!window.Event) {
2936
+ var Event = new Object();
2937
+ }
2938
+
2939
+ Object.extend(Event, {
2940
+ KEY_BACKSPACE: 8,
2941
+ KEY_TAB: 9,
2942
+ KEY_RETURN: 13,
2943
+ KEY_ESC: 27,
2944
+ KEY_LEFT: 37,
2945
+ KEY_UP: 38,
2946
+ KEY_RIGHT: 39,
2947
+ KEY_DOWN: 40,
2948
+ KEY_DELETE: 46,
2949
+ KEY_HOME: 36,
2950
+ KEY_END: 35,
2951
+ KEY_PAGEUP: 33,
2952
+ KEY_PAGEDOWN: 34,
2953
+
2954
+ element: function(event) {
2955
+ return $(event.target || event.srcElement);
2956
+ },
2957
+
2958
+ isLeftClick: function(event) {
2959
+ return (((event.which) && (event.which == 1)) ||
2960
+ ((event.button) && (event.button == 1)));
2961
+ },
2962
+
2963
+ pointerX: function(event) {
2964
+ return event.pageX || (event.clientX +
2965
+ (document.documentElement.scrollLeft || document.body.scrollLeft));
2966
+ },
2967
+
2968
+ pointerY: function(event) {
2969
+ return event.pageY || (event.clientY +
2970
+ (document.documentElement.scrollTop || document.body.scrollTop));
2971
+ },
2972
+
2973
+ stop: function(event) {
2974
+ if (event.preventDefault) {
2975
+ event.preventDefault();
2976
+ event.stopPropagation();
2977
+ } else {
2978
+ event.returnValue = false;
2979
+ event.cancelBubble = true;
2980
+ }
2981
+ },
2982
+
2983
+ // find the first node with the given tagName, starting from the
2984
+ // node the event was triggered on; traverses the DOM upwards
2985
+ findElement: function(event, tagName) {
2986
+ var element = Event.element(event);
2987
+ while (element.parentNode && (!element.tagName ||
2988
+ (element.tagName.toUpperCase() != tagName.toUpperCase())))
2989
+ element = element.parentNode;
2990
+ return element;
2991
+ },
2992
+
2993
+ observers: false,
2994
+
2995
+ _observeAndCache: function(element, name, observer, useCapture) {
2996
+ if (!this.observers) this.observers = [];
2997
+ if (element.addEventListener) {
2998
+ this.observers.push([element, name, observer, useCapture]);
2999
+ element.addEventListener(name, observer, useCapture);
3000
+ } else if (element.attachEvent) {
3001
+ this.observers.push([element, name, observer, useCapture]);
3002
+ element.attachEvent('on' + name, observer);
3003
+ }
3004
+ },
3005
+
3006
+ unloadCache: function() {
3007
+ if (!Event.observers) return;
3008
+ for (var i = 0, length = Event.observers.length; i < length; i++) {
3009
+ Event.stopObserving.apply(this, Event.observers[i]);
3010
+ Event.observers[i][0] = null;
3011
+ }
3012
+ Event.observers = false;
3013
+ },
3014
+
3015
+ observe: function(element, name, observer, useCapture) {
3016
+ element = $(element);
3017
+ useCapture = useCapture || false;
3018
+
3019
+ if (name == 'keypress' &&
3020
+ (Prototype.Browser.WebKit || element.attachEvent))
3021
+ name = 'keydown';
3022
+
3023
+ Event._observeAndCache(element, name, observer, useCapture);
3024
+ },
3025
+
3026
+ stopObserving: function(element, name, observer, useCapture) {
3027
+ element = $(element);
3028
+ useCapture = useCapture || false;
3029
+
3030
+ if (name == 'keypress' &&
3031
+ (Prototype.Browser.WebKit || element.attachEvent))
3032
+ name = 'keydown';
3033
+
3034
+ if (element.removeEventListener) {
3035
+ element.removeEventListener(name, observer, useCapture);
3036
+ } else if (element.detachEvent) {
3037
+ try {
3038
+ element.detachEvent('on' + name, observer);
3039
+ } catch (e) {}
3040
+ }
3041
+ }
3042
+ });
3043
+
3044
+ /* prevent memory leaks in IE */
3045
+ if (Prototype.Browser.IE)
3046
+ Event.observe(window, 'unload', Event.unloadCache, false);
3047
+ var Position = {
3048
+ // set to true if needed, warning: firefox performance problems
3049
+ // NOT neeeded for page scrolling, only if draggable contained in
3050
+ // scrollable elements
3051
+ includeScrollOffsets: false,
3052
+
3053
+ // must be called before calling withinIncludingScrolloffset, every time the
3054
+ // page is scrolled
3055
+ prepare: function() {
3056
+ this.deltaX = window.pageXOffset
3057
+ || document.documentElement.scrollLeft
3058
+ || document.body.scrollLeft
3059
+ || 0;
3060
+ this.deltaY = window.pageYOffset
3061
+ || document.documentElement.scrollTop
3062
+ || document.body.scrollTop
3063
+ || 0;
3064
+ },
3065
+
3066
+ realOffset: function(element) {
3067
+ var valueT = 0, valueL = 0;
3068
+ do {
3069
+ valueT += element.scrollTop || 0;
3070
+ valueL += element.scrollLeft || 0;
3071
+ element = element.parentNode;
3072
+ } while (element);
3073
+ return [valueL, valueT];
3074
+ },
3075
+
3076
+ cumulativeOffset: function(element) {
3077
+ var valueT = 0, valueL = 0;
3078
+ do {
3079
+ valueT += element.offsetTop || 0;
3080
+ valueL += element.offsetLeft || 0;
3081
+ element = element.offsetParent;
3082
+ } while (element);
3083
+ return [valueL, valueT];
3084
+ },
3085
+
3086
+ positionedOffset: function(element) {
3087
+ var valueT = 0, valueL = 0;
3088
+ do {
3089
+ valueT += element.offsetTop || 0;
3090
+ valueL += element.offsetLeft || 0;
3091
+ element = element.offsetParent;
3092
+ if (element) {
3093
+ if(element.tagName=='BODY') break;
3094
+ var p = Element.getStyle(element, 'position');
3095
+ if (p == 'relative' || p == 'absolute') break;
3096
+ }
3097
+ } while (element);
3098
+ return [valueL, valueT];
3099
+ },
3100
+
3101
+ offsetParent: function(element) {
3102
+ if (element.offsetParent) return element.offsetParent;
3103
+ if (element == document.body) return element;
3104
+
3105
+ while ((element = element.parentNode) && element != document.body)
3106
+ if (Element.getStyle(element, 'position') != 'static')
3107
+ return element;
3108
+
3109
+ return document.body;
3110
+ },
3111
+
3112
+ // caches x/y coordinate pair to use with overlap
3113
+ within: function(element, x, y) {
3114
+ if (this.includeScrollOffsets)
3115
+ return this.withinIncludingScrolloffsets(element, x, y);
3116
+ this.xcomp = x;
3117
+ this.ycomp = y;
3118
+ this.offset = this.cumulativeOffset(element);
3119
+
3120
+ return (y >= this.offset[1] &&
3121
+ y < this.offset[1] + element.offsetHeight &&
3122
+ x >= this.offset[0] &&
3123
+ x < this.offset[0] + element.offsetWidth);
3124
+ },
3125
+
3126
+ withinIncludingScrolloffsets: function(element, x, y) {
3127
+ var offsetcache = this.realOffset(element);
3128
+
3129
+ this.xcomp = x + offsetcache[0] - this.deltaX;
3130
+ this.ycomp = y + offsetcache[1] - this.deltaY;
3131
+ this.offset = this.cumulativeOffset(element);
3132
+
3133
+ return (this.ycomp >= this.offset[1] &&
3134
+ this.ycomp < this.offset[1] + element.offsetHeight &&
3135
+ this.xcomp >= this.offset[0] &&
3136
+ this.xcomp < this.offset[0] + element.offsetWidth);
3137
+ },
3138
+
3139
+ // within must be called directly before
3140
+ overlap: function(mode, element) {
3141
+ if (!mode) return 0;
3142
+ if (mode == 'vertical')
3143
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
3144
+ element.offsetHeight;
3145
+ if (mode == 'horizontal')
3146
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
3147
+ element.offsetWidth;
3148
+ },
3149
+
3150
+ page: function(forElement) {
3151
+ var valueT = 0, valueL = 0;
3152
+
3153
+ var element = forElement;
3154
+ do {
3155
+ valueT += element.offsetTop || 0;
3156
+ valueL += element.offsetLeft || 0;
3157
+
3158
+ // Safari fix
3159
+ if (element.offsetParent == document.body)
3160
+ if (Element.getStyle(element,'position')=='absolute') break;
3161
+
3162
+ } while (element = element.offsetParent);
3163
+
3164
+ element = forElement;
3165
+ do {
3166
+ if (!window.opera || element.tagName=='BODY') {
3167
+ valueT -= element.scrollTop || 0;
3168
+ valueL -= element.scrollLeft || 0;
3169
+ }
3170
+ } while (element = element.parentNode);
3171
+
3172
+ return [valueL, valueT];
3173
+ },
3174
+
3175
+ clone: function(source, target) {
3176
+ var options = Object.extend({
3177
+ setLeft: true,
3178
+ setTop: true,
3179
+ setWidth: true,
3180
+ setHeight: true,
3181
+ offsetTop: 0,
3182
+ offsetLeft: 0
3183
+ }, arguments[2] || {})
3184
+
3185
+ // find page position of source
3186
+ source = $(source);
3187
+ var p = Position.page(source);
3188
+
3189
+ // find coordinate system to use
3190
+ target = $(target);
3191
+ var delta = [0, 0];
3192
+ var parent = null;
3193
+ // delta [0,0] will do fine with position: fixed elements,
3194
+ // position:absolute needs offsetParent deltas
3195
+ if (Element.getStyle(target,'position') == 'absolute') {
3196
+ parent = Position.offsetParent(target);
3197
+ delta = Position.page(parent);
3198
+ }
3199
+
3200
+ // correct by body offsets (fixes Safari)
3201
+ if (parent == document.body) {
3202
+ delta[0] -= document.body.offsetLeft;
3203
+ delta[1] -= document.body.offsetTop;
3204
+ }
3205
+
3206
+ // set position
3207
+ if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
3208
+ if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
3209
+ if(options.setWidth) target.style.width = source.offsetWidth + 'px';
3210
+ if(options.setHeight) target.style.height = source.offsetHeight + 'px';
3211
+ },
3212
+
3213
+ absolutize: function(element) {
3214
+ element = $(element);
3215
+ if (element.style.position == 'absolute') return;
3216
+ Position.prepare();
3217
+
3218
+ var offsets = Position.positionedOffset(element);
3219
+ var top = offsets[1];
3220
+ var left = offsets[0];
3221
+ var width = element.clientWidth;
3222
+ var height = element.clientHeight;
3223
+
3224
+ element._originalLeft = left - parseFloat(element.style.left || 0);
3225
+ element._originalTop = top - parseFloat(element.style.top || 0);
3226
+ element._originalWidth = element.style.width;
3227
+ element._originalHeight = element.style.height;
3228
+
3229
+ element.style.position = 'absolute';
3230
+ element.style.top = top + 'px';
3231
+ element.style.left = left + 'px';
3232
+ element.style.width = width + 'px';
3233
+ element.style.height = height + 'px';
3234
+ },
3235
+
3236
+ relativize: function(element) {
3237
+ element = $(element);
3238
+ if (element.style.position == 'relative') return;
3239
+ Position.prepare();
3240
+
3241
+ element.style.position = 'relative';
3242
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
3243
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
3244
+
3245
+ element.style.top = top + 'px';
3246
+ element.style.left = left + 'px';
3247
+ element.style.height = element._originalHeight;
3248
+ element.style.width = element._originalWidth;
3249
+ }
3250
+ }
3251
+
3252
+ // Safari returns margins on body which is incorrect if the child is absolutely
3253
+ // positioned. For performance reasons, redefine Position.cumulativeOffset for
3254
+ // KHTML/WebKit only.
3255
+ if (Prototype.Browser.WebKit) {
3256
+ Position.cumulativeOffset = function(element) {
3257
+ var valueT = 0, valueL = 0;
3258
+ do {
3259
+ valueT += element.offsetTop || 0;
3260
+ valueL += element.offsetLeft || 0;
3261
+ if (element.offsetParent == document.body)
3262
+ if (Element.getStyle(element, 'position') == 'absolute') break;
3263
+
3264
+ element = element.offsetParent;
3265
+ } while (element);
3266
+
3267
+ return [valueL, valueT];
3268
+ }
3269
+ }
3270
+
3271
+ Element.addMethods();