reportbuilder 1.2.5 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (392) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +6 -0
  3. data/Manifest.txt +377 -0
  4. data/data/flot/API.txt +1024 -0
  5. data/data/flot/FAQ.txt +71 -0
  6. data/data/flot/LICENSE.txt +22 -0
  7. data/data/flot/Makefile +15 -0
  8. data/data/flot/NEWS.txt +340 -0
  9. data/data/flot/PLUGINS.txt +105 -0
  10. data/data/flot/README.txt +81 -0
  11. data/data/flot/examples/ajax.html +143 -0
  12. data/data/flot/examples/annotating.html +75 -0
  13. data/data/flot/examples/arrow-down.gif +0 -0
  14. data/data/flot/examples/arrow-left.gif +0 -0
  15. data/data/flot/examples/arrow-right.gif +0 -0
  16. data/data/flot/examples/arrow-up.gif +0 -0
  17. data/data/flot/examples/basic.html +38 -0
  18. data/data/flot/examples/data-eu-gdp-growth-1.json +4 -0
  19. data/data/flot/examples/data-eu-gdp-growth-2.json +4 -0
  20. data/data/flot/examples/data-eu-gdp-growth-3.json +4 -0
  21. data/data/flot/examples/data-eu-gdp-growth-4.json +4 -0
  22. data/data/flot/examples/data-eu-gdp-growth-5.json +4 -0
  23. data/data/flot/examples/data-eu-gdp-growth.json +4 -0
  24. data/data/flot/examples/data-japan-gdp-growth.json +4 -0
  25. data/data/flot/examples/data-usa-gdp-growth.json +4 -0
  26. data/data/flot/examples/dual-axis.html +39 -0
  27. data/data/flot/examples/graph-types.html +75 -0
  28. data/data/flot/examples/hs-2004-27-a-large_web.jpg +0 -0
  29. data/data/flot/examples/image.html +45 -0
  30. data/data/flot/examples/index.html +43 -0
  31. data/data/flot/examples/interacting.html +93 -0
  32. data/data/flot/examples/layout.css +6 -0
  33. data/data/flot/examples/navigate.html +118 -0
  34. data/data/flot/examples/selection.html +114 -0
  35. data/data/flot/examples/setting-options.html +65 -0
  36. data/data/flot/examples/stacking.html +77 -0
  37. data/data/flot/examples/thresholding.html +54 -0
  38. data/data/flot/examples/time.html +71 -0
  39. data/data/flot/examples/tracking.html +95 -0
  40. data/data/flot/examples/turning-series.html +98 -0
  41. data/data/flot/examples/visitors.html +90 -0
  42. data/data/flot/examples/zooming.html +98 -0
  43. data/data/flot/excanvas.js +1427 -0
  44. data/data/flot/excanvas.min.js +1 -0
  45. data/data/flot/jquery.colorhelpers.js +174 -0
  46. data/data/flot/jquery.colorhelpers.min.js +1 -0
  47. data/data/flot/jquery.flot.crosshair.js +156 -0
  48. data/data/flot/jquery.flot.crosshair.min.js +1 -0
  49. data/data/flot/jquery.flot.image.js +237 -0
  50. data/data/flot/jquery.flot.image.min.js +1 -0
  51. data/data/flot/jquery.flot.js +2119 -0
  52. data/data/flot/jquery.flot.min.js +1 -0
  53. data/data/flot/jquery.flot.navigate.js +272 -0
  54. data/data/flot/jquery.flot.navigate.min.js +1 -0
  55. data/data/flot/jquery.flot.selection.js +299 -0
  56. data/data/flot/jquery.flot.selection.min.js +1 -0
  57. data/data/flot/jquery.flot.stack.js +152 -0
  58. data/data/flot/jquery.flot.stack.min.js +1 -0
  59. data/data/flot/jquery.flot.threshold.js +103 -0
  60. data/data/flot/jquery.flot.threshold.min.js +1 -0
  61. data/data/flot/jquery.js +4376 -0
  62. data/data/flot/jquery.min.js +19 -0
  63. data/data/jqplot/MIT-LICENSE.txt +21 -0
  64. data/data/jqplot/README.txt +73 -0
  65. data/data/jqplot/changes.txt +261 -0
  66. data/data/jqplot/copyright.txt +33 -0
  67. data/data/jqplot/docs/files/MIT-LICENSE-txt.html +39 -0
  68. data/data/jqplot/docs/files/changes-txt.html +39 -0
  69. data/data/jqplot/docs/files/gpl-2-0-txt.html +39 -0
  70. data/data/jqplot/docs/files/images/background.jpg +0 -0
  71. data/data/jqplot/docs/files/images/basicline.png +0 -0
  72. data/data/jqplot/docs/files/images/basiclogaxis.png +0 -0
  73. data/data/jqplot/docs/files/images/basiclogoptions.png +0 -0
  74. data/data/jqplot/docs/files/images/basicoptions.png +0 -0
  75. data/data/jqplot/docs/files/images/dualaxis.png +0 -0
  76. data/data/jqplot/docs/files/images/logo.jpg +0 -0
  77. data/data/jqplot/docs/files/images/navdocs.png +0 -0
  78. data/data/jqplot/docs/files/images/navdocsover.png +0 -0
  79. data/data/jqplot/docs/files/images/navdownload.png +0 -0
  80. data/data/jqplot/docs/files/images/navdownloadover.png +0 -0
  81. data/data/jqplot/docs/files/images/navexamples.png +0 -0
  82. data/data/jqplot/docs/files/images/navexamplesover.png +0 -0
  83. data/data/jqplot/docs/files/images/navhome.png +0 -0
  84. data/data/jqplot/docs/files/images/navhomeover.png +0 -0
  85. data/data/jqplot/docs/files/images/new.png +0 -0
  86. data/data/jqplot/docs/files/images/sample3.png +0 -0
  87. data/data/jqplot/docs/files/images/samplesm.png +0 -0
  88. data/data/jqplot/docs/files/jqPlotCssStyling-txt.html +39 -0
  89. data/data/jqplot/docs/files/jqPlotOptions-txt.html +292 -0
  90. data/data/jqplot/docs/files/jqplot-axisLabelRenderer-js.html +47 -0
  91. data/data/jqplot/docs/files/jqplot-axisTickRenderer-js.html +69 -0
  92. data/data/jqplot/docs/files/jqplot-canvasGridRenderer-js.html +39 -0
  93. data/data/jqplot/docs/files/jqplot-core-js.html +353 -0
  94. data/data/jqplot/docs/files/jqplot-divTitleRenderer-js.html +39 -0
  95. data/data/jqplot/docs/files/jqplot-lineRenderer-js.html +53 -0
  96. data/data/jqplot/docs/files/jqplot-linearAxisRenderer-js.html +39 -0
  97. data/data/jqplot/docs/files/jqplot-markerRenderer-js.html +65 -0
  98. data/data/jqplot/docs/files/jqplot-shadowRenderer-js.html +61 -0
  99. data/data/jqplot/docs/files/jqplot-shapeRenderer-js.html +63 -0
  100. data/data/jqplot/docs/files/jqplot-themeEngine-js.html +190 -0
  101. data/data/jqplot/docs/files/optionsTutorial-txt.html +119 -0
  102. data/data/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html +45 -0
  103. data/data/jqplot/docs/files/plugins/jqplot-barRenderer-js.html +67 -0
  104. data/data/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html +53 -0
  105. data/data/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html +71 -0
  106. data/data/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html +63 -0
  107. data/data/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html +79 -0
  108. data/data/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html +46 -0
  109. data/data/jqplot/docs/files/plugins/jqplot-cursor-js.html +91 -0
  110. data/data/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html +93 -0
  111. data/data/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html +98 -0
  112. data/data/jqplot/docs/files/plugins/jqplot-dragable-js.html +45 -0
  113. data/data/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html +49 -0
  114. data/data/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html +87 -0
  115. data/data/jqplot/docs/files/plugins/jqplot-highlighter-js.html +80 -0
  116. data/data/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html +45 -0
  117. data/data/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html +49 -0
  118. data/data/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html +62 -0
  119. data/data/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html +103 -0
  120. data/data/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html +65 -0
  121. data/data/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html +93 -0
  122. data/data/jqplot/docs/files/plugins/jqplot-pointLabels-js.html +72 -0
  123. data/data/jqplot/docs/files/plugins/jqplot-trendline-js.html +67 -0
  124. data/data/jqplot/docs/files/usage-txt.html +58 -0
  125. data/data/jqplot/docs/index.html +1 -0
  126. data/data/jqplot/docs/index/Classes.html +58 -0
  127. data/data/jqplot/docs/index/Files.html +34 -0
  128. data/data/jqplot/docs/index/Functions.html +66 -0
  129. data/data/jqplot/docs/index/General.html +46 -0
  130. data/data/jqplot/docs/index/General2.html +46 -0
  131. data/data/jqplot/docs/index/General3.html +46 -0
  132. data/data/jqplot/docs/index/General4.html +50 -0
  133. data/data/jqplot/docs/index/General5.html +34 -0
  134. data/data/jqplot/docs/index/General6.html +58 -0
  135. data/data/jqplot/docs/index/Hooks.html +46 -0
  136. data/data/jqplot/docs/index/Properties.html +50 -0
  137. data/data/jqplot/docs/index/Properties2.html +50 -0
  138. data/data/jqplot/docs/index/Properties3.html +50 -0
  139. data/data/jqplot/docs/index/Properties4.html +34 -0
  140. data/data/jqplot/docs/index/Properties5.html +58 -0
  141. data/data/jqplot/docs/javascript/main.js +836 -0
  142. data/data/jqplot/docs/javascript/searchdata.js +182 -0
  143. data/data/jqplot/docs/search/ClassesA.html +20 -0
  144. data/data/jqplot/docs/search/ClassesG.html +20 -0
  145. data/data/jqplot/docs/search/ClassesJ.html +20 -0
  146. data/data/jqplot/docs/search/ClassesL.html +20 -0
  147. data/data/jqplot/docs/search/ClassesS.html +20 -0
  148. data/data/jqplot/docs/search/ClassesSymbols.html +20 -0
  149. data/data/jqplot/docs/search/ClassesT.html +20 -0
  150. data/data/jqplot/docs/search/FilesJ.html +20 -0
  151. data/data/jqplot/docs/search/FunctionsC.html +20 -0
  152. data/data/jqplot/docs/search/FunctionsD.html +20 -0
  153. data/data/jqplot/docs/search/FunctionsG.html +20 -0
  154. data/data/jqplot/docs/search/FunctionsI.html +20 -0
  155. data/data/jqplot/docs/search/FunctionsM.html +20 -0
  156. data/data/jqplot/docs/search/FunctionsN.html +20 -0
  157. data/data/jqplot/docs/search/FunctionsR.html +20 -0
  158. data/data/jqplot/docs/search/FunctionsS.html +20 -0
  159. data/data/jqplot/docs/search/FunctionsZ.html +20 -0
  160. data/data/jqplot/docs/search/GeneralA.html +20 -0
  161. data/data/jqplot/docs/search/GeneralB.html +20 -0
  162. data/data/jqplot/docs/search/GeneralC.html +20 -0
  163. data/data/jqplot/docs/search/GeneralD.html +20 -0
  164. data/data/jqplot/docs/search/GeneralE.html +20 -0
  165. data/data/jqplot/docs/search/GeneralF.html +20 -0
  166. data/data/jqplot/docs/search/GeneralG.html +20 -0
  167. data/data/jqplot/docs/search/GeneralH.html +20 -0
  168. data/data/jqplot/docs/search/GeneralI.html +20 -0
  169. data/data/jqplot/docs/search/GeneralJ.html +20 -0
  170. data/data/jqplot/docs/search/GeneralL.html +20 -0
  171. data/data/jqplot/docs/search/GeneralM.html +20 -0
  172. data/data/jqplot/docs/search/GeneralN.html +20 -0
  173. data/data/jqplot/docs/search/GeneralO.html +20 -0
  174. data/data/jqplot/docs/search/GeneralP.html +20 -0
  175. data/data/jqplot/docs/search/GeneralR.html +20 -0
  176. data/data/jqplot/docs/search/GeneralS.html +20 -0
  177. data/data/jqplot/docs/search/GeneralSymbols.html +20 -0
  178. data/data/jqplot/docs/search/GeneralT.html +20 -0
  179. data/data/jqplot/docs/search/GeneralU.html +20 -0
  180. data/data/jqplot/docs/search/GeneralV.html +20 -0
  181. data/data/jqplot/docs/search/GeneralW.html +20 -0
  182. data/data/jqplot/docs/search/GeneralX.html +20 -0
  183. data/data/jqplot/docs/search/GeneralY.html +20 -0
  184. data/data/jqplot/docs/search/GeneralZ.html +20 -0
  185. data/data/jqplot/docs/search/HooksA.html +20 -0
  186. data/data/jqplot/docs/search/HooksE.html +20 -0
  187. data/data/jqplot/docs/search/HooksJ.html +20 -0
  188. data/data/jqplot/docs/search/HooksP.html +20 -0
  189. data/data/jqplot/docs/search/NoResults.html +15 -0
  190. data/data/jqplot/docs/search/PropertiesA.html +20 -0
  191. data/data/jqplot/docs/search/PropertiesB.html +20 -0
  192. data/data/jqplot/docs/search/PropertiesC.html +20 -0
  193. data/data/jqplot/docs/search/PropertiesD.html +20 -0
  194. data/data/jqplot/docs/search/PropertiesE.html +20 -0
  195. data/data/jqplot/docs/search/PropertiesF.html +20 -0
  196. data/data/jqplot/docs/search/PropertiesG.html +20 -0
  197. data/data/jqplot/docs/search/PropertiesH.html +20 -0
  198. data/data/jqplot/docs/search/PropertiesI.html +20 -0
  199. data/data/jqplot/docs/search/PropertiesL.html +20 -0
  200. data/data/jqplot/docs/search/PropertiesM.html +20 -0
  201. data/data/jqplot/docs/search/PropertiesN.html +20 -0
  202. data/data/jqplot/docs/search/PropertiesO.html +20 -0
  203. data/data/jqplot/docs/search/PropertiesP.html +20 -0
  204. data/data/jqplot/docs/search/PropertiesR.html +20 -0
  205. data/data/jqplot/docs/search/PropertiesS.html +20 -0
  206. data/data/jqplot/docs/search/PropertiesT.html +20 -0
  207. data/data/jqplot/docs/search/PropertiesU.html +20 -0
  208. data/data/jqplot/docs/search/PropertiesV.html +20 -0
  209. data/data/jqplot/docs/search/PropertiesW.html +20 -0
  210. data/data/jqplot/docs/search/PropertiesX.html +20 -0
  211. data/data/jqplot/docs/search/PropertiesY.html +20 -0
  212. data/data/jqplot/docs/search/PropertiesZ.html +20 -0
  213. data/data/jqplot/docs/styles/1.css +767 -0
  214. data/data/jqplot/docs/styles/2.css +174 -0
  215. data/data/jqplot/docs/styles/main.css +2 -0
  216. data/data/jqplot/examples/.htaccess +1 -0
  217. data/data/jqplot/examples/OHLC.html +333 -0
  218. data/data/jqplot/examples/OHLC2.html +193 -0
  219. data/data/jqplot/examples/area.html +107 -0
  220. data/data/jqplot/examples/axisLabel.html +117 -0
  221. data/data/jqplot/examples/axisLabelsRotatedText.html +131 -0
  222. data/data/jqplot/examples/axisLabelsRotatedText2.html +155 -0
  223. data/data/jqplot/examples/barLinePieStack.html +198 -0
  224. data/data/jqplot/examples/barMissingValues.html +64 -0
  225. data/data/jqplot/examples/barTest.html +283 -0
  226. data/data/jqplot/examples/barTest2.html +74 -0
  227. data/data/jqplot/examples/bezierCurve.html +96 -0
  228. data/data/jqplot/examples/blockPlot.html +149 -0
  229. data/data/jqplot/examples/bubbleChart2.html +253 -0
  230. data/data/jqplot/examples/bubblechart.html +69 -0
  231. data/data/jqplot/examples/catchError.html +53 -0
  232. data/data/jqplot/examples/categoryHorizontalBar.html +81 -0
  233. data/data/jqplot/examples/categoryVsLinearAxes.html +74 -0
  234. data/data/jqplot/examples/chartInTable.html +33 -0
  235. data/data/jqplot/examples/customHighlighterCursorTrendline.html +72 -0
  236. data/data/jqplot/examples/customPieTests.html +73 -0
  237. data/data/jqplot/examples/dataLabels.html +192 -0
  238. data/data/jqplot/examples/dataTracking.html +91 -0
  239. data/data/jqplot/examples/donutTest.html +89 -0
  240. data/data/jqplot/examples/donutTest.js +96 -0
  241. data/data/jqplot/examples/examples.css +19 -0
  242. data/data/jqplot/examples/fillToZero.html +126 -0
  243. data/data/jqplot/examples/filledLine.html +78 -0
  244. data/data/jqplot/examples/filledLineCategoryAxis.html +80 -0
  245. data/data/jqplot/examples/funnelTest.html +82 -0
  246. data/data/jqplot/examples/funnelTest.js +74 -0
  247. data/data/jqplot/examples/gridCustomization.html +56 -0
  248. data/data/jqplot/examples/hiddenPlot.html +216 -0
  249. data/data/jqplot/examples/highlighter.html +95 -0
  250. data/data/jqplot/examples/highlighter2.html +63 -0
  251. data/data/jqplot/examples/horizontalLine.html +51 -0
  252. data/data/jqplot/examples/intticks.html +178 -0
  253. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  254. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  255. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  256. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  257. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  258. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  259. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  260. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  261. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  262. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  263. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  264. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  265. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  266. data/data/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  267. data/data/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.8.1.custom.css +486 -0
  268. data/data/jqplot/examples/jquery-ui/js/jquery-1.4.2.min.js +154 -0
  269. data/data/jqplot/examples/jquery-ui/js/jquery-ui-1.8.1.custom.min.js +756 -0
  270. data/data/jqplot/examples/legendLabels.html +205 -0
  271. data/data/jqplot/examples/legendLabels2.html +228 -0
  272. data/data/jqplot/examples/liz.zip +0 -0
  273. data/data/jqplot/examples/markerStyles.html +44 -0
  274. data/data/jqplot/examples/mekkoChart.html +217 -0
  275. data/data/jqplot/examples/meterGauge.html +132 -0
  276. data/data/jqplot/examples/meterGauge2.html +158 -0
  277. data/data/jqplot/examples/minMaxLines.html +61 -0
  278. data/data/jqplot/examples/missingValues.html +119 -0
  279. data/data/jqplot/examples/multiAxesRotatedText.html +70 -0
  280. data/data/jqplot/examples/multipleBarColors.html +149 -0
  281. data/data/jqplot/examples/multipleLines.html +47 -0
  282. data/data/jqplot/examples/multipleYAxes.html +85 -0
  283. data/data/jqplot/examples/nav.inc +35 -0
  284. data/data/jqplot/examples/pieTest.html +77 -0
  285. data/data/jqplot/examples/pieTest2.html +87 -0
  286. data/data/jqplot/examples/pieTest2.js +80 -0
  287. data/data/jqplot/examples/pieTest3.html +100 -0
  288. data/data/jqplot/examples/pointLabels.html +94 -0
  289. data/data/jqplot/examples/pointLabels2.html +47 -0
  290. data/data/jqplot/examples/prefix.html +90 -0
  291. data/data/jqplot/examples/resizablePlot.html +150 -0
  292. data/data/jqplot/examples/rotatedTickLabels.html +61 -0
  293. data/data/jqplot/examples/rotatedTickLabelsZoom.html +68 -0
  294. data/data/jqplot/examples/seriesCanvasReorder.html +93 -0
  295. data/data/jqplot/examples/seriesUpdate.html +123 -0
  296. data/data/jqplot/examples/shadowTests.html +133 -0
  297. data/data/jqplot/examples/singlePoint.html +70 -0
  298. data/data/jqplot/examples/sparkLine.html +48 -0
  299. data/data/jqplot/examples/stackedBar2.html +104 -0
  300. data/data/jqplot/examples/stackedBar3.html +76 -0
  301. data/data/jqplot/examples/stackedBarCategoryVsLinearAxes.html +121 -0
  302. data/data/jqplot/examples/stackedCategoryAxis.html +89 -0
  303. data/data/jqplot/examples/stackedFilledLine.html +77 -0
  304. data/data/jqplot/examples/stackedLine.html +56 -0
  305. data/data/jqplot/examples/test2.html +64 -0
  306. data/data/jqplot/examples/theming.html +483 -0
  307. data/data/jqplot/examples/trendlineDragableCustomization.html +79 -0
  308. data/data/jqplot/examples/verticalLine.html +52 -0
  309. data/data/jqplot/examples/waterfall.html +135 -0
  310. data/data/jqplot/examples/zoom1.html +125 -0
  311. data/data/jqplot/examples/zoom2.html +73 -0
  312. data/data/jqplot/examples/zoom3.html +69 -0
  313. data/data/jqplot/examples/zoomOptions.html +101 -0
  314. data/data/jqplot/examples/zoomProxy.html +108 -0
  315. data/data/jqplot/excanvas.js +1416 -0
  316. data/data/jqplot/excanvas.min.js +35 -0
  317. data/data/jqplot/gpl-2.0.txt +280 -0
  318. data/data/jqplot/jqPlotCssStyling.txt +53 -0
  319. data/data/jqplot/jqPlotOptions.txt +276 -0
  320. data/data/jqplot/jquery-1.4.1.min.js +152 -0
  321. data/data/jqplot/jquery-1.4.2.min.js +154 -0
  322. data/data/jqplot/jquery.jqplot.css +212 -0
  323. data/data/jqplot/jquery.jqplot.js +7004 -0
  324. data/data/jqplot/jquery.jqplot.min.css +1 -0
  325. data/data/jqplot/jquery.jqplot.min.js +34 -0
  326. data/data/jqplot/optionsTutorial.txt +239 -0
  327. data/data/jqplot/plugins/jqplot.BezierCurveRenderer.js +300 -0
  328. data/data/jqplot/plugins/jqplot.BezierCurveRenderer.min.js +34 -0
  329. data/data/jqplot/plugins/jqplot.barRenderer.js +629 -0
  330. data/data/jqplot/plugins/jqplot.barRenderer.min.js +34 -0
  331. data/data/jqplot/plugins/jqplot.blockRenderer.js +221 -0
  332. data/data/jqplot/plugins/jqplot.blockRenderer.min.js +34 -0
  333. data/data/jqplot/plugins/jqplot.bubbleRenderer.js +724 -0
  334. data/data/jqplot/plugins/jqplot.bubbleRenderer.min.js +34 -0
  335. data/data/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js +187 -0
  336. data/data/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js +34 -0
  337. data/data/jqplot/plugins/jqplot.canvasAxisTickRenderer.js +226 -0
  338. data/data/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js +34 -0
  339. data/data/jqplot/plugins/jqplot.canvasTextRenderer.js +408 -0
  340. data/data/jqplot/plugins/jqplot.canvasTextRenderer.min.js +34 -0
  341. data/data/jqplot/plugins/jqplot.categoryAxisRenderer.js +630 -0
  342. data/data/jqplot/plugins/jqplot.categoryAxisRenderer.min.js +34 -0
  343. data/data/jqplot/plugins/jqplot.cursor.js +952 -0
  344. data/data/jqplot/plugins/jqplot.cursor.min.js +34 -0
  345. data/data/jqplot/plugins/jqplot.dateAxisRenderer.js +313 -0
  346. data/data/jqplot/plugins/jqplot.dateAxisRenderer.min.js +34 -0
  347. data/data/jqplot/plugins/jqplot.donutRenderer.js +876 -0
  348. data/data/jqplot/plugins/jqplot.donutRenderer.min.js +34 -0
  349. data/data/jqplot/plugins/jqplot.dragable.js +206 -0
  350. data/data/jqplot/plugins/jqplot.dragable.min.js +34 -0
  351. data/data/jqplot/plugins/jqplot.enhancedLegendRenderer.js +186 -0
  352. data/data/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js +34 -0
  353. data/data/jqplot/plugins/jqplot.funnelRenderer.js +918 -0
  354. data/data/jqplot/plugins/jqplot.funnelRenderer.min.js +34 -0
  355. data/data/jqplot/plugins/jqplot.highlighter.js +374 -0
  356. data/data/jqplot/plugins/jqplot.highlighter.min.js +34 -0
  357. data/data/jqplot/plugins/jqplot.logAxisRenderer.js +434 -0
  358. data/data/jqplot/plugins/jqplot.logAxisRenderer.min.js +34 -0
  359. data/data/jqplot/plugins/jqplot.mekkoAxisRenderer.js +595 -0
  360. data/data/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js +34 -0
  361. data/data/jqplot/plugins/jqplot.mekkoRenderer.js +419 -0
  362. data/data/jqplot/plugins/jqplot.mekkoRenderer.min.js +34 -0
  363. data/data/jqplot/plugins/jqplot.meterGaugeRenderer.js +1112 -0
  364. data/data/jqplot/plugins/jqplot.meterGaugeRenderer.min.js +34 -0
  365. data/data/jqplot/plugins/jqplot.ohlcRenderer.js +343 -0
  366. data/data/jqplot/plugins/jqplot.ohlcRenderer.min.js +34 -0
  367. data/data/jqplot/plugins/jqplot.pieRenderer.js +749 -0
  368. data/data/jqplot/plugins/jqplot.pieRenderer.min.js +34 -0
  369. data/data/jqplot/plugins/jqplot.pointLabels.js +325 -0
  370. data/data/jqplot/plugins/jqplot.pointLabels.min.js +34 -0
  371. data/data/jqplot/plugins/jqplot.trendline.js +208 -0
  372. data/data/jqplot/plugins/jqplot.trendline.min.js +34 -0
  373. data/data/jqplot/usage.txt +119 -0
  374. data/examples/graph.rb +17 -0
  375. data/lib/reportbuilder.rb +21 -2
  376. data/lib/reportbuilder/builder.rb +31 -3
  377. data/lib/reportbuilder/builder/html.rb +39 -5
  378. data/lib/reportbuilder/graph.rb +252 -0
  379. data/lib/reportbuilder/graph/html_flot.rb +149 -0
  380. data/lib/reportbuilder/graph/html_jqplot.rb +145 -0
  381. data/lib/reportbuilder/image.rb +178 -78
  382. data/lib/reportbuilder/table/rtfbuilder.rb +2 -2
  383. data/test/helper_test.rb +6 -7
  384. data/test/test_graph.rb +44 -0
  385. data/test/test_graph_html_flot.rb +36 -0
  386. data/test/test_graph_html_jqplot.rb +36 -0
  387. data/test/test_html.rb +4 -7
  388. data/test/test_image.rb +35 -7
  389. data/test/test_reportbuilder.rb +4 -6
  390. data/test/test_table.rb +0 -2
  391. metadata +402 -7
  392. metadata.gz.sig +4 -2
@@ -0,0 +1,836 @@
1
+ // This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
2
+ // Natural Docs is licensed under the GPL
3
+
4
+
5
+ //
6
+ // Browser Styles
7
+ // ____________________________________________________________________________
8
+
9
+ var agt=navigator.userAgent.toLowerCase();
10
+ var browserType;
11
+ var browserVer;
12
+
13
+ if (agt.indexOf("opera") != -1)
14
+ {
15
+ browserType = "Opera";
16
+
17
+ if (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1)
18
+ { browserVer = "Opera7"; }
19
+ else if (agt.indexOf("opera 8") != -1 || agt.indexOf("opera/8") != -1)
20
+ { browserVer = "Opera8"; }
21
+ else if (agt.indexOf("opera 9") != -1 || agt.indexOf("opera/9") != -1)
22
+ { browserVer = "Opera9"; }
23
+ }
24
+
25
+ else if (agt.indexOf("applewebkit") != -1)
26
+ {
27
+ browserType = "Safari";
28
+
29
+ if (agt.indexOf("version/3") != -1)
30
+ { browserVer = "Safari3"; }
31
+ else if (agt.indexOf("safari/4") != -1)
32
+ { browserVer = "Safari2"; }
33
+ }
34
+
35
+ else if (agt.indexOf("khtml") != -1)
36
+ {
37
+ browserType = "Konqueror";
38
+ }
39
+
40
+ else if (agt.indexOf("msie") != -1)
41
+ {
42
+ browserType = "IE";
43
+
44
+ if (agt.indexOf("msie 6") != -1)
45
+ { browserVer = "IE6"; }
46
+ else if (agt.indexOf("msie 7") != -1)
47
+ { browserVer = "IE7"; }
48
+ }
49
+
50
+ else if (agt.indexOf("gecko") != -1)
51
+ {
52
+ browserType = "Firefox";
53
+
54
+ if (agt.indexOf("rv:1.7") != -1)
55
+ { browserVer = "Firefox1"; }
56
+ else if (agt.indexOf("rv:1.8)") != -1 || agt.indexOf("rv:1.8.0") != -1)
57
+ { browserVer = "Firefox15"; }
58
+ else if (agt.indexOf("rv:1.8.1") != -1)
59
+ { browserVer = "Firefox2"; }
60
+ }
61
+
62
+
63
+ //
64
+ // Support Functions
65
+ // ____________________________________________________________________________
66
+
67
+
68
+ function GetXPosition(item)
69
+ {
70
+ var position = 0;
71
+
72
+ if (item.offsetWidth != null)
73
+ {
74
+ while (item != document.body && item != null)
75
+ {
76
+ position += item.offsetLeft;
77
+ item = item.offsetParent;
78
+ };
79
+ };
80
+
81
+ return position;
82
+ };
83
+
84
+
85
+ function GetYPosition(item)
86
+ {
87
+ var position = 0;
88
+
89
+ if (item.offsetWidth != null)
90
+ {
91
+ while (item != document.body && item != null)
92
+ {
93
+ position += item.offsetTop;
94
+ item = item.offsetParent;
95
+ };
96
+ };
97
+
98
+ return position;
99
+ };
100
+
101
+
102
+ function MoveToPosition(item, x, y)
103
+ {
104
+ // Opera 5 chokes on the px extension, so it can use the Microsoft one instead.
105
+
106
+ if (item.style.left != null)
107
+ {
108
+ item.style.left = x + "px";
109
+ item.style.top = y + "px";
110
+ }
111
+ else if (item.style.pixelLeft != null)
112
+ {
113
+ item.style.pixelLeft = x;
114
+ item.style.pixelTop = y;
115
+ };
116
+ };
117
+
118
+
119
+ //
120
+ // Menu
121
+ // ____________________________________________________________________________
122
+
123
+
124
+ function ToggleMenu(id)
125
+ {
126
+ if (!window.document.getElementById)
127
+ { return; };
128
+
129
+ var display = window.document.getElementById(id).style.display;
130
+
131
+ if (display == "none")
132
+ { display = "block"; }
133
+ else
134
+ { display = "none"; }
135
+
136
+ window.document.getElementById(id).style.display = display;
137
+ }
138
+
139
+ function HideAllBut(ids, max)
140
+ {
141
+ if (document.getElementById)
142
+ {
143
+ ids.sort( function(a,b) { return a - b; } );
144
+ var number = 1;
145
+
146
+ while (number < max)
147
+ {
148
+ if (ids.length > 0 && number == ids[0])
149
+ { ids.shift(); }
150
+ else
151
+ {
152
+ document.getElementById("MGroupContent" + number).style.display = "none";
153
+ };
154
+
155
+ number++;
156
+ };
157
+ };
158
+ }
159
+
160
+
161
+ //
162
+ // Tooltips
163
+ // ____________________________________________________________________________
164
+
165
+
166
+ var tooltipTimer = 0;
167
+
168
+ function ShowTip(event, tooltipID, linkID)
169
+ {
170
+ if (tooltipTimer)
171
+ { clearTimeout(tooltipTimer); };
172
+
173
+ var docX = event.clientX + window.pageXOffset;
174
+ var docY = event.clientY + window.pageYOffset;
175
+
176
+ var showCommand = "ReallyShowTip('" + tooltipID + "', '" + linkID + "', " + docX + ", " + docY + ")";
177
+
178
+ tooltipTimer = setTimeout(showCommand, 1000);
179
+ }
180
+
181
+ function ReallyShowTip(tooltipID, linkID, docX, docY)
182
+ {
183
+ tooltipTimer = 0;
184
+
185
+ var tooltip;
186
+ var link;
187
+
188
+ if (document.getElementById)
189
+ {
190
+ tooltip = document.getElementById(tooltipID);
191
+ link = document.getElementById(linkID);
192
+ }
193
+ /* else if (document.all)
194
+ {
195
+ tooltip = eval("document.all['" + tooltipID + "']");
196
+ link = eval("document.all['" + linkID + "']");
197
+ }
198
+ */
199
+ if (tooltip)
200
+ {
201
+ var left = GetXPosition(link);
202
+ var top = GetYPosition(link);
203
+ top += link.offsetHeight;
204
+
205
+
206
+ // The fallback method is to use the mouse X and Y relative to the document. We use a separate if and test if its a number
207
+ // in case some browser snuck through the above if statement but didn't support everything.
208
+
209
+ if (!isFinite(top) || top == 0)
210
+ {
211
+ left = docX;
212
+ top = docY;
213
+ }
214
+
215
+ // Some spacing to get it out from under the cursor.
216
+
217
+ top += 10;
218
+
219
+ // Make sure the tooltip doesnt get smushed by being too close to the edge, or in some browsers, go off the edge of the
220
+ // page. We do it here because Konqueror does get offsetWidth right even if it doesnt get the positioning right.
221
+
222
+ if (tooltip.offsetWidth != null)
223
+ {
224
+ var width = tooltip.offsetWidth;
225
+ var docWidth = document.body.clientWidth;
226
+
227
+ if (left + width > docWidth)
228
+ { left = docWidth - width - 1; }
229
+
230
+ // If there's a horizontal scroll bar we could go past zero because it's using the page width, not the window width.
231
+ if (left < 0)
232
+ { left = 0; };
233
+ }
234
+
235
+ MoveToPosition(tooltip, left, top);
236
+ tooltip.style.visibility = "visible";
237
+ }
238
+ }
239
+
240
+ function HideTip(tooltipID)
241
+ {
242
+ if (tooltipTimer)
243
+ {
244
+ clearTimeout(tooltipTimer);
245
+ tooltipTimer = 0;
246
+ }
247
+
248
+ var tooltip;
249
+
250
+ if (document.getElementById)
251
+ { tooltip = document.getElementById(tooltipID); }
252
+ else if (document.all)
253
+ { tooltip = eval("document.all['" + tooltipID + "']"); }
254
+
255
+ if (tooltip)
256
+ { tooltip.style.visibility = "hidden"; }
257
+ }
258
+
259
+
260
+ //
261
+ // Blockquote fix for IE
262
+ // ____________________________________________________________________________
263
+
264
+
265
+ function NDOnLoad()
266
+ {
267
+ if (browserVer == "IE6")
268
+ {
269
+ var scrollboxes = document.getElementsByTagName('blockquote');
270
+
271
+ if (scrollboxes.item(0))
272
+ {
273
+ NDDoResize();
274
+ window.onresize=NDOnResize;
275
+ };
276
+ };
277
+ };
278
+
279
+
280
+ var resizeTimer = 0;
281
+
282
+ function NDOnResize()
283
+ {
284
+ if (resizeTimer != 0)
285
+ { clearTimeout(resizeTimer); };
286
+
287
+ resizeTimer = setTimeout(NDDoResize, 250);
288
+ };
289
+
290
+
291
+ function NDDoResize()
292
+ {
293
+ var scrollboxes = document.getElementsByTagName('blockquote');
294
+
295
+ var i;
296
+ var item;
297
+
298
+ i = 0;
299
+ while (item = scrollboxes.item(i))
300
+ {
301
+ item.style.width = 100;
302
+ i++;
303
+ };
304
+
305
+ i = 0;
306
+ while (item = scrollboxes.item(i))
307
+ {
308
+ item.style.width = item.parentNode.offsetWidth;
309
+ i++;
310
+ };
311
+
312
+ clearTimeout(resizeTimer);
313
+ resizeTimer = 0;
314
+ }
315
+
316
+
317
+
318
+ /* ________________________________________________________________________________________________________
319
+
320
+ Class: SearchPanel
321
+ ________________________________________________________________________________________________________
322
+
323
+ A class handling everything associated with the search panel.
324
+
325
+ Parameters:
326
+
327
+ name - The name of the global variable that will be storing this instance. Is needed to be able to set timeouts.
328
+ mode - The mode the search is going to work in. Pass <NaturalDocs::Builder::Base->CommandLineOption()>, so the
329
+ value will be something like "HTML" or "FramedHTML".
330
+
331
+ ________________________________________________________________________________________________________
332
+ */
333
+
334
+
335
+ function SearchPanel(name, mode, resultsPath)
336
+ {
337
+ if (!name || !mode || !resultsPath)
338
+ { alert("Incorrect parameters to SearchPanel."); };
339
+
340
+
341
+ // Group: Variables
342
+ // ________________________________________________________________________
343
+
344
+ /*
345
+ var: name
346
+ The name of the global variable that will be storing this instance of the class.
347
+ */
348
+ this.name = name;
349
+
350
+ /*
351
+ var: mode
352
+ The mode the search is going to work in, such as "HTML" or "FramedHTML".
353
+ */
354
+ this.mode = mode;
355
+
356
+ /*
357
+ var: resultsPath
358
+ The relative path from the current HTML page to the results page directory.
359
+ */
360
+ this.resultsPath = resultsPath;
361
+
362
+ /*
363
+ var: keyTimeout
364
+ The timeout used between a keystroke and when a search is performed.
365
+ */
366
+ this.keyTimeout = 0;
367
+
368
+ /*
369
+ var: keyTimeoutLength
370
+ The length of <keyTimeout> in thousandths of a second.
371
+ */
372
+ this.keyTimeoutLength = 500;
373
+
374
+ /*
375
+ var: lastSearchValue
376
+ The last search string executed, or an empty string if none.
377
+ */
378
+ this.lastSearchValue = "";
379
+
380
+ /*
381
+ var: lastResultsPage
382
+ The last results page. The value is only relevant if <lastSearchValue> is set.
383
+ */
384
+ this.lastResultsPage = "";
385
+
386
+ /*
387
+ var: deactivateTimeout
388
+
389
+ The timeout used between when a control is deactivated and when the entire panel is deactivated. Is necessary
390
+ because a control may be deactivated in favor of another control in the same panel, in which case it should stay
391
+ active.
392
+ */
393
+ this.deactivateTimout = 0;
394
+
395
+ /*
396
+ var: deactivateTimeoutLength
397
+ The length of <deactivateTimeout> in thousandths of a second.
398
+ */
399
+ this.deactivateTimeoutLength = 200;
400
+
401
+
402
+
403
+
404
+ // Group: DOM Elements
405
+ // ________________________________________________________________________
406
+
407
+
408
+ // Function: DOMSearchField
409
+ this.DOMSearchField = function()
410
+ { return document.getElementById("MSearchField"); };
411
+
412
+ // Function: DOMSearchType
413
+ this.DOMSearchType = function()
414
+ { return document.getElementById("MSearchType"); };
415
+
416
+ // Function: DOMPopupSearchResults
417
+ this.DOMPopupSearchResults = function()
418
+ { return document.getElementById("MSearchResults"); };
419
+
420
+ // Function: DOMPopupSearchResultsWindow
421
+ this.DOMPopupSearchResultsWindow = function()
422
+ { return document.getElementById("MSearchResultsWindow"); };
423
+
424
+ // Function: DOMSearchPanel
425
+ this.DOMSearchPanel = function()
426
+ { return document.getElementById("MSearchPanel"); };
427
+
428
+
429
+
430
+
431
+ // Group: Event Handlers
432
+ // ________________________________________________________________________
433
+
434
+
435
+ /*
436
+ Function: OnSearchFieldFocus
437
+ Called when focus is added or removed from the search field.
438
+ */
439
+ this.OnSearchFieldFocus = function(isActive)
440
+ {
441
+ this.Activate(isActive);
442
+ };
443
+
444
+
445
+ /*
446
+ Function: OnSearchFieldChange
447
+ Called when the content of the search field is changed.
448
+ */
449
+ this.OnSearchFieldChange = function()
450
+ {
451
+ if (this.keyTimeout)
452
+ {
453
+ clearTimeout(this.keyTimeout);
454
+ this.keyTimeout = 0;
455
+ };
456
+
457
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
458
+
459
+ if (searchValue != this.lastSearchValue)
460
+ {
461
+ if (searchValue != "")
462
+ {
463
+ this.keyTimeout = setTimeout(this.name + ".Search()", this.keyTimeoutLength);
464
+ }
465
+ else
466
+ {
467
+ if (this.mode == "HTML")
468
+ { this.DOMPopupSearchResultsWindow().style.display = "none"; };
469
+ this.lastSearchValue = "";
470
+ };
471
+ };
472
+ };
473
+
474
+
475
+ /*
476
+ Function: OnSearchTypeFocus
477
+ Called when focus is added or removed from the search type.
478
+ */
479
+ this.OnSearchTypeFocus = function(isActive)
480
+ {
481
+ this.Activate(isActive);
482
+ };
483
+
484
+
485
+ /*
486
+ Function: OnSearchTypeChange
487
+ Called when the search type is changed.
488
+ */
489
+ this.OnSearchTypeChange = function()
490
+ {
491
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
492
+
493
+ if (searchValue != "")
494
+ {
495
+ this.Search();
496
+ };
497
+ };
498
+
499
+
500
+
501
+ // Group: Action Functions
502
+ // ________________________________________________________________________
503
+
504
+
505
+ /*
506
+ Function: CloseResultsWindow
507
+ Closes the results window.
508
+ */
509
+ this.CloseResultsWindow = function()
510
+ {
511
+ this.DOMPopupSearchResultsWindow().style.display = "none";
512
+ this.Activate(false, true);
513
+ };
514
+
515
+
516
+ /*
517
+ Function: Search
518
+ Performs a search.
519
+ */
520
+ this.Search = function()
521
+ {
522
+ this.keyTimeout = 0;
523
+
524
+ var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
525
+ var searchTopic = this.DOMSearchType().value;
526
+
527
+ var pageExtension = searchValue.substr(0,1);
528
+
529
+ if (pageExtension.match(/^[a-z]/i))
530
+ { pageExtension = pageExtension.toUpperCase(); }
531
+ else if (pageExtension.match(/^[0-9]/))
532
+ { pageExtension = 'Numbers'; }
533
+ else
534
+ { pageExtension = "Symbols"; };
535
+
536
+ var resultsPage;
537
+ var resultsPageWithSearch;
538
+ var hasResultsPage;
539
+
540
+ // indexSectionsWithContent is defined in searchdata.js
541
+ if (indexSectionsWithContent[searchTopic][pageExtension] == true)
542
+ {
543
+ resultsPage = this.resultsPath + '/' + searchTopic + pageExtension + '.html';
544
+ resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
545
+ hasResultsPage = true;
546
+ }
547
+ else
548
+ {
549
+ resultsPage = this.resultsPath + '/NoResults.html';
550
+ resultsPageWithSearch = resultsPage;
551
+ hasResultsPage = false;
552
+ };
553
+
554
+ var resultsFrame;
555
+ if (this.mode == "HTML")
556
+ { resultsFrame = window.frames.MSearchResults; }
557
+ else if (this.mode == "FramedHTML")
558
+ { resultsFrame = window.top.frames['Content']; };
559
+
560
+
561
+ if (resultsPage != this.lastResultsPage ||
562
+
563
+ // Bug in IE. If everything becomes hidden in a run, none of them will be able to be reshown in the next for some
564
+ // reason. It counts the right number of results, and you can even read the display as "block" after setting it, but it
565
+ // just doesn't work in IE 6 or IE 7. So if we're on the right page but the previous search had no results, reload the
566
+ // page anyway to get around the bug.
567
+ (browserType == "IE" && hasResultsPage &&
568
+ (!resultsFrame.searchResults || resultsFrame.searchResults.lastMatchCount == 0)) )
569
+
570
+ {
571
+ resultsFrame.location.href = resultsPageWithSearch;
572
+ }
573
+
574
+ // So if the results page is right and there's no IE bug, reperform the search on the existing page. We have to check if there
575
+ // are results because NoResults.html doesn't have any JavaScript, and it would be useless to do anything on that page even
576
+ // if it did.
577
+ else if (hasResultsPage)
578
+ {
579
+ // We need to check if this exists in case the frame is present but didn't finish loading.
580
+ if (resultsFrame.searchResults)
581
+ { resultsFrame.searchResults.Search(searchValue); }
582
+
583
+ // Otherwise just reload instead of waiting.
584
+ else
585
+ { resultsFrame.location.href = resultsPageWithSearch; };
586
+ };
587
+
588
+
589
+ var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
590
+
591
+ if (this.mode == "HTML" && domPopupSearchResultsWindow.style.display != "block")
592
+ {
593
+ var domSearchType = this.DOMSearchType();
594
+
595
+ var left = GetXPosition(domSearchType);
596
+ var top = GetYPosition(domSearchType) + domSearchType.offsetHeight;
597
+
598
+ MoveToPosition(domPopupSearchResultsWindow, left, top);
599
+ domPopupSearchResultsWindow.style.display = 'block';
600
+ };
601
+
602
+
603
+ this.lastSearchValue = searchValue;
604
+ this.lastResultsPage = resultsPage;
605
+ };
606
+
607
+
608
+
609
+ // Group: Activation Functions
610
+ // Functions that handle whether the entire panel is active or not.
611
+ // ________________________________________________________________________
612
+
613
+
614
+ /*
615
+ Function: Activate
616
+
617
+ Activates or deactivates the search panel, resetting things to their default values if necessary. You can call this on every
618
+ control's OnBlur() and it will handle not deactivating the entire panel when focus is just switching between them transparently.
619
+
620
+ Parameters:
621
+
622
+ isActive - Whether you're activating or deactivating the panel.
623
+ ignoreDeactivateDelay - Set if you're positive the action will deactivate the panel and thus want to skip the delay.
624
+ */
625
+ this.Activate = function(isActive, ignoreDeactivateDelay)
626
+ {
627
+ // We want to ignore isActive being false while the results window is open.
628
+ if (isActive || (this.mode == "HTML" && this.DOMPopupSearchResultsWindow().style.display == "block"))
629
+ {
630
+ if (this.inactivateTimeout)
631
+ {
632
+ clearTimeout(this.inactivateTimeout);
633
+ this.inactivateTimeout = 0;
634
+ };
635
+
636
+ this.DOMSearchPanel().className = 'MSearchPanelActive';
637
+
638
+ var searchField = this.DOMSearchField();
639
+
640
+ if (searchField.value == 'Search')
641
+ { searchField.value = ""; }
642
+ }
643
+ else if (!ignoreDeactivateDelay)
644
+ {
645
+ this.inactivateTimeout = setTimeout(this.name + ".InactivateAfterTimeout()", this.inactivateTimeoutLength);
646
+ }
647
+ else
648
+ {
649
+ this.InactivateAfterTimeout();
650
+ };
651
+ };
652
+
653
+
654
+ /*
655
+ Function: InactivateAfterTimeout
656
+
657
+ Called by <inactivateTimeout>, which is set by <Activate()>. Inactivation occurs on a timeout because a control may
658
+ receive OnBlur() when focus is really transferring to another control in the search panel. In this case we don't want to
659
+ actually deactivate the panel because not only would that cause a visible flicker but it could also reset the search value.
660
+ So by doing it on a timeout instead, there's a short period where the second control's OnFocus() can cancel the deactivation.
661
+ */
662
+ this.InactivateAfterTimeout = function()
663
+ {
664
+ this.inactivateTimeout = 0;
665
+
666
+ this.DOMSearchPanel().className = 'MSearchPanelInactive';
667
+ this.DOMSearchField().value = "Search";
668
+
669
+ this.lastSearchValue = "";
670
+ this.lastResultsPage = "";
671
+ };
672
+ };
673
+
674
+
675
+
676
+
677
+ /* ________________________________________________________________________________________________________
678
+
679
+ Class: SearchResults
680
+ _________________________________________________________________________________________________________
681
+
682
+ The class that handles everything on the search results page.
683
+ _________________________________________________________________________________________________________
684
+ */
685
+
686
+
687
+ function SearchResults(name, mode)
688
+ {
689
+ /*
690
+ var: mode
691
+ The mode the search is going to work in, such as "HTML" or "FramedHTML".
692
+ */
693
+ this.mode = mode;
694
+
695
+ /*
696
+ var: lastMatchCount
697
+ The number of matches from the last run of <Search()>.
698
+ */
699
+ this.lastMatchCount = 0;
700
+
701
+
702
+ /*
703
+ Function: Toggle
704
+ Toggles the visibility of the passed element ID.
705
+ */
706
+ this.Toggle = function(id)
707
+ {
708
+ if (this.mode == "FramedHTML")
709
+ { return; };
710
+
711
+ var parentElement = document.getElementById(id);
712
+
713
+ var element = parentElement.firstChild;
714
+
715
+ while (element && element != parentElement)
716
+ {
717
+ if (element.nodeName == 'DIV' && element.className == 'ISubIndex')
718
+ {
719
+ if (element.style.display == 'block')
720
+ { element.style.display = "none"; }
721
+ else
722
+ { element.style.display = 'block'; }
723
+ };
724
+
725
+ if (element.nodeName == 'DIV' && element.hasChildNodes())
726
+ { element = element.firstChild; }
727
+ else if (element.nextSibling)
728
+ { element = element.nextSibling; }
729
+ else
730
+ {
731
+ do
732
+ {
733
+ element = element.parentNode;
734
+ }
735
+ while (element && element != parentElement && !element.nextSibling);
736
+
737
+ if (element && element != parentElement)
738
+ { element = element.nextSibling; };
739
+ };
740
+ };
741
+ };
742
+
743
+
744
+ /*
745
+ Function: Search
746
+
747
+ Searches for the passed string. If there is no parameter, it takes it from the URL query.
748
+
749
+ Always returns true, since other documents may try to call it and that may or may not be possible.
750
+ */
751
+ this.Search = function(search)
752
+ {
753
+ if (!search)
754
+ {
755
+ search = window.location.search;
756
+ search = search.substring(1); // Remove the leading ?
757
+ search = unescape(search);
758
+ };
759
+
760
+ search = search.replace(/^ +/, "");
761
+ search = search.replace(/ +$/, "");
762
+ search = search.toLowerCase();
763
+
764
+ if (search.match(/[^a-z0-9]/)) // Just a little speedup so it doesn't have to go through the below unnecessarily.
765
+ {
766
+ search = search.replace(/\_/g, "_und");
767
+ search = search.replace(/\ +/gi, "_spc");
768
+ search = search.replace(/\~/g, "_til");
769
+ search = search.replace(/\!/g, "_exc");
770
+ search = search.replace(/\@/g, "_att");
771
+ search = search.replace(/\#/g, "_num");
772
+ search = search.replace(/\$/g, "_dol");
773
+ search = search.replace(/\%/g, "_pct");
774
+ search = search.replace(/\^/g, "_car");
775
+ search = search.replace(/\&/g, "_amp");
776
+ search = search.replace(/\*/g, "_ast");
777
+ search = search.replace(/\(/g, "_lpa");
778
+ search = search.replace(/\)/g, "_rpa");
779
+ search = search.replace(/\-/g, "_min");
780
+ search = search.replace(/\+/g, "_plu");
781
+ search = search.replace(/\=/g, "_equ");
782
+ search = search.replace(/\{/g, "_lbc");
783
+ search = search.replace(/\}/g, "_rbc");
784
+ search = search.replace(/\[/g, "_lbk");
785
+ search = search.replace(/\]/g, "_rbk");
786
+ search = search.replace(/\:/g, "_col");
787
+ search = search.replace(/\;/g, "_sco");
788
+ search = search.replace(/\"/g, "_quo");
789
+ search = search.replace(/\'/g, "_apo");
790
+ search = search.replace(/\</g, "_lan");
791
+ search = search.replace(/\>/g, "_ran");
792
+ search = search.replace(/\,/g, "_com");
793
+ search = search.replace(/\./g, "_per");
794
+ search = search.replace(/\?/g, "_que");
795
+ search = search.replace(/\//g, "_sla");
796
+ search = search.replace(/[^a-z0-9\_]i/gi, "_zzz");
797
+ };
798
+
799
+ var resultRows = document.getElementsByTagName("div");
800
+ var matches = 0;
801
+
802
+ var i = 0;
803
+ while (i < resultRows.length)
804
+ {
805
+ var row = resultRows.item(i);
806
+
807
+ if (row.className == "SRResult")
808
+ {
809
+ var rowMatchName = row.id.toLowerCase();
810
+ rowMatchName = rowMatchName.replace(/^sr\d*_/, '');
811
+
812
+ if (search.length <= rowMatchName.length && rowMatchName.substr(0, search.length) == search)
813
+ {
814
+ row.style.display = "block";
815
+ matches++;
816
+ }
817
+ else
818
+ { row.style.display = "none"; };
819
+ };
820
+
821
+ i++;
822
+ };
823
+
824
+ document.getElementById("Searching").style.display="none";
825
+
826
+ if (matches == 0)
827
+ { document.getElementById("NoMatches").style.display="block"; }
828
+ else
829
+ { document.getElementById("NoMatches").style.display="none"; }
830
+
831
+ this.lastMatchCount = matches;
832
+
833
+ return true;
834
+ };
835
+ };
836
+